@arbidocs/blocks 0.5.68 → 0.5.69

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 (165) hide show
  1. package/README.md +7 -9
  2. package/dist/{ConnectedCallDock-VMEBH4LG.js → ConnectedCallDock-3EHDHB5D.js} +3 -3
  3. package/dist/{ConnectedCallDock-VMEBH4LG.js.map → ConnectedCallDock-3EHDHB5D.js.map} +1 -1
  4. package/dist/{ConnectedCallDock-FFIDDYGH.cjs → ConnectedCallDock-NXF2YSY2.cjs} +3 -3
  5. package/dist/{ConnectedCallDock-FFIDDYGH.cjs.map → ConnectedCallDock-NXF2YSY2.cjs.map} +1 -1
  6. package/dist/ConnectedCallRoom-2FNSX2VG.js +1 -1
  7. package/dist/ConnectedCallRoom-HYRLJUIV.cjs +1 -1
  8. package/dist/{ConnectedDocumentViewer-MEKSE7KG.js → ConnectedDocumentViewer-2GU4SA5L.js} +7 -7
  9. package/dist/{ConnectedDocumentViewer-MEKSE7KG.js.map → ConnectedDocumentViewer-2GU4SA5L.js.map} +1 -1
  10. package/dist/{ConnectedDocumentViewer-VVYEBNAK.cjs → ConnectedDocumentViewer-R5GFEUPB.cjs} +8 -8
  11. package/dist/{ConnectedDocumentViewer-VVYEBNAK.cjs.map → ConnectedDocumentViewer-R5GFEUPB.cjs.map} +1 -1
  12. package/dist/{ConnectedNativeDocxComparison-ZXWLLKCZ.js → ConnectedNativeDocxComparison-KGRT2RSK.js} +7 -7
  13. package/dist/{ConnectedNativeDocxComparison-ZXWLLKCZ.js.map → ConnectedNativeDocxComparison-KGRT2RSK.js.map} +1 -1
  14. package/dist/{ConnectedNativeDocxComparison-MIXCSPQP.cjs → ConnectedNativeDocxComparison-NMVGZYYW.cjs} +8 -8
  15. package/dist/{ConnectedNativeDocxComparison-MIXCSPQP.cjs.map → ConnectedNativeDocxComparison-NMVGZYYW.cjs.map} +1 -1
  16. package/dist/{ConnectedNativeDocxEditor-HDI7OBDA.cjs → ConnectedNativeDocxEditor-NZZSG4N7.cjs} +8 -8
  17. package/dist/{ConnectedNativeDocxEditor-HDI7OBDA.cjs.map → ConnectedNativeDocxEditor-NZZSG4N7.cjs.map} +1 -1
  18. package/dist/{ConnectedNativeDocxEditor-IBQ7M3MU.js → ConnectedNativeDocxEditor-WO4MQUEJ.js} +6 -6
  19. package/dist/{ConnectedNativeDocxEditor-IBQ7M3MU.js.map → ConnectedNativeDocxEditor-WO4MQUEJ.js.map} +1 -1
  20. package/dist/{ConnectedStreamedWordArtifact-S64KJPEJ.js → ConnectedStreamedWordArtifact-PETCKJXL.js} +7 -7
  21. package/dist/ConnectedStreamedWordArtifact-PETCKJXL.js.map +1 -0
  22. package/dist/{ConnectedStreamedWordArtifact-V7WFW5EP.cjs → ConnectedStreamedWordArtifact-UIXR3P3H.cjs} +8 -8
  23. package/dist/ConnectedStreamedWordArtifact-UIXR3P3H.cjs.map +1 -0
  24. package/dist/DocumentReviewCard-5U3TGJZA.js +2 -2
  25. package/dist/DocumentReviewCard-VFNMJSK7.cjs +2 -2
  26. package/dist/{WorkspaceTableView-EH5CEB44.js → WorkspaceTableView-LBESYCXW.js} +4 -4
  27. package/dist/{WorkspaceTableView-EH5CEB44.js.map → WorkspaceTableView-LBESYCXW.js.map} +1 -1
  28. package/dist/{WorkspaceTableView-DHMCJRC6.cjs → WorkspaceTableView-OIMBOLG6.cjs} +4 -4
  29. package/dist/{WorkspaceTableView-DHMCJRC6.cjs.map → WorkspaceTableView-OIMBOLG6.cjs.map} +1 -1
  30. package/dist/agents/index.cjs +282 -286
  31. package/dist/agents/index.js +5 -5
  32. package/dist/agents/tasks/ConversationListView.d.ts +0 -2
  33. package/dist/agents/tasks/PersonPill.d.ts +1 -2
  34. package/dist/agents/tasks/TaskTable.d.ts +0 -14
  35. package/dist/agents/tasks/ThreadStatusLine.d.ts +1 -4
  36. package/dist/agents/tasks/UploadTaskList.d.ts +1 -5
  37. package/dist/agents/tasks/WorkflowComposer.d.ts +1 -1
  38. package/dist/agents/tasks/WorkflowsTable.d.ts +3 -4
  39. package/dist/agents/tasks/index.d.ts +0 -2
  40. package/dist/agents/tasks/taskComposerTypes.d.ts +0 -1
  41. package/dist/agents/workflows/WorkflowConfigDialog.d.ts +2 -3
  42. package/dist/agents/workflows/WorkflowRunner.d.ts +3 -7
  43. package/dist/calendar/index.cjs +116 -116
  44. package/dist/calendar/index.js +1 -1
  45. package/dist/calls/index.cjs +1 -1
  46. package/dist/calls/index.js +1 -1
  47. package/dist/chat/index.cjs +1 -1
  48. package/dist/chat/index.js +1 -1
  49. package/dist/{chunk-LKVOHL6C.js → chunk-34DWIXUN.js} +3 -3
  50. package/dist/{chunk-LKVOHL6C.js.map → chunk-34DWIXUN.js.map} +1 -1
  51. package/dist/{chunk-QUZPQWPX.js → chunk-4SXG6ACE.js} +237 -5
  52. package/dist/chunk-4SXG6ACE.js.map +1 -0
  53. package/dist/{chunk-ZSP6QSMG.cjs → chunk-5CKTUHNS.cjs} +4 -4
  54. package/dist/{chunk-ZSP6QSMG.cjs.map → chunk-5CKTUHNS.cjs.map} +1 -1
  55. package/dist/{chunk-EPBFVO4F.cjs → chunk-7TOBKEOV.cjs} +9 -9
  56. package/dist/{chunk-EPBFVO4F.cjs.map → chunk-7TOBKEOV.cjs.map} +1 -1
  57. package/dist/{chunk-XXI3EIEO.cjs → chunk-7ZVL44YM.cjs} +49 -51
  58. package/dist/chunk-7ZVL44YM.cjs.map +1 -0
  59. package/dist/{chunk-35FBVTT6.cjs → chunk-BI6O7OMA.cjs} +32 -14
  60. package/dist/chunk-BI6O7OMA.cjs.map +1 -0
  61. package/dist/{chunk-SNU3AOCW.js → chunk-BPPX3ESB.js} +3 -3
  62. package/dist/{chunk-SNU3AOCW.js.map → chunk-BPPX3ESB.js.map} +1 -1
  63. package/dist/{chunk-MM22MFON.cjs → chunk-CCTNZ25D.cjs} +31 -459
  64. package/dist/chunk-CCTNZ25D.cjs.map +1 -0
  65. package/dist/{chunk-HGFU47TY.js → chunk-D4LZKHIL.js} +3 -3
  66. package/dist/{chunk-HGFU47TY.js.map → chunk-D4LZKHIL.js.map} +1 -1
  67. package/dist/{chunk-NMQVII6H.cjs → chunk-DDUHNTD3.cjs} +4 -4
  68. package/dist/{chunk-NMQVII6H.cjs.map → chunk-DDUHNTD3.cjs.map} +1 -1
  69. package/dist/{chunk-AWVGKHJT.js → chunk-E5RN3LWS.js} +2 -2
  70. package/dist/{chunk-AWVGKHJT.js.map → chunk-E5RN3LWS.js.map} +1 -1
  71. package/dist/{chunk-Z4KXF7WS.cjs → chunk-EG6YBT7G.cjs} +7 -7
  72. package/dist/{chunk-Z4KXF7WS.cjs.map → chunk-EG6YBT7G.cjs.map} +1 -1
  73. package/dist/{chunk-2FRUMQLS.cjs → chunk-EUGCT5MB.cjs} +3 -3
  74. package/dist/{chunk-2FRUMQLS.cjs.map → chunk-EUGCT5MB.cjs.map} +1 -1
  75. package/dist/{chunk-B6QTKCDK.js → chunk-G7GPG5NO.js} +25 -452
  76. package/dist/chunk-G7GPG5NO.js.map +1 -0
  77. package/dist/{chunk-3DQZ7JWL.cjs → chunk-GE45EHTG.cjs} +18 -18
  78. package/dist/{chunk-3DQZ7JWL.cjs.map → chunk-GE45EHTG.cjs.map} +1 -1
  79. package/dist/{chunk-RSVHFZJR.js → chunk-KIDUTH2V.js} +9 -11
  80. package/dist/chunk-KIDUTH2V.js.map +1 -0
  81. package/dist/{chunk-LTPOV3W4.js → chunk-KVNXCL2Y.js} +7 -8
  82. package/dist/chunk-KVNXCL2Y.js.map +1 -0
  83. package/dist/{chunk-W3PSIIMN.cjs → chunk-LM7DVT7C.cjs} +2 -2
  84. package/dist/{chunk-W3PSIIMN.cjs.map → chunk-LM7DVT7C.cjs.map} +1 -1
  85. package/dist/{chunk-IH2WZUTL.cjs → chunk-OYRORWS2.cjs} +12 -13
  86. package/dist/chunk-OYRORWS2.cjs.map +1 -0
  87. package/dist/{chunk-SC3GOSJG.js → chunk-PLUMPQA4.js} +6 -9
  88. package/dist/chunk-PLUMPQA4.js.map +1 -0
  89. package/dist/{chunk-NOBSRGFX.js → chunk-PTBGTGFG.js} +3 -3
  90. package/dist/{chunk-NOBSRGFX.js.map → chunk-PTBGTGFG.js.map} +1 -1
  91. package/dist/{chunk-5TFZFB5U.js → chunk-QQLGNNZI.js} +3 -3
  92. package/dist/{chunk-5TFZFB5U.js.map → chunk-QQLGNNZI.js.map} +1 -1
  93. package/dist/{chunk-CUSOXCBV.cjs → chunk-SU374FEM.cjs} +10 -13
  94. package/dist/chunk-SU374FEM.cjs.map +1 -0
  95. package/dist/{chunk-APXW5XGA.js → chunk-TJJE3XOO.js} +3 -3
  96. package/dist/{chunk-APXW5XGA.js.map → chunk-TJJE3XOO.js.map} +1 -1
  97. package/dist/{chunk-NBX7WWB6.cjs → chunk-VSABGETQ.cjs} +5 -5
  98. package/dist/{chunk-NBX7WWB6.cjs.map → chunk-VSABGETQ.cjs.map} +1 -1
  99. package/dist/{chunk-SBVOYSOO.js → chunk-WH2BIMAZ.js} +3 -3
  100. package/dist/{chunk-SBVOYSOO.js.map → chunk-WH2BIMAZ.js.map} +1 -1
  101. package/dist/{chunk-F73EZQT4.cjs → chunk-WJEJF5NT.cjs} +242 -3
  102. package/dist/chunk-WJEJF5NT.cjs.map +1 -0
  103. package/dist/{chunk-N54OMO6J.js → chunk-WLA3DA62.js} +3 -3
  104. package/dist/{chunk-N54OMO6J.js.map → chunk-WLA3DA62.js.map} +1 -1
  105. package/dist/{chunk-ZDZY6OPL.cjs → chunk-XUEJYHEP.cjs} +3 -3
  106. package/dist/{chunk-ZDZY6OPL.cjs.map → chunk-XUEJYHEP.cjs.map} +1 -1
  107. package/dist/{chunk-P2ZQKJXS.js → chunk-Z6LX4ZGL.js} +31 -13
  108. package/dist/chunk-Z6LX4ZGL.js.map +1 -0
  109. package/dist/connect/docx.cjs +12 -12
  110. package/dist/connect/docx.js +8 -8
  111. package/dist/connect/index.cjs +601 -647
  112. package/dist/connect/index.cjs.map +1 -1
  113. package/dist/connect/index.d.ts +1 -0
  114. package/dist/connect/index.js +202 -249
  115. package/dist/connect/index.js.map +1 -1
  116. package/dist/connect/viewer.cjs +6 -6
  117. package/dist/connect/viewer.js +5 -5
  118. package/dist/connection/ConnectedWorkflowBuilder.d.ts +1 -4
  119. package/dist/connection/ConnectedWorkflowHistory.d.ts +1 -4
  120. package/dist/connection/ConnectedWorkflowRunner.d.ts +3 -4
  121. package/dist/connection/ConnectedWorkflowsTable.d.ts +5 -4
  122. package/dist/connection/facts/ConnectedFactsPage.d.ts +8 -8
  123. package/dist/connection/facts/ConnectedFactsSmartSearch.d.ts +9 -0
  124. package/dist/connection/facts/types.d.ts +1 -6
  125. package/dist/connection/threads-page/ConnectedThreadsPage.d.ts +1 -4
  126. package/dist/connection/viewer/useImageCrop.d.ts +6 -3
  127. package/dist/connection/workflows/ConnectedWorkflowsPage.d.ts +4 -13
  128. package/dist/connection/workflows/support.d.ts +1 -1
  129. package/dist/embed/index.cjs +10 -10
  130. package/dist/embed/index.js +6 -6
  131. package/dist/facts/index.cjs +70 -281
  132. package/dist/facts/index.cjs.map +1 -1
  133. package/dist/facts/index.js +9 -241
  134. package/dist/facts/index.js.map +1 -1
  135. package/dist/files/index.cjs +1 -1
  136. package/dist/files/index.js +1 -1
  137. package/dist/home/index.cjs +31 -31
  138. package/dist/home/index.js +4 -4
  139. package/dist/index.cjs +415 -419
  140. package/dist/index.js +10 -10
  141. package/dist/settings/index.cjs +2 -2
  142. package/dist/settings/index.js +2 -2
  143. package/dist/studio/index.cjs +1 -1
  144. package/dist/studio/index.js +1 -1
  145. package/dist/workflow-canvas/index.cjs +25 -30
  146. package/dist/workflow-canvas/index.cjs.map +1 -1
  147. package/dist/workflow-canvas/index.js +10 -15
  148. package/dist/workflow-canvas/index.js.map +1 -1
  149. package/node_modules/@arbidocs/coedit/package.json +1 -1
  150. package/package.json +5 -5
  151. package/dist/ConnectedStreamedWordArtifact-S64KJPEJ.js.map +0 -1
  152. package/dist/ConnectedStreamedWordArtifact-V7WFW5EP.cjs.map +0 -1
  153. package/dist/agents/tasks/TaskInbox.d.ts +0 -26
  154. package/dist/chunk-35FBVTT6.cjs.map +0 -1
  155. package/dist/chunk-B6QTKCDK.js.map +0 -1
  156. package/dist/chunk-CUSOXCBV.cjs.map +0 -1
  157. package/dist/chunk-F73EZQT4.cjs.map +0 -1
  158. package/dist/chunk-IH2WZUTL.cjs.map +0 -1
  159. package/dist/chunk-LTPOV3W4.js.map +0 -1
  160. package/dist/chunk-MM22MFON.cjs.map +0 -1
  161. package/dist/chunk-P2ZQKJXS.js.map +0 -1
  162. package/dist/chunk-QUZPQWPX.js.map +0 -1
  163. package/dist/chunk-RSVHFZJR.js.map +0 -1
  164. package/dist/chunk-SC3GOSJG.js.map +0 -1
  165. package/dist/chunk-XXI3EIEO.cjs.map +0 -1
