zcw-shared 2.25.0 → 2.26.0

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 (227) hide show
  1. package/README.md +73 -13
  2. package/dist/functions/ai/buildResolvedLlmToolsList.d.ts +0 -1
  3. package/dist/functions/ai/buildResolvedLlmToolsList.js +0 -1
  4. package/dist/functions/ai/buildResolvedLlmToolsList.js.map +1 -1
  5. package/dist/functions/array/filterListExcludingIds.d.ts +0 -1
  6. package/dist/functions/array/filterListExcludingIds.js +0 -1
  7. package/dist/functions/array/filterListExcludingIds.js.map +1 -1
  8. package/dist/functions/browser/readBrowserAppendToBodyDeps.d.ts +3 -0
  9. package/dist/functions/browser/readBrowserAppendToBodyDeps.js +8 -0
  10. package/dist/functions/browser/readBrowserAppendToBodyDeps.js.map +1 -0
  11. package/dist/functions/browser/readBrowserDetectDeps.d.ts +2 -0
  12. package/dist/functions/browser/readBrowserDetectDeps.js +8 -5
  13. package/dist/functions/browser/readBrowserDetectDeps.js.map +1 -1
  14. package/dist/functions/browser/readBrowserHost.d.ts +57 -0
  15. package/dist/functions/browser/readBrowserHost.js +61 -0
  16. package/dist/functions/browser/readBrowserHost.js.map +1 -0
  17. package/dist/functions/browser/readBrowserImageCompressDeps.d.ts +2 -0
  18. package/dist/functions/browser/readBrowserImageCompressDeps.js +13 -10
  19. package/dist/functions/browser/readBrowserImageCompressDeps.js.map +1 -1
  20. package/dist/functions/browser/readBrowserLassoSelectionEnvironment.d.ts +4 -0
  21. package/dist/functions/browser/readBrowserLassoSelectionEnvironment.js +23 -0
  22. package/dist/functions/browser/readBrowserLassoSelectionEnvironment.js.map +1 -0
  23. package/dist/functions/browser/readBrowserVueHookDeps.d.ts +14 -0
  24. package/dist/functions/browser/readBrowserVueHookDeps.js +85 -0
  25. package/dist/functions/browser/readBrowserVueHookDeps.js.map +1 -0
  26. package/dist/functions/browser/requireBrowserLocalStorage.d.ts +2 -1
  27. package/dist/functions/browser/requireBrowserLocalStorage.js +3 -6
  28. package/dist/functions/browser/requireBrowserLocalStorage.js.map +1 -1
  29. package/dist/functions/chat/chatAppearancePrefs.d.ts +6 -1
  30. package/dist/functions/chat/chatAppearancePrefs.js +6 -4
  31. package/dist/functions/chat/chatAppearancePrefs.js.map +1 -1
  32. package/dist/functions/chat/createBrowserChatAppearanceModeAccess.d.ts +2 -1
  33. package/dist/functions/chat/createBrowserChatAppearanceModeAccess.js +8 -11
  34. package/dist/functions/chat/createBrowserChatAppearanceModeAccess.js.map +1 -1
  35. package/dist/functions/chat/createBrowserChatDownloadDirectoryPrefAccess.d.ts +2 -1
  36. package/dist/functions/chat/createBrowserChatDownloadDirectoryPrefAccess.js +12 -12
  37. package/dist/functions/chat/createBrowserChatDownloadDirectoryPrefAccess.js.map +1 -1
  38. package/dist/functions/chat/createBrowserChatFileMessageLocalPathAccess.d.ts +2 -1
  39. package/dist/functions/chat/createBrowserChatFileMessageLocalPathAccess.js +7 -14
  40. package/dist/functions/chat/createBrowserChatFileMessageLocalPathAccess.js.map +1 -1
  41. package/dist/functions/chat/createBrowserChatRootFontSizeAccess.d.ts +2 -1
  42. package/dist/functions/chat/createBrowserChatRootFontSizeAccess.js +14 -13
  43. package/dist/functions/chat/createBrowserChatRootFontSizeAccess.js.map +1 -1
  44. package/dist/functions/cloudDisk/collectElementIdsInContentLassoBox.d.ts +1 -19
  45. package/dist/functions/cloudDisk/collectElementIdsInContentLassoBox.js +1 -34
  46. package/dist/functions/cloudDisk/collectElementIdsInContentLassoBox.js.map +1 -1
  47. package/dist/functions/cloudDisk/createBrowserCloudDiskPrivacyStorageAccess.d.ts +2 -1
  48. package/dist/functions/cloudDisk/createBrowserCloudDiskPrivacyStorageAccess.js +11 -19
  49. package/dist/functions/cloudDisk/createBrowserCloudDiskPrivacyStorageAccess.js.map +1 -1
  50. package/dist/functions/cloudDisk/createBrowserCloudDiskQuickAccessStorageAccess.d.ts +2 -1
  51. package/dist/functions/cloudDisk/createBrowserCloudDiskQuickAccessStorageAccess.js +7 -11
  52. package/dist/functions/cloudDisk/createBrowserCloudDiskQuickAccessStorageAccess.js.map +1 -1
  53. package/dist/functions/dom/appTheme.d.ts +10 -0
  54. package/dist/functions/dom/appTheme.js +11 -0
  55. package/dist/functions/dom/appTheme.js.map +1 -0
  56. package/dist/functions/dom/copyHtmlAndPlainToClipboard.d.ts +3 -1
  57. package/dist/functions/dom/copyHtmlAndPlainToClipboard.js +14 -10
  58. package/dist/functions/dom/copyHtmlAndPlainToClipboard.js.map +1 -1
  59. package/dist/functions/dom/copyTextToClipboard.d.ts +3 -1
  60. package/dist/functions/dom/copyTextToClipboard.js +5 -4
  61. package/dist/functions/dom/copyTextToClipboard.js.map +1 -1
  62. package/dist/functions/dom/createTooltipLongPressHandlers.d.ts +24 -0
  63. package/dist/functions/dom/createTooltipLongPressHandlers.js +84 -0
  64. package/dist/functions/dom/createTooltipLongPressHandlers.js.map +1 -0
  65. package/dist/functions/dom/domDocumentSelection.d.ts +4 -0
  66. package/dist/functions/dom/domDocumentSelection.js +39 -0
  67. package/dist/functions/dom/domDocumentSelection.js.map +1 -0
  68. package/dist/functions/dom/domSelectionInElement.d.ts +4 -3
  69. package/dist/functions/dom/domSelectionInElement.js +10 -10
  70. package/dist/functions/dom/domSelectionInElement.js.map +1 -1
  71. package/dist/functions/dom/fetchBlobFromUrl.d.ts +7 -1
  72. package/dist/functions/dom/fetchBlobFromUrl.js +7 -5
  73. package/dist/functions/dom/fetchBlobFromUrl.js.map +1 -1
  74. package/dist/functions/dom/fileDrag.d.ts +11 -0
  75. package/dist/functions/dom/fileDrag.js +14 -0
  76. package/dist/functions/dom/fileDrag.js.map +1 -0
  77. package/dist/functions/dom/imageBlobToPng.d.ts +5 -4
  78. package/dist/functions/dom/imageBlobToPng.js +23 -16
  79. package/dist/functions/dom/imageBlobToPng.js.map +1 -1
  80. package/dist/functions/dom/lassoSelection.d.ts +84 -0
  81. package/dist/functions/dom/lassoSelection.js +199 -0
  82. package/dist/functions/dom/lassoSelection.js.map +1 -0
  83. package/dist/functions/dom/readBrowserDomDeps.d.ts +41 -0
  84. package/dist/functions/dom/readBrowserDomDeps.js +63 -0
  85. package/dist/functions/dom/readBrowserDomDeps.js.map +1 -0
  86. package/dist/functions/dom/resolveOverlayTeleportParent.d.ts +7 -0
  87. package/dist/functions/dom/resolveOverlayTeleportParent.js +11 -0
  88. package/dist/functions/dom/resolveOverlayTeleportParent.js.map +1 -0
  89. package/dist/functions/dom/safeBrowserDom.d.ts +17 -0
  90. package/dist/functions/dom/safeBrowserDom.js +42 -0
  91. package/dist/functions/dom/safeBrowserDom.js.map +1 -0
  92. package/dist/functions/dom/writeImageBlobToClipboard.d.ts +5 -1
  93. package/dist/functions/dom/writeImageBlobToClipboard.js +8 -5
  94. package/dist/functions/dom/writeImageBlobToClipboard.js.map +1 -1
  95. package/dist/functions/download/createBrowserDownloadDepsFromGlobalThis.d.ts +2 -0
  96. package/dist/functions/download/createBrowserDownloadDepsFromGlobalThis.js +9 -10
  97. package/dist/functions/download/createBrowserDownloadDepsFromGlobalThis.js.map +1 -1
  98. package/dist/functions/file/isJpegImageFile.d.ts +0 -1
  99. package/dist/functions/file/isJpegImageFile.js +0 -1
  100. package/dist/functions/file/isJpegImageFile.js.map +1 -1
  101. package/dist/functions/im/assignChatConversationToWindowLocation.d.ts +5 -1
  102. package/dist/functions/im/assignChatConversationToWindowLocation.js +5 -4
  103. package/dist/functions/im/assignChatConversationToWindowLocation.js.map +1 -1
  104. package/dist/functions/im/copyUsingClonedRangesOrMessagePlainText.d.ts +5 -1
  105. package/dist/functions/im/copyUsingClonedRangesOrMessagePlainText.js +11 -8
  106. package/dist/functions/im/copyUsingClonedRangesOrMessagePlainText.js.map +1 -1
  107. package/dist/functions/im/executeCopyChatMessageContent.d.ts +4 -1
  108. package/dist/functions/im/executeCopyChatMessageContent.js +6 -3
  109. package/dist/functions/im/executeCopyChatMessageContent.js.map +1 -1
  110. package/dist/functions/im/imBubbleSelectionClipboard.d.ts +2 -1
  111. package/dist/functions/im/imBubbleSelectionClipboard.js +10 -11
  112. package/dist/functions/im/imBubbleSelectionClipboard.js.map +1 -1
  113. package/dist/functions/im/imChatMessagePagination.d.ts +0 -1
  114. package/dist/functions/im/imChatMessagePagination.js +0 -1
  115. package/dist/functions/im/imChatMessagePagination.js.map +1 -1
  116. package/dist/functions/im/imImagePixelExtra.d.ts +0 -1
  117. package/dist/functions/im/imImagePixelExtra.js +0 -1
  118. package/dist/functions/im/imImagePixelExtra.js.map +1 -1
  119. package/dist/functions/im/imOrchestrationTypes.d.ts +5 -0
  120. package/dist/functions/im/imOrchestrationTypes.js +2 -0
  121. package/dist/functions/im/imOrchestrationTypes.js.map +1 -0
  122. package/dist/functions/im/imOutboundMediaHelpers.d.ts +7 -1
  123. package/dist/functions/im/imOutboundMediaHelpers.js +15 -7
  124. package/dist/functions/im/imOutboundMediaHelpers.js.map +1 -1
  125. package/dist/functions/im/index.d.ts +2 -2
  126. package/dist/functions/im/index.js +2 -2
  127. package/dist/functions/im/index.js.map +1 -1
  128. package/dist/functions/im/newImClientMessageIdFromBrowser.d.ts +4 -3
  129. package/dist/functions/im/newImClientMessageIdFromBrowser.js +7 -15
  130. package/dist/functions/im/newImClientMessageIdFromBrowser.js.map +1 -1
  131. package/dist/functions/number/clampIndex.d.ts +1 -0
  132. package/dist/functions/number/clampIndex.js +6 -0
  133. package/dist/functions/number/clampIndex.js.map +1 -0
  134. package/dist/functions/release/capacitorOtaReleaseManifestFetch.d.ts +2 -1
  135. package/dist/functions/release/capacitorOtaReleaseManifestFetch.js +3 -2
  136. package/dist/functions/release/capacitorOtaReleaseManifestFetch.js.map +1 -1
  137. package/dist/functions/release/capacitorReleaseManifestFetch.d.ts +2 -1
  138. package/dist/functions/release/capacitorReleaseManifestFetch.js +3 -2
  139. package/dist/functions/release/capacitorReleaseManifestFetch.js.map +1 -1
  140. package/dist/functions/release/capacitorUpdateDefaults.d.ts +4 -0
  141. package/dist/functions/release/capacitorUpdateDefaults.js +10 -10
  142. package/dist/functions/release/capacitorUpdateDefaults.js.map +1 -1
  143. package/dist/functions/release/createCapacitorUpdateFetchDeps.js +13 -7
  144. package/dist/functions/release/createCapacitorUpdateFetchDeps.js.map +1 -1
  145. package/dist/functions/release/createReleaseManifestFetchDeps.d.ts +1 -2
  146. package/dist/functions/release/createReleaseManifestFetchDeps.js +5 -10
  147. package/dist/functions/release/createReleaseManifestFetchDeps.js.map +1 -1
  148. package/dist/functions/release/electronReleaseManifestFetch.d.ts +4 -1
  149. package/dist/functions/release/electronReleaseManifestFetch.js +12 -7
  150. package/dist/functions/release/electronReleaseManifestFetch.js.map +1 -1
  151. package/dist/functions/release/isCapacitorWebViewOnViteDevServer.js +4 -4
  152. package/dist/functions/release/isCapacitorWebViewOnViteDevServer.js.map +1 -1
  153. package/dist/functions/release/readBrowserReleaseDeps.d.ts +14 -0
  154. package/dist/functions/release/readBrowserReleaseDeps.js +19 -0
  155. package/dist/functions/release/readBrowserReleaseDeps.js.map +1 -0
  156. package/dist/functions/release/releaseUpdateDismissSession.d.ts +3 -2
  157. package/dist/functions/release/releaseUpdateDismissSession.js +10 -7
  158. package/dist/functions/release/releaseUpdateDismissSession.js.map +1 -1
  159. package/dist/functions/release/verifyHttpContentLength.d.ts +2 -0
  160. package/dist/functions/release/verifyHttpContentLength.js +4 -1
  161. package/dist/functions/release/verifyHttpContentLength.js.map +1 -1
  162. package/dist/functions/storage/createBrowserSessionStorageKit.d.ts +12 -0
  163. package/dist/functions/storage/createBrowserSessionStorageKit.js +16 -0
  164. package/dist/functions/storage/createBrowserSessionStorageKit.js.map +1 -0
  165. package/dist/functions/storage/createBrowserStringStorageKit.d.ts +12 -0
  166. package/dist/functions/storage/createBrowserStringStorageKit.js +14 -0
  167. package/dist/functions/storage/createBrowserStringStorageKit.js.map +1 -0
  168. package/dist/functions/wallet/createBrowserWalletPayPasswordSessionAccess.d.ts +2 -1
  169. package/dist/functions/wallet/createBrowserWalletPayPasswordSessionAccess.js +5 -9
  170. package/dist/functions/wallet/createBrowserWalletPayPasswordSessionAccess.js.map +1 -1
  171. package/dist/permissions/catalog.d.ts +4 -0
  172. package/dist/permissions/catalog.js +22 -0
  173. package/dist/permissions/catalog.js.map +1 -1
  174. package/dist/vue-hooks/browser/useBrowserFileObjectUrlMap.d.ts +7 -0
  175. package/dist/vue-hooks/browser/useBrowserFileObjectUrlMap.js +7 -0
  176. package/dist/vue-hooks/browser/useBrowserFileObjectUrlMap.js.map +1 -0
  177. package/dist/vue-hooks/browser/useFileObjectUrlMap.d.ts +19 -0
  178. package/dist/vue-hooks/browser/useFileObjectUrlMap.js +46 -0
  179. package/dist/vue-hooks/browser/useFileObjectUrlMap.js.map +1 -0
  180. package/dist/vue-hooks/dom/useBrowserFocusVisible.d.ts +9 -0
  181. package/dist/vue-hooks/dom/useBrowserFocusVisible.js +8 -0
  182. package/dist/vue-hooks/dom/useBrowserFocusVisible.js.map +1 -0
  183. package/dist/vue-hooks/dom/useBrowserLassoSelection.d.ts +16 -0
  184. package/dist/vue-hooks/dom/useBrowserLassoSelection.js +7 -0
  185. package/dist/vue-hooks/dom/useBrowserLassoSelection.js.map +1 -0
  186. package/dist/vue-hooks/dom/useFocusVisible.d.ts +17 -0
  187. package/dist/vue-hooks/dom/useFocusVisible.js +53 -0
  188. package/dist/vue-hooks/dom/useFocusVisible.js.map +1 -0
  189. package/dist/vue-hooks/dom/useLassoSelection.d.ts +53 -0
  190. package/dist/vue-hooks/dom/useLassoSelection.js +244 -0
  191. package/dist/vue-hooks/dom/useLassoSelection.js.map +1 -0
  192. package/dist/vue-hooks/time/useBrowserDelayedTrue.d.ts +2 -0
  193. package/dist/vue-hooks/time/useBrowserDelayedTrue.js +7 -0
  194. package/dist/vue-hooks/time/useBrowserDelayedTrue.js.map +1 -0
  195. package/dist/vue-hooks/time/useDelayedTrue.d.ts +11 -0
  196. package/dist/vue-hooks/time/useDelayedTrue.js +29 -0
  197. package/dist/vue-hooks/time/useDelayedTrue.js.map +1 -0
  198. package/package.json +29 -2
  199. package/types/component-material.d.ts +40 -0
  200. package/types/lowcode.d.ts +63 -0
  201. package/types/rbac.d.ts +0 -3
  202. package/types/vue.d.ts +9 -1
  203. package/dist/functions/file/extractVideoCover.d.ts +0 -6
  204. package/dist/functions/file/extractVideoCover.js +0 -57
  205. package/dist/functions/file/extractVideoCover.js.map +0 -1
  206. package/dist/functions/im/imInlineContentTokens.d.ts +0 -49
  207. package/dist/functions/im/imInlineContentTokens.js +0 -185
  208. package/dist/functions/im/imInlineContentTokens.js.map +0 -1
  209. package/dist/functions/im/materializeUploadFileFromMediaBlobRecord.d.ts +0 -7
  210. package/dist/functions/im/materializeUploadFileFromMediaBlobRecord.js +0 -10
  211. package/dist/functions/im/materializeUploadFileFromMediaBlobRecord.js.map +0 -1
  212. package/dist/functions/im/parseImMentionSegments.d.ts +0 -19
  213. package/dist/functions/im/parseImMentionSegments.js +0 -92
  214. package/dist/functions/im/parseImMentionSegments.js.map +0 -1
  215. package/dist/functions/image/compressImageToWidth.d.ts +0 -12
  216. package/dist/functions/image/compressImageToWidth.js +0 -44
  217. package/dist/functions/image/compressImageToWidth.js.map +0 -1
  218. package/dist/functions/image/compressJpgToTargetSize.d.ts +0 -13
  219. package/dist/functions/image/compressJpgToTargetSize.js +0 -132
  220. package/dist/functions/image/compressJpgToTargetSize.js.map +0 -1
  221. package/dist/functions/image/compressToTargetSize.d.ts +0 -13
  222. package/dist/functions/image/compressToTargetSizeJpg.d.ts +0 -13
  223. package/dist/functions/image/compressToTargetSizeJpg.js +0 -132
  224. package/dist/functions/image/compressToTargetSizeJpg.js.map +0 -1
  225. package/dist/permissions/allPermissionCode.js.map +0 -1
  226. package/dist/permissions/definePermissionGroup.js.map +0 -1
  227. package/dist/permissions/groups.js.map +0 -1
