@arbidocs/blocks 0.5.118 → 0.5.120

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 (145) hide show
  1. package/dist/{ConnectedCallDock-E7RMQMMT.cjs → ConnectedCallDock-WER7R222.cjs} +12 -12
  2. package/dist/{ConnectedCallDock-E7RMQMMT.cjs.map → ConnectedCallDock-WER7R222.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-FF7X6LQ2.cjs → ConnectedCallRoom-T7OBQTYP.cjs} +12 -12
  4. package/dist/{ConnectedCallRoom-FF7X6LQ2.cjs.map → ConnectedCallRoom-T7OBQTYP.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-PB2LXT5U.cjs → ConnectedNativeDocxComparison-SGE4R3M4.cjs} +11 -11
  6. package/dist/{ConnectedNativeDocxComparison-PB2LXT5U.cjs.map → ConnectedNativeDocxComparison-SGE4R3M4.cjs.map} +1 -1
  7. package/dist/{ConnectedStreamedWordArtifact-S7ICDK5T.cjs → ConnectedStreamedWordArtifact-6MCLJRIT.cjs} +11 -11
  8. package/dist/{ConnectedStreamedWordArtifact-S7ICDK5T.cjs.map → ConnectedStreamedWordArtifact-6MCLJRIT.cjs.map} +1 -1
  9. package/dist/{DocumentReviewCard-L472OMQS.cjs → DocumentReviewCard-BPIAJJED.cjs} +17 -17
  10. package/dist/{DocumentReviewCard-L472OMQS.cjs.map → DocumentReviewCard-BPIAJJED.cjs.map} +1 -1
  11. package/dist/{FilesViewerDialog-JK25HKKF.cjs → FilesViewerDialog-67WK3TZC.cjs} +26 -26
  12. package/dist/{FilesViewerDialog-JK25HKKF.cjs.map → FilesViewerDialog-67WK3TZC.cjs.map} +1 -1
  13. package/dist/{WorkspaceTableView-JCTDEMIL.cjs → WorkspaceTableView-J3C6VH4T.cjs} +8 -8
  14. package/dist/{WorkspaceTableView-JCTDEMIL.cjs.map → WorkspaceTableView-J3C6VH4T.cjs.map} +1 -1
  15. package/dist/agents/index.cjs +187 -187
  16. package/dist/agents/tasks/ConversationListView.js +10 -2
  17. package/dist/agents/tasks/ConversationListView.js.map +2 -2
  18. package/dist/agents/tasks/TaskTable.js +5 -4
  19. package/dist/agents/tasks/TaskTable.js.map +2 -2
  20. package/dist/agents/tasks/WorkflowsTable.js +4 -5
  21. package/dist/agents/tasks/WorkflowsTable.js.map +2 -2
  22. package/dist/agents/tasks/taskColumns.js +1 -1
  23. package/dist/agents/tasks/taskColumns.js.map +1 -1
  24. package/dist/agents/tasks/taskTableLabels.js +1 -1
  25. package/dist/agents/tasks/taskTableLabels.js.map +1 -1
  26. package/dist/agents/tasks/workflowTableLabels.js +1 -1
  27. package/dist/agents/tasks/workflowTableLabels.js.map +1 -1
  28. package/dist/{ai-OBS67QV4.cjs → ai-IM4A23YT.cjs} +16 -16
  29. package/dist/ai-IM4A23YT.cjs.map +1 -0
  30. package/dist/calls/index.cjs +2 -2
  31. package/dist/{chunk-P77YTTJ3.cjs → chunk-3GWWOYGS.cjs} +4 -4
  32. package/dist/{chunk-P77YTTJ3.cjs.map → chunk-3GWWOYGS.cjs.map} +1 -1
  33. package/dist/{chunk-QOXK5O6M.cjs → chunk-557MJ4IH.cjs} +12 -12
  34. package/dist/{chunk-QOXK5O6M.cjs.map → chunk-557MJ4IH.cjs.map} +1 -1
  35. package/dist/{chunk-YDPLSXHB.cjs → chunk-5IZFSAEZ.cjs} +4 -4
  36. package/dist/{chunk-YDPLSXHB.cjs.map → chunk-5IZFSAEZ.cjs.map} +1 -1
  37. package/dist/{chunk-JSQQV23D.cjs → chunk-6UTKM5AB.cjs} +3 -3
  38. package/dist/{chunk-JSQQV23D.cjs.map → chunk-6UTKM5AB.cjs.map} +1 -1
  39. package/dist/{chunk-PVPRVI54.cjs → chunk-775S43W7.cjs} +21 -12
  40. package/dist/chunk-775S43W7.cjs.map +1 -0
  41. package/dist/{chunk-3LNUQYAF.cjs → chunk-B3LZITVF.cjs} +3 -3
  42. package/dist/{chunk-3LNUQYAF.cjs.map → chunk-B3LZITVF.cjs.map} +1 -1
  43. package/dist/{chunk-SUYPXUE6.cjs → chunk-BP3IJ34D.cjs} +6 -6
  44. package/dist/{chunk-SUYPXUE6.cjs.map → chunk-BP3IJ34D.cjs.map} +1 -1
  45. package/dist/{chunk-TT4IF52H.cjs → chunk-BUVIBHFU.cjs} +37 -38
  46. package/dist/chunk-BUVIBHFU.cjs.map +1 -0
  47. package/dist/{chunk-OPH4UZQN.cjs → chunk-CKCG4NDB.cjs} +33 -33
  48. package/dist/{chunk-OPH4UZQN.cjs.map → chunk-CKCG4NDB.cjs.map} +1 -1
  49. package/dist/{chunk-7IPIKMCY.cjs → chunk-CPR6EHG7.cjs} +3 -3
  50. package/dist/{chunk-7IPIKMCY.cjs.map → chunk-CPR6EHG7.cjs.map} +1 -1
  51. package/dist/{chunk-YGXOKB5Z.cjs → chunk-DFBDQKGE.cjs} +4 -4
  52. package/dist/{chunk-YGXOKB5Z.cjs.map → chunk-DFBDQKGE.cjs.map} +1 -1
  53. package/dist/{chunk-K6AUKKUN.cjs → chunk-ECLUFKYR.cjs} +6 -6
  54. package/dist/{chunk-K6AUKKUN.cjs.map → chunk-ECLUFKYR.cjs.map} +1 -1
  55. package/dist/{chunk-CPG7II4E.cjs → chunk-HA66DHW6.cjs} +28 -28
  56. package/dist/{chunk-CPG7II4E.cjs.map → chunk-HA66DHW6.cjs.map} +1 -1
  57. package/dist/{chunk-P2MOLUFO.cjs → chunk-KTQOGT2L.cjs} +6 -6
  58. package/dist/{chunk-P2MOLUFO.cjs.map → chunk-KTQOGT2L.cjs.map} +1 -1
  59. package/dist/{chunk-57NHXEU2.cjs → chunk-MXBXZXXQ.cjs} +5 -5
  60. package/dist/{chunk-57NHXEU2.cjs.map → chunk-MXBXZXXQ.cjs.map} +1 -1
  61. package/dist/{chunk-L6APDO3Y.cjs → chunk-NJCK6V6U.cjs} +3 -3
  62. package/dist/{chunk-L6APDO3Y.cjs.map → chunk-NJCK6V6U.cjs.map} +1 -1
  63. package/dist/{chunk-NNUK5ZM7.cjs → chunk-NLSWDP42.cjs} +9 -17
  64. package/dist/chunk-NLSWDP42.cjs.map +1 -0
  65. package/dist/{chunk-ZCIQBHH5.cjs → chunk-Q6CLWOP2.cjs} +36 -36
  66. package/dist/{chunk-ZCIQBHH5.cjs.map → chunk-Q6CLWOP2.cjs.map} +1 -1
  67. package/dist/{chunk-XZYIS2JZ.cjs → chunk-QQWHG3KF.cjs} +6 -7
  68. package/dist/chunk-QQWHG3KF.cjs.map +1 -0
  69. package/dist/{chunk-KHAO7ZTO.cjs → chunk-T23UTIRI.cjs} +5 -5
  70. package/dist/{chunk-KHAO7ZTO.cjs.map → chunk-T23UTIRI.cjs.map} +1 -1
  71. package/dist/{chunk-O4F77VSO.cjs → chunk-TDO5UWXF.cjs} +5 -5
  72. package/dist/{chunk-O4F77VSO.cjs.map → chunk-TDO5UWXF.cjs.map} +1 -1
  73. package/dist/{chunk-VLCY46K6.cjs → chunk-TG2GM7WJ.cjs} +4 -3
  74. package/dist/chunk-TG2GM7WJ.cjs.map +1 -0
  75. package/dist/{chunk-5XAJ4N2S.cjs → chunk-VZCPMXWC.cjs} +4 -4
  76. package/dist/{chunk-5XAJ4N2S.cjs.map → chunk-VZCPMXWC.cjs.map} +1 -1
  77. package/dist/{chunk-MMVDVHKE.cjs → chunk-W6INT5GS.cjs} +5 -5
  78. package/dist/{chunk-MMVDVHKE.cjs.map → chunk-W6INT5GS.cjs.map} +1 -1
  79. package/dist/{chunk-ZPPMAL5P.cjs → chunk-WQMR3O2D.cjs} +6 -10
  80. package/dist/chunk-WQMR3O2D.cjs.map +1 -0
  81. package/dist/{chunk-CB3YYZAU.cjs → chunk-X36UR4A7.cjs} +175 -58
  82. package/dist/chunk-X36UR4A7.cjs.map +1 -0
  83. package/dist/{chunk-6ULADDBW.cjs → chunk-YYSBWMDJ.cjs} +4 -4
  84. package/dist/{chunk-6ULADDBW.cjs.map → chunk-YYSBWMDJ.cjs.map} +1 -1
  85. package/dist/collaboration/index.cjs +3 -3
  86. package/dist/collaboration/sharing/ShareControl.js +10 -2
  87. package/dist/collaboration/sharing/ShareControl.js.map +2 -2
  88. package/dist/components/SharedCell.d.ts +2 -4
  89. package/dist/components/SharedCell.js +4 -8
  90. package/dist/components/SharedCell.js.map +2 -2
  91. package/dist/connect/docx.cjs +14 -14
  92. package/dist/connect/index.cjs +965 -937
  93. package/dist/connect/index.cjs.map +1 -1
  94. package/dist/connect/viewer.cjs +16 -16
  95. package/dist/connection/facts/factPageColumns.js +3 -9
  96. package/dist/connection/facts/factPageColumns.js.map +2 -2
  97. package/dist/connection/files/grid/cells.js +1 -3
  98. package/dist/connection/files/grid/cells.js.map +2 -2
  99. package/dist/connection/files/grid/documentColumns.js +3 -2
  100. package/dist/connection/files/grid/documentColumns.js.map +2 -2
  101. package/dist/connection/sharing/WorkspaceMembersList.d.ts +4 -0
  102. package/dist/connection/sharing/WorkspaceMembersList.js +34 -0
  103. package/dist/connection/sharing/WorkspaceMembersList.js.map +7 -0
  104. package/dist/connection/shell/ConnectedAppShell.js +4 -0
  105. package/dist/connection/shell/ConnectedAppShell.js.map +2 -2
  106. package/dist/connection/viewer/ConnectedDocumentViewer.js +3 -2
  107. package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
  108. package/dist/connection/viewer/ViewerPdfPane.js +20 -2
  109. package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
  110. package/dist/connection/viewer/pdf/PdfPassageHighlights.d.ts +12 -0
  111. package/dist/connection/viewer/pdf/PdfPassageHighlights.js +36 -0
  112. package/dist/connection/viewer/pdf/PdfPassageHighlights.js.map +7 -0
  113. package/dist/connection/viewer/pdf/passageHighlights.d.ts +26 -0
  114. package/dist/connection/viewer/pdf/passageHighlights.js +40 -0
  115. package/dist/connection/viewer/pdf/passageHighlights.js.map +7 -0
  116. package/dist/connection/viewer/pdf/usePdfPassageHighlights.d.ts +9 -0
  117. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +47 -0
  118. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +7 -0
  119. package/dist/connection/workflows/workflowsPageLabels.js +1 -1
  120. package/dist/connection/workflows/workflowsPageLabels.js.map +1 -1
  121. package/dist/dashboards/index.cjs +1 -1
  122. package/dist/embed/index.cjs +26 -26
  123. package/dist/facts/factColumns.js +3 -3
  124. package/dist/facts/factColumns.js.map +1 -1
  125. package/dist/facts/index.cjs +42 -42
  126. package/dist/files/HtmlViewerParts.js +7 -15
  127. package/dist/files/HtmlViewerParts.js.map +2 -2
  128. package/dist/files/index.cjs +223 -223
  129. package/dist/index.cjs +321 -321
  130. package/dist/settings/index.cjs +147 -147
  131. package/dist/shell/index.cjs +35 -35
  132. package/dist/studio/index.cjs +8 -8
  133. package/dist/styles.css +1 -1
  134. package/dist/workflow-canvas/index.cjs +36 -36
  135. package/dist/workflow-canvas/index.cjs.map +1 -1
  136. package/node_modules/@arbidocs/coedit/package.json +1 -1
  137. package/package.json +5 -5
  138. package/dist/ai-OBS67QV4.cjs.map +0 -1
  139. package/dist/chunk-CB3YYZAU.cjs.map +0 -1
  140. package/dist/chunk-NNUK5ZM7.cjs.map +0 -1
  141. package/dist/chunk-PVPRVI54.cjs.map +0 -1
  142. package/dist/chunk-TT4IF52H.cjs.map +0 -1
  143. package/dist/chunk-VLCY46K6.cjs.map +0 -1
  144. package/dist/chunk-XZYIS2JZ.cjs.map +0 -1
  145. package/dist/chunk-ZPPMAL5P.cjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk57NHXEU2_cjs = require('../chunk-57NHXEU2.cjs');
