@open-mercato/documents 0.6.8-develop.7016.1.4ed7b1e49d

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 (602) hide show
  1. package/README.md +88 -0
  2. package/build.mjs +23 -0
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +7 -0
  5. package/dist/modules/documents/acl.js +15 -0
  6. package/dist/modules/documents/acl.js.map +7 -0
  7. package/dist/modules/documents/api/[id]/archive/route.js +116 -0
  8. package/dist/modules/documents/api/[id]/archive/route.js.map +7 -0
  9. package/dist/modules/documents/api/[id]/attachments/[attachmentId]/route.js +155 -0
  10. package/dist/modules/documents/api/[id]/attachments/[attachmentId]/route.js.map +7 -0
  11. package/dist/modules/documents/api/[id]/attachments/route.js +153 -0
  12. package/dist/modules/documents/api/[id]/attachments/route.js.map +7 -0
  13. package/dist/modules/documents/api/[id]/collab-token/route.js +180 -0
  14. package/dist/modules/documents/api/[id]/collab-token/route.js.map +7 -0
  15. package/dist/modules/documents/api/[id]/comments/access-check/route.js +86 -0
  16. package/dist/modules/documents/api/[id]/comments/access-check/route.js.map +7 -0
  17. package/dist/modules/documents/api/[id]/comments/route.js +387 -0
  18. package/dist/modules/documents/api/[id]/comments/route.js.map +7 -0
  19. package/dist/modules/documents/api/[id]/content/route.js +143 -0
  20. package/dist/modules/documents/api/[id]/content/route.js.map +7 -0
  21. package/dist/modules/documents/api/[id]/duplicate/route.js +200 -0
  22. package/dist/modules/documents/api/[id]/duplicate/route.js.map +7 -0
  23. package/dist/modules/documents/api/[id]/export/route.js +421 -0
  24. package/dist/modules/documents/api/[id]/export/route.js.map +7 -0
  25. package/dist/modules/documents/api/[id]/favorite/route.js +96 -0
  26. package/dist/modules/documents/api/[id]/favorite/route.js.map +7 -0
  27. package/dist/modules/documents/api/[id]/links/[linkId]/route.js +85 -0
  28. package/dist/modules/documents/api/[id]/links/[linkId]/route.js.map +7 -0
  29. package/dist/modules/documents/api/[id]/links/route.js +257 -0
  30. package/dist/modules/documents/api/[id]/links/route.js.map +7 -0
  31. package/dist/modules/documents/api/[id]/principals/route.js +299 -0
  32. package/dist/modules/documents/api/[id]/principals/route.js.map +7 -0
  33. package/dist/modules/documents/api/[id]/route.js +246 -0
  34. package/dist/modules/documents/api/[id]/route.js.map +7 -0
  35. package/dist/modules/documents/api/[id]/shares/route.js +335 -0
  36. package/dist/modules/documents/api/[id]/shares/route.js.map +7 -0
  37. package/dist/modules/documents/api/[id]/unarchive/route.js +39 -0
  38. package/dist/modules/documents/api/[id]/unarchive/route.js.map +7 -0
  39. package/dist/modules/documents/api/[id]/versions/[versionId]/restore/route.js +133 -0
  40. package/dist/modules/documents/api/[id]/versions/[versionId]/restore/route.js.map +7 -0
  41. package/dist/modules/documents/api/[id]/versions/[versionId]/route.js +93 -0
  42. package/dist/modules/documents/api/[id]/versions/[versionId]/route.js.map +7 -0
  43. package/dist/modules/documents/api/[id]/versions/route.js +193 -0
  44. package/dist/modules/documents/api/[id]/versions/route.js.map +7 -0
  45. package/dist/modules/documents/api/[id]/watch/route.js +97 -0
  46. package/dist/modules/documents/api/[id]/watch/route.js.map +7 -0
  47. package/dist/modules/documents/api/_commands.js +34 -0
  48. package/dist/modules/documents/api/_commands.js.map +7 -0
  49. package/dist/modules/documents/api/_shared.js +490 -0
  50. package/dist/modules/documents/api/_shared.js.map +7 -0
  51. package/dist/modules/documents/api/folders/route.js +256 -0
  52. package/dist/modules/documents/api/folders/route.js.map +7 -0
  53. package/dist/modules/documents/api/instantiate/route.js +108 -0
  54. package/dist/modules/documents/api/instantiate/route.js.map +7 -0
  55. package/dist/modules/documents/api/route.js +322 -0
  56. package/dist/modules/documents/api/route.js.map +7 -0
  57. package/dist/modules/documents/api/templates/[templateId]/preview/route.js +94 -0
  58. package/dist/modules/documents/api/templates/[templateId]/preview/route.js.map +7 -0
  59. package/dist/modules/documents/api/templates/[templateId]/route.js +82 -0
  60. package/dist/modules/documents/api/templates/[templateId]/route.js.map +7 -0
  61. package/dist/modules/documents/api/templates/route.js +344 -0
  62. package/dist/modules/documents/api/templates/route.js.map +7 -0
  63. package/dist/modules/documents/backend/documents/DocumentsPageClient.js +160 -0
  64. package/dist/modules/documents/backend/documents/DocumentsPageClient.js.map +7 -0
  65. package/dist/modules/documents/backend/documents/DocumentsTable.js +143 -0
  66. package/dist/modules/documents/backend/documents/DocumentsTable.js.map +7 -0
  67. package/dist/modules/documents/backend/documents/FolderDialog.js +55 -0
  68. package/dist/modules/documents/backend/documents/FolderDialog.js.map +7 -0
  69. package/dist/modules/documents/backend/documents/FolderTree.js +40 -0
  70. package/dist/modules/documents/backend/documents/FolderTree.js.map +7 -0
  71. package/dist/modules/documents/backend/documents/MoveDocumentDialog.js +64 -0
  72. package/dist/modules/documents/backend/documents/MoveDocumentDialog.js.map +7 -0
  73. package/dist/modules/documents/backend/documents/[id]/CommentAnchorNavigation.js +77 -0
  74. package/dist/modules/documents/backend/documents/[id]/CommentAnchorNavigation.js.map +7 -0
  75. package/dist/modules/documents/backend/documents/[id]/CommentComposer.js +126 -0
  76. package/dist/modules/documents/backend/documents/[id]/CommentComposer.js.map +7 -0
  77. package/dist/modules/documents/backend/documents/[id]/CommentThreadList.js +88 -0
  78. package/dist/modules/documents/backend/documents/[id]/CommentThreadList.js.map +7 -0
  79. package/dist/modules/documents/backend/documents/[id]/CommentsRail.js +123 -0
  80. package/dist/modules/documents/backend/documents/[id]/CommentsRail.js.map +7 -0
  81. package/dist/modules/documents/backend/documents/[id]/DocumentCanvas.js +91 -0
  82. package/dist/modules/documents/backend/documents/[id]/DocumentCanvas.js.map +7 -0
  83. package/dist/modules/documents/backend/documents/[id]/DocumentEditorErrorBoundary.js +27 -0
  84. package/dist/modules/documents/backend/documents/[id]/DocumentEditorErrorBoundary.js.map +7 -0
  85. package/dist/modules/documents/backend/documents/[id]/DocumentEditorIsland.js +50 -0
  86. package/dist/modules/documents/backend/documents/[id]/DocumentEditorIsland.js.map +7 -0
  87. package/dist/modules/documents/backend/documents/[id]/DocumentEditorSurface.js +168 -0
  88. package/dist/modules/documents/backend/documents/[id]/DocumentEditorSurface.js.map +7 -0
  89. package/dist/modules/documents/backend/documents/[id]/DocumentNavigator.js +129 -0
  90. package/dist/modules/documents/backend/documents/[id]/DocumentNavigator.js.map +7 -0
  91. package/dist/modules/documents/backend/documents/[id]/DocumentPageClient.js +429 -0
  92. package/dist/modules/documents/backend/documents/[id]/DocumentPageClient.js.map +7 -0
  93. package/dist/modules/documents/backend/documents/[id]/EditorColorTools.js +68 -0
  94. package/dist/modules/documents/backend/documents/[id]/EditorColorTools.js.map +7 -0
  95. package/dist/modules/documents/backend/documents/[id]/EditorStatusPresence.js +69 -0
  96. package/dist/modules/documents/backend/documents/[id]/EditorStatusPresence.js.map +7 -0
  97. package/dist/modules/documents/backend/documents/[id]/EditorToolbar.js +151 -0
  98. package/dist/modules/documents/backend/documents/[id]/EditorToolbar.js.map +7 -0
  99. package/dist/modules/documents/backend/documents/[id]/ExportMenu.js +121 -0
  100. package/dist/modules/documents/backend/documents/[id]/ExportMenu.js.map +7 -0
  101. package/dist/modules/documents/backend/documents/[id]/MentionPicker.js +114 -0
  102. package/dist/modules/documents/backend/documents/[id]/MentionPicker.js.map +7 -0
  103. package/dist/modules/documents/backend/documents/[id]/OutlinePane.js +70 -0
  104. package/dist/modules/documents/backend/documents/[id]/OutlinePane.js.map +7 -0
  105. package/dist/modules/documents/backend/documents/[id]/RecordFieldsDialog.js +157 -0
  106. package/dist/modules/documents/backend/documents/[id]/RecordFieldsDialog.js.map +7 -0
  107. package/dist/modules/documents/backend/documents/[id]/RelatedRecordsPanel.js +266 -0
  108. package/dist/modules/documents/backend/documents/[id]/RelatedRecordsPanel.js.map +7 -0
  109. package/dist/modules/documents/backend/documents/[id]/VersionHistoryPanel.js +227 -0
  110. package/dist/modules/documents/backend/documents/[id]/VersionHistoryPanel.js.map +7 -0
  111. package/dist/modules/documents/backend/documents/[id]/VersionPreviewDialog.js +157 -0
  112. package/dist/modules/documents/backend/documents/[id]/VersionPreviewDialog.js.map +7 -0
  113. package/dist/modules/documents/backend/documents/[id]/commentTypes.js +150 -0
  114. package/dist/modules/documents/backend/documents/[id]/commentTypes.js.map +7 -0
  115. package/dist/modules/documents/backend/documents/[id]/componentCapabilities.js +13 -0
  116. package/dist/modules/documents/backend/documents/[id]/componentCapabilities.js.map +7 -0
  117. package/dist/modules/documents/backend/documents/[id]/documentPagination.js +295 -0
  118. package/dist/modules/documents/backend/documents/[id]/documentPagination.js.map +7 -0
  119. package/dist/modules/documents/backend/documents/[id]/editorPresenceStyles.js +81 -0
  120. package/dist/modules/documents/backend/documents/[id]/editorPresenceStyles.js.map +7 -0
  121. package/dist/modules/documents/backend/documents/[id]/editorTypes.js +52 -0
  122. package/dist/modules/documents/backend/documents/[id]/editorTypes.js.map +7 -0
  123. package/dist/modules/documents/backend/documents/[id]/page.js +10 -0
  124. package/dist/modules/documents/backend/documents/[id]/page.js.map +7 -0
  125. package/dist/modules/documents/backend/documents/[id]/page.meta.js +16 -0
  126. package/dist/modules/documents/backend/documents/[id]/page.meta.js.map +7 -0
  127. package/dist/modules/documents/backend/documents/[id]/relatedRecordModel.js +38 -0
  128. package/dist/modules/documents/backend/documents/[id]/relatedRecordModel.js.map +7 -0
  129. package/dist/modules/documents/backend/documents/[id]/restoreVersion.js +33 -0
  130. package/dist/modules/documents/backend/documents/[id]/restoreVersion.js.map +7 -0
  131. package/dist/modules/documents/backend/documents/[id]/useDocumentCollaboration.js +392 -0
  132. package/dist/modules/documents/backend/documents/[id]/useDocumentCollaboration.js.map +7 -0
  133. package/dist/modules/documents/backend/documents/[id]/useDocumentComments.js +253 -0
  134. package/dist/modules/documents/backend/documents/[id]/useDocumentComments.js.map +7 -0
  135. package/dist/modules/documents/backend/documents/[id]/useDocumentEditor.js +149 -0
  136. package/dist/modules/documents/backend/documents/[id]/useDocumentEditor.js.map +7 -0
  137. package/dist/modules/documents/backend/documents/[id]/useDocumentTitle.js +82 -0
  138. package/dist/modules/documents/backend/documents/[id]/useDocumentTitle.js.map +7 -0
  139. package/dist/modules/documents/backend/documents/[id]/useEditorInsertions.js +144 -0
  140. package/dist/modules/documents/backend/documents/[id]/useEditorInsertions.js.map +7 -0
  141. package/dist/modules/documents/backend/documents/[id]/useFallbackContentPersistence.js +237 -0
  142. package/dist/modules/documents/backend/documents/[id]/useFallbackContentPersistence.js.map +7 -0
  143. package/dist/modules/documents/backend/documents/[id]/useMentionPicker.js +216 -0
  144. package/dist/modules/documents/backend/documents/[id]/useMentionPicker.js.map +7 -0
  145. package/dist/modules/documents/backend/documents/[id]/versionHistoryModel.js +25 -0
  146. package/dist/modules/documents/backend/documents/[id]/versionHistoryModel.js.map +7 -0
  147. package/dist/modules/documents/backend/documents/components/EntityPicker.js +156 -0
  148. package/dist/modules/documents/backend/documents/components/EntityPicker.js.map +7 -0
  149. package/dist/modules/documents/backend/documents/components/EntityPickerResults.js +46 -0
  150. package/dist/modules/documents/backend/documents/components/EntityPickerResults.js.map +7 -0
  151. package/dist/modules/documents/backend/documents/components/NewFromTemplateDialog.js +127 -0
  152. package/dist/modules/documents/backend/documents/components/NewFromTemplateDialog.js.map +7 -0
  153. package/dist/modules/documents/backend/documents/components/PrincipalPicker.js +84 -0
  154. package/dist/modules/documents/backend/documents/components/PrincipalPicker.js.map +7 -0
  155. package/dist/modules/documents/backend/documents/components/ShareDialog.js +77 -0
  156. package/dist/modules/documents/backend/documents/components/ShareDialog.js.map +7 -0
  157. package/dist/modules/documents/backend/documents/components/ShareDialogAddForm.js +93 -0
  158. package/dist/modules/documents/backend/documents/components/ShareDialogAddForm.js.map +7 -0
  159. package/dist/modules/documents/backend/documents/components/ShareDialogList.js +82 -0
  160. package/dist/modules/documents/backend/documents/components/ShareDialogList.js.map +7 -0
  161. package/dist/modules/documents/backend/documents/components/TemplateBodyEditor.js +96 -0
  162. package/dist/modules/documents/backend/documents/components/TemplateBodyEditor.js.map +7 -0
  163. package/dist/modules/documents/backend/documents/components/TemplateEditorDialog.js +169 -0
  164. package/dist/modules/documents/backend/documents/components/TemplateEditorDialog.js.map +7 -0
  165. package/dist/modules/documents/backend/documents/components/TemplatePreview.js +38 -0
  166. package/dist/modules/documents/backend/documents/components/TemplatePreview.js.map +7 -0
  167. package/dist/modules/documents/backend/documents/components/TemplateSlotFields.js +69 -0
  168. package/dist/modules/documents/backend/documents/components/TemplateSlotFields.js.map +7 -0
  169. package/dist/modules/documents/backend/documents/components/TemplateSlotsEditor.js +71 -0
  170. package/dist/modules/documents/backend/documents/components/TemplateSlotsEditor.js.map +7 -0
  171. package/dist/modules/documents/backend/documents/components/principalPickerModel.js +63 -0
  172. package/dist/modules/documents/backend/documents/components/principalPickerModel.js.map +7 -0
  173. package/dist/modules/documents/backend/documents/components/shareDialogModel.js +68 -0
  174. package/dist/modules/documents/backend/documents/components/shareDialogModel.js.map +7 -0
  175. package/dist/modules/documents/backend/documents/components/templateUi.js +89 -0
  176. package/dist/modules/documents/backend/documents/components/templateUi.js.map +7 -0
  177. package/dist/modules/documents/backend/documents/components/useAvailableEntityRegistry.js +30 -0
  178. package/dist/modules/documents/backend/documents/components/useAvailableEntityRegistry.js.map +7 -0
  179. package/dist/modules/documents/backend/documents/components/useEntitySearch.js +191 -0
  180. package/dist/modules/documents/backend/documents/components/useEntitySearch.js.map +7 -0
  181. package/dist/modules/documents/backend/documents/components/usePrincipalPicker.js +221 -0
  182. package/dist/modules/documents/backend/documents/components/usePrincipalPicker.js.map +7 -0
  183. package/dist/modules/documents/backend/documents/components/useShareDialog.js +236 -0
  184. package/dist/modules/documents/backend/documents/components/useShareDialog.js.map +7 -0
  185. package/dist/modules/documents/backend/documents/components/useTemplateDetail.js +49 -0
  186. package/dist/modules/documents/backend/documents/components/useTemplateDetail.js.map +7 -0
  187. package/dist/modules/documents/backend/documents/components/useTemplateInstantiation.js +234 -0
  188. package/dist/modules/documents/backend/documents/components/useTemplateInstantiation.js.map +7 -0
  189. package/dist/modules/documents/backend/documents/documentUi.js +106 -0
  190. package/dist/modules/documents/backend/documents/documentUi.js.map +7 -0
  191. package/dist/modules/documents/backend/documents/documentsListTypes.js +132 -0
  192. package/dist/modules/documents/backend/documents/documentsListTypes.js.map +7 -0
  193. package/dist/modules/documents/backend/documents/page.js +9 -0
  194. package/dist/modules/documents/backend/documents/page.js.map +7 -0
  195. package/dist/modules/documents/backend/documents/page.meta.js +26 -0
  196. package/dist/modules/documents/backend/documents/page.meta.js.map +7 -0
  197. package/dist/modules/documents/backend/documents/templates/TemplatesPageClient.js +91 -0
  198. package/dist/modules/documents/backend/documents/templates/TemplatesPageClient.js.map +7 -0
  199. package/dist/modules/documents/backend/documents/templates/TemplatesTable.js +58 -0
  200. package/dist/modules/documents/backend/documents/templates/TemplatesTable.js.map +7 -0
  201. package/dist/modules/documents/backend/documents/templates/page.js +9 -0
  202. package/dist/modules/documents/backend/documents/templates/page.js.map +7 -0
  203. package/dist/modules/documents/backend/documents/templates/page.meta.js +34 -0
  204. package/dist/modules/documents/backend/documents/templates/page.meta.js.map +7 -0
  205. package/dist/modules/documents/backend/documents/templates/useTemplatesPage.js +139 -0
  206. package/dist/modules/documents/backend/documents/templates/useTemplatesPage.js.map +7 -0
  207. package/dist/modules/documents/backend/documents/useDocumentsList.js +314 -0
  208. package/dist/modules/documents/backend/documents/useDocumentsList.js.map +7 -0
  209. package/dist/modules/documents/ce.js +8 -0
  210. package/dist/modules/documents/ce.js.map +7 -0
  211. package/dist/modules/documents/commands/aggregate.js +99 -0
  212. package/dist/modules/documents/commands/aggregate.js.map +7 -0
  213. package/dist/modules/documents/commands/attachments.js +252 -0
  214. package/dist/modules/documents/commands/attachments.js.map +7 -0
  215. package/dist/modules/documents/commands/comments.js +782 -0
  216. package/dist/modules/documents/commands/comments.js.map +7 -0
  217. package/dist/modules/documents/commands/content.js +238 -0
  218. package/dist/modules/documents/commands/content.js.map +7 -0
  219. package/dist/modules/documents/commands/document-crud.js +505 -0
  220. package/dist/modules/documents/commands/document-crud.js.map +7 -0
  221. package/dist/modules/documents/commands/documents.js +473 -0
  222. package/dist/modules/documents/commands/documents.js.map +7 -0
  223. package/dist/modules/documents/commands/duplicate.js +640 -0
  224. package/dist/modules/documents/commands/duplicate.js.map +7 -0
  225. package/dist/modules/documents/commands/favorites.js +150 -0
  226. package/dist/modules/documents/commands/favorites.js.map +7 -0
  227. package/dist/modules/documents/commands/folders.js +420 -0
  228. package/dist/modules/documents/commands/folders.js.map +7 -0
  229. package/dist/modules/documents/commands/index.js +64 -0
  230. package/dist/modules/documents/commands/index.js.map +7 -0
  231. package/dist/modules/documents/commands/interceptors.js +300 -0
  232. package/dist/modules/documents/commands/interceptors.js.map +7 -0
  233. package/dist/modules/documents/commands/lifecycle.js +249 -0
  234. package/dist/modules/documents/commands/lifecycle.js.map +7 -0
  235. package/dist/modules/documents/commands/links.js +410 -0
  236. package/dist/modules/documents/commands/links.js.map +7 -0
  237. package/dist/modules/documents/commands/mutation-helpers.js +42 -0
  238. package/dist/modules/documents/commands/mutation-helpers.js.map +7 -0
  239. package/dist/modules/documents/commands/projection-types.js +1 -0
  240. package/dist/modules/documents/commands/projection-types.js.map +7 -0
  241. package/dist/modules/documents/commands/shared.js +143 -0
  242. package/dist/modules/documents/commands/shared.js.map +7 -0
  243. package/dist/modules/documents/commands/shares.js +527 -0
  244. package/dist/modules/documents/commands/shares.js.map +7 -0
  245. package/dist/modules/documents/commands/side-effects.js +103 -0
  246. package/dist/modules/documents/commands/side-effects.js.map +7 -0
  247. package/dist/modules/documents/commands/templates.js +461 -0
  248. package/dist/modules/documents/commands/templates.js.map +7 -0
  249. package/dist/modules/documents/commands/versions.js +432 -0
  250. package/dist/modules/documents/commands/versions.js.map +7 -0
  251. package/dist/modules/documents/commands/watchers.js +164 -0
  252. package/dist/modules/documents/commands/watchers.js.map +7 -0
  253. package/dist/modules/documents/data/entities.js +653 -0
  254. package/dist/modules/documents/data/entities.js.map +7 -0
  255. package/dist/modules/documents/data/extensions.js +44 -0
  256. package/dist/modules/documents/data/extensions.js.map +7 -0
  257. package/dist/modules/documents/data/validators.js +219 -0
  258. package/dist/modules/documents/data/validators.js.map +7 -0
  259. package/dist/modules/documents/di.js +35 -0
  260. package/dist/modules/documents/di.js.map +7 -0
  261. package/dist/modules/documents/encryption.js +12 -0
  262. package/dist/modules/documents/encryption.js.map +7 -0
  263. package/dist/modules/documents/events.js +27 -0
  264. package/dist/modules/documents/events.js.map +7 -0
  265. package/dist/modules/documents/index.js +19 -0
  266. package/dist/modules/documents/index.js.map +7 -0
  267. package/dist/modules/documents/lib/attachmentServicePort.js +30 -0
  268. package/dist/modules/documents/lib/attachmentServicePort.js.map +7 -0
  269. package/dist/modules/documents/lib/capabilities.js +32 -0
  270. package/dist/modules/documents/lib/capabilities.js.map +7 -0
  271. package/dist/modules/documents/lib/collabCloseEvents.js +17 -0
  272. package/dist/modules/documents/lib/collabCloseEvents.js.map +7 -0
  273. package/dist/modules/documents/lib/collabEndpoint.js +22 -0
  274. package/dist/modules/documents/lib/collabEndpoint.js.map +7 -0
  275. package/dist/modules/documents/lib/collabMaterializer.js +107 -0
  276. package/dist/modules/documents/lib/collabMaterializer.js.map +7 -0
  277. package/dist/modules/documents/lib/collabToken.js +120 -0
  278. package/dist/modules/documents/lib/collabToken.js.map +7 -0
  279. package/dist/modules/documents/lib/collaborationAwareness.js +68 -0
  280. package/dist/modules/documents/lib/collaborationAwareness.js.map +7 -0
  281. package/dist/modules/documents/lib/commentAnchors.js +15 -0
  282. package/dist/modules/documents/lib/commentAnchors.js.map +7 -0
  283. package/dist/modules/documents/lib/constants.js +25 -0
  284. package/dist/modules/documents/lib/constants.js.map +7 -0
  285. package/dist/modules/documents/lib/contentService.js +248 -0
  286. package/dist/modules/documents/lib/contentService.js.map +7 -0
  287. package/dist/modules/documents/lib/displayLabels.js +23 -0
  288. package/dist/modules/documents/lib/displayLabels.js.map +7 -0
  289. package/dist/modules/documents/lib/docxRenderer.js +601 -0
  290. package/dist/modules/documents/lib/docxRenderer.js.map +7 -0
  291. package/dist/modules/documents/lib/duplicateContent.js +22 -0
  292. package/dist/modules/documents/lib/duplicateContent.js.map +7 -0
  293. package/dist/modules/documents/lib/editorConfig.js +287 -0
  294. package/dist/modules/documents/lib/editorConfig.js.map +7 -0
  295. package/dist/modules/documents/lib/entityLinks.js +148 -0
  296. package/dist/modules/documents/lib/entityLinks.js.map +7 -0
  297. package/dist/modules/documents/lib/entityRegistry.js +258 -0
  298. package/dist/modules/documents/lib/entityRegistry.js.map +7 -0
  299. package/dist/modules/documents/lib/entityRegistry.server.js +189 -0
  300. package/dist/modules/documents/lib/entityRegistry.server.js.map +7 -0
  301. package/dist/modules/documents/lib/entityRegistryAvailability.server.js +9 -0
  302. package/dist/modules/documents/lib/entityRegistryAvailability.server.js.map +7 -0
  303. package/dist/modules/documents/lib/entitySuggestion.js +50 -0
  304. package/dist/modules/documents/lib/entitySuggestion.js.map +7 -0
  305. package/dist/modules/documents/lib/favorites.js +22 -0
  306. package/dist/modules/documents/lib/favorites.js.map +7 -0
  307. package/dist/modules/documents/lib/folderHierarchySerialization.js +19 -0
  308. package/dist/modules/documents/lib/folderHierarchySerialization.js.map +7 -0
  309. package/dist/modules/documents/lib/historyLimits.js +100 -0
  310. package/dist/modules/documents/lib/historyLimits.js.map +7 -0
  311. package/dist/modules/documents/lib/historyPolicy.js +14 -0
  312. package/dist/modules/documents/lib/historyPolicy.js.map +7 -0
  313. package/dist/modules/documents/lib/organizationAccess.js +17 -0
  314. package/dist/modules/documents/lib/organizationAccess.js.map +7 -0
  315. package/dist/modules/documents/lib/pdfHtml.js +62 -0
  316. package/dist/modules/documents/lib/pdfHtml.js.map +7 -0
  317. package/dist/modules/documents/lib/pdfRenderer.js +284 -0
  318. package/dist/modules/documents/lib/pdfRenderer.js.map +7 -0
  319. package/dist/modules/documents/lib/permissions.js +222 -0
  320. package/dist/modules/documents/lib/permissions.js.map +7 -0
  321. package/dist/modules/documents/lib/platformServices.js +35 -0
  322. package/dist/modules/documents/lib/platformServices.js.map +7 -0
  323. package/dist/modules/documents/lib/recordFieldInsertion.js +58 -0
  324. package/dist/modules/documents/lib/recordFieldInsertion.js.map +7 -0
  325. package/dist/modules/documents/lib/requestBody.js +80 -0
  326. package/dist/modules/documents/lib/requestBody.js.map +7 -0
  327. package/dist/modules/documents/lib/resourceLimits.js +62 -0
  328. package/dist/modules/documents/lib/resourceLimits.js.map +7 -0
  329. package/dist/modules/documents/lib/shareCounts.js +25 -0
  330. package/dist/modules/documents/lib/shareCounts.js.map +7 -0
  331. package/dist/modules/documents/lib/templateFill.js +84 -0
  332. package/dist/modules/documents/lib/templateFill.js.map +7 -0
  333. package/dist/modules/documents/lib/templateInstantiation.js +147 -0
  334. package/dist/modules/documents/lib/templateInstantiation.js.map +7 -0
  335. package/dist/modules/documents/lib/templatePreviewDigest.js +82 -0
  336. package/dist/modules/documents/lib/templatePreviewDigest.js.map +7 -0
  337. package/dist/modules/documents/lib/templateSeeds.js +201 -0
  338. package/dist/modules/documents/lib/templateSeeds.js.map +7 -0
  339. package/dist/modules/documents/lib/userLabels.js +37 -0
  340. package/dist/modules/documents/lib/userLabels.js.map +7 -0
  341. package/dist/modules/documents/lib/versionContent.js +131 -0
  342. package/dist/modules/documents/lib/versionContent.js.map +7 -0
  343. package/dist/modules/documents/lib/versionLabels.js +12 -0
  344. package/dist/modules/documents/lib/versionLabels.js.map +7 -0
  345. package/dist/modules/documents/lib/versioning.js +14 -0
  346. package/dist/modules/documents/lib/versioning.js.map +7 -0
  347. package/dist/modules/documents/lib/visibility.js +422 -0
  348. package/dist/modules/documents/lib/visibility.js.map +7 -0
  349. package/dist/modules/documents/lib/watchers.js +106 -0
  350. package/dist/modules/documents/lib/watchers.js.map +7 -0
  351. package/dist/modules/documents/migrations/Migration20260708163836_documents.js +44 -0
  352. package/dist/modules/documents/migrations/Migration20260708163836_documents.js.map +7 -0
  353. package/dist/modules/documents/migrations/Migration20260709164720_documents.js +17 -0
  354. package/dist/modules/documents/migrations/Migration20260709164720_documents.js.map +7 -0
  355. package/dist/modules/documents/migrations/Migration20260710002318_documents.js +32 -0
  356. package/dist/modules/documents/migrations/Migration20260710002318_documents.js.map +7 -0
  357. package/dist/modules/documents/migrations/Migration20260710071003_documents.js +13 -0
  358. package/dist/modules/documents/migrations/Migration20260710071003_documents.js.map +7 -0
  359. package/dist/modules/documents/migrations/Migration20260712120000_documents.js +13 -0
  360. package/dist/modules/documents/migrations/Migration20260712120000_documents.js.map +7 -0
  361. package/dist/modules/documents/migrations/Migration20260712183000_documents.js +14 -0
  362. package/dist/modules/documents/migrations/Migration20260712183000_documents.js.map +7 -0
  363. package/dist/modules/documents/migrations/Migration20260713092156_documents.js +29 -0
  364. package/dist/modules/documents/migrations/Migration20260713092156_documents.js.map +7 -0
  365. package/dist/modules/documents/migrations/Migration20260717000000_documents.js +37 -0
  366. package/dist/modules/documents/migrations/Migration20260717000000_documents.js.map +7 -0
  367. package/dist/modules/documents/notifications.js +47 -0
  368. package/dist/modules/documents/notifications.js.map +7 -0
  369. package/dist/modules/documents/search.js +101 -0
  370. package/dist/modules/documents/search.js.map +7 -0
  371. package/dist/modules/documents/setup.js +19 -0
  372. package/dist/modules/documents/setup.js.map +7 -0
  373. package/dist/modules/documents/widgets/injection/related-documents/LinkDocumentDialog.js +214 -0
  374. package/dist/modules/documents/widgets/injection/related-documents/LinkDocumentDialog.js.map +7 -0
  375. package/dist/modules/documents/widgets/injection/related-documents/context.js +84 -0
  376. package/dist/modules/documents/widgets/injection/related-documents/context.js.map +7 -0
  377. package/dist/modules/documents/widgets/injection/related-documents/useRelatedDocuments.js +98 -0
  378. package/dist/modules/documents/widgets/injection/related-documents/useRelatedDocuments.js.map +7 -0
  379. package/dist/modules/documents/widgets/injection/related-documents/widget.client.js +83 -0
  380. package/dist/modules/documents/widgets/injection/related-documents/widget.client.js.map +7 -0
  381. package/dist/modules/documents/widgets/injection/related-documents/widget.js +19 -0
  382. package/dist/modules/documents/widgets/injection/related-documents/widget.js.map +7 -0
  383. package/dist/modules/documents/widgets/injection-table.js +21 -0
  384. package/dist/modules/documents/widgets/injection-table.js.map +7 -0
  385. package/dist/server/documents-collab-server.js +2260 -0
  386. package/dist/server/documents-collab-server.js.map +7 -0
  387. package/generated/entities/document/index.ts +12 -0
  388. package/generated/entities/document_attachment/index.ts +9 -0
  389. package/generated/entities/document_comment/index.ts +14 -0
  390. package/generated/entities/document_content/index.ts +11 -0
  391. package/generated/entities/document_entity_link/index.ts +19 -0
  392. package/generated/entities/document_favorite/index.ts +7 -0
  393. package/generated/entities/document_folder/index.ts +9 -0
  394. package/generated/entities/document_share/index.ts +11 -0
  395. package/generated/entities/document_template/index.ts +13 -0
  396. package/generated/entities/document_version/index.ts +9 -0
  397. package/generated/entities/document_watcher/index.ts +7 -0
  398. package/generated/entities.ids.generated.ts +21 -0
  399. package/generated/entity-fields-registry.ts +151 -0
  400. package/jest.config.cjs +34 -0
  401. package/package.json +149 -0
  402. package/server/documents-collab-server.ts +3416 -0
  403. package/src/index.ts +1 -0
  404. package/src/modules/documents/acl.ts +11 -0
  405. package/src/modules/documents/api/[id]/archive/route.ts +132 -0
  406. package/src/modules/documents/api/[id]/attachments/[attachmentId]/route.ts +166 -0
  407. package/src/modules/documents/api/[id]/attachments/route.ts +173 -0
  408. package/src/modules/documents/api/[id]/collab-token/route.ts +203 -0
  409. package/src/modules/documents/api/[id]/comments/access-check/route.ts +96 -0
  410. package/src/modules/documents/api/[id]/comments/route.ts +442 -0
  411. package/src/modules/documents/api/[id]/content/route.ts +156 -0
  412. package/src/modules/documents/api/[id]/duplicate/route.ts +231 -0
  413. package/src/modules/documents/api/[id]/export/route.ts +535 -0
  414. package/src/modules/documents/api/[id]/favorite/route.ts +110 -0
  415. package/src/modules/documents/api/[id]/links/[linkId]/route.ts +92 -0
  416. package/src/modules/documents/api/[id]/links/route.ts +301 -0
  417. package/src/modules/documents/api/[id]/principals/route.ts +375 -0
  418. package/src/modules/documents/api/[id]/route.ts +267 -0
  419. package/src/modules/documents/api/[id]/shares/route.ts +372 -0
  420. package/src/modules/documents/api/[id]/unarchive/route.ts +42 -0
  421. package/src/modules/documents/api/[id]/versions/[versionId]/restore/route.ts +152 -0
  422. package/src/modules/documents/api/[id]/versions/[versionId]/route.ts +100 -0
  423. package/src/modules/documents/api/[id]/versions/route.ts +207 -0
  424. package/src/modules/documents/api/[id]/watch/route.ts +111 -0
  425. package/src/modules/documents/api/_commands.ts +53 -0
  426. package/src/modules/documents/api/_shared.ts +676 -0
  427. package/src/modules/documents/api/folders/route.ts +287 -0
  428. package/src/modules/documents/api/instantiate/route.ts +114 -0
  429. package/src/modules/documents/api/route.ts +362 -0
  430. package/src/modules/documents/api/templates/[templateId]/preview/route.ts +97 -0
  431. package/src/modules/documents/api/templates/[templateId]/route.ts +92 -0
  432. package/src/modules/documents/api/templates/route.ts +370 -0
  433. package/src/modules/documents/backend/documents/DocumentsPageClient.tsx +150 -0
  434. package/src/modules/documents/backend/documents/DocumentsTable.tsx +168 -0
  435. package/src/modules/documents/backend/documents/FolderDialog.tsx +62 -0
  436. package/src/modules/documents/backend/documents/FolderTree.tsx +72 -0
  437. package/src/modules/documents/backend/documents/MoveDocumentDialog.tsx +70 -0
  438. package/src/modules/documents/backend/documents/[id]/CommentAnchorNavigation.ts +88 -0
  439. package/src/modules/documents/backend/documents/[id]/CommentComposer.tsx +136 -0
  440. package/src/modules/documents/backend/documents/[id]/CommentThreadList.tsx +131 -0
  441. package/src/modules/documents/backend/documents/[id]/CommentsRail.tsx +138 -0
  442. package/src/modules/documents/backend/documents/[id]/DocumentCanvas.tsx +111 -0
  443. package/src/modules/documents/backend/documents/[id]/DocumentEditorErrorBoundary.tsx +39 -0
  444. package/src/modules/documents/backend/documents/[id]/DocumentEditorIsland.tsx +50 -0
  445. package/src/modules/documents/backend/documents/[id]/DocumentEditorSurface.tsx +162 -0
  446. package/src/modules/documents/backend/documents/[id]/DocumentNavigator.tsx +129 -0
  447. package/src/modules/documents/backend/documents/[id]/DocumentPageClient.tsx +463 -0
  448. package/src/modules/documents/backend/documents/[id]/EditorColorTools.tsx +71 -0
  449. package/src/modules/documents/backend/documents/[id]/EditorStatusPresence.tsx +78 -0
  450. package/src/modules/documents/backend/documents/[id]/EditorToolbar.tsx +108 -0
  451. package/src/modules/documents/backend/documents/[id]/ExportMenu.tsx +144 -0
  452. package/src/modules/documents/backend/documents/[id]/MentionPicker.tsx +137 -0
  453. package/src/modules/documents/backend/documents/[id]/OutlinePane.tsx +98 -0
  454. package/src/modules/documents/backend/documents/[id]/RecordFieldsDialog.tsx +185 -0
  455. package/src/modules/documents/backend/documents/[id]/RelatedRecordsPanel.tsx +320 -0
  456. package/src/modules/documents/backend/documents/[id]/VersionHistoryPanel.tsx +244 -0
  457. package/src/modules/documents/backend/documents/[id]/VersionPreviewDialog.tsx +197 -0
  458. package/src/modules/documents/backend/documents/[id]/commentTypes.ts +192 -0
  459. package/src/modules/documents/backend/documents/[id]/componentCapabilities.ts +17 -0
  460. package/src/modules/documents/backend/documents/[id]/documentPagination.ts +352 -0
  461. package/src/modules/documents/backend/documents/[id]/editorPresenceStyles.ts +77 -0
  462. package/src/modules/documents/backend/documents/[id]/editorTypes.ts +84 -0
  463. package/src/modules/documents/backend/documents/[id]/page.meta.ts +12 -0
  464. package/src/modules/documents/backend/documents/[id]/page.tsx +6 -0
  465. package/src/modules/documents/backend/documents/[id]/relatedRecordModel.ts +49 -0
  466. package/src/modules/documents/backend/documents/[id]/restoreVersion.ts +49 -0
  467. package/src/modules/documents/backend/documents/[id]/useDocumentCollaboration.ts +458 -0
  468. package/src/modules/documents/backend/documents/[id]/useDocumentComments.ts +286 -0
  469. package/src/modules/documents/backend/documents/[id]/useDocumentEditor.ts +157 -0
  470. package/src/modules/documents/backend/documents/[id]/useDocumentTitle.ts +77 -0
  471. package/src/modules/documents/backend/documents/[id]/useEditorInsertions.ts +147 -0
  472. package/src/modules/documents/backend/documents/[id]/useFallbackContentPersistence.ts +277 -0
  473. package/src/modules/documents/backend/documents/[id]/useMentionPicker.ts +259 -0
  474. package/src/modules/documents/backend/documents/[id]/versionHistoryModel.ts +29 -0
  475. package/src/modules/documents/backend/documents/components/EntityPicker.tsx +171 -0
  476. package/src/modules/documents/backend/documents/components/EntityPickerResults.tsx +64 -0
  477. package/src/modules/documents/backend/documents/components/NewFromTemplateDialog.tsx +136 -0
  478. package/src/modules/documents/backend/documents/components/PrincipalPicker.tsx +90 -0
  479. package/src/modules/documents/backend/documents/components/ShareDialog.tsx +88 -0
  480. package/src/modules/documents/backend/documents/components/ShareDialogAddForm.tsx +113 -0
  481. package/src/modules/documents/backend/documents/components/ShareDialogList.tsx +117 -0
  482. package/src/modules/documents/backend/documents/components/TemplateBodyEditor.tsx +96 -0
  483. package/src/modules/documents/backend/documents/components/TemplateEditorDialog.tsx +171 -0
  484. package/src/modules/documents/backend/documents/components/TemplatePreview.tsx +43 -0
  485. package/src/modules/documents/backend/documents/components/TemplateSlotFields.tsx +72 -0
  486. package/src/modules/documents/backend/documents/components/TemplateSlotsEditor.tsx +72 -0
  487. package/src/modules/documents/backend/documents/components/principalPickerModel.ts +86 -0
  488. package/src/modules/documents/backend/documents/components/shareDialogModel.ts +94 -0
  489. package/src/modules/documents/backend/documents/components/templateUi.ts +128 -0
  490. package/src/modules/documents/backend/documents/components/useAvailableEntityRegistry.ts +43 -0
  491. package/src/modules/documents/backend/documents/components/useEntitySearch.ts +197 -0
  492. package/src/modules/documents/backend/documents/components/usePrincipalPicker.ts +165 -0
  493. package/src/modules/documents/backend/documents/components/useShareDialog.ts +267 -0
  494. package/src/modules/documents/backend/documents/components/useTemplateDetail.ts +54 -0
  495. package/src/modules/documents/backend/documents/components/useTemplateInstantiation.ts +252 -0
  496. package/src/modules/documents/backend/documents/documentUi.ts +134 -0
  497. package/src/modules/documents/backend/documents/documentsListTypes.ts +163 -0
  498. package/src/modules/documents/backend/documents/page.meta.ts +24 -0
  499. package/src/modules/documents/backend/documents/page.tsx +5 -0
  500. package/src/modules/documents/backend/documents/templates/TemplatesPageClient.tsx +93 -0
  501. package/src/modules/documents/backend/documents/templates/TemplatesTable.tsx +71 -0
  502. package/src/modules/documents/backend/documents/templates/page.meta.ts +32 -0
  503. package/src/modules/documents/backend/documents/templates/page.tsx +5 -0
  504. package/src/modules/documents/backend/documents/templates/useTemplatesPage.tsx +148 -0
  505. package/src/modules/documents/backend/documents/useDocumentsList.tsx +305 -0
  506. package/src/modules/documents/ce.ts +6 -0
  507. package/src/modules/documents/commands/aggregate.ts +128 -0
  508. package/src/modules/documents/commands/attachments.ts +309 -0
  509. package/src/modules/documents/commands/comments.ts +966 -0
  510. package/src/modules/documents/commands/content.ts +294 -0
  511. package/src/modules/documents/commands/document-crud.ts +609 -0
  512. package/src/modules/documents/commands/documents.ts +581 -0
  513. package/src/modules/documents/commands/duplicate.ts +772 -0
  514. package/src/modules/documents/commands/favorites.ts +171 -0
  515. package/src/modules/documents/commands/folders.ts +506 -0
  516. package/src/modules/documents/commands/index.ts +33 -0
  517. package/src/modules/documents/commands/interceptors.ts +402 -0
  518. package/src/modules/documents/commands/lifecycle.ts +333 -0
  519. package/src/modules/documents/commands/links.ts +486 -0
  520. package/src/modules/documents/commands/mutation-helpers.ts +48 -0
  521. package/src/modules/documents/commands/projection-types.ts +77 -0
  522. package/src/modules/documents/commands/shared.ts +219 -0
  523. package/src/modules/documents/commands/shares.ts +612 -0
  524. package/src/modules/documents/commands/side-effects.ts +130 -0
  525. package/src/modules/documents/commands/templates.ts +522 -0
  526. package/src/modules/documents/commands/versions.ts +537 -0
  527. package/src/modules/documents/commands/watchers.ts +181 -0
  528. package/src/modules/documents/data/entities.ts +631 -0
  529. package/src/modules/documents/data/extensions.ts +42 -0
  530. package/src/modules/documents/data/validators.ts +248 -0
  531. package/src/modules/documents/di.ts +33 -0
  532. package/src/modules/documents/encryption.ts +14 -0
  533. package/src/modules/documents/events.ts +23 -0
  534. package/src/modules/documents/i18n/.hardcoded-allowlist.json +9 -0
  535. package/src/modules/documents/i18n/de.json +522 -0
  536. package/src/modules/documents/i18n/en.json +522 -0
  537. package/src/modules/documents/i18n/es.json +522 -0
  538. package/src/modules/documents/i18n/ko.json +522 -0
  539. package/src/modules/documents/i18n/pl.json +522 -0
  540. package/src/modules/documents/index.ts +17 -0
  541. package/src/modules/documents/lib/attachmentServicePort.ts +94 -0
  542. package/src/modules/documents/lib/capabilities.ts +57 -0
  543. package/src/modules/documents/lib/collabCloseEvents.ts +26 -0
  544. package/src/modules/documents/lib/collabEndpoint.ts +43 -0
  545. package/src/modules/documents/lib/collabMaterializer.ts +140 -0
  546. package/src/modules/documents/lib/collabToken.ts +170 -0
  547. package/src/modules/documents/lib/collaborationAwareness.ts +102 -0
  548. package/src/modules/documents/lib/commentAnchors.ts +19 -0
  549. package/src/modules/documents/lib/constants.ts +39 -0
  550. package/src/modules/documents/lib/contentService.ts +340 -0
  551. package/src/modules/documents/lib/displayLabels.ts +31 -0
  552. package/src/modules/documents/lib/docxRenderer.ts +685 -0
  553. package/src/modules/documents/lib/duplicateContent.ts +32 -0
  554. package/src/modules/documents/lib/editorConfig.ts +371 -0
  555. package/src/modules/documents/lib/entityLinks.ts +250 -0
  556. package/src/modules/documents/lib/entityRegistry.server.ts +267 -0
  557. package/src/modules/documents/lib/entityRegistry.ts +345 -0
  558. package/src/modules/documents/lib/entityRegistryAvailability.server.ts +19 -0
  559. package/src/modules/documents/lib/entitySuggestion.ts +61 -0
  560. package/src/modules/documents/lib/favorites.ts +35 -0
  561. package/src/modules/documents/lib/folderHierarchySerialization.ts +34 -0
  562. package/src/modules/documents/lib/historyLimits.ts +154 -0
  563. package/src/modules/documents/lib/historyPolicy.ts +7 -0
  564. package/src/modules/documents/lib/organizationAccess.ts +44 -0
  565. package/src/modules/documents/lib/pdfHtml.ts +65 -0
  566. package/src/modules/documents/lib/pdfRenderer.ts +367 -0
  567. package/src/modules/documents/lib/permissions.ts +299 -0
  568. package/src/modules/documents/lib/platformServices.ts +70 -0
  569. package/src/modules/documents/lib/recordFieldInsertion.ts +72 -0
  570. package/src/modules/documents/lib/requestBody.ts +97 -0
  571. package/src/modules/documents/lib/resourceLimits.ts +94 -0
  572. package/src/modules/documents/lib/shareCounts.ts +44 -0
  573. package/src/modules/documents/lib/templateFill.ts +138 -0
  574. package/src/modules/documents/lib/templateInstantiation.ts +206 -0
  575. package/src/modules/documents/lib/templatePreviewDigest.ts +122 -0
  576. package/src/modules/documents/lib/templateSeeds.ts +248 -0
  577. package/src/modules/documents/lib/userLabels.ts +58 -0
  578. package/src/modules/documents/lib/versionContent.ts +163 -0
  579. package/src/modules/documents/lib/versionLabels.ts +9 -0
  580. package/src/modules/documents/lib/versioning.ts +29 -0
  581. package/src/modules/documents/lib/visibility.ts +610 -0
  582. package/src/modules/documents/lib/watchers.ts +129 -0
  583. package/src/modules/documents/migrations/.snapshot-open-mercato.json +2892 -0
  584. package/src/modules/documents/migrations/Migration20260708163836_documents.ts +50 -0
  585. package/src/modules/documents/migrations/Migration20260709164720_documents.ts +19 -0
  586. package/src/modules/documents/migrations/Migration20260710002318_documents.ts +35 -0
  587. package/src/modules/documents/migrations/Migration20260710071003_documents.ts +13 -0
  588. package/src/modules/documents/migrations/Migration20260712120000_documents.ts +13 -0
  589. package/src/modules/documents/migrations/Migration20260712183000_documents.ts +12 -0
  590. package/src/modules/documents/migrations/Migration20260713092156_documents.ts +43 -0
  591. package/src/modules/documents/migrations/Migration20260717000000_documents.ts +40 -0
  592. package/src/modules/documents/notifications.ts +45 -0
  593. package/src/modules/documents/search.ts +118 -0
  594. package/src/modules/documents/setup.ts +19 -0
  595. package/src/modules/documents/widgets/injection/related-documents/LinkDocumentDialog.tsx +224 -0
  596. package/src/modules/documents/widgets/injection/related-documents/context.ts +101 -0
  597. package/src/modules/documents/widgets/injection/related-documents/useRelatedDocuments.ts +112 -0
  598. package/src/modules/documents/widgets/injection/related-documents/widget.client.tsx +76 -0
  599. package/src/modules/documents/widgets/injection/related-documents/widget.ts +19 -0
  600. package/src/modules/documents/widgets/injection-table.ts +20 -0
  601. package/tsconfig.json +9 -0
  602. package/watch.mjs +6 -0