@@ -0,0 +1,199 @@
1
+ export const DEFAULT_DRAG_ENTER_MIN_PX = 32;
2
+ export const LASSO_STROKE_PAD_PX = 4;
3
+ export const EDGE_SCROLL_ZONE_PX = 56;
4
+ export const EDGE_SCROLL_MAX_PX_PER_FRAME = 18;
5
+ export const LASSO_INTERACTIVE_SELECTOR = 'a[href],button,input,textarea,select,[contenteditable="true"],[role="checkbox"]';
6
+ export const defaultLassoBoxClass = 'pointer-events-none absolute z-[var(--z-index-float)] box-border border border-[var(--brand-color-6)] bg-[color-mix(in_srgb,var(--brand-color-6)_20%,transparent)]';
7
+ function toAxisRect(box) {
8
+ return {
9
+ left: box.left,
10
+ top: box.top,
11
+ width: box.width,
12
+ height: box.height,
13
+ right: box.left + box.width,
14
+ bottom: box.top + box.height,
15
+ };
16
+ }
17
+ function toClientRectLike(rect) {
18
+ return {
19
+ left: rect.left,
20
+ top: rect.top,
21
+ width: rect.width,
22
+ height: rect.height,
23
+ right: rect.left + rect.width,
24
+ bottom: rect.top + rect.height,
25
+ };
26
+ }
27
+ export function rectsOverlap(a, b) {
28
+ const ar = 'right' in a ? a : toAxisRect(a);
29
+ const br = 'right' in b ? b : toAxisRect(b);
30
+ return !(ar.right < br.left || ar.left > br.right || ar.bottom < br.top || ar.top > br.bottom);
31
+ }
32
+ export function isPrimaryPointer(e) {
33
+ return e.button === 0 && e.isPrimary;
34
+ }
35
+ export function meetsDragEnterThreshold(dx, dy, minPx) {
36
+ return Math.hypot(dx, dy) >= minPx;
37
+ }
38
+ export function strokeBounds(x1, y1, x2, y2, strokePadPx = LASSO_STROKE_PAD_PX) {
39
+ const left = Math.min(x1, x2) - strokePadPx;
40
+ const top = Math.min(y1, y2) - strokePadPx;
41
+ const right = Math.max(x1, x2) + strokePadPx;
42
+ const bottom = Math.max(y1, y2) + strokePadPx;
43
+ return toClientRectLike({
44
+ left,
45
+ top,
46
+ width: right - left,
47
+ height: bottom - top,
48
+ });
49
+ }
50
+ export function clientPointToContent(clientX, clientY, viewport) {
51
+ const r = viewport.getBoundingClientRect();
52
+ return {
53
+ x: clientX - r.left + viewport.scrollLeft,
54
+ y: clientY - r.top + viewport.scrollTop,
55
+ };
56
+ }
57
+ export function startContentPoint(startClientX, startClientY, startScrollLeft, startScrollTop, viewport) {
58
+ const r = viewport.getBoundingClientRect();
59
+ return {
60
+ x: startClientX - r.left + startScrollLeft,
61
+ y: startClientY - r.top + startScrollTop,
62
+ };
63
+ }
64
+ export function clipContentRectToScrollable(rect, viewport) {
65
+ const maxW = viewport.scrollWidth;
66
+ const maxH = viewport.scrollHeight;
67
+ const left = Math.max(0, Math.min(rect.left, maxW));
68
+ const top = Math.max(0, Math.min(rect.top, maxH));
69
+ const right = Math.max(left, Math.min(rect.right, maxW));
70
+ const bottom = Math.max(top, Math.min(rect.bottom, maxH));
71
+ return toClientRectLike({
72
+ left,
73
+ top,
74
+ width: right - left,
75
+ height: bottom - top,
76
+ });
77
+ }
78
+ export function lassoBoxInScrollContent(contentRect, viewport) {
79
+ const clipped = clipContentRectToScrollable(contentRect, viewport);
80
+ if (clipped.width <= 0 || clipped.height <= 0)
81
+ return null;
82
+ return {
83
+ left: clipped.left,
84
+ top: clipped.top,
85
+ width: clipped.width,
86
+ height: clipped.height,
87
+ };
88
+ }
89
+ export function collectRowElByItemId(root, rowIdAttribute) {
90
+ const map = new Map();
91
+ for (const node of root.querySelectorAll(`[${rowIdAttribute}]`)) {
92
+ const id = node.getAttribute(rowIdAttribute);
93
+ if (id)
94
+ map.set(id, node);
95
+ }
96
+ return map;
97
+ }
98
+ export function nearestItemByPoint(items, rowElByItemId, clientX, clientY) {
99
+ let best = null;
100
+ for (const item of items) {
101
+ const row = rowElByItemId.get(String(item.id));
102
+ if (!row)
103
+ continue;
104
+ const r = row.getBoundingClientRect();
105
+ const dx = clientX - Math.max(r.left, Math.min(clientX, r.right));
106
+ const dy = clientY - Math.max(r.top, Math.min(clientY, r.bottom));
107
+ const d2 = dx * dx + dy * dy;
108
+ if (!best || d2 < best.d2)
109
+ best = { item, d2 };
110
+ }
111
+ return best?.item ?? null;
112
+ }
113
+ export function pointerHitsInteractive(target, selector = LASSO_INTERACTIVE_SELECTOR) {
114
+ const el = target;
115
+ if (!el || typeof el.closest !== 'function')
116
+ return true;
117
+ return !!el.closest(selector);
118
+ }
119
+ export function resolveLassoSeed(items, rowElByItemId, rowIdAttribute, target, clientX, clientY) {
120
+ const el = target;
121
+ const rowFromTarget = el && typeof el.closest === 'function'
122
+ ? el.closest(`[${rowIdAttribute}]`)
123
+ : null;
124
+ if (rowFromTarget) {
125
+ const id = rowFromTarget.getAttribute(rowIdAttribute);
126
+ if (id) {
127
+ const item = items.find((x) => String(x.id) === id);
128
+ if (item)
129
+ return { item, rowEl: rowFromTarget };
130
+ }
131
+ }
132
+ const nearest = nearestItemByPoint(items, rowElByItemId, clientX, clientY);
133
+ if (!nearest)
134
+ return null;
135
+ const rowEl = rowElByItemId.get(String(nearest.id));
136
+ if (!rowEl)
137
+ return null;
138
+ return { item: nearest, rowEl };
139
+ }
140
+ export function computeViewportEdgeScrollDelta(clientY, viewport, edgeScrollZonePx = EDGE_SCROLL_ZONE_PX, edgeScrollMaxPxPerFrame = EDGE_SCROLL_MAX_PX_PER_FRAME) {
141
+ const maxTop = viewport.scrollHeight - viewport.clientHeight;
142
+ if (maxTop <= 0)
143
+ return 0;
144
+ const { top, height } = viewport.getBoundingClientRect();
145
+ const yInViewport = clientY - top;
146
+ if (yInViewport < edgeScrollZonePx) {
147
+ if (viewport.scrollTop <= 0)
148
+ return 0;
149
+ const depth = 1 - Math.max(0, yInViewport) / edgeScrollZonePx;
150
+ return -edgeScrollMaxPxPerFrame * depth;
151
+ }
152
+ if (yInViewport > height - edgeScrollZonePx) {
153
+ if (viewport.scrollTop >= maxTop - 0.5)
154
+ return 0;
155
+ const distPastZone = yInViewport - (height - edgeScrollZonePx);
156
+ const depth = Math.min(1, distPastZone / edgeScrollZonePx);
157
+ return edgeScrollMaxPxPerFrame * depth;
158
+ }
159
+ return 0;
160
+ }
161
+ export function collectElementIdsInContentLassoBox(box, viewport, contentRoot, idAttribute) {
162
+ const lassoRect = toAxisRect(box);
163
+ const viewportRect = viewport.getBoundingClientRect();
164
+ const ids = [];
165
+ for (const node of contentRoot.querySelectorAll(`[${idAttribute}]`)) {
166
+ const id = node.getAttribute(idAttribute)?.trim();
167
+ if (!id)
168
+ continue;
169
+ const row = node.getBoundingClientRect();
170
+ const rowInContent = toAxisRect({
171
+ left: row.left - viewportRect.left + viewport.scrollLeft,
172
+ top: row.top - viewportRect.top + viewport.scrollTop,
173
+ width: row.width,
174
+ height: row.height,
175
+ });
176
+ if (rectsOverlap(rowInContent, lassoRect)) {
177
+ ids.push(id);
178
+ }
179
+ }
180
+ return ids;
181
+ }
182
+ export function mapItemsByRowIds(items, rowIds) {
183
+ const idSet = new Set(rowIds.map(String));
184
+ return items.filter((item) => idSet.has(String(item.id)));
185
+ }
186
+ export function idsInClientLasso(items, rowElByItemId, startClientX, startClientY, endClientX, endClientY, itemSelectable) {
187
+ const lassoClientRect = strokeBounds(startClientX, startClientY, endClientX, endClientY);
188
+ const out = [];
189
+ for (const item of items) {
190
+ if (itemSelectable && !itemSelectable(item))
191
+ continue;
192
+ const row = rowElByItemId.get(String(item.id));
193
+ if (row && rectsOverlap(toClientRectLike(row.getBoundingClientRect()), lassoClientRect)) {
194
+ out.push(item.id);
195
+ }
196
+ }
197
+ return out;
198
+ }
199
+ //# sourceMappingURL=lassoSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lassoSelection.js","sourceRoot":"","sources":["../../../src/functions/dom/lassoSelection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { Blob } from '../../../references/blob.d';
2
+ import type { Navigator } from '../../../references/browser.d';
3
+ import type { Document } from '../../../references/dom.d';
4
+ import type { Window } from '../../../references/browser.d';
5
+ import type { setTimeout, clearTimeout } from '../../../references/timer.d';
6
+ import type { FetchFunction } from '../../../references/fetch.d';
7
+ import type { URL as URLConstructor } from '../../../references/url.d';
8
+ import type { PickFileDeps } from './pickFile';
9
+ import { type DomMutableSelection, type ReadBrowserHostDeps } from '../browser/readBrowserHost';
10
+ export type { DomMutableSelection } from '../browser/readBrowserHost';
11
+ export type DomClipboardItemConstructor = new (items: Record<string, Blob>) => unknown;
12
+ export interface DomClipboardDeps {
13
+ document: Document;
14
+ navigator?: Navigator;
15
+ getSelection?: () => DomMutableSelection | null;
16
+ ClipboardItem?: DomClipboardItemConstructor;
17
+ Blob?: Window['Blob'];
18
+ }
19
+ export interface DomImageCanvasDeps {
20
+ document: Document;
21
+ Image: Window['Image'];
22
+ URL: Window['URL'];
23
+ }
24
+ export interface DomFetchBlobDeps {
25
+ fetch: FetchFunction;
26
+ URLConstructor?: typeof URLConstructor;
27
+ }
28
+ export interface DomTimerDeps {
29
+ setTimeout: typeof setTimeout;
30
+ clearTimeout: typeof clearTimeout;
31
+ }
32
+ export interface DomSelectionDeps {
33
+ getSelection?: () => DomMutableSelection | null;
34
+ document?: Document;
35
+ }
36
+ export declare function readBrowserDomClipboardDeps(hostDeps?: ReadBrowserHostDeps): DomClipboardDeps | undefined;
37
+ export declare function readBrowserDomImageCanvasDeps(hostDeps?: ReadBrowserHostDeps): DomImageCanvasDeps | undefined;
38
+ export declare function readBrowserDomFetchBlobDeps(hostDeps?: ReadBrowserHostDeps): DomFetchBlobDeps | undefined;
39
+ export declare function readBrowserDomTimerDeps(hostDeps?: ReadBrowserHostDeps): DomTimerDeps;
40
+ export declare function readBrowserDomSelectionDeps(hostDeps?: ReadBrowserHostDeps): DomSelectionDeps;
41
+ export declare function readBrowserPickFileDeps(hostDeps?: ReadBrowserHostDeps): PickFileDeps | undefined;
@@ -0,0 +1,63 @@
1
+ import { readBrowserHostDepsFromGlobalThis, } from '../browser/readBrowserHost.js';
2
+ export function readBrowserDomClipboardDeps(hostDeps = readBrowserHostDepsFromGlobalThis()) {
3
+ const host = hostDeps.host;
4
+ if (!host.document)
5
+ return undefined;
6
+ return {
7
+ document: host.document,
8
+ navigator: host.navigator,
9
+ getSelection: host.getSelection,
10
+ ClipboardItem: host.ClipboardItem,
11
+ Blob: host.Blob,
12
+ };
13
+ }
14
+ export function readBrowserDomImageCanvasDeps(hostDeps = readBrowserHostDepsFromGlobalThis()) {
15
+ const host = hostDeps.host;
16
+ if (!host.document || !host.Image || !host.URL)
17
+ return undefined;
18
+ return {
19
+ document: host.document,
20
+ Image: host.Image,
21
+ URL: host.URL,
22
+ };
23
+ }
24
+ export function readBrowserDomFetchBlobDeps(hostDeps = readBrowserHostDepsFromGlobalThis()) {
25
+ const host = hostDeps.host;
26
+ if (!host.fetch)
27
+ return undefined;
28
+ return {
29
+ fetch: host.fetch,
30
+ URLConstructor: host.URLConstructor,
31
+ };
32
+ }
33
+ export function readBrowserDomTimerDeps(hostDeps = readBrowserHostDepsFromGlobalThis()) {
34
+ const host = hostDeps.host;
35
+ const fallbackSetTimeout = ((fn) => {
36
+ fn();
37
+ return 0;
38
+ });
39
+ const fallbackClearTimeout = (() => { });
40
+ return {
41
+ setTimeout: host.setTimeout ?? fallbackSetTimeout,
42
+ clearTimeout: host.clearTimeout ?? fallbackClearTimeout,
43
+ };
44
+ }
45
+ export function readBrowserDomSelectionDeps(hostDeps = readBrowserHostDepsFromGlobalThis()) {
46
+ const host = hostDeps.host;
47
+ return {
48
+ getSelection: host.getSelection,
49
+ document: host.document,
50
+ };
51
+ }
52
+ export function readBrowserPickFileDeps(hostDeps = readBrowserHostDepsFromGlobalThis()) {
53
+ const doc = hostDeps.host.document;
54
+ const setTimeoutFn = hostDeps.host.setTimeout;
55
+ if (!doc?.createElement || !doc.body || !setTimeoutFn)
56
+ return undefined;
57
+ return {
58
+ createElement: doc.createElement.bind(doc),
59
+ body: doc.body,
60
+ setTimeout: setTimeoutFn,
61
+ };
62
+ }
63
+ //# sourceMappingURL=readBrowserDomDeps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readBrowserDomDeps.js","sourceRoot":"","sources":["../../../src/functions/dom/readBrowserDomDeps.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,iCAAiC,GAGlC,MAAM,4BAA4B,CAAA;AAmCnC,MAAM,UAAU,2BAA2B,CACzC,WAAgC,iCAAiC,EAAE;IAEnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IACpC,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,YAAY,EAAE,IAAI,CAAC,YAA8D;QACjF,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,WAAgC,iCAAiC,EAAE;IAEnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAChE,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,WAAgC,iCAAiC,EAAE;IAEnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IACjC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAgC,iCAAiC,EAAE;IAEnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAc,EAAE,EAAE;QAC7C,EAAE,EAAE,CAAA;QACJ,OAAO,CAAC,CAAA;IACV,CAAC,CAAsB,CAAA;IACvB,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAwB,CAAA;IAC9D,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,kBAAkB;QACjD,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,oBAAoB;KACxD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,WAAgC,iCAAiC,EAAE;IAEnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,YAA8D;QACjF,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAgC,iCAAiC,EAAE;IAEnE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;IAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,aAAa,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAA;IACvE,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1C,IAAI,EAAE,GAAG,CAAC,IAA4B;QACtC,UAAU,EAAE,YAAY;KACzB,CAAA;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Document, HTMLElement } from '../../../references/dom.d';
2
+ type OverlayTeleportDocument = Document & {
3
+ body: HTMLElement;
4
+ querySelector(selectors: string): HTMLElement | null;
5
+ };
6
+ export declare function resolveOverlayTeleportParent(teleportTo: string | boolean | undefined, doc: OverlayTeleportDocument | null | undefined): HTMLElement | null;
7
+ export {};
@@ -0,0 +1,11 @@
1
+ export function resolveOverlayTeleportParent(teleportTo, doc) {
2
+ if (!doc)
3
+ return null;
4
+ if (teleportTo === false)
5
+ return null;
6
+ if (typeof teleportTo === 'string' && teleportTo !== 'body') {
7
+ return doc.querySelector(teleportTo) ?? doc.body;
8
+ }
9
+ return doc.body;
10
+ }
11
+ //# sourceMappingURL=resolveOverlayTeleportParent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveOverlayTeleportParent.js","sourceRoot":"","sources":["../../../src/functions/dom/resolveOverlayTeleportParent.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,4BAA4B,CAC1C,UAAwC,EACxC,GAA+C;IAE/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IACrC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC5D,OAAQ,GAAG,CAAC,aAAa,CAAC,UAAU,CAAwB,IAAI,GAAG,CAAC,IAAI,CAAA;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAA;AACjB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type ScrollableElement = {
2
+ scrollTop: number;
3
+ scrollHeight: number;
4
+ clientHeight: number;
5
+ scrollTo?: (options: {
6
+ top: number;
7
+ behavior?: string;
8
+ }) => void;
9
+ };
10
+ export declare function safeSetElementScrollTop(el: ScrollableElement, scrollTop: number): boolean;
11
+ export declare function safeAdjustElementScrollTop(el: ScrollableElement, delta: number): boolean;
12
+ export declare function safeCssSetProperty(style: {
13
+ setProperty(name: string, value: string): void;
14
+ }, name: string, value: string): boolean;
15
+ export declare function safeClearDomSelection(getSelection?: () => {
16
+ removeAllRanges(): void;
17
+ } | null): void;
@@ -0,0 +1,42 @@
1
+ export function safeSetElementScrollTop(el, scrollTop) {
2
+ try {
3
+ el.scrollTop = scrollTop;
4
+ return true;
5
+ }
6
+ catch {
7
+ try {
8
+ el.scrollTo?.({ top: scrollTop, behavior: 'auto' });
9
+ return true;
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ }
16
+ export function safeAdjustElementScrollTop(el, delta) {
17
+ try {
18
+ const maxTop = Math.max(0, el.scrollHeight - el.clientHeight);
19
+ const next = Math.min(maxTop, Math.max(0, el.scrollTop + delta));
20
+ return safeSetElementScrollTop(el, next);
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ export function safeCssSetProperty(style, name, value) {
27
+ try {
28
+ style.setProperty(name, value);
29
+ return true;
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ export function safeClearDomSelection(getSelection) {
36
+ try {
37
+ getSelection?.()?.removeAllRanges();
38
+ }
39
+ catch {
40
+ }
41
+ }
42
+ //# sourceMappingURL=safeBrowserDom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeBrowserDom.js","sourceRoot":"","sources":["../../../src/functions/dom/safeBrowserDom.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,uBAAuB,CAAC,EAAqB,EAAE,SAAiB;IAC9E,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,GAAG,SAAS,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;YACnD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,EAAqB,EAAE,KAAa;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,CAAA;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAA;QAChE,OAAO,uBAAuB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAyD,EACzD,IAAY,EACZ,KAAa;IAEb,IAAI,CAAC;QACH,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,YAAuD;IAEvD,IAAI,CAAC;QACH,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACH,CAAC"}
@@ -1,7 +1,11 @@
1
1
  import type { Blob } from '../../../references/blob.d';
2
+ import { type DomClipboardDeps } from './readBrowserDomDeps';
2
3
  export type WriteImageBlobToClipboardDeps = {
3
4
  writeElectron?: (blob: Blob) => Promise<boolean>;
4
5
  writeWeb?: (blob: Blob) => Promise<boolean>;
5
6
  };
6
7
  export declare function writeImageBlobToClipboardWithDeps(blob: Blob, deps: WriteImageBlobToClipboardDeps): Promise<boolean>;
7
- export declare function writeImageBlobViaWebClipboard(blob: Blob): Promise<boolean>;
8
+ export type WriteImageBlobViaWebClipboardDeps = Pick<DomClipboardDeps, 'navigator' | 'ClipboardItem'> & {
9
+ blobToPng?: (blob: Blob) => Promise<Blob>;
10
+ };
11
+ export declare function writeImageBlobViaWebClipboard(blob: Blob, deps?: WriteImageBlobViaWebClipboardDeps): Promise<boolean>;
@@ -1,5 +1,6 @@
1
1
  import { blobToPngBlob } from './imageBlobToPng.js';
2
2
  import { isImageFile } from '../file/inferMediaType.js';
3
+ import { readBrowserDomClipboardDeps, } from './readBrowserDomDeps.js';
3
4
  export async function writeImageBlobToClipboardWithDeps(blob, deps) {
4
5
  if (deps.writeElectron) {
5
6
  try {
@@ -14,10 +15,11 @@ export async function writeImageBlobToClipboardWithDeps(blob, deps) {
14
15
  }
15
16
  return false;
16
17
  }
17
- export async function writeImageBlobViaWebClipboard(blob) {
18
- const w = globalThis;
19
- const write = w.navigator?.clipboard?.write;
20
- const ClipboardItemCtor = w.ClipboardItem;
18
+ export async function writeImageBlobViaWebClipboard(blob, deps) {
19
+ const resolved = deps ?? readBrowserDomClipboardDeps();
20
+ const clipboard = resolved?.navigator?.clipboard;
21
+ const write = clipboard?.write;
22
+ const ClipboardItemCtor = resolved?.ClipboardItem;
21
23
  if (!write || !ClipboardItemCtor)
22
24
  return false;
23
25
  if (isImageFile({ type: blob.type, name: 'image.png' })) {
@@ -29,7 +31,8 @@ export async function writeImageBlobViaWebClipboard(blob) {
29
31
  }
30
32
  }
31
33
  try {
32
- const png = await blobToPngBlob(blob);
34
+ const toPng = deps?.blobToPng ?? blobToPngBlob;
35
+ const png = await toPng(blob);
33
36
  await write([new ClipboardItemCtor({ 'image/png': png })]);
34
37
  return true;
35
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"writeImageBlobToClipboard.js","sourceRoot":"","sources":["../../../src/functions/dom/writeImageBlobToClipboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAUpD,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAAU,EACV,IAAmC;IAEnC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,IAAU;IAC5D,MAAM,CAAC,GAAG,UAGT,CAAA;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAA;IAC3C,MAAM,iBAAiB,GAAG,CAAC,CAAC,aAAa,CAAA;IACzC,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAA;IAE9C,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3D,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"writeImageBlobToClipboard.js","sourceRoot":"","sources":["../../../src/functions/dom/writeImageBlobToClipboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EACL,2BAA2B,GAE5B,MAAM,sBAAsB,CAAA;AAU7B,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAAU,EACV,IAAmC;IAEnC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAU,EACV,IAAwC;IAExC,MAAM,QAAQ,GAAG,IAAI,IAAI,2BAA2B,EAAE,CAAA;IACtD,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,EAAE,SAE1B,CAAA;IACb,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAA;IAC9B,MAAM,iBAAiB,GAAG,QAAQ,EAAE,aAAa,CAAA;IACjD,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAA;IAE9C,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3D,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa,CAAA;QAC9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -1,2 +1,4 @@
1
+ import { type ReadBrowserHostDeps } from '../browser/readBrowserHost';
1
2
  import type { DownloadInBrowserResolvedDeps } from './downloadInBrowserResolved';
3
+ export declare function createBrowserDownloadDeps(hostDeps: ReadBrowserHostDeps): DownloadInBrowserResolvedDeps;
2
4
  export declare function createBrowserDownloadDepsFromGlobalThis(): DownloadInBrowserResolvedDeps;
@@ -1,13 +1,9 @@
1
1
  import { resolveBrowserRandomUUIDProvider } from '../im/newImClientMessageIdFromBrowser.js';
2
- function readBrowserDownloadHost() {
3
- if (typeof globalThis === 'undefined')
4
- return undefined;
5
- return globalThis;
6
- }
7
- export function createBrowserDownloadDepsFromGlobalThis() {
8
- const host = readBrowserDownloadHost();
9
- const doc = host?.document;
10
- if (!doc || typeof host?.fetch !== 'function' || !host.URL) {
2
+ import { readBrowserHostDepsFromGlobalThis, } from '../browser/readBrowserHost.js';
3
+ export function createBrowserDownloadDeps(hostDeps) {
4
+ const host = hostDeps.host;
5
+ const doc = host.document;
6
+ if (!doc || typeof host.fetch !== 'function' || !host.URL) {
11
7
  throw new Error('浏览器下载环境不可用');
12
8
  }
13
9
  return {
@@ -25,7 +21,10 @@ export function createBrowserDownloadDepsFromGlobalThis() {
25
21
  createObjectURL: (blob) => host.URL.createObjectURL(blob),
26
22
  revokeObjectURL: (url) => host.URL.revokeObjectURL(url),
27
23
  setTimeout: (fn, ms) => host.setTimeout?.(fn, ms),
28
- randomUUID: resolveBrowserRandomUUIDProvider(),
24
+ randomUUID: resolveBrowserRandomUUIDProvider(hostDeps),
29
25
  };
30
26
  }
27
+ export function createBrowserDownloadDepsFromGlobalThis() {
28
+ return createBrowserDownloadDeps(readBrowserHostDepsFromGlobalThis());
29
+ }
31
30
  //# sourceMappingURL=createBrowserDownloadDepsFromGlobalThis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createBrowserDownloadDepsFromGlobalThis.js","sourceRoot":"","sources":["../../../src/functions/download/createBrowserDownloadDepsFromGlobalThis.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAoBxF,SAAS,uBAAuB;IAC9B,IAAI,OAAO,UAAU,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IACvD,OAAO,UAAiC,CAAA;AAC1C,CAAC;AAGD,MAAM,UAAU,uCAAuC;IACrD,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAA;IACtC,MAAM,GAAG,GAAG,IAAI,EAAE,QAAQ,CAAA;IAC1B,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;QACL,mBAAmB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAsB;QACtE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1B,CAAC;QACD,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAA;QACnD,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,GAAG,IAA+B,EAAE,EAAE,CAC7C,IAAI,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,CAAkB;QACxC,eAAe,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAChE,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAChE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACjD,UAAU,EAAE,gCAAgC,EAAE;KAC/C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"createBrowserDownloadDepsFromGlobalThis.js","sourceRoot":"","sources":["../../../src/functions/download/createBrowserDownloadDepsFromGlobalThis.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AACxF,OAAO,EACL,iCAAiC,GAElC,MAAM,4BAA4B,CAAA;AAInC,MAAM,UAAU,yBAAyB,CACvC,QAA6B;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA;IACzB,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;QACL,mBAAmB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAsB;QACtE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1B,CAAC;QACD,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAA;QACnD,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,GAAG,IAA+B,EAAE,EAAE,CAC7C,IAAI,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,CAAkB;QACxC,eAAe,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAChE,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAChE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACjD,UAAU,EAAE,gCAAgC,CAAC,QAAQ,CAAC;KACvD,CAAA;AACH,CAAC;AAGD,MAAM,UAAU,uCAAuC;IACrD,OAAO,yBAAyB,CAAC,iCAAiC,EAAE,CAAC,CAAA;AACvE,CAAC"}
@@ -1,4 +1,3 @@
1
1
  import type { InferMediaTypeFile } from './inferMediaType';
2
2
  export declare const IM_JPEG_UPLOAD_TARGET_BYTES: number;
3
- export declare const CHAT_JPEG_UPLOAD_TARGET_BYTES: number;
4
3
  export declare function isJpegImageFile(file: InferMediaTypeFile): boolean;
@@ -1,7 +1,6 @@
1
1
  import { getFileExtension } from './getFileExtension.js';
2
2
  const JPEG_MIME = new Set(['image/jpeg', 'image/jpg']);
3
3
  export const IM_JPEG_UPLOAD_TARGET_BYTES = 800 * 1024;
4
- export const CHAT_JPEG_UPLOAD_TARGET_BYTES = IM_JPEG_UPLOAD_TARGET_BYTES;
5
4
  export function isJpegImageFile(file) {
6
5
  const mime = (file.type || '').toLowerCase();
7
6
  if (JPEG_MIME.has(mime))
@@ -1 +1 @@
1
- {"version":3,"file":"isJpegImageFile.js","sourceRoot":"","sources":["../../../src/functions/file/isJpegImageFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;AAGtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,GAAG,IAAI,CAAA;AAGrD,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAA;AAExE,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5C,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"isJpegImageFile.js","sourceRoot":"","sources":["../../../src/functions/file/isJpegImageFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;AAGtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,GAAG,IAAI,CAAA;AAErD,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5C,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,CAAA;AACxC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { URL as URLConstructor } from '../../../references/url.d';
1
2
  export type AssignChatConversationToWindowLocationInput = {
2
3
  conversationId: string;
3
4
  href: string;
@@ -5,4 +6,7 @@ export type AssignChatConversationToWindowLocationInput = {
5
6
  assign: (url: string) => void;
6
7
  setHash: (hash: string) => void;
7
8
  };
8
- export declare function assignChatConversationToWindowLocation(input: AssignChatConversationToWindowLocationInput): void;
9
+ export interface AssignChatConversationToWindowLocationDeps {
10
+ URL: typeof URLConstructor;
11
+ }
12
+ export declare function assignChatConversationToWindowLocation(input: AssignChatConversationToWindowLocationInput, deps?: AssignChatConversationToWindowLocationDeps): void;
@@ -1,4 +1,5 @@
1
- export function assignChatConversationToWindowLocation(input) {
1
+ import { readBrowserHostDepsFromGlobalThis, } from '../browser/readBrowserHost.js';
2
+ export function assignChatConversationToWindowLocation(input, deps) {
2
3
  const id = input.conversationId.trim();
3
4
  if (!id)
4
5
  return;
@@ -8,10 +9,10 @@ export function assignChatConversationToWindowLocation(input) {
8
9
  input.setHash(`${base}?${q}`);
9
10
  return;
10
11
  }
11
- const urlCtor = globalThis.URL;
12
- if (!urlCtor)
12
+ const URL = deps?.URL ?? readBrowserHostDepsFromGlobalThis().host.URLConstructor;
13
+ if (!URL)
13
14
  return;
14
- const url = new urlCtor(input.href);
15
+ const url = new URL(input.href);
15
16
  url.searchParams.set('c', id);
16
17
  input.assign(url.toString());
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assignChatConversationToWindowLocation.js","sourceRoot":"","sources":["../../../src/functions/im/assignChatConversationToWindowLocation.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,sCAAsC,CACpD,KAAkD;IAElD,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IACtC,IAAI,CAAC,EAAE;QAAE,OAAM;IACf,MAAM,CAAC,GAAG,KAAK,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAA;IACvC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAA;QACrD,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IACD,MAAM,OAAO,GAAI,UAEf,CAAC,GAAG,CAAA;IACN,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACnC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"assignChatConversationToWindowLocation.js","sourceRoot":"","sources":["../../../src/functions/im/assignChatConversationToWindowLocation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iCAAiC,GAElC,MAAM,4BAA4B,CAAA;AAgBnC,MAAM,UAAU,sCAAsC,CACpD,KAAkD,EAClD,IAAiD;IAEjD,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IACtC,IAAI,CAAC,EAAE;QAAE,OAAM;IACf,MAAM,CAAC,GAAG,KAAK,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAA;IACvC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAA;QACrD,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IACD,MAAM,GAAG,GACP,IAAI,EAAE,GAAG,IAAI,iCAAiC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAA;IACtE,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC9B,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import type { HTMLElement, Range } from '../../../references/dom.d';
2
+ import { type DomClipboardDeps } from '../dom/readBrowserDomDeps';
3
+ import type { ImDocumentDeps } from './imOrchestrationTypes';
2
4
  export type CopyBubbleSelectionResult = 'native' | 'fallback' | 'fail';
3
5
  export type CopyUsingClonedRangesOptions = {
4
6
  htmlFallback?: string | null;
@@ -7,4 +9,6 @@ export type CopyUsingClonedRangesOptions = {
7
9
  resolveMentionLabel?: (userId: string) => string;
8
10
  selectionRoot?: HTMLElement | null;
9
11
  };
10
- export declare function copyUsingClonedRangesOrMessagePlainText(ranges: Range[], messagePlainText: string, options?: CopyUsingClonedRangesOptions): Promise<CopyBubbleSelectionResult>;
12
+ export interface CopyUsingClonedRangesOrMessagePlainTextDeps extends ImDocumentDeps, Partial<DomClipboardDeps> {
13
+ }
14
+ export declare function copyUsingClonedRangesOrMessagePlainText(ranges: Range[], messagePlainText: string, options?: CopyUsingClonedRangesOptions, deps?: CopyUsingClonedRangesOrMessagePlainTextDeps): Promise<CopyBubbleSelectionResult>;