@@ -1,30 +1,29 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkF73EZQT4_cjs = require('../chunk-F73EZQT4.cjs');
4
+ var chunkWJEJF5NT_cjs = require('../chunk-WJEJF5NT.cjs');
5
5
  var chunkXFL67STW_cjs = require('../chunk-XFL67STW.cjs');
6
6
  var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
7
7
  require('../chunk-2WLXQGWC.cjs');
8
- var chunkYCO4ZBBL_cjs = require('../chunk-YCO4ZBBL.cjs');
8
+ require('../chunk-QUMUAJ2P.cjs');
9
+ require('../chunk-YCO4ZBBL.cjs');
9
10
  require('../chunk-VPPX5XUF.cjs');
10
11
  var chunkRC25WMVB_cjs = require('../chunk-RC25WMVB.cjs');
11
12
  require('../chunk-V4ISCZJ7.cjs');
12
13
  var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
13
14
  var chunkLKK52DEY_cjs = require('../chunk-LKK52DEY.cjs');
14
- require('../chunk-QUMUAJ2P.cjs');
15
15
  require('../chunk-WVEFRQSW.cjs');
16
- var chunkUFEXJIEY_cjs = require('../chunk-UFEXJIEY.cjs');
17
16
  require('../chunk-FX3K6LNZ.cjs');
