@qxs-bns/utils 0.0.17 → 0.0.18

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 (131) hide show
  1. package/es/index.js +11 -0
  2. package/es/index.js.map +1 -0
  3. package/es/src/argo-log.js +78 -0
  4. package/es/src/argo-log.js.map +1 -0
  5. package/es/src/date-transfer.js +34 -0
  6. package/es/src/date-transfer.js.map +1 -0
  7. package/es/src/device.js +23 -0
  8. package/es/src/device.js.map +1 -0
  9. package/es/src/file-operations.js +105 -0
  10. package/es/src/file-operations.js.map +1 -0
  11. package/es/src/json.js +67 -0
  12. package/es/src/json.js.map +1 -0
  13. package/es/src/oss-uploader.js +115 -0
  14. package/es/src/oss-uploader.js.map +1 -0
  15. package/es/src/storage.js +113 -0
  16. package/es/src/storage.js.map +1 -0
  17. package/es/src/types.js +38 -0
  18. package/es/src/types.js.map +1 -0
  19. package/es/src/use-api.js +65 -0
  20. package/es/src/use-api.js.map +1 -0
  21. package/es/src/watermark.js +209 -0
  22. package/es/src/watermark.js.map +1 -0
  23. package/lib/index.js +40 -1
  24. package/lib/index.js.map +1 -1
  25. package/lib/src/argo-log.js +79 -1
  26. package/lib/src/argo-log.js.map +1 -1
  27. package/lib/src/date-transfer.js +35 -1
  28. package/lib/src/date-transfer.js.map +1 -1
  29. package/lib/src/device.js +27 -1
  30. package/lib/src/device.js.map +1 -1
  31. package/lib/src/file-operations.js +107 -1
  32. package/lib/src/file-operations.js.map +1 -1
  33. package/lib/src/json.js +69 -1
  34. package/lib/src/json.js.map +1 -1
  35. package/lib/src/oss-uploader.js +119 -1
  36. package/lib/src/oss-uploader.js.map +1 -1
  37. package/lib/src/storage.js +114 -1
  38. package/lib/src/storage.js.map +1 -1
  39. package/lib/src/types.js +46 -1
  40. package/lib/src/types.js.map +1 -1
  41. package/lib/src/use-api.js +66 -1
  42. package/lib/src/use-api.js.map +1 -1
  43. package/lib/src/watermark.js +192 -13
  44. package/lib/src/watermark.js.map +1 -1
  45. package/package.json +26 -27
  46. package/{es → types}/index.d.ts +1 -0
  47. package/types/index.d.ts.map +1 -0
  48. package/{es → types}/src/argo-log.d.ts +1 -0
  49. package/types/src/argo-log.d.ts.map +1 -0
  50. package/{es → types}/src/date-transfer.d.ts +1 -0
  51. package/types/src/date-transfer.d.ts.map +1 -0
  52. package/types/src/device.d.ts +18 -0
  53. package/types/src/device.d.ts.map +1 -0
  54. package/{es → types}/src/file-operations.d.ts +1 -0
  55. package/types/src/file-operations.d.ts.map +1 -0
  56. package/{lib → types}/src/json.d.ts +1 -0
  57. package/types/src/json.d.ts.map +1 -0
  58. package/{es → types}/src/oss-uploader.d.ts +2 -2
  59. package/types/src/oss-uploader.d.ts.map +1 -0
  60. package/{lib → types}/src/storage.d.ts +1 -0
  61. package/types/src/storage.d.ts.map +1 -0
  62. package/{es → types}/src/types.d.ts +1 -0
  63. package/types/src/types.d.ts.map +1 -0
  64. package/{es → types}/src/use-api.d.ts +3 -4
  65. package/types/src/use-api.d.ts.map +1 -0
  66. package/{es → types}/src/watermark.d.ts +1 -0
  67. package/types/src/watermark.d.ts.map +1 -0
  68. package/types/tsconfig.tsbuildinfo +1 -0
  69. package/README.md +0 -65
  70. package/es/_virtual/_commonjs-dynamic-modules.mjs +0 -7
  71. package/es/_virtual/_commonjs-dynamic-modules.mjs.map +0 -1
  72. package/es/_virtual/_commonjsHelpers.mjs +0 -7
  73. package/es/_virtual/_commonjsHelpers.mjs.map +0 -1
  74. package/es/_virtual/ali-oss/dist/aliyun-oss-sdk.mjs +0 -20195
  75. package/es/_virtual/ali-oss/dist/aliyun-oss-sdk.mjs.map +0 -1
  76. package/es/_virtual/aliyun-oss-sdk.mjs +0 -8
  77. package/es/_virtual/aliyun-oss-sdk.mjs.map +0 -1
  78. package/es/_virtual/aliyun-oss-sdk2.mjs +0 -5
  79. package/es/_virtual/aliyun-oss-sdk2.mjs.map +0 -1
  80. package/es/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.mjs +0 -2142
  81. package/es/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.mjs.map +0 -1
  82. package/es/_virtual/xlsx/xlsx.mjs +0 -24583
  83. package/es/_virtual/xlsx/xlsx.mjs.map +0 -1
  84. package/es/index.mjs +0 -35
  85. package/es/index.mjs.map +0 -1
  86. package/es/src/argo-log.mjs +0 -68
  87. package/es/src/argo-log.mjs.map +0 -1
  88. package/es/src/date-transfer.mjs +0 -17
  89. package/es/src/date-transfer.mjs.map +0 -1
  90. package/es/src/device.d.ts +0 -4
  91. package/es/src/device.mjs +0 -24
  92. package/es/src/device.mjs.map +0 -1
  93. package/es/src/file-operations.mjs +0 -79
  94. package/es/src/file-operations.mjs.map +0 -1
  95. package/es/src/json.d.ts +0 -15
  96. package/es/src/json.mjs +0 -45
  97. package/es/src/json.mjs.map +0 -1
  98. package/es/src/oss-uploader.mjs +0 -89
  99. package/es/src/oss-uploader.mjs.map +0 -1
  100. package/es/src/storage.d.ts +0 -26
  101. package/es/src/storage.mjs +0 -81
  102. package/es/src/storage.mjs.map +0 -1
  103. package/es/src/types.mjs +0 -37
  104. package/es/src/types.mjs.map +0 -1
  105. package/es/src/use-api.mjs +0 -44
  106. package/es/src/use-api.mjs.map +0 -1
  107. package/es/src/watermark.mjs +0 -147
  108. package/es/src/watermark.mjs.map +0 -1
  109. package/lib/_virtual/_commonjs-dynamic-modules.js +0 -2
  110. package/lib/_virtual/_commonjs-dynamic-modules.js.map +0 -1
  111. package/lib/_virtual/_commonjsHelpers.js +0 -2
  112. package/lib/_virtual/_commonjsHelpers.js.map +0 -1
  113. package/lib/_virtual/ali-oss/dist/aliyun-oss-sdk.js +0 -85
  114. package/lib/_virtual/ali-oss/dist/aliyun-oss-sdk.js.map +0 -1
  115. package/lib/_virtual/aliyun-oss-sdk.js +0 -2
  116. package/lib/_virtual/aliyun-oss-sdk.js.map +0 -1
  117. package/lib/_virtual/aliyun-oss-sdk2.js +0 -2
  118. package/lib/_virtual/aliyun-oss-sdk2.js.map +0 -1
  119. package/lib/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js +0 -30
  120. package/lib/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js.map +0 -1
  121. package/lib/_virtual/xlsx/xlsx.js +0 -105
  122. package/lib/_virtual/xlsx/xlsx.js.map +0 -1
  123. package/lib/index.d.ts +0 -10
  124. package/lib/src/argo-log.d.ts +0 -32
  125. package/lib/src/date-transfer.d.ts +0 -11
  126. package/lib/src/device.d.ts +0 -4
  127. package/lib/src/file-operations.d.ts +0 -42
  128. package/lib/src/oss-uploader.d.ts +0 -43
  129. package/lib/src/types.d.ts +0 -26
  130. package/lib/src/use-api.d.ts +0 -47
  131. package/lib/src/watermark.d.ts +0 -47
