giime 1.1.5 → 1.1.6

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 (517) hide show
  1. package/es/components/src/base/affix/Affix.vue.d.ts +2 -2
  2. package/es/components/src/base/alert/Alert.vue.d.ts +3 -3
  3. package/es/components/src/base/alert/index.d.ts +8 -8
  4. package/es/components/src/base/anchor/Anchor.vue.d.ts +1 -1
  5. package/es/components/src/base/anchor/index.d.ts +3 -3
  6. package/es/components/src/base/autocomplete/Autocomplete.vue.d.ts +11 -11
  7. package/es/components/src/base/autocomplete/autocomplete.d.ts +1 -1
  8. package/es/components/src/base/autocomplete/index.d.ts +30 -30
  9. package/es/components/src/base/badge/Badge.vue.d.ts +1 -1
  10. package/es/components/src/base/badge/index.d.ts +3 -3
  11. package/es/components/src/base/button/Button.vue.d.ts +9 -9
  12. package/es/components/src/base/button/button.d.ts +4 -4
  13. package/es/components/src/base/button/index.d.ts +23 -23
  14. package/es/components/src/base/buttonGroup/ButtonGroup.vue.d.ts +3 -3
  15. package/es/components/src/base/buttonGroup/buttonGroup.d.ts +1 -1
  16. package/es/components/src/base/buttonGroup/index.d.ts +7 -7
  17. package/es/components/src/base/carousel/Carousel.vue.d.ts +1 -1
  18. package/es/components/src/base/carousel/index.d.ts +3 -3
  19. package/es/components/src/base/cascader/Cascader.vue.d.ts +6 -6
  20. package/es/components/src/base/cascader/index.d.ts +18 -18
  21. package/es/components/src/base/chart/Chart.vue.d.ts +2 -2
  22. package/es/components/src/base/chart/index.d.ts +2 -2
  23. package/es/components/src/base/checkbox/Checkbox.vue.d.ts +2 -2
  24. package/es/components/src/base/checkbox/index.d.ts +6 -6
  25. package/es/components/src/base/checkboxButton/CheckboxButton.vue.d.ts +2 -2
  26. package/es/components/src/base/checkboxButton/index.d.ts +6 -6
  27. package/es/components/src/base/col/Col.vue.d.ts +1 -1
  28. package/es/components/src/base/col/index.d.ts +3 -3
  29. package/es/components/src/base/collapseItem/CollapseItem.vue.d.ts +1 -1
  30. package/es/components/src/base/collapseItem/index.d.ts +3 -3
  31. package/es/components/src/base/colorPicker/ColorPicker.vue.d.ts +6 -6
  32. package/es/components/src/base/colorPicker/index.d.ts +6 -6
  33. package/es/components/src/base/colorPickerPanel/ColorPickerPanel.vue.d.ts +1 -1
  34. package/es/components/src/base/colorPickerPanel/index.d.ts +1 -1
  35. package/es/components/src/base/datePicker/DatePicker.vue.d.ts +5 -5
  36. package/es/components/src/base/datePicker/index.d.ts +15 -15
  37. package/es/components/src/base/datePickerPanel/DatePickerPanel.vue.d.ts +1 -1
  38. package/es/components/src/base/datePickerPanel/index.d.ts +3 -3
  39. package/es/components/src/base/descriptions/Descriptions.vue.d.ts +1 -1
  40. package/es/components/src/base/descriptions/index.d.ts +3 -3
  41. package/es/components/src/base/descriptionsItem/DescriptionsItem.vue.d.ts +6 -6
  42. package/es/components/src/base/descriptionsItem/descriptionsItem.d.ts +2 -2
  43. package/es/components/src/base/descriptionsItem/index.d.ts +14 -14
  44. package/es/components/src/base/dialog/Dialog.vue.d.ts +3 -3
  45. package/es/components/src/base/dialog/index.d.ts +8 -8
  46. package/es/components/src/base/divider/Divider.vue.d.ts +3 -3
  47. package/es/components/src/base/divider/divider.d.ts +1 -1
  48. package/es/components/src/base/divider/index.d.ts +7 -7
  49. package/es/components/src/base/drawer/Drawer.vue.d.ts +4 -4
  50. package/es/components/src/base/drawer/index.d.ts +11 -11
  51. package/es/components/src/base/dropdown/Dropdown.vue.d.ts +7 -7
  52. package/es/components/src/base/dropdown/dropdown.d.ts +2 -2
  53. package/es/components/src/base/dropdown/index.d.ts +17 -17
  54. package/es/components/src/base/form/Form.vue.d.ts +1 -1
  55. package/es/components/src/base/form/index.d.ts +3 -3
  56. package/es/components/src/base/image/Image.vue.d.ts +3 -3
  57. package/es/components/src/base/image/index.d.ts +8 -8
  58. package/es/components/src/base/imageViewer/ImageViewer.vue.d.ts +2 -2
  59. package/es/components/src/base/imageViewer/index.d.ts +4 -4
  60. package/es/components/src/base/input/Input.vue.d.ts +14 -14
  61. package/es/components/src/base/input/index.d.ts +38 -38
  62. package/es/components/src/base/input/input.d.ts +1 -1
  63. package/es/components/src/base/inputNumber/InputNumber.vue.d.ts +12 -12
  64. package/es/components/src/base/inputNumber/index.d.ts +31 -31
  65. package/es/components/src/base/inputNumber/inputNumber.d.ts +2 -2
  66. package/es/components/src/base/inputTag/InputTag.vue.d.ts +6 -6
  67. package/es/components/src/base/inputTag/index.d.ts +17 -17
  68. package/es/components/src/base/link/Link.vue.d.ts +1 -1
  69. package/es/components/src/base/link/index.d.ts +3 -3
  70. package/es/components/src/base/mention/Mention.vue.d.ts +13 -13
  71. package/es/components/src/base/mention/index.d.ts +37 -37
  72. package/es/components/src/base/mention/mention.d.ts +1 -1
  73. package/es/components/src/base/menu/Menu.vue.d.ts +4 -4
  74. package/es/components/src/base/menu/index.d.ts +10 -10
  75. package/es/components/src/base/pagination/Pagination.vue.d.ts +1 -1
  76. package/es/components/src/base/pagination/index.d.ts +3 -3
  77. package/es/components/src/base/popconfirm/Popconfirm.vue.d.ts +8 -8
  78. package/es/components/src/base/popconfirm/index.d.ts +19 -19
  79. package/es/components/src/base/popconfirm/popconfirm.d.ts +2 -2
  80. package/es/components/src/base/popover/Popover.vue.d.ts +3 -3
  81. package/es/components/src/base/popover/index.d.ts +9 -9
  82. package/es/components/src/base/popper/Popper.vue.d.ts +3 -3
  83. package/es/components/src/base/popper/index.d.ts +7 -7
  84. package/es/components/src/base/popper/popper.d.ts +1 -1
  85. package/es/components/src/base/progress/Progress.vue.d.ts +2 -2
  86. package/es/components/src/base/progress/index.d.ts +6 -6
  87. package/es/components/src/base/radio/Radio.vue.d.ts +1 -1
  88. package/es/components/src/base/radio/index.d.ts +3 -3
  89. package/es/components/src/base/radioGroup/RadioGroup.vue.d.ts +1 -1
  90. package/es/components/src/base/radioGroup/index.d.ts +3 -3
  91. package/es/components/src/base/result/Result.vue.d.ts +1 -1
  92. package/es/components/src/base/result/index.d.ts +3 -3
  93. package/es/components/src/base/scrollbar/Scrollbar.vue.d.ts +3 -3
  94. package/es/components/src/base/scrollbar/index.d.ts +7 -7
  95. package/es/components/src/base/scrollbar/scrollbar.d.ts +1 -1
  96. package/es/components/src/base/segmented/Segmented.vue.d.ts +1 -1
  97. package/es/components/src/base/segmented/index.d.ts +3 -3
  98. package/es/components/src/base/select/Select.vue.d.ts +7 -7
  99. package/es/components/src/base/select/index.d.ts +21 -21
  100. package/es/components/src/base/selectV2/SelectV2.vue.d.ts +8 -8
  101. package/es/components/src/base/selectV2/index.d.ts +24 -24
  102. package/es/components/src/base/skeletonItem/SkeletonItem.vue.d.ts +3 -3
  103. package/es/components/src/base/skeletonItem/index.d.ts +7 -7
  104. package/es/components/src/base/skeletonItem/skeletonItem.d.ts +1 -1
  105. package/es/components/src/base/slider/Slider.vue.d.ts +2 -2
  106. package/es/components/src/base/slider/index.d.ts +5 -5
  107. package/es/components/src/base/space/Space.vue.d.ts +5 -5
  108. package/es/components/src/base/space/index.d.ts +13 -13
  109. package/es/components/src/base/space/space.d.ts +1 -1
  110. package/es/components/src/base/steps/Steps.vue.d.ts +1 -1
  111. package/es/components/src/base/steps/index.d.ts +3 -3
  112. package/es/components/src/base/switch/Switch.vue.d.ts +2 -2
  113. package/es/components/src/base/switch/index.d.ts +5 -5
  114. package/es/components/src/base/table/Table.vue.d.ts +5 -5
  115. package/es/components/src/base/table/index.d.ts +10 -10
  116. package/es/components/src/base/table/table.d.ts +2 -2
  117. package/es/components/src/base/tableColumn/TableColumn.vue.d.ts +4 -4
  118. package/es/components/src/base/tableColumn/index.d.ts +10 -10
  119. package/es/components/src/base/tableColumn/tableColumn.d.ts +1 -1
  120. package/es/components/src/base/tableV2/TableV2.vue.d.ts +3 -3
  121. package/es/components/src/base/tableV2/index.d.ts +7 -7
  122. package/es/components/src/base/tableV2/tableV2.d.ts +1 -1
  123. package/es/components/src/base/tag/Tag.vue.d.ts +3 -3
  124. package/es/components/src/base/tag/index.d.ts +8 -8
  125. package/es/components/src/base/text/Text.vue.d.ts +1 -1
  126. package/es/components/src/base/text/index.d.ts +3 -3
  127. package/es/components/src/base/timePicker/TimePicker.vue.d.ts +6 -6
  128. package/es/components/src/base/timePicker/index.d.ts +18 -18
  129. package/es/components/src/base/timeSelect/TimeSelect.vue.d.ts +6 -6
  130. package/es/components/src/base/timeSelect/index.d.ts +18 -18
  131. package/es/components/src/base/timelineItem/TimelineItem.vue.d.ts +3 -3
  132. package/es/components/src/base/timelineItem/index.d.ts +9 -9
  133. package/es/components/src/base/tooltip/Tooltip.vue.d.ts +5 -5
  134. package/es/components/src/base/tooltip/index.d.ts +13 -13
  135. package/es/components/src/base/tooltip/tooltip.d.ts +1 -1
  136. package/es/components/src/base/tour/Tour.vue.d.ts +1 -1
  137. package/es/components/src/base/tour/index.d.ts +3 -3
  138. package/es/components/src/base/tourStep/TourStep.vue.d.ts +1 -1
  139. package/es/components/src/base/tourStep/index.d.ts +3 -3
  140. package/es/components/src/base/treeSelect/TreeSelect.vue.d.ts +8 -8
  141. package/es/components/src/base/upload/Upload.vue.d.ts +6 -6
  142. package/es/components/src/base/upload/index.d.ts +16 -16
  143. package/es/components/src/base/upload/upload.d.ts +1 -1
  144. package/es/components/src/business/uploadItem/UploadItem.vue.d.ts +7 -7
  145. package/es/components/src/business/uploadItem/index.d.ts +19 -19
  146. package/es/components/src/business/uploadItem/uploadItem.d.ts +1 -1
  147. package/es/components/src/business/uploadPro/UploadPro.vue.d.ts +8 -8
  148. package/es/components/src/business/uploadPro/index.d.ts +22 -22
  149. package/es/components/src/business/uploadPro/uploadPro.d.ts +1 -1
  150. package/es/components/src/composite/dialogForm/DialogForm.vue.d.ts +14 -14
  151. package/es/components/src/composite/dialogForm/index.d.ts +40 -40
  152. package/es/components/src/composite/drawerForm/DrawerForm.vue.d.ts +18 -18
  153. package/es/components/src/composite/drawerForm/index.d.ts +52 -52
  154. package/es/components/src/composite/fileComponent/FileComponent.vue.d.ts +1 -1
  155. package/es/components/src/composite/fileComponent/index.d.ts +3 -3
  156. package/es/components/src/composite/fileList2/FileList.vue.d.ts +1 -1
  157. package/es/components/src/composite/fileList2/index.d.ts +3 -3
  158. package/es/components/src/composite/formItemModule/FormItemModule.vue.d.ts +3 -3
  159. package/es/components/src/composite/formItemModule/index.d.ts +3 -3
  160. package/es/components/src/composite/importDialog/ImportDialog.vue.d.ts +5 -5
  161. package/es/components/src/composite/importDialog/importDialog.d.ts +1 -1
  162. package/es/components/src/composite/importDialog/index.d.ts +13 -13
  163. package/es/components/src/composite/memoryForm/MemoryForm.vue.d.ts +1 -1
  164. package/es/components/src/composite/memoryForm/index.d.ts +3 -3
  165. package/es/components/src/composite/numberInterval/NumberInterval.vue.d.ts +1 -1
  166. package/es/components/src/composite/numberInterval/index.d.ts +1 -1
  167. package/es/components/src/composite/operateButton/OperateButton.vue.d.ts +3 -3
  168. package/es/components/src/composite/operateButton/index.d.ts +3 -3
  169. package/es/components/src/composite/operateButton/operateButton.d.ts +1 -1
  170. package/es/components/src/composite/previewFile/PreviewFile.vue.d.ts +1 -1
  171. package/es/components/src/composite/previewFile/index.d.ts +1 -1
  172. package/es/components/src/composite/ruleEditor/RuleEditor.vue.d.ts +1 -1
  173. package/es/components/src/composite/ruleEditor/index.d.ts +1 -1
  174. package/es/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue.d.ts +4 -4
  175. package/es/components/src/composite/searchForm/searchFormItems/cascader/index.d.ts +4 -4
  176. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +4 -4
  177. package/es/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +4 -4
  178. package/es/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue.d.ts +6 -6
  179. package/es/components/src/composite/searchForm/searchFormItems/input/index.d.ts +6 -6
  180. package/es/components/src/composite/searchForm/searchFormItems/numberInterval/SearchFormNumberInterval.vue.d.ts +1 -1
  181. package/es/components/src/composite/searchForm/searchFormItems/numberInterval/index.d.ts +1 -1
  182. package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +5 -5
  183. package/es/components/src/composite/searchForm/searchFormItems/select/index.d.ts +5 -5
  184. package/es/components/src/composite/searchForm/searchFormItems/selectV2/SearchFormSelectV2.vue.d.ts +5 -5
  185. package/es/components/src/composite/searchForm/searchFormItems/selectV2/index.d.ts +5 -5
  186. package/es/components/src/composite/selectOptions/SelectOptions.vue.d.ts +6 -6
  187. package/es/components/src/composite/selectOptions/index.d.ts +18 -18
  188. package/es/components/src/composite/tableCustom/TableCustom.vue.d.ts +8 -8
  189. package/es/components/src/composite/tableCustom/customOperate/customOperate.d.ts +1 -1
  190. package/es/components/src/composite/tableCustom/index.d.ts +19 -19
  191. package/es/components/src/composite/tableCustom/tableCustom.d.ts +2 -2
  192. package/es/components/src/composite/tablePro/TablePro.vue.d.ts +8 -8
  193. package/es/components/src/composite/tablePro/index.d.ts +19 -19
  194. package/es/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue.d.ts +4 -4
  195. package/es/components/src/composite/tablePro/tableColumnPro/index.d.ts +10 -10
  196. package/es/components/src/composite/tablePro/tableColumnPro/tableColumnPro.d.ts +1 -1
  197. package/es/components/src/composite/tablePro/tablePagination/TablePagination.vue.d.ts +2 -2
  198. package/es/components/src/composite/tablePro/tablePagination/index.d.ts +2 -2
  199. package/es/components/src/composite/tablePro/tablePro.d.ts +2 -2
  200. package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +9 -9
  201. package/es/components/src/composite/uploadFile/index.d.ts +25 -25
  202. package/es/components/src/composite/uploadFile/uploadFile.d.ts +1 -1
  203. package/es/components/src/plugins/message/method.d.ts +4 -4
  204. package/es/constants/key.d.ts +9 -0
  205. package/es/constants/key.mjs.map +1 -1
  206. package/es/crx/src/login/LoginPrompt.vue.d.ts +1 -1
  207. package/es/giime/index.mjs +1 -0
  208. package/es/giime/index.mjs.map +1 -1
  209. package/es/giime/makeInstaller.mjs +5 -0
  210. package/es/giime/makeInstaller.mjs.map +1 -1
  211. package/es/giime/version.d.ts +1 -1
  212. package/es/giime/version.mjs +1 -1
  213. package/es/giime/version.mjs.map +1 -1
  214. package/es/track/__tests__/reliability.test.d.ts +1 -0
  215. package/es/track/__tests__/track.test.d.ts +1 -0
  216. package/es/track/axios.d.ts +1 -0
  217. package/es/track/html.d.ts +1 -0
  218. package/es/track/index.d.ts +16 -0
  219. package/es/track/src/adapters/axios.d.ts +19 -0
  220. package/es/track/src/adapters/html.d.ts +18 -0
  221. package/es/track/src/adapters/vue2.d.ts +35 -0
  222. package/es/track/src/adapters/vue3.d.ts +69 -0
  223. package/es/track/src/collectors/click.d.ts +10 -0
  224. package/es/track/src/collectors/error.d.ts +13 -0
  225. package/es/track/src/collectors/exposure.d.ts +9 -0
  226. package/es/track/src/collectors/formAndCopy.d.ts +10 -0
  227. package/es/track/src/collectors/hover.d.ts +10 -0
  228. package/es/track/src/collectors/lifecycle.d.ts +14 -0
  229. package/es/track/src/collectors/scrollAndPath.d.ts +10 -0
  230. package/es/track/src/core/pendingStore.d.ts +7 -0
  231. package/es/track/src/core/queue.d.ts +68 -0
  232. package/es/track/src/core/session.d.ts +138 -0
  233. package/es/track/src/core/singleton.d.ts +49 -0
  234. package/es/track/src/core/tracker.d.ts +226 -0
  235. package/es/track/src/types/index.d.ts +351 -0
  236. package/es/track/src/utils/browser.d.ts +16 -0
  237. package/es/track/src/utils/dom.d.ts +89 -0
  238. package/es/track/src/utils/env.d.ts +101 -0
  239. package/es/track/src/utils/id.d.ts +80 -0
  240. package/es/track/vue2.d.ts +1 -0
  241. package/es/track/vue3.d.ts +1 -0
  242. package/es/utils/index.d.ts +1 -0
  243. package/es/utils/index.mjs +1 -0
  244. package/es/utils/index.mjs.map +1 -1
  245. package/es/utils/src/watermark/index.d.ts +191 -0
  246. package/es/utils/src/watermark/index.mjs +758 -0
  247. package/es/utils/src/watermark/index.mjs.map +1 -0
  248. package/es/watermark/__tests__/watermark.test.d.ts +1 -0
  249. package/es/watermark/auto.d.ts +7 -0
  250. package/es/watermark/index.d.ts +9 -0
  251. package/es/watermark/src/adapters/vue2.d.ts +18 -0
  252. package/es/watermark/src/adapters/vue3.d.ts +23 -0
  253. package/es/watermark/src/core.d.ts +148 -0
  254. package/es/watermark/src/iframe.d.ts +67 -0
  255. package/es/watermark/src/types.d.ts +182 -0
  256. package/es/watermark/src/user.d.ts +71 -0
  257. package/es/watermark/vue2.d.ts +10 -0
  258. package/es/watermark/vue3.d.ts +2 -0
  259. package/lib/components/src/base/affix/Affix.vue.d.ts +2 -2
  260. package/lib/components/src/base/alert/Alert.vue.d.ts +3 -3
  261. package/lib/components/src/base/alert/index.d.ts +8 -8
  262. package/lib/components/src/base/anchor/Anchor.vue.d.ts +1 -1
  263. package/lib/components/src/base/anchor/index.d.ts +3 -3
  264. package/lib/components/src/base/autocomplete/Autocomplete.vue.d.ts +11 -11
  265. package/lib/components/src/base/autocomplete/autocomplete.d.ts +1 -1
  266. package/lib/components/src/base/autocomplete/index.d.ts +30 -30
  267. package/lib/components/src/base/badge/Badge.vue.d.ts +1 -1
  268. package/lib/components/src/base/badge/index.d.ts +3 -3
  269. package/lib/components/src/base/button/Button.vue.d.ts +9 -9
  270. package/lib/components/src/base/button/button.d.ts +4 -4
  271. package/lib/components/src/base/button/index.d.ts +23 -23
  272. package/lib/components/src/base/buttonGroup/ButtonGroup.vue.d.ts +3 -3
  273. package/lib/components/src/base/buttonGroup/buttonGroup.d.ts +1 -1
  274. package/lib/components/src/base/buttonGroup/index.d.ts +7 -7
  275. package/lib/components/src/base/carousel/Carousel.vue.d.ts +1 -1
  276. package/lib/components/src/base/carousel/index.d.ts +3 -3
  277. package/lib/components/src/base/cascader/Cascader.vue.d.ts +6 -6
  278. package/lib/components/src/base/cascader/index.d.ts +18 -18
  279. package/lib/components/src/base/chart/Chart.vue.d.ts +2 -2
  280. package/lib/components/src/base/chart/index.d.ts +2 -2
  281. package/lib/components/src/base/checkbox/Checkbox.vue.d.ts +2 -2
  282. package/lib/components/src/base/checkbox/index.d.ts +6 -6
  283. package/lib/components/src/base/checkboxButton/CheckboxButton.vue.d.ts +2 -2
  284. package/lib/components/src/base/checkboxButton/index.d.ts +6 -6
  285. package/lib/components/src/base/col/Col.vue.d.ts +1 -1
  286. package/lib/components/src/base/col/index.d.ts +3 -3
  287. package/lib/components/src/base/collapseItem/CollapseItem.vue.d.ts +1 -1
  288. package/lib/components/src/base/collapseItem/index.d.ts +3 -3
  289. package/lib/components/src/base/colorPicker/ColorPicker.vue.d.ts +6 -6
  290. package/lib/components/src/base/colorPicker/index.d.ts +6 -6
  291. package/lib/components/src/base/colorPickerPanel/ColorPickerPanel.vue.d.ts +1 -1
  292. package/lib/components/src/base/colorPickerPanel/index.d.ts +1 -1
  293. package/lib/components/src/base/datePicker/DatePicker.vue.d.ts +5 -5
  294. package/lib/components/src/base/datePicker/index.d.ts +15 -15
  295. package/lib/components/src/base/datePickerPanel/DatePickerPanel.vue.d.ts +1 -1
  296. package/lib/components/src/base/datePickerPanel/index.d.ts +3 -3
  297. package/lib/components/src/base/descriptions/Descriptions.vue.d.ts +1 -1
  298. package/lib/components/src/base/descriptions/index.d.ts +3 -3
  299. package/lib/components/src/base/descriptionsItem/DescriptionsItem.vue.d.ts +6 -6
  300. package/lib/components/src/base/descriptionsItem/descriptionsItem.d.ts +2 -2
  301. package/lib/components/src/base/descriptionsItem/index.d.ts +14 -14
  302. package/lib/components/src/base/dialog/Dialog.vue.d.ts +3 -3
  303. package/lib/components/src/base/dialog/index.d.ts +8 -8
  304. package/lib/components/src/base/divider/Divider.vue.d.ts +3 -3
  305. package/lib/components/src/base/divider/divider.d.ts +1 -1
  306. package/lib/components/src/base/divider/index.d.ts +7 -7
  307. package/lib/components/src/base/drawer/Drawer.vue.d.ts +4 -4
  308. package/lib/components/src/base/drawer/index.d.ts +11 -11
  309. package/lib/components/src/base/dropdown/Dropdown.vue.d.ts +7 -7
  310. package/lib/components/src/base/dropdown/dropdown.d.ts +2 -2
  311. package/lib/components/src/base/dropdown/index.d.ts +17 -17
  312. package/lib/components/src/base/form/Form.vue.d.ts +1 -1
  313. package/lib/components/src/base/form/index.d.ts +3 -3
  314. package/lib/components/src/base/image/Image.vue.d.ts +3 -3
  315. package/lib/components/src/base/image/index.d.ts +8 -8
  316. package/lib/components/src/base/imageViewer/ImageViewer.vue.d.ts +2 -2
  317. package/lib/components/src/base/imageViewer/index.d.ts +4 -4
  318. package/lib/components/src/base/input/Input.vue.d.ts +14 -14
  319. package/lib/components/src/base/input/index.d.ts +38 -38
  320. package/lib/components/src/base/input/input.d.ts +1 -1
  321. package/lib/components/src/base/inputNumber/InputNumber.vue.d.ts +12 -12
  322. package/lib/components/src/base/inputNumber/index.d.ts +31 -31
  323. package/lib/components/src/base/inputNumber/inputNumber.d.ts +2 -2
  324. package/lib/components/src/base/inputTag/InputTag.vue.d.ts +6 -6
  325. package/lib/components/src/base/inputTag/index.d.ts +17 -17
  326. package/lib/components/src/base/link/Link.vue.d.ts +1 -1
  327. package/lib/components/src/base/link/index.d.ts +3 -3
  328. package/lib/components/src/base/mention/Mention.vue.d.ts +13 -13
  329. package/lib/components/src/base/mention/index.d.ts +37 -37
  330. package/lib/components/src/base/mention/mention.d.ts +1 -1
  331. package/lib/components/src/base/menu/Menu.vue.d.ts +4 -4
  332. package/lib/components/src/base/menu/index.d.ts +10 -10
  333. package/lib/components/src/base/pagination/Pagination.vue.d.ts +1 -1
  334. package/lib/components/src/base/pagination/index.d.ts +3 -3
  335. package/lib/components/src/base/popconfirm/Popconfirm.vue.d.ts +8 -8
  336. package/lib/components/src/base/popconfirm/index.d.ts +19 -19
  337. package/lib/components/src/base/popconfirm/popconfirm.d.ts +2 -2
  338. package/lib/components/src/base/popover/Popover.vue.d.ts +3 -3
  339. package/lib/components/src/base/popover/index.d.ts +9 -9
  340. package/lib/components/src/base/popper/Popper.vue.d.ts +3 -3
  341. package/lib/components/src/base/popper/index.d.ts +7 -7
  342. package/lib/components/src/base/popper/popper.d.ts +1 -1
  343. package/lib/components/src/base/progress/Progress.vue.d.ts +2 -2
  344. package/lib/components/src/base/progress/index.d.ts +6 -6
  345. package/lib/components/src/base/radio/Radio.vue.d.ts +1 -1
  346. package/lib/components/src/base/radio/index.d.ts +3 -3
  347. package/lib/components/src/base/radioGroup/RadioGroup.vue.d.ts +1 -1
  348. package/lib/components/src/base/radioGroup/index.d.ts +3 -3
  349. package/lib/components/src/base/result/Result.vue.d.ts +1 -1
  350. package/lib/components/src/base/result/index.d.ts +3 -3
  351. package/lib/components/src/base/scrollbar/Scrollbar.vue.d.ts +3 -3
  352. package/lib/components/src/base/scrollbar/index.d.ts +7 -7
  353. package/lib/components/src/base/scrollbar/scrollbar.d.ts +1 -1
  354. package/lib/components/src/base/segmented/Segmented.vue.d.ts +1 -1
  355. package/lib/components/src/base/segmented/index.d.ts +3 -3
  356. package/lib/components/src/base/select/Select.vue.d.ts +7 -7
  357. package/lib/components/src/base/select/index.d.ts +21 -21
  358. package/lib/components/src/base/selectV2/SelectV2.vue.d.ts +8 -8
  359. package/lib/components/src/base/selectV2/index.d.ts +24 -24
  360. package/lib/components/src/base/skeletonItem/SkeletonItem.vue.d.ts +3 -3
  361. package/lib/components/src/base/skeletonItem/index.d.ts +7 -7
  362. package/lib/components/src/base/skeletonItem/skeletonItem.d.ts +1 -1
  363. package/lib/components/src/base/slider/Slider.vue.d.ts +2 -2
  364. package/lib/components/src/base/slider/index.d.ts +5 -5
  365. package/lib/components/src/base/space/Space.vue.d.ts +5 -5
  366. package/lib/components/src/base/space/index.d.ts +13 -13
  367. package/lib/components/src/base/space/space.d.ts +1 -1
  368. package/lib/components/src/base/steps/Steps.vue.d.ts +1 -1
  369. package/lib/components/src/base/steps/index.d.ts +3 -3
  370. package/lib/components/src/base/switch/Switch.vue.d.ts +2 -2
  371. package/lib/components/src/base/switch/index.d.ts +5 -5
  372. package/lib/components/src/base/table/Table.vue.d.ts +5 -5
  373. package/lib/components/src/base/table/index.d.ts +10 -10
  374. package/lib/components/src/base/table/table.d.ts +2 -2
  375. package/lib/components/src/base/tableColumn/TableColumn.vue.d.ts +4 -4
  376. package/lib/components/src/base/tableColumn/index.d.ts +10 -10
  377. package/lib/components/src/base/tableColumn/tableColumn.d.ts +1 -1
  378. package/lib/components/src/base/tableV2/TableV2.vue.d.ts +3 -3
  379. package/lib/components/src/base/tableV2/index.d.ts +7 -7
  380. package/lib/components/src/base/tableV2/tableV2.d.ts +1 -1
  381. package/lib/components/src/base/tag/Tag.vue.d.ts +3 -3
  382. package/lib/components/src/base/tag/index.d.ts +8 -8
  383. package/lib/components/src/base/text/Text.vue.d.ts +1 -1
  384. package/lib/components/src/base/text/index.d.ts +3 -3
  385. package/lib/components/src/base/timePicker/TimePicker.vue.d.ts +6 -6
  386. package/lib/components/src/base/timePicker/index.d.ts +18 -18
  387. package/lib/components/src/base/timeSelect/TimeSelect.vue.d.ts +6 -6
  388. package/lib/components/src/base/timeSelect/index.d.ts +18 -18
  389. package/lib/components/src/base/timelineItem/TimelineItem.vue.d.ts +3 -3
  390. package/lib/components/src/base/timelineItem/index.d.ts +9 -9
  391. package/lib/components/src/base/tooltip/Tooltip.vue.d.ts +5 -5
  392. package/lib/components/src/base/tooltip/index.d.ts +13 -13
  393. package/lib/components/src/base/tooltip/tooltip.d.ts +1 -1
  394. package/lib/components/src/base/tour/Tour.vue.d.ts +1 -1
  395. package/lib/components/src/base/tour/index.d.ts +3 -3
  396. package/lib/components/src/base/tourStep/TourStep.vue.d.ts +1 -1
  397. package/lib/components/src/base/tourStep/index.d.ts +3 -3
  398. package/lib/components/src/base/treeSelect/TreeSelect.vue.d.ts +8 -8
  399. package/lib/components/src/base/upload/Upload.vue.d.ts +6 -6
  400. package/lib/components/src/base/upload/index.d.ts +16 -16
  401. package/lib/components/src/base/upload/upload.d.ts +1 -1
  402. package/lib/components/src/business/uploadItem/UploadItem.vue.d.ts +7 -7
  403. package/lib/components/src/business/uploadItem/index.d.ts +19 -19
  404. package/lib/components/src/business/uploadItem/uploadItem.d.ts +1 -1
  405. package/lib/components/src/business/uploadPro/UploadPro.vue.d.ts +8 -8
  406. package/lib/components/src/business/uploadPro/index.d.ts +22 -22
  407. package/lib/components/src/business/uploadPro/uploadPro.d.ts +1 -1
  408. package/lib/components/src/composite/dialogForm/DialogForm.vue.d.ts +14 -14
  409. package/lib/components/src/composite/dialogForm/index.d.ts +40 -40
  410. package/lib/components/src/composite/drawerForm/DrawerForm.vue.d.ts +18 -18
  411. package/lib/components/src/composite/drawerForm/index.d.ts +52 -52
  412. package/lib/components/src/composite/fileComponent/FileComponent.vue.d.ts +1 -1
  413. package/lib/components/src/composite/fileComponent/index.d.ts +3 -3
  414. package/lib/components/src/composite/fileList2/FileList.vue.d.ts +1 -1
  415. package/lib/components/src/composite/fileList2/index.d.ts +3 -3
  416. package/lib/components/src/composite/formItemModule/FormItemModule.vue.d.ts +3 -3
  417. package/lib/components/src/composite/formItemModule/index.d.ts +3 -3
  418. package/lib/components/src/composite/importDialog/ImportDialog.vue.d.ts +5 -5
  419. package/lib/components/src/composite/importDialog/importDialog.d.ts +1 -1
  420. package/lib/components/src/composite/importDialog/index.d.ts +13 -13
  421. package/lib/components/src/composite/memoryForm/MemoryForm.vue.d.ts +1 -1
  422. package/lib/components/src/composite/memoryForm/index.d.ts +3 -3
  423. package/lib/components/src/composite/numberInterval/NumberInterval.vue.d.ts +1 -1
  424. package/lib/components/src/composite/numberInterval/index.d.ts +1 -1
  425. package/lib/components/src/composite/operateButton/OperateButton.vue.d.ts +3 -3
  426. package/lib/components/src/composite/operateButton/index.d.ts +3 -3
  427. package/lib/components/src/composite/operateButton/operateButton.d.ts +1 -1
  428. package/lib/components/src/composite/previewFile/PreviewFile.vue.d.ts +1 -1
  429. package/lib/components/src/composite/previewFile/index.d.ts +1 -1
  430. package/lib/components/src/composite/ruleEditor/RuleEditor.vue.d.ts +1 -1
  431. package/lib/components/src/composite/ruleEditor/index.d.ts +1 -1
  432. package/lib/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue.d.ts +4 -4
  433. package/lib/components/src/composite/searchForm/searchFormItems/cascader/index.d.ts +4 -4
  434. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +4 -4
  435. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +4 -4
  436. package/lib/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue.d.ts +6 -6
  437. package/lib/components/src/composite/searchForm/searchFormItems/input/index.d.ts +6 -6
  438. package/lib/components/src/composite/searchForm/searchFormItems/numberInterval/SearchFormNumberInterval.vue.d.ts +1 -1
  439. package/lib/components/src/composite/searchForm/searchFormItems/numberInterval/index.d.ts +1 -1
  440. package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +5 -5
  441. package/lib/components/src/composite/searchForm/searchFormItems/select/index.d.ts +5 -5
  442. package/lib/components/src/composite/searchForm/searchFormItems/selectV2/SearchFormSelectV2.vue.d.ts +5 -5
  443. package/lib/components/src/composite/searchForm/searchFormItems/selectV2/index.d.ts +5 -5
  444. package/lib/components/src/composite/selectOptions/SelectOptions.vue.d.ts +6 -6
  445. package/lib/components/src/composite/selectOptions/index.d.ts +18 -18
  446. package/lib/components/src/composite/tableCustom/TableCustom.vue.d.ts +8 -8
  447. package/lib/components/src/composite/tableCustom/customOperate/customOperate.d.ts +1 -1
  448. package/lib/components/src/composite/tableCustom/index.d.ts +19 -19
  449. package/lib/components/src/composite/tableCustom/tableCustom.d.ts +2 -2
  450. package/lib/components/src/composite/tablePro/TablePro.vue.d.ts +8 -8
  451. package/lib/components/src/composite/tablePro/index.d.ts +19 -19
  452. package/lib/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue.d.ts +4 -4
  453. package/lib/components/src/composite/tablePro/tableColumnPro/index.d.ts +10 -10
  454. package/lib/components/src/composite/tablePro/tableColumnPro/tableColumnPro.d.ts +1 -1
  455. package/lib/components/src/composite/tablePro/tablePagination/TablePagination.vue.d.ts +2 -2
  456. package/lib/components/src/composite/tablePro/tablePagination/index.d.ts +2 -2
  457. package/lib/components/src/composite/tablePro/tablePro.d.ts +2 -2
  458. package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +9 -9
  459. package/lib/components/src/composite/uploadFile/index.d.ts +25 -25
  460. package/lib/components/src/composite/uploadFile/uploadFile.d.ts +1 -1
  461. package/lib/components/src/plugins/message/method.d.ts +4 -4
  462. package/lib/constants/key.d.ts +9 -0
  463. package/lib/constants/key.js.map +1 -1
  464. package/lib/crx/src/login/LoginPrompt.vue.d.ts +1 -1
  465. package/lib/giime/index.js +404 -385
  466. package/lib/giime/index.js.map +1 -1
  467. package/lib/giime/makeInstaller.js +5 -0
  468. package/lib/giime/makeInstaller.js.map +1 -1
  469. package/lib/giime/version.d.ts +1 -1
  470. package/lib/giime/version.js +1 -1
  471. package/lib/giime/version.js.map +1 -1
  472. package/lib/track/__tests__/reliability.test.d.ts +1 -0
  473. package/lib/track/__tests__/track.test.d.ts +1 -0
  474. package/lib/track/axios.d.ts +1 -0
  475. package/lib/track/html.d.ts +1 -0
  476. package/lib/track/index.d.ts +16 -0
  477. package/lib/track/src/adapters/axios.d.ts +19 -0
  478. package/lib/track/src/adapters/html.d.ts +18 -0
  479. package/lib/track/src/adapters/vue2.d.ts +35 -0
  480. package/lib/track/src/adapters/vue3.d.ts +69 -0
  481. package/lib/track/src/collectors/click.d.ts +10 -0
  482. package/lib/track/src/collectors/error.d.ts +13 -0
  483. package/lib/track/src/collectors/exposure.d.ts +9 -0
  484. package/lib/track/src/collectors/formAndCopy.d.ts +10 -0
  485. package/lib/track/src/collectors/hover.d.ts +10 -0
  486. package/lib/track/src/collectors/lifecycle.d.ts +14 -0
  487. package/lib/track/src/collectors/scrollAndPath.d.ts +10 -0
  488. package/lib/track/src/core/pendingStore.d.ts +7 -0
  489. package/lib/track/src/core/queue.d.ts +68 -0
  490. package/lib/track/src/core/session.d.ts +138 -0
  491. package/lib/track/src/core/singleton.d.ts +49 -0
  492. package/lib/track/src/core/tracker.d.ts +226 -0
  493. package/lib/track/src/types/index.d.ts +351 -0
  494. package/lib/track/src/utils/browser.d.ts +16 -0
  495. package/lib/track/src/utils/dom.d.ts +89 -0
  496. package/lib/track/src/utils/env.d.ts +101 -0
  497. package/lib/track/src/utils/id.d.ts +80 -0
  498. package/lib/track/vue2.d.ts +1 -0
  499. package/lib/track/vue3.d.ts +1 -0
  500. package/lib/utils/index.d.ts +1 -0
  501. package/lib/utils/index.js +19 -0
  502. package/lib/utils/index.js.map +1 -1
  503. package/lib/utils/src/watermark/index.d.ts +191 -0
  504. package/lib/utils/src/watermark/index.js +777 -0
  505. package/lib/utils/src/watermark/index.js.map +1 -0
  506. package/lib/watermark/__tests__/watermark.test.d.ts +1 -0
  507. package/lib/watermark/auto.d.ts +7 -0
  508. package/lib/watermark/index.d.ts +9 -0
  509. package/lib/watermark/src/adapters/vue2.d.ts +18 -0
  510. package/lib/watermark/src/adapters/vue3.d.ts +23 -0
  511. package/lib/watermark/src/core.d.ts +148 -0
  512. package/lib/watermark/src/iframe.d.ts +67 -0
  513. package/lib/watermark/src/types.d.ts +182 -0
  514. package/lib/watermark/src/user.d.ts +71 -0
  515. package/lib/watermark/vue2.d.ts +10 -0
  516. package/lib/watermark/vue3.d.ts +2 -0
  517. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../packages/utils/src/watermark/index.ts"],"sourcesContent":["/**\n * @file Giime (Vue 3) 内置智能水印模块 (@giime/utils/src/watermark)\n * @description\n * 面向 acore-front 等 Vue 3 项目的内置水印引擎(由 `app.use(Giime, ...)` 自动挂载,也可通过 `import { Watermark, initWatermark, useWatermark } from 'giime'` 手动控制):\n * 1. 智能感知窗口嵌套与父级水印状态(默认策略 `'ancestor-detect'`):\n * - 单独打开前端页面(`window.self === window.top`):直接展示全屏水印;\n * - 在 GSMP 综合管理平台或已带水印的外层页面中通过 iframe 打开时:检测到外层已有水印(同源检测 `#__giime_watermark__` / 老版 `.mask_div`,或跨源 `postMessage` 握手收到 `pong` / `suppress`),自动隐藏内部水印;\n * - 单独打开一个**未接入水印**的外层前端页面,其内部通过 iframe 嵌套本页面时:检测到外层无水印,本页面在 iframe 内**自动兜底展示水印**;\n * 2. 防 Cookie 篡改用户身份识别(参考 `Clarity`):\n * - 直接从 `useCurrentUserStore()`(底层调用 `/guard/basic/v1/user/getCurrentUser` 校验 JWT `token`)读取服务端认证的真实 `userInfo.id`,绝不读取易被用户在控制台修改的 `sso_user_id` Cookie;\n * 3. 视觉样式(#aaa、0.1 透明度、-20deg 逆时针倾斜、15px 微软雅黑、210×80 尺寸及自适应间距)与旧版完全一致。\n */\n\nimport { watch } from 'vue';\nimport { until } from '@vueuse/core';\nimport Cookies from 'js-cookie';\nimport { useLoginStore } from '@giime/hooks/store/useLogin';\nimport { useCurrentUserStore } from '@giime/hooks/store/userCenter/useCurrentUser';\n\nexport type WatermarkIframeStrategy = 'ancestor-detect' | 'top-only' | 'always' | 'never';\n\nexport interface WatermarkFormatContext {\n userId: string;\n date: string;\n prefix: string;\n}\n\nexport interface WatermarkOptions {\n /** 是否启用水印(默认 true) */\n enabled?: boolean;\n /**\n * Iframe 嵌套处理策略(默认 `'ancestor-detect'`)\n * - `'ancestor-detect'`(默认):同源向上检测 `#__giime_watermark__` / `.mask_div` + 跨源 postMessage 握手探测父级是否有水印;若外层有水印则隐藏,若外层未接入水印则子 iframe 自动兜底展示水印\n * - `'top-only'`:仅顶层窗口渲染水印,任意处于 iframe 内的页面一律隐藏\n * - `'always'`:强制始终渲染\n * - `'never'`:禁用并销毁\n */\n iframeStrategy?: WatermarkIframeStrategy;\n /** `'ancestor-detect'` 模式下跨源握手等待超时毫秒数(默认 120) */\n detectTimeoutMs?: number;\n /** 水印品牌前缀(默认 '吉客印') */\n prefix?: string;\n /** 显式指定用户 ID(不传则自动从 `useCurrentUserStore().userInfo.id` 读取) */\n userId?: string | number;\n /** 自定义动态获取用户 ID 的函数 */\n getUserId?: () => string | number | undefined | null;\n /** 自定义水印文本或格式化函数(默认生成 `吉客印-${userId}-${YYYY年MM月DD日}`) */\n text?: string | ((ctx: WatermarkFormatContext) => string);\n /** 水印起始位置 X 轴坐标(默认 20) */\n x?: number;\n /** 水印起始位置 Y 轴坐标(默认 20) */\n y?: number;\n /** 水印行数(默认 20) */\n rows?: number;\n /** 水印列数(默认 20) */\n cols?: number;\n /** 水印 X 轴间隔(默认 100) */\n xSpace?: number;\n /** 水印 Y 轴间隔(默认 50) */\n ySpace?: number;\n /** 水印字体颜色(默认 '#aaa') */\n color?: string;\n /** 水印透明度(默认 0.1) */\n alpha?: number;\n /** 水印字体大小(默认 '15px') */\n fontSize?: string;\n /** 水印字体(默认 '微软雅黑') */\n font?: string;\n /** 单个水印块宽度(默认 210) */\n width?: number;\n /** 单个水印块高度(默认 80) */\n height?: number;\n /** 水印倾斜角度度数(默认 20) */\n angle?: number;\n /** 水印容器层级 z-index(默认 9999) */\n zIndex?: number;\n /** 是否开启 MutationObserver 防篡改保护(默认 true) */\n antiTamper?: boolean;\n /** 是否监听窗口 resize 自动重排(默认 true) */\n watchResize?: boolean;\n /** 是否自动清理页面上遗留的老版裸 `.mask_div` 节点(默认 true) */\n cleanLegacyMask?: boolean;\n}\n\nexport interface NormalizedWatermarkConfig {\n enabled: boolean;\n iframeStrategy: WatermarkIframeStrategy;\n detectTimeoutMs: number;\n prefix: string;\n userId?: string | number;\n getUserId?: () => string | number | undefined | null;\n text?: string | ((ctx: WatermarkFormatContext) => string);\n x: number;\n y: number;\n rows: number;\n cols: number;\n xSpace: number;\n ySpace: number;\n color: string;\n alpha: number;\n fontSize: string;\n font: string;\n width: number;\n height: number;\n angle: number;\n zIndex: number;\n antiTamper: boolean;\n watchResize: boolean;\n cleanLegacyMask: boolean;\n}\n\nexport interface WatermarkState {\n inIframe: boolean;\n active: boolean;\n reason:\n | 'rendered-top'\n | 'rendered-forced'\n | 'rendered-fallback'\n | 'suppressed-in-iframe'\n | 'suppressed-by-ancestor'\n | 'disabled'\n | 'ssr';\n text: string;\n userId: string;\n rows: number;\n cols: number;\n}\n\nexport const GIIME_WATERMARK_GLOBAL_SYMBOL = Symbol.for('__giime.watermark.singleton__');\n\nexport const WATERMARK_MESSAGE_TYPES = {\n PING: 'giime-watermark:ping',\n PONG: 'giime-watermark:pong',\n SUPPRESS: 'giime-watermark:suppress',\n} as const;\n\nexport const WATERMARK_DOM_CONSTANTS = {\n CONTAINER_ID: '__giime_watermark__',\n CONTAINER_CLASS: 'giime-watermark-container',\n LEGACY_ITEM_CLASS: 'mask_div',\n ROOT_ATTR: 'data-giime-watermark',\n} as const;\n\nexport const sanitizeUserId = (raw: unknown): string => {\n if (raw === undefined || raw === null) {\n return '';\n }\n const str = String(raw).trim();\n if (!str || str === 'undefined' || str === 'null' || str === 'NaN') {\n return '';\n }\n return str;\n};\n\n/**\n * 闭包保存由 useCurrentUserStore 从服务端拉取到的真实用户 ID\n */\nlet storeVerifiedUserId = '';\n\n/**\n * 解析当前用户 ID:\n * 1. 优先显式配置\n * 2. 若 useCurrentUserStore 已返回服务端真实用户 ID,则优先使用\n * 3. 默认首屏先读 Cookie `sso_user_id`(0ms 同步直出不闪烁,随后由 useCurrentUserStore 静默比对纠偏)\n */\nexport const resolveWatermarkUserId = (\n config?: Pick<NormalizedWatermarkConfig, 'userId' | 'getUserId'>,\n): string => {\n if (config?.getUserId) {\n try {\n const customId = sanitizeUserId(config.getUserId());\n if (customId) {\n return customId;\n }\n } catch {\n // ignore\n }\n }\n\n const explicitId = sanitizeUserId(config?.userId);\n if (explicitId) {\n return explicitId;\n }\n\n if (storeVerifiedUserId) {\n return storeVerifiedUserId;\n }\n\n return sanitizeUserId(Cookies.get('sso_user_id'));\n};\n\nexport const formatWatermarkDate = (date: Date = new Date()): string => {\n const year = date.getFullYear();\n const monthNum = date.getMonth() + 1;\n const dayNum = date.getDate();\n const month = monthNum < 10 ? `0${monthNum}` : String(monthNum);\n const day = dayNum < 10 ? `0${dayNum}` : String(dayNum);\n return `${year}年${month}月${day}日`;\n};\n\nexport const buildWatermarkText = (\n config: Pick<NormalizedWatermarkConfig, 'prefix' | 'text' | 'userId' | 'getUserId'>,\n resolvedUserId?: string,\n dateStr: string = formatWatermarkDate(),\n): string => {\n const userId = resolvedUserId !== undefined ? sanitizeUserId(resolvedUserId) : resolveWatermarkUserId(config);\n const prefix = config.prefix || '吉客印';\n\n if (typeof config.text === 'function') {\n return config.text({ userId, date: dateStr, prefix });\n }\n if (typeof config.text === 'string' && config.text.trim()) {\n return config.text.trim();\n }\n\n return userId ? `${prefix}-${userId}-${dateStr}` : `${prefix}-${dateStr}`;\n};\n\nexport const isInIframe = (win?: Window): boolean => {\n const targetWin = win ?? (typeof window !== 'undefined' ? window : undefined);\n if (!targetWin) {\n return false;\n }\n try {\n return targetWin.self !== targetWin.top;\n } catch {\n return true;\n }\n};\n\nexport const inspectSameOriginAncestors = (\n win?: Window,\n): {\n hasWatermark: boolean;\n allAncestorsAccessible: boolean;\n} => {\n const targetWin = win ?? (typeof window !== 'undefined' ? window : undefined);\n if (!targetWin || !isInIframe(targetWin)) {\n return { hasWatermark: false, allAncestorsAccessible: true };\n }\n\n let current: Window | null = targetWin;\n let depth = 0;\n let allAncestorsAccessible = true;\n\n while (current && depth < 15) {\n depth++;\n let parentWin: Window | null = null;\n try {\n parentWin = current.parent;\n } catch {\n allAncestorsAccessible = false;\n break;\n }\n if (!parentWin || parentWin === current) {\n break;\n }\n\n try {\n const anyParent = parentWin as any;\n if (anyParent.__GIIME_WATERMARK_ACTIVE__ === true) {\n return { hasWatermark: true, allAncestorsAccessible };\n }\n const parentDoc = parentWin.document;\n if (parentDoc) {\n if (\n parentDoc.getElementById(WATERMARK_DOM_CONSTANTS.CONTAINER_ID) ||\n parentDoc.documentElement?.getAttribute(WATERMARK_DOM_CONSTANTS.ROOT_ATTR) === 'active' ||\n parentDoc.querySelector(`.${WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS}`)\n ) {\n return { hasWatermark: true, allAncestorsAccessible };\n }\n } else {\n allAncestorsAccessible = false;\n }\n } catch {\n allAncestorsAccessible = false;\n }\n\n try {\n if (parentWin === targetWin.top) {\n break;\n }\n } catch {\n allAncestorsAccessible = false;\n break;\n }\n current = parentWin;\n }\n\n return { hasWatermark: false, allAncestorsAccessible };\n};\n\nexport const hasSameOriginAncestorWatermark = (win?: Window): boolean => {\n return inspectSameOriginAncestors(win).hasWatermark;\n};\n\nexport const shouldRenderWatermark = (\n strategy: WatermarkIframeStrategy = 'ancestor-detect',\n win?: Window,\n): {\n shouldRender: boolean;\n inIframe: boolean;\n needsAsyncDetect: boolean;\n reason: WatermarkState['reason'];\n} => {\n const targetWin = win ?? (typeof window !== 'undefined' ? window : undefined);\n if (!targetWin || typeof document === 'undefined') {\n return { shouldRender: false, inIframe: false, needsAsyncDetect: false, reason: 'ssr' };\n }\n\n if (strategy === 'never') {\n return { shouldRender: false, inIframe: isInIframe(targetWin), needsAsyncDetect: false, reason: 'disabled' };\n }\n\n const inIframe = isInIframe(targetWin);\n\n if (strategy === 'always') {\n return {\n shouldRender: true,\n inIframe,\n needsAsyncDetect: false,\n reason: inIframe ? 'rendered-forced' : 'rendered-top',\n };\n }\n\n if (!inIframe) {\n return {\n shouldRender: true,\n inIframe: false,\n needsAsyncDetect: false,\n reason: 'rendered-top',\n };\n }\n\n if (strategy === 'top-only') {\n return {\n shouldRender: false,\n inIframe: true,\n needsAsyncDetect: false,\n reason: 'suppressed-in-iframe',\n };\n }\n\n const { hasWatermark, allAncestorsAccessible } = inspectSameOriginAncestors(targetWin);\n if (hasWatermark) {\n return {\n shouldRender: false,\n inIframe: true,\n needsAsyncDetect: false,\n reason: 'suppressed-by-ancestor',\n };\n }\n\n return {\n shouldRender: true,\n inIframe: true,\n needsAsyncDetect: !allAncestorsAccessible,\n reason: 'rendered-fallback',\n };\n};\n\nconst broadcastSuppressToChildFrames = (text: string): void => {\n if (typeof document === 'undefined') {\n return;\n }\n try {\n const iframes = document.querySelectorAll('iframe');\n const message = {\n type: WATERMARK_MESSAGE_TYPES.SUPPRESS,\n active: true,\n text,\n };\n iframes.forEach(iframe => {\n try {\n iframe.contentWindow?.postMessage(message, '*');\n } catch {\n // ignore\n }\n });\n } catch {\n // ignore\n }\n};\n\nconst detectAncestorWatermarkAsync = (timeoutMs = 120): Promise<boolean> => {\n if (typeof window === 'undefined' || !isInIframe(window)) {\n return Promise.resolve(false);\n }\n const { hasWatermark, allAncestorsAccessible } = inspectSameOriginAncestors(window);\n if (hasWatermark) {\n return Promise.resolve(true);\n }\n if (allAncestorsAccessible) {\n return Promise.resolve(false);\n }\n\n return new Promise<boolean>(resolve => {\n let settled = false;\n const finish = (hasAncestor: boolean) => {\n if (settled) return;\n settled = true;\n window.removeEventListener('message', onMessage);\n clearTimeout(timer);\n resolve(hasAncestor);\n };\n\n const onMessage = (event: MessageEvent) => {\n const data = event?.data;\n if (\n data &&\n typeof data === 'object' &&\n (data.type === WATERMARK_MESSAGE_TYPES.PONG || data.type === WATERMARK_MESSAGE_TYPES.SUPPRESS) &&\n data.active !== false\n ) {\n finish(true);\n }\n };\n\n window.addEventListener('message', onMessage);\n const timer = setTimeout(() => finish(false), Math.max(20, timeoutMs));\n\n const pingPayload = { type: WATERMARK_MESSAGE_TYPES.PING, timestamp: Date.now() };\n try {\n window.parent?.postMessage(pingPayload, '*');\n } catch {\n // ignore\n }\n try {\n if (window.top && window.top !== window.parent) {\n window.top.postMessage(pingPayload, '*');\n }\n } catch {\n // ignore\n }\n });\n};\n\nconst normalizeWatermarkOptions = (\n options: WatermarkOptions = {},\n base?: NormalizedWatermarkConfig,\n): NormalizedWatermarkConfig => {\n return {\n enabled: options.enabled ?? base?.enabled ?? true,\n iframeStrategy: options.iframeStrategy ?? base?.iframeStrategy ?? 'ancestor-detect',\n detectTimeoutMs: options.detectTimeoutMs ?? base?.detectTimeoutMs ?? 120,\n prefix: options.prefix ?? base?.prefix ?? '吉客印',\n userId: options.userId !== undefined ? options.userId : base?.userId,\n getUserId: options.getUserId ?? base?.getUserId,\n text: options.text ?? base?.text,\n x: options.x ?? base?.x ?? 20,\n y: options.y ?? base?.y ?? 20,\n rows: options.rows ?? base?.rows ?? 20,\n cols: options.cols ?? base?.cols ?? 20,\n xSpace: options.xSpace ?? base?.xSpace ?? 100,\n ySpace: options.ySpace ?? base?.ySpace ?? 50,\n color: options.color ?? base?.color ?? '#aaa',\n alpha: options.alpha ?? base?.alpha ?? 0.1,\n fontSize: options.fontSize ?? base?.fontSize ?? '15px',\n font: options.font ?? base?.font ?? '微软雅黑',\n width: options.width ?? base?.width ?? 210,\n height: options.height ?? base?.height ?? 80,\n angle: options.angle ?? base?.angle ?? 20,\n zIndex: options.zIndex ?? base?.zIndex ?? 9999,\n antiTamper: options.antiTamper ?? base?.antiTamper ?? true,\n watchResize: options.watchResize ?? base?.watchResize ?? true,\n cleanLegacyMask: options.cleanLegacyMask ?? base?.cleanLegacyMask ?? true,\n };\n};\n\nconst calculateWatermarkGrid = (\n config: NormalizedWatermarkConfig,\n viewportWidth: number,\n viewportHeight: number,\n) => {\n const cutWidth = viewportWidth * 0.015;\n const pageWidth = Math.max(320, viewportWidth - cutWidth);\n const pageHeight = Math.max(viewportHeight + 450, window.innerHeight ? window.innerHeight - 40 : 720);\n\n let cols = config.cols;\n let xSpace = config.xSpace;\n let rows = config.rows;\n let ySpace = config.ySpace;\n\n const totalConfigWidth = Math.trunc(config.x + config.width * cols + xSpace * (cols - 1));\n if (cols === 0 || totalConfigWidth > pageWidth) {\n cols = Math.max(1, Math.trunc((pageWidth - config.x + xSpace) / (config.width + xSpace)));\n xSpace = cols > 1 ? Math.max(0, Math.trunc((pageWidth - config.x - config.width * cols) / (cols - 1))) : 0;\n }\n\n const totalConfigHeight = Math.trunc(config.y + config.height * rows + ySpace * (rows - 1));\n if (rows === 0 || totalConfigHeight > pageHeight) {\n rows = Math.max(1, Math.trunc((ySpace + pageHeight - config.y) / (config.height + ySpace)));\n ySpace = rows > 1 ? Math.max(0, Math.trunc((pageHeight - config.y - config.height * rows) / (rows - 1))) : 0;\n }\n\n return { cols, rows, xSpace, ySpace };\n};\n\nconst removeLegacyBodyMasks = (): void => {\n if (typeof document === 'undefined' || !document.body) {\n return;\n }\n const legacyNodes = document.body.querySelectorAll(`:scope > .${WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS}`);\n legacyNodes.forEach(node => {\n node.parentNode?.removeChild(node);\n });\n};\n\nexport class GiimeWatermark {\n private config: NormalizedWatermarkConfig;\n private state: WatermarkState;\n private containerEl: HTMLDivElement | null = null;\n private mutationObserver: MutationObserver | null = null;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private isRenderingInternal = false;\n private listenersAttached = false;\n private domReadyListenerAttached = false;\n\n private readonly handleWindowResize = (): void => {\n if (!this.state.active || !this.config.watchResize) {\n return;\n }\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n }\n this.resizeTimer = setTimeout(() => {\n this.render();\n }, 150);\n };\n\n private readonly handleWindowMessage = (event: MessageEvent): void => {\n const data = event?.data;\n if (!data || typeof data !== 'object') {\n return;\n }\n\n if (data.type === WATERMARK_MESSAGE_TYPES.PING && this.state.active) {\n try {\n const sourceWin = event.source as Window | null;\n sourceWin?.postMessage(\n {\n type: WATERMARK_MESSAGE_TYPES.PONG,\n active: true,\n text: this.state.text,\n },\n '*',\n );\n } catch {\n // ignore\n }\n return;\n }\n\n if (\n (data.type === WATERMARK_MESSAGE_TYPES.SUPPRESS || data.type === WATERMARK_MESSAGE_TYPES.PONG) &&\n data.active !== false &&\n isInIframe() &&\n this.config.iframeStrategy !== 'always'\n ) {\n this.suppressWatermark('suppressed-by-ancestor');\n }\n };\n\n constructor(options?: WatermarkOptions) {\n this.config = normalizeWatermarkOptions(options);\n this.state = {\n inIframe: isInIframe(),\n active: false,\n reason: 'disabled',\n text: '',\n userId: '',\n rows: 0,\n cols: 0,\n };\n this.bootstrap();\n }\n\n private bootstrap(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n this.state.reason = 'ssr';\n return;\n }\n\n this.attachGlobalListeners();\n\n if (!this.config.enabled) {\n this.suppressWatermark('disabled');\n return;\n }\n\n const decision = shouldRenderWatermark(this.config.iframeStrategy);\n this.state.inIframe = decision.inIframe;\n\n if (!decision.shouldRender) {\n this.suppressWatermark(\n decision.reason as 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled',\n );\n return;\n }\n\n if (this.config.iframeStrategy === 'ancestor-detect' && decision.inIframe && decision.needsAsyncDetect) {\n detectAncestorWatermarkAsync(this.config.detectTimeoutMs).then(hasAncestor => {\n if (!this.config.enabled) {\n return;\n }\n if (hasAncestor) {\n this.suppressWatermark('suppressed-by-ancestor');\n } else {\n this.activateWatermark('rendered-fallback');\n }\n });\n return;\n }\n\n this.activateWatermark(decision.reason as 'rendered-top' | 'rendered-forced' | 'rendered-fallback');\n }\n\n private activateWatermark(reason: 'rendered-top' | 'rendered-forced' | 'rendered-fallback'): void {\n this.state.reason = reason;\n this.state.active = true;\n if (typeof window !== 'undefined') {\n (window as any).__GIIME_WATERMARK_ACTIVE__ = true;\n }\n if (typeof document !== 'undefined' && document.documentElement) {\n document.documentElement.setAttribute(WATERMARK_DOM_CONSTANTS.ROOT_ATTR, 'active');\n }\n\n if (typeof document !== 'undefined' && !document.body) {\n if (!this.domReadyListenerAttached) {\n this.domReadyListenerAttached = true;\n window.addEventListener(\n 'DOMContentLoaded',\n () => {\n this.domReadyListenerAttached = false;\n if (this.state.active) {\n this.render();\n }\n },\n { once: true },\n );\n }\n return;\n }\n\n this.render();\n }\n\n private suppressWatermark(reason: 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled'): void {\n this.state.active = false;\n this.state.reason = reason;\n this.state.rows = 0;\n this.state.cols = 0;\n this.stopMutationObserver();\n\n if (typeof window !== 'undefined') {\n (window as any).__GIIME_WATERMARK_ACTIVE__ = false;\n }\n if (typeof document !== 'undefined') {\n document.documentElement?.setAttribute(WATERMARK_DOM_CONSTANTS.ROOT_ATTR, reason);\n if (this.config.cleanLegacyMask) {\n removeLegacyBodyMasks();\n }\n const existing = document.getElementById(WATERMARK_DOM_CONSTANTS.CONTAINER_ID);\n existing?.parentNode?.removeChild(existing);\n }\n this.containerEl = null;\n }\n\n public render(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined' || !document.body) {\n return;\n }\n if (!this.state.active) {\n return;\n }\n\n this.isRenderingInternal = true;\n this.stopMutationObserver();\n\n try {\n if (this.config.cleanLegacyMask) {\n removeLegacyBodyMasks();\n }\n\n const resolvedUserId = resolveWatermarkUserId(this.config);\n const dateStr = formatWatermarkDate();\n const watermarkText = buildWatermarkText(this.config, resolvedUserId, dateStr);\n\n this.state.userId = resolvedUserId;\n this.state.text = watermarkText;\n\n const viewportWidth = Math.max(\n window.innerWidth || 0,\n document.documentElement?.clientWidth || 0,\n document.body.clientWidth || 0,\n 1024,\n );\n const viewportHeight = Math.max(\n window.innerHeight || 0,\n document.documentElement?.clientHeight || 0,\n 768,\n );\n\n const { cols, rows, xSpace, ySpace } = calculateWatermarkGrid(this.config, viewportWidth, viewportHeight);\n\n this.state.cols = cols;\n this.state.rows = rows;\n\n let container = document.getElementById(WATERMARK_DOM_CONSTANTS.CONTAINER_ID) as HTMLDivElement | null;\n\n if (!container) {\n container = document.createElement('div');\n container.id = WATERMARK_DOM_CONSTANTS.CONTAINER_ID;\n container.className = WATERMARK_DOM_CONSTANTS.CONTAINER_CLASS;\n container.setAttribute('data-giime-watermark-container', 'true');\n container.setAttribute('aria-hidden', 'true');\n document.body.appendChild(container);\n }\n\n container.setAttribute(\n 'style',\n [\n 'position: fixed !important',\n 'top: 0px !important',\n 'left: 0px !important',\n 'width: 100vw !important',\n 'height: 100vh !important',\n 'overflow: hidden !important',\n 'pointer-events: none !important',\n 'user-select: none !important',\n '-webkit-user-select: none !important',\n `z-index: ${this.config.zIndex} !important`,\n 'display: block !important',\n 'visibility: visible !important',\n 'opacity: 1 !important',\n 'background: transparent !important',\n ].join('; '),\n );\n\n const fragment = document.createDocumentFragment();\n const rotateStr = `rotate(-${this.config.angle}deg)`;\n\n for (let i = 0; i < rows; i++) {\n const y = this.config.y + (ySpace + this.config.height) * i;\n for (let j = 0; j < cols; j++) {\n const x = this.config.x + (this.config.width + xSpace) * j;\n const maskDiv = document.createElement('div');\n maskDiv.id = `mask_div${i}${j}`;\n maskDiv.className = WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS;\n maskDiv.appendChild(document.createTextNode(watermarkText));\n maskDiv.style.webkitTransform = rotateStr;\n (maskDiv.style as any).MozTransform = rotateStr;\n (maskDiv.style as any).msTransform = rotateStr;\n (maskDiv.style as any).OTransform = rotateStr;\n maskDiv.style.transform = rotateStr;\n maskDiv.style.visibility = '';\n maskDiv.style.position = 'absolute';\n maskDiv.style.left = `${x}px`;\n maskDiv.style.top = `${y}px`;\n maskDiv.style.overflow = 'hidden';\n maskDiv.style.zIndex = String(this.config.zIndex);\n maskDiv.style.pointerEvents = 'none';\n maskDiv.style.opacity = String(this.config.alpha);\n maskDiv.style.fontSize = this.config.fontSize;\n maskDiv.style.fontFamily =\n /^['\"]/.test(this.config.font) || this.config.font.includes(',')\n ? this.config.font\n : `\"${this.config.font}\"`;\n maskDiv.style.color = this.config.color;\n maskDiv.style.textAlign = 'center';\n maskDiv.style.width = `${this.config.width}px`;\n maskDiv.style.height = `${this.config.height}px`;\n maskDiv.style.display = 'block';\n fragment.appendChild(maskDiv);\n }\n }\n\n container.innerHTML = '';\n container.appendChild(fragment);\n this.containerEl = container;\n\n broadcastSuppressToChildFrames(watermarkText);\n } finally {\n this.isRenderingInternal = false;\n if (this.config.antiTamper && this.state.active) {\n this.startMutationObserver();\n }\n }\n }\n\n private startMutationObserver(): void {\n if (\n typeof MutationObserver === 'undefined' ||\n typeof document === 'undefined' ||\n !document.body ||\n this.mutationObserver\n ) {\n return;\n }\n\n this.mutationObserver = new MutationObserver(mutations => {\n if (this.isRenderingInternal || !this.state.active) {\n return;\n }\n\n let needRestore = false;\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const added = Array.from(mutation.addedNodes);\n for (const node of added) {\n const el = node as HTMLElement | null;\n if (el?.tagName === 'IFRAME') {\n el.addEventListener(\n 'load',\n () => {\n if (this.state.active) {\n broadcastSuppressToChildFrames(this.state.text);\n }\n },\n { once: true },\n );\n }\n }\n\n const removed = Array.from(mutation.removedNodes);\n if (\n removed.some(\n node =>\n node === this.containerEl ||\n (node as HTMLElement)?.id === WATERMARK_DOM_CONSTANTS.CONTAINER_ID ||\n (node as HTMLElement)?.classList?.contains(WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS),\n )\n ) {\n needRestore = true;\n break;\n }\n }\n if (mutation.type === 'attributes') {\n const targetEl = mutation.target as HTMLElement | null;\n if (\n targetEl === this.containerEl ||\n targetEl?.id === WATERMARK_DOM_CONSTANTS.CONTAINER_ID ||\n targetEl?.classList?.contains(WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS)\n ) {\n needRestore = true;\n break;\n }\n }\n }\n\n if (needRestore) {\n this.render();\n }\n });\n\n this.mutationObserver.observe(document.body, { childList: true });\n if (this.containerEl) {\n this.mutationObserver.observe(this.containerEl, {\n attributes: true,\n attributeFilter: ['style', 'class', 'id', 'hidden'],\n childList: true,\n subtree: true,\n });\n }\n }\n\n private stopMutationObserver(): void {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n }\n\n private attachGlobalListeners(): void {\n if (this.listenersAttached || typeof window === 'undefined') {\n return;\n }\n this.listenersAttached = true;\n window.addEventListener('resize', this.handleWindowResize, { passive: true });\n window.addEventListener('message', this.handleWindowMessage);\n }\n\n private detachGlobalListeners(): void {\n if (!this.listenersAttached || typeof window === 'undefined') {\n return;\n }\n this.listenersAttached = false;\n window.removeEventListener('resize', this.handleWindowResize);\n window.removeEventListener('message', this.handleWindowMessage);\n }\n\n public updateConfig(options: WatermarkOptions = {}): this {\n this.config = normalizeWatermarkOptions(options, this.config);\n this.bootstrap();\n return this;\n }\n\n public setUserId(userId: string | number): this {\n this.config.userId = userId;\n return this.refresh();\n }\n\n public refresh(): this {\n if (this.state.active) {\n this.render();\n } else {\n this.bootstrap();\n }\n return this;\n }\n\n public getState(): WatermarkState {\n return { ...this.state };\n }\n\n public getConfig(): NormalizedWatermarkConfig {\n return { ...this.config };\n }\n\n public destroy(): void {\n this.stopMutationObserver();\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n this.detachGlobalListeners();\n this.suppressWatermark('disabled');\n storeVerifiedUserId = '';\n currentUserStoreBound = false;\n\n const g =\n typeof globalThis !== 'undefined' ? (globalThis as any) : typeof window !== 'undefined' ? (window as any) : null;\n if (g && g[GIIME_WATERMARK_GLOBAL_SYMBOL] === this) {\n delete g[GIIME_WATERMARK_GLOBAL_SYMBOL];\n }\n if (typeof window !== 'undefined' && (window as any).__GIIME_WATERMARK__ === this) {\n delete (window as any).__GIIME_WATERMARK__;\n }\n }\n}\n\nexport const getWatermarkInstance = (): GiimeWatermark | null => {\n const g =\n typeof globalThis !== 'undefined' ? (globalThis as any) : typeof window !== 'undefined' ? (window as any) : null;\n if (!g) {\n return null;\n }\n return (g[GIIME_WATERMARK_GLOBAL_SYMBOL] as GiimeWatermark) || null;\n};\n\nlet currentUserStoreBound = false;\n\n/**\n * 自动识别并同步当前登录用户信息(参考 `Clarity.init` 的 `useCurrentUserStore` + `until` 机制)\n * 直接从 `useCurrentUserStore().userInfo.id`(服务端 `/guard/basic/v1/user/getCurrentUser` 鉴权返回)获取用户 ID,防止用户篡改 Cookie\n */\nconst autoIdentifyWatermarkUser = async (instance: GiimeWatermark): Promise<void> => {\n if (currentUserStoreBound) {\n return;\n }\n try {\n const currentUserStore = useCurrentUserStore();\n const loginStore = useLoginStore();\n currentUserStoreBound = true;\n\n // 若当前已有登录 token 且还没有任何组件触发过 getUserInfo,主动拉取一次当前用户信息\n const hasToken = Boolean(Cookies.get('token') || loginStore.userToken);\n if (hasToken && !currentUserStore.userInfo?.id && !currentUserStore.isLoading) {\n currentUserStore.getUserInfo().catch(() => {\n // ignore\n });\n }\n\n // 当用户通过登录弹窗登录成功时,确保拉取最新用户信息\n loginStore.onLoginResult(() => {\n if (!currentUserStore.isLoading) {\n currentUserStore.getUserInfo().catch(() => {\n // ignore\n });\n }\n });\n\n // 实时监听 currentUserStore.userInfo.id 变化(含首次加载及账号切换重登)\n watch(\n () => currentUserStore.userInfo?.id,\n newId => {\n const cleanId = sanitizeUserId(newId);\n if (cleanId && cleanId !== storeVerifiedUserId) {\n storeVerifiedUserId = cleanId;\n // 仅当服务端返回的真实 ID 与首屏渲染的 sso_user_id 不一致时才重绘 DOM,正常用户 0 闪烁\n if (cleanId !== instance.getState().userId) {\n instance.refresh();\n }\n }\n },\n { immediate: true },\n );\n\n // 参考 Clarity:等待 userInfo.id 变为有效值后同步更新水印\n await until(() => currentUserStore.userInfo?.id).toBeTruthy();\n const finalId = sanitizeUserId(currentUserStore.userInfo?.id);\n if (finalId && finalId !== storeVerifiedUserId) {\n storeVerifiedUserId = finalId;\n if (finalId !== instance.getState().userId) {\n instance.refresh();\n }\n }\n } catch {\n // 若在 Pinia 挂载前调用,微任务延迟重试绑定\n }\n};\n\nexport const initWatermark = (options?: WatermarkOptions): GiimeWatermark => {\n const g =\n typeof globalThis !== 'undefined' ? (globalThis as any) : typeof window !== 'undefined' ? (window as any) : {};\n let instance = g[GIIME_WATERMARK_GLOBAL_SYMBOL] as GiimeWatermark | undefined;\n\n if (!instance) {\n instance = new GiimeWatermark(options);\n g[GIIME_WATERMARK_GLOBAL_SYMBOL] = instance;\n if (typeof window !== 'undefined') {\n (window as any).__GIIME_WATERMARK__ = instance;\n }\n } else if (options && Object.keys(options).length > 0) {\n instance.updateConfig(options);\n } else {\n instance.refresh();\n }\n\n // 同步尝试或微任务等待 Pinia 挂载后从 useCurrentUserStore 获取防篡改用户信息\n Promise.resolve().then(() => {\n if (instance) {\n autoIdentifyWatermarkUser(instance);\n }\n });\n\n return instance;\n};\n\nexport const createWatermark = initWatermark;\n\nexport const destroyWatermark = (): void => {\n getWatermarkInstance()?.destroy();\n};\n\nexport const useWatermark = (options?: WatermarkOptions): GiimeWatermark => {\n return initWatermark(options);\n};\n\nexport const Watermark = {\n init: initWatermark,\n create: createWatermark,\n getInstance: getWatermarkInstance,\n destroy: destroyWatermark,\n setUserId(userId: string | number) {\n return initWatermark({ userId });\n },\n refresh() {\n return getWatermarkInstance()?.refresh() ?? initWatermark();\n },\n getState(): WatermarkState | null {\n return getWatermarkInstance()?.getState() ?? null;\n },\n isInIframe,\n shouldRenderWatermark,\n};\n"],"names":["useCurrentUserStore","useLoginStore","watch","until"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @file 零配置自执行入口 (@giime/watermark/auto)
3
+ * @description 供 gsmp、gtmsfront 等 Vue 2 项目直接一行替换 `import '@/utils/watermark.js'` -> `import '../watermark/auto'`
4
+ */
5
+ import { initWatermark, Watermark } from './src/core';
6
+ export { initWatermark, Watermark };
7
+ export default Watermark;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file @giime/watermark 统一导出入口
3
+ */
4
+ export * from './src/types';
5
+ export * from './src/user';
6
+ export * from './src/iframe';
7
+ export * from './src/core';
8
+ export * from './src/adapters/vue2';
9
+ export * from './src/adapters/vue3';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @file Vue 2 适配器入口 (@giime/watermark/vue2)
3
+ * @description
4
+ * 面向 gsmp、gtmsfront 等 Vue 2.6 / 2.7 项目,支持两种接入方式:
5
+ * 1. 直接一行引入(自动初始化):`import '../../../watermark/vue2'`
6
+ * 2. Vue.use 插件方式(支持传入 store / env 等配置):`Vue.use(watermarkVue2Plugin, { store })`
7
+ */
8
+ import { type GiimeWatermark, Watermark, initWatermark } from '../core';
9
+ import type { WatermarkOptions } from '../types';
10
+ export type WatermarkVue2PluginOptions = WatermarkOptions;
11
+ /**
12
+ * Vue 2 插件安装器
13
+ */
14
+ export declare const watermarkVue2Plugin: {
15
+ install(VueCtor: any, options?: WatermarkVue2PluginOptions): GiimeWatermark;
16
+ };
17
+ export { Watermark, initWatermark };
18
+ export default watermarkVue2Plugin;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file Vue 3 适配器插件与组合式 API (@giime/watermark/vue3)
3
+ * @description 支持 app.use(watermarkVue3Plugin, options) 与 useWatermark()
4
+ */
5
+ import { type GiimeWatermark, Watermark, initWatermark } from '../core';
6
+ import type { WatermarkOptions } from '../types';
7
+ /**
8
+ * Vue 3 插件安装器
9
+ * @example
10
+ * ```ts
11
+ * import { watermarkVue3Plugin } from '../../../watermark/vue3';
12
+ * app.use(watermarkVue3Plugin);
13
+ * ```
14
+ */
15
+ export declare const watermarkVue3Plugin: {
16
+ install(app: any, options?: WatermarkOptions): GiimeWatermark;
17
+ };
18
+ /**
19
+ * Vue 3 Composition API 获取或初始化全局水印实例
20
+ */
21
+ export declare const useWatermark: (options?: WatermarkOptions) => GiimeWatermark;
22
+ export { Watermark, initWatermark };
23
+ export default watermarkVue3Plugin;
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @file 核心水印渲染引擎、防篡改守护与全局 Symbol 单例管理
3
+ * @description 视觉样式、网格算法、旋转角度与透明度 100% 还原 gsmp/src/utils/watermark.js,同时修复其所有历史缺陷
4
+ */
5
+ import type { NormalizedWatermarkConfig, WatermarkOptions, WatermarkState } from './types';
6
+ /**
7
+ * 全局唯一单例 Symbol,保证 Vue 3 (giime)、Vue 2 (@giime/watermark) 及 HTML 脚本共存时绝不重复挂载
8
+ */
9
+ export declare const GIIME_WATERMARK_GLOBAL_SYMBOL: unique symbol;
10
+ declare global {
11
+ interface Window {
12
+ __GIIME_WATERMARK_ACTIVE__?: boolean;
13
+ __GIIME_WATERMARK__?: GiimeWatermark;
14
+ GiimeWatermark?: typeof Watermark;
15
+ }
16
+ }
17
+ /**
18
+ * 归一化水印配置,100% 对齐 gsmp/src/utils/watermark.js 默认参数
19
+ */
20
+ export declare const normalizeWatermarkOptions: (options?: WatermarkOptions, base?: NormalizedWatermarkConfig) => NormalizedWatermarkConfig;
21
+ /**
22
+ * 根据当前视口尺寸与配置计算自适应行列数与间距(像素级对齐 gsmp/src/utils/watermark.js 原生计算公式)
23
+ */
24
+ export declare const calculateWatermarkGrid: (config: NormalizedWatermarkConfig, viewportWidth: number, viewportHeight: number) => {
25
+ cols: number;
26
+ rows: number;
27
+ xSpace: number;
28
+ ySpace: number;
29
+ };
30
+ /**
31
+ * 清理直接挂在 document.body 下的老版裸 `.mask_div` 节点(避免与容器化水印共存或残留在 iframe 内)
32
+ */
33
+ export declare const removeLegacyBodyMasks: () => void;
34
+ /**
35
+ * Giime 统一水印管理器实例
36
+ */
37
+ export declare class GiimeWatermark {
38
+ private config;
39
+ private state;
40
+ private containerEl;
41
+ private mutationObserver;
42
+ private resizeTimer;
43
+ private verifyFallbackTimer;
44
+ private userPollTimer;
45
+ private unsubscribeServerUser;
46
+ private lastKnownToken;
47
+ private isRenderingInternal;
48
+ private listenersAttached;
49
+ private domReadyListenerAttached;
50
+ private readonly handleWindowResize;
51
+ /**
52
+ * 检查登录凭证 `token` 是否变化,或用户是否在控制台篡改了 `sso_user_id` Cookie
53
+ */
54
+ private readonly checkUserChange;
55
+ private readonly handleVisibilityChange;
56
+ private readonly handleWindowMessage;
57
+ constructor(options?: WatermarkOptions);
58
+ /**
59
+ * 启动并执行嵌套检测与水印挂载
60
+ */
61
+ private bootstrap;
62
+ /**
63
+ * 激活并渲染当前窗口的水印
64
+ */
65
+ private activateWatermark;
66
+ /**
67
+ * 调度服务端真实身份核验:
68
+ * 默认等待 `verifyDelayMs`(1200ms),在此期间若宿主项目(如 gsmp)自身已发起 `getCurrentUser` 请求并被 XHR 观察器捕获,则零额外请求;
69
+ * 若宿主页面未调过该接口(如 gtmsfront 的部分独立子页面),定时器到期后自动发起一次兜底请求校验 `token`。
70
+ */
71
+ private scheduleServerVerification;
72
+ /**
73
+ * 抑制并移除当前窗口的水印(如处于 GSMP 或外层项目的 iframe 中时)
74
+ */
75
+ private suppressWatermark;
76
+ /**
77
+ * 实际执行水印 DOM 构建与挂载(样式与旧版 gsmp/src/utils/watermark.js 完全一致)
78
+ */
79
+ render(): void;
80
+ /**
81
+ * 启动防篡改 MutationObserver:防止通过控制台删除水印容器、子节点或修改样式隐藏水印
82
+ */
83
+ private startMutationObserver;
84
+ private stopMutationObserver;
85
+ private startUserWatcher;
86
+ private stopUserWatcher;
87
+ private attachGlobalListeners;
88
+ private detachGlobalListeners;
89
+ /**
90
+ * 动态更新配置并重新判定/渲染
91
+ */
92
+ updateConfig(options?: WatermarkOptions): this;
93
+ /**
94
+ * 显式更新用户 ID 并刷新水印
95
+ */
96
+ setUserId(userId: string | number): this;
97
+ /**
98
+ * 重新读取当前用户身份与窗口状态并刷新水印
99
+ */
100
+ refresh(): this;
101
+ /**
102
+ * 获取当前水印状态快照
103
+ */
104
+ getState(): WatermarkState;
105
+ /**
106
+ * 获取当前归一化配置
107
+ */
108
+ getConfig(): NormalizedWatermarkConfig;
109
+ /**
110
+ * 彻底销毁水印实例与 DOM 节点及监听器
111
+ */
112
+ destroy(): void;
113
+ }
114
+ /**
115
+ * 获取当前已存在的全局水印实例
116
+ */
117
+ export declare const getWatermarkInstance: () => GiimeWatermark | null;
118
+ /**
119
+ * 初始化或更新全局唯一水印实例
120
+ */
121
+ export declare const initWatermark: (options?: WatermarkOptions) => GiimeWatermark;
122
+ /**
123
+ * `initWatermark` 的别名(与 createLoginDialog / createRectSelect 命名风格保持一致)
124
+ */
125
+ export declare const createWatermark: (options?: WatermarkOptions) => GiimeWatermark;
126
+ /**
127
+ * 销毁全局水印实例
128
+ */
129
+ export declare const destroyWatermark: () => void;
130
+ /**
131
+ * 统一门面对象 `Watermark`(与 `Clarity.init()` / `GiimeTrack.init()` 保持一致的调用体验)
132
+ */
133
+ export declare const Watermark: {
134
+ init: (options?: WatermarkOptions) => GiimeWatermark;
135
+ create: (options?: WatermarkOptions) => GiimeWatermark;
136
+ getInstance: () => GiimeWatermark | null;
137
+ destroy: () => void;
138
+ setUserId(userId: string | number): GiimeWatermark;
139
+ refresh(): GiimeWatermark;
140
+ getState(): WatermarkState | null;
141
+ isInIframe: (win?: Window | undefined) => boolean;
142
+ shouldRenderWatermark: (strategy?: import("./types").WatermarkIframeStrategy, win?: Window | undefined) => {
143
+ shouldRender: boolean;
144
+ inIframe: boolean;
145
+ needsAsyncDetect: boolean;
146
+ reason: "rendered-top" | "rendered-forced" | "rendered-fallback" | "suppressed-in-iframe" | "suppressed-by-ancestor" | "disabled" | "ssr";
147
+ };
148
+ };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @file Iframe 嵌套关系检测与跨窗口 postMessage 协同协议
3
+ * @description
4
+ * 核心机制(默认策略 `'ancestor-detect'`):
5
+ * 1. 单独打开前端页面(`window.self === window.top`):直接展示水印;
6
+ * 2. 在 GSMP 综合管理平台或已带水印的外层前端页面中通过 iframe 打开子页面:
7
+ * - 同源场景:直接向上检测 `parent / top` 是否存在 `#__giime_watermark__`、`__GIIME_WATERMARK_ACTIVE__` 或旧版 `.mask_div`,有则子页面不显示水印;
8
+ * - 跨源场景:通过 `postMessage` 发送 `giime-watermark:ping`,外层水印收到后回复 `giime-watermark:pong`(外层渲染时也会主动广播 `giime-watermark:suppress`),子页面收到后不显示水印;
9
+ * 3. 单独打开一个**未接入水印**的前端页面 A,其内部通过 iframe 嵌套了接入水印的前端页面 B:
10
+ * - 页面 B 探测发现外层页面 A 既无同源水印 DOM、也未响应 `giime-watermark:pong`,则页面 B 自动在 iframe 内兜底展示水印!
11
+ */
12
+ import type { WatermarkIframeStrategy } from './types';
13
+ /**
14
+ * 跨窗口 postMessage 通信消息类型常量
15
+ */
16
+ export declare const WATERMARK_MESSAGE_TYPES: {
17
+ /** 子 iframe 向父窗口/顶层窗口询问是否已有生效中的水印 */
18
+ readonly PING: "giime-watermark:ping";
19
+ /** 父窗口/顶层窗口回复子 iframe:外层水印已激活 */
20
+ readonly PONG: "giime-watermark:pong";
21
+ /** 外层窗口主动通知所有子 iframe 抑制自身水印 */
22
+ readonly SUPPRESS: "giime-watermark:suppress";
23
+ };
24
+ /**
25
+ * 水印容器 DOM ID 与老版类名常量
26
+ */
27
+ export declare const WATERMARK_DOM_CONSTANTS: {
28
+ readonly CONTAINER_ID: "__giime_watermark__";
29
+ readonly CONTAINER_CLASS: "giime-watermark-container";
30
+ readonly LEGACY_ITEM_CLASS: "mask_div";
31
+ readonly ROOT_ATTR: "data-giime-watermark";
32
+ };
33
+ /**
34
+ * 判断当前窗口是否运行在 `<iframe />` 内部
35
+ */
36
+ export declare const isInIframe: (win?: Window) => boolean;
37
+ /**
38
+ * 检测同源祖先窗口:
39
+ * - `hasWatermark`: 是否存在任一祖先窗口已经渲染了水印(含新版 `#__giime_watermark__` 或 GSMP/gtmsfront 老版 `.mask_div`)
40
+ * - `allAncestorsAccessible`: 是否所有祖先窗口均同源可访问(若全部同源可访问且均无水印,无需等待跨源 postMessage 超时即可立即判定外层无水印)
41
+ */
42
+ export declare const inspectSameOriginAncestors: (win?: Window) => {
43
+ hasWatermark: boolean;
44
+ allAncestorsAccessible: boolean;
45
+ };
46
+ /**
47
+ * 同源场景下向上遍历祖先窗口(parent -> ... -> top),检测是否存在任一祖先已渲染水印
48
+ */
49
+ export declare const hasSameOriginAncestorWatermark: (win?: Window) => boolean;
50
+ /**
51
+ * 同步判定当前窗口是否应当渲染水印
52
+ */
53
+ export declare const shouldRenderWatermark: (strategy?: WatermarkIframeStrategy, win?: Window) => {
54
+ shouldRender: boolean;
55
+ inIframe: boolean;
56
+ needsAsyncDetect: boolean;
57
+ reason: 'rendered-top' | 'rendered-forced' | 'rendered-fallback' | 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled' | 'ssr';
58
+ };
59
+ /**
60
+ * 向所有直接子 iframe 广播抑制水印信号(当外层窗口激活水印时调用)
61
+ */
62
+ export declare const broadcastSuppressToChildFrames: (text: string, win?: Window) => void;
63
+ /**
64
+ * 在子 iframe 中通过 postMessage 向所有上级窗口(parent -> ... -> top)发起异步握手探测
65
+ * 若在 timeoutMs 内收到任一祖先窗口的 PONG 或 SUPPRESS 响应,则解析为 true(表示外层已有水印)
66
+ */
67
+ export declare const detectAncestorWatermarkAsync: (timeoutMs?: number, win?: Window) => Promise<boolean>;
@@ -0,0 +1,182 @@
1
+ /**
2
+ * @file @giime/watermark 类型定义
3
+ * @description 同时支持现代小驼峰配置与 gsmp / gtmsfront 历史 watermark_* 下划线配置
4
+ */
5
+ /**
6
+ * Iframe 嵌套水印展示策略
7
+ * - `'ancestor-detect'`(默认):智能探测祖先窗口是否已有水印(同源 DOM 检测 `#__giime_watermark__` / 老版 `.mask_div` + 跨源 `postMessage` 握手探测):
8
+ * 1. 若外层(如 GSMP 或已接入水印的父项目)已有水印,则子 iframe 自动不显示水印;
9
+ * 2. 若外层页面**未接入水印**(无水印),则子 iframe 自动兜底展示水印!
10
+ * - `'top-only'`:仅顶层窗口(`window.self === window.top`)展示水印,处于任意 iframe 内一律不展示。
11
+ * - `'always'`:无论是否在 iframe 中,始终强制渲染水印。
12
+ * - `'never'`:禁用并销毁水印。
13
+ */
14
+ export type WatermarkIframeStrategy = 'ancestor-detect' | 'top-only' | 'always' | 'never';
15
+ /**
16
+ * 水印格式化上下文
17
+ */
18
+ export interface WatermarkFormatContext {
19
+ /** 当前经服务端认证的用户 ID(未登录时为 '') */
20
+ userId: string;
21
+ /** 当前格式化日期(如 '2026年10月26日') */
22
+ date: string;
23
+ /** 水印品牌前缀(默认 '吉客印') */
24
+ prefix: string;
25
+ }
26
+ /**
27
+ * 兼容 gsmp / gtmsfront 老版 watermark.js 的下划线字段
28
+ */
29
+ export interface LegacyWatermarkOptions {
30
+ /** 水印自定义完整文本 */
31
+ watermark_txt?: string;
32
+ /** 水印起始位置 X 轴坐标(默认 20) */
33
+ watermark_x?: number;
34
+ /** 水印起始位置 Y 轴坐标(默认 20) */
35
+ watermark_y?: number;
36
+ /** 水印行数(默认 20,会根据视口自适应调整) */
37
+ watermark_rows?: number;
38
+ /** 水印列数(默认 20,会根据视口自适应调整) */
39
+ watermark_cols?: number;
40
+ /** 水印 X 轴间隔(默认 100) */
41
+ watermark_x_space?: number;
42
+ /** 水印 Y 轴间隔(默认 50) */
43
+ watermark_y_space?: number;
44
+ /** 水印字体颜色(默认 '#aaa') */
45
+ watermark_color?: string;
46
+ /** 水印透明度(默认 0.1) */
47
+ watermark_alpha?: number;
48
+ /** 水印字体大小(默认 '15px') */
49
+ watermark_fontsize?: string;
50
+ /** 水印字体(默认 '微软雅黑') */
51
+ watermark_font?: string;
52
+ /** 单个水印块宽度(默认 210) */
53
+ watermark_width?: number;
54
+ /** 单个水印块高度(默认 80) */
55
+ watermark_height?: number;
56
+ /** 水印倾斜角度度数(默认 20,即逆时针旋转 20 度) */
57
+ watermark_angle?: number;
58
+ }
59
+ /**
60
+ * 水印初始化配置项
61
+ */
62
+ export interface WatermarkOptions extends LegacyWatermarkOptions {
63
+ /** 是否启用水印(默认 true) */
64
+ enabled?: boolean;
65
+ /**
66
+ * Iframe 嵌套处理策略(默认 `'ancestor-detect'`)
67
+ */
68
+ iframeStrategy?: WatermarkIframeStrategy;
69
+ /** `'ancestor-detect'` 模式下跨源握手等待超时毫秒数(默认 120) */
70
+ detectTimeoutMs?: number;
71
+ /** 水印品牌前缀(默认 '吉客印') */
72
+ prefix?: string;
73
+ /** 显式指定用户 ID */
74
+ userId?: string | number;
75
+ /** 自定义动态获取用户 ID 的函数 */
76
+ getUserId?: () => string | number | undefined | null;
77
+ /**
78
+ * 传入宿主环境变量对象(可选,如 Vue 2 的 `process.env`),用于辅助解析接口代理地址
79
+ */
80
+ env?: Record<string, any>;
81
+ /**
82
+ * 自定义获取当前登录用户信息的接口地址(默认自动探测 `/guard/basic/v1/user/getCurrentUser`)
83
+ */
84
+ userApiUrl?: string;
85
+ /**
86
+ * 是否允许在宿主未请求用户信息接口时,主动请求 `/guard/basic/v1/user/getCurrentUser` 校验用户身份(默认 true)
87
+ */
88
+ autoFetchUser?: boolean;
89
+ /**
90
+ * 主动发起兜底校验请求前的等待时间(毫秒,默认 1200ms):
91
+ * 在此期间若宿主页面(如 gsmp)自身已发起 `getCurrentUser` 请求,将直接复用宿主响应,不发额外请求
92
+ */
93
+ verifyDelayMs?: number;
94
+ /** 自定义水印文本或格式化函数(默认生成 `吉客印-${userId}-${YYYY年MM月DD日}`) */
95
+ text?: string | ((ctx: WatermarkFormatContext) => string);
96
+ /** 水印起始位置 X 轴坐标(默认 20) */
97
+ x?: number;
98
+ /** 水印起始位置 Y 轴坐标(默认 20) */
99
+ y?: number;
100
+ /** 水印行数(默认 20) */
101
+ rows?: number;
102
+ /** 水印列数(默认 20) */
103
+ cols?: number;
104
+ /** 水印 X 轴间隔(默认 100) */
105
+ xSpace?: number;
106
+ /** 水印 Y 轴间隔(默认 50) */
107
+ ySpace?: number;
108
+ /** 水印字体颜色(默认 '#aaa') */
109
+ color?: string;
110
+ /** 水印透明度(默认 0.1) */
111
+ alpha?: number;
112
+ /** 水印字体大小(默认 '15px') */
113
+ fontSize?: string;
114
+ /** 水印字体(默认 '微软雅黑') */
115
+ font?: string;
116
+ /** 单个水印块宽度(默认 210) */
117
+ width?: number;
118
+ /** 单个水印块高度(默认 80) */
119
+ height?: number;
120
+ /** 水印倾斜角度度数(默认 20) */
121
+ angle?: number;
122
+ /** 水印容器层级 z-index(默认 9999,高于 Element UI / Element Plus 弹窗的 2000+,确保覆盖弹窗内的 iframe) */
123
+ zIndex?: number;
124
+ /** 是否开启 MutationObserver 防篡改保护(默认 true) */
125
+ antiTamper?: boolean;
126
+ /** 是否监听窗口 resize 自动重排(默认 true) */
127
+ watchResize?: boolean;
128
+ /** 是否自动清理页面上遗留的老版裸 `.mask_div` 节点(默认 true) */
129
+ cleanLegacyMask?: boolean;
130
+ }
131
+ /**
132
+ * 归一化后的内部水印配置
133
+ */
134
+ export interface NormalizedWatermarkConfig {
135
+ enabled: boolean;
136
+ iframeStrategy: WatermarkIframeStrategy;
137
+ detectTimeoutMs: number;
138
+ prefix: string;
139
+ userId?: string | number;
140
+ getUserId?: () => string | number | undefined | null;
141
+ env?: Record<string, any>;
142
+ userApiUrl?: string;
143
+ autoFetchUser: boolean;
144
+ verifyDelayMs: number;
145
+ text?: string | ((ctx: WatermarkFormatContext) => string);
146
+ x: number;
147
+ y: number;
148
+ rows: number;
149
+ cols: number;
150
+ xSpace: number;
151
+ ySpace: number;
152
+ color: string;
153
+ alpha: number;
154
+ fontSize: string;
155
+ font: string;
156
+ width: number;
157
+ height: number;
158
+ angle: number;
159
+ zIndex: number;
160
+ antiTamper: boolean;
161
+ watchResize: boolean;
162
+ cleanLegacyMask: boolean;
163
+ }
164
+ /**
165
+ * 水印运行状态快照
166
+ */
167
+ export interface WatermarkState {
168
+ /** 当前窗口是否处于 iframe 内部 */
169
+ inIframe: boolean;
170
+ /** 当前窗口是否实际渲染了水印 */
171
+ active: boolean;
172
+ /** 未渲染或抑制原因 */
173
+ reason: 'rendered-top' | 'rendered-forced' | 'rendered-fallback' | 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled' | 'ssr';
174
+ /** 当前展示的水印文本 */
175
+ text: string;
176
+ /** 当前解析到的用户 ID */
177
+ userId: string;
178
+ /** 当前渲染的网格行数 */
179
+ rows: number;
180
+ /** 当前渲染的网格列数 */
181
+ cols: number;
182
+ }