18
17
  require('../chunk-PPCATBOY.cjs');
18
+ var chunkUFEXJIEY_cjs = require('../chunk-UFEXJIEY.cjs');
19
19
  require('../chunk-T6GRWWRY.cjs');
20
20
  require('../chunk-GMM3RBIB.cjs');
21
21
  require('../chunk-ULWRNGGE.cjs');
22
- var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
22
+ require('../chunk-MHVNT4J3.cjs');
23
23
  require('../chunk-DES3K4SD.cjs');
24
24
  var react = require('react');
25
25
  var ui = require('@arbidocs/react/ui');
26
26
  var jsxRuntime = require('react/jsx-runtime');
27
- var lucideReact = require('lucide-react');
28
27
 
29
28
  function FactSwitch({ checked, label, onToggle, testId }) {
30
29
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -77,13 +76,13 @@ function FactsTable({
77
76
  gridProps,
78
77
  testId = "facts-table"
79
78
  }) {
80
- const l = { ...chunkF73EZQT4_cjs.DEFAULT_FACT_COLUMN_LABELS, ...columnLabels };
79
+ const l = { ...chunkWJEJF5NT_cjs.DEFAULT_FACT_COLUMN_LABELS, ...columnLabels };
81
80
  const columnDefs = react.useMemo(
82
- () => chunkF73EZQT4_cjs.createFactColumns({
81
+ () => chunkWJEJF5NT_cjs.createFactColumns({
83
82
  isInChat,
84
83
  onToggleInChat,
85
84
  renderHeader: (params) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12.5px] font-medium", children: params.displayName }),
86
- renderRowActions: (fact) => onEdit && onDelete ? /* @__PURE__ */ jsxRuntime.jsx(chunkF73EZQT4_cjs.FactRowActions, { onEdit: () => onEdit(fact), onDelete: () => onDelete(fact) }) : null,
85
+ renderRowActions: (fact) => onEdit && onDelete ? /* @__PURE__ */ jsxRuntime.jsx(chunkWJEJF5NT_cjs.FactRowActions, { onEdit: () => onEdit(fact), onDelete: () => onDelete(fact) }) : null,
87
86
  renderLabels: (fact) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex flex-wrap items-center gap-1", children: (fact.tags ?? []).map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
88
87
  "span",
89
88
  {
@@ -179,373 +178,170 @@ function toFactRow(record) {
179
178
  function toFactRows(records) {
180
179
  return records.map(toFactRow);
181
180
  }
182
- var DEFAULT_FACT_SEARCH_BAR_LABELS = {
183
- search: "Search:",
184
- // An example query rather than an instruction: shows the quoted-phrase syntax.
185
- placeholder: 'e.g. "board meeting" decision on the budget',
186
- clear: "Clear search",
187
- submit: "Search"
188
- };
189
- var DEFAULT_FACT_SEARCH_RESULT_LABELS = {
190
- inChat: "In this chat",
191
- verified: "Verified",
192
- open: "Open"
193
- };
194
- function FactSearchBar({
195
- query,
196
- onQueryChange,
197
- onSubmit,
198
- onClear,
199
- isSearching,
200
- placeholder,
201
- labels,
202
- testIds
203
- }) {
204
- const l = { ...DEFAULT_FACT_SEARCH_BAR_LABELS, ...labels };
205
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border px-6 pb-4 pt-6", "data-slot": "fact-search-bar", children: /* @__PURE__ */ jsxRuntime.jsxs(
206
- "form",
207
- {
208
- onSubmit: (e) => {
209
- e.preventDefault();
210
- onSubmit();
211
- },
212
- className: "mx-auto flex w-full max-w-2xl items-center gap-3",
213
- children: [
214
- /* @__PURE__ */ jsxRuntime.jsx(
215
- "label",
216
- {
217
- htmlFor: "facts-smart-search-input",
218
- className: "shrink-0 text-base font-medium text-foreground",
219
- children: l.search
220
- }
221
- ),
222
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-start gap-2 rounded-lg border border-border bg-background px-3.5 py-2.5 transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring", children: [
223
- /* @__PURE__ */ jsxRuntime.jsx(
224
- "textarea",
225
- {
226
- id: "facts-smart-search-input",
227
- rows: 1,
228
- value: query,
229
- onChange: (e) => {
230
- onQueryChange(e.target.value);
231
- e.target.style.height = "auto";
232
- e.target.style.height = `${e.target.scrollHeight}px`;
233
- },
234
- onKeyDown: (e) => {
235
- if (e.key === "Enter" && !e.shiftKey) {
236
- e.preventDefault();
237
- onSubmit();
238
- }
239
- },
240
- placeholder: placeholder ?? l.placeholder,
241
- className: "flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground",
242
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.input, { testId: "facts-smart-search-input" }),
243
- autoFocus: true
244
- }
245
- ),
246
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
247
- query && /* @__PURE__ */ jsxRuntime.jsx(
248
- ui.Button,
249
- {
250
- type: "button",
251
- variant: "ghost",
252
- size: "icon",
253
- className: "size-7 text-muted-foreground hover:text-foreground pointer-coarse:size-11",
254
- onClick: onClear,
255
- "aria-label": l.clear,
256
- title: l.clear,
257
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.clear, { testId: "facts-smart-search-clear" }),
258
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-4" })
259
- }
260
- ),
261
- /* @__PURE__ */ jsxRuntime.jsx(
262
- ui.Button,
263
- {
264
- type: "submit",
265
- size: "icon",
266
- disabled: !query.trim() || isSearching,
267
- className: "size-7 pointer-coarse:size-11",
268
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.submit, { testId: "facts-smart-search-submit" }),
269
- title: l.submit,
270
- children: isSearching ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "size-4" })
271
- }
272
- )
273
- ] })
274
- ] })
275
- ]
276
- }
277
- ) });
278
- }
279
- function FactSearchTotals({ children, testId }) {
280
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-3", children: /* @__PURE__ */ jsxRuntime.jsx(
281
- "p",
282
- {
283
- className: "font-sans text-base font-semibold tabular-nums text-foreground",
284
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "facts-smart-search-totals" }),
285
- children
286
- }
287
- ) });
288
- }
289
- function FactSearchPending({ children }) {
290
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 py-16 text-sm text-muted-foreground", children: [
291
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }),
292
- " ",
293
- children
294
- ] });
295
- }
296
- function FactSearchNoMatches({
297
- children,
298
- testId
299
- }) {
300
- return /* @__PURE__ */ jsxRuntime.jsx(
301
- "div",
302
- {
303
- className: "py-16 text-center text-sm text-muted-foreground",
304
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "facts-smart-search-empty" }),
305
- children
306
- }
307
- );
308
- }
309
- function FactSearchResult({
310
- id,
311
- rank,
312
- text,
313
- terms,
314
- renderSnippet,
315
- labels,
316
- isInChat,
317
- isVerified,
318
- isSelected,
319
- onOpen,
320
- uiLabels: labelOverrides,
321
- testIds,
322
- href
323
- }) {
324
- const l = { ...DEFAULT_FACT_SEARCH_RESULT_LABELS, ...labelOverrides };
325
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2", "data-slot": "fact-search-hit", children: [
326
- /* @__PURE__ */ jsxRuntime.jsx(
327
- "span",
328
- {
329
- className: "w-5 shrink-0 pt-3 text-right text-xs tabular-nums text-muted-foreground",
330
- "aria-hidden": "true",
331
- children: rank
332
- }
333
- ),
334
- /* @__PURE__ */ jsxRuntime.jsx(
335
- chunkYCO4ZBBL_cjs.SearchHit,
336
- {
337
- className: "min-w-0 flex-1",
338
- testId: chunkMHVNT4J3_cjs.testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` }),
339
- href,
340
- selected: isSelected,
341
- onClick: onOpen,
342
- content: text,
343
- terms,
344
- renderSnippet,
345
- header: /* @__PURE__ */ jsxRuntime.jsxs(
346
- "div",
347
- {
348
- className: "flex min-w-0 flex-1 flex-wrap items-center gap-1 text-xs text-muted-foreground",
349
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.labels?.(id), {
350
- testId: `facts-smart-search-hit-labels-${id}`
351
- }),
352
- children: [
353
- isInChat && /* @__PURE__ */ jsxRuntime.jsxs(
354
- "span",
355
- {
356
- className: "inline-flex items-center gap-1 pr-1",
357
- "data-testid": `facts-smart-search-hit-in-chat-${id}`,
358
- children: [
359
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Paperclip, { className: "size-3" }),
360
- " ",
361
- l.inChat
362
- ]
363
- }
364
- ),
365
- labels.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs(
366
- "span",
367
- {
368
- className: "inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium text-foreground",
369
- title: tag.name,
370
- style: { borderColor: tag.color },
371
- children: [
372
- /* @__PURE__ */ jsxRuntime.jsx(
373
- "span",
374
- {
375
- className: "flex size-3.5 shrink-0 items-center justify-center rounded",
376
- style: { backgroundColor: tag.color },
377
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-2.5 text-white", strokeWidth: 3 })
378
- }
379
- ),
380
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-[120px] truncate", children: tag.name })
381
- ]
382
- },
383
- tag.id
384
- ))
385
- ]
386
- }
387
- ),
388
- headerRight: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
389
- isVerified && /* @__PURE__ */ jsxRuntime.jsxs(
390
- "span",
391
- {
392
- className: "inline-flex shrink-0 items-center gap-1 text-green-text",
393
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.verified?.(id), {
394
- testId: `facts-smart-search-hit-verified-${id}`
395
- }),
396
- children: [
397
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "size-3" }),
398
- " ",
399
- l.verified
400
- ]
401
- }
402
- ),
403
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1", children: [
404
- l.open,
405
- " ",
406
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CornerDownLeft, { className: "size-3" })
407
- ] })
408
- ] })
409
- }
410
- )
411
- ] });
412
- }
413
181
 
414
182
  Object.defineProperty(exports, "DEFAULT_FACTS_BULK_BAR_LABELS", {
415
183
  enumerable: true,
416
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACTS_BULK_BAR_LABELS; }
184
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACTS_BULK_BAR_LABELS; }
417
185
  });
418
186
  Object.defineProperty(exports, "DEFAULT_FACTS_EMPTY_STATE_LABELS", {
419
187
  enumerable: true,
420
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACTS_EMPTY_STATE_LABELS; }
188
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACTS_EMPTY_STATE_LABELS; }
421
189
  });
422
190
  Object.defineProperty(exports, "DEFAULT_FACTS_FIELDS_BUTTON_LABELS", {
423
191
  enumerable: true,
424
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACTS_FIELDS_BUTTON_LABELS; }
192
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACTS_FIELDS_BUTTON_LABELS; }
425
193
  });
426
194
  Object.defineProperty(exports, "DEFAULT_FACTS_TOOLBAR_LABELS", {
427
195
  enumerable: true,
428
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACTS_TOOLBAR_LABELS; }
196
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACTS_TOOLBAR_LABELS; }
429
197
  });
430
198
  Object.defineProperty(exports, "DEFAULT_FACTS_VIEW_TOGGLE_LABELS", {
431
199
  enumerable: true,
432
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACTS_VIEW_TOGGLE_LABELS; }
200
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACTS_VIEW_TOGGLE_LABELS; }
433
201
  });
434
202
  Object.defineProperty(exports, "DEFAULT_FACT_COLUMN_LABELS", {
435
203
  enumerable: true,
436
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_COLUMN_LABELS; }
204
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_COLUMN_LABELS; }
437
205
  });
438
206
  Object.defineProperty(exports, "DEFAULT_FACT_COLUMN_ORDER", {
439
207
  enumerable: true,
440
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_COLUMN_ORDER; }
208
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_COLUMN_ORDER; }
441
209
  });
442
210
  Object.defineProperty(exports, "DEFAULT_FACT_COMPOSER_LABELS", {
443
211
  enumerable: true,
444
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_COMPOSER_LABELS; }
212
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_COMPOSER_LABELS; }
445
213
  });
446
214
  Object.defineProperty(exports, "DEFAULT_FACT_DATE_INPUT_LABELS", {
447
215
  enumerable: true,
448
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_DATE_INPUT_LABELS; }
216
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_DATE_INPUT_LABELS; }
449
217
  });
450
218
  Object.defineProperty(exports, "DEFAULT_FACT_LABELS_CELL_LABELS", {
451
219
  enumerable: true,
452
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_LABELS_CELL_LABELS; }
220
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_LABELS_CELL_LABELS; }
453
221
  });
454
222
  Object.defineProperty(exports, "DEFAULT_FACT_ROW_ACTIONS_LABELS", {
455
223
  enumerable: true,
456
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_ROW_ACTIONS_LABELS; }
224
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_ROW_ACTIONS_LABELS; }
225
+ });
226
+ Object.defineProperty(exports, "DEFAULT_FACT_SEARCH_BAR_LABELS", {
227
+ enumerable: true,
228
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_SEARCH_BAR_LABELS; }
229
+ });
230
+ Object.defineProperty(exports, "DEFAULT_FACT_SEARCH_RESULT_LABELS", {
231
+ enumerable: true,
232
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_SEARCH_RESULT_LABELS; }
457
233
  });
458
234
  Object.defineProperty(exports, "DEFAULT_FACT_SOURCES_ROW_LABELS", {
459
235
  enumerable: true,
460
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_SOURCES_ROW_LABELS; }
236
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_SOURCES_ROW_LABELS; }
461
237
  });
462
238
  Object.defineProperty(exports, "DEFAULT_FACT_SOURCE_GROUP_LABELS", {
463
239
  enumerable: true,
464
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_SOURCE_GROUP_LABELS; }
240
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_SOURCE_GROUP_LABELS; }
465
241
  });
466
242
  Object.defineProperty(exports, "DEFAULT_FACT_TIMELINE_LABELS", {
467
243
  enumerable: true,
468
- get: function () { return chunkF73EZQT4_cjs.DEFAULT_FACT_TIMELINE_LABELS; }
244
+ get: function () { return chunkWJEJF5NT_cjs.DEFAULT_FACT_TIMELINE_LABELS; }
469
245
  });
470
246
  Object.defineProperty(exports, "FactComposer", {
471
247
  enumerable: true,
472
- get: function () { return chunkF73EZQT4_cjs.FactComposer; }
248
+ get: function () { return chunkWJEJF5NT_cjs.FactComposer; }
473
249
  });
474
250
  Object.defineProperty(exports, "FactDateInput", {
475
251
  enumerable: true,
476
- get: function () { return chunkF73EZQT4_cjs.FactDateInput; }
252
+ get: function () { return chunkWJEJF5NT_cjs.FactDateInput; }
477
253
  });
478
254
  Object.defineProperty(exports, "FactFieldRow", {
479
255
  enumerable: true,
480
- get: function () { return chunkF73EZQT4_cjs.FactFieldRow; }
256
+ get: function () { return chunkWJEJF5NT_cjs.FactFieldRow; }
481
257
  });
482
258
  Object.defineProperty(exports, "FactLabelsCell", {
483
259
  enumerable: true,
484
- get: function () { return chunkF73EZQT4_cjs.FactLabelsCell; }
260
+ get: function () { return chunkWJEJF5NT_cjs.FactLabelsCell; }
485
261
  });
486
262
  Object.defineProperty(exports, "FactRowActions", {
487
263
  enumerable: true,
488
- get: function () { return chunkF73EZQT4_cjs.FactRowActions; }
264
+ get: function () { return chunkWJEJF5NT_cjs.FactRowActions; }
265
+ });
266
+ Object.defineProperty(exports, "FactSearchBar", {
267
+ enumerable: true,
268
+ get: function () { return chunkWJEJF5NT_cjs.FactSearchBar; }
269
+ });
270
+ Object.defineProperty(exports, "FactSearchNoMatches", {
271
+ enumerable: true,
272
+ get: function () { return chunkWJEJF5NT_cjs.FactSearchNoMatches; }
273
+ });
274
+ Object.defineProperty(exports, "FactSearchPending", {
275
+ enumerable: true,
276
+ get: function () { return chunkWJEJF5NT_cjs.FactSearchPending; }
277
+ });
278
+ Object.defineProperty(exports, "FactSearchResult", {
279
+ enumerable: true,
280
+ get: function () { return chunkWJEJF5NT_cjs.FactSearchResult; }
281
+ });
282
+ Object.defineProperty(exports, "FactSearchTotals", {
283
+ enumerable: true,
284
+ get: function () { return chunkWJEJF5NT_cjs.FactSearchTotals; }
489
285
  });
490
286
  Object.defineProperty(exports, "FactSourceGroup", {
491
287
  enumerable: true,
492
- get: function () { return chunkF73EZQT4_cjs.FactSourceGroup; }
288
+ get: function () { return chunkWJEJF5NT_cjs.FactSourceGroup; }
493
289
  });
494
290
  Object.defineProperty(exports, "FactSourcesRow", {
495
291
  enumerable: true,
496
- get: function () { return chunkF73EZQT4_cjs.FactSourcesRow; }
292
+ get: function () { return chunkWJEJF5NT_cjs.FactSourcesRow; }
497
293
  });
498
294
  Object.defineProperty(exports, "FactsBulkBar", {
499
295
  enumerable: true,
500
- get: function () { return chunkF73EZQT4_cjs.FactsBulkBar; }
296
+ get: function () { return chunkWJEJF5NT_cjs.FactsBulkBar; }
501
297
  });
502
298
  Object.defineProperty(exports, "FactsCalendar", {
503
299
  enumerable: true,
504
- get: function () { return chunkF73EZQT4_cjs.FactsCalendar; }
300
+ get: function () { return chunkWJEJF5NT_cjs.FactsCalendar; }
505
301
  });
506
302
  Object.defineProperty(exports, "FactsEmptyState", {
507
303
  enumerable: true,
508
- get: function () { return chunkF73EZQT4_cjs.FactsEmptyState; }
304
+ get: function () { return chunkWJEJF5NT_cjs.FactsEmptyState; }
509
305
  });
510
306
  Object.defineProperty(exports, "FactsFieldsButton", {
511
307
  enumerable: true,
512
- get: function () { return chunkF73EZQT4_cjs.FactsFieldsButton; }
308
+ get: function () { return chunkWJEJF5NT_cjs.FactsFieldsButton; }
513
309
  });
514
310
  Object.defineProperty(exports, "FactsGanttPane", {
515
311
  enumerable: true,
516
- get: function () { return chunkF73EZQT4_cjs.FactsGanttPane; }
312
+ get: function () { return chunkWJEJF5NT_cjs.FactsGanttPane; }
517
313
  });
518
314
  Object.defineProperty(exports, "FactsLoadError", {
519
315
  enumerable: true,
520
- get: function () { return chunkF73EZQT4_cjs.FactsLoadError; }
316
+ get: function () { return chunkWJEJF5NT_cjs.FactsLoadError; }
521
317
  });
522
318
  Object.defineProperty(exports, "FactsLoading", {
523
319
  enumerable: true,
524
- get: function () { return chunkF73EZQT4_cjs.FactsLoading; }
320
+ get: function () { return chunkWJEJF5NT_cjs.FactsLoading; }
525
321
  });
526
322
  Object.defineProperty(exports, "FactsToolbar", {
527
323
  enumerable: true,
528
- get: function () { return chunkF73EZQT4_cjs.FactsToolbar; }
324
+ get: function () { return chunkWJEJF5NT_cjs.FactsToolbar; }
529
325
  });
530
326
  Object.defineProperty(exports, "FactsViewToggle", {
531
327
  enumerable: true,
532
- get: function () { return chunkF73EZQT4_cjs.FactsViewToggle; }
328
+ get: function () { return chunkWJEJF5NT_cjs.FactsViewToggle; }
533
329
  });
534
330
  Object.defineProperty(exports, "ISO_DATE_FILTER_PARAMS", {
535
331
  enumerable: true,
536
- get: function () { return chunkF73EZQT4_cjs.ISO_DATE_FILTER_PARAMS; }
332
+ get: function () { return chunkWJEJF5NT_cjs.ISO_DATE_FILTER_PARAMS; }
537
333
  });
538
334
  Object.defineProperty(exports, "createFactColumns", {
539
335
  enumerable: true,
540
- get: function () { return chunkF73EZQT4_cjs.createFactColumns; }
336
+ get: function () { return chunkWJEJF5NT_cjs.createFactColumns; }
541
337
  });
542
338
  Object.defineProperty(exports, "enableFactTableColumnResize", {
543
339
  enumerable: true,
544
- get: function () { return chunkF73EZQT4_cjs.enableFactTableColumnResize; }
340
+ get: function () { return chunkWJEJF5NT_cjs.enableFactTableColumnResize; }
545
341
  });
546
342
  Object.defineProperty(exports, "sourceDocCount", {
547
343
  enumerable: true,
548
- get: function () { return chunkF73EZQT4_cjs.sourceDocCount; }
344
+ get: function () { return chunkWJEJF5NT_cjs.sourceDocCount; }
549
345
  });
550
346
  Object.defineProperty(exports, "EMPTY_FACT_DATE_FIELDS", {
551
347
  enumerable: true,
@@ -647,13 +443,6 @@ Object.defineProperty(exports, "FactsFilterInput", {
647
443
  enumerable: true,
648
444
  get: function () { return chunk2EI7NCUA_cjs.FilterInput; }
649
445
  });
650
- exports.DEFAULT_FACT_SEARCH_BAR_LABELS = DEFAULT_FACT_SEARCH_BAR_LABELS;
651
- exports.DEFAULT_FACT_SEARCH_RESULT_LABELS = DEFAULT_FACT_SEARCH_RESULT_LABELS;
652
- exports.FactSearchBar = FactSearchBar;
653
- exports.FactSearchNoMatches = FactSearchNoMatches;
654
- exports.FactSearchPending = FactSearchPending;
655
- exports.FactSearchResult = FactSearchResult;
656
- exports.FactSearchTotals = FactSearchTotals;
657
446
  exports.FactsTable = FactsTable;
658
447
  exports.toFactRow = toFactRow;
659
448
  exports.toFactRows = toFactRows;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/facts/FactsTable.tsx","../../src/facts/fact-row.ts","../../src/facts/FactSearchParts.tsx"],"names":["jsx","cn","DEFAULT_FACT_COLUMN_LABELS","useMemo","createFactColumns","FactRowActions","GridView","jsxs","testIdOr","Button","X","Loader2","Search","SearchHit","Paperclip","Check","CheckCircle2","CornerDownLeft"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * FactsTable: the default facts grid. `createFactColumns` wired to `GridView` with ready-made\n * cells (in-chat, verified and shared switches, label chips, creator initials, row menu), so a host\n * only supplies rows and handlers. Hosts that need custom cells call `createFactColumns` with\n * their own slots and render `GridView` themselves.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { cn } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { initials } from '../lib/format'\nimport { FactRowActions } from './FactRowActions'\nimport {\n DEFAULT_FACT_COLUMN_LABELS,\n createFactColumns,\n type FactColumnLabels,\n type FactRowView,\n} from './factColumns'\n\nexport interface FactsTableProps<T extends FactRowView> {\n facts: T[]\n /** With `onToggleInChat`, shows the In chat column (whether a fact is in the host's chat). */\n isInChat?: (fact: T) => boolean\n onToggleInChat?: (fact: T) => void\n onToggleConfirmed: (fact: T) => void\n onToggleShared: (fact: T) => void\n /** The row menu appears when both `onEdit` and `onDelete` are provided. */\n onEdit?: (fact: T) => void\n onDelete?: (fact: T) => void\n /** Row click (opens the fact). */\n onOpen?: (fact: T) => void\n /** Display name of the fact's creator (sorting, filtering and the initials chip). */\n getCreatorName?: (fact: T) => string\n /** Friendly display of an ISO timestamp. Defaults to the locale date. */\n formatDate?: (iso: string) => string\n columnLabels?: Partial<FactColumnLabels>\n isLoading?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n height?: GridViewProps<T>['height']\n rowHeight?: number\n /** Escape hatch for any other `GridView` prop. */\n gridProps?: Partial<Omit<GridViewProps<T>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\ninterface FactSwitchProps {\n checked: boolean\n label: string\n onToggle: () => void\n testId: string\n}\n\nfunction FactSwitch({ checked, label, onToggle, testId }: FactSwitchProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n data-testid={testId}\n className={cn(\n 'inline-flex h-5 w-9 items-center rounded-full p-0.5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n checked ? 'bg-green-solid' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'size-4 rounded-full bg-background transition-transform',\n checked && 'translate-x-4'\n )}\n />\n </button>\n )\n}\n\nconst defaultFormatDate = (iso: string): string => {\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? iso : d.toLocaleDateString()\n}\n\nconst EMPTY_STATE = { title: 'No facts yet' }\n\n/** The default facts table: columns, cells and the grid in one component. */\nexport function FactsTable<T extends FactRowView>({\n facts,\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n onOpen,\n getCreatorName,\n formatDate = defaultFormatDate,\n columnLabels,\n isLoading,\n gridId = 'facts-table-v1',\n height = '100%',\n rowHeight = 52,\n gridProps,\n testId = 'facts-table',\n}: FactsTableProps<T>) {\n const l = { ...DEFAULT_FACT_COLUMN_LABELS, ...columnLabels }\n\n const columnDefs = useMemo<ColDef<T>[]>(\n () =>\n createFactColumns<T>({\n isInChat,\n onToggleInChat,\n renderHeader: (params) => (\n <span className=\"text-[12.5px] font-medium\">{params.displayName}</span>\n ),\n renderRowActions: (fact) =>\n onEdit && onDelete ? (\n <FactRowActions onEdit={() => onEdit(fact)} onDelete={() => onDelete(fact)} />\n ) : null,\n renderLabels: (fact): ReactNode => (\n <span className=\"flex flex-wrap items-center gap-1\">\n {(fact.tags ?? []).map((tag) => (\n <span\n key={tag.name}\n className=\"rounded-full bg-muted px-2 py-px text-xs text-muted-foreground\"\n >\n {tag.name}\n </span>\n ))}\n </span>\n ),\n renderVerified: (fact) => (\n <FactSwitch\n checked={fact.confirmed}\n label={l.verified}\n onToggle={() => onToggleConfirmed(fact)}\n testId={`facts-grid-confirmed-${fact.external_id}`}\n />\n ),\n renderShared: (fact) => (\n <FactSwitch\n checked={fact.shared}\n label={l.shared}\n onToggle={() => onToggleShared(fact)}\n testId={`facts-grid-shared-${fact.external_id}`}\n />\n ),\n renderCreator: (fact, _params: ICellRendererParams<T>) => {\n const name = getCreatorName?.(fact) ?? ''\n return name ? (\n <span\n title={name}\n className=\"inline-flex size-6 items-center justify-center rounded-full bg-muted text-[10px] font-medium text-muted-foreground\"\n >\n {initials(name)}\n </span>\n ) : null\n },\n getCreatorName: (params) => (params.data ? (getCreatorName?.(params.data) ?? '') : ''),\n formatDate,\n labels: columnLabels,\n }),\n [\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n getCreatorName,\n formatDate,\n columnLabels,\n l.verified,\n l.shared,\n ]\n )\n\n return (\n <GridView<T>\n testId={testId}\n items={facts}\n columnDefs={columnDefs}\n getItemId={(fact) => fact.external_id}\n onRowClick={onOpen}\n isLoading={isLoading}\n emptyState={EMPTY_STATE}\n gridId={gridId}\n height={height}\n rowHeight={rowHeight}\n {...gridProps}\n gridOptions={{ suppressClickEdit: true, ...gridProps?.gridOptions }}\n />\n )\n}\n","import type { FactRowView } from './factColumns'\n\n/**\n * A fact as a host with plain records usually holds it: camelCase, optional flags, tags as\n * strings. `toFactRow` maps it to the `FactRowView` that `FactsTable` and `createFactColumns`\n * read, so a host without the SDK type needs no adapter of its own.\n */\nexport interface PlainFactRecord {\n id: string\n text: string\n confirmed?: boolean\n shared?: boolean\n /** ISO date (or date-time) the fact starts. */\n dateStart?: string | null\n dateEnd?: string | null\n timezone?: string | null\n tags?: Array<string | { name: string }> | null\n /** Passages that support the fact; only their count is shown. */\n citations?: unknown[] | null\n createdBy?: string | null\n createdAt?: string | null\n updatedAt?: string | null\n}\n\n/** The row plus the record it came from, so callbacks can hand the host its own object back. */\nexport type PlainFactRow<T extends PlainFactRecord> = FactRowView & { record: T }\n\n/** Map one plain record to a grid row. Missing flags are `false`, missing lists are empty. */\nexport function toFactRow<T extends PlainFactRecord>(record: T): PlainFactRow<T> {\n return {\n external_id: record.id,\n text: record.text,\n confirmed: record.confirmed ?? false,\n shared: record.shared ?? false,\n date_start: record.dateStart ?? null,\n date_end: record.dateEnd ?? null,\n timezone: record.timezone ?? null,\n tags: (record.tags ?? []).map((t) => (typeof t === 'string' ? { name: t } : t)),\n citations: record.citations ?? [],\n created_by_ext_id: record.createdBy ?? null,\n created_at: record.createdAt ?? null,\n updated_at: record.updatedAt ?? null,\n record,\n }\n}\n\nexport function toFactRows<T extends PlainFactRecord>(records: T[]): PlainFactRow<T>[] {\n return records.map(toFactRow)\n}\n","import type { ReactNode } from 'react'\nimport { Check, CheckCircle2, CornerDownLeft, Loader2, Paperclip, Search, X } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SearchHit } from '../retrieval/SearchHit'\nimport { testIdOr } from '../chat/test-id'\n\nexport interface FactSearchBarLabels {\n search: string\n placeholder: string\n clear: string\n submit: string\n}\n\nexport const DEFAULT_FACT_SEARCH_BAR_LABELS: FactSearchBarLabels = {\n search: 'Search:',\n // An example query rather than an instruction: shows the quoted-phrase syntax.\n placeholder: 'e.g. \"board meeting\" decision on the budget',\n clear: 'Clear search',\n submit: 'Search',\n}\n\nexport interface FactSearchBarTestIds {\n input: string\n clear: string\n submit: string\n}\n\nexport interface FactSearchResultLabels {\n inChat: string\n verified: string\n open: string\n}\n\nexport const DEFAULT_FACT_SEARCH_RESULT_LABELS: FactSearchResultLabels = {\n inChat: 'In this chat',\n verified: 'Verified',\n open: 'Open',\n}\n\nexport interface FactSearchResultTestIds {\n hit: (id: string) => string\n labels: (id: string) => string\n verified: (id: string) => string\n}\n\nexport interface FactSearchBarProps {\n query: string\n onQueryChange: (query: string) => void\n onSubmit: () => void\n onClear: () => void\n isSearching: boolean\n /** Wins over `labels.placeholder`. */\n placeholder?: string\n labels?: Partial<FactSearchBarLabels>\n testIds?: Partial<FactSearchBarTestIds>\n}\n\n/**\n * The facts Smart Search bar: the same bordered, auto-growing box as the Files Smart Search.\n * Enter searches; Shift+Enter breaks a line.\n */\nexport function FactSearchBar({\n query,\n onQueryChange,\n onSubmit,\n onClear,\n isSearching,\n placeholder,\n labels,\n testIds,\n}: FactSearchBarProps) {\n const l = { ...DEFAULT_FACT_SEARCH_BAR_LABELS, ...labels }\n return (\n <div className=\"border-t border-border px-6 pb-4 pt-6\" data-slot=\"fact-search-bar\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"mx-auto flex w-full max-w-2xl items-center gap-3\"\n >\n <label\n htmlFor=\"facts-smart-search-input\"\n className=\"shrink-0 text-base font-medium text-foreground\"\n >\n {l.search}\n </label>\n <div className=\"flex min-w-0 flex-1 items-start gap-2 rounded-lg border border-border bg-background px-3.5 py-2.5 transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n id=\"facts-smart-search-input\"\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={placeholder ?? l.placeholder}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testIdOr(testIds?.input, { testId: 'facts-smart-search-input' })}\n autoFocus\n />\n <div className=\"flex shrink-0 items-center gap-1\">\n {query && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n onClick={onClear}\n aria-label={l.clear}\n title={l.clear}\n data-testid={testIdOr(testIds?.clear, { testId: 'facts-smart-search-clear' })}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!query.trim() || isSearching}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid={testIdOr(testIds?.submit, { testId: 'facts-smart-search-submit' })}\n title={l.submit}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n )\n}\n\n/** Totals headline pinned between the search bar and the scrolling results. */\nexport function FactSearchTotals({ children, testId }: { children: ReactNode; testId?: string }) {\n return (\n <div className=\"px-4 pb-3\">\n <p\n className=\"font-sans text-base font-semibold tabular-nums text-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-totals' })}\n >\n {children}\n </p>\n </div>\n )\n}\n\n/** \"Searching facts…\" line. */\nexport function FactSearchPending({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-16 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {children}\n </div>\n )\n}\n\n/** No-matches message. */\nexport function FactSearchNoMatches({\n children,\n testId,\n}: {\n children: ReactNode\n testId?: string\n}) {\n return (\n <div\n className=\"py-16 text-center text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'facts-smart-search-empty' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface FactSearchResultLabel {\n id: string\n name: string\n color: string\n}\n\nexport interface FactSearchResultProps {\n /** Fact id: keys the test ids. */\n id: string\n /** 1-based rank, shown outside the card (it numbers the results, it is not part of the hit). */\n rank: number\n text: string\n terms: string[]\n renderSnippet: (content: string, terms: string[]) => ReactNode\n labels: FactSearchResultLabel[]\n /** The fact is in the host's current chat. */\n isInChat?: boolean\n isVerified?: boolean\n /** The fact open in the composer. */\n isSelected?: boolean\n onOpen: () => void\n uiLabels?: Partial<FactSearchResultLabels>\n testIds?: Partial<FactSearchResultTestIds>\n /** Destination of the fact; the card stays a click target (see SearchHit `href`). */\n href?: string\n}\n\n/** One facts search result: rank, highlighted text, labels (and In this chat) and the Verified mark. */\nexport function FactSearchResult({\n id,\n rank,\n text,\n terms,\n renderSnippet,\n labels,\n isInChat,\n isVerified,\n isSelected,\n onOpen,\n uiLabels: labelOverrides,\n testIds,\n href,\n}: FactSearchResultProps) {\n const l = { ...DEFAULT_FACT_SEARCH_RESULT_LABELS, ...labelOverrides }\n return (\n <div className=\"flex items-start gap-2\" data-slot=\"fact-search-hit\">\n <span\n className=\"w-5 shrink-0 pt-3 text-right text-xs tabular-nums text-muted-foreground\"\n aria-hidden=\"true\"\n >\n {rank}\n </span>\n <SearchHit\n className=\"min-w-0 flex-1\"\n testId={testIdOr(testIds?.hit?.(id), { testId: `facts-smart-search-hit-${id}` })}\n href={href}\n selected={isSelected}\n onClick={onOpen}\n content={text}\n terms={terms}\n renderSnippet={renderSnippet}\n header={\n <div\n className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testIds?.labels?.(id), {\n testId: `facts-smart-search-hit-labels-${id}`,\n })}\n >\n {isInChat && (\n <span\n className=\"inline-flex items-center gap-1 pr-1\"\n data-testid={`facts-smart-search-hit-in-chat-${id}`}\n >\n <Paperclip className=\"size-3\" /> {l.inChat}\n </span>\n )}\n {labels.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium text-foreground\"\n title={tag.name}\n style={{ borderColor: tag.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: tag.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[120px] truncate\">{tag.name}</span>\n </span>\n ))}\n </div>\n }\n headerRight={\n <span className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n {isVerified && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 text-green-text\"\n data-testid={testIdOr(testIds?.verified?.(id), {\n testId: `facts-smart-search-hit-verified-${id}`,\n })}\n >\n <CheckCircle2 className=\"size-3\" /> {l.verified}\n </span>\n )}\n <span className=\"inline-flex items-center gap-1\">\n {l.open} <CornerDownLeft className=\"size-3\" />\n </span>\n </span>\n }\n />\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/facts/FactsTable.tsx","../../src/facts/fact-row.ts"],"names":["jsx","cn","DEFAULT_FACT_COLUMN_LABELS","useMemo","createFactColumns","FactRowActions","GridView"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * FactsTable: the default facts grid. `createFactColumns` wired to `GridView` with ready-made\n * cells (in-chat, verified and shared switches, label chips, creator initials, row menu), so a host\n * only supplies rows and handlers. Hosts that need custom cells call `createFactColumns` with\n * their own slots and render `GridView` themselves.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { cn } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { initials } from '../lib/format'\nimport { FactRowActions } from './FactRowActions'\nimport {\n DEFAULT_FACT_COLUMN_LABELS,\n createFactColumns,\n type FactColumnLabels,\n type FactRowView,\n} from './factColumns'\n\nexport interface FactsTableProps<T extends FactRowView> {\n facts: T[]\n /** With `onToggleInChat`, shows the In chat column (whether a fact is in the host's chat). */\n isInChat?: (fact: T) => boolean\n onToggleInChat?: (fact: T) => void\n onToggleConfirmed: (fact: T) => void\n onToggleShared: (fact: T) => void\n /** The row menu appears when both `onEdit` and `onDelete` are provided. */\n onEdit?: (fact: T) => void\n onDelete?: (fact: T) => void\n /** Row click (opens the fact). */\n onOpen?: (fact: T) => void\n /** Display name of the fact's creator (sorting, filtering and the initials chip). */\n getCreatorName?: (fact: T) => string\n /** Friendly display of an ISO timestamp. Defaults to the locale date. */\n formatDate?: (iso: string) => string\n columnLabels?: Partial<FactColumnLabels>\n isLoading?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n height?: GridViewProps<T>['height']\n rowHeight?: number\n /** Escape hatch for any other `GridView` prop. */\n gridProps?: Partial<Omit<GridViewProps<T>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\ninterface FactSwitchProps {\n checked: boolean\n label: string\n onToggle: () => void\n testId: string\n}\n\nfunction FactSwitch({ checked, label, onToggle, testId }: FactSwitchProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n data-testid={testId}\n className={cn(\n 'inline-flex h-5 w-9 items-center rounded-full p-0.5 transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n checked ? 'bg-green-solid' : 'bg-muted-foreground/30'\n )}\n >\n <span\n className={cn(\n 'size-4 rounded-full bg-background transition-transform',\n checked && 'translate-x-4'\n )}\n />\n </button>\n )\n}\n\nconst defaultFormatDate = (iso: string): string => {\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? iso : d.toLocaleDateString()\n}\n\nconst EMPTY_STATE = { title: 'No facts yet' }\n\n/** The default facts table: columns, cells and the grid in one component. */\nexport function FactsTable<T extends FactRowView>({\n facts,\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n onOpen,\n getCreatorName,\n formatDate = defaultFormatDate,\n columnLabels,\n isLoading,\n gridId = 'facts-table-v1',\n height = '100%',\n rowHeight = 52,\n gridProps,\n testId = 'facts-table',\n}: FactsTableProps<T>) {\n const l = { ...DEFAULT_FACT_COLUMN_LABELS, ...columnLabels }\n\n const columnDefs = useMemo<ColDef<T>[]>(\n () =>\n createFactColumns<T>({\n isInChat,\n onToggleInChat,\n renderHeader: (params) => (\n <span className=\"text-[12.5px] font-medium\">{params.displayName}</span>\n ),\n renderRowActions: (fact) =>\n onEdit && onDelete ? (\n <FactRowActions onEdit={() => onEdit(fact)} onDelete={() => onDelete(fact)} />\n ) : null,\n renderLabels: (fact): ReactNode => (\n <span className=\"flex flex-wrap items-center gap-1\">\n {(fact.tags ?? []).map((tag) => (\n <span\n key={tag.name}\n className=\"rounded-full bg-muted px-2 py-px text-xs text-muted-foreground\"\n >\n {tag.name}\n </span>\n ))}\n </span>\n ),\n renderVerified: (fact) => (\n <FactSwitch\n checked={fact.confirmed}\n label={l.verified}\n onToggle={() => onToggleConfirmed(fact)}\n testId={`facts-grid-confirmed-${fact.external_id}`}\n />\n ),\n renderShared: (fact) => (\n <FactSwitch\n checked={fact.shared}\n label={l.shared}\n onToggle={() => onToggleShared(fact)}\n testId={`facts-grid-shared-${fact.external_id}`}\n />\n ),\n renderCreator: (fact, _params: ICellRendererParams<T>) => {\n const name = getCreatorName?.(fact) ?? ''\n return name ? (\n <span\n title={name}\n className=\"inline-flex size-6 items-center justify-center rounded-full bg-muted text-[10px] font-medium text-muted-foreground\"\n >\n {initials(name)}\n </span>\n ) : null\n },\n getCreatorName: (params) => (params.data ? (getCreatorName?.(params.data) ?? '') : ''),\n formatDate,\n labels: columnLabels,\n }),\n [\n isInChat,\n onToggleInChat,\n onToggleConfirmed,\n onToggleShared,\n onEdit,\n onDelete,\n getCreatorName,\n formatDate,\n columnLabels,\n l.verified,\n l.shared,\n ]\n )\n\n return (\n <GridView<T>\n testId={testId}\n items={facts}\n columnDefs={columnDefs}\n getItemId={(fact) => fact.external_id}\n onRowClick={onOpen}\n isLoading={isLoading}\n emptyState={EMPTY_STATE}\n gridId={gridId}\n height={height}\n rowHeight={rowHeight}\n {...gridProps}\n gridOptions={{ suppressClickEdit: true, ...gridProps?.gridOptions }}\n />\n )\n}\n","import type { FactRowView } from './factColumns'\n\n/**\n * A fact as a host with plain records usually holds it: camelCase, optional flags, tags as\n * strings. `toFactRow` maps it to the `FactRowView` that `FactsTable` and `createFactColumns`\n * read, so a host without the SDK type needs no adapter of its own.\n */\nexport interface PlainFactRecord {\n id: string\n text: string\n confirmed?: boolean\n shared?: boolean\n /** ISO date (or date-time) the fact starts. */\n dateStart?: string | null\n dateEnd?: string | null\n timezone?: string | null\n tags?: Array<string | { name: string }> | null\n /** Passages that support the fact; only their count is shown. */\n citations?: unknown[] | null\n createdBy?: string | null\n createdAt?: string | null\n updatedAt?: string | null\n}\n\n/** The row plus the record it came from, so callbacks can hand the host its own object back. */\nexport type PlainFactRow<T extends PlainFactRecord> = FactRowView & { record: T }\n\n/** Map one plain record to a grid row. Missing flags are `false`, missing lists are empty. */\nexport function toFactRow<T extends PlainFactRecord>(record: T): PlainFactRow<T> {\n return {\n external_id: record.id,\n text: record.text,\n confirmed: record.confirmed ?? false,\n shared: record.shared ?? false,\n date_start: record.dateStart ?? null,\n date_end: record.dateEnd ?? null,\n timezone: record.timezone ?? null,\n tags: (record.tags ?? []).map((t) => (typeof t === 'string' ? { name: t } : t)),\n citations: record.citations ?? [],\n created_by_ext_id: record.createdBy ?? null,\n created_at: record.createdAt ?? null,\n updated_at: record.updatedAt ?? null,\n record,\n }\n}\n\nexport function toFactRows<T extends PlainFactRecord>(records: T[]): PlainFactRow<T>[] {\n return records.map(toFactRow)\n}\n"]}