@@ -1,44 +0,0 @@
1
- var u = Object.defineProperty;
2
- var x = (i, s, e) => s in i ? u(i, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[s] = e;
3
- var a = (i, s, e) => x(i, typeof s != "symbol" ? s + "" : s, e);
4
- import { isPlainObject as d } from "./types.mjs";
5
- const r = class r {
6
- constructor(s, e) {
7
- a(this, "useApi", async (s, e, h) => {
8
- let c = null, o = null;
9
- try {
10
- const t = {
11
- ...s,
12
- ...["GET"].includes(s.method.toUpperCase()) ? { params: e } : { data: e }
13
- };
14
- t.url = (t.proxyPrefix || "") + s.url, delete t.proxyPrefix;
15
- const n = await this.apiInstance(t);
16
- c = h ? n.data : n.data.data;
17
- } catch (t) {
18
- if (this.axiosInstance.isAxiosError(t)) {
19
- const { statusText: n = "", status: f } = t.response || {};
20
- console.log(n ? `${n}:${f}` : JSON.stringify(t));
21
- } else this.isAxiosResponse(t) ? o = t.data : this.isErrorResponse(t) && (o = t);
22
- }
23
- return { res: c, error: o };
24
- });
25
- if (this.apiInstance = s, this.axiosInstance = e, r.instance)
26
- return r.instance;
27
- r.instance = this;
28
- }
29
- isBusinessError(s) {
30
- return d(s) && typeof s.message == "string" && typeof s.code == "number" && s.code !== 0;
31
- }
32
- isAxiosResponse(s) {
33
- return d(s) && s.data !== void 0 && this.isBusinessError(s.data) && s.status !== void 0 && s.statusText !== void 0 && s.headers !== void 0 && s.config !== void 0 && s.request !== void 0;
34
- }
35
- isErrorResponse(s) {
36
- return "code" in s && "data" in s && "message" in s && s.code !== 0;
37
- }
38
- };
39
- a(r, "instance");
40
- let p = r;
41
- export {
42
- p as ApiService
43
- };
44
- //# sourceMappingURL=use-api.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-api.mjs","sources":["../../../../packages/utils/src/use-api.ts"],"sourcesContent":["import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosStatic } from 'axios'\nimport { isPlainObject } from './types'\n\nexport interface SuccessResponse<T> {\n code: number\n count: number\n data: T\n message: string\n}\n\nexport interface ErrorResponse {\n code: number\n data: null\n message: string\n}\n\nexport interface UseApiResponse<W extends boolean = false, T = unknown> {\n res: W extends true ? SuccessResponse<T> : T\n error: ErrorResponse | null\n}\n\nexport interface UrlObjectType {\n url: string\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n proxyPrefix?: string\n}\n\nexport type ApiTypeMap<U extends UrlObjectType> = {\n [K in U['url']]: {\n request: any\n response: any\n }\n}\n\ntype RequestPayload<T> = T extends { data: any } ? T['data'] : T\ntype RequestParams<T> = T extends { params: any } ? T['params'] : T\n\nexport class ApiService<\n T extends ApiTypeMap<U>,\n U extends UrlObjectType,\n> {\n private static instance: ApiService<any, any>\n\n constructor(\n private apiInstance: AxiosInstance,\n private axiosInstance: AxiosStatic,\n ) {\n if (ApiService.instance) {\n return ApiService.instance as ApiService<T, U>\n }\n ApiService.instance = this\n }\n\n private isBusinessError(obj: ErrorResponse): boolean {\n return isPlainObject(obj)\n && typeof obj.message === 'string'\n && typeof obj.code === 'number'\n && obj.code !== 0\n }\n\n private isAxiosResponse(value: any): value is AxiosResponse {\n return isPlainObject(value)\n && value.data !== undefined\n && this.isBusinessError(value.data)\n && value.status !== undefined\n && value.statusText !== undefined\n && value.headers !== undefined\n && value.config !== undefined\n && value.request !== undefined\n }\n\n private isErrorResponse(value: any): value is ErrorResponse {\n return 'code' in value && 'data' in value && 'message' in value && value.code !== 0\n }\n\n public useApi = async <\n K extends U,\n W extends boolean = false,\n >(\n axiosConfig: Omit<AxiosRequestConfig<RequestPayload<T[K['url']]['request']>>, 'params'> & K & {\n params?: RequestParams<T[K['url']]['request']>\n },\n params?: RequestParams<T[K['url']]['request']>,\n isWholeResponse?: W,\n ): Promise<UseApiResponse<W, T[K['url']]['response']>> => {\n let res: UseApiResponse<W, T[K['url']]['response']>['res'] | null = null\n let error: UseApiResponse['error'] = null\n\n try {\n const config = {\n ...axiosConfig,\n ...(['GET'].includes(axiosConfig.method.toUpperCase()) ? { params } : { data: params }),\n }\n\n config.url = (config.proxyPrefix || '') + axiosConfig.url\n delete config.proxyPrefix\n\n const response = await this.apiInstance<SuccessResponse<T[K['url']]['response']>>(config)\n res = isWholeResponse\n ? response.data\n : response.data.data\n }\n catch (err) {\n if (this.axiosInstance.isAxiosError(err)) {\n const { statusText = '', status } = err.response || {}\n console.log(statusText ? `${statusText}:${status}` : JSON.stringify(err))\n }\n else if (this.isAxiosResponse(err)) {\n error = err.data\n }\n else if (this.isErrorResponse(err)) {\n error = err\n }\n }\n\n return { res: res!, error }\n }\n}\n"],"names":["_ApiService","apiInstance","axiosInstance","__publicField","axiosConfig","params","isWholeResponse","res","error","config","response","err","statusText","status","obj","isPlainObject","value","ApiService"],"mappings":";;;;AAqCO,MAAMA,IAAN,MAAMA,EAGX;AAAA,EAGA,YACUC,GACAC,GACR;AA6BK,IAAAC,EAAA,gBAAS,OAIdC,GAGAC,GACAC,MACwD;AACxD,UAAIC,IAAgE,MAChEC,IAAiC;AAEjC,UAAA;AACF,cAAMC,IAAS;AAAA,UACb,GAAGL;AAAA,UACH,GAAI,CAAC,KAAK,EAAE,SAASA,EAAY,OAAO,YAAa,CAAA,IAAI,EAAE,QAAAC,MAAW,EAAE,MAAMA,EAAO;AAAA,QACvF;AAEA,QAAAI,EAAO,OAAOA,EAAO,eAAe,MAAML,EAAY,KACtD,OAAOK,EAAO;AAEd,cAAMC,IAAW,MAAM,KAAK,YAAsDD,CAAM;AACxF,QAAAF,IAAMD,IACFI,EAAS,OACTA,EAAS,KAAK;AAAA,eAEbC,GAAK;AACV,YAAI,KAAK,cAAc,aAAaA,CAAG,GAAG;AACxC,gBAAM,EAAE,YAAAC,IAAa,IAAI,QAAAC,MAAWF,EAAI,YAAY,CAAC;AAC7C,kBAAA,IAAIC,IAAa,GAAGA,CAAU,IAAIC,CAAM,KAAK,KAAK,UAAUF,CAAG,CAAC;AAAA,QAEjE,MAAA,CAAA,KAAK,gBAAgBA,CAAG,IAC/BH,IAAQG,EAAI,OAEL,KAAK,gBAAgBA,CAAG,MACvBH,IAAAG;AAAA,MACV;AAGK,aAAA,EAAE,KAAAJ,GAAW,OAAAC,EAAM;AAAA,IAC5B;AArEE,QAHQ,KAAA,cAAAP,GACA,KAAA,gBAAAC,GAEJF,EAAW;AACb,aAAOA,EAAW;AAEpB,IAAAA,EAAW,WAAW;AAAA,EAAA;AAAA,EAGhB,gBAAgBc,GAA6B;AACnD,WAAOC,EAAcD,CAAG,KACnB,OAAOA,EAAI,WAAY,YACvB,OAAOA,EAAI,QAAS,YACpBA,EAAI,SAAS;AAAA,EAAA;AAAA,EAGZ,gBAAgBE,GAAoC;AACnD,WAAAD,EAAcC,CAAK,KACrBA,EAAM,SAAS,UACf,KAAK,gBAAgBA,EAAM,IAAI,KAC/BA,EAAM,WAAW,UACjBA,EAAM,eAAe,UACrBA,EAAM,YAAY,UAClBA,EAAM,WAAW,UACjBA,EAAM,YAAY;AAAA,EAAA;AAAA,EAGjB,gBAAgBA,GAAoC;AAC1D,WAAO,UAAUA,KAAS,UAAUA,KAAS,aAAaA,KAASA,EAAM,SAAS;AAAA,EAAA;AA6CtF;AA5EEb,EAJWH,GAII;AAJV,IAAMiB,IAANjB;"}
@@ -1,147 +0,0 @@
1
- const $ = {
2
- id: "wm_div_id",
3
- prefix: "mask_div_id",
4
- text: "测试水印",
5
- x: 0,
6
- y: 0,
7
- rows: 0,
8
- cols: 0,
9
- width: 0,
10
- height: 0,
11
- x_space: 100,
12
- y_space: 40,
13
- font: "微软雅黑",
14
- color: "black",
15
- fontsize: "18px",
16
- alpha: 0.15,
17
- angle: 15,
18
- parent_width: 0,
19
- parent_height: 0,
20
- parent_node: null,
21
- monitor: !0
22
- };
23
- function C(t, c, r) {
24
- const u = document.createElement("canvas").getContext("2d");
25
- if (!u)
26
- return { width: 100, height: 100 };
27
- u.font = `${r} ${c}`;
28
- const s = u.measureText(t.trim()), l = Number.parseFloat(r), p = s.actualBoundingBoxAscent !== void 0 && s.actualBoundingBoxDescent !== void 0 ? s.actualBoundingBoxAscent + s.actualBoundingBoxDescent : l;
29
- return {
30
- width: Math.ceil(s.width),
31
- height: Math.ceil(p)
32
- };
33
- }
34
- function M() {
35
- const t = { ...$ };
36
- let c = !1;
37
- const r = new MutationObserver(_), w = new ResizeObserver(() => {
38
- c || l(t);
39
- });
40
- function u(i, e) {
41
- const h = i - t.x, n = e - t.y, o = t.x_space || 20, d = t.y_space || 20, m = Math.ceil(h / (t.width + o)), f = Math.ceil(n / (t.height + d));
42
- return {
43
- cols: m,
44
- rows: f,
45
- x_space: o,
46
- y_space: d
47
- };
48
- }
49
- function s(i, e, h) {
50
- const n = document.createElement("div");
51
- return n.textContent = t.text, n.id = `${t.prefix}${h}`, n.style.cssText = `
52
- transform: rotate(-${t.angle}deg);
53
- position: absolute;
54
- left: ${i}px;
55
- top: ${e}px;
56
- overflow: hidden;
57
- z-index: 9999999;
58
- opacity: ${t.alpha};
59
- font-size: ${t.fontsize};
60
- font-family: ${t.font};
61
- color: ${t.color};
62
- text-align: center;
63
- width: ${t.width}px;
64
- height: ${t.height}px;
65
- line-height: ${t.height}px;
66
- display: flex;
67
- align-items: center;
68
- justify-content: center;
69
- user-select: none;
70
- visibility: visible;
71
- `.replace(/\s+/g, " ").trim(), n;
72
- }
73
- function l(i) {
74
- if (p(), Object.assign(t, i), t.width === 0 && t.height === 0 || t.width === 0 || t.height === 0) {
75
- const a = C(
76
- t.text,
77
- t.font,
78
- t.fontsize
79
- ), g = 10;
80
- t.width === 0 && (t.width = a.width + g), t.height === 0 && (t.height = a.height + g);
81
- }
82
- const e = t.parent_node || document.body, h = Math.max(e.scrollWidth, e.clientWidth), n = Math.max(e.scrollHeight, e.clientHeight), o = document.createElement("div");
83
- o.id = t.id, e.closest("body") && getComputedStyle(e).position === "static" && (e.style.position = "relative"), o.style.cssText = `
84
- pointer-events: none;
85
- display: block;
86
- position: absolute;
87
- top: 0;
88
- left: 0;
89
- width: 100%;
90
- height: 100%;
91
- z-index: 9999999;
92
- overflow: hidden;
93
- `.replace(/\s+/g, " ").trim();
94
- const d = o.attachShadow ? o.attachShadow({ mode: "open" }) : o;
95
- e.appendChild(o);
96
- const { cols: m, rows: f, x_space: v, y_space: y } = u(h, n);
97
- t.cols = m, t.rows = f, t.x_space = v, t.y_space = y;
98
- const b = document.createDocumentFragment();
99
- for (let a = 0; a < f; a++) {
100
- const g = t.y + (t.height + y) * a;
101
- for (let x = 0; x < m; x++) {
102
- const k = t.x + (t.width + v) * x;
103
- b.appendChild(s(k, g, a * m + x));
104
- }
105
- }
106
- if (d.appendChild(b), t.monitor) {
107
- w.observe(e);
108
- const a = {
109
- attributes: !0,
110
- // 监听属性变化
111
- childList: !0,
112
- // 监听子元素变化
113
- subtree: !0,
114
- // 监听子树变化
115
- characterData: !0
116
- // 监听文本内容变化
117
- };
118
- r.observe(o, a), d !== o && r.observe(d, a);
119
- }
120
- }
121
- function p() {
122
- var e;
123
- const i = document.getElementById(t.id);
124
- r.disconnect(), i && ((e = i.parentNode) == null || e.removeChild(i));
125
- }
126
- function _(i) {
127
- if (c) {
128
- c = !1;
129
- return;
130
- }
131
- if (!document.getElementById(t.id)) {
132
- l(t);
133
- return;
134
- }
135
- i.some((n) => n.type === "childList" || n.type === "attributes" || n.type === "characterData") && l(t);
136
- }
137
- return {
138
- addMark: l,
139
- removeMark: () => {
140
- c = !0, p();
141
- }
142
- };
143
- }
144
- export {
145
- M as watermark
146
- };
147
- //# sourceMappingURL=watermark.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watermark.mjs","sources":["../../../../packages/utils/src/watermark.ts"],"sourcesContent":["interface SettingsType {\n /** 水印总体的id */\n id?: string\n /** 小水印的id前缀 */\n prefix?: string\n /** 水印文案 */\n text?: string\n /** 水印起始位置x轴坐标 */\n x?: number\n /** 水印起始位置Y轴坐标 */\n y?: number\n /** 水印行数 */\n rows?: number\n /** 水印列数 */\n cols?: number\n /** 水印x轴间隔 */\n x_space?: number\n /** 水印y轴间隔 */\n y_space?: number\n /** 水印字体 */\n font?: string\n /** 水印字体颜色 */\n color?: string\n /** 水印字体大小 */\n fontsize?: string\n /** 水印透明度,要求设置在大于等于0.005 */\n alpha?: number\n /** 水印宽度 */\n width?: number\n /** 水印长度 */\n height?: number\n /** 水印倾斜度数 */\n angle?: number\n /** 水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值) */\n parent_width?: number\n /** 水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值) */\n parent_height?: number\n /** 水印插件挂载的父元素element,不输入则默认挂在body */\n parent_node?: HTMLElement | null\n /** 是否监控,true: 不可删除水印; false: 可删水印 */\n monitor?: boolean\n}\n\n// 默认配置\nconst initialSettings: Required<SettingsType> = {\n id: 'wm_div_id',\n prefix: 'mask_div_id',\n text: '测试水印',\n x: 0,\n y: 0,\n rows: 0,\n cols: 0,\n width: 0,\n height: 0,\n x_space: 100,\n y_space: 40,\n font: '微软雅黑',\n color: 'black',\n fontsize: '18px',\n alpha: 0.15,\n angle: 15,\n parent_width: 0,\n parent_height: 0,\n parent_node: null,\n monitor: true,\n}\n\nfunction calculateTextDimensions(text: string, font: string, fontSize: string): { width: number, height: number } {\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')\n if (!context) {\n return { width: 100, height: 100 }\n }\n\n context.font = `${fontSize} ${font}`\n const metrics = context.measureText(text.trim())\n const fontSizeNum = Number.parseFloat(fontSize)\n\n // 移除 DPI 缩放,直接使用原始值\n const height = (metrics.actualBoundingBoxAscent !== undefined && metrics.actualBoundingBoxDescent !== undefined)\n ? (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent)\n : fontSizeNum\n\n return {\n width: Math.ceil(metrics.width),\n height: Math.ceil(height),\n }\n}\n\nexport function watermark() {\n const globalSetting: Required<SettingsType> = { ...initialSettings }\n let forceRemove = false\n const watermarkDom = new MutationObserver(domChangeCallback)\n const resizeObserver = new ResizeObserver(() => {\n if (!forceRemove) {\n loadMark(globalSetting)\n }\n })\n\n // 计算水印布局\n function calculateWatermarkLayout(pageWidth: number, pageHeight: number) {\n const availableWidth = pageWidth - globalSetting.x\n const availableHeight = pageHeight - globalSetting.y\n\n // 使用固定间距\n const x_space = globalSetting.x_space || 20 // 如果未设置则使用默认值\n const y_space = globalSetting.y_space || 20 // 如果未设置则使用默认值\n\n // 计算能容纳的行数和列数\n const cols = Math.ceil(availableWidth / (globalSetting.width + x_space))\n const rows = Math.ceil(availableHeight / (globalSetting.height + y_space))\n\n return {\n cols,\n rows,\n x_space,\n y_space,\n }\n }\n\n // 创建水印元素\n function createWatermarkElement(x: number, y: number, index: number): HTMLElement {\n const maskDiv = document.createElement('div')\n maskDiv.textContent = globalSetting.text\n maskDiv.id = `${globalSetting.prefix}${index}`\n\n maskDiv.style.cssText = `\n transform: rotate(-${globalSetting.angle}deg);\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n overflow: hidden;\n z-index: 9999999;\n opacity: ${globalSetting.alpha};\n font-size: ${globalSetting.fontsize};\n font-family: ${globalSetting.font};\n color: ${globalSetting.color};\n text-align: center;\n width: ${globalSetting.width}px;\n height: ${globalSetting.height}px;\n line-height: ${globalSetting.height}px;\n display: flex;\n align-items: center;\n justify-content: center;\n user-select: none;\n visibility: visible;\n `.replace(/\\s+/g, ' ').trim()\n\n return maskDiv\n }\n\n // 加载水印\n function loadMark(settings: Partial<SettingsType>) {\n removeMark()\n Object.assign(globalSetting, settings)\n\n if ((globalSetting.width === 0 && globalSetting.height === 0) || globalSetting.width === 0 || globalSetting.height === 0) {\n // 计算文本尺寸\n const textDimensions = calculateTextDimensions(\n globalSetting.text,\n globalSetting.font,\n globalSetting.fontsize,\n )\n const padding = 10\n if (globalSetting.width === 0) {\n globalSetting.width = textDimensions.width + padding\n }\n if (globalSetting.height === 0) {\n globalSetting.height = textDimensions.height + padding\n }\n }\n\n const parentElement = globalSetting.parent_node || document.body\n const pageWidth = Math.max(parentElement.scrollWidth, parentElement.clientWidth)\n const pageHeight = Math.max(parentElement.scrollHeight, parentElement.clientHeight)\n\n const watermarkContainer = document.createElement('div')\n watermarkContainer.id = globalSetting.id\n\n // 处理父元素定位\n if (parentElement.closest('body') && getComputedStyle(parentElement).position === 'static') {\n parentElement.style.position = 'relative'\n }\n\n watermarkContainer.style.cssText = `\n pointer-events: none;\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 9999999;\n overflow: hidden;\n `.replace(/\\s+/g, ' ').trim()\n\n const shadowRoot = watermarkContainer.attachShadow ? watermarkContainer.attachShadow({ mode: 'open' }) : watermarkContainer\n\n parentElement.appendChild(watermarkContainer)\n\n const { cols, rows, x_space, y_space } = calculateWatermarkLayout(pageWidth, pageHeight)\n globalSetting.cols = cols\n globalSetting.rows = rows\n globalSetting.x_space = x_space\n globalSetting.y_space = y_space\n\n const fragment = document.createDocumentFragment()\n for (let i = 0; i < rows; i++) {\n const y = globalSetting.y + (globalSetting.height + y_space) * i\n for (let j = 0; j < cols; j++) {\n const x = globalSetting.x + (globalSetting.width + x_space) * j\n fragment.appendChild(createWatermarkElement(x, y, i * cols + j))\n }\n }\n shadowRoot.appendChild(fragment)\n\n if (globalSetting.monitor) {\n // 监听父元素大小变化\n resizeObserver.observe(parentElement)\n\n // 监听水印容器及其子元素\n const config: MutationObserverInit = {\n attributes: true, // 监听属性变化\n childList: true, // 监听子元素变化\n subtree: true, // 监听子树变化\n characterData: true, // 监听文本内容变化\n }\n\n // 监听水印容器\n watermarkDom.observe(watermarkContainer, config)\n\n // 如果使用了 Shadow DOM,还需要监听 shadowRoot 内的元素\n if (shadowRoot !== watermarkContainer) {\n watermarkDom.observe(shadowRoot, config)\n }\n }\n }\n\n // 移除水印\n function removeMark() {\n const watermarkElement = document.getElementById(globalSetting.id)\n watermarkDom.disconnect()\n if (watermarkElement) {\n watermarkElement.parentNode?.removeChild(watermarkElement)\n }\n }\n\n // 监听DOM变化\n function domChangeCallback(records: MutationRecord[]) {\n if (forceRemove) {\n forceRemove = false\n return\n }\n\n const watermarkElement = document.getElementById(globalSetting.id)\n if (!watermarkElement) {\n // 如果水印容器被删除,重新创建\n loadMark(globalSetting)\n return\n }\n\n // 检查是否有任何修改\n const hasChanges = records.some((record) => {\n // 检查元素是否被删除或添加\n if (record.type === 'childList') {\n return true\n }\n\n // 检查属性是否被修改\n if (record.type === 'attributes') {\n return true\n }\n\n // 检查文本内容是否被修改\n if (record.type === 'characterData') {\n return true\n }\n\n return false\n })\n\n if (hasChanges) {\n loadMark(globalSetting)\n }\n }\n\n return {\n addMark: loadMark,\n removeMark: () => {\n forceRemove = true\n // 删除这行,不重置全局配置\n // Object.assign(globalSetting, initialSettings)\n removeMark()\n },\n }\n}\n"],"names":["initialSettings","calculateTextDimensions","text","font","fontSize","context","metrics","fontSizeNum","height","watermark","globalSetting","forceRemove","watermarkDom","domChangeCallback","resizeObserver","loadMark","calculateWatermarkLayout","pageWidth","pageHeight","availableWidth","availableHeight","x_space","y_space","cols","rows","createWatermarkElement","x","y","index","maskDiv","settings","removeMark","textDimensions","padding","parentElement","watermarkContainer","shadowRoot","fragment","i","j","config","_a","watermarkElement","records","record"],"mappings":"AA4CA,MAAMA,IAA0C;AAAA,EAC9C,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc;AAAA,EACd,eAAe;AAAA,EACf,aAAa;AAAA,EACb,SAAS;AACX;AAEA,SAASC,EAAwBC,GAAcC,GAAcC,GAAqD;AAE1G,QAAAC,IADS,SAAS,cAAc,QAAQ,EACvB,WAAW,IAAI;AACtC,MAAI,CAACA;AACH,WAAO,EAAE,OAAO,KAAK,QAAQ,IAAI;AAGnC,EAAAA,EAAQ,OAAO,GAAGD,CAAQ,IAAID,CAAI;AAClC,QAAMG,IAAUD,EAAQ,YAAYH,EAAK,MAAM,GACzCK,IAAc,OAAO,WAAWH,CAAQ,GAGxCI,IAAUF,EAAQ,4BAA4B,UAAaA,EAAQ,6BAA6B,SACjGA,EAAQ,0BAA0BA,EAAQ,2BAC3CC;AAEG,SAAA;AAAA,IACL,OAAO,KAAK,KAAKD,EAAQ,KAAK;AAAA,IAC9B,QAAQ,KAAK,KAAKE,CAAM;AAAA,EAC1B;AACF;AAEO,SAASC,IAAY;AACpB,QAAAC,IAAwC,EAAE,GAAGV,EAAgB;AACnE,MAAIW,IAAc;AACZ,QAAAC,IAAe,IAAI,iBAAiBC,CAAiB,GACrDC,IAAiB,IAAI,eAAe,MAAM;AAC9C,IAAKH,KACHI,EAASL,CAAa;AAAA,EACxB,CACD;AAGQ,WAAAM,EAAyBC,GAAmBC,GAAoB;AACjE,UAAAC,IAAiBF,IAAYP,EAAc,GAC3CU,IAAkBF,IAAaR,EAAc,GAG7CW,IAAUX,EAAc,WAAW,IACnCY,IAAUZ,EAAc,WAAW,IAGnCa,IAAO,KAAK,KAAKJ,KAAkBT,EAAc,QAAQW,EAAQ,GACjEG,IAAO,KAAK,KAAKJ,KAAmBV,EAAc,SAASY,EAAQ;AAElE,WAAA;AAAA,MACL,MAAAC;AAAA,MACA,MAAAC;AAAA,MACA,SAAAH;AAAA,MACA,SAAAC;AAAA,IACF;AAAA,EAAA;AAIO,WAAAG,EAAuBC,GAAWC,GAAWC,GAA4B;AAC1E,UAAAC,IAAU,SAAS,cAAc,KAAK;AAC5C,WAAAA,EAAQ,cAAcnB,EAAc,MACpCmB,EAAQ,KAAK,GAAGnB,EAAc,MAAM,GAAGkB,CAAK,IAE5CC,EAAQ,MAAM,UAAU;AAAA,+BACGnB,EAAc,KAAK;AAAA;AAAA,kBAEhCgB,CAAC;AAAA,iBACFC,CAAC;AAAA;AAAA;AAAA,qBAGGjB,EAAc,KAAK;AAAA,uBACjBA,EAAc,QAAQ;AAAA,yBACpBA,EAAc,IAAI;AAAA,mBACxBA,EAAc,KAAK;AAAA;AAAA,mBAEnBA,EAAc,KAAK;AAAA,oBAClBA,EAAc,MAAM;AAAA,yBACfA,EAAc,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMrC,QAAQ,QAAQ,GAAG,EAAE,KAAK,GAEvBmB;AAAA,EAAA;AAIT,WAASd,EAASe,GAAiC;AAI5C,QAHMC,EAAA,GACJ,OAAA,OAAOrB,GAAeoB,CAAQ,GAEhCpB,EAAc,UAAU,KAAKA,EAAc,WAAW,KAAMA,EAAc,UAAU,KAAKA,EAAc,WAAW,GAAG;AAExH,YAAMsB,IAAiB/B;AAAA,QACrBS,EAAc;AAAA,QACdA,EAAc;AAAA,QACdA,EAAc;AAAA,MAChB,GACMuB,IAAU;AACZ,MAAAvB,EAAc,UAAU,MACZA,EAAA,QAAQsB,EAAe,QAAQC,IAE3CvB,EAAc,WAAW,MACbA,EAAA,SAASsB,EAAe,SAASC;AAAA,IACjD;AAGI,UAAAC,IAAgBxB,EAAc,eAAe,SAAS,MACtDO,IAAY,KAAK,IAAIiB,EAAc,aAAaA,EAAc,WAAW,GACzEhB,IAAa,KAAK,IAAIgB,EAAc,cAAcA,EAAc,YAAY,GAE5EC,IAAqB,SAAS,cAAc,KAAK;AACvD,IAAAA,EAAmB,KAAKzB,EAAc,IAGlCwB,EAAc,QAAQ,MAAM,KAAK,iBAAiBA,CAAa,EAAE,aAAa,aAChFA,EAAc,MAAM,WAAW,aAGjCC,EAAmB,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAU/B,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAExB,UAAAC,IAAaD,EAAmB,eAAeA,EAAmB,aAAa,EAAE,MAAM,OAAQ,CAAA,IAAIA;AAEzG,IAAAD,EAAc,YAAYC,CAAkB;AAEtC,UAAA,EAAE,MAAAZ,GAAM,MAAAC,GAAM,SAAAH,GAAS,SAAAC,MAAYN,EAAyBC,GAAWC,CAAU;AACvF,IAAAR,EAAc,OAAOa,GACrBb,EAAc,OAAOc,GACrBd,EAAc,UAAUW,GACxBX,EAAc,UAAUY;AAElB,UAAAe,IAAW,SAAS,uBAAuB;AACjD,aAASC,IAAI,GAAGA,IAAId,GAAMc,KAAK;AAC7B,YAAMX,IAAIjB,EAAc,KAAKA,EAAc,SAASY,KAAWgB;AAC/D,eAASC,IAAI,GAAGA,IAAIhB,GAAMgB,KAAK;AAC7B,cAAMb,IAAIhB,EAAc,KAAKA,EAAc,QAAQW,KAAWkB;AAC9D,QAAAF,EAAS,YAAYZ,EAAuBC,GAAGC,GAAGW,IAAIf,IAAOgB,CAAC,CAAC;AAAA,MAAA;AAAA,IACjE;AAIF,QAFAH,EAAW,YAAYC,CAAQ,GAE3B3B,EAAc,SAAS;AAEzB,MAAAI,EAAe,QAAQoB,CAAa;AAGpC,YAAMM,IAA+B;AAAA,QACnC,YAAY;AAAA;AAAA,QACZ,WAAW;AAAA;AAAA,QACX,SAAS;AAAA;AAAA,QACT,eAAe;AAAA;AAAA,MACjB;AAGa,MAAA5B,EAAA,QAAQuB,GAAoBK,CAAM,GAG3CJ,MAAeD,KACJvB,EAAA,QAAQwB,GAAYI,CAAM;AAAA,IACzC;AAAA,EACF;AAIF,WAAST,IAAa;AAnMxB,QAAAU;AAoMI,UAAMC,IAAmB,SAAS,eAAehC,EAAc,EAAE;AACjE,IAAAE,EAAa,WAAW,GACpB8B,OACeD,IAAAC,EAAA,eAAA,QAAAD,EAAY,YAAYC;AAAA,EAC3C;AAIF,WAAS7B,EAAkB8B,GAA2B;AACpD,QAAIhC,GAAa;AACD,MAAAA,IAAA;AACd;AAAA,IAAA;AAIF,QAAI,CADqB,SAAS,eAAeD,EAAc,EAAE,GAC1C;AAErB,MAAAK,EAASL,CAAa;AACtB;AAAA,IAAA;AAuBF,IAnBmBiC,EAAQ,KAAK,CAACC,MAE3BA,EAAO,SAAS,eAKhBA,EAAO,SAAS,gBAKhBA,EAAO,SAAS,eAKrB,KAGC7B,EAASL,CAAa;AAAA,EACxB;AAGK,SAAA;AAAA,IACL,SAASK;AAAA,IACT,YAAY,MAAM;AACF,MAAAJ,IAAA,IAGHoB,EAAA;AAAA,IAAA;AAAA,EAEf;AACF;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}exports.commonjsRequire=o;
2
- //# sourceMappingURL=_commonjs-dynamic-modules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_commonjs-dynamic-modules.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function e(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}exports.getDefaultExportFromCjs=e;
2
- //# sourceMappingURL=_commonjsHelpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_commonjsHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}