@@ -0,0 +1,216 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { apiCall } from "@open-mercato/ui/backend/utils/apiCall";
4
+ import { resolveSearchMinTokenLength } from "@open-mercato/shared/lib/search/config";
5
+ import {
6
+ firstSafeDocumentsDisplayLabel,
7
+ sanitizeDocumentsDisplayLabel
8
+ } from "../../../lib/displayLabels.js";
9
+ const MENTION_SEARCH_MIN_LENGTH = resolveSearchMinTokenLength();
10
+ function isMentionSearchUnavailableStatus(status) {
11
+ return status === 401 || status === 403 || status === 404;
12
+ }
13
+ function readRecord(value) {
14
+ return value && typeof value === "object" ? value : null;
15
+ }
16
+ function readString(record, ...keys) {
17
+ for (const key of keys) {
18
+ const value = record[key];
19
+ if (typeof value === "string" && value.trim().length > 0) return value;
20
+ }
21
+ return null;
22
+ }
23
+ function normalizeUser(value, fallbackLabel) {
24
+ const record = readRecord(value);
25
+ if (!record) return null;
26
+ const id = readString(record, "id");
27
+ const label = firstSafeDocumentsDisplayLabel(readString(record, "label"), fallbackLabel);
28
+ if (!id || !label) return null;
29
+ const rawSecondary = sanitizeDocumentsDisplayLabel(readString(record, "secondary"));
30
+ return { id, label, secondary: rawSecondary && rawSecondary !== label ? rawSecondary : null };
31
+ }
32
+ function readMentionUserItems(payload, fallbackLabel) {
33
+ if (Array.isArray(payload)) {
34
+ return payload.map((item) => normalizeUser(item, fallbackLabel)).filter((user) => user !== null);
35
+ }
36
+ const record = readRecord(payload);
37
+ if (!record) return [];
38
+ for (const candidate of [record.items, record.data]) {
39
+ if (Array.isArray(candidate)) {
40
+ return candidate.map((item) => normalizeUser(item, fallbackLabel)).filter((user) => user !== null);
41
+ }
42
+ }
43
+ return [];
44
+ }
45
+ function buildMentionPrincipalUrl(documentId, search) {
46
+ const params = new URLSearchParams({
47
+ mode: "mention",
48
+ type: "user",
49
+ search,
50
+ page: "1",
51
+ pageSize: "8"
52
+ });
53
+ return `/api/documents/${encodeURIComponent(documentId)}/principals?${params.toString()}`;
54
+ }
55
+ function nextMentionIndex(current, direction, itemCount) {
56
+ if (itemCount <= 0) return -1;
57
+ if (current < 0) return direction === 1 ? 0 : itemCount - 1;
58
+ return Math.min(itemCount - 1, Math.max(0, current + direction));
59
+ }
60
+ function useMentionPicker(input) {
61
+ const [query, setQuery] = React.useState("");
62
+ const [users, setUsers] = React.useState([]);
63
+ const [open, setOpen] = React.useState(false);
64
+ const [unavailable, setUnavailable] = React.useState(false);
65
+ const [hasError, setHasError] = React.useState(false);
66
+ const [retryToken, setRetryToken] = React.useState(0);
67
+ const [isLoading, setIsLoading] = React.useState(false);
68
+ const [hasSearched, setHasSearched] = React.useState(false);
69
+ const [activeIndex, setActiveIndex] = React.useState(-1);
70
+ const [resultQuery, setResultQuery] = React.useState(null);
71
+ const currentQueryRef = React.useRef("");
72
+ const resultQueryRef = React.useRef(null);
73
+ const activeRequestRef = React.useRef(null);
74
+ const clearResults = React.useCallback(() => {
75
+ resultQueryRef.current = null;
76
+ setResultQuery(null);
77
+ setUsers([]);
78
+ setHasSearched(false);
79
+ setHasError(false);
80
+ setActiveIndex(-1);
81
+ }, []);
82
+ const onQueryChange = React.useCallback((nextQuery) => {
83
+ const normalizedQuery = nextQuery.trim();
84
+ currentQueryRef.current = normalizedQuery;
85
+ activeRequestRef.current?.abort();
86
+ activeRequestRef.current = null;
87
+ clearResults();
88
+ const shouldSearch = !input.disabled && !unavailable && normalizedQuery.length >= MENTION_SEARCH_MIN_LENGTH;
89
+ setOpen(shouldSearch);
90
+ setIsLoading(shouldSearch);
91
+ setQuery(nextQuery);
92
+ }, [clearResults, input.disabled, unavailable]);
93
+ React.useEffect(() => {
94
+ activeRequestRef.current?.abort();
95
+ activeRequestRef.current = null;
96
+ currentQueryRef.current = "";
97
+ setQuery("");
98
+ setOpen(false);
99
+ setUnavailable(false);
100
+ setIsLoading(false);
101
+ clearResults();
102
+ }, [clearResults, input.documentId]);
103
+ React.useEffect(() => {
104
+ const trimmedQuery = query.trim();
105
+ if (input.disabled || unavailable || trimmedQuery.length < MENTION_SEARCH_MIN_LENGTH) {
106
+ currentQueryRef.current = trimmedQuery;
107
+ setOpen(false);
108
+ setIsLoading(false);
109
+ clearResults();
110
+ return;
111
+ }
112
+ let cancelled = false;
113
+ const controller = new AbortController();
114
+ activeRequestRef.current = controller;
115
+ setOpen(true);
116
+ setIsLoading(true);
117
+ setHasSearched(false);
118
+ const timer = window.setTimeout(() => {
119
+ void apiCall(
120
+ buildMentionPrincipalUrl(input.documentId, trimmedQuery),
121
+ {
122
+ signal: controller.signal,
123
+ headers: { "x-om-forbidden-redirect": "0", "x-om-unauthorized-redirect": "0" }
124
+ },
125
+ { fallback: { items: [] } }
126
+ ).then((call) => {
127
+ if (cancelled || controller.signal.aborted || currentQueryRef.current !== trimmedQuery) return;
128
+ if (!call.ok) {
129
+ clearResults();
130
+ if (isMentionSearchUnavailableStatus(call.status)) {
131
+ setUnavailable(true);
132
+ setOpen(false);
133
+ } else {
134
+ setHasError(true);
135
+ setOpen(true);
136
+ }
137
+ return;
138
+ }
139
+ const nextUsers = readMentionUserItems(call.result, input.fallbackLabel).slice(0, 8);
140
+ resultQueryRef.current = trimmedQuery;
141
+ setResultQuery(trimmedQuery);
142
+ setUsers(nextUsers);
143
+ setHasSearched(true);
144
+ setActiveIndex(nextUsers.length > 0 ? 0 : -1);
145
+ }).catch(() => {
146
+ if (!cancelled && !controller.signal.aborted && currentQueryRef.current === trimmedQuery) {
147
+ clearResults();
148
+ setHasError(true);
149
+ setOpen(true);
150
+ }
151
+ }).finally(() => {
152
+ if (!cancelled && !controller.signal.aborted && currentQueryRef.current === trimmedQuery) {
153
+ setIsLoading(false);
154
+ }
155
+ if (activeRequestRef.current === controller) activeRequestRef.current = null;
156
+ });
157
+ }, 250);
158
+ return () => {
159
+ cancelled = true;
160
+ window.clearTimeout(timer);
161
+ controller.abort();
162
+ if (activeRequestRef.current === controller) activeRequestRef.current = null;
163
+ };
164
+ }, [clearResults, input.disabled, input.documentId, input.fallbackLabel, query, retryToken, unavailable]);
165
+ const isDisabled = input.disabled || unavailable;
166
+ const resultsAreCurrent = resultQuery !== null && resultQuery === query.trim() && resultQueryRef.current === resultQuery && currentQueryRef.current === resultQuery;
167
+ const pick = React.useCallback((user, boundQuery) => {
168
+ if (isDisabled || !boundQuery || resultQueryRef.current !== boundQuery || currentQueryRef.current !== boundQuery) return;
169
+ input.onPick({ id: user.id, name: user.label });
170
+ activeRequestRef.current?.abort();
171
+ activeRequestRef.current = null;
172
+ currentQueryRef.current = "";
173
+ setQuery("");
174
+ setOpen(false);
175
+ setIsLoading(false);
176
+ clearResults();
177
+ }, [clearResults, input.onPick, isDisabled]);
178
+ const retry = React.useCallback(() => {
179
+ const trimmedQuery = query.trim();
180
+ if (input.disabled || unavailable || trimmedQuery.length < MENTION_SEARCH_MIN_LENGTH) return;
181
+ activeRequestRef.current?.abort();
182
+ activeRequestRef.current = null;
183
+ clearResults();
184
+ setOpen(true);
185
+ setIsLoading(true);
186
+ setRetryToken((token) => token + 1);
187
+ }, [clearResults, input.disabled, query, unavailable]);
188
+ return {
189
+ query,
190
+ users,
191
+ open,
192
+ unavailable,
193
+ hasError,
194
+ isLoading,
195
+ hasSearched,
196
+ activeIndex,
197
+ resultQuery,
198
+ isDisabled,
199
+ resultsAreCurrent,
200
+ retry,
201
+ onQueryChange,
202
+ dismiss: () => setOpen(false),
203
+ moveActive: (direction) => setActiveIndex((index) => nextMentionIndex(index, direction, resultsAreCurrent ? users.length : 0)),
204
+ activate: (index, boundQuery) => {
205
+ if (boundQuery && resultQueryRef.current === boundQuery) setActiveIndex(index);
206
+ },
207
+ pick
208
+ };
209
+ }
210
+ export {
211
+ buildMentionPrincipalUrl,
212
+ nextMentionIndex,
213
+ readMentionUserItems,
214
+ useMentionPicker
215
+ };
216
+ //# sourceMappingURL=useMentionPicker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/%5Bid%5D/useMentionPicker.ts"],
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { resolveSearchMinTokenLength } from '@open-mercato/shared/lib/search/config'\nimport {\n firstSafeDocumentsDisplayLabel,\n sanitizeDocumentsDisplayLabel,\n} from '../../../lib/displayLabels'\n\nexport type MentionUser = {\n id: string\n label: string\n secondary: string | null\n}\n\nconst MENTION_SEARCH_MIN_LENGTH = resolveSearchMinTokenLength()\n\nfunction isMentionSearchUnavailableStatus(status: number | undefined): boolean {\n return status === 401 || status === 403 || status === 404\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' ? value as Record<string, unknown> : null\n}\n\nfunction readString(record: Record<string, unknown>, ...keys: string[]): string | null {\n for (const key of keys) {\n const value = record[key]\n if (typeof value === 'string' && value.trim().length > 0) return value\n }\n return null\n}\n\nfunction normalizeUser(value: unknown, fallbackLabel: string): MentionUser | null {\n const record = readRecord(value)\n if (!record) return null\n const id = readString(record, 'id')\n const label = firstSafeDocumentsDisplayLabel(readString(record, 'label'), fallbackLabel)\n if (!id || !label) return null\n const rawSecondary = sanitizeDocumentsDisplayLabel(readString(record, 'secondary'))\n return { id, label, secondary: rawSecondary && rawSecondary !== label ? rawSecondary : null }\n}\n\nexport function readMentionUserItems(payload: unknown, fallbackLabel: string): MentionUser[] {\n if (Array.isArray(payload)) {\n return payload\n .map((item) => normalizeUser(item, fallbackLabel))\n .filter((user): user is MentionUser => user !== null)\n }\n const record = readRecord(payload)\n if (!record) return []\n for (const candidate of [record.items, record.data]) {\n if (Array.isArray(candidate)) {\n return candidate\n .map((item) => normalizeUser(item, fallbackLabel))\n .filter((user): user is MentionUser => user !== null)\n }\n }\n return []\n}\n\nexport function buildMentionPrincipalUrl(documentId: string, search: string): string {\n const params = new URLSearchParams({\n mode: 'mention',\n type: 'user',\n search,\n page: '1',\n pageSize: '8',\n })\n return `/api/documents/${encodeURIComponent(documentId)}/principals?${params.toString()}`\n}\n\nexport function nextMentionIndex(current: number, direction: 1 | -1, itemCount: number): number {\n if (itemCount <= 0) return -1\n if (current < 0) return direction === 1 ? 0 : itemCount - 1\n return Math.min(itemCount - 1, Math.max(0, current + direction))\n}\n\nexport function useMentionPicker(input: {\n documentId: string\n fallbackLabel: string\n onPick: (user: { id: string; name: string }) => void\n disabled: boolean\n}) {\n const [query, setQuery] = React.useState('')\n const [users, setUsers] = React.useState<MentionUser[]>([])\n const [open, setOpen] = React.useState(false)\n const [unavailable, setUnavailable] = React.useState(false)\n const [hasError, setHasError] = React.useState(false)\n const [retryToken, setRetryToken] = React.useState(0)\n const [isLoading, setIsLoading] = React.useState(false)\n const [hasSearched, setHasSearched] = React.useState(false)\n const [activeIndex, setActiveIndex] = React.useState(-1)\n const [resultQuery, setResultQuery] = React.useState<string | null>(null)\n const currentQueryRef = React.useRef('')\n const resultQueryRef = React.useRef<string | null>(null)\n const activeRequestRef = React.useRef<AbortController | null>(null)\n\n const clearResults = React.useCallback(() => {\n resultQueryRef.current = null\n setResultQuery(null)\n setUsers([])\n setHasSearched(false)\n setHasError(false)\n setActiveIndex(-1)\n }, [])\n\n const onQueryChange = React.useCallback((nextQuery: string) => {\n const normalizedQuery = nextQuery.trim()\n currentQueryRef.current = normalizedQuery\n activeRequestRef.current?.abort()\n activeRequestRef.current = null\n clearResults()\n const shouldSearch = !input.disabled\n && !unavailable\n && normalizedQuery.length >= MENTION_SEARCH_MIN_LENGTH\n setOpen(shouldSearch)\n setIsLoading(shouldSearch)\n setQuery(nextQuery)\n }, [clearResults, input.disabled, unavailable])\n\n React.useEffect(() => {\n activeRequestRef.current?.abort()\n activeRequestRef.current = null\n currentQueryRef.current = ''\n setQuery('')\n setOpen(false)\n setUnavailable(false)\n setIsLoading(false)\n clearResults()\n }, [clearResults, input.documentId])\n\n React.useEffect(() => {\n const trimmedQuery = query.trim()\n if (input.disabled || unavailable || trimmedQuery.length < MENTION_SEARCH_MIN_LENGTH) {\n currentQueryRef.current = trimmedQuery\n setOpen(false)\n setIsLoading(false)\n clearResults()\n return\n }\n\n let cancelled = false\n const controller = new AbortController()\n activeRequestRef.current = controller\n setOpen(true)\n setIsLoading(true)\n setHasSearched(false)\n const timer = window.setTimeout(() => {\n void apiCall<unknown>(\n buildMentionPrincipalUrl(input.documentId, trimmedQuery),\n {\n signal: controller.signal,\n headers: { 'x-om-forbidden-redirect': '0', 'x-om-unauthorized-redirect': '0' },\n },\n { fallback: { items: [] } },\n )\n .then((call) => {\n if (cancelled || controller.signal.aborted || currentQueryRef.current !== trimmedQuery) return\n if (!call.ok) {\n clearResults()\n if (isMentionSearchUnavailableStatus(call.status)) {\n setUnavailable(true)\n setOpen(false)\n } else {\n setHasError(true)\n setOpen(true)\n }\n return\n }\n const nextUsers = readMentionUserItems(call.result, input.fallbackLabel).slice(0, 8)\n resultQueryRef.current = trimmedQuery\n setResultQuery(trimmedQuery)\n setUsers(nextUsers)\n setHasSearched(true)\n setActiveIndex(nextUsers.length > 0 ? 0 : -1)\n })\n .catch(() => {\n if (!cancelled && !controller.signal.aborted && currentQueryRef.current === trimmedQuery) {\n clearResults()\n setHasError(true)\n setOpen(true)\n }\n })\n .finally(() => {\n if (!cancelled && !controller.signal.aborted && currentQueryRef.current === trimmedQuery) {\n setIsLoading(false)\n }\n if (activeRequestRef.current === controller) activeRequestRef.current = null\n })\n }, 250)\n\n return () => {\n cancelled = true\n window.clearTimeout(timer)\n controller.abort()\n if (activeRequestRef.current === controller) activeRequestRef.current = null\n }\n }, [clearResults, input.disabled, input.documentId, input.fallbackLabel, query, retryToken, unavailable])\n\n const isDisabled = input.disabled || unavailable\n const resultsAreCurrent = resultQuery !== null\n && resultQuery === query.trim()\n && resultQueryRef.current === resultQuery\n && currentQueryRef.current === resultQuery\n\n const pick = React.useCallback((user: MentionUser, boundQuery: string | null) => {\n if (\n isDisabled\n || !boundQuery\n || resultQueryRef.current !== boundQuery\n || currentQueryRef.current !== boundQuery\n ) return\n input.onPick({ id: user.id, name: user.label })\n activeRequestRef.current?.abort()\n activeRequestRef.current = null\n currentQueryRef.current = ''\n setQuery('')\n setOpen(false)\n setIsLoading(false)\n clearResults()\n }, [clearResults, input.onPick, isDisabled])\n\n const retry = React.useCallback(() => {\n const trimmedQuery = query.trim()\n if (input.disabled || unavailable || trimmedQuery.length < MENTION_SEARCH_MIN_LENGTH) return\n activeRequestRef.current?.abort()\n activeRequestRef.current = null\n clearResults()\n setOpen(true)\n setIsLoading(true)\n setRetryToken((token) => token + 1)\n }, [clearResults, input.disabled, query, unavailable])\n\n return {\n query,\n users,\n open,\n unavailable,\n hasError,\n isLoading,\n hasSearched,\n activeIndex,\n resultQuery,\n isDisabled,\n resultsAreCurrent,\n retry,\n onQueryChange,\n dismiss: () => setOpen(false),\n moveActive: (direction: 1 | -1) => setActiveIndex((index) => (\n nextMentionIndex(index, direction, resultsAreCurrent ? users.length : 0)\n )),\n activate: (index: number, boundQuery: string | null) => {\n if (boundQuery && resultQueryRef.current === boundQuery) setActiveIndex(index)\n },\n pick,\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ import {
2
+ firstSafeDocumentsDisplayLabel
3
+ } from "../../../lib/displayLabels.js";
4
+ import { sanitizeDocumentVersionLabel } from "../../../lib/versionLabels.js";
5
+ import { readRecord, readString } from "../documentUi.js";
6
+ function normalizeVersion(value, fallbackCreatorLabel) {
7
+ const record = readRecord(value);
8
+ if (!record) return null;
9
+ const id = readString(record, "id");
10
+ const createdAt = readString(record, "createdAt", "created_at");
11
+ if (!id || !createdAt) return null;
12
+ return {
13
+ id,
14
+ createdAt,
15
+ label: sanitizeDocumentVersionLabel(readString(record, "label")),
16
+ creatorLabel: firstSafeDocumentsDisplayLabel(
17
+ readString(record, "creatorLabel", "createdByLabel", "created_by_label"),
18
+ fallbackCreatorLabel
19
+ ) ?? ""
20
+ };
21
+ }
22
+ export {
23
+ normalizeVersion
24
+ };
25
+ //# sourceMappingURL=versionHistoryModel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/%5Bid%5D/versionHistoryModel.ts"],
4
+ "sourcesContent": ["import {\n firstSafeDocumentsDisplayLabel,\n} from '../../../lib/displayLabels'\nimport { sanitizeDocumentVersionLabel } from '../../../lib/versionLabels'\nimport { readRecord, readString } from '../documentUi'\n\nexport type DocumentVersion = {\n id: string\n label: string | null\n creatorLabel: string\n createdAt: string\n}\n\nexport function normalizeVersion(value: unknown, fallbackCreatorLabel?: string): DocumentVersion | null {\n const record = readRecord(value)\n if (!record) return null\n const id = readString(record, 'id')\n const createdAt = readString(record, 'createdAt', 'created_at')\n if (!id || !createdAt) return null\n return {\n id,\n createdAt,\n label: sanitizeDocumentVersionLabel(readString(record, 'label')),\n creatorLabel: firstSafeDocumentsDisplayLabel(\n readString(record, 'creatorLabel', 'createdByLabel', 'created_by_label'),\n fallbackCreatorLabel,\n ) ?? '',\n }\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,OACK;AACP,SAAS,oCAAoC;AAC7C,SAAS,YAAY,kBAAkB;AAShC,SAAS,iBAAiB,OAAgB,sBAAuD;AACtG,QAAM,SAAS,WAAW,KAAK;AAC/B,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,KAAK,WAAW,QAAQ,IAAI;AAClC,QAAM,YAAY,WAAW,QAAQ,aAAa,YAAY;AAC9D,MAAI,CAAC,MAAM,CAAC,UAAW,QAAO;AAC9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,6BAA6B,WAAW,QAAQ,OAAO,CAAC;AAAA,IAC/D,cAAc;AAAA,MACZ,WAAW,QAAQ,gBAAgB,kBAAkB,kBAAkB;AAAA,MACvE;AAAA,IACF,KAAK;AAAA,EACP;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,156 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Search } from "lucide-react";
5
+ import { Button } from "@open-mercato/ui/primitives/button";
6
+ import { LoadingMessage } from "@open-mercato/ui/backend/detail";
7
+ import {
8
+ Dialog,
9
+ DialogContent,
10
+ DialogDescription,
11
+ DialogFooter,
12
+ DialogHeader,
13
+ DialogTitle
14
+ } from "@open-mercato/ui/primitives/dialog";
15
+ import { Input } from "@open-mercato/ui/primitives/input";
16
+ import { Label } from "@open-mercato/ui/primitives/label";
17
+ import { SegmentedControl, SegmentedControlItem } from "@open-mercato/ui/primitives/segmented-control";
18
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
19
+ import { sanitizeDocumentsDisplayLabel } from "../../../lib/displayLabels.js";
20
+ import { EntityPickerResults } from "./EntityPickerResults.js";
21
+ import { useEntitySearch } from "./useEntitySearch.js";
22
+ function EntityPicker({ open, onOpenChange, onPick, typeFilter, excludeId }) {
23
+ const t = useT();
24
+ const inputId = `documents-entity-picker-${React.useId()}`;
25
+ const listId = `${inputId}-results`;
26
+ const search = useEntitySearch(open, typeFilter, excludeId);
27
+ const selectItem = React.useCallback((item) => {
28
+ if (!search.activeEntry || !search.isResultCurrent()) return;
29
+ const href = search.activeEntry.resolveHref(item);
30
+ const label = sanitizeDocumentsDisplayLabel(item.label);
31
+ if (!href || !label) return;
32
+ const rawItem = item.rawItem ?? {};
33
+ const values = Object.fromEntries(search.activeEntry.tokenFields.map((field) => [
34
+ field.field,
35
+ sanitizeDocumentsDisplayLabel(field.extract(rawItem))
36
+ ]));
37
+ onPick({ type: search.activeEntry.type, id: item.id, label, href, values });
38
+ onOpenChange(false);
39
+ }, [onOpenChange, onPick, search.activeEntry, search.isResultCurrent]);
40
+ const pickActiveItem = React.useCallback(() => {
41
+ const item = search.items[search.activeIndex];
42
+ if (item) selectItem(item);
43
+ }, [search.activeIndex, search.items, selectItem]);
44
+ const handleSearchKeyDown = React.useCallback((event) => {
45
+ if ((event.key === "ArrowDown" || event.key === "ArrowUp") && search.items.length === 0) {
46
+ event.preventDefault();
47
+ search.setActiveIndex(-1);
48
+ return;
49
+ }
50
+ if (event.key === "ArrowDown") {
51
+ event.preventDefault();
52
+ search.setActiveIndex((index) => Math.min(index + 1, search.items.length - 1));
53
+ return;
54
+ }
55
+ if (event.key === "ArrowUp") {
56
+ event.preventDefault();
57
+ search.setActiveIndex((index) => Math.max(index - 1, 0));
58
+ return;
59
+ }
60
+ if (event.key === "Enter") {
61
+ event.preventDefault();
62
+ pickActiveItem();
63
+ }
64
+ }, [pickActiveItem, search.items.length, search.setActiveIndex]);
65
+ if (!open) return null;
66
+ const hasQuery = search.searchValue.trim().length > 0;
67
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size: "lg", onKeyDown: (event) => {
68
+ if (event.defaultPrevented) return;
69
+ if (event.key === "Escape") {
70
+ event.preventDefault();
71
+ onOpenChange(false);
72
+ return;
73
+ }
74
+ if ((event.metaKey || event.ctrlKey) && event.key === "Enter") {
75
+ event.preventDefault();
76
+ pickActiveItem();
77
+ return;
78
+ }
79
+ }, children: [
80
+ /* @__PURE__ */ jsxs(DialogHeader, { children: [
81
+ /* @__PURE__ */ jsx(DialogTitle, { children: t("documents.entityPicker.title") }),
82
+ /* @__PURE__ */ jsx(DialogDescription, { children: t("documents.entityPicker.description") })
83
+ ] }),
84
+ !search.isRegistryReady ? /* @__PURE__ */ jsx("div", { role: "status", "aria-live": "polite", children: /* @__PURE__ */ jsx(LoadingMessage, { label: t("documents.entityPicker.loadingRegistry") }) }) : search.availableEntries.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
85
+ /* @__PURE__ */ jsx(
86
+ SegmentedControl,
87
+ {
88
+ value: search.activeEntry?.type,
89
+ onValueChange: (value) => {
90
+ const entry = search.availableEntries.find((candidate) => candidate.type === value);
91
+ if (!entry) return;
92
+ search.setActiveType(entry.type);
93
+ search.setActiveIndex(-1);
94
+ },
95
+ "aria-label": t("documents.entityPicker.typeTabs"),
96
+ className: "grid h-auto w-full grid-cols-2 gap-1 rounded-xl p-1 sm:grid-cols-4",
97
+ children: search.availableEntries.map((entry) => /* @__PURE__ */ jsx(
98
+ SegmentedControlItem,
99
+ {
100
+ value: entry.type,
101
+ className: "h-auto min-h-7 min-w-0 whitespace-normal px-2 py-1 text-center leading-tight",
102
+ children: t(entry.labelKey)
103
+ },
104
+ entry.type
105
+ ))
106
+ }
107
+ ),
108
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
109
+ /* @__PURE__ */ jsx(Label, { htmlFor: inputId, children: t("documents.entityPicker.searchLabel") }),
110
+ /* @__PURE__ */ jsx(
111
+ Input,
112
+ {
113
+ id: inputId,
114
+ value: search.searchValue,
115
+ onChange: (event) => search.setSearchValue(event.target.value),
116
+ placeholder: t("documents.entityPicker.searchPlaceholder"),
117
+ leftIcon: /* @__PURE__ */ jsx(Search, {}),
118
+ role: "combobox",
119
+ "aria-expanded": hasQuery,
120
+ "aria-controls": listId,
121
+ "aria-autocomplete": "list",
122
+ "aria-activedescendant": search.activeIndex >= 0 && search.activeIndex < search.items.length ? `${listId}-option-${search.activeIndex}` : void 0,
123
+ onKeyDown: handleSearchKeyDown
124
+ }
125
+ )
126
+ ] }),
127
+ /* @__PURE__ */ jsx(
128
+ EntityPickerResults,
129
+ {
130
+ listId,
131
+ items: search.items,
132
+ activeIndex: search.activeIndex,
133
+ hasQuery,
134
+ isLoading: search.isLoading,
135
+ hasSearched: search.hasSearched,
136
+ hasError: search.hasError,
137
+ prompt: t("documents.entityPicker.prompt"),
138
+ loadingLabel: t("documents.entityPicker.loading"),
139
+ emptyLabel: t("documents.entityPicker.noMatches"),
140
+ errorLabel: t("documents.entityPicker.error.search"),
141
+ retryLabel: t("documents.actions.retry"),
142
+ onRetry: search.retry,
143
+ onActiveIndexChange: search.setActiveIndex,
144
+ onSelect: selectItem
145
+ }
146
+ )
147
+ ] }) : /* @__PURE__ */ jsx("div", { className: "rounded-md border border-border bg-muted/20 px-3 py-8 text-center text-sm text-muted-foreground", children: t(search.allEntries.length === 0 ? "documents.entityPicker.empty" : "documents.entityPicker.unavailable") }),
148
+ /* @__PURE__ */ jsx(DialogFooter, { children: /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: t("documents.actions.cancel") }) })
149
+ ] }) });
150
+ }
151
+ var EntityPicker_default = EntityPicker;
152
+ export {
153
+ EntityPicker,
154
+ EntityPicker_default as default
155
+ };
156
+ //# sourceMappingURL=EntityPicker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/components/EntityPicker.tsx"],
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Search } from 'lucide-react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { LoadingMessage } from '@open-mercato/ui/backend/detail'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@open-mercato/ui/primitives/dialog'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { DocumentEntityType } from '../../../lib/entityRegistry'\nimport { sanitizeDocumentsDisplayLabel } from '../../../lib/displayLabels'\nimport { EntityPickerResults } from './EntityPickerResults'\nimport { useEntitySearch, type EntitySearchItem } from './useEntitySearch'\n\nexport type EntityPickerSelection = {\n type: DocumentEntityType\n id: string\n label: string\n href: string\n values: Record<string, string | null>\n}\nexport type EntityPickerProps = {\n open: boolean\n onOpenChange: (open: boolean) => void\n onPick: (pick: EntityPickerSelection) => void\n typeFilter?: DocumentEntityType[]\n excludeId?: string\n}\n\nexport function EntityPicker({ open, onOpenChange, onPick, typeFilter, excludeId }: EntityPickerProps) {\n const t = useT()\n const inputId = `documents-entity-picker-${React.useId()}`\n const listId = `${inputId}-results`\n const search = useEntitySearch(open, typeFilter, excludeId)\n\n const selectItem = React.useCallback((item: EntitySearchItem) => {\n if (!search.activeEntry || !search.isResultCurrent()) return\n const href = search.activeEntry.resolveHref(item)\n const label = sanitizeDocumentsDisplayLabel(item.label)\n if (!href || !label) return\n const rawItem = item.rawItem ?? {}\n const values = Object.fromEntries(search.activeEntry.tokenFields.map((field) => [\n field.field,\n sanitizeDocumentsDisplayLabel(field.extract(rawItem)),\n ]))\n onPick({ type: search.activeEntry.type, id: item.id, label, href, values })\n onOpenChange(false)\n }, [onOpenChange, onPick, search.activeEntry, search.isResultCurrent])\n\n const pickActiveItem = React.useCallback(() => {\n const item = search.items[search.activeIndex]\n if (item) selectItem(item)\n }, [search.activeIndex, search.items, selectItem])\n\n const handleSearchKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLInputElement>) => {\n if ((event.key === 'ArrowDown' || event.key === 'ArrowUp') && search.items.length === 0) {\n event.preventDefault()\n search.setActiveIndex(-1)\n return\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n search.setActiveIndex((index) => Math.min(index + 1, search.items.length - 1))\n return\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n search.setActiveIndex((index) => Math.max(index - 1, 0))\n return\n }\n if (event.key === 'Enter') {\n event.preventDefault()\n pickActiveItem()\n }\n }, [pickActiveItem, search.items.length, search.setActiveIndex])\n\n if (!open) return null\n const hasQuery = search.searchValue.trim().length > 0\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent size=\"lg\" onKeyDown={(event) => {\n if (event.defaultPrevented) return\n if (event.key === 'Escape') { event.preventDefault(); onOpenChange(false); return }\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') { event.preventDefault(); pickActiveItem(); return }\n }}>\n <DialogHeader>\n <DialogTitle>{t('documents.entityPicker.title')}</DialogTitle>\n <DialogDescription>{t('documents.entityPicker.description')}</DialogDescription>\n </DialogHeader>\n {!search.isRegistryReady ? (\n <div role=\"status\" aria-live=\"polite\">\n <LoadingMessage label={t('documents.entityPicker.loadingRegistry')} />\n </div>\n ) : search.availableEntries.length > 0 ? (\n <div className=\"space-y-4\">\n <SegmentedControl\n value={search.activeEntry?.type}\n onValueChange={(value) => {\n const entry = search.availableEntries.find((candidate) => candidate.type === value)\n if (!entry) return\n search.setActiveType(entry.type)\n search.setActiveIndex(-1)\n }}\n aria-label={t('documents.entityPicker.typeTabs')}\n className=\"grid h-auto w-full grid-cols-2 gap-1 rounded-xl p-1 sm:grid-cols-4\"\n >\n {search.availableEntries.map((entry) => (\n <SegmentedControlItem\n key={entry.type}\n value={entry.type}\n className=\"h-auto min-h-7 min-w-0 whitespace-normal px-2 py-1 text-center leading-tight\"\n >\n {t(entry.labelKey)}\n </SegmentedControlItem>\n ))}\n </SegmentedControl>\n <div className=\"space-y-2\">\n <Label htmlFor={inputId}>{t('documents.entityPicker.searchLabel')}</Label>\n <Input\n id={inputId}\n value={search.searchValue}\n onChange={(event) => search.setSearchValue(event.target.value)}\n placeholder={t('documents.entityPicker.searchPlaceholder')}\n leftIcon={<Search />}\n role=\"combobox\"\n aria-expanded={hasQuery}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={search.activeIndex >= 0 && search.activeIndex < search.items.length ? `${listId}-option-${search.activeIndex}` : undefined}\n onKeyDown={handleSearchKeyDown}\n />\n </div>\n <EntityPickerResults\n listId={listId}\n items={search.items}\n activeIndex={search.activeIndex}\n hasQuery={hasQuery}\n isLoading={search.isLoading}\n hasSearched={search.hasSearched}\n hasError={search.hasError}\n prompt={t('documents.entityPicker.prompt')}\n loadingLabel={t('documents.entityPicker.loading')}\n emptyLabel={t('documents.entityPicker.noMatches')}\n errorLabel={t('documents.entityPicker.error.search')}\n retryLabel={t('documents.actions.retry')}\n onRetry={search.retry}\n onActiveIndexChange={search.setActiveIndex}\n onSelect={selectItem}\n />\n </div>\n ) : (\n <div className=\"rounded-md border border-border bg-muted/20 px-3 py-8 text-center text-sm text-muted-foreground\">\n {t(search.allEntries.length === 0 ? 'documents.entityPicker.empty' : 'documents.entityPicker.unavailable')}\n </div>\n )}\n <DialogFooter><Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>{t('documents.actions.cancel')}</Button></DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\nexport default EntityPicker\n"],
5
+ "mappings": ";AA8FQ,SACE,KADF;AA5FR,YAAY,WAAW;AACvB,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,kBAAkB,4BAA4B;AACvD,SAAS,YAAY;AAErB,SAAS,qCAAqC;AAC9C,SAAS,2BAA2B;AACpC,SAAS,uBAA8C;AAiBhD,SAAS,aAAa,EAAE,MAAM,cAAc,QAAQ,YAAY,UAAU,GAAsB;AACrG,QAAM,IAAI,KAAK;AACf,QAAM,UAAU,2BAA2B,MAAM,MAAM,CAAC;AACxD,QAAM,SAAS,GAAG,OAAO;AACzB,QAAM,SAAS,gBAAgB,MAAM,YAAY,SAAS;AAE1D,QAAM,aAAa,MAAM,YAAY,CAAC,SAA2B;AAC/D,QAAI,CAAC,OAAO,eAAe,CAAC,OAAO,gBAAgB,EAAG;AACtD,UAAM,OAAO,OAAO,YAAY,YAAY,IAAI;AAChD,UAAM,QAAQ,8BAA8B,KAAK,KAAK;AACtD,QAAI,CAAC,QAAQ,CAAC,MAAO;AACrB,UAAM,UAAU,KAAK,WAAW,CAAC;AACjC,UAAM,SAAS,OAAO,YAAY,OAAO,YAAY,YAAY,IAAI,CAAC,UAAU;AAAA,MAC9E,MAAM;AAAA,MACN,8BAA8B,MAAM,QAAQ,OAAO,CAAC;AAAA,IACtD,CAAC,CAAC;AACF,WAAO,EAAE,MAAM,OAAO,YAAY,MAAM,IAAI,KAAK,IAAI,OAAO,MAAM,OAAO,CAAC;AAC1E,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,cAAc,QAAQ,OAAO,aAAa,OAAO,eAAe,CAAC;AAErE,QAAM,iBAAiB,MAAM,YAAY,MAAM;AAC7C,UAAM,OAAO,OAAO,MAAM,OAAO,WAAW;AAC5C,QAAI,KAAM,YAAW,IAAI;AAAA,EAC3B,GAAG,CAAC,OAAO,aAAa,OAAO,OAAO,UAAU,CAAC;AAEjD,QAAM,sBAAsB,MAAM,YAAY,CAAC,UAAiD;AAC9F,SAAK,MAAM,QAAQ,eAAe,MAAM,QAAQ,cAAc,OAAO,MAAM,WAAW,GAAG;AACvF,YAAM,eAAe;AACrB,aAAO,eAAe,EAAE;AACxB;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,aAAa;AAC7B,YAAM,eAAe;AACrB,aAAO,eAAe,CAAC,UAAU,KAAK,IAAI,QAAQ,GAAG,OAAO,MAAM,SAAS,CAAC,CAAC;AAC7E;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,WAAW;AAC3B,YAAM,eAAe;AACrB,aAAO,eAAe,CAAC,UAAU,KAAK,IAAI,QAAQ,GAAG,CAAC,CAAC;AACvD;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,SAAS;AACzB,YAAM,eAAe;AACrB,qBAAe;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,gBAAgB,OAAO,MAAM,QAAQ,OAAO,cAAc,CAAC;AAE/D,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,WAAW,OAAO,YAAY,KAAK,EAAE,SAAS;AACpD,SACE,oBAAC,UAAO,MAAY,cAClB,+BAAC,iBAAc,MAAK,MAAK,WAAW,CAAC,UAAU;AAC7C,QAAI,MAAM,iBAAkB;AAC5B,QAAI,MAAM,QAAQ,UAAU;AAAE,YAAM,eAAe;AAAG,mBAAa,KAAK;AAAG;AAAA,IAAO;AAClF,SAAK,MAAM,WAAW,MAAM,YAAY,MAAM,QAAQ,SAAS;AAAE,YAAM,eAAe;AAAG,qBAAe;AAAG;AAAA,IAAO;AAAA,EACpH,GACE;AAAA,yBAAC,gBACC;AAAA,0BAAC,eAAa,YAAE,8BAA8B,GAAE;AAAA,MAChD,oBAAC,qBAAmB,YAAE,oCAAoC,GAAE;AAAA,OAC9D;AAAA,IACC,CAAC,OAAO,kBACP,oBAAC,SAAI,MAAK,UAAS,aAAU,UAC3B,8BAAC,kBAAe,OAAO,EAAE,wCAAwC,GAAG,GACtE,IACE,OAAO,iBAAiB,SAAS,IACnC,qBAAC,SAAI,WAAU,aACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,OAAO,aAAa;AAAA,UAC3B,eAAe,CAAC,UAAU;AACxB,kBAAM,QAAQ,OAAO,iBAAiB,KAAK,CAAC,cAAc,UAAU,SAAS,KAAK;AAClF,gBAAI,CAAC,MAAO;AACZ,mBAAO,cAAc,MAAM,IAAI;AAC/B,mBAAO,eAAe,EAAE;AAAA,UAC1B;AAAA,UACA,cAAY,EAAE,iCAAiC;AAAA,UAC/C,WAAU;AAAA,UAET,iBAAO,iBAAiB,IAAI,CAAC,UAC5B;AAAA,YAAC;AAAA;AAAA,cAEC,OAAO,MAAM;AAAA,cACb,WAAU;AAAA,cAET,YAAE,MAAM,QAAQ;AAAA;AAAA,YAJZ,MAAM;AAAA,UAKb,CACD;AAAA;AAAA,MACH;AAAA,MACA,qBAAC,SAAI,WAAU,aACb;AAAA,4BAAC,SAAM,SAAS,SAAU,YAAE,oCAAoC,GAAE;AAAA,QAClE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,OAAO,OAAO;AAAA,YACd,UAAU,CAAC,UAAU,OAAO,eAAe,MAAM,OAAO,KAAK;AAAA,YAC7D,aAAa,EAAE,0CAA0C;AAAA,YACzD,UAAU,oBAAC,UAAO;AAAA,YAClB,MAAK;AAAA,YACL,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf,qBAAkB;AAAA,YAClB,yBAAuB,OAAO,eAAe,KAAK,OAAO,cAAc,OAAO,MAAM,SAAS,GAAG,MAAM,WAAW,OAAO,WAAW,KAAK;AAAA,YACxI,WAAW;AAAA;AAAA,QACb;AAAA,SACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO,OAAO;AAAA,UACd,aAAa,OAAO;AAAA,UACpB;AAAA,UACA,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,UAAU,OAAO;AAAA,UACjB,QAAQ,EAAE,+BAA+B;AAAA,UACzC,cAAc,EAAE,gCAAgC;AAAA,UAChD,YAAY,EAAE,kCAAkC;AAAA,UAChD,YAAY,EAAE,qCAAqC;AAAA,UACnD,YAAY,EAAE,yBAAyB;AAAA,UACvC,SAAS,OAAO;AAAA,UAChB,qBAAqB,OAAO;AAAA,UAC5B,UAAU;AAAA;AAAA,MACZ;AAAA,OACF,IAEA,oBAAC,SAAI,WAAU,mGACZ,YAAE,OAAO,WAAW,WAAW,IAAI,iCAAiC,oCAAoC,GAC3G;AAAA,IAEF,oBAAC,gBAAa,8BAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM,aAAa,KAAK,GAAI,YAAE,0BAA0B,GAAE,GAAS;AAAA,KACpI,GACF;AAEJ;AAEA,IAAO,uBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Spinner } from "@open-mercato/ui/primitives/spinner";
4
+ import { Button } from "@open-mercato/ui/primitives/button";
5
+ import { ErrorMessage } from "@open-mercato/ui/backend/detail";
6
+ import { cn } from "@open-mercato/shared/lib/utils";
7
+ function EntityPickerResults(props) {
8
+ return /* @__PURE__ */ jsxs("div", { id: props.listId, role: "listbox", className: "min-h-56 max-h-80 overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground", children: [
9
+ !props.hasQuery ? /* @__PURE__ */ jsx("div", { className: "px-3 py-8 text-center text-sm text-muted-foreground", children: props.prompt }) : null,
10
+ props.hasQuery && props.isLoading ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 px-3 py-8 text-sm text-muted-foreground", children: [
11
+ /* @__PURE__ */ jsx(Spinner, { className: "size-4" }),
12
+ /* @__PURE__ */ jsx("span", { children: props.loadingLabel })
13
+ ] }) : null,
14
+ props.hasQuery && !props.isLoading && props.hasSearched && props.items.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-8 text-center text-sm text-muted-foreground", children: props.emptyLabel }) : null,
15
+ props.hasQuery && !props.isLoading && props.hasError ? /* @__PURE__ */ jsx(
16
+ ErrorMessage,
17
+ {
18
+ label: props.errorLabel,
19
+ action: /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", variant: "outline", onClick: props.onRetry, children: props.retryLabel })
20
+ }
21
+ ) : null,
22
+ !props.isLoading && !props.hasError && props.items.map((item, index) => /* @__PURE__ */ jsx(
23
+ Button,
24
+ {
25
+ id: `${props.listId}-option-${index}`,
26
+ type: "button",
27
+ variant: "ghost",
28
+ role: "option",
29
+ "aria-selected": index === props.activeIndex,
30
+ className: cn("h-auto w-full justify-start px-3 py-2 text-left", index === props.activeIndex ? "bg-accent text-accent-foreground" : null),
31
+ onMouseDown: (event) => event.preventDefault(),
32
+ onMouseEnter: () => props.onActiveIndexChange(index),
33
+ onClick: () => props.onSelect(item),
34
+ children: /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
35
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium", children: item.label }),
36
+ item.subtitle ? /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-muted-foreground", children: item.subtitle }) : null
37
+ ] })
38
+ },
39
+ item.id
40
+ ))
41
+ ] });
42
+ }
43
+ export {
44
+ EntityPickerResults
45
+ };
46
+ //# sourceMappingURL=EntityPickerResults.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/documents/backend/documents/components/EntityPickerResults.tsx"],
4
+ "sourcesContent": ["\"use client\"\n\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { ErrorMessage } from '@open-mercato/ui/backend/detail'\nimport { cn } from '@open-mercato/shared/lib/utils'\nimport type { EntitySearchItem } from './useEntitySearch'\n\ntype EntityPickerResultsProps = {\n listId: string\n items: EntitySearchItem[]\n activeIndex: number\n hasQuery: boolean\n isLoading: boolean\n hasSearched: boolean\n hasError: boolean\n prompt: string\n loadingLabel: string\n emptyLabel: string\n errorLabel: string\n retryLabel: string\n onRetry: () => void\n onActiveIndexChange: (index: number) => void\n onSelect: (item: EntitySearchItem) => void\n}\n\nexport function EntityPickerResults(props: EntityPickerResultsProps) {\n return (\n <div id={props.listId} role=\"listbox\" className=\"min-h-56 max-h-80 overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground\">\n {!props.hasQuery ? <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">{props.prompt}</div> : null}\n {props.hasQuery && props.isLoading ? (\n <div className=\"flex items-center justify-center gap-2 px-3 py-8 text-sm text-muted-foreground\"><Spinner className=\"size-4\" /><span>{props.loadingLabel}</span></div>\n ) : null}\n {props.hasQuery && !props.isLoading && props.hasSearched && props.items.length === 0 ? (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">{props.emptyLabel}</div>\n ) : null}\n {props.hasQuery && !props.isLoading && props.hasError ? (\n <ErrorMessage\n label={props.errorLabel}\n action={<Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={props.onRetry}>{props.retryLabel}</Button>}\n />\n ) : null}\n {!props.isLoading && !props.hasError && props.items.map((item, index) => (\n <Button\n id={`${props.listId}-option-${index}`}\n key={item.id}\n type=\"button\"\n variant=\"ghost\"\n role=\"option\"\n aria-selected={index === props.activeIndex}\n className={cn('h-auto w-full justify-start px-3 py-2 text-left', index === props.activeIndex ? 'bg-accent text-accent-foreground' : null)}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => props.onActiveIndexChange(index)}\n onClick={() => props.onSelect(item)}\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium\">{item.label}</span>\n {item.subtitle ? <span className=\"block truncate text-xs text-muted-foreground\">{item.subtitle}</span> : null}\n </span>\n </Button>\n ))}\n </div>\n )\n}\n"],
5
+ "mappings": ";AA6ByB,cAEjB,YAFiB;AA3BzB,SAAS,eAAe;AACxB,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAC7B,SAAS,UAAU;AAqBZ,SAAS,oBAAoB,OAAiC;AACnE,SACE,qBAAC,SAAI,IAAI,MAAM,QAAQ,MAAK,WAAU,WAAU,4GAC7C;AAAA,KAAC,MAAM,WAAW,oBAAC,SAAI,WAAU,uDAAuD,gBAAM,QAAO,IAAS;AAAA,IAC9G,MAAM,YAAY,MAAM,YACvB,qBAAC,SAAI,WAAU,kFAAiF;AAAA,0BAAC,WAAQ,WAAU,UAAS;AAAA,MAAE,oBAAC,UAAM,gBAAM,cAAa;AAAA,OAAO,IAC7J;AAAA,IACH,MAAM,YAAY,CAAC,MAAM,aAAa,MAAM,eAAe,MAAM,MAAM,WAAW,IACjF,oBAAC,SAAI,WAAU,uDAAuD,gBAAM,YAAW,IACrF;AAAA,IACH,MAAM,YAAY,CAAC,MAAM,aAAa,MAAM,WAC3C;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,MAAM;AAAA,QACb,QAAQ,oBAAC,UAAO,MAAK,UAAS,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAM,SAAU,gBAAM,YAAW;AAAA;AAAA,IACtG,IACE;AAAA,IACH,CAAC,MAAM,aAAa,CAAC,MAAM,YAAY,MAAM,MAAM,IAAI,CAAC,MAAM,UAC7D;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,GAAG,MAAM,MAAM,WAAW,KAAK;AAAA,QAEnC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,iBAAe,UAAU,MAAM;AAAA,QAC/B,WAAW,GAAG,mDAAmD,UAAU,MAAM,cAAc,qCAAqC,IAAI;AAAA,QACxI,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,QAC7C,cAAc,MAAM,MAAM,oBAAoB,KAAK;AAAA,QACnD,SAAS,MAAM,MAAM,SAAS,IAAI;AAAA,QAElC,+BAAC,UAAK,WAAU,WACd;AAAA,8BAAC,UAAK,WAAU,sCAAsC,eAAK,OAAM;AAAA,UAChE,KAAK,WAAW,oBAAC,UAAK,WAAU,gDAAgD,eAAK,UAAS,IAAU;AAAA,WAC3G;AAAA;AAAA,MAbK,KAAK;AAAA,IAcZ,CACD;AAAA,KACH;AAEJ;",
6
+ "names": []
7
+ }