4
+ var chunkMXBXZXXQ_cjs = require('../chunk-MXBXZXXQ.cjs');
5
5
  var chunkTJY7XPDE_cjs = require('../chunk-TJY7XPDE.cjs');
6
6
  var chunkDDWLMYRO_cjs = require('../chunk-DDWLMYRO.cjs');
7
7
  require('../chunk-SNUBQMIS.cjs');
@@ -42,167 +42,167 @@ function toFactRows(records) {
42
42
 
43
43
  Object.defineProperty(exports, "DEFAULT_FACTS_BULK_BAR_LABELS", {
44
44
  enumerable: true,
45
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACTS_BULK_BAR_LABELS; }
45
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACTS_BULK_BAR_LABELS; }
46
46
  });
47
47
  Object.defineProperty(exports, "DEFAULT_FACTS_EMPTY_STATE_LABELS", {
48
48
  enumerable: true,
49
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACTS_EMPTY_STATE_LABELS; }
49
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACTS_EMPTY_STATE_LABELS; }
50
50
  });
51
51
  Object.defineProperty(exports, "DEFAULT_FACTS_FIELDS_BUTTON_LABELS", {
52
52
  enumerable: true,
53
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACTS_FIELDS_BUTTON_LABELS; }
53
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACTS_FIELDS_BUTTON_LABELS; }
54
54
  });
