@arbidocs/blocks 0.5.112 → 0.5.114

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 (179) hide show
  1. package/dist/{ConnectedCallDock-KUF6RX76.cjs → ConnectedCallDock-2KXEQENS.cjs} +26 -26
  2. package/dist/{ConnectedCallDock-KUF6RX76.cjs.map → ConnectedCallDock-2KXEQENS.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-ZKIYB2JG.cjs → ConnectedCallRoom-MU3NPNXF.cjs} +18 -18
  4. package/dist/{ConnectedCallRoom-ZKIYB2JG.cjs.map → ConnectedCallRoom-MU3NPNXF.cjs.map} +1 -1
  5. package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs → ConnectedMailInviteCard-EINB3THA.cjs} +5 -5
  6. package/dist/{ConnectedMailInviteCard-P65MQM6J.cjs.map → ConnectedMailInviteCard-EINB3THA.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxComparison-S4RKDH2A.cjs → ConnectedNativeDocxComparison-VH3I65H6.cjs} +21 -21
  8. package/dist/{ConnectedNativeDocxComparison-S4RKDH2A.cjs.map → ConnectedNativeDocxComparison-VH3I65H6.cjs.map} +1 -1
  9. package/dist/{ConnectedProductionSetDialog-HX4HTQ3Z.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +8 -8
  10. package/dist/{ConnectedProductionSetDialog-HX4HTQ3Z.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-A2A7Z3TT.cjs → ConnectedStreamedWordArtifact-KQSHCA75.cjs} +21 -21
  12. package/dist/{ConnectedStreamedWordArtifact-A2A7Z3TT.cjs.map → ConnectedStreamedWordArtifact-KQSHCA75.cjs.map} +1 -1
  13. package/dist/{DocumentReviewCard-4A7NF474.cjs → DocumentReviewCard-OCPFVMLD.cjs} +22 -22
  14. package/dist/{DocumentReviewCard-4A7NF474.cjs.map → DocumentReviewCard-OCPFVMLD.cjs.map} +1 -1
  15. package/dist/{FilesViewerDialog-PKCBZXDG.cjs → FilesViewerDialog-BAGOEMXW.cjs} +54 -54
  16. package/dist/{FilesViewerDialog-PKCBZXDG.cjs.map → FilesViewerDialog-BAGOEMXW.cjs.map} +1 -1
  17. package/dist/{WorkspaceTableView-J3C6VH4T.cjs → WorkspaceTableView-IMAZICIZ.cjs} +9 -9
  18. package/dist/{WorkspaceTableView-J3C6VH4T.cjs.map → WorkspaceTableView-IMAZICIZ.cjs.map} +1 -1
  19. package/dist/agents/index.cjs +298 -298
  20. package/dist/{ai-OYTFPMXI.cjs → ai-7U4B4CVF.cjs} +27 -27
  21. package/dist/ai-7U4B4CVF.cjs.map +1 -0
  22. package/dist/calls/index.cjs +147 -147
  23. package/dist/chat/index.cjs +29 -29
  24. package/dist/{chunk-37JPFCCU.cjs → chunk-2W5E62EY.cjs} +6 -6
  25. package/dist/{chunk-37JPFCCU.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
  26. package/dist/{chunk-N6AZYEYL.cjs → chunk-3ODEWSRO.cjs} +4 -4
  27. package/dist/{chunk-N6AZYEYL.cjs.map → chunk-3ODEWSRO.cjs.map} +1 -1
  28. package/dist/{chunk-VDFYMVMP.cjs → chunk-3R6YHJ3G.cjs} +4 -4
  29. package/dist/{chunk-VDFYMVMP.cjs.map → chunk-3R6YHJ3G.cjs.map} +1 -1
  30. package/dist/{chunk-5RCCZYAE.cjs → chunk-3U36VYMD.cjs} +36 -36
  31. package/dist/{chunk-5RCCZYAE.cjs.map → chunk-3U36VYMD.cjs.map} +1 -1
  32. package/dist/{chunk-A4FGU6YC.cjs → chunk-436I7PQL.cjs} +7 -7
  33. package/dist/{chunk-A4FGU6YC.cjs.map → chunk-436I7PQL.cjs.map} +1 -1
  34. package/dist/{chunk-J2RXQVVF.cjs → chunk-4EK7TAP7.cjs} +5 -5
  35. package/dist/{chunk-J2RXQVVF.cjs.map → chunk-4EK7TAP7.cjs.map} +1 -1
  36. package/dist/{chunk-TP5PGWIO.cjs → chunk-4IOYQLKG.cjs} +3 -3
  37. package/dist/{chunk-TP5PGWIO.cjs.map → chunk-4IOYQLKG.cjs.map} +1 -1
  38. package/dist/{chunk-ZQLRWA3Y.cjs → chunk-4NPCDS2X.cjs} +4 -4
  39. package/dist/{chunk-ZQLRWA3Y.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
  40. package/dist/{chunk-ZEQEIFZJ.cjs → chunk-57EE6CMW.cjs} +24 -24
  41. package/dist/{chunk-ZEQEIFZJ.cjs.map → chunk-57EE6CMW.cjs.map} +1 -1
  42. package/dist/{chunk-NMT4UZQM.cjs → chunk-57NHXEU2.cjs} +5 -5
  43. package/dist/{chunk-NMT4UZQM.cjs.map → chunk-57NHXEU2.cjs.map} +1 -1
  44. package/dist/{chunk-4QTQS4LS.cjs → chunk-5QUL5BZO.cjs} +5 -5
  45. package/dist/{chunk-4QTQS4LS.cjs.map → chunk-5QUL5BZO.cjs.map} +1 -1
  46. package/dist/{chunk-MUA5PJGX.cjs → chunk-5SKHK3BG.cjs} +4 -4
  47. package/dist/{chunk-MUA5PJGX.cjs.map → chunk-5SKHK3BG.cjs.map} +1 -1
  48. package/dist/{chunk-AFXDLDPU.cjs → chunk-5UYFLFNR.cjs} +4 -4
  49. package/dist/{chunk-AFXDLDPU.cjs.map → chunk-5UYFLFNR.cjs.map} +1 -1
  50. package/dist/{chunk-FJXJ43JO.cjs → chunk-6DCIZA3X.cjs} +101 -101
  51. package/dist/{chunk-FJXJ43JO.cjs.map → chunk-6DCIZA3X.cjs.map} +1 -1
  52. package/dist/{chunk-G5TRBLKF.cjs → chunk-7TEUGFIL.cjs} +4 -4
  53. package/dist/{chunk-G5TRBLKF.cjs.map → chunk-7TEUGFIL.cjs.map} +1 -1
  54. package/dist/{chunk-ZNZGYSVB.cjs → chunk-7X3FS5HQ.cjs} +39 -39
  55. package/dist/{chunk-ZNZGYSVB.cjs.map → chunk-7X3FS5HQ.cjs.map} +1 -1
  56. package/dist/{chunk-DZDARC3V.cjs → chunk-7XT5B2DZ.cjs} +70 -70
  57. package/dist/{chunk-DZDARC3V.cjs.map → chunk-7XT5B2DZ.cjs.map} +1 -1
  58. package/dist/{chunk-5UMKMUB5.cjs → chunk-AHT6DQNI.cjs} +68 -68
  59. package/dist/{chunk-5UMKMUB5.cjs.map → chunk-AHT6DQNI.cjs.map} +1 -1
  60. package/dist/{chunk-SRET7LYT.cjs → chunk-BW5MF464.cjs} +4 -4
  61. package/dist/{chunk-SRET7LYT.cjs.map → chunk-BW5MF464.cjs.map} +1 -1
  62. package/dist/{chunk-NP4EWPIP.cjs → chunk-CJYWHUZR.cjs} +6 -6
  63. package/dist/{chunk-NP4EWPIP.cjs.map → chunk-CJYWHUZR.cjs.map} +1 -1
  64. package/dist/{chunk-NTD7VSHO.cjs → chunk-CMGNRMPA.cjs} +4 -4
  65. package/dist/{chunk-NTD7VSHO.cjs.map → chunk-CMGNRMPA.cjs.map} +1 -1
  66. package/dist/{chunk-Z3VNKPPH.cjs → chunk-E3Y7RI3J.cjs} +4 -4
  67. package/dist/{chunk-Z3VNKPPH.cjs.map → chunk-E3Y7RI3J.cjs.map} +1 -1
  68. package/dist/{chunk-TDO5UWXF.cjs → chunk-E4BLRF2L.cjs} +5 -5
  69. package/dist/{chunk-TDO5UWXF.cjs.map → chunk-E4BLRF2L.cjs.map} +1 -1
  70. package/dist/{chunk-WT7CCCIN.cjs → chunk-GNX3FBBX.cjs} +4 -4
  71. package/dist/{chunk-WT7CCCIN.cjs.map → chunk-GNX3FBBX.cjs.map} +1 -1
  72. package/dist/{chunk-3NEI27QQ.cjs → chunk-GQXPNIRE.cjs} +14 -14
  73. package/dist/{chunk-3NEI27QQ.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
  74. package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
  75. package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
  76. package/dist/{chunk-IIWJQEBC.cjs → chunk-H7PHOTX2.cjs} +10 -10
  77. package/dist/{chunk-IIWJQEBC.cjs.map → chunk-H7PHOTX2.cjs.map} +1 -1
  78. package/dist/{chunk-LQHXUSWZ.cjs → chunk-HQDR43JC.cjs} +6 -6
  79. package/dist/{chunk-LQHXUSWZ.cjs.map → chunk-HQDR43JC.cjs.map} +1 -1
  80. package/dist/{chunk-6LQN4BMX.cjs → chunk-IDCD5TEZ.cjs} +5 -5
  81. package/dist/{chunk-6LQN4BMX.cjs.map → chunk-IDCD5TEZ.cjs.map} +1 -1
  82. package/dist/{chunk-6YOZKXV6.cjs → chunk-JR2YSBD5.cjs} +4 -4
  83. package/dist/{chunk-6YOZKXV6.cjs.map → chunk-JR2YSBD5.cjs.map} +1 -1
  84. package/dist/{chunk-3GYOWDNM.cjs → chunk-JSQQV23D.cjs} +5 -5
  85. package/dist/{chunk-3GYOWDNM.cjs.map → chunk-JSQQV23D.cjs.map} +1 -1
  86. package/dist/{chunk-ZFKWCGA5.cjs → chunk-JV5TVUOU.cjs} +4 -4
  87. package/dist/{chunk-ZFKWCGA5.cjs.map → chunk-JV5TVUOU.cjs.map} +1 -1
  88. package/dist/{chunk-TXFZAA3R.cjs → chunk-LFRNBT2I.cjs} +23 -23
  89. package/dist/{chunk-TXFZAA3R.cjs.map → chunk-LFRNBT2I.cjs.map} +1 -1
  90. package/dist/{chunk-R7CJEIA5.cjs → chunk-LYTIQQQ2.cjs} +3 -3
  91. package/dist/{chunk-R7CJEIA5.cjs.map → chunk-LYTIQQQ2.cjs.map} +1 -1
  92. package/dist/{chunk-6UYTG2YG.cjs → chunk-MC4F2URI.cjs} +28 -28
  93. package/dist/{chunk-6UYTG2YG.cjs.map → chunk-MC4F2URI.cjs.map} +1 -1
  94. package/dist/{chunk-NNG34ONS.cjs → chunk-MGQSLMTC.cjs} +78 -78
  95. package/dist/{chunk-NNG34ONS.cjs.map → chunk-MGQSLMTC.cjs.map} +1 -1
  96. package/dist/{chunk-3Q5L7XVI.cjs → chunk-MZ2KZXNU.cjs} +9 -9
  97. package/dist/{chunk-3Q5L7XVI.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
  98. package/dist/{chunk-PJ762EO2.cjs → chunk-NHHEMBXQ.cjs} +24 -24
  99. package/dist/{chunk-PJ762EO2.cjs.map → chunk-NHHEMBXQ.cjs.map} +1 -1
  100. package/dist/{chunk-ENUZ35NR.cjs → chunk-P5AQYC4D.cjs} +4 -4
  101. package/dist/{chunk-ENUZ35NR.cjs.map → chunk-P5AQYC4D.cjs.map} +1 -1
  102. package/dist/{chunk-5I2VUNZR.cjs → chunk-PGJYD67F.cjs} +6 -6
  103. package/dist/{chunk-5I2VUNZR.cjs.map → chunk-PGJYD67F.cjs.map} +1 -1
  104. package/dist/{chunk-BYN7UMC5.cjs → chunk-PL7HUTM3.cjs} +8 -8
  105. package/dist/{chunk-BYN7UMC5.cjs.map → chunk-PL7HUTM3.cjs.map} +1 -1
  106. package/dist/{chunk-NOYQ23I7.cjs → chunk-Q6DQGGP4.cjs} +6 -6
  107. package/dist/{chunk-NOYQ23I7.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
  108. package/dist/{chunk-T7J352JD.cjs → chunk-QMIHLJMH.cjs} +6 -6
  109. package/dist/{chunk-T7J352JD.cjs.map → chunk-QMIHLJMH.cjs.map} +1 -1
  110. package/dist/{chunk-LTEXVRCH.cjs → chunk-SBWIA4PL.cjs} +21 -21
  111. package/dist/{chunk-LTEXVRCH.cjs.map → chunk-SBWIA4PL.cjs.map} +1 -1
  112. package/dist/{chunk-ZH7LDZJX.cjs → chunk-TDN33HSK.cjs} +14 -14
  113. package/dist/{chunk-ZH7LDZJX.cjs.map → chunk-TDN33HSK.cjs.map} +1 -1
  114. package/dist/{chunk-U5T46QCS.cjs → chunk-TKHCIHE2.cjs} +3 -3
  115. package/dist/chunk-TKHCIHE2.cjs.map +1 -0
  116. package/dist/{chunk-WIAWHETB.cjs → chunk-ULPTSXXO.cjs} +4 -4
  117. package/dist/{chunk-WIAWHETB.cjs.map → chunk-ULPTSXXO.cjs.map} +1 -1
  118. package/dist/{chunk-GTWEWDIZ.cjs → chunk-UNDQYTRF.cjs} +8 -8
  119. package/dist/{chunk-GTWEWDIZ.cjs.map → chunk-UNDQYTRF.cjs.map} +1 -1
  120. package/dist/{chunk-OKHKJ5ML.cjs → chunk-UUENH4BJ.cjs} +11 -11
  121. package/dist/{chunk-OKHKJ5ML.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
  122. package/dist/{chunk-K5MYEWD5.cjs → chunk-UZHWXKS6.cjs} +7 -7
  123. package/dist/{chunk-K5MYEWD5.cjs.map → chunk-UZHWXKS6.cjs.map} +1 -1
  124. package/dist/{chunk-QVHP4R7T.cjs → chunk-V5IMYLYK.cjs} +29 -29
  125. package/dist/{chunk-QVHP4R7T.cjs.map → chunk-V5IMYLYK.cjs.map} +1 -1
  126. package/dist/{chunk-XW524KUX.cjs → chunk-VJCSEMXT.cjs} +4 -4
  127. package/dist/{chunk-XW524KUX.cjs.map → chunk-VJCSEMXT.cjs.map} +1 -1
  128. package/dist/{chunk-B5442TKX.cjs → chunk-VRK3IQAP.cjs} +4 -4
  129. package/dist/{chunk-B5442TKX.cjs.map → chunk-VRK3IQAP.cjs.map} +1 -1
  130. package/dist/{chunk-MYRKL3JO.cjs → chunk-VWTOIGX4.cjs} +4 -4
  131. package/dist/{chunk-MYRKL3JO.cjs.map → chunk-VWTOIGX4.cjs.map} +1 -1
  132. package/dist/{chunk-Q7DB5S7N.cjs → chunk-WW6LXQY6.cjs} +12 -12
  133. package/dist/{chunk-Q7DB5S7N.cjs.map → chunk-WW6LXQY6.cjs.map} +1 -1
  134. package/dist/{chunk-NJCK6V6U.cjs → chunk-XKDUPU7B.cjs} +4 -4
  135. package/dist/{chunk-NJCK6V6U.cjs.map → chunk-XKDUPU7B.cjs.map} +1 -1
  136. package/dist/{chunk-YAPXIANR.cjs → chunk-YVCOQHCE.cjs} +5 -5
  137. package/dist/{chunk-YAPXIANR.cjs.map → chunk-YVCOQHCE.cjs.map} +1 -1
  138. package/dist/{chunk-TOM2P3MA.cjs → chunk-ZZA756I4.cjs} +4 -4
  139. package/dist/{chunk-TOM2P3MA.cjs.map → chunk-ZZA756I4.cjs.map} +1 -1
  140. package/dist/citations/index.cjs +8 -8
  141. package/dist/connect/docx.cjs +24 -24
  142. package/dist/connect/index.cjs +1489 -1433
  143. package/dist/connect/index.cjs.map +1 -1
  144. package/dist/connect/viewer.cjs +40 -40
  145. package/dist/connection/ConnectedWorkflowBuilder.d.ts +11 -0
  146. package/dist/connection/ConnectedWorkflowBuilder.js +42 -3
  147. package/dist/connection/ConnectedWorkflowBuilder.js.map +2 -2
  148. package/dist/connection/conversation/ConnectedConversationPage.js +36 -2
  149. package/dist/connection/conversation/ConnectedConversationPage.js.map +2 -2
  150. package/dist/connection/report-problem/ReportProblemDialog.d.ts +2 -2
  151. package/dist/connection/report-problem/ReportProblemDialog.js +51 -19
  152. package/dist/connection/report-problem/ReportProblemDialog.js.map +2 -2
  153. package/dist/connection/workflows/ConnectedWorkflowsPage.js +10 -3
  154. package/dist/connection/workflows/ConnectedWorkflowsPage.js.map +2 -2
  155. package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -0
  156. package/dist/connection/workflows/useWorkflowsPageState.js.map +2 -2
  157. package/dist/dashboards/index.cjs +23 -23
  158. package/dist/embed/index.cjs +49 -49
  159. package/dist/facts/index.cjs +45 -45
  160. package/dist/files/index.cjs +225 -225
  161. package/dist/home/index.cjs +32 -32
  162. package/dist/index.cjs +1750 -1750
  163. package/dist/provider/environment.d.ts +5 -0
  164. package/dist/provider/environment.js +1 -1
  165. package/dist/provider/environment.js.map +2 -2
  166. package/dist/provider/requests.d.ts +2 -0
  167. package/dist/provider/requests.js.map +2 -2
  168. package/dist/retrieval/index.cjs +4 -4
  169. package/dist/settings/index.cjs +148 -148
  170. package/dist/shell/index.cjs +91 -91
  171. package/dist/site/index.cjs +5 -5
  172. package/dist/studio/index.cjs +43 -43
  173. package/dist/workflow-canvas/index.cjs +114 -72
  174. package/dist/workflow-canvas/index.cjs.map +1 -1
  175. package/dist/workspaces/index.cjs +18 -18
  176. package/node_modules/@arbidocs/coedit/package.json +1 -1
  177. package/package.json +5 -5
  178. package/dist/ai-OYTFPMXI.cjs.map +0 -1
  179. package/dist/chunk-U5T46QCS.cjs.map +0 -1
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkU5T46QCS_cjs = require('./chunk-U5T46QCS.cjs');
4
+ var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
5
5
  var react = require('react');
6
6
 
7
7
  function useOpenCitation() {
8
- const { openDocument } = chunkU5T46QCS_cjs.useBlocksEnvironment();
8
+ const { openDocument } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
9
9
  return react.useCallback(
10
10
  ({ documentId, page, passage }) => {
11
11
  const id = documentId ?? passage?.documentId;
@@ -18,5 +18,5 @@ function useOpenCitation() {
18
18
  }
19
19
 
20
20
  exports.useOpenCitation = useOpenCitation;
21
- //# sourceMappingURL=chunk-MUA5PJGX.cjs.map
22
- //# sourceMappingURL=chunk-MUA5PJGX.cjs.map
21
+ //# sourceMappingURL=chunk-5SKHK3BG.cjs.map
22
+ //# sourceMappingURL=chunk-5SKHK3BG.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chat/useOpenCitation.ts"],"names":["useBlocksEnvironment","useCallback"],"mappings":";;;;;AAQO,SAAS,eAAA,GAAwD;AACtE,EAAA,MAAM,EAAE,YAAA,EAAa,GAAIA,sCAAA,EAAqB;AAC9C,EAAA,OAAOC,iBAAA;AAAA,IACL,CAAC,EAAE,UAAA,EAAY,IAAA,EAAM,SAAQ,KAAM;AACjC,MAAA,MAAM,EAAA,GAAK,cAAc,OAAA,EAAS,UAAA;AAClC,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,EAAA,GAAK,IAAA,IAAQ,OAAA,EAAS,IAAA,IAAQ,MAAA;AACpC,MAAA,YAAA,CAAa,IAAI,EAAE,GAAI,EAAA,IAAM,EAAE,MAAM,EAAA,EAAG,EAAI,GAAI,OAAA,EAAS,MAAM,EAAE,SAAA,EAAW,OAAA,CAAQ,EAAA,IAAO,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AACF","file":"chunk-MUA5PJGX.cjs","sourcesContent":["import { useCallback } from 'react'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport type { ChatCitationTarget } from './chat-page-types'\n\n/**\n * Open a cited document at its passage and page through the environment (`openDocument`): the\n * `onOpenCitation` of a chat whose host shows documents.\n */\nexport function useOpenCitation(): (target: ChatCitationTarget) => void {\n const { openDocument } = useBlocksEnvironment()\n return useCallback(\n ({ documentId, page, passage }) => {\n const id = documentId ?? passage?.documentId\n if (!id) return\n const at = page ?? passage?.page ?? undefined\n openDocument(id, { ...(at && { page: at }), ...(passage?.id && { passageId: passage.id }) })\n },\n [openDocument]\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/chat/useOpenCitation.ts"],"names":["useBlocksEnvironment","useCallback"],"mappings":";;;;;AAQO,SAAS,eAAA,GAAwD;AACtE,EAAA,MAAM,EAAE,YAAA,EAAa,GAAIA,sCAAA,EAAqB;AAC9C,EAAA,OAAOC,iBAAA;AAAA,IACL,CAAC,EAAE,UAAA,EAAY,IAAA,EAAM,SAAQ,KAAM;AACjC,MAAA,MAAM,EAAA,GAAK,cAAc,OAAA,EAAS,UAAA;AAClC,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,EAAA,GAAK,IAAA,IAAQ,OAAA,EAAS,IAAA,IAAQ,MAAA;AACpC,MAAA,YAAA,CAAa,IAAI,EAAE,GAAI,EAAA,IAAM,EAAE,MAAM,EAAA,EAAG,EAAI,GAAI,OAAA,EAAS,MAAM,EAAE,SAAA,EAAW,OAAA,CAAQ,EAAA,IAAO,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AACF","file":"chunk-5SKHK3BG.cjs","sourcesContent":["import { useCallback } from 'react'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport type { ChatCitationTarget } from './chat-page-types'\n\n/**\n * Open a cited document at its passage and page through the environment (`openDocument`): the\n * `onOpenCitation` of a chat whose host shows documents.\n */\nexport function useOpenCitation(): (target: ChatCitationTarget) => void {\n const { openDocument } = useBlocksEnvironment()\n return useCallback(\n ({ documentId, page, passage }) => {\n const id = documentId ?? passage?.documentId\n if (!id) return\n const at = page ?? passage?.page ?? undefined\n openDocument(id, { ...(at && { page: at }), ...(passage?.id && { passageId: passage.id }) })\n },\n [openDocument]\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkU5T46QCS_cjs = require('./chunk-U5T46QCS.cjs');
4
+ var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
5
5
  var react = require('react');
6
6
  var lucideReact = require('lucide-react');
7
7
  var ui = require('@arbidocs/react/ui');
@@ -23,7 +23,7 @@ function AskBar({
23
23
  className,
24
24
  testId = "ask-bar"
25
25
  }) {
26
- const { openNewConversation } = chunkU5T46QCS_cjs.useBlocksEnvironment();
26
+ const { openNewConversation } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
27
27
  const onAsk = onAskProp ?? ((prompt) => openNewConversation({ prompt }));
28
28
  const [innerText, setInnerText] = react.useState("");
29
29
  const text = value !== void 0 ? value : innerText;
@@ -115,5 +115,5 @@ function AskBar({
115
115
  }
116
116
 
117
117
  exports.AskBar = AskBar;
118
- //# sourceMappingURL=chunk-AFXDLDPU.cjs.map
119
- //# sourceMappingURL=chunk-AFXDLDPU.cjs.map
118
+ //# sourceMappingURL=chunk-5UYFLFNR.cjs.map
119
+ //# sourceMappingURL=chunk-5UYFLFNR.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/AskBar.tsx"],"names":["useBlocksEnvironment","useState","useRef","jsxs","cn","jsx","Search","Button","Sparkles"],"mappings":"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","file":"chunk-AFXDLDPU.cjs","sourcesContent":["/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * Asking starts a new conversation that sends the question on arrival\n * (`openNewConversation({ prompt })`) unless the consumer says otherwise; the\n * consumer owns what searching means (run smart search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport {\n useRef,\n useState,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\n\nexport interface AskBarProps {\n /** Receives the trimmed question. Default: a new conversation that sends it on arrival. */\n onAsk?: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n /** Extra attributes for the input, e.g. the combobox props of `useListKeyNav` for a menu. */\n inputProps?: InputHTMLAttributes<HTMLInputElement>\n /** Rendered over the input row at its width (a slash/autocomplete menu, placed below). */\n menu?: ReactNode\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk: onAskProp,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n inputRef: externalInputRef,\n inputProps,\n menu,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const { openNewConversation } = useBlocksEnvironment()\n const onAsk = onAskProp ?? ((prompt: string) => openNewConversation({ prompt }))\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n {...inputProps}\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n {menu}\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/AskBar.tsx"],"names":["useBlocksEnvironment","useState","useRef","jsxs","cn","jsx","Search","Button","Sparkles"],"mappings":";;;;;;;;AA6DO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,cAAc,EAAC;AAAA,EACf,WAAA,GAAc,oBAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,QAAA;AAAA,EACd,KAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA,EAAU,gBAAA;AAAA,EACV,UAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAAgB;AACd,EAAA,MAAM,EAAE,mBAAA,EAAoB,GAAIA,sCAAA,EAAqB;AACrD,EAAA,MAAM,QAAQ,SAAA,KAAc,CAAC,WAAmB,mBAAA,CAAoB,EAAE,QAAQ,CAAA,CAAA;AAC9E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,KAAA,KAAU,MAAA,GAAY,KAAA,GAAQ,SAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAiB;AAChC,IAAA,aAAA,GAAgB,IAAI,CAAA;AACpB,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,IAAI,CAAA;AAAA,EAC5C,CAAA;AACA,EAAA,MAAM,aAAA,GAAgBC,aAAyB,IAAI,CAAA;AACnD,EAAA,MAAM,WAAW,gBAAA,IAAoB,aAAA;AAErC,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAAoC;AACpD,IAAA,MAAM,QAAA,GAAW,KAAK,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,uBACEC,eAAA,CAAC,SAAI,SAAA,EAAWC,KAAA,CAAG,uBAAuB,SAAS,CAAA,EAAG,eAAa,MAAA,EACjE,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,QAAA,CAAS,KAAK,CAAA;AAAA,UAChB,CAAA;AAAA,UAKA,SAAA,EAAU,0IAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAE,cAAA,CAACC,kBAAA,EAAA,EAAO,WAAU,2DAAA,EAA4D,CAAA;AAAA,4BAC9ED,cAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACE,GAAG,UAAA;AAAA,gBACJ,GAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAO,IAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACvC,SAAA,EAAW,cAAA;AAAA,gBACX,WAAA;AAAA,gBACA,SAAA,EAAU,0GAAA;AAAA,gBACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,MAAA;AAAA;AAAA,aAClC;AAAA,YACC,QAAA,oBACCA,cAAA;AAAA,cAACE,SAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,QAAA,EAAU,CAAC,IAAA,CAAK,IAAA,EAAK;AAAA,gBACrB,OAAA,EAAS,MAAM,QAAA,CAAS,QAAQ,CAAA;AAAA,gBAChC,SAAA,EAAU,qFAAA;AAAA,gBACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,OAAA,CAAA;AAAA,gBAE/B,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BAGFJ,eAAA;AAAA,cAACI,SAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,IAAA;AAAA,gBACL,QAAA,EAAU,CAAC,IAAA,CAAK,IAAA,EAAK;AAAA,gBACrB,SAAA,EAAU,uCAAA;AAAA,gBACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,OAAA,CAAA;AAAA,gBAEhC,QAAA,EAAA;AAAA,kCAAAF,cAAA,CAACG,oBAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,kBAC9B;AAAA;AAAA;AAAA;AACH;AAAA;AAAA,OACF;AAAA,MACC;AAAA,KAAA,EACH,CAAA;AAAA,IACC,WAAA,CAAY,MAAA,GAAS,CAAA,oBACpBH,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChBA,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM;AACb,UAAA,OAAA,CAAQ,CAAC,CAAA;AACT,UAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,QAC1B,CAAA;AAAA,QACA,SAAA,EAAU,kKAAA;AAAA,QACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,WAAA,CAAA;AAAA,QAE/B,QAAA,EAAA;AAAA,OAAA;AAAA,MATI;AAAA,KAWR,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-5UYFLFNR.cjs","sourcesContent":["/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * Asking starts a new conversation that sends the question on arrival\n * (`openNewConversation({ prompt })`) unless the consumer says otherwise; the\n * consumer owns what searching means (run smart search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport {\n useRef,\n useState,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\n\nexport interface AskBarProps {\n /** Receives the trimmed question. Default: a new conversation that sends it on arrival. */\n onAsk?: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n /** Extra attributes for the input, e.g. the combobox props of `useListKeyNav` for a menu. */\n inputProps?: InputHTMLAttributes<HTMLInputElement>\n /** Rendered over the input row at its width (a slash/autocomplete menu, placed below). */\n menu?: ReactNode\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk: onAskProp,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n inputRef: externalInputRef,\n inputProps,\n menu,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const { openNewConversation } = useBlocksEnvironment()\n const onAsk = onAskProp ?? ((prompt: string) => openNewConversation({ prompt }))\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n {...inputProps}\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n {menu}\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n"]}