@adoptai/genui-components 0.1.32

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 (554) hide show
  1. package/README.md +56 -0
  2. package/dist/builders/BuilderForm.d.ts +25 -0
  3. package/dist/builders/BuilderForm.d.ts.map +1 -0
  4. package/dist/builders/BuilderRecap.d.ts +12 -0
  5. package/dist/builders/BuilderRecap.d.ts.map +1 -0
  6. package/dist/builders/ContextSlot.d.ts +6 -0
  7. package/dist/builders/ContextSlot.d.ts.map +1 -0
  8. package/dist/builders/EscalationCard.d.ts +12 -0
  9. package/dist/builders/EscalationCard.d.ts.map +1 -0
  10. package/dist/builders/FieldRenderer.d.ts +12 -0
  11. package/dist/builders/FieldRenderer.d.ts.map +1 -0
  12. package/dist/builders/FormBuilder.d.ts +13 -0
  13. package/dist/builders/FormBuilder.d.ts.map +1 -0
  14. package/dist/builders/StepperBuilder.d.ts +20 -0
  15. package/dist/builders/StepperBuilder.d.ts.map +1 -0
  16. package/dist/builders/fields.d.ts +27 -0
  17. package/dist/builders/fields.d.ts.map +1 -0
  18. package/dist/builders/hooks.d.ts +22 -0
  19. package/dist/builders/hooks.d.ts.map +1 -0
  20. package/dist/builders/index.d.ts +20 -0
  21. package/dist/builders/index.d.ts.map +1 -0
  22. package/dist/builders/resolver.d.ts +10 -0
  23. package/dist/builders/resolver.d.ts.map +1 -0
  24. package/dist/builders/schemas.d.ts +130 -0
  25. package/dist/builders/schemas.d.ts.map +1 -0
  26. package/dist/builders/validateBuilder.d.ts +10 -0
  27. package/dist/builders/validateBuilder.d.ts.map +1 -0
  28. package/dist/composites/aging-report/resolver.cjs +339 -0
  29. package/dist/composites/aging-report/resolver.cjs.map +1 -0
  30. package/dist/composites/aging-report/resolver.d.ts +3 -0
  31. package/dist/composites/aging-report/resolver.d.ts.map +1 -0
  32. package/dist/composites/aging-report/resolver.js +337 -0
  33. package/dist/composites/aging-report/resolver.js.map +1 -0
  34. package/dist/composites/alert/resolver.cjs +510 -0
  35. package/dist/composites/alert/resolver.cjs.map +1 -0
  36. package/dist/composites/alert/resolver.d.ts +3 -0
  37. package/dist/composites/alert/resolver.d.ts.map +1 -0
  38. package/dist/composites/alert/resolver.js +508 -0
  39. package/dist/composites/alert/resolver.js.map +1 -0
  40. package/dist/composites/allocation-donut/resolver.cjs +363 -0
  41. package/dist/composites/allocation-donut/resolver.cjs.map +1 -0
  42. package/dist/composites/allocation-donut/resolver.d.ts +3 -0
  43. package/dist/composites/allocation-donut/resolver.d.ts.map +1 -0
  44. package/dist/composites/allocation-donut/resolver.js +361 -0
  45. package/dist/composites/allocation-donut/resolver.js.map +1 -0
  46. package/dist/composites/amortization-table/resolver.cjs +692 -0
  47. package/dist/composites/amortization-table/resolver.cjs.map +1 -0
  48. package/dist/composites/amortization-table/resolver.d.ts +3 -0
  49. package/dist/composites/amortization-table/resolver.d.ts.map +1 -0
  50. package/dist/composites/amortization-table/resolver.js +690 -0
  51. package/dist/composites/amortization-table/resolver.js.map +1 -0
  52. package/dist/composites/area-chart/resolver.cjs +334 -0
  53. package/dist/composites/area-chart/resolver.cjs.map +1 -0
  54. package/dist/composites/area-chart/resolver.d.ts +3 -0
  55. package/dist/composites/area-chart/resolver.d.ts.map +1 -0
  56. package/dist/composites/area-chart/resolver.js +332 -0
  57. package/dist/composites/area-chart/resolver.js.map +1 -0
  58. package/dist/composites/audit-trail/resolver.cjs +564 -0
  59. package/dist/composites/audit-trail/resolver.cjs.map +1 -0
  60. package/dist/composites/audit-trail/resolver.d.ts +3 -0
  61. package/dist/composites/audit-trail/resolver.d.ts.map +1 -0
  62. package/dist/composites/audit-trail/resolver.js +562 -0
  63. package/dist/composites/audit-trail/resolver.js.map +1 -0
  64. package/dist/composites/balance-sheet/resolver.cjs +475 -0
  65. package/dist/composites/balance-sheet/resolver.cjs.map +1 -0
  66. package/dist/composites/balance-sheet/resolver.d.ts +3 -0
  67. package/dist/composites/balance-sheet/resolver.d.ts.map +1 -0
  68. package/dist/composites/balance-sheet/resolver.js +469 -0
  69. package/dist/composites/balance-sheet/resolver.js.map +1 -0
  70. package/dist/composites/bullet-chart/resolver.cjs +300 -0
  71. package/dist/composites/bullet-chart/resolver.cjs.map +1 -0
  72. package/dist/composites/bullet-chart/resolver.d.ts +3 -0
  73. package/dist/composites/bullet-chart/resolver.d.ts.map +1 -0
  74. package/dist/composites/bullet-chart/resolver.js +298 -0
  75. package/dist/composites/bullet-chart/resolver.js.map +1 -0
  76. package/dist/composites/cash-flow-statement/resolver.cjs +757 -0
  77. package/dist/composites/cash-flow-statement/resolver.cjs.map +1 -0
  78. package/dist/composites/cash-flow-statement/resolver.d.ts +3 -0
  79. package/dist/composites/cash-flow-statement/resolver.d.ts.map +1 -0
  80. package/dist/composites/cash-flow-statement/resolver.js +751 -0
  81. package/dist/composites/cash-flow-statement/resolver.js.map +1 -0
  82. package/dist/composites/chart-of-accounts/resolver.cjs +603 -0
  83. package/dist/composites/chart-of-accounts/resolver.cjs.map +1 -0
  84. package/dist/composites/chart-of-accounts/resolver.d.ts +3 -0
  85. package/dist/composites/chart-of-accounts/resolver.d.ts.map +1 -0
  86. package/dist/composites/chart-of-accounts/resolver.js +601 -0
  87. package/dist/composites/chart-of-accounts/resolver.js.map +1 -0
  88. package/dist/composites/cited-answer/resolver.cjs +829 -0
  89. package/dist/composites/cited-answer/resolver.cjs.map +1 -0
  90. package/dist/composites/cited-answer/resolver.d.ts +3 -0
  91. package/dist/composites/cited-answer/resolver.d.ts.map +1 -0
  92. package/dist/composites/cited-answer/resolver.js +827 -0
  93. package/dist/composites/cited-answer/resolver.js.map +1 -0
  94. package/dist/composites/combo-chart/resolver.cjs +402 -0
  95. package/dist/composites/combo-chart/resolver.cjs.map +1 -0
  96. package/dist/composites/combo-chart/resolver.d.ts +3 -0
  97. package/dist/composites/combo-chart/resolver.d.ts.map +1 -0
  98. package/dist/composites/combo-chart/resolver.js +400 -0
  99. package/dist/composites/combo-chart/resolver.js.map +1 -0
  100. package/dist/composites/comparative-bar-chart/resolver.cjs +366 -0
  101. package/dist/composites/comparative-bar-chart/resolver.cjs.map +1 -0
  102. package/dist/composites/comparative-bar-chart/resolver.d.ts +3 -0
  103. package/dist/composites/comparative-bar-chart/resolver.d.ts.map +1 -0
  104. package/dist/composites/comparative-bar-chart/resolver.js +364 -0
  105. package/dist/composites/comparative-bar-chart/resolver.js.map +1 -0
  106. package/dist/composites/compliance-checklist/resolver.cjs +618 -0
  107. package/dist/composites/compliance-checklist/resolver.cjs.map +1 -0
  108. package/dist/composites/compliance-checklist/resolver.d.ts +3 -0
  109. package/dist/composites/compliance-checklist/resolver.d.ts.map +1 -0
  110. package/dist/composites/compliance-checklist/resolver.js +616 -0
  111. package/dist/composites/compliance-checklist/resolver.js.map +1 -0
  112. package/dist/composites/connect-integration/resolver.d.ts +3 -0
  113. package/dist/composites/connect-integration/resolver.d.ts.map +1 -0
  114. package/dist/composites/data-table/resolver.cjs +324 -0
  115. package/dist/composites/data-table/resolver.cjs.map +1 -0
  116. package/dist/composites/data-table/resolver.d.ts +3 -0
  117. package/dist/composites/data-table/resolver.d.ts.map +1 -0
  118. package/dist/composites/data-table/resolver.js +322 -0
  119. package/dist/composites/data-table/resolver.js.map +1 -0
  120. package/dist/composites/depreciation-schedule/resolver.cjs +726 -0
  121. package/dist/composites/depreciation-schedule/resolver.cjs.map +1 -0
  122. package/dist/composites/depreciation-schedule/resolver.d.ts +3 -0
  123. package/dist/composites/depreciation-schedule/resolver.d.ts.map +1 -0
  124. package/dist/composites/depreciation-schedule/resolver.js +724 -0
  125. package/dist/composites/depreciation-schedule/resolver.js.map +1 -0
  126. package/dist/composites/document-preview/ExcelViewer.d.ts +8 -0
  127. package/dist/composites/document-preview/ExcelViewer.d.ts.map +1 -0
  128. package/dist/composites/document-preview/PdfViewer.d.ts +10 -0
  129. package/dist/composites/document-preview/PdfViewer.d.ts.map +1 -0
  130. package/dist/composites/document-preview/resolver.cjs +1036 -0
  131. package/dist/composites/document-preview/resolver.cjs.map +1 -0
  132. package/dist/composites/document-preview/resolver.d.ts +3 -0
  133. package/dist/composites/document-preview/resolver.d.ts.map +1 -0
  134. package/dist/composites/document-preview/resolver.js +1011 -0
  135. package/dist/composites/document-preview/resolver.js.map +1 -0
  136. package/dist/composites/document-preview/useFullscreen.d.ts +8 -0
  137. package/dist/composites/document-preview/useFullscreen.d.ts.map +1 -0
  138. package/dist/composites/download-card/resolver.cjs +1831 -0
  139. package/dist/composites/download-card/resolver.cjs.map +1 -0
  140. package/dist/composites/download-card/resolver.d.ts +3 -0
  141. package/dist/composites/download-card/resolver.d.ts.map +1 -0
  142. package/dist/composites/download-card/resolver.js +1804 -0
  143. package/dist/composites/download-card/resolver.js.map +1 -0
  144. package/dist/composites/engagement-pipeline/resolver.cjs +834 -0
  145. package/dist/composites/engagement-pipeline/resolver.cjs.map +1 -0
  146. package/dist/composites/engagement-pipeline/resolver.d.ts +3 -0
  147. package/dist/composites/engagement-pipeline/resolver.d.ts.map +1 -0
  148. package/dist/composites/engagement-pipeline/resolver.js +828 -0
  149. package/dist/composites/engagement-pipeline/resolver.js.map +1 -0
  150. package/dist/composites/entity-card-grid/resolver.cjs +444 -0
  151. package/dist/composites/entity-card-grid/resolver.cjs.map +1 -0
  152. package/dist/composites/entity-card-grid/resolver.d.ts +3 -0
  153. package/dist/composites/entity-card-grid/resolver.d.ts.map +1 -0
  154. package/dist/composites/entity-card-grid/resolver.js +442 -0
  155. package/dist/composites/entity-card-grid/resolver.js.map +1 -0
  156. package/dist/composites/escalation-card/resolver.cjs +359 -0
  157. package/dist/composites/escalation-card/resolver.cjs.map +1 -0
  158. package/dist/composites/escalation-card/resolver.d.ts +3 -0
  159. package/dist/composites/escalation-card/resolver.d.ts.map +1 -0
  160. package/dist/composites/escalation-card/resolver.js +357 -0
  161. package/dist/composites/escalation-card/resolver.js.map +1 -0
  162. package/dist/composites/file-browser/resolver.cjs +440 -0
  163. package/dist/composites/file-browser/resolver.cjs.map +1 -0
  164. package/dist/composites/file-browser/resolver.d.ts +3 -0
  165. package/dist/composites/file-browser/resolver.d.ts.map +1 -0
  166. package/dist/composites/file-browser/resolver.js +438 -0
  167. package/dist/composites/file-browser/resolver.js.map +1 -0
  168. package/dist/composites/flow-canvas/DiagramStreamParser.d.ts +15 -0
  169. package/dist/composites/flow-canvas/DiagramStreamParser.d.ts.map +1 -0
  170. package/dist/composites/flow-canvas/ElementStreamParser.d.ts +19 -0
  171. package/dist/composites/flow-canvas/ElementStreamParser.d.ts.map +1 -0
  172. package/dist/composites/flow-canvas/ExcalidrawCanvas.d.ts +8 -0
  173. package/dist/composites/flow-canvas/ExcalidrawCanvas.d.ts.map +1 -0
  174. package/dist/composites/flow-canvas/FlowGraph.d.ts +11 -0
  175. package/dist/composites/flow-canvas/FlowGraph.d.ts.map +1 -0
  176. package/dist/composites/flow-canvas/layoutFlow.d.ts +18 -0
  177. package/dist/composites/flow-canvas/layoutFlow.d.ts.map +1 -0
  178. package/dist/composites/flow-canvas/parseMermaidFlow.d.ts +24 -0
  179. package/dist/composites/flow-canvas/parseMermaidFlow.d.ts.map +1 -0
  180. package/dist/composites/flow-canvas/resolver.cjs +1295 -0
  181. package/dist/composites/flow-canvas/resolver.cjs.map +1 -0
  182. package/dist/composites/flow-canvas/resolver.d.ts +12 -0
  183. package/dist/composites/flow-canvas/resolver.d.ts.map +1 -0
  184. package/dist/composites/flow-canvas/resolver.js +1287 -0
  185. package/dist/composites/flow-canvas/resolver.js.map +1 -0
  186. package/dist/composites/funnel-chart/resolver.cjs +315 -0
  187. package/dist/composites/funnel-chart/resolver.cjs.map +1 -0
  188. package/dist/composites/funnel-chart/resolver.d.ts +3 -0
  189. package/dist/composites/funnel-chart/resolver.d.ts.map +1 -0
  190. package/dist/composites/funnel-chart/resolver.js +313 -0
  191. package/dist/composites/funnel-chart/resolver.js.map +1 -0
  192. package/dist/composites/gauge-chart/resolver.cjs +294 -0
  193. package/dist/composites/gauge-chart/resolver.cjs.map +1 -0
  194. package/dist/composites/gauge-chart/resolver.d.ts +3 -0
  195. package/dist/composites/gauge-chart/resolver.d.ts.map +1 -0
  196. package/dist/composites/gauge-chart/resolver.js +292 -0
  197. package/dist/composites/gauge-chart/resolver.js.map +1 -0
  198. package/dist/composites/general-ledger/resolver.cjs +543 -0
  199. package/dist/composites/general-ledger/resolver.cjs.map +1 -0
  200. package/dist/composites/general-ledger/resolver.d.ts +3 -0
  201. package/dist/composites/general-ledger/resolver.d.ts.map +1 -0
  202. package/dist/composites/general-ledger/resolver.js +541 -0
  203. package/dist/composites/general-ledger/resolver.js.map +1 -0
  204. package/dist/composites/grouped-table/resolver.cjs +388 -0
  205. package/dist/composites/grouped-table/resolver.cjs.map +1 -0
  206. package/dist/composites/grouped-table/resolver.d.ts +3 -0
  207. package/dist/composites/grouped-table/resolver.d.ts.map +1 -0
  208. package/dist/composites/grouped-table/resolver.js +386 -0
  209. package/dist/composites/grouped-table/resolver.js.map +1 -0
  210. package/dist/composites/heatmap-table/resolver.cjs +380 -0
  211. package/dist/composites/heatmap-table/resolver.cjs.map +1 -0
  212. package/dist/composites/heatmap-table/resolver.d.ts +3 -0
  213. package/dist/composites/heatmap-table/resolver.d.ts.map +1 -0
  214. package/dist/composites/heatmap-table/resolver.js +378 -0
  215. package/dist/composites/heatmap-table/resolver.js.map +1 -0
  216. package/dist/composites/income-statement/resolver.cjs +583 -0
  217. package/dist/composites/income-statement/resolver.cjs.map +1 -0
  218. package/dist/composites/income-statement/resolver.d.ts +3 -0
  219. package/dist/composites/income-statement/resolver.d.ts.map +1 -0
  220. package/dist/composites/income-statement/resolver.js +577 -0
  221. package/dist/composites/income-statement/resolver.js.map +1 -0
  222. package/dist/composites/integrations-list/resolver.d.ts +3 -0
  223. package/dist/composites/integrations-list/resolver.d.ts.map +1 -0
  224. package/dist/composites/invoice-detail/resolver.cjs +1086 -0
  225. package/dist/composites/invoice-detail/resolver.cjs.map +1 -0
  226. package/dist/composites/invoice-detail/resolver.d.ts +3 -0
  227. package/dist/composites/invoice-detail/resolver.d.ts.map +1 -0
  228. package/dist/composites/invoice-detail/resolver.js +1084 -0
  229. package/dist/composites/invoice-detail/resolver.js.map +1 -0
  230. package/dist/composites/job-tracker/resolver.cjs +830 -0
  231. package/dist/composites/job-tracker/resolver.cjs.map +1 -0
  232. package/dist/composites/job-tracker/resolver.d.ts +3 -0
  233. package/dist/composites/job-tracker/resolver.d.ts.map +1 -0
  234. package/dist/composites/job-tracker/resolver.js +828 -0
  235. package/dist/composites/job-tracker/resolver.js.map +1 -0
  236. package/dist/composites/journal-entry/resolver.cjs +324 -0
  237. package/dist/composites/journal-entry/resolver.cjs.map +1 -0
  238. package/dist/composites/journal-entry/resolver.d.ts +3 -0
  239. package/dist/composites/journal-entry/resolver.d.ts.map +1 -0
  240. package/dist/composites/journal-entry/resolver.js +322 -0
  241. package/dist/composites/journal-entry/resolver.js.map +1 -0
  242. package/dist/composites/key-value-list/resolver.cjs +708 -0
  243. package/dist/composites/key-value-list/resolver.cjs.map +1 -0
  244. package/dist/composites/key-value-list/resolver.d.ts +3 -0
  245. package/dist/composites/key-value-list/resolver.d.ts.map +1 -0
  246. package/dist/composites/key-value-list/resolver.js +702 -0
  247. package/dist/composites/key-value-list/resolver.js.map +1 -0
  248. package/dist/composites/legal-test-result/resolver.cjs +666 -0
  249. package/dist/composites/legal-test-result/resolver.cjs.map +1 -0
  250. package/dist/composites/legal-test-result/resolver.d.ts +3 -0
  251. package/dist/composites/legal-test-result/resolver.d.ts.map +1 -0
  252. package/dist/composites/legal-test-result/resolver.js +664 -0
  253. package/dist/composites/legal-test-result/resolver.js.map +1 -0
  254. package/dist/composites/line-chart/resolver.cjs +344 -0
  255. package/dist/composites/line-chart/resolver.cjs.map +1 -0
  256. package/dist/composites/line-chart/resolver.d.ts +3 -0
  257. package/dist/composites/line-chart/resolver.d.ts.map +1 -0
  258. package/dist/composites/line-chart/resolver.js +342 -0
  259. package/dist/composites/line-chart/resolver.js.map +1 -0
  260. package/dist/composites/news-feed/resolver.cjs +539 -0
  261. package/dist/composites/news-feed/resolver.cjs.map +1 -0
  262. package/dist/composites/news-feed/resolver.d.ts +3 -0
  263. package/dist/composites/news-feed/resolver.d.ts.map +1 -0
  264. package/dist/composites/news-feed/resolver.js +537 -0
  265. package/dist/composites/news-feed/resolver.js.map +1 -0
  266. package/dist/composites/ops-dashboard/resolver.cjs +430 -0
  267. package/dist/composites/ops-dashboard/resolver.cjs.map +1 -0
  268. package/dist/composites/ops-dashboard/resolver.d.ts +3 -0
  269. package/dist/composites/ops-dashboard/resolver.d.ts.map +1 -0
  270. package/dist/composites/ops-dashboard/resolver.js +428 -0
  271. package/dist/composites/ops-dashboard/resolver.js.map +1 -0
  272. package/dist/composites/pipeline-preview/layout.d.ts +39 -0
  273. package/dist/composites/pipeline-preview/layout.d.ts.map +1 -0
  274. package/dist/composites/pipeline-preview/opMeta.d.ts +9 -0
  275. package/dist/composites/pipeline-preview/opMeta.d.ts.map +1 -0
  276. package/dist/composites/pipeline-preview/resolver.d.ts +3 -0
  277. package/dist/composites/pipeline-preview/resolver.d.ts.map +1 -0
  278. package/dist/composites/provenance-chain/resolver.cjs +797 -0
  279. package/dist/composites/provenance-chain/resolver.cjs.map +1 -0
  280. package/dist/composites/provenance-chain/resolver.d.ts +3 -0
  281. package/dist/composites/provenance-chain/resolver.d.ts.map +1 -0
  282. package/dist/composites/provenance-chain/resolver.js +795 -0
  283. package/dist/composites/provenance-chain/resolver.js.map +1 -0
  284. package/dist/composites/radar-chart/resolver.cjs +323 -0
  285. package/dist/composites/radar-chart/resolver.cjs.map +1 -0
  286. package/dist/composites/radar-chart/resolver.d.ts +3 -0
  287. package/dist/composites/radar-chart/resolver.d.ts.map +1 -0
  288. package/dist/composites/radar-chart/resolver.js +321 -0
  289. package/dist/composites/radar-chart/resolver.js.map +1 -0
  290. package/dist/composites/reconciliation-view/resolver.cjs +917 -0
  291. package/dist/composites/reconciliation-view/resolver.cjs.map +1 -0
  292. package/dist/composites/reconciliation-view/resolver.d.ts +3 -0
  293. package/dist/composites/reconciliation-view/resolver.d.ts.map +1 -0
  294. package/dist/composites/reconciliation-view/resolver.js +915 -0
  295. package/dist/composites/reconciliation-view/resolver.js.map +1 -0
  296. package/dist/composites/scatter-chart/resolver.cjs +357 -0
  297. package/dist/composites/scatter-chart/resolver.cjs.map +1 -0
  298. package/dist/composites/scatter-chart/resolver.d.ts +3 -0
  299. package/dist/composites/scatter-chart/resolver.d.ts.map +1 -0
  300. package/dist/composites/scatter-chart/resolver.js +355 -0
  301. package/dist/composites/scatter-chart/resolver.js.map +1 -0
  302. package/dist/composites/screener-table/resolver.cjs +372 -0
  303. package/dist/composites/screener-table/resolver.cjs.map +1 -0
  304. package/dist/composites/screener-table/resolver.d.ts +3 -0
  305. package/dist/composites/screener-table/resolver.d.ts.map +1 -0
  306. package/dist/composites/screener-table/resolver.js +370 -0
  307. package/dist/composites/screener-table/resolver.js.map +1 -0
  308. package/dist/composites/search-results/resolver.cjs +391 -0
  309. package/dist/composites/search-results/resolver.cjs.map +1 -0
  310. package/dist/composites/search-results/resolver.d.ts +3 -0
  311. package/dist/composites/search-results/resolver.d.ts.map +1 -0
  312. package/dist/composites/search-results/resolver.js +389 -0
  313. package/dist/composites/search-results/resolver.js.map +1 -0
  314. package/dist/composites/sparkline-table/resolver.cjs +361 -0
  315. package/dist/composites/sparkline-table/resolver.cjs.map +1 -0
  316. package/dist/composites/sparkline-table/resolver.d.ts +3 -0
  317. package/dist/composites/sparkline-table/resolver.d.ts.map +1 -0
  318. package/dist/composites/sparkline-table/resolver.js +359 -0
  319. package/dist/composites/sparkline-table/resolver.js.map +1 -0
  320. package/dist/composites/stacked-breakdown/resolver.cjs +397 -0
  321. package/dist/composites/stacked-breakdown/resolver.cjs.map +1 -0
  322. package/dist/composites/stacked-breakdown/resolver.d.ts +3 -0
  323. package/dist/composites/stacked-breakdown/resolver.d.ts.map +1 -0
  324. package/dist/composites/stacked-breakdown/resolver.js +395 -0
  325. package/dist/composites/stacked-breakdown/resolver.js.map +1 -0
  326. package/dist/composites/stat-grid/resolver.cjs +498 -0
  327. package/dist/composites/stat-grid/resolver.cjs.map +1 -0
  328. package/dist/composites/stat-grid/resolver.d.ts +3 -0
  329. package/dist/composites/stat-grid/resolver.d.ts.map +1 -0
  330. package/dist/composites/stat-grid/resolver.js +496 -0
  331. package/dist/composites/stat-grid/resolver.js.map +1 -0
  332. package/dist/composites/status-card/resolver.cjs +593 -0
  333. package/dist/composites/status-card/resolver.cjs.map +1 -0
  334. package/dist/composites/status-card/resolver.d.ts +3 -0
  335. package/dist/composites/status-card/resolver.d.ts.map +1 -0
  336. package/dist/composites/status-card/resolver.js +591 -0
  337. package/dist/composites/status-card/resolver.js.map +1 -0
  338. package/dist/composites/tabs-panel/resolver.cjs +564 -0
  339. package/dist/composites/tabs-panel/resolver.cjs.map +1 -0
  340. package/dist/composites/tabs-panel/resolver.d.ts +3 -0
  341. package/dist/composites/tabs-panel/resolver.d.ts.map +1 -0
  342. package/dist/composites/tabs-panel/resolver.js +562 -0
  343. package/dist/composites/tabs-panel/resolver.js.map +1 -0
  344. package/dist/composites/transaction-feed/resolver.cjs +830 -0
  345. package/dist/composites/transaction-feed/resolver.cjs.map +1 -0
  346. package/dist/composites/transaction-feed/resolver.d.ts +3 -0
  347. package/dist/composites/transaction-feed/resolver.d.ts.map +1 -0
  348. package/dist/composites/transaction-feed/resolver.js +828 -0
  349. package/dist/composites/transaction-feed/resolver.js.map +1 -0
  350. package/dist/composites/treemap-chart/resolver.cjs +323 -0
  351. package/dist/composites/treemap-chart/resolver.cjs.map +1 -0
  352. package/dist/composites/treemap-chart/resolver.d.ts +3 -0
  353. package/dist/composites/treemap-chart/resolver.d.ts.map +1 -0
  354. package/dist/composites/treemap-chart/resolver.js +321 -0
  355. package/dist/composites/treemap-chart/resolver.js.map +1 -0
  356. package/dist/composites/trial-balance/resolver.cjs +359 -0
  357. package/dist/composites/trial-balance/resolver.cjs.map +1 -0
  358. package/dist/composites/trial-balance/resolver.d.ts +3 -0
  359. package/dist/composites/trial-balance/resolver.d.ts.map +1 -0
  360. package/dist/composites/trial-balance/resolver.js +353 -0
  361. package/dist/composites/trial-balance/resolver.js.map +1 -0
  362. package/dist/composites/variance-analysis/resolver.cjs +310 -0
  363. package/dist/composites/variance-analysis/resolver.cjs.map +1 -0
  364. package/dist/composites/variance-analysis/resolver.d.ts +3 -0
  365. package/dist/composites/variance-analysis/resolver.d.ts.map +1 -0
  366. package/dist/composites/variance-analysis/resolver.js +308 -0
  367. package/dist/composites/variance-analysis/resolver.js.map +1 -0
  368. package/dist/composites/waterfall-chart/resolver.cjs +347 -0
  369. package/dist/composites/waterfall-chart/resolver.cjs.map +1 -0
  370. package/dist/composites/waterfall-chart/resolver.d.ts +3 -0
  371. package/dist/composites/waterfall-chart/resolver.d.ts.map +1 -0
  372. package/dist/composites/waterfall-chart/resolver.js +345 -0
  373. package/dist/composites/waterfall-chart/resolver.js.map +1 -0
  374. package/dist/index.cjs +18271 -0
  375. package/dist/index.cjs.map +1 -0
  376. package/dist/index.d.ts +52 -0
  377. package/dist/index.d.ts.map +1 -0
  378. package/dist/index.js +18184 -0
  379. package/dist/index.js.map +1 -0
  380. package/dist/renderer.cjs +17092 -0
  381. package/dist/renderer.cjs.map +1 -0
  382. package/dist/renderer.d.ts +7 -0
  383. package/dist/renderer.d.ts.map +1 -0
  384. package/dist/renderer.js +17064 -0
  385. package/dist/renderer.js.map +1 -0
  386. package/dist/resolver.cjs +17061 -0
  387. package/dist/resolver.cjs.map +1 -0
  388. package/dist/resolver.d.ts +6 -0
  389. package/dist/resolver.d.ts.map +1 -0
  390. package/dist/resolver.js +17033 -0
  391. package/dist/resolver.js.map +1 -0
  392. package/dist/schemas/aging-report.d.ts +74 -0
  393. package/dist/schemas/aging-report.d.ts.map +1 -0
  394. package/dist/schemas/alert.d.ts +39 -0
  395. package/dist/schemas/alert.d.ts.map +1 -0
  396. package/dist/schemas/allocation-donut.d.ts +53 -0
  397. package/dist/schemas/allocation-donut.d.ts.map +1 -0
  398. package/dist/schemas/amortization-table.d.ts +102 -0
  399. package/dist/schemas/amortization-table.d.ts.map +1 -0
  400. package/dist/schemas/area-chart.d.ts +61 -0
  401. package/dist/schemas/area-chart.d.ts.map +1 -0
  402. package/dist/schemas/audit-trail.d.ts +88 -0
  403. package/dist/schemas/audit-trail.d.ts.map +1 -0
  404. package/dist/schemas/balance-sheet.d.ts +170 -0
  405. package/dist/schemas/balance-sheet.d.ts.map +1 -0
  406. package/dist/schemas/buildRenderUITool.d.ts +7 -0
  407. package/dist/schemas/buildRenderUITool.d.ts.map +1 -0
  408. package/dist/schemas/bullet-chart.d.ts +58 -0
  409. package/dist/schemas/bullet-chart.d.ts.map +1 -0
  410. package/dist/schemas/cash-flow-statement.d.ts +165 -0
  411. package/dist/schemas/cash-flow-statement.d.ts.map +1 -0
  412. package/dist/schemas/chart-of-accounts.d.ts +93 -0
  413. package/dist/schemas/chart-of-accounts.d.ts.map +1 -0
  414. package/dist/schemas/cited-answer.d.ts +76 -0
  415. package/dist/schemas/cited-answer.d.ts.map +1 -0
  416. package/dist/schemas/coercePayload.d.ts +16 -0
  417. package/dist/schemas/coercePayload.d.ts.map +1 -0
  418. package/dist/schemas/combo-chart.d.ts +111 -0
  419. package/dist/schemas/combo-chart.d.ts.map +1 -0
  420. package/dist/schemas/comparative-bar-chart.d.ts +83 -0
  421. package/dist/schemas/comparative-bar-chart.d.ts.map +1 -0
  422. package/dist/schemas/compliance-checklist.d.ts +91 -0
  423. package/dist/schemas/compliance-checklist.d.ts.map +1 -0
  424. package/dist/schemas/connect-integration.d.ts +47 -0
  425. package/dist/schemas/connect-integration.d.ts.map +1 -0
  426. package/dist/schemas/data-table.d.ts +63 -0
  427. package/dist/schemas/data-table.d.ts.map +1 -0
  428. package/dist/schemas/depreciation-schedule.d.ts +125 -0
  429. package/dist/schemas/depreciation-schedule.d.ts.map +1 -0
  430. package/dist/schemas/document-preview.d.ts +128 -0
  431. package/dist/schemas/document-preview.d.ts.map +1 -0
  432. package/dist/schemas/download-card.d.ts +62 -0
  433. package/dist/schemas/download-card.d.ts.map +1 -0
  434. package/dist/schemas/engagement-pipeline.d.ts +119 -0
  435. package/dist/schemas/engagement-pipeline.d.ts.map +1 -0
  436. package/dist/schemas/entity-card-grid.d.ts +101 -0
  437. package/dist/schemas/entity-card-grid.d.ts.map +1 -0
  438. package/dist/schemas/escalation-card.d.ts +44 -0
  439. package/dist/schemas/escalation-card.d.ts.map +1 -0
  440. package/dist/schemas/file-browser.d.ts +81 -0
  441. package/dist/schemas/file-browser.d.ts.map +1 -0
  442. package/dist/schemas/flow-canvas.d.ts +58 -0
  443. package/dist/schemas/flow-canvas.d.ts.map +1 -0
  444. package/dist/schemas/funnel-chart.d.ts +53 -0
  445. package/dist/schemas/funnel-chart.d.ts.map +1 -0
  446. package/dist/schemas/gauge-chart.d.ts +58 -0
  447. package/dist/schemas/gauge-chart.d.ts.map +1 -0
  448. package/dist/schemas/general-ledger.d.ts +120 -0
  449. package/dist/schemas/general-ledger.d.ts.map +1 -0
  450. package/dist/schemas/grouped-table.d.ts +101 -0
  451. package/dist/schemas/grouped-table.d.ts.map +1 -0
  452. package/dist/schemas/heatmap-table.d.ts +76 -0
  453. package/dist/schemas/heatmap-table.d.ts.map +1 -0
  454. package/dist/schemas/income-statement.d.ts +170 -0
  455. package/dist/schemas/income-statement.d.ts.map +1 -0
  456. package/dist/schemas/index.cjs +3509 -0
  457. package/dist/schemas/index.cjs.map +1 -0
  458. package/dist/schemas/index.d.ts +5030 -0
  459. package/dist/schemas/index.d.ts.map +1 -0
  460. package/dist/schemas/index.js +3505 -0
  461. package/dist/schemas/index.js.map +1 -0
  462. package/dist/schemas/integrations-list.d.ts +62 -0
  463. package/dist/schemas/integrations-list.d.ts.map +1 -0
  464. package/dist/schemas/invoice-detail.d.ts +157 -0
  465. package/dist/schemas/invoice-detail.d.ts.map +1 -0
  466. package/dist/schemas/job-tracker.d.ts +114 -0
  467. package/dist/schemas/job-tracker.d.ts.map +1 -0
  468. package/dist/schemas/journal-entry.d.ts +90 -0
  469. package/dist/schemas/journal-entry.d.ts.map +1 -0
  470. package/dist/schemas/key-value-list.d.ts +108 -0
  471. package/dist/schemas/key-value-list.d.ts.map +1 -0
  472. package/dist/schemas/legal-test-result.d.ts +130 -0
  473. package/dist/schemas/legal-test-result.d.ts.map +1 -0
  474. package/dist/schemas/line-chart.d.ts +71 -0
  475. package/dist/schemas/line-chart.d.ts.map +1 -0
  476. package/dist/schemas/news-feed.d.ts +63 -0
  477. package/dist/schemas/news-feed.d.ts.map +1 -0
  478. package/dist/schemas/ops-dashboard.d.ts +92 -0
  479. package/dist/schemas/ops-dashboard.d.ts.map +1 -0
  480. package/dist/schemas/pipeline-preview.d.ts +209 -0
  481. package/dist/schemas/pipeline-preview.d.ts.map +1 -0
  482. package/dist/schemas/provenance-chain.d.ts +121 -0
  483. package/dist/schemas/provenance-chain.d.ts.map +1 -0
  484. package/dist/schemas/radar-chart.d.ts +70 -0
  485. package/dist/schemas/radar-chart.d.ts.map +1 -0
  486. package/dist/schemas/reconciliation-view.d.ts +156 -0
  487. package/dist/schemas/reconciliation-view.d.ts.map +1 -0
  488. package/dist/schemas/scatter-chart.d.ts +90 -0
  489. package/dist/schemas/scatter-chart.d.ts.map +1 -0
  490. package/dist/schemas/screener-table.d.ts +74 -0
  491. package/dist/schemas/screener-table.d.ts.map +1 -0
  492. package/dist/schemas/search-results.d.ts +87 -0
  493. package/dist/schemas/search-results.d.ts.map +1 -0
  494. package/dist/schemas/sparkline-table.d.ts +74 -0
  495. package/dist/schemas/sparkline-table.d.ts.map +1 -0
  496. package/dist/schemas/stacked-breakdown.d.ts +70 -0
  497. package/dist/schemas/stacked-breakdown.d.ts.map +1 -0
  498. package/dist/schemas/stat-grid.d.ts +55 -0
  499. package/dist/schemas/stat-grid.d.ts.map +1 -0
  500. package/dist/schemas/status-card.d.ts +84 -0
  501. package/dist/schemas/status-card.d.ts.map +1 -0
  502. package/dist/schemas/tabs-panel.d.ts +42 -0
  503. package/dist/schemas/tabs-panel.d.ts.map +1 -0
  504. package/dist/schemas/transaction-feed.d.ts +82 -0
  505. package/dist/schemas/transaction-feed.d.ts.map +1 -0
  506. package/dist/schemas/treemap-chart.d.ts +53 -0
  507. package/dist/schemas/treemap-chart.d.ts.map +1 -0
  508. package/dist/schemas/trial-balance.d.ts +85 -0
  509. package/dist/schemas/trial-balance.d.ts.map +1 -0
  510. package/dist/schemas/validatePayload.d.ts +10 -0
  511. package/dist/schemas/validatePayload.d.ts.map +1 -0
  512. package/dist/schemas/variance-analysis.d.ts +73 -0
  513. package/dist/schemas/variance-analysis.d.ts.map +1 -0
  514. package/dist/schemas/waterfall-chart.d.ts +53 -0
  515. package/dist/schemas/waterfall-chart.d.ts.map +1 -0
  516. package/dist/shared/ColumnSettingsPanel.d.ts +13 -0
  517. package/dist/shared/ColumnSettingsPanel.d.ts.map +1 -0
  518. package/dist/shared/ComponentActions.d.ts +20 -0
  519. package/dist/shared/ComponentActions.d.ts.map +1 -0
  520. package/dist/shared/FileCard.d.ts +35 -0
  521. package/dist/shared/FileCard.d.ts.map +1 -0
  522. package/dist/shared/Markdown.d.ts +22 -0
  523. package/dist/shared/Markdown.d.ts.map +1 -0
  524. package/dist/shared/PreviewModal.d.ts +19 -0
  525. package/dist/shared/PreviewModal.d.ts.map +1 -0
  526. package/dist/shared/ThemeContext.d.ts +18 -0
  527. package/dist/shared/ThemeContext.d.ts.map +1 -0
  528. package/dist/shared/brandIcons.d.ts +3 -0
  529. package/dist/shared/brandIcons.d.ts.map +1 -0
  530. package/dist/shared/downloadCSV.d.ts +5 -0
  531. package/dist/shared/downloadCSV.d.ts.map +1 -0
  532. package/dist/shared/fileType.d.ts +19 -0
  533. package/dist/shared/fileType.d.ts.map +1 -0
  534. package/dist/shared/theme.d.ts +48 -0
  535. package/dist/shared/theme.d.ts.map +1 -0
  536. package/dist/shared/useColumnVisibility.d.ts +13 -0
  537. package/dist/shared/useColumnVisibility.d.ts.map +1 -0
  538. package/dist/shared/useSeriesToggle.d.ts +8 -0
  539. package/dist/shared/useSeriesToggle.d.ts.map +1 -0
  540. package/dist/shared/viewers/CsvViewer.d.ts +13 -0
  541. package/dist/shared/viewers/CsvViewer.d.ts.map +1 -0
  542. package/dist/shared/viewers/DocxViewer.d.ts +8 -0
  543. package/dist/shared/viewers/DocxViewer.d.ts.map +1 -0
  544. package/dist/shared/viewers/PreviewHost.d.ts +17 -0
  545. package/dist/shared/viewers/PreviewHost.d.ts.map +1 -0
  546. package/dist/shared/viewers/TextViewer.d.ts +13 -0
  547. package/dist/shared/viewers/TextViewer.d.ts.map +1 -0
  548. package/dist/shared/viewers/decode.d.ts +14 -0
  549. package/dist/shared/viewers/decode.d.ts.map +1 -0
  550. package/dist/tool-definitions.json +4629 -0
  551. package/dist/types.d.ts +8 -0
  552. package/dist/types.d.ts.map +1 -0
  553. package/package.json +110 -0
  554. package/styles/contract.css +17 -0