55
55
  Object.defineProperty(exports, "DEFAULT_FACTS_TOOLBAR_LABELS", {
56
56
  enumerable: true,
57
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACTS_TOOLBAR_LABELS; }
57
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACTS_TOOLBAR_LABELS; }
58
58
  });
59
59
  Object.defineProperty(exports, "DEFAULT_FACTS_VIEW_TOGGLE_LABELS", {
60
60
  enumerable: true,
61
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACTS_VIEW_TOGGLE_LABELS; }
61
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACTS_VIEW_TOGGLE_LABELS; }
62
62
  });
63
63
  Object.defineProperty(exports, "DEFAULT_FACT_COLUMN_LABELS", {
64
64
  enumerable: true,
65
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_COLUMN_LABELS; }
65
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_COLUMN_LABELS; }
66
66
  });
67
67
  Object.defineProperty(exports, "DEFAULT_FACT_COLUMN_ORDER", {
68
68
  enumerable: true,
69
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_COLUMN_ORDER; }
69
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_COLUMN_ORDER; }
70
70
  });
71
71
  Object.defineProperty(exports, "DEFAULT_FACT_COMPOSER_LABELS", {
72
72
  enumerable: true,
73
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_COMPOSER_LABELS; }
73
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_COMPOSER_LABELS; }
74
74
  });
75
75
  Object.defineProperty(exports, "DEFAULT_FACT_DATE_INPUT_LABELS", {
76
76
  enumerable: true,
77
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_DATE_INPUT_LABELS; }
77
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_DATE_INPUT_LABELS; }
78
78
  });
79
79
  Object.defineProperty(exports, "DEFAULT_FACT_LABELS_CELL_LABELS", {
80
80
  enumerable: true,
81
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_LABELS_CELL_LABELS; }
81
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_LABELS_CELL_LABELS; }
82
82
  });
83
83
  Object.defineProperty(exports, "DEFAULT_FACT_ROW_ACTIONS_LABELS", {
84
84
  enumerable: true,
85
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_ROW_ACTIONS_LABELS; }
85
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_ROW_ACTIONS_LABELS; }
86
86
  });
87
87
  Object.defineProperty(exports, "DEFAULT_FACT_SEARCH_BAR_LABELS", {
88
88
  enumerable: true,
89
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_SEARCH_BAR_LABELS; }
89
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_SEARCH_BAR_LABELS; }
90
90
  });
91
91
  Object.defineProperty(exports, "DEFAULT_FACT_SEARCH_RESULT_LABELS", {
92
92
  enumerable: true,
93
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_SEARCH_RESULT_LABELS; }
93
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_SEARCH_RESULT_LABELS; }
94
94
  });
95
95
  Object.defineProperty(exports, "DEFAULT_FACT_SOURCES_ROW_LABELS", {
96
96
  enumerable: true,
97
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_SOURCES_ROW_LABELS; }
97
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_SOURCES_ROW_LABELS; }
98
98
  });
99
99
  Object.defineProperty(exports, "DEFAULT_FACT_SOURCE_GROUP_LABELS", {
100
100
  enumerable: true,
101
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_SOURCE_GROUP_LABELS; }
101
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_SOURCE_GROUP_LABELS; }
102
102
  });
103
103
  Object.defineProperty(exports, "DEFAULT_FACT_TIMELINE_LABELS", {
104
104
  enumerable: true,
105
- get: function () { return chunk57NHXEU2_cjs.DEFAULT_FACT_TIMELINE_LABELS; }
105
+ get: function () { return chunkMXBXZXXQ_cjs.DEFAULT_FACT_TIMELINE_LABELS; }
106
106
  });
107
107
  Object.defineProperty(exports, "FactComposer", {
108
108
  enumerable: true,
109
- get: function () { return chunk57NHXEU2_cjs.FactComposer; }
109
+ get: function () { return chunkMXBXZXXQ_cjs.FactComposer; }
110
110
  });
111
111
  Object.defineProperty(exports, "FactDateInput", {
112
112
  enumerable: true,
113
- get: function () { return chunk57NHXEU2_cjs.FactDateInput; }
113
+ get: function () { return chunkMXBXZXXQ_cjs.FactDateInput; }
114
114
  });
115
115
  Object.defineProperty(exports, "FactFieldRow", {
116
116
  enumerable: true,
117
- get: function () { return chunk57NHXEU2_cjs.FactFieldRow; }
117
+ get: function () { return chunkMXBXZXXQ_cjs.FactFieldRow; }
118
118
  });
119
119
  Object.defineProperty(exports, "FactLabelsCell", {
120
120
  enumerable: true,
121
- get: function () { return chunk57NHXEU2_cjs.FactLabelsCell; }
121
+ get: function () { return chunkMXBXZXXQ_cjs.FactLabelsCell; }
122
122
  });
123
123
  Object.defineProperty(exports, "FactRowActions", {
124
124
  enumerable: true,
125
- get: function () { return chunk57NHXEU2_cjs.FactRowActions; }
125
+ get: function () { return chunkMXBXZXXQ_cjs.FactRowActions; }
126
126
  });
127
127
  Object.defineProperty(exports, "FactSearchBar", {
128
128
  enumerable: true,
129
- get: function () { return chunk57NHXEU2_cjs.FactSearchBar; }
129
+ get: function () { return chunkMXBXZXXQ_cjs.FactSearchBar; }
130
130
  });
131
131
  Object.defineProperty(exports, "FactSearchNoMatches", {
132
132
  enumerable: true,
133
- get: function () { return chunk57NHXEU2_cjs.FactSearchNoMatches; }
133
+ get: function () { return chunkMXBXZXXQ_cjs.FactSearchNoMatches; }
134
134
  });
135
135
  Object.defineProperty(exports, "FactSearchPending", {
136
136
  enumerable: true,
137
- get: function () { return chunk57NHXEU2_cjs.FactSearchPending; }
137
+ get: function () { return chunkMXBXZXXQ_cjs.FactSearchPending; }
138
138
  });
139
139
  Object.defineProperty(exports, "FactSearchResult", {
140
140
  enumerable: true,
141
- get: function () { return chunk57NHXEU2_cjs.FactSearchResult; }
141
+ get: function () { return chunkMXBXZXXQ_cjs.FactSearchResult; }
142
142
  });
143
143
  Object.defineProperty(exports, "FactSearchTotals", {
144
144
  enumerable: true,
145
- get: function () { return chunk57NHXEU2_cjs.FactSearchTotals; }
145
+ get: function () { return chunkMXBXZXXQ_cjs.FactSearchTotals; }
146
146
  });
147
147
  Object.defineProperty(exports, "FactSourceGroup", {
148
148
  enumerable: true,
149
- get: function () { return chunk57NHXEU2_cjs.FactSourceGroup; }
149
+ get: function () { return chunkMXBXZXXQ_cjs.FactSourceGroup; }
150
150
  });
151
151
  Object.defineProperty(exports, "FactSourcesRow", {
152
152
  enumerable: true,
153
- get: function () { return chunk57NHXEU2_cjs.FactSourcesRow; }
153
+ get: function () { return chunkMXBXZXXQ_cjs.FactSourcesRow; }
154
154
  });
155
155
  Object.defineProperty(exports, "FactsBulkBar", {
156
156
  enumerable: true,
157
- get: function () { return chunk57NHXEU2_cjs.FactsBulkBar; }
157
+ get: function () { return chunkMXBXZXXQ_cjs.FactsBulkBar; }
158
158
  });
159
159
  Object.defineProperty(exports, "FactsCalendar", {
160
160
  enumerable: true,
161
- get: function () { return chunk57NHXEU2_cjs.FactsCalendar; }
161
+ get: function () { return chunkMXBXZXXQ_cjs.FactsCalendar; }
162
162
  });
