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