@@ -0,0 +1,1831 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React10 = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var reactPdf = require('react-pdf');
7
+ require('react-pdf/dist/Page/AnnotationLayer.css');
8
+ require('react-pdf/dist/Page/TextLayer.css');
9
+ var XLSX = require('xlsx');
10
+ var Papa = require('papaparse');
11
+ var mammoth = require('mammoth');
12
+ var htmlToImage = require('html-to-image');
13
+ var reactDom = require('react-dom');
14
+
15
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
+
17
+ function _interopNamespace(e) {
18
+ if (e && e.__esModule) return e;
19
+ var n = Object.create(null);
20
+ if (e) {
21
+ Object.keys(e).forEach(function (k) {
22
+ if (k !== 'default') {
23
+ var d = Object.getOwnPropertyDescriptor(e, k);
24
+ Object.defineProperty(n, k, d.get ? d : {
25
+ enumerable: true,
26
+ get: function () { return e[k]; }
27
+ });
28
+ }
29
+ });
30
+ }
31
+ n.default = e;
32
+ return Object.freeze(n);
33
+ }
34
+
35
+ var React10__default = /*#__PURE__*/_interopDefault(React10);
36
+ var XLSX__namespace = /*#__PURE__*/_interopNamespace(XLSX);
37
+ var Papa__default = /*#__PURE__*/_interopDefault(Papa);
38
+ var mammoth__namespace = /*#__PURE__*/_interopNamespace(mammoth);
39
+
40
+ var __defProp = Object.defineProperty;
41
+ var __defProps = Object.defineProperties;
42
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
43
+ var __getOwnPropNames = Object.getOwnPropertyNames;
44
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
45
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
46
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
47
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
48
+ var __spreadValues = (a, b) => {
49
+ for (var prop in b || (b = {}))
50
+ if (__hasOwnProp.call(b, prop))
51
+ __defNormalProp(a, prop, b[prop]);
52
+ if (__getOwnPropSymbols)
53
+ for (var prop of __getOwnPropSymbols(b)) {
54
+ if (__propIsEnum.call(b, prop))
55
+ __defNormalProp(a, prop, b[prop]);
56
+ }
57
+ return a;
58
+ };
59
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
60
+ var __esm = (fn, res) => function __init() {
61
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
62
+ };
63
+ var __export = (target, all) => {
64
+ for (var name in all)
65
+ __defProp(target, name, { get: all[name], enumerable: true });
66
+ };
67
+
68
+ // src/shared/theme.ts
69
+ var BORDER, MUTED, PAPER, ACCENT, ACCENT_SOFT, SECONDARY, CHART_PALETTE;
70
+ var init_theme = __esm({
71
+ "src/shared/theme.ts"() {
72
+ BORDER = "#dedede";
73
+ MUTED = "#777777";
74
+ PAPER = "#f6f6f6";
75
+ ACCENT = "#ff5000";
76
+ ACCENT_SOFT = "#cc4000";
77
+ SECONDARY = "#0364ff";
78
+ CHART_PALETTE = [
79
+ "#ff5000",
80
+ "#0364ff",
81
+ "#16a34a",
82
+ "#dc2626",
83
+ "#7c3aed",
84
+ "#0891b2",
85
+ "#f59e0b",
86
+ "#6366f1",
87
+ "#ec4899",
88
+ "#84cc16",
89
+ "#e11d48",
90
+ "#0ea5e9"
91
+ ];
92
+ }
93
+ });
94
+ function useTheme() {
95
+ return React10.useContext(GenUIThemeContext);
96
+ }
97
+ var DEFAULT_TOKENS, GenUIThemeContext;
98
+ var init_ThemeContext = __esm({
99
+ "src/shared/ThemeContext.tsx"() {
100
+ "use client";
101
+ init_theme();
102
+ DEFAULT_TOKENS = {
103
+ BORDER,
104
+ MUTED,
105
+ PAPER,
106
+ ACCENT,
107
+ ACCENT_SOFT,
108
+ SECONDARY,
109
+ CHART_PALETTE: [...CHART_PALETTE]
110
+ };
111
+ GenUIThemeContext = React10.createContext(DEFAULT_TOKENS);
112
+ }
113
+ });
114
+ function renderInline(text) {
115
+ const parts = [];
116
+ let rest = text;
117
+ let k = 0;
118
+ const nextIndex = (needle) => {
119
+ const idx = rest.indexOf(needle);
120
+ return idx >= 0 ? idx : Infinity;
121
+ };
122
+ while (rest.length > 0) {
123
+ const boldIdx = nextIndex("**");
124
+ const codeIdx = nextIndex("`");
125
+ const linkIdx = nextIndex("[");
126
+ let italicIdx = rest.indexOf("*");
127
+ if (italicIdx === boldIdx) italicIdx = rest.indexOf("*", italicIdx + 2);
128
+ const italicIdxN = italicIdx >= 0 ? italicIdx : Infinity;
129
+ const nextSpecial = Math.min(boldIdx, codeIdx, linkIdx, italicIdxN);
130
+ if (nextSpecial === Infinity) {
131
+ parts.push(/* @__PURE__ */ jsxRuntime.jsx("span", { children: rest }, k++));
132
+ break;
133
+ }
134
+ if (nextSpecial > 0) {
135
+ parts.push(/* @__PURE__ */ jsxRuntime.jsx("span", { children: rest.slice(0, nextSpecial) }, k++));
136
+ rest = rest.slice(nextSpecial);
137
+ }
138
+ if (rest.startsWith("**")) {
139
+ const end = rest.indexOf("**", 2);
140
+ if (end > 2) {
141
+ parts.push(
142
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { style: { fontWeight: 600, color: "var(--foreground)" }, children: renderInline(rest.slice(2, end)) }, k++)
143
+ );
144
+ rest = rest.slice(end + 2);
145
+ continue;
146
+ }
147
+ }
148
+ if (rest.startsWith("`")) {
149
+ const end = rest.indexOf("`", 1);
150
+ if (end > 1) {
151
+ parts.push(
152
+ /* @__PURE__ */ jsxRuntime.jsx(
153
+ "code",
154
+ {
155
+ style: {
156
+ fontSize: "0.9em",
157
+ padding: "1px 5px",
158
+ borderRadius: "4px",
159
+ background: "#f0f0f0",
160
+ fontFamily: "monospace",
161
+ color: ACCENT
162
+ },
163
+ children: rest.slice(1, end)
164
+ },
165
+ k++
166
+ )
167
+ );
168
+ rest = rest.slice(end + 1);
169
+ continue;
170
+ }
171
+ }
172
+ if (rest.startsWith("[")) {
173
+ const closeText = rest.indexOf("]");
174
+ if (closeText > 0 && rest[closeText + 1] === "(") {
175
+ const closeUrl = rest.indexOf(")", closeText + 2);
176
+ if (closeUrl > closeText + 1) {
177
+ const label = rest.slice(1, closeText);
178
+ const url = rest.slice(closeText + 2, closeUrl);
179
+ parts.push(
180
+ /* @__PURE__ */ jsxRuntime.jsx(
181
+ "a",
182
+ {
183
+ href: url,
184
+ target: "_blank",
185
+ rel: "noopener noreferrer",
186
+ style: { color: SECONDARY, textDecoration: "none" },
187
+ children: renderInline(label)
188
+ },
189
+ k++
190
+ )
191
+ );
192
+ rest = rest.slice(closeUrl + 1);
193
+ continue;
194
+ }
195
+ }
196
+ }
197
+ if (rest.startsWith("*")) {
198
+ const end = rest.indexOf("*", 1);
199
+ if (end > 1) {
200
+ parts.push(
201
+ /* @__PURE__ */ jsxRuntime.jsx("em", { style: { fontStyle: "italic" }, children: renderInline(rest.slice(1, end)) }, k++)
202
+ );
203
+ rest = rest.slice(end + 1);
204
+ continue;
205
+ }
206
+ }
207
+ parts.push(/* @__PURE__ */ jsxRuntime.jsx("span", { children: rest[0] }, k++));
208
+ rest = rest.slice(1);
209
+ }
210
+ return parts;
211
+ }
212
+ function MarkdownBlock({ content }) {
213
+ var _a;
214
+ const lines = content.split("\n");
215
+ const elements = [];
216
+ let key = 0;
217
+ let i = 0;
218
+ while (i < lines.length) {
219
+ const trimmed = lines[i].trim();
220
+ if (!trimmed) {
221
+ i++;
222
+ continue;
223
+ }
224
+ const headingMatch = trimmed.match(/^(#{1,4})\s+(.+)/);
225
+ if (headingMatch) {
226
+ const level = headingMatch[1].length;
227
+ const cfg = {
228
+ 1: { size: "15px", weight: 600, serif: true, mt: "0" },
229
+ 2: { size: "14px", weight: 600, serif: true, mt: "14px" },
230
+ 3: { size: "12px", weight: 600, serif: false, mt: "12px" },
231
+ 4: { size: "11px", weight: 600, serif: false, mt: "10px" }
232
+ };
233
+ const s = (_a = cfg[level]) != null ? _a : cfg[3];
234
+ elements.push(
235
+ /* @__PURE__ */ jsxRuntime.jsx(
236
+ "div",
237
+ {
238
+ style: {
239
+ fontSize: s.size,
240
+ fontWeight: s.weight,
241
+ fontFamily: s.serif ? "var(--font-serif)" : "var(--font-sans)",
242
+ color: "var(--foreground)",
243
+ letterSpacing: s.serif ? "-0.005em" : "0",
244
+ marginTop: s.mt,
245
+ marginBottom: "6px",
246
+ lineHeight: 1.3
247
+ },
248
+ children: renderInline(headingMatch[2])
249
+ },
250
+ key++
251
+ )
252
+ );
253
+ i++;
254
+ continue;
255
+ }
256
+ if (trimmed.startsWith("- ") || trimmed.startsWith("* ")) {
257
+ const items = [];
258
+ while (i < lines.length) {
259
+ const li = lines[i].trim();
260
+ if (!li.startsWith("- ") && !li.startsWith("* ")) break;
261
+ items.push(li.slice(2));
262
+ i++;
263
+ }
264
+ elements.push(
265
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { margin: "4px 0 8px 0", paddingLeft: "4px" }, children: items.map((text, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
266
+ "div",
267
+ {
268
+ style: {
269
+ display: "flex",
270
+ gap: "8px",
271
+ marginBottom: "5px",
272
+ alignItems: "baseline"
273
+ },
274
+ children: [
275
+ /* @__PURE__ */ jsxRuntime.jsx(
276
+ "span",
277
+ {
278
+ style: {
279
+ width: "4px",
280
+ height: "4px",
281
+ borderRadius: "9999px",
282
+ background: ACCENT,
283
+ opacity: 0.5,
284
+ flexShrink: 0,
285
+ marginTop: "7px"
286
+ }
287
+ }
288
+ ),
289
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { flex: 1 }, children: renderInline(text) })
290
+ ]
291
+ },
292
+ idx
293
+ )) }, key++)
294
+ );
295
+ continue;
296
+ }
297
+ const numMatch = trimmed.match(/^(\d+)\.\s+(.+)/);
298
+ if (numMatch) {
299
+ const items = [];
300
+ while (i < lines.length) {
301
+ const li = lines[i].trim();
302
+ const m = li.match(/^(\d+)\.\s+(.+)/);
303
+ if (!m) break;
304
+ items.push({ num: m[1], text: m[2] });
305
+ i++;
306
+ }
307
+ elements.push(
308
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { margin: "4px 0 8px 0", paddingLeft: "4px" }, children: items.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
309
+ "div",
310
+ {
311
+ style: {
312
+ display: "flex",
313
+ gap: "8px",
314
+ marginBottom: "6px",
315
+ alignItems: "baseline"
316
+ },
317
+ children: [
318
+ /* @__PURE__ */ jsxRuntime.jsx(
319
+ "span",
320
+ {
321
+ style: {
322
+ fontSize: "10px",
323
+ fontWeight: 700,
324
+ color: ACCENT,
325
+ opacity: 0.7,
326
+ minWidth: "14px",
327
+ textAlign: "right",
328
+ fontVariantNumeric: "tabular-nums",
329
+ flexShrink: 0
330
+ },
331
+ children: item.num
332
+ }
333
+ ),
334
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { flex: 1 }, children: renderInline(item.text) })
335
+ ]
336
+ },
337
+ idx
338
+ )) }, key++)
339
+ );
340
+ continue;
341
+ }
342
+ elements.push(
343
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: "0 0 8px 0", lineHeight: 1.65 }, children: renderInline(trimmed) }, key++)
344
+ );
345
+ i++;
346
+ }
347
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: elements });
348
+ }
349
+ function Markdown({
350
+ content,
351
+ inline = false
352
+ }) {
353
+ if (!content) return null;
354
+ if (inline) {
355
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { whiteSpace: "pre-wrap" }, children: renderInline(content) });
356
+ }
357
+ return /* @__PURE__ */ jsxRuntime.jsx(MarkdownBlock, { content });
358
+ }
359
+ var init_Markdown = __esm({
360
+ "src/shared/Markdown.tsx"() {
361
+ "use client";
362
+ init_theme();
363
+ }
364
+ });
365
+
366
+ // src/composites/document-preview/PdfViewer.tsx
367
+ var PdfViewer_exports = {};
368
+ __export(PdfViewer_exports, {
369
+ PdfViewer: () => PdfViewer
370
+ });
371
+ function PdfViewer({ url, base64, onLoadSuccess }) {
372
+ const [numPages, setNumPages] = React10.useState(0);
373
+ const [currentPage, setCurrentPage] = React10.useState(1);
374
+ const [loading, setLoading] = React10.useState(true);
375
+ const handleLoad = React10.useCallback(({ numPages: n }) => {
376
+ setNumPages(n);
377
+ setLoading(false);
378
+ onLoadSuccess == null ? void 0 : onLoadSuccess(n);
379
+ }, [onLoadSuccess]);
380
+ React10.useEffect(() => {
381
+ if (numPages <= 1) return;
382
+ const handler = (e) => {
383
+ var _a;
384
+ const tag = (_a = e.target) == null ? void 0 : _a.tagName;
385
+ if (tag === "INPUT" || tag === "TEXTAREA") return;
386
+ if (e.key === "ArrowLeft" || e.key === "ArrowUp") {
387
+ e.preventDefault();
388
+ setCurrentPage((p) => Math.max(1, p - 1));
389
+ } else if (e.key === "ArrowRight" || e.key === "ArrowDown") {
390
+ e.preventDefault();
391
+ setCurrentPage((p) => Math.min(numPages, p + 1));
392
+ }
393
+ };
394
+ window.addEventListener("keydown", handler);
395
+ return () => window.removeEventListener("keydown", handler);
396
+ }, [numPages]);
397
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", gap: "0" }, children: [
398
+ numPages > 1 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
399
+ display: "flex",
400
+ alignItems: "center",
401
+ gap: "8px",
402
+ padding: "8px 14px",
403
+ background: "white",
404
+ width: "100%",
405
+ justifyContent: "center",
406
+ borderBottom: `1px solid ${BORDER}`
407
+ }, children: [
408
+ /* @__PURE__ */ jsxRuntime.jsx(
409
+ "button",
410
+ {
411
+ onClick: () => setCurrentPage((p) => Math.max(1, p - 1)),
412
+ disabled: currentPage === 1,
413
+ style: {
414
+ border: `1px solid ${BORDER}`,
415
+ borderRadius: "4px",
416
+ padding: "2px 8px",
417
+ background: "white",
418
+ cursor: "pointer",
419
+ fontSize: "12px",
420
+ color: currentPage === 1 ? BORDER : MUTED
421
+ },
422
+ children: "\u2190"
423
+ }
424
+ ),
425
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "12px", color: MUTED }, children: [
426
+ currentPage,
427
+ " / ",
428
+ numPages
429
+ ] }),
430
+ /* @__PURE__ */ jsxRuntime.jsx(
431
+ "button",
432
+ {
433
+ onClick: () => setCurrentPage((p) => Math.min(numPages, p + 1)),
434
+ disabled: currentPage === numPages,
435
+ style: {
436
+ border: `1px solid ${BORDER}`,
437
+ borderRadius: "4px",
438
+ padding: "2px 8px",
439
+ background: "white",
440
+ cursor: "pointer",
441
+ fontSize: "12px",
442
+ color: currentPage === numPages ? BORDER : MUTED
443
+ },
444
+ children: "\u2192"
445
+ }
446
+ )
447
+ ] }),
448
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { overflow: "auto", width: "100%", display: "flex", justifyContent: "center", padding: "16px" }, children: [
449
+ loading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", height: "200px", color: MUTED, fontSize: "13px" }, children: "Loading PDF..." }),
450
+ /* @__PURE__ */ jsxRuntime.jsx(reactPdf.Document, { file: base64 ? `data:application/pdf;base64,${base64}` : url, onLoadSuccess: handleLoad, loading: "", children: /* @__PURE__ */ jsxRuntime.jsx(
451
+ reactPdf.Page,
452
+ {
453
+ pageNumber: currentPage,
454
+ width: 540,
455
+ renderTextLayer: true,
456
+ renderAnnotationLayer: true
457
+ }
458
+ ) })
459
+ ] })
460
+ ] });
461
+ }
462
+ var init_PdfViewer = __esm({
463
+ "src/composites/document-preview/PdfViewer.tsx"() {
464
+ "use client";
465
+ init_theme();
466
+ reactPdf.pdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${reactPdf.pdfjs.version}/build/pdf.worker.min.mjs`;
467
+ }
468
+ });
469
+
470
+ // src/composites/document-preview/ExcelViewer.tsx
471
+ var ExcelViewer_exports = {};
472
+ __export(ExcelViewer_exports, {
473
+ ExcelViewer: () => ExcelViewer
474
+ });
475
+ function ExcelViewer({ url, base64, onLoadSuccess }) {
476
+ const [sheetNames, setSheetNames] = React10.useState([]);
477
+ const [activeSheet, setActiveSheet] = React10.useState(0);
478
+ const [data, setData] = React10.useState([]);
479
+ const [loading, setLoading] = React10.useState(true);
480
+ const [error, setError] = React10.useState(null);
481
+ const wbRef = React10.useRef(null);
482
+ React10.useEffect(() => {
483
+ let cancelled = false;
484
+ setLoading(true);
485
+ setError(null);
486
+ const loadFromBuffer = (buf) => {
487
+ if (cancelled) return;
488
+ const wb = XLSX__namespace.read(buf, { type: "array" });
489
+ wbRef.current = wb;
490
+ setSheetNames(wb.SheetNames);
491
+ onLoadSuccess == null ? void 0 : onLoadSuccess(wb.SheetNames);
492
+ const rows = XLSX__namespace.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { header: 1 });
493
+ setData(rows);
494
+ setActiveSheet(0);
495
+ setLoading(false);
496
+ };
497
+ if (base64) {
498
+ try {
499
+ const binary = atob(base64);
500
+ const bytes = new Uint8Array(binary.length);
501
+ for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
502
+ loadFromBuffer(bytes.buffer);
503
+ } catch (e) {
504
+ if (!cancelled) {
505
+ setError(e instanceof Error ? e.message : "Failed to decode base64");
506
+ setLoading(false);
507
+ }
508
+ }
509
+ return () => {
510
+ cancelled = true;
511
+ };
512
+ }
513
+ if (!url) {
514
+ setError("No file source provided");
515
+ setLoading(false);
516
+ return () => {
517
+ cancelled = true;
518
+ };
519
+ }
520
+ fetch(url).then((r) => {
521
+ if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
522
+ return r.arrayBuffer();
523
+ }).then((buf) => {
524
+ loadFromBuffer(buf);
525
+ }).catch((e) => {
526
+ if (cancelled) return;
527
+ setError(e.message);
528
+ setLoading(false);
529
+ });
530
+ return () => {
531
+ cancelled = true;
532
+ };
533
+ }, [url, base64, onLoadSuccess]);
534
+ const switchSheet = (idx) => {
535
+ if (!wbRef.current) return;
536
+ setActiveSheet(idx);
537
+ const rows = XLSX__namespace.utils.sheet_to_json(wbRef.current.Sheets[wbRef.current.SheetNames[idx]], { header: 1 });
538
+ setData(rows);
539
+ };
540
+ React10.useEffect(() => {
541
+ if (sheetNames.length <= 1) return;
542
+ const handler = (e) => {
543
+ var _a;
544
+ const tag = (_a = e.target) == null ? void 0 : _a.tagName;
545
+ if (tag === "INPUT" || tag === "TEXTAREA") return;
546
+ if (e.key === "ArrowLeft") {
547
+ e.preventDefault();
548
+ setActiveSheet((prev) => {
549
+ const next = Math.max(0, prev - 1);
550
+ if (next !== prev && wbRef.current) {
551
+ const rows = XLSX__namespace.utils.sheet_to_json(wbRef.current.Sheets[wbRef.current.SheetNames[next]], { header: 1 });
552
+ setData(rows);
553
+ }
554
+ return next;
555
+ });
556
+ } else if (e.key === "ArrowRight") {
557
+ e.preventDefault();
558
+ setActiveSheet((prev) => {
559
+ const next = Math.min(sheetNames.length - 1, prev + 1);
560
+ if (next !== prev && wbRef.current) {
561
+ const rows = XLSX__namespace.utils.sheet_to_json(wbRef.current.Sheets[wbRef.current.SheetNames[next]], { header: 1 });
562
+ setData(rows);
563
+ }
564
+ return next;
565
+ });
566
+ }
567
+ };
568
+ window.addEventListener("keydown", handler);
569
+ return () => window.removeEventListener("keydown", handler);
570
+ }, [sheetNames.length]);
571
+ if (loading) {
572
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", height: "200px", color: MUTED, fontSize: "13px" }, children: "Loading spreadsheet..." });
573
+ }
574
+ if (error) {
575
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", height: "120px", color: "#dc2626", fontSize: "13px" }, children: error });
576
+ }
577
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
578
+ sheetNames.length > 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: "0", overflowX: "auto", borderBottom: `1px solid ${BORDER}` }, children: sheetNames.map((name, i) => /* @__PURE__ */ jsxRuntime.jsx(
579
+ "button",
580
+ {
581
+ onClick: () => switchSheet(i),
582
+ style: {
583
+ padding: "6px 14px",
584
+ border: "none",
585
+ cursor: "pointer",
586
+ fontSize: "12px",
587
+ fontWeight: 600,
588
+ background: i === activeSheet ? "white" : PAPER,
589
+ color: i === activeSheet ? TERRACOTTA : MUTED,
590
+ borderBottom: i === activeSheet ? `2px solid ${TERRACOTTA}` : "2px solid transparent",
591
+ whiteSpace: "nowrap"
592
+ },
593
+ children: name
594
+ },
595
+ name
596
+ )) }),
597
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { overflow: "auto", maxHeight: "500px" }, children: /* @__PURE__ */ jsxRuntime.jsx("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: "12px" }, children: /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: data.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: row.map((cell, ci) => {
598
+ var _a, _b;
599
+ const isHeader = ri === 0 || ri === 2 && ((_a = data[0]) == null ? void 0 : _a[0]) && !((_b = data[1]) == null ? void 0 : _b[0]);
600
+ const Tag = isHeader ? "th" : "td";
601
+ return /* @__PURE__ */ jsxRuntime.jsx(
602
+ Tag,
603
+ {
604
+ style: {
605
+ padding: "6px 10px",
606
+ borderBottom: `1px solid ${BORDER}`,
607
+ textAlign: typeof cell === "number" ? "right" : "left",
608
+ fontWeight: isHeader ? 600 : 400,
609
+ color: isHeader ? "var(--foreground)" : MUTED,
610
+ background: isHeader ? PAPER : "white",
611
+ whiteSpace: "nowrap",
612
+ fontFamily: typeof cell === "number" ? "var(--font-mono, monospace)" : "var(--font-sans)"
613
+ },
614
+ children: cell != null ? String(cell) : ""
615
+ },
616
+ ci
617
+ );
618
+ }) }, ri)) }) }) })
619
+ ] });
620
+ }
621
+ var TERRACOTTA;
622
+ var init_ExcelViewer = __esm({
623
+ "src/composites/document-preview/ExcelViewer.tsx"() {
624
+ "use client";
625
+ init_theme();
626
+ TERRACOTTA = ACCENT;
627
+ }
628
+ });
629
+
630
+ // src/shared/viewers/decode.ts
631
+ async function blobToBase64(blob) {
632
+ const buf = await blob.arrayBuffer();
633
+ const bytes = new Uint8Array(buf);
634
+ let binary = "";
635
+ const chunk = 32768;
636
+ for (let i = 0; i < bytes.length; i += chunk) {
637
+ binary += String.fromCharCode(...bytes.subarray(i, i + chunk));
638
+ }
639
+ return btoa(binary);
640
+ }
641
+ function base64ToText(base64) {
642
+ const binary = atob(base64);
643
+ const bytes = new Uint8Array(binary.length);
644
+ for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
645
+ return new TextDecoder("utf-8").decode(bytes);
646
+ }
647
+ function base64ToArrayBuffer(base64) {
648
+ const binary = atob(base64);
649
+ const bytes = new Uint8Array(binary.length);
650
+ for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
651
+ return bytes.buffer;
652
+ }
653
+ var init_decode = __esm({
654
+ "src/shared/viewers/decode.ts"() {
655
+ }
656
+ });
657
+
658
+ // src/shared/viewers/CsvViewer.tsx
659
+ var CsvViewer_exports = {};
660
+ __export(CsvViewer_exports, {
661
+ CsvViewer: () => CsvViewer
662
+ });
663
+ function CsvViewer({ url, base64, delimiter, maxRows }) {
664
+ const { BORDER: BORDER2, MUTED: MUTED2, PAPER: PAPER2 } = useTheme();
665
+ const [rows, setRows] = React10.useState([]);
666
+ const [loading, setLoading] = React10.useState(true);
667
+ const [error, setError] = React10.useState(null);
668
+ React10.useEffect(() => {
669
+ let cancelled = false;
670
+ setLoading(true);
671
+ setError(null);
672
+ const parse = (text) => {
673
+ if (cancelled) return;
674
+ const out = Papa__default.default.parse(text, {
675
+ delimiter: delimiter || "",
676
+ skipEmptyLines: true
677
+ });
678
+ setRows(out.data || []);
679
+ setLoading(false);
680
+ };
681
+ if (base64) {
682
+ try {
683
+ parse(base64ToText(base64));
684
+ } catch (e) {
685
+ if (!cancelled) {
686
+ setError(e instanceof Error ? e.message : "Failed to decode CSV");
687
+ setLoading(false);
688
+ }
689
+ }
690
+ return () => {
691
+ cancelled = true;
692
+ };
693
+ }
694
+ if (!url) {
695
+ setError("No file source provided");
696
+ setLoading(false);
697
+ return () => {
698
+ cancelled = true;
699
+ };
700
+ }
701
+ fetch(url).then((r) => {
702
+ if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
703
+ return r.text();
704
+ }).then(parse).catch((e) => {
705
+ if (cancelled) return;
706
+ setError(e.message);
707
+ setLoading(false);
708
+ });
709
+ return () => {
710
+ cancelled = true;
711
+ };
712
+ }, [url, base64, delimiter]);
713
+ if (loading) {
714
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading CSV\u2026" });
715
+ }
716
+ if (error) {
717
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: "#dc2626", fontSize: "13px", textAlign: "center" }, children: error });
718
+ }
719
+ if (!rows.length) {
720
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Empty file" });
721
+ }
722
+ const [header, ...body] = rows;
723
+ const shown = maxRows != null ? body.slice(0, maxRows) : body;
724
+ const isNum = (v) => v !== "" && !isNaN(Number(v));
725
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { overflow: "auto", width: "100%" }, children: [
726
+ /* @__PURE__ */ jsxRuntime.jsxs("table", { style: { borderCollapse: "collapse", width: "100%", fontSize: "12px" }, children: [
727
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: header.map((h, i) => /* @__PURE__ */ jsxRuntime.jsx(
728
+ "th",
729
+ {
730
+ style: {
731
+ position: "sticky",
732
+ top: 0,
733
+ textAlign: "left",
734
+ padding: "6px 10px",
735
+ background: PAPER2,
736
+ color: "var(--foreground)",
737
+ fontWeight: 600,
738
+ borderBottom: `1px solid ${BORDER2}`,
739
+ whiteSpace: "nowrap"
740
+ },
741
+ children: h
742
+ },
743
+ i
744
+ )) }) }),
745
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: shown.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: header.map((_, ci) => {
746
+ var _a;
747
+ const cell = (_a = row[ci]) != null ? _a : "";
748
+ return /* @__PURE__ */ jsxRuntime.jsx(
749
+ "td",
750
+ {
751
+ style: {
752
+ padding: "5px 10px",
753
+ borderBottom: `1px solid ${BORDER2}`,
754
+ color: MUTED2,
755
+ textAlign: isNum(cell) ? "right" : "left",
756
+ fontVariantNumeric: isNum(cell) ? "tabular-nums" : "normal",
757
+ whiteSpace: "nowrap"
758
+ },
759
+ children: cell
760
+ },
761
+ ci
762
+ );
763
+ }) }, ri)) })
764
+ ] }),
765
+ maxRows != null && body.length > maxRows && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { padding: "6px 10px", fontSize: "11px", color: MUTED2 }, children: [
766
+ "+",
767
+ body.length - maxRows,
768
+ " more rows"
769
+ ] })
770
+ ] });
771
+ }
772
+ var init_CsvViewer = __esm({
773
+ "src/shared/viewers/CsvViewer.tsx"() {
774
+ "use client";
775
+ init_ThemeContext();
776
+ init_decode();
777
+ }
778
+ });
779
+
780
+ // src/shared/viewers/TextViewer.tsx
781
+ var TextViewer_exports = {};
782
+ __export(TextViewer_exports, {
783
+ TextViewer: () => TextViewer
784
+ });
785
+ function TextViewer({ url, base64, markdown = false, maxLines }) {
786
+ const { MUTED: MUTED2 } = useTheme();
787
+ const [text, setText] = React10.useState("");
788
+ const [loading, setLoading] = React10.useState(true);
789
+ const [error, setError] = React10.useState(null);
790
+ React10.useEffect(() => {
791
+ let cancelled = false;
792
+ setLoading(true);
793
+ setError(null);
794
+ if (base64) {
795
+ try {
796
+ if (!cancelled) {
797
+ setText(base64ToText(base64));
798
+ setLoading(false);
799
+ }
800
+ } catch (e) {
801
+ if (!cancelled) {
802
+ setError(e instanceof Error ? e.message : "Failed to decode text");
803
+ setLoading(false);
804
+ }
805
+ }
806
+ return () => {
807
+ cancelled = true;
808
+ };
809
+ }
810
+ if (!url) {
811
+ setError("No file source provided");
812
+ setLoading(false);
813
+ return () => {
814
+ cancelled = true;
815
+ };
816
+ }
817
+ fetch(url).then((r) => {
818
+ if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
819
+ return r.text();
820
+ }).then((t) => {
821
+ if (cancelled) return;
822
+ setText(t);
823
+ setLoading(false);
824
+ }).catch((e) => {
825
+ if (cancelled) return;
826
+ setError(e.message);
827
+ setLoading(false);
828
+ });
829
+ return () => {
830
+ cancelled = true;
831
+ };
832
+ }, [url, base64]);
833
+ if (loading) {
834
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading\u2026" });
835
+ }
836
+ if (error) {
837
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: "#dc2626", fontSize: "13px", textAlign: "center" }, children: error });
838
+ }
839
+ const shown = maxLines != null ? text.split("\n").slice(0, maxLines).join("\n") : text;
840
+ const clipped = maxLines != null && text.split("\n").length > maxLines;
841
+ if (markdown) {
842
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { padding: "14px 16px", fontSize: "13px", lineHeight: 1.6 }, children: [
843
+ /* @__PURE__ */ jsxRuntime.jsx(Markdown, { content: shown }),
844
+ clipped && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: MUTED2, fontSize: "11px", marginTop: "6px" }, children: "\u2026" })
845
+ ] });
846
+ }
847
+ return /* @__PURE__ */ jsxRuntime.jsxs(
848
+ "pre",
849
+ {
850
+ style: {
851
+ margin: 0,
852
+ padding: "14px 16px",
853
+ fontSize: "12px",
854
+ lineHeight: 1.5,
855
+ fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
856
+ color: "var(--foreground)",
857
+ whiteSpace: "pre",
858
+ overflow: "auto",
859
+ width: "100%",
860
+ boxSizing: "border-box"
861
+ },
862
+ children: [
863
+ shown,
864
+ clipped ? "\n\u2026" : ""
865
+ ]
866
+ }
867
+ );
868
+ }
869
+ var init_TextViewer = __esm({
870
+ "src/shared/viewers/TextViewer.tsx"() {
871
+ "use client";
872
+ init_ThemeContext();
873
+ init_Markdown();
874
+ init_decode();
875
+ }
876
+ });
877
+
878
+ // src/shared/viewers/DocxViewer.tsx
879
+ var DocxViewer_exports = {};
880
+ __export(DocxViewer_exports, {
881
+ DocxViewer: () => DocxViewer
882
+ });
883
+ function sanitize(html) {
884
+ return html.replace(/<\s*(script|style|iframe|object|embed)[\s\S]*?<\/\s*\1\s*>/gi, "").replace(/\son\w+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi, "").replace(/javascript:/gi, "");
885
+ }
886
+ function DocxViewer({ url, base64 }) {
887
+ const { MUTED: MUTED2, BORDER: BORDER2 } = useTheme();
888
+ const [html, setHtml] = React10.useState("");
889
+ const [loading, setLoading] = React10.useState(true);
890
+ const [error, setError] = React10.useState(null);
891
+ React10.useEffect(() => {
892
+ let cancelled = false;
893
+ setLoading(true);
894
+ setError(null);
895
+ const convert = (arrayBuffer) => {
896
+ mammoth__namespace.convertToHtml({ arrayBuffer }).then((res) => {
897
+ if (cancelled) return;
898
+ setHtml(sanitize(res.value || ""));
899
+ setLoading(false);
900
+ }).catch((e) => {
901
+ if (cancelled) return;
902
+ setError(e instanceof Error ? e.message : "Failed to render DOCX");
903
+ setLoading(false);
904
+ });
905
+ };
906
+ try {
907
+ if (base64) {
908
+ convert(base64ToArrayBuffer(base64));
909
+ return () => {
910
+ cancelled = true;
911
+ };
912
+ }
913
+ } catch (e) {
914
+ setError(e instanceof Error ? e.message : "Failed to decode DOCX");
915
+ setLoading(false);
916
+ return () => {
917
+ cancelled = true;
918
+ };
919
+ }
920
+ if (!url) {
921
+ setError("No file source provided");
922
+ setLoading(false);
923
+ return () => {
924
+ cancelled = true;
925
+ };
926
+ }
927
+ fetch(url).then((r) => {
928
+ if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
929
+ return r.arrayBuffer();
930
+ }).then(convert).catch((e) => {
931
+ if (cancelled) return;
932
+ setError(e.message);
933
+ setLoading(false);
934
+ });
935
+ return () => {
936
+ cancelled = true;
937
+ };
938
+ }, [url, base64]);
939
+ if (loading) {
940
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading document\u2026" });
941
+ }
942
+ if (error) {
943
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: "#dc2626", fontSize: "13px", textAlign: "center" }, children: error });
944
+ }
945
+ return /* @__PURE__ */ jsxRuntime.jsx(
946
+ "div",
947
+ {
948
+ style: {
949
+ padding: "18px 22px",
950
+ fontSize: "13px",
951
+ lineHeight: 1.6,
952
+ color: "var(--foreground)",
953
+ maxWidth: "720px",
954
+ margin: "0 auto",
955
+ borderLeft: `1px solid ${BORDER2}`,
956
+ borderRight: `1px solid ${BORDER2}`,
957
+ background: "white"
958
+ },
959
+ dangerouslySetInnerHTML: { __html: html }
960
+ }
961
+ );
962
+ }
963
+ var init_DocxViewer = __esm({
964
+ "src/shared/viewers/DocxViewer.tsx"() {
965
+ "use client";
966
+ init_ThemeContext();
967
+ init_decode();
968
+ }
969
+ });
970
+
971
+ // src/shared/ColumnSettingsPanel.tsx
972
+ init_theme();
973
+ function ColumnSettingsPanel({ columns, hidden, onToggle, onShowAll, onHideAll }) {
974
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "6px", minWidth: "180px" }, children: [
975
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", paddingBottom: "4px", borderBottom: `1px solid ${BORDER}` }, children: [
976
+ /* @__PURE__ */ jsxRuntime.jsx(
977
+ "button",
978
+ {
979
+ onClick: onShowAll,
980
+ style: { background: "none", border: "none", cursor: "pointer", fontSize: "11px", color: ACCENT, fontWeight: 500, padding: 0 },
981
+ children: "Show all"
982
+ }
983
+ ),
984
+ /* @__PURE__ */ jsxRuntime.jsx(
985
+ "button",
986
+ {
987
+ onClick: onHideAll,
988
+ style: { background: "none", border: "none", cursor: "pointer", fontSize: "11px", color: MUTED, fontWeight: 500, padding: 0 },
989
+ children: "Hide all"
990
+ }
991
+ )
992
+ ] }),
993
+ columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs(
994
+ "label",
995
+ {
996
+ style: { display: "flex", alignItems: "center", gap: "8px", cursor: "pointer", fontSize: "12px", color: "var(--foreground)" },
997
+ children: [
998
+ /* @__PURE__ */ jsxRuntime.jsx(
999
+ "input",
1000
+ {
1001
+ type: "checkbox",
1002
+ checked: !hidden.has(col.key),
1003
+ onChange: () => onToggle(col.key),
1004
+ style: { accentColor: ACCENT, width: "14px", height: "14px", margin: 0, cursor: "pointer" }
1005
+ }
1006
+ ),
1007
+ col.label
1008
+ ]
1009
+ },
1010
+ col.key
1011
+ ))
1012
+ ] });
1013
+ }
1014
+
1015
+ // src/shared/ComponentActions.tsx
1016
+ init_theme();
1017
+ var DOT_COLOR = "#aaaaaa";
1018
+ var DOT_HOVER = "#555555";
1019
+ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "component" }) {
1020
+ const [open, setOpen] = React10.useState(false);
1021
+ const [view, setView] = React10.useState("main");
1022
+ const contentRef = React10.useRef(null);
1023
+ const menuRef = React10.useRef(null);
1024
+ const btnRef = React10.useRef(null);
1025
+ const close = React10.useCallback(() => {
1026
+ setOpen(false);
1027
+ setView("main");
1028
+ }, []);
1029
+ React10.useEffect(() => {
1030
+ if (!open) return;
1031
+ const handler = (e) => {
1032
+ var _a, _b;
1033
+ if ((_a = menuRef.current) == null ? void 0 : _a.contains(e.target)) return;
1034
+ if ((_b = btnRef.current) == null ? void 0 : _b.contains(e.target)) return;
1035
+ close();
1036
+ };
1037
+ document.addEventListener("mousedown", handler);
1038
+ return () => document.removeEventListener("mousedown", handler);
1039
+ }, [open, close]);
1040
+ const handleDownloadPNG = React10.useCallback(async () => {
1041
+ if (!contentRef.current) return;
1042
+ try {
1043
+ const url = await htmlToImage.toPng(contentRef.current, { backgroundColor: "white", pixelRatio: 2 });
1044
+ const a = document.createElement("a");
1045
+ a.href = url;
1046
+ a.download = `${filename}.png`;
1047
+ a.click();
1048
+ } catch (e) {
1049
+ }
1050
+ close();
1051
+ }, [filename, close]);
1052
+ const handleCSV = React10.useCallback(() => {
1053
+ onDownloadCSV == null ? void 0 : onDownloadCSV();
1054
+ close();
1055
+ }, [onDownloadCSV, close]);
1056
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column" }, children: [
1057
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: contentRef, style: { width: "100%" }, children }),
1058
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "flex-end", marginTop: "4px", position: "relative", zIndex: 10, flexShrink: 0 }, children: [
1059
+ /* @__PURE__ */ jsxRuntime.jsx(
1060
+ "button",
1061
+ {
1062
+ ref: btnRef,
1063
+ onClick: () => {
1064
+ setOpen((o) => !o);
1065
+ setView("main");
1066
+ },
1067
+ "aria-label": "Component actions",
1068
+ style: {
1069
+ background: "none",
1070
+ border: "none",
1071
+ cursor: "pointer",
1072
+ padding: "4px 8px",
1073
+ display: "flex",
1074
+ gap: "3px",
1075
+ alignItems: "center",
1076
+ borderRadius: "6px",
1077
+ transition: "background 0.15s"
1078
+ },
1079
+ onMouseEnter: (e) => {
1080
+ e.currentTarget.style.background = "#f2f2f2";
1081
+ e.currentTarget.querySelectorAll("circle").forEach((c) => c.style.fill = DOT_HOVER);
1082
+ },
1083
+ onMouseLeave: (e) => {
1084
+ e.currentTarget.style.background = "none";
1085
+ e.currentTarget.querySelectorAll("circle").forEach((c) => c.style.fill = DOT_COLOR);
1086
+ },
1087
+ children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "6", viewBox: "0 0 20 6", children: [
1088
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "3", cy: "3", r: "2", style: { fill: DOT_COLOR, transition: "fill 0.15s" } }),
1089
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "10", cy: "3", r: "2", style: { fill: DOT_COLOR, transition: "fill 0.15s" } }),
1090
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "17", cy: "3", r: "2", style: { fill: DOT_COLOR, transition: "fill 0.15s" } })
1091
+ ] })
1092
+ }
1093
+ ),
1094
+ open && /* @__PURE__ */ jsxRuntime.jsx(
1095
+ "div",
1096
+ {
1097
+ ref: menuRef,
1098
+ style: {
1099
+ position: "absolute",
1100
+ bottom: "100%",
1101
+ right: 0,
1102
+ marginBottom: "4px",
1103
+ background: "white",
1104
+ border: `1px solid ${BORDER}`,
1105
+ borderRadius: "0.75rem",
1106
+ boxShadow: "0 4px 12px rgba(0,0,0,0.06)",
1107
+ zIndex: 50,
1108
+ padding: view === "columns" ? "10px" : "4px",
1109
+ minWidth: view === "columns" ? "200px" : "160px"
1110
+ },
1111
+ children: view === "main" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
1112
+ columnConfig && /* @__PURE__ */ jsxRuntime.jsx(MenuButton, { label: "Customize columns", onClick: () => setView("columns") }),
1113
+ onDownloadCSV && /* @__PURE__ */ jsxRuntime.jsx(MenuButton, { label: "Download CSV", onClick: handleCSV }),
1114
+ /* @__PURE__ */ jsxRuntime.jsx(MenuButton, { label: "Download PNG", onClick: handleDownloadPNG })
1115
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1116
+ /* @__PURE__ */ jsxRuntime.jsx(
1117
+ "button",
1118
+ {
1119
+ onClick: () => setView("main"),
1120
+ style: { background: "none", border: "none", cursor: "pointer", fontSize: "11px", color: MUTED, marginBottom: "6px", padding: 0 },
1121
+ children: "\u2190 Back"
1122
+ }
1123
+ ),
1124
+ /* @__PURE__ */ jsxRuntime.jsx(
1125
+ ColumnSettingsPanel,
1126
+ {
1127
+ columns: columnConfig.columns,
1128
+ hidden: columnConfig.hidden,
1129
+ onToggle: columnConfig.onToggle,
1130
+ onShowAll: columnConfig.onShowAll,
1131
+ onHideAll: columnConfig.onHideAll
1132
+ }
1133
+ )
1134
+ ] })
1135
+ }
1136
+ )
1137
+ ] })
1138
+ ] });
1139
+ }
1140
+ function MenuButton({ label, onClick }) {
1141
+ return /* @__PURE__ */ jsxRuntime.jsx(
1142
+ "button",
1143
+ {
1144
+ onClick,
1145
+ style: {
1146
+ background: "none",
1147
+ border: "none",
1148
+ cursor: "pointer",
1149
+ padding: "8px 12px",
1150
+ fontSize: "12.5px",
1151
+ color: "var(--foreground)",
1152
+ textAlign: "left",
1153
+ borderRadius: "8px",
1154
+ transition: "background 0.15s",
1155
+ whiteSpace: "nowrap"
1156
+ },
1157
+ onMouseEnter: (e) => e.currentTarget.style.background = "#f2f2f2",
1158
+ onMouseLeave: (e) => e.currentTarget.style.background = "none",
1159
+ children: label
1160
+ }
1161
+ );
1162
+ }
1163
+
1164
+ // src/shared/FileCard.tsx
1165
+ init_ThemeContext();
1166
+ init_Markdown();
1167
+
1168
+ // src/shared/fileType.ts
1169
+ var FAMILIES = [
1170
+ { exts: ["csv", "tsv", "xls", "xlsx", "numbers"], fg: "#15803d", bg: "#e7f6ee" },
1171
+ { exts: ["pdf"], fg: "#dc2626", bg: "#fdecec" },
1172
+ { exts: ["doc", "docx", "txt", "md", "rtf", "pages"], fg: "#2563eb", bg: "#e8f0fe" },
1173
+ { exts: ["json", "yaml", "yml", "xml", "toml"], fg: "#7c3aed", bg: "#f1ebfe" },
1174
+ { exts: ["zip", "tar", "gz", "rar", "7z"], fg: "#b45309", bg: "#fdf2e3" },
1175
+ { exts: ["png", "jpg", "jpeg", "gif", "svg", "webp", "bmp"], fg: "#0891b2", bg: "#e4f6fa" }
1176
+ ];
1177
+ function fileTypeMeta(fileType, filename) {
1178
+ const token = fileType && !fileType.includes("/") ? fileType : (filename || "").split(".").pop() || "";
1179
+ const ext = token.toLowerCase().replace(/[^a-z0-9]/g, "");
1180
+ if (!ext) return { label: "FILE", fg: "", bg: "" };
1181
+ const fam = FAMILIES.find((f) => f.exts.includes(ext));
1182
+ return {
1183
+ label: ext.slice(0, 4).toUpperCase(),
1184
+ fg: fam ? fam.fg : "",
1185
+ bg: fam ? fam.bg : ""
1186
+ };
1187
+ }
1188
+ var PREVIEW_EXTS = {
1189
+ pdf: "pdf",
1190
+ xlsx: "excel",
1191
+ xls: "excel",
1192
+ csv: "csv",
1193
+ tsv: "csv",
1194
+ md: "markdown",
1195
+ markdown: "markdown",
1196
+ txt: "text",
1197
+ log: "text",
1198
+ text: "text",
1199
+ docx: "docx"
1200
+ };
1201
+ function extOf(fileType, filename) {
1202
+ var _a;
1203
+ if (fileType && fileType.includes("/")) {
1204
+ const mime = fileType.toLowerCase();
1205
+ if (mime.includes("pdf")) return "pdf";
1206
+ if (mime.includes("spreadsheet") || mime.includes("excel")) return "xlsx";
1207
+ if (mime.includes("csv")) return "csv";
1208
+ if (mime.includes("markdown")) return "md";
1209
+ if (mime.includes("wordprocessing") || mime.includes("msword")) return "docx";
1210
+ if (mime.startsWith("text/")) return "txt";
1211
+ } else if (fileType) {
1212
+ const t = fileType.toLowerCase().replace(/[^a-z0-9]/g, "");
1213
+ if (t) return t;
1214
+ }
1215
+ return ((_a = (filename || "").split(".").pop()) == null ? void 0 : _a.toLowerCase().replace(/[^a-z0-9]/g, "")) || "";
1216
+ }
1217
+ function previewKindFor(fileType, filename) {
1218
+ var _a;
1219
+ return (_a = PREVIEW_EXTS[extOf(fileType, filename)]) != null ? _a : null;
1220
+ }
1221
+ function formatExpiry(expiresAt) {
1222
+ const date = new Date(expiresAt);
1223
+ if (isNaN(date.getTime())) return expiresAt;
1224
+ const diffDays = Math.round((date.getTime() - Date.now()) / (1e3 * 60 * 60 * 24));
1225
+ if (diffDays < 0) return "Expired";
1226
+ if (diffDays === 0) return "Today";
1227
+ if (diffDays === 1) return "Tomorrow";
1228
+ if (diffDays < 7) return `in ${diffDays} days`;
1229
+ return date.toLocaleDateString(void 0, {
1230
+ month: "short",
1231
+ day: "numeric",
1232
+ year: "numeric"
1233
+ });
1234
+ }
1235
+ function isExpirySoon(expiresAt) {
1236
+ const date = new Date(expiresAt);
1237
+ if (isNaN(date.getTime())) return false;
1238
+ return date.getTime() - Date.now() < 2 * 24 * 60 * 60 * 1e3;
1239
+ }
1240
+
1241
+ // src/shared/viewers/PreviewHost.tsx
1242
+ init_ThemeContext();
1243
+ var PdfViewer2 = React10.lazy(
1244
+ () => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
1245
+ );
1246
+ var ExcelViewer2 = React10.lazy(
1247
+ () => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
1248
+ );
1249
+ var CsvViewer2 = React10.lazy(() => Promise.resolve().then(() => (init_CsvViewer(), CsvViewer_exports)).then((m) => ({ default: m.CsvViewer })));
1250
+ var TextViewer2 = React10.lazy(() => Promise.resolve().then(() => (init_TextViewer(), TextViewer_exports)).then((m) => ({ default: m.TextViewer })));
1251
+ var DocxViewer2 = React10.lazy(() => Promise.resolve().then(() => (init_DocxViewer(), DocxViewer_exports)).then((m) => ({ default: m.DocxViewer })));
1252
+ var PEEK_ROWS = 20;
1253
+ var PEEK_LINES = 40;
1254
+ function PreviewHost({ kind, source, mode = "full" }) {
1255
+ const { MUTED: MUTED2 } = useTheme();
1256
+ const peek = mode === "peek";
1257
+ const fallback = /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading preview\u2026" });
1258
+ let viewer = null;
1259
+ switch (kind) {
1260
+ case "pdf":
1261
+ viewer = /* @__PURE__ */ jsxRuntime.jsx(PdfViewer2, { url: source.url, base64: source.base64 });
1262
+ break;
1263
+ case "excel":
1264
+ viewer = /* @__PURE__ */ jsxRuntime.jsx(ExcelViewer2, { url: source.url, base64: source.base64 });
1265
+ break;
1266
+ case "csv":
1267
+ viewer = /* @__PURE__ */ jsxRuntime.jsx(CsvViewer2, { url: source.url, base64: source.base64, maxRows: peek ? PEEK_ROWS : void 0 });
1268
+ break;
1269
+ case "markdown":
1270
+ viewer = /* @__PURE__ */ jsxRuntime.jsx(TextViewer2, { url: source.url, base64: source.base64, markdown: true, maxLines: peek ? PEEK_LINES : void 0 });
1271
+ break;
1272
+ case "text":
1273
+ viewer = /* @__PURE__ */ jsxRuntime.jsx(TextViewer2, { url: source.url, base64: source.base64, maxLines: peek ? PEEK_LINES : void 0 });
1274
+ break;
1275
+ case "docx":
1276
+ viewer = /* @__PURE__ */ jsxRuntime.jsx(DocxViewer2, { url: source.url, base64: source.base64 });
1277
+ break;
1278
+ default:
1279
+ return null;
1280
+ }
1281
+ return /* @__PURE__ */ jsxRuntime.jsx(React10.Suspense, { fallback, children: viewer });
1282
+ }
1283
+
1284
+ // src/shared/PreviewModal.tsx
1285
+ init_ThemeContext();
1286
+ function PreviewModal({
1287
+ open,
1288
+ onClose,
1289
+ filename,
1290
+ fileType,
1291
+ kind,
1292
+ source,
1293
+ downloadUrl,
1294
+ onDownload
1295
+ }) {
1296
+ const { BORDER: BORDER2, MUTED: MUTED2, ACCENT: ACCENT2 } = useTheme();
1297
+ React10.useEffect(() => {
1298
+ if (!open) return;
1299
+ const onKey = (e) => {
1300
+ if (e.key === "Escape") onClose();
1301
+ };
1302
+ window.addEventListener("keydown", onKey);
1303
+ const prev = document.body.style.overflow;
1304
+ document.body.style.overflow = "hidden";
1305
+ return () => {
1306
+ window.removeEventListener("keydown", onKey);
1307
+ document.body.style.overflow = prev;
1308
+ };
1309
+ }, [open, onClose]);
1310
+ if (!open || typeof document === "undefined") return null;
1311
+ const ftype = fileTypeMeta(fileType, filename);
1312
+ return reactDom.createPortal(
1313
+ /* @__PURE__ */ jsxRuntime.jsx(
1314
+ "div",
1315
+ {
1316
+ role: "dialog",
1317
+ "aria-modal": "true",
1318
+ "aria-label": `Preview ${filename}`,
1319
+ onClick: onClose,
1320
+ style: {
1321
+ position: "fixed",
1322
+ inset: 0,
1323
+ zIndex: 2147483e3,
1324
+ background: "rgba(15,23,42,0.55)",
1325
+ display: "flex",
1326
+ alignItems: "center",
1327
+ justifyContent: "center",
1328
+ padding: "4vh 4vw",
1329
+ backdropFilter: "blur(2px)"
1330
+ },
1331
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1332
+ "div",
1333
+ {
1334
+ onClick: (e) => e.stopPropagation(),
1335
+ style: {
1336
+ width: "min(960px, 100%)",
1337
+ height: "min(92vh, 100%)",
1338
+ background: "white",
1339
+ borderRadius: "0.875rem",
1340
+ border: `1px solid ${BORDER2}`,
1341
+ boxShadow: "0 20px 60px rgba(15,23,42,0.30)",
1342
+ display: "flex",
1343
+ flexDirection: "column",
1344
+ overflow: "hidden"
1345
+ },
1346
+ children: [
1347
+ /* @__PURE__ */ jsxRuntime.jsxs(
1348
+ "div",
1349
+ {
1350
+ style: {
1351
+ display: "flex",
1352
+ alignItems: "center",
1353
+ gap: "10px",
1354
+ padding: "11px 14px",
1355
+ borderBottom: `1px solid ${BORDER2}`,
1356
+ flexShrink: 0
1357
+ },
1358
+ children: [
1359
+ /* @__PURE__ */ jsxRuntime.jsx(
1360
+ "span",
1361
+ {
1362
+ "aria-hidden": "true",
1363
+ style: {
1364
+ fontSize: "9.5px",
1365
+ fontWeight: 700,
1366
+ letterSpacing: "0.04em",
1367
+ padding: "3px 7px",
1368
+ borderRadius: "6px",
1369
+ fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
1370
+ color: ftype.fg || ACCENT2,
1371
+ background: ftype.bg || "rgba(99,102,241,0.06)"
1372
+ },
1373
+ children: ftype.label
1374
+ }
1375
+ ),
1376
+ /* @__PURE__ */ jsxRuntime.jsx(
1377
+ "span",
1378
+ {
1379
+ style: {
1380
+ flex: 1,
1381
+ minWidth: 0,
1382
+ fontSize: "13.5px",
1383
+ fontWeight: 600,
1384
+ color: "var(--foreground)",
1385
+ overflow: "hidden",
1386
+ textOverflow: "ellipsis",
1387
+ whiteSpace: "nowrap"
1388
+ },
1389
+ children: filename
1390
+ }
1391
+ ),
1392
+ (downloadUrl || onDownload) && (downloadUrl ? /* @__PURE__ */ jsxRuntime.jsx(
1393
+ "a",
1394
+ {
1395
+ href: downloadUrl,
1396
+ target: "_blank",
1397
+ rel: "noopener noreferrer",
1398
+ style: footerBtn(BORDER2),
1399
+ children: "Download"
1400
+ }
1401
+ ) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onDownload, style: footerBtn(BORDER2), children: "Download" })),
1402
+ /* @__PURE__ */ jsxRuntime.jsx(
1403
+ "button",
1404
+ {
1405
+ type: "button",
1406
+ "aria-label": "Close preview",
1407
+ onClick: onClose,
1408
+ style: {
1409
+ border: `1px solid ${BORDER2}`,
1410
+ borderRadius: "8px",
1411
+ background: "white",
1412
+ cursor: "pointer",
1413
+ padding: "5px 9px",
1414
+ fontSize: "13px",
1415
+ color: MUTED2,
1416
+ lineHeight: 1
1417
+ },
1418
+ children: "\u2715"
1419
+ }
1420
+ )
1421
+ ]
1422
+ }
1423
+ ),
1424
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1, minHeight: 0, overflow: "auto", background: "white" }, children: /* @__PURE__ */ jsxRuntime.jsx(PreviewHost, { kind, source, mode: "full" }) })
1425
+ ]
1426
+ }
1427
+ )
1428
+ }
1429
+ ),
1430
+ document.body
1431
+ );
1432
+ }
1433
+ function footerBtn(border) {
1434
+ return {
1435
+ display: "inline-flex",
1436
+ alignItems: "center",
1437
+ gap: "6px",
1438
+ border: `1px solid ${border}`,
1439
+ borderRadius: "8px",
1440
+ background: "white",
1441
+ color: "var(--foreground)",
1442
+ cursor: "pointer",
1443
+ padding: "5px 11px",
1444
+ fontSize: "12px",
1445
+ fontWeight: 600,
1446
+ textDecoration: "none",
1447
+ fontFamily: "inherit"
1448
+ };
1449
+ }
1450
+
1451
+ // src/shared/FileCard.tsx
1452
+ init_decode();
1453
+ function FileCard({
1454
+ filename,
1455
+ size,
1456
+ fileType,
1457
+ expiresAt,
1458
+ description,
1459
+ downloadUrl,
1460
+ onDownload,
1461
+ downloadBusy = false,
1462
+ downloadLabel = "Download",
1463
+ actions,
1464
+ dense = false,
1465
+ previewUrl,
1466
+ fetchPreviewBlob,
1467
+ previewDisabled = false
1468
+ }) {
1469
+ const { BORDER: BORDER2, MUTED: MUTED2, ACCENT: ACCENT2 } = useTheme();
1470
+ const [cardHover, setCardHover] = React10.useState(false);
1471
+ const [btnHover, setBtnHover] = React10.useState(false);
1472
+ const [pvHover, setPvHover] = React10.useState(false);
1473
+ const previewKind = previewKindFor(fileType, filename);
1474
+ const canPreview = !previewDisabled && previewKind !== null && (!!previewUrl || !!fetchPreviewBlob);
1475
+ const [peekOpen, setPeekOpen] = React10.useState(false);
1476
+ const [modalOpen, setModalOpen] = React10.useState(false);
1477
+ const [source, setSource] = React10.useState(previewUrl ? { url: previewUrl } : null);
1478
+ const [pvLoading, setPvLoading] = React10.useState(false);
1479
+ const [pvError, setPvError] = React10.useState(null);
1480
+ const ensureSource = React10.useCallback(async () => {
1481
+ if (source) return source;
1482
+ if (previewUrl) {
1483
+ const s = { url: previewUrl };
1484
+ setSource(s);
1485
+ return s;
1486
+ }
1487
+ if (!fetchPreviewBlob) return null;
1488
+ setPvLoading(true);
1489
+ setPvError(null);
1490
+ try {
1491
+ const blob = await fetchPreviewBlob();
1492
+ const s = { base64: await blobToBase64(blob) };
1493
+ setSource(s);
1494
+ return s;
1495
+ } catch (e) {
1496
+ setPvError(e instanceof Error ? e.message : "Failed to load preview");
1497
+ return null;
1498
+ } finally {
1499
+ setPvLoading(false);
1500
+ }
1501
+ }, [source, previewUrl, fetchPreviewBlob]);
1502
+ const togglePeek = React10.useCallback(async () => {
1503
+ if (peekOpen) {
1504
+ setPeekOpen(false);
1505
+ return;
1506
+ }
1507
+ setPeekOpen(true);
1508
+ await ensureSource();
1509
+ }, [peekOpen, ensureSource]);
1510
+ const openModal = React10.useCallback(async () => {
1511
+ const s = await ensureSource();
1512
+ if (s) setModalOpen(true);
1513
+ }, [ensureSource]);
1514
+ const ftype = fileTypeMeta(fileType, filename);
1515
+ const tileSize = dense ? 28 : 40;
1516
+ const tileRadius = dense ? 8 : 11;
1517
+ const expirySoon = expiresAt ? isExpirySoon(expiresAt) : false;
1518
+ const metaTokens = [];
1519
+ if (ftype.label && ftype.label !== "FILE") metaTokens.push(ftype.label);
1520
+ if (size) metaTokens.push(size);
1521
+ const ghostBtn = (hover) => ({
1522
+ display: "inline-flex",
1523
+ alignItems: "center",
1524
+ gap: "6px",
1525
+ background: hover ? "#f4f4f5" : "white",
1526
+ color: "var(--foreground)",
1527
+ borderRadius: "8px",
1528
+ padding: dense ? "5px 11px" : "7px 13px",
1529
+ fontSize: dense ? "11.5px" : "12px",
1530
+ fontWeight: 600,
1531
+ textDecoration: "none",
1532
+ whiteSpace: "nowrap",
1533
+ flexShrink: 0,
1534
+ cursor: "pointer",
1535
+ border: `1px solid ${hover ? "#d2d2d2" : BORDER2}`,
1536
+ fontFamily: "inherit",
1537
+ transition: "background 0.15s ease, border-color 0.15s ease"
1538
+ });
1539
+ const downloadStyle = __spreadProps(__spreadValues({}, ghostBtn(btnHover)), {
1540
+ cursor: downloadBusy ? "progress" : "pointer",
1541
+ opacity: downloadBusy ? 0.8 : 1
1542
+ });
1543
+ const downloadInner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1544
+ /* @__PURE__ */ jsxRuntime.jsx(DownloadGlyph, { spinning: downloadBusy, size: dense ? 13 : 14 }),
1545
+ !dense && /* @__PURE__ */ jsxRuntime.jsx("span", { children: downloadBusy ? "Downloading\u2026" : downloadLabel })
1546
+ ] });
1547
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1548
+ "div",
1549
+ {
1550
+ onMouseEnter: () => setCardHover(true),
1551
+ onMouseLeave: () => setCardHover(false),
1552
+ style: {
1553
+ width: "100%",
1554
+ boxSizing: "border-box",
1555
+ borderRadius: "0.875rem",
1556
+ border: `1px solid ${cardHover ? "#d2d2d2" : BORDER2}`,
1557
+ background: "white",
1558
+ display: "flex",
1559
+ flexDirection: "column",
1560
+ boxShadow: cardHover ? "0 2px 10px rgba(15,23,42,0.06), 0 10px 28px rgba(15,23,42,0.07)" : "0 1px 2px rgba(15,23,42,0.04)",
1561
+ transform: cardHover ? "translateY(-1px)" : "translateY(0)",
1562
+ transition: "box-shadow 0.2s ease, border-color 0.2s ease, transform 0.2s ease"
1563
+ },
1564
+ children: [
1565
+ /* @__PURE__ */ jsxRuntime.jsxs(
1566
+ "div",
1567
+ {
1568
+ style: {
1569
+ display: "flex",
1570
+ flexDirection: "row",
1571
+ alignItems: "center",
1572
+ gap: dense ? "11px" : "13px",
1573
+ padding: dense ? "9px 11px" : "12px 14px"
1574
+ },
1575
+ children: [
1576
+ /* @__PURE__ */ jsxRuntime.jsx(
1577
+ "div",
1578
+ {
1579
+ "aria-hidden": "true",
1580
+ style: {
1581
+ width: tileSize,
1582
+ height: tileSize,
1583
+ borderRadius: tileRadius,
1584
+ flexShrink: 0,
1585
+ display: "grid",
1586
+ placeItems: "center",
1587
+ fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
1588
+ fontSize: dense ? "9.5px" : "10.5px",
1589
+ fontWeight: 700,
1590
+ letterSpacing: "0.04em",
1591
+ color: ftype.fg || ACCENT2,
1592
+ background: ftype.bg || "var(--ag-accent-tint-canvas, rgba(99,102,241,0.06))",
1593
+ boxShadow: "inset 0 0 0 1px rgba(15,23,42,0.06)"
1594
+ },
1595
+ children: ftype.label
1596
+ }
1597
+ ),
1598
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1, minWidth: 0, display: "flex", flexDirection: "column", gap: "2px" }, children: [
1599
+ /* @__PURE__ */ jsxRuntime.jsx(
1600
+ "span",
1601
+ {
1602
+ style: {
1603
+ fontSize: dense ? "13px" : "13.5px",
1604
+ fontWeight: 600,
1605
+ color: "var(--foreground)",
1606
+ overflow: "hidden",
1607
+ textOverflow: "ellipsis",
1608
+ whiteSpace: "nowrap"
1609
+ },
1610
+ children: filename
1611
+ }
1612
+ ),
1613
+ (metaTokens.length > 0 || expiresAt) && /* @__PURE__ */ jsxRuntime.jsxs(
1614
+ "span",
1615
+ {
1616
+ style: {
1617
+ fontSize: "11.5px",
1618
+ color: MUTED2,
1619
+ display: "flex",
1620
+ alignItems: "center",
1621
+ gap: "6px",
1622
+ whiteSpace: "nowrap"
1623
+ },
1624
+ children: [
1625
+ metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(React10__default.default.Fragment, { children: [
1626
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#c4c4c4" }, children: "\xB7" }),
1627
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: t })
1628
+ ] }, i)),
1629
+ expiresAt && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1630
+ metaTokens.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#c4c4c4" }, children: "\xB7" }),
1631
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: expirySoon ? "#b45309" : MUTED2, fontWeight: expirySoon ? 600 : 400 }, children: [
1632
+ "Expires ",
1633
+ formatExpiry(expiresAt)
1634
+ ] })
1635
+ ] })
1636
+ ]
1637
+ }
1638
+ ),
1639
+ description && !dense && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "12px", color: MUTED2, lineHeight: 1.4 }, children: /* @__PURE__ */ jsxRuntime.jsx(Markdown, { inline: true, content: description }) })
1640
+ ] }),
1641
+ canPreview && /* @__PURE__ */ jsxRuntime.jsxs(
1642
+ "button",
1643
+ {
1644
+ type: "button",
1645
+ onClick: togglePeek,
1646
+ "aria-expanded": peekOpen,
1647
+ onMouseEnter: () => setPvHover(true),
1648
+ onMouseLeave: () => setPvHover(false),
1649
+ style: ghostBtn(pvHover),
1650
+ children: [
1651
+ /* @__PURE__ */ jsxRuntime.jsx(EyeGlyph, { size: dense ? 13 : 14 }),
1652
+ !dense && /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Preview" }),
1653
+ !dense && /* @__PURE__ */ jsxRuntime.jsx(Chevron, { open: peekOpen })
1654
+ ]
1655
+ }
1656
+ ),
1657
+ downloadUrl ? /* @__PURE__ */ jsxRuntime.jsx(
1658
+ "a",
1659
+ {
1660
+ href: downloadUrl,
1661
+ target: "_blank",
1662
+ rel: "noopener noreferrer",
1663
+ onMouseEnter: () => setBtnHover(true),
1664
+ onMouseLeave: () => setBtnHover(false),
1665
+ style: downloadStyle,
1666
+ children: downloadInner
1667
+ }
1668
+ ) : onDownload ? /* @__PURE__ */ jsxRuntime.jsx(
1669
+ "button",
1670
+ {
1671
+ type: "button",
1672
+ onClick: onDownload,
1673
+ disabled: downloadBusy,
1674
+ "aria-busy": downloadBusy || void 0,
1675
+ onMouseEnter: () => setBtnHover(true),
1676
+ onMouseLeave: () => setBtnHover(false),
1677
+ style: downloadStyle,
1678
+ children: downloadInner
1679
+ }
1680
+ ) : null,
1681
+ actions
1682
+ ]
1683
+ }
1684
+ ),
1685
+ canPreview && peekOpen && previewKind && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { borderTop: `1px solid ${BORDER2}` }, children: pvError ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "16px", fontSize: "12.5px", color: "#dc2626" }, children: pvError }) : pvLoading || !source ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "20px", fontSize: "12.5px", color: MUTED2, textAlign: "center" }, children: "Loading preview\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1686
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative", maxHeight: "280px", overflow: "hidden" }, children: [
1687
+ /* @__PURE__ */ jsxRuntime.jsx(PreviewHost, { kind: previewKind, source, mode: "peek" }),
1688
+ /* @__PURE__ */ jsxRuntime.jsx(
1689
+ "div",
1690
+ {
1691
+ "aria-hidden": "true",
1692
+ style: {
1693
+ position: "absolute",
1694
+ left: 0,
1695
+ right: 0,
1696
+ bottom: 0,
1697
+ height: "56px",
1698
+ background: "linear-gradient(to bottom, rgba(255,255,255,0), white)",
1699
+ pointerEvents: "none"
1700
+ }
1701
+ }
1702
+ )
1703
+ ] }),
1704
+ /* @__PURE__ */ jsxRuntime.jsx(
1705
+ "div",
1706
+ {
1707
+ style: {
1708
+ display: "flex",
1709
+ justifyContent: "center",
1710
+ padding: "9px",
1711
+ borderTop: `1px solid ${BORDER2}`
1712
+ },
1713
+ children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: openModal, style: ghostBtn(false), children: "Open full preview" })
1714
+ }
1715
+ )
1716
+ ] }) }),
1717
+ canPreview && previewKind && source && /* @__PURE__ */ jsxRuntime.jsx(
1718
+ PreviewModal,
1719
+ {
1720
+ open: modalOpen,
1721
+ onClose: () => setModalOpen(false),
1722
+ filename,
1723
+ fileType,
1724
+ kind: previewKind,
1725
+ source,
1726
+ downloadUrl,
1727
+ onDownload
1728
+ }
1729
+ )
1730
+ ]
1731
+ }
1732
+ );
1733
+ }
1734
+ function DownloadGlyph({ spinning, size }) {
1735
+ if (spinning) {
1736
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1737
+ "svg",
1738
+ {
1739
+ width: size,
1740
+ height: size,
1741
+ viewBox: "0 0 24 24",
1742
+ fill: "none",
1743
+ "aria-hidden": "true",
1744
+ style: { animation: "fileCardSpin 720ms linear infinite" },
1745
+ children: [
1746
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: "@keyframes fileCardSpin{to{transform:rotate(360deg)}}" }),
1747
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeOpacity: "0.3", strokeWidth: "2" }),
1748
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 0 0-9-9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
1749
+ ]
1750
+ }
1751
+ );
1752
+ }
1753
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
1754
+ "path",
1755
+ {
1756
+ d: "M12 3v12m0 0 4-4m-4 4-4-4M5 21h14",
1757
+ stroke: "currentColor",
1758
+ strokeWidth: "2",
1759
+ strokeLinecap: "round",
1760
+ strokeLinejoin: "round"
1761
+ }
1762
+ ) });
1763
+ }
1764
+ function EyeGlyph({ size }) {
1765
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
1766
+ /* @__PURE__ */ jsxRuntime.jsx(
1767
+ "path",
1768
+ {
1769
+ d: "M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z",
1770
+ stroke: "currentColor",
1771
+ strokeWidth: "2",
1772
+ strokeLinecap: "round",
1773
+ strokeLinejoin: "round"
1774
+ }
1775
+ ),
1776
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", stroke: "currentColor", strokeWidth: "2" })
1777
+ ] });
1778
+ }
1779
+ function Chevron({ open }) {
1780
+ return /* @__PURE__ */ jsxRuntime.jsx(
1781
+ "svg",
1782
+ {
1783
+ width: "12",
1784
+ height: "12",
1785
+ viewBox: "0 0 24 24",
1786
+ fill: "none",
1787
+ "aria-hidden": "true",
1788
+ style: { transition: "transform 0.15s ease", transform: open ? "rotate(180deg)" : "rotate(0deg)" },
1789
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 9 6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
1790
+ }
1791
+ );
1792
+ }
1793
+ function DownloadCardResolver(p) {
1794
+ var _a, _b;
1795
+ const files = (_a = p.files) != null ? _a : [];
1796
+ return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_b = p.title) != null ? _b : "download-card", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "10px" }, children: [
1797
+ p.title && /* @__PURE__ */ jsxRuntime.jsx(
1798
+ "p",
1799
+ {
1800
+ style: {
1801
+ fontFamily: "var(--font-serif)",
1802
+ fontSize: "15px",
1803
+ fontWeight: 400,
1804
+ color: "var(--foreground)",
1805
+ letterSpacing: "-0.01em",
1806
+ margin: 0
1807
+ },
1808
+ children: p.title
1809
+ }
1810
+ ),
1811
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: files.map((file, i) => /* @__PURE__ */ jsxRuntime.jsx(
1812
+ FileCard,
1813
+ {
1814
+ filename: file.filename,
1815
+ size: file.size,
1816
+ fileType: file.fileType,
1817
+ expiresAt: file.expiresAt,
1818
+ description: file.description,
1819
+ downloadUrl: file.url,
1820
+ previewUrl: file.url,
1821
+ previewDisabled: file.preview === false,
1822
+ dense: files.length > 1
1823
+ },
1824
+ i
1825
+ )) })
1826
+ ] }) });
1827
+ }
1828
+
1829
+ exports.DownloadCardResolver = DownloadCardResolver;
1830
+ //# sourceMappingURL=resolver.cjs.map
1831
+ //# sourceMappingURL=resolver.cjs.map