163
163
  Object.defineProperty(exports, "FactsEmptyState", {
164
164
  enumerable: true,
165
- get: function () { return chunk57NHXEU2_cjs.FactsEmptyState; }
165
+ get: function () { return chunkMXBXZXXQ_cjs.FactsEmptyState; }
166
166
  });
167
167
  Object.defineProperty(exports, "FactsFieldsButton", {
168
168
  enumerable: true,
169
- get: function () { return chunk57NHXEU2_cjs.FactsFieldsButton; }
169
+ get: function () { return chunkMXBXZXXQ_cjs.FactsFieldsButton; }
170
170
  });
171
171
  Object.defineProperty(exports, "FactsGanttPane", {
172
172
  enumerable: true,
173
- get: function () { return chunk57NHXEU2_cjs.FactsGanttPane; }
173
+ get: function () { return chunkMXBXZXXQ_cjs.FactsGanttPane; }
174
174
  });
175
175
  Object.defineProperty(exports, "FactsLoadError", {
176
176
  enumerable: true,
177
- get: function () { return chunk57NHXEU2_cjs.FactsLoadError; }
177
+ get: function () { return chunkMXBXZXXQ_cjs.FactsLoadError; }
178
178
  });
179
179
  Object.defineProperty(exports, "FactsLoading", {
180
180
  enumerable: true,
181
- get: function () { return chunk57NHXEU2_cjs.FactsLoading; }
181
+ get: function () { return chunkMXBXZXXQ_cjs.FactsLoading; }
182
182
  });
183
183
  Object.defineProperty(exports, "FactsToolbar", {
184
184
  enumerable: true,
185
- get: function () { return chunk57NHXEU2_cjs.FactsToolbar; }
185
+ get: function () { return chunkMXBXZXXQ_cjs.FactsToolbar; }
186
186
  });
187
187
  Object.defineProperty(exports, "FactsViewToggle", {
188
188
  enumerable: true,
189
- get: function () { return chunk57NHXEU2_cjs.FactsViewToggle; }
189
+ get: function () { return chunkMXBXZXXQ_cjs.FactsViewToggle; }
190
190
  });
191
191
  Object.defineProperty(exports, "ISO_DATE_FILTER_PARAMS", {
192
192
  enumerable: true,
193
- get: function () { return chunk57NHXEU2_cjs.ISO_DATE_FILTER_PARAMS; }
193
+ get: function () { return chunkMXBXZXXQ_cjs.ISO_DATE_FILTER_PARAMS; }
194
194
  });
195
195
  Object.defineProperty(exports, "createFactColumns", {
196
196
  enumerable: true,
197
- get: function () { return chunk57NHXEU2_cjs.createFactColumns; }
197
+ get: function () { return chunkMXBXZXXQ_cjs.createFactColumns; }
198
198
  });
199
199
  Object.defineProperty(exports, "enableFactTableColumnResize", {
200
200
  enumerable: true,
201
- get: function () { return chunk57NHXEU2_cjs.enableFactTableColumnResize; }
201
+ get: function () { return chunkMXBXZXXQ_cjs.enableFactTableColumnResize; }
202
202
  });
203
203
  Object.defineProperty(exports, "sourceDocCount", {
204
204
  enumerable: true,
205
- get: function () { return chunk57NHXEU2_cjs.sourceDocCount; }
205
+ get: function () { return chunkMXBXZXXQ_cjs.sourceDocCount; }
206
206
  });
207
207
  Object.defineProperty(exports, "EMPTY_FACT_DATE_FIELDS", {
208
208
  enumerable: true,
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { memo } from "react";
4
- import { Share2, StickyNote, Tags } from "lucide-react";
5
- import { cn } from "@arbidocs/react/ui";
4
+ import { StickyNote, Tags } from "lucide-react";
5
+ import { cn, SharingEntity } from "@arbidocs/react/ui";
6
6
  import { testIdOr } from "../chat/test-id.js";
7
7
  const DEFAULT_HTML_VIEWER_LABELS = {
8
8
  viewerRegion: "Parsed document viewer",
@@ -288,21 +288,13 @@ function DocTagBar({
288
288
  nextLabel: l.nextLabelPassage
289
289
  }
290
290
  ),
291
- visibility && /* @__PURE__ */ jsxs(
292
- "span",
291
+ visibility && /* @__PURE__ */ jsx("span", { className: "ml-auto shrink-0", children: /* @__PURE__ */ jsx(
292
+ SharingEntity,
293
293
  {
294
- title: visibility === "shared" ? l.sharedWithMembers : l.privateToYou,
295
- "data-testid": testIdOr(testIds?.visibility, { testId: "doc-visibility-chip" }),
296
- className: cn(
297
- "ml-auto inline-flex shrink-0 items-center gap-1.5 rounded-full px-2 py-0.5 text-xs",
298
- visibility === "shared" ? "bg-accent text-accent-foreground" : "bg-muted text-muted-foreground"
299
- ),
300
- children: [
301
- /* @__PURE__ */ jsx(Share2, { className: "size-3 shrink-0" }),
302
- visibility === "shared" ? l.shared : l.private
303
- ]
294
+ shared: visibility === "shared",
295
+ "data-testid": testIdOr(testIds?.visibility, { testId: "doc-visibility-chip" })
304
296
  }
305
- )
297
+ ) })
306
298
  ]
307
299
  }
308
300
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/files/HtmlViewerParts.tsx"],
4
- "sourcesContent": ["import { memo } from 'react'\nimport type { ReactNode, Ref } from 'react'\nimport { Share2, StickyNote, Tags } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the parsed viewer parts. Pass a partial `labels` to translate or reword. */\nexport interface HtmlViewerLabels {\n viewerRegion: string\n pageOfTotal: (page: number, total: number) => string\n documentContent: string\n page: (n: number) => string\n noContent: string\n noContentDescription: string\n citedSuffix: string\n previousCited: string\n nextCited: string\n previousLabelPassage: string\n nextLabelPassage: string\n sharedWithMembers: string\n privateToYou: string\n shared: string\n private: string\n}\n\nexport const DEFAULT_HTML_VIEWER_LABELS: HtmlViewerLabels = {\n viewerRegion: 'Parsed document viewer',\n pageOfTotal: (page, total) => `Page ${page} of ${total}`,\n documentContent: 'Document content',\n page: (n) => `Page ${n}`,\n noContent: 'No Content Available',\n noContentDescription: 'This document has not been parsed yet or contains no content',\n citedSuffix: 'cited',\n previousCited: 'Previous cited passage',\n nextCited: 'Next cited passage',\n previousLabelPassage: 'Previous passage with this label',\n nextLabelPassage: 'Next passage with this label',\n sharedWithMembers: 'Shared with workspace members',\n privateToYou: 'Private to you',\n shared: 'Shared',\n private: 'Private',\n}\n\n// \u2500\u2500 Surface + pages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface HtmlViewerRootProps {\n children: ReactNode\n className?: string\n}\n\n/** Positioning context for the parsed viewer: overlays (tag bar, cited stepper) sit on it. */\nexport function HtmlViewerRoot({ children, className }: HtmlViewerRootProps) {\n return (\n <div className={cn('relative h-full w-full', className)} data-slot=\"html-viewer\">\n {children}\n </div>\n )\n}\n\nexport interface HtmlViewerSurfaceProps {\n children: ReactNode\n surfaceRef?: Ref<HTMLDivElement>\n /** Hidden (kept mounted) while the translation comparison table is showing. */\n hidden?: boolean\n onMouseUp?: () => void\n className?: string\n labels?: Partial<HtmlViewerLabels>\n /** Overrides the root test id (default `parsed-viewer`). */\n testId?: string\n}\n\n/** The scrolling canvas the page sheets stack on. */\nexport function HtmlViewerSurface({\n children,\n surfaceRef,\n hidden,\n onMouseUp,\n className,\n labels,\n testId,\n}: HtmlViewerSurfaceProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div\n ref={surfaceRef}\n className={cn(\n 'flex h-full w-full flex-col items-center overflow-y-auto bg-muted p-4 pb-20',\n hidden && 'hidden',\n className\n )}\n role=\"region\"\n aria-label={l.viewerRegion}\n data-slot=\"html-viewer-surface\"\n // Two-finger gestures belong to the host's text zoom, not to the browser's bitmap zoom.\n style={{ touchAction: 'pan-x pan-y' }}\n data-testid={testIdOr(testId, { testId: 'parsed-viewer' })}\n onMouseUp={onMouseUp}\n >\n {children}\n </div>\n )\n}\n\nexport interface HtmlPageProps {\n /** 1-based page number, null for unpaginated content. */\n pageNumber: number | null\n totalPages: number\n /** False renders a sized placeholder (lazy pages). */\n isRendered: boolean\n /** Placeholder height in px when not rendered. */\n placeholderHeight: number\n /** Text size multiplier: the font size changes and the text reflows inside the page width. */\n zoom?: number\n children?: ReactNode\n labels?: Partial<HtmlViewerLabels>\n}\n\n/** One page sheet: numbered header, content, or a lightweight placeholder while off-screen. */\nexport function HtmlPage({\n pageNumber,\n totalPages,\n isRendered,\n placeholderHeight,\n zoom = 1,\n children,\n labels,\n}: HtmlPageProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div\n id={pageNumber ? `page-${pageNumber}` : undefined}\n data-page-number={pageNumber ?? undefined}\n data-slot=\"html-page\"\n className={cn(\n // shrink-0: a page is a flex item of the scrolling surface and must never be squeezed.\n 'mb-6 w-full max-w-4xl shrink-0',\n isRendered && 'rounded-lg border border-border bg-background p-8'\n )}\n role=\"article\"\n aria-label={pageNumber ? l.pageOfTotal(pageNumber, totalPages) : l.documentContent}\n >\n {isRendered ? (\n <>\n {pageNumber ? (\n <div className=\"mb-4 flex items-center justify-center border-b border-border pb-4\">\n <div className=\"text-sm font-medium text-muted-foreground\">{l.page(pageNumber)}</div>\n </div>\n ) : null}\n <div\n className=\"prose prose-sm max-w-none prose-p:my-0 prose-headings:my-0 [&_img]:max-w-full [&_pre]:overflow-x-auto [&_table]:block [&_table]:max-w-full [&_table]:overflow-x-auto\"\n // The page text inherits this size (1rem at 100%), so this one value scales it and reflows.\n style={zoom === 1 ? undefined : { fontSize: `${zoom}rem` }}\n >\n {children}\n </div>\n </>\n ) : (\n <div\n className=\"flex items-center justify-center rounded-md border border-border bg-muted\"\n style={{ height: placeholderHeight }}\n >\n {pageNumber ? (\n <div className=\"text-sm text-muted-foreground\">{l.page(pageNumber)}</div>\n ) : null}\n </div>\n )}\n </div>\n )\n}\n\n/** Shown when a parsed document has no chunks. */\nexport function HtmlViewerEmpty({ labels }: { labels?: Partial<HtmlViewerLabels> }) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n <div className=\"text-center\">\n <p className=\"mb-2 text-base font-medium\">{l.noContent}</p>\n <p className=\"text-sm\">{l.noContentDescription}</p>\n </div>\n </div>\n )\n}\n\n// \u2500\u2500 Passage \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type PassageHighlight = 'light' | 'strong'\n\nexport interface HtmlPassageProps {\n /** Passage (chunk) id: the element id, deep-link and scroll target. */\n chunkId?: string\n /** Yellow wash: `strong` = selected/being read, `light` = listed or search hit. */\n highlight?: PassageHighlight\n /** Marks a search hit for e2e (`highlighted-chunk`). */\n isHit?: boolean\n /** Overrides the hit test id (default `highlighted-chunk`). */\n hitTestId?: string\n /** Part of a contiguous selected run; the run is drawn as one block. */\n isSelected?: boolean\n runIsStart?: boolean\n runIsEnd?: boolean\n /** Citation mode: the passage toggles on click. */\n isClickable?: boolean\n /** Click on the passage; `extend` is true when shift was held (range select). */\n onSelect?: (extend: boolean) => void\n /** The passage carries labels; `tagMark` draws them. */\n isTagged?: boolean\n /** Colour of the label currently being walked, when it marks this passage. */\n activeTagColor?: string\n /** Citation run marker, shown once at the first member of a run. */\n runMarker?: ReactNode\n /** Label stripes in the margin (a `LabelMark`): always visible, one menu. */\n tagMark?: ReactNode\n /**\n * The passage's reference mark (a `PassageMark`): quiet text in the margin whose menu carries\n * every passage action. Faint on hover/focus, always faintly visible on touch.\n */\n mark?: ReactNode\n /** The passage text. */\n children: ReactNode\n}\n\n/** One parsed passage: highlight states, label stripes, run marker, reference label, actions. */\nexport const HtmlPassage = memo(function HtmlPassage({\n chunkId,\n highlight,\n isHit,\n hitTestId,\n isSelected,\n runIsStart,\n runIsEnd,\n isClickable,\n onSelect,\n isTagged,\n activeTagColor,\n runMarker,\n tagMark,\n mark,\n children,\n}: HtmlPassageProps) {\n const hasId = !!chunkId\n // A selected run is one block: round only its first top and last bottom.\n const rounding = !isSelected\n ? 'rounded'\n : [runIsStart ? 'rounded-t' : 'rounded-t-none', runIsEnd ? 'rounded-b' : 'rounded-b-none'].join(\n ' '\n )\n return (\n <div\n id={chunkId}\n data-slot=\"html-passage\"\n data-chunk-id={chunkId}\n data-run-start={(isSelected && runIsStart) || undefined}\n data-tagged={isTagged || undefined}\n data-tag-active={activeTagColor ? true : undefined}\n data-testid={isHit ? testIdOr(hitTestId, { testId: 'highlighted-chunk' }) : null}\n onClick={\n hasId && onSelect\n ? (e) => {\n // A mark or its menu is its own target; it must not also select the passage.\n if ((e.target as HTMLElement).closest('[data-slot=\"mark\"], [data-slot=\"mark-menu\"]'))\n return\n onSelect(e.shiftKey)\n }\n : undefined\n }\n className={cn(\n 'group relative block px-1 py-0.5',\n rounding,\n highlight === 'strong'\n ? 'bg-ai-soft text-foreground ring-1 ring-ai-accent/40'\n : highlight === 'light'\n ? 'bg-ai-soft/60 text-foreground hover:bg-ai-soft'\n : hasId && 'hover:bg-muted/50',\n hasId && isClickable && 'cursor-pointer select-none',\n // On touch every passage with an id is at least 44px tall, so the marks of consecutive\n // one-line passages keep their 44px tap areas apart. Tied to the id, which never changes,\n // not to the mark, which comes and goes while a citation run is selected: the document\n // must not jump under the finger.\n hasId && 'pointer-coarse:min-h-11'\n )}\n // The active label washes its passages in its own (dynamic) colour, kept faint.\n style={\n activeTagColor && !highlight\n ? {\n backgroundColor: `${activeTagColor}22`,\n boxShadow: `inset 3px 0 0 0 ${activeTagColor}`,\n }\n : undefined\n }\n >\n {children}\n\n {tagMark && <span className=\"absolute -left-3 top-1.5 z-10\">{tagMark}</span>}\n\n {runMarker ? (\n <span className=\"absolute -top-2.5 left-1 z-10\" data-run-marker>\n {runMarker}\n </span>\n ) : null}\n\n {mark && (\n <span className=\"absolute -top-2.5 right-0 z-10 opacity-0 transition-opacity duration-200 group-hover:opacity-100 group-focus-within:opacity-100 pointer-coarse:opacity-70 [&:has([aria-expanded=true])]:opacity-100\">\n {mark}\n </span>\n )}\n </div>\n )\n})\n\n// \u2500\u2500 Steppers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface PassageStepperProps {\n /** 1-based position. */\n position: number\n total: number\n onStep: (delta: number) => void\n /** Test id of the stepper (none by default). */\n testId?: string\n className?: string\n prevLabel: string\n nextLabel: string\n /** Text after the count, e.g. \"cited\". */\n suffix?: string\n}\n\nconst stepButton =\n 'px-1 text-muted-foreground hover:text-foreground pointer-coarse:min-h-11 pointer-coarse:min-w-11'\n\n/** Compact \"3/9 cited\" prev/next stepper overlaid on the document. */\nfunction PassageStepper({\n position,\n total,\n onStep,\n testId,\n className,\n prevLabel,\n nextLabel,\n suffix,\n}: PassageStepperProps) {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background/95 px-1.5 py-0.5',\n className\n )}\n data-slot=\"passage-stepper\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n onClick={() => onStep(-1)}\n aria-label={prevLabel}\n className={stepButton}\n >\n \u2039\n </button>\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {Math.min(position, total)}/{total}\n {suffix ? ` ${suffix}` : ''}\n </span>\n <button type=\"button\" onClick={() => onStep(1)} aria-label={nextLabel} className={stepButton}>\n \u203A\n </button>\n </span>\n )\n}\n\n/** Overlay placement for the cited-passages stepper (top centre of the viewer). */\nexport function CitedRunNav({\n labels,\n testId,\n ...props\n}: Omit<PassageStepperProps, 'prevLabel' | 'nextLabel' | 'testId' | 'suffix'> & {\n labels?: Partial<HtmlViewerLabels>\n /** Overrides the stepper test id (default `note-run-nav`). */\n testId?: string\n}) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div className=\"absolute left-1/2 top-2 z-20 -translate-x-1/2\" data-slot=\"cited-run-nav\">\n <PassageStepper\n {...props}\n suffix={l.citedSuffix}\n prevLabel={l.previousCited}\n nextLabel={l.nextCited}\n testId={testIdOr(testId, { testId: 'note-run-nav' })}\n />\n </div>\n )\n}\n\n// \u2500\u2500 Label bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface DocTagChipView {\n id: string\n name: string\n /** Fill colour (dynamic, per label). */\n color: string\n /** Passages the label marks; 0 = applies to the whole document. */\n passageCount: number\n hasNote: boolean\n title: string\n}\n\nexport interface DocTagBarProps {\n chips: DocTagChipView[]\n /** Document visibility mark on the far right; null/undefined omits it. */\n visibility?: 'shared' | 'private' | null\n /** Passage stepping over the active label's passages (parsed view only). */\n step?: { position: number; total: number; onStep: (delta: number) => void }\n /** The label currently washing its passages (parsed view only). */\n activeId?: string | null\n /** When given, chips are toggles: pick a label to mark its passages, pick it again to clear. */\n onSelect?: (id: string | null) => void\n labels?: Partial<HtmlViewerLabels>\n testIds?: Partial<DocTagBarTestIds>\n}\n\nexport interface DocTagBarTestIds {\n root: string\n nav: string\n visibility: string\n /** Replaces the whole `doc-tag-chip-<id>` id. */\n chip: (id: string) => string\n}\n\n/**\n * The document's labels along the top of a viewer: chips (toggles when `onSelect` is given, else\n * read-only marks), optional passage stepper for the active label, and the shared/private mark.\n * Draws nothing when it has nothing to say.\n */\nexport function DocTagBar({\n chips,\n visibility,\n step,\n activeId = null,\n onSelect,\n labels,\n testIds,\n}: DocTagBarProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n if (chips.length === 0 && !visibility) return null\n return (\n <div\n className=\"absolute left-2 right-2 top-2 z-20 flex flex-wrap items-center gap-1\"\n data-slot=\"doc-tag-bar\"\n data-testid={testIdOr(testIds?.root, { testId: 'doc-tag-bar' })}\n >\n {chips.map((c) => {\n const isActive = c.id === activeId\n const content = (\n <>\n <Tags className=\"size-3 shrink-0\" />\n {c.name}\n {c.passageCount > 0 && (\n <span className=\"tabular-nums opacity-90\">{c.passageCount}</span>\n )}\n {c.hasNote && <StickyNote className=\"size-3 opacity-90\" />}\n </>\n )\n const chipClass =\n 'inline-flex items-center gap-1.5 rounded-full border border-transparent px-2 py-0.5 text-xs text-white'\n return onSelect ? (\n <button\n key={c.id}\n type=\"button\"\n // Picking the active chip again clears it: the way back to the plain document.\n onClick={() => onSelect(isActive ? null : c.id)}\n aria-pressed={isActive}\n title={c.title}\n data-testid={testIdOr(testIds?.chip?.(c.id), { testId: `doc-tag-chip-${c.id}` })}\n data-active={isActive || undefined}\n className={cn(chipClass, 'cursor-pointer', !isActive && 'opacity-70 hover:opacity-100')}\n style={{ backgroundColor: c.color }}\n >\n {content}\n </button>\n ) : (\n <span\n key={c.id}\n title={c.title}\n data-testid={testIdOr(testIds?.chip?.(c.id), { testId: `doc-tag-chip-${c.id}` })}\n className={chipClass}\n style={{ backgroundColor: c.color }}\n >\n {content}\n </span>\n )\n })}\n\n {step && step.total > 0 && (\n <PassageStepper\n className=\"ml-1\"\n position={step.position}\n total={step.total}\n onStep={step.onStep}\n testId={testIdOr(testIds?.nav, { testId: 'doc-tag-nav' })}\n prevLabel={l.previousLabelPassage}\n nextLabel={l.nextLabelPassage}\n />\n )}\n\n {visibility && (\n <span\n title={visibility === 'shared' ? l.sharedWithMembers : l.privateToYou}\n data-testid={testIdOr(testIds?.visibility, { testId: 'doc-visibility-chip' })}\n className={cn(\n 'ml-auto inline-flex shrink-0 items-center gap-1.5 rounded-full px-2 py-0.5 text-xs',\n visibility === 'shared'\n ? 'bg-accent text-accent-foreground'\n : 'bg-muted text-muted-foreground'\n )}\n >\n <Share2 className=\"size-3 shrink-0\" />\n {visibility === 'shared' ? l.shared : l.private}\n </span>\n )}\n </div>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { memo } from 'react'\nimport type { ReactNode, Ref } from 'react'\nimport { Share2, StickyNote, Tags } from 'lucide-react'\nimport { cn, SharingEntity } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the parsed viewer parts. Pass a partial `labels` to translate or reword. */\nexport interface HtmlViewerLabels {\n viewerRegion: string\n pageOfTotal: (page: number, total: number) => string\n documentContent: string\n page: (n: number) => string\n noContent: string\n noContentDescription: string\n citedSuffix: string\n previousCited: string\n nextCited: string\n previousLabelPassage: string\n nextLabelPassage: string\n sharedWithMembers: string\n privateToYou: string\n shared: string\n private: string\n}\n\nexport const DEFAULT_HTML_VIEWER_LABELS: HtmlViewerLabels = {\n viewerRegion: 'Parsed document viewer',\n pageOfTotal: (page, total) => `Page ${page} of ${total}`,\n documentContent: 'Document content',\n page: (n) => `Page ${n}`,\n noContent: 'No Content Available',\n noContentDescription: 'This document has not been parsed yet or contains no content',\n citedSuffix: 'cited',\n previousCited: 'Previous cited passage',\n nextCited: 'Next cited passage',\n previousLabelPassage: 'Previous passage with this label',\n nextLabelPassage: 'Next passage with this label',\n sharedWithMembers: 'Shared with workspace members',\n privateToYou: 'Private to you',\n shared: 'Shared',\n private: 'Private',\n}\n\n// \u2500\u2500 Surface + pages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface HtmlViewerRootProps {\n children: ReactNode\n className?: string\n}\n\n/** Positioning context for the parsed viewer: overlays (tag bar, cited stepper) sit on it. */\nexport function HtmlViewerRoot({ children, className }: HtmlViewerRootProps) {\n return (\n <div className={cn('relative h-full w-full', className)} data-slot=\"html-viewer\">\n {children}\n </div>\n )\n}\n\nexport interface HtmlViewerSurfaceProps {\n children: ReactNode\n surfaceRef?: Ref<HTMLDivElement>\n /** Hidden (kept mounted) while the translation comparison table is showing. */\n hidden?: boolean\n onMouseUp?: () => void\n className?: string\n labels?: Partial<HtmlViewerLabels>\n /** Overrides the root test id (default `parsed-viewer`). */\n testId?: string\n}\n\n/** The scrolling canvas the page sheets stack on. */\nexport function HtmlViewerSurface({\n children,\n surfaceRef,\n hidden,\n onMouseUp,\n className,\n labels,\n testId,\n}: HtmlViewerSurfaceProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div\n ref={surfaceRef}\n className={cn(\n 'flex h-full w-full flex-col items-center overflow-y-auto bg-muted p-4 pb-20',\n hidden && 'hidden',\n className\n )}\n role=\"region\"\n aria-label={l.viewerRegion}\n data-slot=\"html-viewer-surface\"\n // Two-finger gestures belong to the host's text zoom, not to the browser's bitmap zoom.\n style={{ touchAction: 'pan-x pan-y' }}\n data-testid={testIdOr(testId, { testId: 'parsed-viewer' })}\n onMouseUp={onMouseUp}\n >\n {children}\n </div>\n )\n}\n\nexport interface HtmlPageProps {\n /** 1-based page number, null for unpaginated content. */\n pageNumber: number | null\n totalPages: number\n /** False renders a sized placeholder (lazy pages). */\n isRendered: boolean\n /** Placeholder height in px when not rendered. */\n placeholderHeight: number\n /** Text size multiplier: the font size changes and the text reflows inside the page width. */\n zoom?: number\n children?: ReactNode\n labels?: Partial<HtmlViewerLabels>\n}\n\n/** One page sheet: numbered header, content, or a lightweight placeholder while off-screen. */\nexport function HtmlPage({\n pageNumber,\n totalPages,\n isRendered,\n placeholderHeight,\n zoom = 1,\n children,\n labels,\n}: HtmlPageProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div\n id={pageNumber ? `page-${pageNumber}` : undefined}\n data-page-number={pageNumber ?? undefined}\n data-slot=\"html-page\"\n className={cn(\n // shrink-0: a page is a flex item of the scrolling surface and must never be squeezed.\n 'mb-6 w-full max-w-4xl shrink-0',\n isRendered && 'rounded-lg border border-border bg-background p-8'\n )}\n role=\"article\"\n aria-label={pageNumber ? l.pageOfTotal(pageNumber, totalPages) : l.documentContent}\n >\n {isRendered ? (\n <>\n {pageNumber ? (\n <div className=\"mb-4 flex items-center justify-center border-b border-border pb-4\">\n <div className=\"text-sm font-medium text-muted-foreground\">{l.page(pageNumber)}</div>\n </div>\n ) : null}\n <div\n className=\"prose prose-sm max-w-none prose-p:my-0 prose-headings:my-0 [&_img]:max-w-full [&_pre]:overflow-x-auto [&_table]:block [&_table]:max-w-full [&_table]:overflow-x-auto\"\n // The page text inherits this size (1rem at 100%), so this one value scales it and reflows.\n style={zoom === 1 ? undefined : { fontSize: `${zoom}rem` }}\n >\n {children}\n </div>\n </>\n ) : (\n <div\n className=\"flex items-center justify-center rounded-md border border-border bg-muted\"\n style={{ height: placeholderHeight }}\n >\n {pageNumber ? (\n <div className=\"text-sm text-muted-foreground\">{l.page(pageNumber)}</div>\n ) : null}\n </div>\n )}\n </div>\n )\n}\n\n/** Shown when a parsed document has no chunks. */\nexport function HtmlViewerEmpty({ labels }: { labels?: Partial<HtmlViewerLabels> }) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n <div className=\"text-center\">\n <p className=\"mb-2 text-base font-medium\">{l.noContent}</p>\n <p className=\"text-sm\">{l.noContentDescription}</p>\n </div>\n </div>\n )\n}\n\n// \u2500\u2500 Passage \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type PassageHighlight = 'light' | 'strong'\n\nexport interface HtmlPassageProps {\n /** Passage (chunk) id: the element id, deep-link and scroll target. */\n chunkId?: string\n /** Yellow wash: `strong` = selected/being read, `light` = listed or search hit. */\n highlight?: PassageHighlight\n /** Marks a search hit for e2e (`highlighted-chunk`). */\n isHit?: boolean\n /** Overrides the hit test id (default `highlighted-chunk`). */\n hitTestId?: string\n /** Part of a contiguous selected run; the run is drawn as one block. */\n isSelected?: boolean\n runIsStart?: boolean\n runIsEnd?: boolean\n /** Citation mode: the passage toggles on click. */\n isClickable?: boolean\n /** Click on the passage; `extend` is true when shift was held (range select). */\n onSelect?: (extend: boolean) => void\n /** The passage carries labels; `tagMark` draws them. */\n isTagged?: boolean\n /** Colour of the label currently being walked, when it marks this passage. */\n activeTagColor?: string\n /** Citation run marker, shown once at the first member of a run. */\n runMarker?: ReactNode\n /** Label stripes in the margin (a `LabelMark`): always visible, one menu. */\n tagMark?: ReactNode\n /**\n * The passage's reference mark (a `PassageMark`): quiet text in the margin whose menu carries\n * every passage action. Faint on hover/focus, always faintly visible on touch.\n */\n mark?: ReactNode\n /** The passage text. */\n children: ReactNode\n}\n\n/** One parsed passage: highlight states, label stripes, run marker, reference label, actions. */\nexport const HtmlPassage = memo(function HtmlPassage({\n chunkId,\n highlight,\n isHit,\n hitTestId,\n isSelected,\n runIsStart,\n runIsEnd,\n isClickable,\n onSelect,\n isTagged,\n activeTagColor,\n runMarker,\n tagMark,\n mark,\n children,\n}: HtmlPassageProps) {\n const hasId = !!chunkId\n // A selected run is one block: round only its first top and last bottom.\n const rounding = !isSelected\n ? 'rounded'\n : [runIsStart ? 'rounded-t' : 'rounded-t-none', runIsEnd ? 'rounded-b' : 'rounded-b-none'].join(\n ' '\n )\n return (\n <div\n id={chunkId}\n data-slot=\"html-passage\"\n data-chunk-id={chunkId}\n data-run-start={(isSelected && runIsStart) || undefined}\n data-tagged={isTagged || undefined}\n data-tag-active={activeTagColor ? true : undefined}\n data-testid={isHit ? testIdOr(hitTestId, { testId: 'highlighted-chunk' }) : null}\n onClick={\n hasId && onSelect\n ? (e) => {\n // A mark or its menu is its own target; it must not also select the passage.\n if ((e.target as HTMLElement).closest('[data-slot=\"mark\"], [data-slot=\"mark-menu\"]'))\n return\n onSelect(e.shiftKey)\n }\n : undefined\n }\n className={cn(\n 'group relative block px-1 py-0.5',\n rounding,\n highlight === 'strong'\n ? 'bg-ai-soft text-foreground ring-1 ring-ai-accent/40'\n : highlight === 'light'\n ? 'bg-ai-soft/60 text-foreground hover:bg-ai-soft'\n : hasId && 'hover:bg-muted/50',\n hasId && isClickable && 'cursor-pointer select-none',\n // On touch every passage with an id is at least 44px tall, so the marks of consecutive\n // one-line passages keep their 44px tap areas apart. Tied to the id, which never changes,\n // not to the mark, which comes and goes while a citation run is selected: the document\n // must not jump under the finger.\n hasId && 'pointer-coarse:min-h-11'\n )}\n // The active label washes its passages in its own (dynamic) colour, kept faint.\n style={\n activeTagColor && !highlight\n ? {\n backgroundColor: `${activeTagColor}22`,\n boxShadow: `inset 3px 0 0 0 ${activeTagColor}`,\n }\n : undefined\n }\n >\n {children}\n\n {tagMark && <span className=\"absolute -left-3 top-1.5 z-10\">{tagMark}</span>}\n\n {runMarker ? (\n <span className=\"absolute -top-2.5 left-1 z-10\" data-run-marker>\n {runMarker}\n </span>\n ) : null}\n\n {mark && (\n <span className=\"absolute -top-2.5 right-0 z-10 opacity-0 transition-opacity duration-200 group-hover:opacity-100 group-focus-within:opacity-100 pointer-coarse:opacity-70 [&:has([aria-expanded=true])]:opacity-100\">\n {mark}\n </span>\n )}\n </div>\n )\n})\n\n// \u2500\u2500 Steppers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface PassageStepperProps {\n /** 1-based position. */\n position: number\n total: number\n onStep: (delta: number) => void\n /** Test id of the stepper (none by default). */\n testId?: string\n className?: string\n prevLabel: string\n nextLabel: string\n /** Text after the count, e.g. \"cited\". */\n suffix?: string\n}\n\nconst stepButton =\n 'px-1 text-muted-foreground hover:text-foreground pointer-coarse:min-h-11 pointer-coarse:min-w-11'\n\n/** Compact \"3/9 cited\" prev/next stepper overlaid on the document. */\nfunction PassageStepper({\n position,\n total,\n onStep,\n testId,\n className,\n prevLabel,\n nextLabel,\n suffix,\n}: PassageStepperProps) {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background/95 px-1.5 py-0.5',\n className\n )}\n data-slot=\"passage-stepper\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n onClick={() => onStep(-1)}\n aria-label={prevLabel}\n className={stepButton}\n >\n \u2039\n </button>\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {Math.min(position, total)}/{total}\n {suffix ? ` ${suffix}` : ''}\n </span>\n <button type=\"button\" onClick={() => onStep(1)} aria-label={nextLabel} className={stepButton}>\n \u203A\n </button>\n </span>\n )\n}\n\n/** Overlay placement for the cited-passages stepper (top centre of the viewer). */\nexport function CitedRunNav({\n labels,\n testId,\n ...props\n}: Omit<PassageStepperProps, 'prevLabel' | 'nextLabel' | 'testId' | 'suffix'> & {\n labels?: Partial<HtmlViewerLabels>\n /** Overrides the stepper test id (default `note-run-nav`). */\n testId?: string\n}) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div className=\"absolute left-1/2 top-2 z-20 -translate-x-1/2\" data-slot=\"cited-run-nav\">\n <PassageStepper\n {...props}\n suffix={l.citedSuffix}\n prevLabel={l.previousCited}\n nextLabel={l.nextCited}\n testId={testIdOr(testId, { testId: 'note-run-nav' })}\n />\n </div>\n )\n}\n\n// \u2500\u2500 Label bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface DocTagChipView {\n id: string\n name: string\n /** Fill colour (dynamic, per label). */\n color: string\n /** Passages the label marks; 0 = applies to the whole document. */\n passageCount: number\n hasNote: boolean\n title: string\n}\n\nexport interface DocTagBarProps {\n chips: DocTagChipView[]\n /** Document visibility mark on the far right; null/undefined omits it. */\n visibility?: 'shared' | 'private' | null\n /** Passage stepping over the active label's passages (parsed view only). */\n step?: { position: number; total: number; onStep: (delta: number) => void }\n /** The label currently washing its passages (parsed view only). */\n activeId?: string | null\n /** When given, chips are toggles: pick a label to mark its passages, pick it again to clear. */\n onSelect?: (id: string | null) => void\n labels?: Partial<HtmlViewerLabels>\n testIds?: Partial<DocTagBarTestIds>\n}\n\nexport interface DocTagBarTestIds {\n root: string\n nav: string\n visibility: string\n /** Replaces the whole `doc-tag-chip-<id>` id. */\n chip: (id: string) => string\n}\n\n/**\n * The document's labels along the top of a viewer: chips (toggles when `onSelect` is given, else\n * read-only marks), optional passage stepper for the active label, and the shared/private mark.\n * Draws nothing when it has nothing to say.\n */\nexport function DocTagBar({\n chips,\n visibility,\n step,\n activeId = null,\n onSelect,\n labels,\n testIds,\n}: DocTagBarProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n if (chips.length === 0 && !visibility) return null\n return (\n <div\n className=\"absolute left-2 right-2 top-2 z-20 flex flex-wrap items-center gap-1\"\n data-slot=\"doc-tag-bar\"\n data-testid={testIdOr(testIds?.root, { testId: 'doc-tag-bar' })}\n >\n {chips.map((c) => {\n const isActive = c.id === activeId\n const content = (\n <>\n <Tags className=\"size-3 shrink-0\" />\n {c.name}\n {c.passageCount > 0 && (\n <span className=\"tabular-nums opacity-90\">{c.passageCount}</span>\n )}\n {c.hasNote && <StickyNote className=\"size-3 opacity-90\" />}\n </>\n )\n const chipClass =\n 'inline-flex items-center gap-1.5 rounded-full border border-transparent px-2 py-0.5 text-xs text-white'\n return onSelect ? (\n <button\n key={c.id}\n type=\"button\"\n // Picking the active chip again clears it: the way back to the plain document.\n onClick={() => onSelect(isActive ? null : c.id)}\n aria-pressed={isActive}\n title={c.title}\n data-testid={testIdOr(testIds?.chip?.(c.id), { testId: `doc-tag-chip-${c.id}` })}\n data-active={isActive || undefined}\n className={cn(chipClass, 'cursor-pointer', !isActive && 'opacity-70 hover:opacity-100')}\n style={{ backgroundColor: c.color }}\n >\n {content}\n </button>\n ) : (\n <span\n key={c.id}\n title={c.title}\n data-testid={testIdOr(testIds?.chip?.(c.id), { testId: `doc-tag-chip-${c.id}` })}\n className={chipClass}\n style={{ backgroundColor: c.color }}\n >\n {content}\n </span>\n )\n })}\n\n {step && step.total > 0 && (\n <PassageStepper\n className=\"ml-1\"\n position={step.position}\n total={step.total}\n onStep={step.onStep}\n testId={testIdOr(testIds?.nav, { testId: 'doc-tag-nav' })}\n prevLabel={l.previousLabelPassage}\n nextLabel={l.nextLabelPassage}\n />\n )}\n\n {visibility && (\n <span className=\"ml-auto shrink-0\">\n <SharingEntity\n shared={visibility === 'shared'}\n data-testid={testIdOr(testIds?.visibility, { testId: 'doc-visibility-chip' })}\n />\n </span>\n )}\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["HtmlPassage"]
7
7
  }