@orderly.network/hooks 1.5.0 → 1.5.1
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.
- package/esm/orderly/orderlyHooks.d.ts +1 -0
- package/esm/orderly/orderlyHooks.d.ts.map +1 -1
- package/esm/orderly/orderlyHooks.js +1 -0
- package/esm/orderly/orderlyHooks.js.map +1 -1
- package/esm/orderly/useCollateral.d.ts.map +1 -1
- package/esm/orderly/useCollateral.js +8 -9
- package/esm/orderly/useCollateral.js.map +1 -1
- package/esm/orderly/usePositionStream/usePositionStream.d.ts +4 -0
- package/esm/orderly/usePositionStream/usePositionStream.d.ts.map +1 -1
- package/esm/orderly/usePositionStream/usePositionStream.js +9 -1
- package/esm/orderly/usePositionStream/usePositionStream.js.map +1 -1
- package/esm/orderly/usePrivateDataObserver.d.ts.map +1 -1
- package/esm/orderly/usePrivateDataObserver.js +8 -2
- package/esm/orderly/usePrivateDataObserver.js.map +1 -1
- package/esm/orderly/useSymbolLeverage.d.ts +2 -0
- package/esm/orderly/useSymbolLeverage.d.ts.map +1 -0
- package/esm/orderly/useSymbolLeverage.js +31 -0
- package/esm/orderly/useSymbolLeverage.js.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +2 -1
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
- package/esm/referral/index.d.ts +3 -0
- package/esm/referral/index.d.ts.map +1 -1
- package/esm/referral/index.js +3 -0
- package/esm/referral/index.js.map +1 -1
- package/esm/referral/useCheckReferralCode.d.ts +6 -0
- package/esm/referral/useCheckReferralCode.d.ts.map +1 -0
- package/esm/referral/useCheckReferralCode.js +18 -0
- package/esm/referral/useCheckReferralCode.js.map +1 -0
- package/esm/referral/useGetReferralCode.d.ts +6 -0
- package/esm/referral/useGetReferralCode.d.ts.map +1 -0
- package/esm/referral/useGetReferralCode.js +18 -0
- package/esm/referral/useGetReferralCode.js.map +1 -0
- package/esm/referral/useReferralInfo.d.ts +10 -0
- package/esm/referral/useReferralInfo.d.ts.map +1 -0
- package/esm/referral/useReferralInfo.js +56 -0
- package/esm/referral/useReferralInfo.js.map +1 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.d.ts +1 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -1
- package/esm/services/orderMerge/algoOrderMergeHandler.js +8 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.js.map +1 -1
- package/esm/services/orderMerge/baseMergeHandler.d.ts +1 -0
- package/esm/services/orderMerge/baseMergeHandler.d.ts.map +1 -1
- package/esm/services/orderMerge/baseMergeHandler.js +1 -1
- package/esm/services/orderMerge/baseMergeHandler.js.map +1 -1
- package/esm/services/orderMerge/regularOrderMergeHandler.d.ts +1 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -1
- package/esm/services/orderMerge/regularOrderMergeHandler.js +3 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.js.map +1 -1
- package/esm/services/painter/basePaint.d.ts +5 -0
- package/esm/services/painter/basePaint.d.ts.map +1 -1
- package/esm/services/painter/basePaint.js.map +1 -1
- package/esm/services/painter/dataPaint.d.ts +3 -0
- package/esm/services/painter/dataPaint.d.ts.map +1 -1
- package/esm/services/painter/dataPaint.js +88 -16
- package/esm/services/painter/dataPaint.js.map +1 -1
- package/esm/services/painter/layout.config.js +1 -1
- package/esm/services/painter/layout.config.js.map +1 -1
- package/esm/services/painter/painter.d.ts.map +1 -1
- package/esm/services/painter/painter.js +7 -2
- package/esm/services/painter/painter.js.map +1 -1
- package/esm/services/painter/qrPaint.d.ts +8 -0
- package/esm/services/painter/qrPaint.d.ts.map +1 -0
- package/esm/services/painter/qrPaint.js +39 -0
- package/esm/services/painter/qrPaint.js.map +1 -0
- package/esm/useLocalStorage.js +2 -2
- package/esm/useLocalStorage.js.map +1 -1
- package/esm/useMediaQuery.js +7 -7
- package/esm/useMediaQuery.js.map +1 -1
- package/esm/usePoster.d.ts.map +1 -1
- package/esm/usePoster.js +18 -15
- package/esm/usePoster.js.map +1 -1
- package/esm/useSessionStorage.js +2 -2
- package/esm/useSessionStorage.js.map +1 -1
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.js +1 -0
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/orderEntryHelper.d.ts +1 -0
- package/esm/utils/orderEntryHelper.d.ts.map +1 -1
- package/esm/utils/orderEntryHelper.js +27 -2
- package/esm/utils/orderEntryHelper.js.map +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.js +2 -2
- package/esm/version.js.map +1 -1
- package/lib/orderly/orderlyHooks.d.ts +1 -0
- package/lib/orderly/orderlyHooks.d.ts.map +1 -1
- package/lib/orderly/orderlyHooks.js +4 -0
- package/lib/orderly/orderlyHooks.js.map +1 -1
- package/lib/orderly/useCollateral.d.ts.map +1 -1
- package/lib/orderly/useCollateral.js +8 -9
- package/lib/orderly/useCollateral.js.map +1 -1
- package/lib/orderly/usePositionStream/usePositionStream.d.ts +4 -0
- package/lib/orderly/usePositionStream/usePositionStream.d.ts.map +1 -1
- package/lib/orderly/usePositionStream/usePositionStream.js +9 -1
- package/lib/orderly/usePositionStream/usePositionStream.js.map +1 -1
- package/lib/orderly/usePrivateDataObserver.d.ts.map +1 -1
- package/lib/orderly/usePrivateDataObserver.js +8 -2
- package/lib/orderly/usePrivateDataObserver.js.map +1 -1
- package/lib/orderly/useSymbolLeverage.d.ts +2 -0
- package/lib/orderly/useSymbolLeverage.d.ts.map +1 -0
- package/lib/orderly/useSymbolLeverage.js +41 -0
- package/lib/orderly/useSymbolLeverage.js.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +2 -1
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
- package/lib/referral/index.d.ts +3 -0
- package/lib/referral/index.d.ts.map +1 -1
- package/lib/referral/index.js +12 -0
- package/lib/referral/index.js.map +1 -1
- package/lib/referral/useCheckReferralCode.d.ts +6 -0
- package/lib/referral/useCheckReferralCode.d.ts.map +1 -0
- package/lib/referral/useCheckReferralCode.js +28 -0
- package/lib/referral/useCheckReferralCode.js.map +1 -0
- package/lib/referral/useGetReferralCode.d.ts +6 -0
- package/lib/referral/useGetReferralCode.d.ts.map +1 -0
- package/lib/referral/useGetReferralCode.js +28 -0
- package/lib/referral/useGetReferralCode.js.map +1 -0
- package/lib/referral/useReferralInfo.d.ts +10 -0
- package/lib/referral/useReferralInfo.d.ts.map +1 -0
- package/lib/referral/useReferralInfo.js +66 -0
- package/lib/referral/useReferralInfo.js.map +1 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.d.ts +1 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -1
- package/lib/services/orderMerge/algoOrderMergeHandler.js +8 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.js.map +1 -1
- package/lib/services/orderMerge/baseMergeHandler.d.ts +1 -0
- package/lib/services/orderMerge/baseMergeHandler.d.ts.map +1 -1
- package/lib/services/orderMerge/baseMergeHandler.js +1 -1
- package/lib/services/orderMerge/baseMergeHandler.js.map +1 -1
- package/lib/services/orderMerge/regularOrderMergeHandler.d.ts +1 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -1
- package/lib/services/orderMerge/regularOrderMergeHandler.js +3 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.js.map +1 -1
- package/lib/services/painter/basePaint.d.ts +5 -0
- package/lib/services/painter/basePaint.d.ts.map +1 -1
- package/lib/services/painter/basePaint.js.map +1 -1
- package/lib/services/painter/dataPaint.d.ts +3 -0
- package/lib/services/painter/dataPaint.d.ts.map +1 -1
- package/lib/services/painter/dataPaint.js +88 -16
- package/lib/services/painter/dataPaint.js.map +1 -1
- package/lib/services/painter/layout.config.js +1 -1
- package/lib/services/painter/layout.config.js.map +1 -1
- package/lib/services/painter/painter.d.ts.map +1 -1
- package/lib/services/painter/painter.js +7 -2
- package/lib/services/painter/painter.js.map +1 -1
- package/lib/services/painter/qrPaint.d.ts +8 -0
- package/lib/services/painter/qrPaint.d.ts.map +1 -0
- package/lib/services/painter/qrPaint.js +49 -0
- package/lib/services/painter/qrPaint.js.map +1 -0
- package/lib/useLocalStorage.js +2 -2
- package/lib/useLocalStorage.js.map +1 -1
- package/lib/useMediaQuery.js +7 -7
- package/lib/useMediaQuery.js.map +1 -1
- package/lib/usePoster.d.ts.map +1 -1
- package/lib/usePoster.js +18 -15
- package/lib/usePoster.js.map +1 -1
- package/lib/useSessionStorage.js +2 -2
- package/lib/useSessionStorage.js.map +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +3 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/orderEntryHelper.d.ts +1 -0
- package/lib/utils/orderEntryHelper.d.ts.map +1 -1
- package/lib/utils/orderEntryHelper.js +29 -2
- package/lib/utils/orderEntryHelper.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/lib/version.js.map +1 -1
- package/package.json +10 -9
|
@@ -11,36 +11,42 @@ Object.defineProperty(exports, "DataPaint", {
|
|
|
11
11
|
const _utils = require("@orderly.network/utils");
|
|
12
12
|
const _basePaint = require("./basePaint");
|
|
13
13
|
const _ramda = require("ramda");
|
|
14
|
+
const _qrPaint = require("./qrPaint");
|
|
14
15
|
class DataPaint extends _basePaint.BasePaint {
|
|
15
16
|
positionInfoCellWidth = 110;
|
|
16
17
|
DEFAULT_PROFIT_COLOR = "rgb(0,181,159)";
|
|
17
18
|
DEFAULT_LOSS_COLOR = "rgb(255,103,194)";
|
|
18
19
|
transformTop = 0;
|
|
20
|
+
QRCODE_SIZE = 56;
|
|
19
21
|
async draw(options) {
|
|
20
22
|
const needDrawDetails = Array.isArray(options.data?.position?.informations) && (options.data?.position?.informations?.length ?? 0) > 0;
|
|
23
|
+
const hasReferral = this.hasReferral(options);
|
|
21
24
|
// const hasMessage = !!options.data?.message;
|
|
22
25
|
const hasMessage = true;
|
|
23
26
|
this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;
|
|
24
27
|
// If position details are not displayed, the position PNL information will be margin
|
|
25
28
|
// const offsetTop = hasMessage ? 50 : 100;
|
|
26
|
-
const offsetTop = 100;
|
|
29
|
+
const offsetTop = 0; // 100;
|
|
27
30
|
// const offsetMessage = hasMessage ? 0 : -50;
|
|
28
31
|
if (!!options.data?.message) {
|
|
29
32
|
this.drawMessage(options);
|
|
30
33
|
}
|
|
31
34
|
if (!!options.data?.position) {
|
|
32
|
-
this.drawPosition(options, needDrawDetails ? 0 : offsetTop);
|
|
35
|
+
this.drawPosition(options, needDrawDetails || hasReferral ? 0 : offsetTop);
|
|
33
36
|
}
|
|
34
37
|
if (needDrawDetails) {
|
|
35
38
|
this.drawInformations(options);
|
|
36
39
|
}
|
|
37
|
-
this.drawUnrealizedPnL(options, needDrawDetails ? 0 : offsetTop);
|
|
40
|
+
this.drawUnrealizedPnL(options, needDrawDetails || hasReferral ? 0 : offsetTop);
|
|
38
41
|
if (!!options.data?.domain) {
|
|
39
42
|
this.drawDomainUrl(options);
|
|
40
43
|
}
|
|
41
44
|
if (typeof options.data?.updateTime !== "undefined") {
|
|
42
45
|
this.drawPositionTime(options);
|
|
43
46
|
}
|
|
47
|
+
if (typeof options.data?.referral !== "undefined") {
|
|
48
|
+
this.drawReferralCode(options);
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
drawMessage(options) {
|
|
46
52
|
// console.log("draw message", options);
|
|
@@ -193,22 +199,24 @@ class DataPaint extends _basePaint.BasePaint {
|
|
|
193
199
|
});
|
|
194
200
|
});
|
|
195
201
|
}
|
|
196
|
-
drawDomainUrl(options) {
|
|
202
|
+
drawDomainUrl(options, onlyMeasure = false) {
|
|
197
203
|
const layout = (0, _ramda.path)([
|
|
198
204
|
"layout",
|
|
199
205
|
"domain"
|
|
200
206
|
], options);
|
|
207
|
+
const hasReferral = this.hasReferral(options);
|
|
201
208
|
const { position } = layout;
|
|
202
209
|
const top = this.painter.height - position.bottom;
|
|
203
|
-
this._drawText(options.data?.domain, {
|
|
204
|
-
left: this._ratio(position.left),
|
|
205
|
-
top: this._ratio(top),
|
|
210
|
+
return this._drawText(options.data?.domain, {
|
|
211
|
+
left: !hasReferral ? this._ratio(position.left) : this._ratio(this.painter.width - 20),
|
|
212
|
+
top: !hasReferral ? this._ratio(top) : this._ratio(this.painter.height - 16),
|
|
206
213
|
fontSize: this._ratio(layout.fontSize),
|
|
207
214
|
color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,
|
|
208
215
|
fontFamily: options.fontFamily,
|
|
209
216
|
textBaseline: layout.textBaseline,
|
|
217
|
+
textAlign: !hasReferral ? layout.textAlign : "end",
|
|
210
218
|
fontWeight: 600
|
|
211
|
-
});
|
|
219
|
+
}, onlyMeasure);
|
|
212
220
|
}
|
|
213
221
|
drawPositionTime(options) {
|
|
214
222
|
const layout = (0, _ramda.path)([
|
|
@@ -216,20 +224,79 @@ class DataPaint extends _basePaint.BasePaint {
|
|
|
216
224
|
"updateTime"
|
|
217
225
|
], options);
|
|
218
226
|
const { position } = layout;
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
;
|
|
222
|
-
|
|
223
|
-
|
|
227
|
+
const hasReferral = this.hasReferral(options);
|
|
228
|
+
let top = this.painter.height - position.bottom;
|
|
229
|
+
let left = this._ratio(position.left);
|
|
230
|
+
if (hasReferral) {
|
|
231
|
+
const metrics = this.drawDomainUrl(options, true);
|
|
232
|
+
// console.log("metrics", metrics);
|
|
233
|
+
left = this._ratio(this.painter.width) - metrics.width - this._ratio(8 + position.left);
|
|
234
|
+
top = this.painter.height - position.bottom;
|
|
235
|
+
// console.log("left", left, top, metrics.width, this._ratio(top));
|
|
236
|
+
}
|
|
237
|
+
this._drawText(!hasReferral ? options.data?.updateTime : `Share on ${options.data?.updateTime} |`, {
|
|
238
|
+
left,
|
|
224
239
|
top: this._ratio(top),
|
|
240
|
+
// top: 536,
|
|
225
241
|
fontSize: this._ratio(layout.fontSize),
|
|
226
242
|
color: layout.color,
|
|
227
|
-
|
|
243
|
+
// color: "red",
|
|
244
|
+
textAlign: !hasReferral ? layout.textAlign : "end",
|
|
228
245
|
fontFamily: options.fontFamily,
|
|
229
246
|
textBaseline: layout.textBaseline
|
|
230
247
|
});
|
|
231
248
|
}
|
|
232
|
-
|
|
249
|
+
drawReferralCode(options) {
|
|
250
|
+
if (!options.data?.referral) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const layout = (0, _ramda.path)([
|
|
254
|
+
"layout",
|
|
255
|
+
"updateTime"
|
|
256
|
+
], options);
|
|
257
|
+
const { position } = layout;
|
|
258
|
+
const top = this.painter.height - (position.bottom ?? 0);
|
|
259
|
+
const messageLayout = (0, _ramda.path)([
|
|
260
|
+
"layout",
|
|
261
|
+
"message"
|
|
262
|
+
], options);
|
|
263
|
+
const url = new URL(options.data.referral.link);
|
|
264
|
+
const searchParams = url.searchParams;
|
|
265
|
+
searchParams.append("ref", options.data.referral.code);
|
|
266
|
+
url.search = searchParams.toString();
|
|
267
|
+
(0, _qrPaint.qrPaint)(this.ctx, {
|
|
268
|
+
size: this._ratio(this.QRCODE_SIZE),
|
|
269
|
+
padding: this._ratio(2),
|
|
270
|
+
left: this._ratio(position.left),
|
|
271
|
+
top: this._ratio(top - this.QRCODE_SIZE),
|
|
272
|
+
data: `${url.toString()}`
|
|
273
|
+
});
|
|
274
|
+
this._drawText(options.data.referral.slogan, {
|
|
275
|
+
left: this._ratio(position.left + 66),
|
|
276
|
+
top: this._ratio(top - this.QRCODE_SIZE),
|
|
277
|
+
fontSize: this._ratio(14),
|
|
278
|
+
color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,
|
|
279
|
+
fontFamily: options.fontFamily,
|
|
280
|
+
textBaseline: "top"
|
|
281
|
+
});
|
|
282
|
+
this._drawText("Referral Code", {
|
|
283
|
+
left: this._ratio(position.left + 66),
|
|
284
|
+
top: this._ratio(top - 29),
|
|
285
|
+
fontSize: this._ratio(12),
|
|
286
|
+
color: layout.color,
|
|
287
|
+
fontFamily: options.fontFamily,
|
|
288
|
+
textBaseline: "middle"
|
|
289
|
+
});
|
|
290
|
+
this._drawText(options.data.referral.code, {
|
|
291
|
+
left: this._ratio(position.left + 66),
|
|
292
|
+
top: this._ratio(top),
|
|
293
|
+
fontSize: this._ratio(16),
|
|
294
|
+
color: messageLayout.color,
|
|
295
|
+
fontFamily: options.fontFamily,
|
|
296
|
+
textBaseline: "bottom"
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
_drawText(str, options, onlyMeasure = false) {
|
|
233
300
|
let boundingBox;
|
|
234
301
|
const { left = 30, top = 30, fontSize = 13, fontWeight = 500, color = "black", textBaseline = "middle", textAlign = "start" } = options ?? {};
|
|
235
302
|
this.ctx.save();
|
|
@@ -239,10 +306,15 @@ class DataPaint extends _basePaint.BasePaint {
|
|
|
239
306
|
this.ctx.textBaseline = textBaseline;
|
|
240
307
|
this.ctx.textAlign = textAlign;
|
|
241
308
|
boundingBox = this.ctx.measureText(str);
|
|
242
|
-
|
|
309
|
+
if (!onlyMeasure) {
|
|
310
|
+
this.ctx.fillText(str, left, top);
|
|
311
|
+
}
|
|
243
312
|
this.ctx.restore();
|
|
244
313
|
return boundingBox;
|
|
245
314
|
}
|
|
315
|
+
hasReferral(options) {
|
|
316
|
+
return typeof options.data?.referral !== "undefined";
|
|
317
|
+
}
|
|
246
318
|
_ratio(num) {
|
|
247
319
|
return num * this.painter.ratio;
|
|
248
320
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/dataPaint.ts"],"sourcesContent":["import { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { path } from \"ramda\";\n\nexport class DataPaint extends BasePaint {\n private positionInfoCellWidth = 110;\n\n private DEFAULT_PROFIT_COLOR = \"rgb(0,181,159)\";\n private DEFAULT_LOSS_COLOR = \"rgb(255,103,194)\";\n\n private transformTop = 0;\n\n async draw(options: DrawOptions) {\n const needDrawDetails =\n Array.isArray(options.data?.position?.informations) &&\n (options.data?.position?.informations?.length ?? 0) > 0;\n\n // const hasMessage = !!options.data?.message;\n const hasMessage = true;\n\n this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;\n\n // If position details are not displayed, the position PNL information will be margin\n // const offsetTop = hasMessage ? 50 : 100;\n const offsetTop = 100;\n // const offsetMessage = hasMessage ? 0 : -50;\n\n if (!!options.data?.message) {\n this.drawMessage(options);\n }\n\n if (!!options.data?.position) {\n this.drawPosition(options, needDrawDetails ? 0 : offsetTop);\n }\n\n if (needDrawDetails) {\n this.drawInformations(options);\n }\n\n this.drawUnrealizedPnL(options, needDrawDetails ? 0 : offsetTop);\n\n if (!!options.data?.domain) {\n this.drawDomainUrl(options);\n }\n\n if (typeof options.data?.updateTime !== \"undefined\") {\n this.drawPositionTime(options);\n }\n }\n\n private drawMessage(options: DrawOptions) {\n // console.log(\"draw message\", options);\n\n const layout = path<layoutInfo>(\n [\"layout\", \"message\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n\n this._drawText(`\"${options.data?.message!}\"`, {\n color: layout.color,\n fontSize: this._ratio(layout.fontSize as number),\n top: this._ratio(position.top!),\n left: this._ratio(position.left!),\n textBaseline: \"top\",\n fontFamily: options.fontFamily,\n });\n }\n private drawPosition(options: DrawOptions, offsetTop: number = 0) {\n const layout = path<layoutInfo>(\n [\"layout\", \"position\"],\n options\n ) as layoutInfo;\n const { position, fontSize = 14 } = layout;\n let left = this._ratio(position.left!);\n\n let top = layout.position.top! + offsetTop + this.transformTop;\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n // draw position side;\n\n if (typeof options.data?.position.side !== \"undefined\") {\n prevElementBoundingBox = this._drawText(options.data.position.side, {\n color:\n options.data?.position.side.toUpperCase() === \"LONG\"\n ? this.DEFAULT_PROFIT_COLOR\n : this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.symbol !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(options.data?.position.symbol!, {\n color: layout.color,\n left: left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.leverage !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(\n `${options.data?.position.leverage}X`,\n {\n color: layout.color,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n }\n );\n }\n }\n\n private drawUnrealizedPnL(options: DrawOptions, offsetTop: number = 0) {\n // reset left value;\n const layout = path<layoutInfo>(\n [\"layout\", \"unrealizedPnl\"],\n options\n ) as layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n const { position } = layout;\n let left = this._ratio(position.left!);\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n const top = (position.top ?? 0) + offsetTop + this.transformTop;\n\n // ROI\n if (typeof options.data?.position.ROI !== \"undefined\") {\n const prefix = options.data?.position.ROI! > 0 ? \"+\" : \"\";\n prevElementBoundingBox = this._drawText(\n `${prefix}${commify(options.data?.position.ROI)}%`,\n {\n color:\n prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 700,\n fontFamily: options.fontFamily,\n }\n );\n }\n // unrelPnL\n if (typeof options.data?.position.pnl !== \"undefined\") {\n const prefix = options.data?.position.pnl! > 0 ? \"+\" : \"\";\n let text = `${prefix}${commify(options.data?.position.pnl)} ${\n options.data?.position.currency\n }`;\n let fontWeight = 600;\n\n if (prevElementBoundingBox.width) {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(8);\n text = `(${text})`;\n } else {\n left = this._ratio(position.left!);\n fontWeight = 700;\n }\n\n const color =\n typeof options.data.position.ROI === \"undefined\"\n ? prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR\n : layout.secondaryColor;\n\n const fontSize =\n typeof options.data.position.ROI === \"undefined\"\n ? this._ratio(layout.fontSize as number)\n : this._ratio(layout.secondaryFontSize as number);\n\n prevElementBoundingBox = this._drawText(text, {\n color,\n left,\n top: this._ratio(top),\n fontSize,\n fontWeight,\n fontFamily: options.fontFamily,\n });\n }\n }\n\n private drawInformations(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"informations\"],\n options\n ) as layoutInfo & {\n labelColor?: string;\n };\n const { position } = layout;\n\n const isVertical = (options.data?.position.informations.length ?? 0) === 2;\n\n options.data?.position.informations.forEach((info, index) => {\n // let cellWidth = this.positionInfoCellWidth;\n let left = position.left! + (index % 2) * this.positionInfoCellWidth;\n // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n let top =\n (position.top as number) +\n Math.floor(index / 2) * 38 +\n this.transformTop;\n\n this._drawText(info.title, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(10),\n color: layout.labelColor,\n fontFamily: options.fontFamily,\n });\n\n this._drawText(info.value, {\n left: this._ratio(left),\n top: this._ratio(top + 17),\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 500,\n color: layout.color as string,\n fontFamily: options.fontFamily,\n });\n });\n }\n\n private drawDomainUrl(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"domain\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const top = this.painter.height - position.bottom!;\n\n this._drawText(options.data?.domain!, {\n left: this._ratio(position.left!),\n top: this._ratio(top),\n fontSize: this._ratio(layout.fontSize as number),\n color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n fontWeight: 600,\n });\n }\n\n private drawPositionTime(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"updateTime\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const top = this.painter.height - position.bottom!;\n const left = position.left!;\n\n console.log(\"*******\", left, top, options.data?.updateTime);\n\n this._drawText(options.data?.updateTime!, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(layout.fontSize as number),\n color: layout.color as string,\n textAlign: layout.textAlign,\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n });\n }\n\n private _drawText(\n str: string,\n options?: {\n left?: number;\n top?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: number;\n color?: string;\n textBaseline?: CanvasTextBaseline;\n textAlign?: CanvasTextAlign;\n }\n ): TextMetrics {\n let boundingBox: TextMetrics;\n const {\n left = 30,\n top = 30,\n fontSize = 13,\n fontWeight = 500,\n color = \"black\",\n textBaseline = \"middle\",\n textAlign = \"start\",\n } = options ?? {};\n\n this.ctx.save();\n // \"Nunito Sans\",-apple-system,\"San Francisco\",BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",Helvetica,Arial,sans-serif\n this.ctx.font = `${fontWeight} ${fontSize}px ${options?.fontFamily}`;\n\n this.ctx.fillStyle = color;\n this.ctx.textBaseline = textBaseline;\n this.ctx.textAlign = textAlign;\n boundingBox = this.ctx.measureText(str);\n\n this.ctx.fillText(str, left, top);\n this.ctx.restore();\n\n return boundingBox;\n }\n\n private _ratio(num: number) {\n return num * this.painter.ratio;\n }\n}\n"],"names":["DataPaint","BasePaint","positionInfoCellWidth","DEFAULT_PROFIT_COLOR","DEFAULT_LOSS_COLOR","transformTop","draw","options","needDrawDetails","Array","isArray","data","position","informations","length","hasMessage","offsetTop","message","drawMessage","drawPosition","drawInformations","drawUnrealizedPnL","domain","drawDomainUrl","updateTime","drawPositionTime","layout","path","_drawText","color","fontSize","_ratio","top","left","textBaseline","fontFamily","prevElementBoundingBox","side","toUpperCase","symbol","width","leverage","ROI","prefix","commify","profitColor","lossColor","fontWeight","pnl","text","currency","secondaryColor","secondaryFontSize","isVertical","forEach","info","index","Math","floor","title","labelColor","value","painter","height","bottom","brandColor","textAlign","str","boundingBox","ctx","save","font","fillStyle","measureText","fillText","restore","num","ratio"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/dataPaint.ts"],"sourcesContent":["import { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { path } from \"ramda\";\nimport { qrPaint } from \"./qrPaint\";\n\nexport class DataPaint extends BasePaint {\n private positionInfoCellWidth = 110;\n\n private DEFAULT_PROFIT_COLOR = \"rgb(0,181,159)\";\n private DEFAULT_LOSS_COLOR = \"rgb(255,103,194)\";\n\n private transformTop = 0;\n\n private QRCODE_SIZE = 56;\n\n async draw(options: DrawOptions) {\n const needDrawDetails =\n Array.isArray(options.data?.position?.informations) &&\n (options.data?.position?.informations?.length ?? 0) > 0;\n\n const hasReferral = this.hasReferral(options);\n\n // const hasMessage = !!options.data?.message;\n const hasMessage = true;\n\n this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;\n\n // If position details are not displayed, the position PNL information will be margin\n // const offsetTop = hasMessage ? 50 : 100;\n const offsetTop = 0; // 100;\n // const offsetMessage = hasMessage ? 0 : -50;\n\n if (!!options.data?.message) {\n this.drawMessage(options);\n }\n\n if (!!options.data?.position) {\n this.drawPosition(\n options,\n needDrawDetails || hasReferral ? 0 : offsetTop\n );\n }\n\n if (needDrawDetails) {\n this.drawInformations(options);\n }\n\n this.drawUnrealizedPnL(\n options,\n needDrawDetails || hasReferral ? 0 : offsetTop\n );\n\n if (!!options.data?.domain) {\n this.drawDomainUrl(options);\n }\n\n if (typeof options.data?.updateTime !== \"undefined\") {\n this.drawPositionTime(options);\n }\n\n if (typeof options.data?.referral !== \"undefined\") {\n this.drawReferralCode(options);\n }\n }\n\n private drawMessage(options: DrawOptions) {\n // console.log(\"draw message\", options);\n\n const layout = path<layoutInfo>(\n [\"layout\", \"message\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n\n this._drawText(`\"${options.data?.message!}\"`, {\n color: layout.color,\n fontSize: this._ratio(layout.fontSize as number),\n top: this._ratio(position.top!),\n left: this._ratio(position.left!),\n textBaseline: \"top\",\n fontFamily: options.fontFamily,\n });\n }\n private drawPosition(options: DrawOptions, offsetTop: number = 0) {\n const layout = path<layoutInfo>(\n [\"layout\", \"position\"],\n options\n ) as layoutInfo;\n const { position, fontSize = 14 } = layout;\n let left = this._ratio(position.left!);\n\n let top = layout.position.top! + offsetTop + this.transformTop;\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n // draw position side;\n\n if (typeof options.data?.position.side !== \"undefined\") {\n prevElementBoundingBox = this._drawText(options.data.position.side, {\n color:\n options.data?.position.side.toUpperCase() === \"LONG\"\n ? this.DEFAULT_PROFIT_COLOR\n : this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.symbol !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(options.data?.position.symbol!, {\n color: layout.color,\n left: left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.leverage !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(\n `${options.data?.position.leverage}X`,\n {\n color: layout.color,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n }\n );\n }\n }\n\n private drawUnrealizedPnL(options: DrawOptions, offsetTop: number = 0) {\n // reset left value;\n const layout = path<layoutInfo>(\n [\"layout\", \"unrealizedPnl\"],\n options\n ) as layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n const { position } = layout;\n let left = this._ratio(position.left!);\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n const top = (position.top ?? 0) + offsetTop + this.transformTop;\n\n // ROI\n if (typeof options.data?.position.ROI !== \"undefined\") {\n const prefix = options.data?.position.ROI! > 0 ? \"+\" : \"\";\n prevElementBoundingBox = this._drawText(\n `${prefix}${commify(options.data?.position.ROI)}%`,\n {\n color:\n prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 700,\n fontFamily: options.fontFamily,\n }\n );\n }\n // unrelPnL\n if (typeof options.data?.position.pnl !== \"undefined\") {\n const prefix = options.data?.position.pnl! > 0 ? \"+\" : \"\";\n let text = `${prefix}${commify(options.data?.position.pnl)} ${\n options.data?.position.currency\n }`;\n let fontWeight = 600;\n\n if (prevElementBoundingBox.width) {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(8);\n text = `(${text})`;\n } else {\n left = this._ratio(position.left!);\n fontWeight = 700;\n }\n\n const color =\n typeof options.data.position.ROI === \"undefined\"\n ? prefix === \"+\"\n ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n : options.lossColor || this.DEFAULT_LOSS_COLOR\n : layout.secondaryColor;\n\n const fontSize =\n typeof options.data.position.ROI === \"undefined\"\n ? this._ratio(layout.fontSize as number)\n : this._ratio(layout.secondaryFontSize as number);\n\n prevElementBoundingBox = this._drawText(text, {\n color,\n left,\n top: this._ratio(top),\n fontSize,\n fontWeight,\n fontFamily: options.fontFamily,\n });\n }\n }\n\n private drawInformations(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"informations\"],\n options\n ) as layoutInfo & {\n labelColor?: string;\n };\n const { position } = layout;\n\n const isVertical = (options.data?.position.informations.length ?? 0) === 2;\n\n options.data?.position.informations.forEach((info, index) => {\n // let cellWidth = this.positionInfoCellWidth;\n let left = position.left! + (index % 2) * this.positionInfoCellWidth;\n // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n let top =\n (position.top as number) +\n Math.floor(index / 2) * 38 +\n this.transformTop;\n\n this._drawText(info.title, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(10),\n color: layout.labelColor,\n fontFamily: options.fontFamily,\n });\n\n this._drawText(info.value, {\n left: this._ratio(left),\n top: this._ratio(top + 17),\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 500,\n color: layout.color as string,\n fontFamily: options.fontFamily,\n });\n });\n }\n\n private drawDomainUrl(options: DrawOptions, onlyMeasure: boolean = false) {\n const layout = path<layoutInfo>(\n [\"layout\", \"domain\"],\n options\n ) as layoutInfo;\n\n const hasReferral = this.hasReferral(options);\n\n const { position } = layout;\n const top = this.painter.height - position.bottom!;\n\n return this._drawText(\n options.data?.domain!,\n {\n left: !hasReferral\n ? this._ratio(position.left!)\n : this._ratio(this.painter.width - 20),\n top: !hasReferral\n ? this._ratio(top)\n : this._ratio(this.painter.height - 16),\n fontSize: this._ratio(layout.fontSize as number),\n color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n textAlign: !hasReferral ? layout.textAlign : \"end\",\n fontWeight: 600,\n },\n onlyMeasure\n );\n }\n\n private drawPositionTime(options: DrawOptions) {\n const layout = path<layoutInfo>(\n [\"layout\", \"updateTime\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const hasReferral = this.hasReferral(options);\n\n let top = this.painter.height - position.bottom!;\n let left = this._ratio(position.left!);\n\n if (hasReferral) {\n const metrics = this.drawDomainUrl(options, true);\n // console.log(\"metrics\", metrics);\n left =\n this._ratio(this.painter.width) -\n metrics.width -\n this._ratio(8 + position.left!);\n top = this.painter.height - position.bottom!;\n // console.log(\"left\", left, top, metrics.width, this._ratio(top));\n }\n\n this._drawText(\n !hasReferral\n ? options.data?.updateTime!\n : `Share on ${options.data?.updateTime} |`,\n {\n left,\n top: this._ratio(top),\n // top: 536,\n fontSize: this._ratio(layout.fontSize as number),\n color: layout.color as string,\n // color: \"red\",\n textAlign: !hasReferral ? layout.textAlign : \"end\",\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\n }\n );\n }\n\n private drawReferralCode(options: DrawOptions) {\n if (!options.data?.referral) {\n return;\n }\n\n const layout = path<layoutInfo>(\n [\"layout\", \"updateTime\"],\n options\n ) as layoutInfo;\n const { position } = layout;\n const top = this.painter.height - (position.bottom ?? 0);\n\n const messageLayout = path<layoutInfo>(\n [\"layout\", \"message\"],\n options\n ) as layoutInfo;\n\n const url = new URL(options.data.referral.link);\n\n const searchParams = url.searchParams;\n searchParams.append(\"ref\", options.data.referral.code);\n\n url.search = searchParams.toString();\n\n qrPaint(this.ctx, {\n size: this._ratio(this.QRCODE_SIZE),\n padding: this._ratio(2),\n left: this._ratio(position.left!),\n top: this._ratio(top - this.QRCODE_SIZE),\n data: `${url.toString()}`,\n });\n\n this._drawText(options.data.referral.slogan, {\n left: this._ratio(position.left! + 66),\n top: this._ratio(top - this.QRCODE_SIZE),\n fontSize: this._ratio(14),\n color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n fontFamily: options.fontFamily,\n textBaseline: \"top\",\n });\n\n this._drawText(\"Referral Code\", {\n left: this._ratio(position.left! + 66),\n top: this._ratio(top - 29),\n fontSize: this._ratio(12),\n color: layout.color as string,\n fontFamily: options.fontFamily,\n textBaseline: \"middle\",\n });\n\n this._drawText(options.data.referral.code, {\n left: this._ratio(position.left! + 66),\n top: this._ratio(top),\n fontSize: this._ratio(16),\n color: messageLayout.color as string,\n fontFamily: options.fontFamily,\n textBaseline: \"bottom\",\n });\n }\n\n private _drawText(\n str: string,\n options?: {\n left?: number;\n top?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: number;\n color?: string;\n textBaseline?: CanvasTextBaseline;\n textAlign?: CanvasTextAlign;\n },\n onlyMeasure: boolean = false\n ): TextMetrics {\n let boundingBox: TextMetrics;\n const {\n left = 30,\n top = 30,\n fontSize = 13,\n fontWeight = 500,\n color = \"black\",\n textBaseline = \"middle\",\n textAlign = \"start\",\n } = options ?? {};\n\n this.ctx.save();\n // \"Nunito Sans\",-apple-system,\"San Francisco\",BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",Helvetica,Arial,sans-serif\n this.ctx.font = `${fontWeight} ${fontSize}px ${options?.fontFamily}`;\n\n this.ctx.fillStyle = color;\n this.ctx.textBaseline = textBaseline;\n this.ctx.textAlign = textAlign;\n boundingBox = this.ctx.measureText(str);\n\n if (!onlyMeasure) {\n this.ctx.fillText(str, left, top);\n }\n this.ctx.restore();\n\n return boundingBox;\n }\n\n private hasReferral(options: DrawOptions): boolean {\n return typeof options.data?.referral !== \"undefined\";\n }\n\n private _ratio(num: number) {\n return num * this.painter.ratio;\n }\n}\n"],"names":["DataPaint","BasePaint","positionInfoCellWidth","DEFAULT_PROFIT_COLOR","DEFAULT_LOSS_COLOR","transformTop","QRCODE_SIZE","draw","options","needDrawDetails","Array","isArray","data","position","informations","length","hasReferral","hasMessage","offsetTop","message","drawMessage","drawPosition","drawInformations","drawUnrealizedPnL","domain","drawDomainUrl","updateTime","drawPositionTime","referral","drawReferralCode","layout","path","_drawText","color","fontSize","_ratio","top","left","textBaseline","fontFamily","prevElementBoundingBox","side","toUpperCase","symbol","width","leverage","ROI","prefix","commify","profitColor","lossColor","fontWeight","pnl","text","currency","secondaryColor","secondaryFontSize","isVertical","forEach","info","index","Math","floor","title","labelColor","value","onlyMeasure","painter","height","bottom","brandColor","textAlign","metrics","messageLayout","url","URL","link","searchParams","append","code","search","toString","qrPaint","ctx","size","padding","slogan","str","boundingBox","save","font","fillStyle","measureText","fillText","restore","num","ratio"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/layout.config.ts"],"sourcesContent":["import { type PosterLayoutConfig } from \"./basePaint\";\n\nexport const DefaultLayoutConfig: PosterLayoutConfig = {\n domain: {\n fontSize: 13,\n // color: undefined,\n textBaseline: \"bottom\",\n position: {\n left: 20,\n bottom: 32,\n },\n },\n message: {\n fontSize: 20,\n color: \"rgba(255, 255, 255, 0.98)\",\n textBaseline: \"top\",\n position: {\n left: 20,\n top: 16,\n },\n },\n position: {\n fontSize: 14,\n color: \"rgba(255,255,255,0.98)\",\n position: {\n left: 20,\n top: 70,\n },\n },\n unrealizedPnl: {\n fontSize: 36,\n color: \"rgba(255,255,255,0.5)\",\n secondaryColor: \"rgba(255,255,255,0.54)\",\n secondaryFontSize: 20,\n position: {\n left: 20,\n top: 110,\n },\n },\n informations: {\n fontSize: 12,\n color: \"rgba(255, 255, 255, 0.8)\",\n labelColor: \"rgba(255,255,255,0.36)\",\n position: {\n left: 20,\n top: 150,\n },\n },\n\n updateTime: {\n fontSize: 10,\n color: \"rgba(255,255,255,0.3)\",\n
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/layout.config.ts"],"sourcesContent":["import { type PosterLayoutConfig } from \"./basePaint\";\n\nexport const DefaultLayoutConfig: PosterLayoutConfig = {\n domain: {\n fontSize: 13,\n // color: undefined,\n textBaseline: \"bottom\",\n position: {\n left: 20,\n bottom: 32,\n },\n },\n message: {\n fontSize: 20,\n color: \"rgba(255, 255, 255, 0.98)\",\n textBaseline: \"top\",\n position: {\n left: 20,\n top: 16,\n },\n },\n position: {\n fontSize: 14,\n color: \"rgba(255,255,255,0.98)\",\n position: {\n left: 20,\n top: 70,\n },\n },\n unrealizedPnl: {\n fontSize: 36,\n color: \"rgba(255,255,255,0.5)\",\n secondaryColor: \"rgba(255,255,255,0.54)\",\n secondaryFontSize: 20,\n position: {\n left: 20,\n top: 110,\n },\n },\n informations: {\n fontSize: 12,\n color: \"rgba(255, 255, 255, 0.8)\",\n labelColor: \"rgba(255,255,255,0.36)\",\n position: {\n left: 20,\n top: 150,\n },\n },\n\n updateTime: {\n fontSize: 10,\n color: \"rgba(255,255,255,0.3)\",\n textAlign: \"start\",\n textBaseline: \"bottom\",\n position: {\n left: 20,\n bottom: 17,\n },\n },\n};\n"],"names":["DefaultLayoutConfig","domain","fontSize","textBaseline","position","left","bottom","message","color","top","unrealizedPnl","secondaryColor","secondaryFontSize","informations","labelColor","updateTime","textAlign"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAEaA;;;eAAAA;;;AAAN,MAAMA,sBAA0C;IACrDC,QAAQ;QACNC,UAAU;QACV,oBAAoB;QACpBC,cAAc;QACdC,UAAU;YACRC,MAAM;YACNC,QAAQ;QACV;IACF;IACAC,SAAS;QACPL,UAAU;QACVM,OAAO;QACPL,cAAc;QACdC,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IACAL,UAAU;QACRF,UAAU;QACVM,OAAO;QACPJ,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IACAC,eAAe;QACbR,UAAU;QACVM,OAAO;QACPG,gBAAgB;QAChBC,mBAAmB;QACnBR,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IACAI,cAAc;QACZX,UAAU;QACVM,OAAO;QACPM,YAAY;QACZV,UAAU;YACRC,MAAM;YACNI,KAAK;QACP;IACF;IAEAM,YAAY;QACVb,UAAU;QACVM,OAAO;QACPQ,WAAW;QACXb,cAAc;QACdC,UAAU;YACRC,MAAM;YACNC,QAAQ;QACV;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/services/painter/painter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,aAAa;IAOtB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,GAAG,CAA2B;IACtC,KAAK,EAAE,MAAM,CAAK;IAClB,MAAM,EAAE,MAAM,CAAK;IACnB,KAAK,EAAE,MAAM,CAAC;gBAGJ,MAAM,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;KACf;
|
|
1
|
+
{"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/services/painter/painter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,aAAa;IAOtB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,GAAG,CAA2B;IACtC,KAAK,EAAE,MAAM,CAAK;IAClB,MAAM,EAAE,MAAM,CAAK;IACnB,KAAK,EAAE,MAAM,CAAC;gBAGJ,MAAM,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;KACf;IA8BH,IAAI,CAAC,OAAO,EAAE,WAAW;IAInB,KAAK,CAAC,OAAO,EAAE,WAAW;CAWjC"}
|
|
@@ -25,8 +25,13 @@ class PosterPainter {
|
|
|
25
25
|
this.ctx = this.canvas.getContext("2d");
|
|
26
26
|
this.width = this.canvas.width;
|
|
27
27
|
this.height = this.canvas.height;
|
|
28
|
-
this.ratio =
|
|
29
|
-
|
|
28
|
+
// this.ratio =
|
|
29
|
+
// options?.ratio ||
|
|
30
|
+
// (typeof window !== "undefined"
|
|
31
|
+
// ? Math.ceil(window.devicePixelRatio)
|
|
32
|
+
// : 1) ||
|
|
33
|
+
// 1;
|
|
34
|
+
this.ratio = Math.max(options?.ratio || 1, typeof window !== "undefined" ? Math.ceil(window.devicePixelRatio) : 1);
|
|
30
35
|
// render to high resolution
|
|
31
36
|
this.canvas.width = this.width * this.ratio;
|
|
32
37
|
this.canvas.height = this.height * this.ratio;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/painter/painter.ts"],"sourcesContent":["import { BackgroundPaint } from \"./backgroundPaint\";\nimport { DrawOptions } from \"./basePaint\";\nimport { DataPaint } from \"./dataPaint\";\nexport class PosterPainter {\n private ctx: CanvasRenderingContext2D;\n width: number = 0;\n height: number = 0;\n ratio: number;\n // resourceManager: Resource;\n constructor(\n private canvas: HTMLCanvasElement,\n options?: {\n ratio: number;\n }\n ) {\n // console.log(\"PosterPainter constructor\");\n\n this.ctx = this.canvas.getContext(\"2d\")!;\n\n this.width = this.canvas.width;\n this.height = this.canvas.height;\n\n this.ratio =\n
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/painter.ts"],"sourcesContent":["import { BackgroundPaint } from \"./backgroundPaint\";\nimport { DrawOptions } from \"./basePaint\";\nimport { DataPaint } from \"./dataPaint\";\nexport class PosterPainter {\n private ctx: CanvasRenderingContext2D;\n width: number = 0;\n height: number = 0;\n ratio: number;\n // resourceManager: Resource;\n constructor(\n private canvas: HTMLCanvasElement,\n options?: {\n ratio: number;\n }\n ) {\n // console.log(\"PosterPainter constructor\");\n\n this.ctx = this.canvas.getContext(\"2d\")!;\n\n this.width = this.canvas.width;\n this.height = this.canvas.height;\n\n // this.ratio =\n // options?.ratio ||\n // (typeof window !== \"undefined\"\n // ? Math.ceil(window.devicePixelRatio)\n // : 1) ||\n // 1;\n\n this.ratio = Math.max(\n options?.ratio || 1,\n typeof window !== \"undefined\" ? Math.ceil(window.devicePixelRatio) : 1\n );\n\n // render to high resolution\n this.canvas.width = this.width * this.ratio;\n this.canvas.height = this.height * this.ratio;\n this.canvas.style.width = this.width + \"px\";\n this.canvas.style.height = this.height + \"px\";\n\n //\n }\n\n draw(options: DrawOptions) {\n requestAnimationFrame(() => this._draw.bind(this)(options));\n }\n\n async _draw(options: DrawOptions) {\n if (this.ctx === null) return;\n // console.log(\"============ DRAW ============\");\n // this.ctx.font = options.fontFamily!;\n // this.ctx.clearRect(0, 0, this.width * this.ratio, this.height * this.ratio);\n // start draw\n // background\n await new BackgroundPaint(this.ctx, this).draw(options);\n // data paint\n await new DataPaint(this.ctx, this).draw(options);\n }\n}\n"],"names":["PosterPainter","ctx","width","height","ratio","constructor","canvas","options","getContext","Math","max","window","ceil","devicePixelRatio","style","draw","requestAnimationFrame","_draw","bind","BackgroundPaint","DataPaint"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAGaA;;;eAAAA;;;iCAHmB;2BAEN;AACnB,MAAMA;;IACHC,IAA8B;IACtCC,MAAkB;IAClBC,OAAmB;IACnBC,MAAc;IACd,6BAA6B;IAC7BC,YACE,AAAQC,MAAyB,EACjCC,OAEC,CACD;aAJQD,SAAAA;aALVJ,QAAgB;aAChBC,SAAiB;QASf,4CAA4C;QAE5C,IAAI,CAACF,GAAG,GAAG,IAAI,CAACK,MAAM,CAACE,UAAU,CAAC;QAElC,IAAI,CAACN,KAAK,GAAG,IAAI,CAACI,MAAM,CAACJ,KAAK;QAC9B,IAAI,CAACC,MAAM,GAAG,IAAI,CAACG,MAAM,CAACH,MAAM;QAEhC,eAAe;QACf,sBAAsB;QACtB,mCAAmC;QACnC,2CAA2C;QAC3C,cAAc;QACd,OAAO;QAEP,IAAI,CAACC,KAAK,GAAGK,KAAKC,GAAG,CACnBH,SAASH,SAAS,GAClB,OAAOO,WAAW,cAAcF,KAAKG,IAAI,CAACD,OAAOE,gBAAgB,IAAI;QAGvE,4BAA4B;QAC5B,IAAI,CAACP,MAAM,CAACJ,KAAK,GAAG,IAAI,CAACA,KAAK,GAAG,IAAI,CAACE,KAAK;QAC3C,IAAI,CAACE,MAAM,CAACH,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG,IAAI,CAACC,KAAK;QAC7C,IAAI,CAACE,MAAM,CAACQ,KAAK,CAACZ,KAAK,GAAG,IAAI,CAACA,KAAK,GAAG;QACvC,IAAI,CAACI,MAAM,CAACQ,KAAK,CAACX,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG;IAEzC,EAAE;IACJ;IAEAY,KAAKR,OAAoB,EAAE;QACzBS,sBAAsB,IAAM,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC,IAAI,EAAEX;IACpD;IAEA,MAAMU,MAAMV,OAAoB,EAAE;QAChC,IAAI,IAAI,CAACN,GAAG,KAAK,MAAM;QACvB,iDAAiD;QACjD,uCAAuC;QACvC,+EAA+E;QAC/E,aAAa;QACb,aAAa;QACb,MAAM,IAAIkB,gCAAe,CAAC,IAAI,CAAClB,GAAG,EAAE,IAAI,EAAEc,IAAI,CAACR;QAC/C,aAAa;QACb,MAAM,IAAIa,oBAAS,CAAC,IAAI,CAACnB,GAAG,EAAE,IAAI,EAAEc,IAAI,CAACR;IAC3C;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qrPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/qrPaint.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,QACb,wBAAwB,WACpB;IACP,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,SAgDF,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//@ts-ignore
|
|
2
|
+
// import QRious from "./qrious";
|
|
3
|
+
"use strict";
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(exports, "qrPaint", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function() {
|
|
10
|
+
return qrPaint;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
const _qr = require("@akamfoad/qr");
|
|
14
|
+
const qrPaint = (ctx, options)=>{
|
|
15
|
+
const { size, left, top, data, padding } = options;
|
|
16
|
+
const qr = (0, _qr.qrcode)(data);
|
|
17
|
+
const canvas = document.createElement("canvas");
|
|
18
|
+
canvas.width = size;
|
|
19
|
+
canvas.height = size;
|
|
20
|
+
const ctx2 = canvas.getContext("2d");
|
|
21
|
+
// const qr = new QRious({
|
|
22
|
+
// value: data,
|
|
23
|
+
// size: 200,
|
|
24
|
+
// padding: 5,
|
|
25
|
+
// level: "L",
|
|
26
|
+
// });
|
|
27
|
+
const cells = qr.modules;
|
|
28
|
+
if (!cells) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const tileW = size / cells.length;
|
|
32
|
+
const tileH = size / cells.length;
|
|
33
|
+
for(let r = 0; r < cells.length; ++r){
|
|
34
|
+
const row = cells[r];
|
|
35
|
+
for(let c = 0; c < row.length; ++c){
|
|
36
|
+
ctx2.fillStyle = row[c] ? "#000" : "#fff";
|
|
37
|
+
const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);
|
|
38
|
+
const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);
|
|
39
|
+
ctx2.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
ctx.save();
|
|
43
|
+
ctx.fillStyle = "#fff";
|
|
44
|
+
ctx.fillRect(left - padding, top - padding, size + padding * 2, size + padding * 2);
|
|
45
|
+
ctx.restore();
|
|
46
|
+
ctx.drawImage(canvas, left, top, size, size);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=qrPaint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/painter/qrPaint.ts"],"sourcesContent":["//@ts-ignore\n// import QRious from \"./qrious\";\nimport { qrcode } from \"@akamfoad/qr\";\n\nexport const qrPaint = (\n ctx: CanvasRenderingContext2D,\n options: {\n size: number;\n padding: number;\n left: number;\n top: number;\n data: string;\n }\n) => {\n const { size, left, top, data, padding } = options;\n\n const qr = qrcode(data);\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n const ctx2 = canvas.getContext(\"2d\");\n\n // const qr = new QRious({\n // value: data,\n // size: 200,\n // padding: 5,\n // level: \"L\",\n // });\n\n const cells = qr.modules;\n\n if (!cells) {\n return;\n }\n\n const tileW = size / cells.length;\n const tileH = size / cells.length;\n\n for (let r = 0; r < cells.length; ++r) {\n const row = cells[r];\n for (let c = 0; c < row.length; ++c) {\n ctx2!.fillStyle = row[c] ? \"#000\" : \"#fff\";\n const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);\n const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);\n ctx2!.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);\n }\n }\n\n ctx.save();\n ctx.fillStyle = \"#fff\";\n\n ctx.fillRect(\n left - padding,\n top - padding,\n size + padding * 2,\n size + padding * 2\n );\n ctx.restore();\n\n ctx.drawImage(canvas, left, top, size, size);\n};\n"],"names":["qrPaint","ctx","options","size","left","top","data","padding","qr","qrcode","canvas","document","createElement","width","height","ctx2","getContext","cells","modules","tileW","length","tileH","r","row","c","fillStyle","w","Math","ceil","floor","h","fillRect","round","save","restore","drawImage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAY;AACZ,iCAAiC;;;;;+BAGpBA;;;eAAAA;;;oBAFU;AAEhB,MAAMA,UAAU,CACrBC,KACAC;IAQA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGL;IAE3C,MAAMM,KAAKC,IAAAA,UAAM,EAACH;IAClB,MAAMI,SAASC,SAASC,aAAa,CAAC;IACtCF,OAAOG,KAAK,GAAGV;IACfO,OAAOI,MAAM,GAAGX;IAChB,MAAMY,OAAOL,OAAOM,UAAU,CAAC;IAE/B,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,MAAM;IAEN,MAAMC,QAAQT,GAAGU,OAAO;IAExB,IAAI,CAACD,OAAO;QACV;IACF;IAEA,MAAME,QAAQhB,OAAOc,MAAMG,MAAM;IACjC,MAAMC,QAAQlB,OAAOc,MAAMG,MAAM;IAEjC,IAAK,IAAIE,IAAI,GAAGA,IAAIL,MAAMG,MAAM,EAAE,EAAEE,EAAG;QACrC,MAAMC,MAAMN,KAAK,CAACK,EAAE;QACpB,IAAK,IAAIE,IAAI,GAAGA,IAAID,IAAIH,MAAM,EAAE,EAAEI,EAAG;YACnCT,KAAMU,SAAS,GAAGF,GAAG,CAACC,EAAE,GAAG,SAAS;YACpC,MAAME,IAAIC,KAAKC,IAAI,CAAC,AAACJ,CAAAA,IAAI,CAAA,IAAKL,SAASQ,KAAKE,KAAK,CAACL,IAAIL;YACtD,MAAMW,IAAIH,KAAKC,IAAI,CAAC,AAACN,CAAAA,IAAI,CAAA,IAAKD,SAASM,KAAKE,KAAK,CAACP,IAAID;YACtDN,KAAMgB,QAAQ,CAACJ,KAAKK,KAAK,CAACR,IAAIL,QAAQQ,KAAKK,KAAK,CAACV,IAAID,QAAQK,GAAGI;QAClE;IACF;IAEA7B,IAAIgC,IAAI;IACRhC,IAAIwB,SAAS,GAAG;IAEhBxB,IAAI8B,QAAQ,CACV3B,OAAOG,SACPF,MAAME,SACNJ,OAAOI,UAAU,GACjBJ,OAAOI,UAAU;IAEnBN,IAAIiC,OAAO;IAEXjC,IAAIkC,SAAS,CAACzB,QAAQN,MAAMC,KAAKF,MAAMA;AACzC"}
|
package/lib/useLocalStorage.js
CHANGED
|
@@ -76,9 +76,9 @@ function useLocalStorage(key, initialValue) {
|
|
|
76
76
|
}
|
|
77
77
|
setStoredValue(readValue());
|
|
78
78
|
};
|
|
79
|
-
window
|
|
79
|
+
window?.addEventListener?.("storage", handleStorageChange);
|
|
80
80
|
return ()=>{
|
|
81
|
-
window
|
|
81
|
+
window?.removeEventListener?.("storage", handleStorageChange);
|
|
82
82
|
};
|
|
83
83
|
}, [
|
|
84
84
|
key
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useLocalStorage.ts"],"sourcesContent":["// https://usehooks-ts.com/react-hook/use-local-storage\nimport { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [any, (value: T) => void] {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = useCallback((): T => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n\n try {\n const item = window.localStorage.getItem(key);\n return item ? (parseJSON(item) as T) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key “${key}”:`, error);\n return initialValue;\n }\n }, [initialValue, key]);\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: React.Dispatch<T> = useCallback(\n (value: T) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n console.warn(\n `Tried setting localStorage key “${key}” even though environment is not a client`\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(newValue));\n // dispath event\n window.dispatchEvent(new Event(\"storage\"));\n\n // Save state\n setStoredValue(() => newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n // window.dispatchEvent(new Event('local-storage'))\n } catch (error) {\n console.warn(`Error setting localStorage key “${key}”:`, error);\n }\n },\n [storedValue]\n );\n\n useEffect(() => {\n setStoredValue(readValue());\n }, []);\n\n // const handleStorageChange = useCallback(\n // (event: StorageEvent | CustomEvent) => {\n // if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n // return\n // }\n // setStoredValue(readValue())\n // },\n // [key, readValue],\n // )\n\n useEffect(() => {\n const handleStorageChange = (event: StorageEvent | CustomEvent) => {\n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return;\n }\n setStoredValue(readValue());\n };\n\n window
|
|
1
|
+
{"version":3,"sources":["../src/useLocalStorage.ts"],"sourcesContent":["// https://usehooks-ts.com/react-hook/use-local-storage\nimport { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [any, (value: T) => void] {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = useCallback((): T => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n return initialValue;\n }\n\n try {\n const item = window.localStorage.getItem(key);\n return item ? (parseJSON(item) as T) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key “${key}”:`, error);\n return initialValue;\n }\n }, [initialValue, key]);\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: React.Dispatch<T> = useCallback(\n (value: T) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === \"undefined\") {\n console.warn(\n `Tried setting localStorage key “${key}” even though environment is not a client`\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(newValue));\n // dispath event\n window.dispatchEvent(new Event(\"storage\"));\n\n // Save state\n setStoredValue(() => newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n // window.dispatchEvent(new Event('local-storage'))\n } catch (error) {\n console.warn(`Error setting localStorage key “${key}”:`, error);\n }\n },\n [storedValue]\n );\n\n useEffect(() => {\n setStoredValue(readValue());\n }, []);\n\n // const handleStorageChange = useCallback(\n // (event: StorageEvent | CustomEvent) => {\n // if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n // return\n // }\n // setStoredValue(readValue())\n // },\n // [key, readValue],\n // )\n\n useEffect(() => {\n const handleStorageChange = (event: StorageEvent | CustomEvent) => {\n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return;\n }\n setStoredValue(readValue());\n };\n\n window?.addEventListener?.(\"storage\", handleStorageChange);\n\n return () => {\n window?.removeEventListener?.(\"storage\", handleStorageChange);\n };\n }, [key]);\n\n return [storedValue, setValue];\n}\n"],"names":["useLocalStorage","key","initialValue","readValue","useCallback","window","item","localStorage","getItem","parseJSON","error","storedValue","setStoredValue","useState","setValue","value","newValue","Function","setItem","JSON","stringify","dispatchEvent","Event","useEffect","handleStorageChange","event","addEventListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,uDAAuD;;;;;+BAIvCA;;;eAAAA;;;uBAHiC;sBACvB;AAEnB,SAASA,gBACdC,GAAW,EACXC,YAAe;IAEf,8BAA8B;IAC9B,2CAA2C;IAC3C,MAAMC,YAAYC,IAAAA,kBAAW,EAAC;QAC5B,8DAA8D;QAC9D,IAAI,OAAOC,WAAW,aAAa;YACjC,OAAOH;QACT;QAEA,IAAI;YACF,MAAMI,OAAOD,OAAOE,YAAY,CAACC,OAAO,CAACP;YACzC,OAAOK,OAAQG,IAAAA,eAAS,EAACH,QAAcJ;QACzC,EAAE,OAAOQ,OAAO;;YAEd,OAAOR;QACT;IACF,GAAG;QAACA;QAAcD;KAAI;IAEtB,2BAA2B;IAC3B,yEAAyE;IACzE,MAAM,CAACU,aAAaC,eAAe,GAAGC,IAAAA,eAAQ,EAAIV;IAElD,kEAAkE;IAClE,8CAA8C;IAC9C,MAAMW,WAA8BV,IAAAA,kBAAW,EAC7C,CAACW;QACC,8DAA8D;QAC9D,IAAI,OAAOV,WAAW,aAAa;;QAInC;QAEA,IAAI;YACF,mEAAmE;YACnE,MAAMW,WAAWD,iBAAiBE,WAAWF,MAAMJ,eAAeI;YAElE,wBAAwB;YACxBV,OAAOE,YAAY,CAACW,OAAO,CAACjB,KAAKkB,KAAKC,SAAS,CAACJ;YAChD,gBAAgB;YAChBX,OAAOgB,aAAa,CAAC,IAAIC,MAAM;YAE/B,aAAa;YACbV,eAAe,IAAMI;QAErB,wEAAwE;QACxE,mDAAmD;QACrD,EAAE,OAAON,OAAO;;QAEhB;IACF,GACA;QAACC;KAAY;IAGfY,IAAAA,gBAAS,EAAC;QACRX,eAAeT;IACjB,GAAG,EAAE;IAEL,2CAA2C;IAC3C,6CAA6C;IAC7C,iFAAiF;IACjF,eAAe;IACf,QAAQ;IACR,kCAAkC;IAClC,OAAO;IACP,sBAAsB;IACtB,IAAI;IAEJoB,IAAAA,gBAAS,EAAC;QACR,MAAMC,sBAAsB,CAACC;YAC3B,IAAI,AAACA,OAAwBxB,OAAO,AAACwB,MAAuBxB,GAAG,KAAKA,KAAK;gBACvE;YACF;YACAW,eAAeT;QACjB;QAEAE,QAAQqB,mBAAmB,WAAWF;QAEtC,OAAO;YACLnB,QAAQsB,sBAAsB,WAAWH;QAC3C;IACF,GAAG;QAACvB;KAAI;IAER,OAAO;QAACU;QAAaG;KAAS;AAChC"}
|
package/lib/useMediaQuery.js
CHANGED
|
@@ -22,20 +22,20 @@ function useMediaQuery(query) {
|
|
|
22
22
|
setMatches(getMatches(query));
|
|
23
23
|
}
|
|
24
24
|
(0, _react.useEffect)(()=>{
|
|
25
|
-
const matchMedia = window
|
|
25
|
+
const matchMedia = window?.matchMedia(query);
|
|
26
26
|
// Triggered at the first client-side load and if query changes
|
|
27
27
|
handleChange();
|
|
28
28
|
// Listen matchMedia
|
|
29
|
-
if (matchMedia
|
|
30
|
-
matchMedia
|
|
29
|
+
if (matchMedia?.addListener) {
|
|
30
|
+
matchMedia?.addListener(handleChange);
|
|
31
31
|
} else {
|
|
32
|
-
matchMedia
|
|
32
|
+
matchMedia?.addEventListener?.("change", handleChange);
|
|
33
33
|
}
|
|
34
34
|
return ()=>{
|
|
35
|
-
if (matchMedia
|
|
36
|
-
matchMedia
|
|
35
|
+
if (matchMedia?.removeListener) {
|
|
36
|
+
matchMedia?.removeListener(handleChange);
|
|
37
37
|
} else {
|
|
38
|
-
matchMedia
|
|
38
|
+
matchMedia?.removeEventListener?.("change", handleChange);
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
package/lib/useMediaQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useMediaQuery.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== \"undefined\") {\n return window.matchMedia(query).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useEffect(() => {\n const matchMedia = window
|
|
1
|
+
{"version":3,"sources":["../src/useMediaQuery.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== \"undefined\") {\n return window.matchMedia(query).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useEffect(() => {\n const matchMedia = window?.matchMedia(query);\n\n // Triggered at the first client-side load and if query changes\n handleChange();\n\n // Listen matchMedia\n if (matchMedia?.addListener) {\n matchMedia?.addListener(handleChange);\n } else {\n matchMedia?.addEventListener?.(\"change\", handleChange);\n }\n\n return () => {\n if (matchMedia?.removeListener) {\n matchMedia?.removeListener(handleChange);\n } else {\n matchMedia?.removeEventListener?.(\"change\", handleChange);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n return matches;\n}\n"],"names":["useMediaQuery","query","getMatches","window","matchMedia","matches","setMatches","useState","handleChange","useEffect","addListener","addEventListener","removeListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAEgBA;;;eAAAA;;;uBAFoB;AAE7B,SAASA,cAAcC,KAAa;IACzC,MAAMC,aAAa,CAACD;QAClB,sBAAsB;QACtB,IAAI,OAAOE,WAAW,aAAa;YACjC,OAAOA,OAAOC,UAAU,CAACH,OAAOI,OAAO;QACzC;QACA,OAAO;IACT;IAEA,MAAM,CAACA,SAASC,WAAW,GAAGC,IAAAA,eAAQ,EAAUL,WAAWD;IAE3D,SAASO;QACPF,WAAWJ,WAAWD;IACxB;IAEAQ,IAAAA,gBAAS,EAAC;QACR,MAAML,aAAaD,QAAQC,WAAWH;QAEtC,+DAA+D;QAC/DO;QAEA,oBAAoB;QACpB,IAAIJ,YAAYM,aAAa;YAC3BN,YAAYM,YAAYF;QAC1B,OAAO;YACLJ,YAAYO,mBAAmB,UAAUH;QAC3C;QAEA,OAAO;YACL,IAAIJ,YAAYQ,gBAAgB;gBAC9BR,YAAYQ,eAAeJ;YAC7B,OAAO;gBACLJ,YAAYS,sBAAsB,UAAUL;YAC9C;QACF;IACA,uDAAuD;IACzD,GAAG;QAACP;KAAM;IAEV,OAAOI;AACT"}
|
package/lib/usePoster.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePoster.d.ts","sourceRoot":"","sources":["../src/usePoster.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,SAId,WAAW,YACP;IACR;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;
|
|
1
|
+
{"version":3,"file":"usePoster.d.ts","sourceRoot":"","sources":["../src/usePoster.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,SAId,WAAW,YACP;IACR;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;IAiHC;;OAEG;wBAnDa,iBAAiB,GAAG,IAAI;IAqDxC;;OAEG;gCA9EqB,MAAM,mBAAmB,MAAM;IAgFvD;;OAEG;6BAvEK,MAAM,mBAAmB,MAAM,KAAG,QAAQ,IAAI,GAAG,IAAI,CAAC;IAyE9D;;OAEG;kCApDQ,MAAM,SAAQ,MAAM,mBAAiC,MAAM;IAsDtE;;OAEG;;;CAIN,CAAC"}
|
package/lib/usePoster.js
CHANGED
|
@@ -22,29 +22,32 @@ const usePoster = (/**
|
|
|
22
22
|
const [target, setTarget] = (0, _react.useState)(null);
|
|
23
23
|
(0, _react.useEffect)(()=>{
|
|
24
24
|
// Create the painter instance
|
|
25
|
-
if (target
|
|
26
|
-
painterRef.current
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
fontFamily: "Manrope"
|
|
33
|
-
}, data));
|
|
34
|
-
}
|
|
35
|
-
}, [
|
|
36
|
-
target
|
|
37
|
-
]);
|
|
38
|
-
(0, _react.useEffect)(()=>{
|
|
39
|
-
if (painterRef.current) {
|
|
25
|
+
if (target) {
|
|
26
|
+
if (!painterRef.current) {
|
|
27
|
+
painterRef.current = new _painter.PosterPainter(target, {
|
|
28
|
+
ratio: options?.ratio || 1,
|
|
29
|
+
...options
|
|
30
|
+
});
|
|
31
|
+
}
|
|
40
32
|
painterRef.current.draw((0, _ramda.mergeDeepRight)({
|
|
41
33
|
layout: _layoutconfig.DefaultLayoutConfig,
|
|
42
34
|
fontFamily: "Manrope"
|
|
43
35
|
}, data));
|
|
44
36
|
}
|
|
45
37
|
}, [
|
|
38
|
+
target,
|
|
46
39
|
data
|
|
47
40
|
]);
|
|
41
|
+
// useEffect(() => {
|
|
42
|
+
// if (painterRef.current) {
|
|
43
|
+
// painterRef.current.draw(
|
|
44
|
+
// mergeDeepRight<Partial<DrawOptions>, DrawOptions>(
|
|
45
|
+
// { layout: DefaultLayoutConfig, fontFamily: "Manrope" },
|
|
46
|
+
// data
|
|
47
|
+
// )
|
|
48
|
+
// );
|
|
49
|
+
// }
|
|
50
|
+
// }, [data]);
|
|
48
51
|
const toDataURL = (type, encoderOptions)=>{
|
|
49
52
|
if (!target) {
|
|
50
53
|
throw new _types.SDKError("The ref must be a canvas element");
|
package/lib/usePoster.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/usePoster.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { mergeDeepRight } from \"ramda\";\nimport { PosterPainter } from \"./services/painter/painter\";\nimport { type DrawOptions } from \"./services/painter/basePaint\";\nimport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nimport { SDKError } from \"@orderly.network/types\";\n\n/**\n * Generates a poster image based on position information. You can set the size, background color, font color, font size, and content position of the poster.\n * @example\n * ```tsx\n * const { ref, toDataURL, toBlob, download, copy } = usePoster({\n * backgroundColor: \"#0b8c70\",\n * backgroundImg: \"/images/poster_bg.png\",\n * color: \"rgba(255, 255, 255, 0.98)\",\n * profitColor: \"rgb(0,181,159)\",\n * ...\n * });\n */\nexport const usePoster = (\n /**\n * The options to draw the poster\n */\n data: DrawOptions,\n options?: {\n /**\n * The ratio of the poster\n */\n ratio?: number;\n }\n) => {\n const [error, setError] = useState<Error | null>(null);\n const [canCopy, setCanCopy] = useState<boolean>(\n () => typeof navigator.clipboard !== \"undefined\"\n );\n\n const painterRef = useRef<PosterPainter | null>(null);\n\n const [target, setTarget] = useState<HTMLCanvasElement | null>(null);\n\n useEffect(() => {\n // Create the painter instance\n if (target
|
|
1
|
+
{"version":3,"sources":["../src/usePoster.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { mergeDeepRight } from \"ramda\";\nimport { PosterPainter } from \"./services/painter/painter\";\nimport { type DrawOptions } from \"./services/painter/basePaint\";\nimport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nimport { SDKError } from \"@orderly.network/types\";\n\n/**\n * Generates a poster image based on position information. You can set the size, background color, font color, font size, and content position of the poster.\n * @example\n * ```tsx\n * const { ref, toDataURL, toBlob, download, copy } = usePoster({\n * backgroundColor: \"#0b8c70\",\n * backgroundImg: \"/images/poster_bg.png\",\n * color: \"rgba(255, 255, 255, 0.98)\",\n * profitColor: \"rgb(0,181,159)\",\n * ...\n * });\n */\nexport const usePoster = (\n /**\n * The options to draw the poster\n */\n data: DrawOptions,\n options?: {\n /**\n * The ratio of the poster\n */\n ratio?: number;\n }\n) => {\n const [error, setError] = useState<Error | null>(null);\n const [canCopy, setCanCopy] = useState<boolean>(\n () => typeof navigator.clipboard !== \"undefined\"\n );\n\n const painterRef = useRef<PosterPainter | null>(null);\n\n const [target, setTarget] = useState<HTMLCanvasElement | null>(null);\n\n useEffect(() => {\n // Create the painter instance\n if (target) {\n if (!painterRef.current) {\n painterRef.current = new PosterPainter(target, {\n ratio: options?.ratio || 1,\n ...options,\n });\n }\n\n painterRef.current.draw(\n mergeDeepRight<Partial<DrawOptions>, DrawOptions>(\n { layout: DefaultLayoutConfig, fontFamily: \"Manrope\" },\n data\n )\n );\n }\n }, [target, data]);\n\n // useEffect(() => {\n // if (painterRef.current) {\n // painterRef.current.draw(\n // mergeDeepRight<Partial<DrawOptions>, DrawOptions>(\n // { layout: DefaultLayoutConfig, fontFamily: \"Manrope\" },\n // data\n // )\n // );\n // }\n // }, [data]);\n\n const toDataURL = (type?: string, encoderOptions?: number) => {\n if (!target) {\n throw new SDKError(\"The ref must be a canvas element\");\n }\n return target.toDataURL(type, encoderOptions);\n };\n\n /**\n * Converts the poster to a blob\n */\n const toBlob = useCallback(\n (type?: string, encoderOptions?: number): Promise<Blob | null> => {\n return new Promise<Blob | null>((resolve) => {\n if (!target) {\n resolve(null);\n return;\n }\n target.toBlob(resolve, type, encoderOptions);\n });\n },\n [target]\n );\n\n const ref = (ref: HTMLCanvasElement | null) => {\n if (!ref) return;\n if (ref.tagName.toUpperCase() !== \"CANVAS\") {\n // throw new Error(\"The ref must be a canvas element\");\n setError(new SDKError(\"The ref must be a canvas element\"));\n return;\n }\n setTarget(ref);\n };\n\n const download = useCallback(\n (filename: string, type: string = \"image/png\", encoderOptions?: number) => {\n if (!target) {\n throw new SDKError(\"The ref must be a canvas element\");\n }\n const img = new Image();\n img.src = target.toDataURL(type, encoderOptions);\n const link = document.createElement(\"a\");\n link.href = img.src;\n link.download = filename;\n link.click();\n },\n [target]\n );\n\n const copy = useCallback(() => {\n if (!target) {\n throw new SDKError(\"The ref must be a canvas element\");\n }\n // copy image to clipboard\n return new Promise<void>((resolve, reject) => {\n if (!navigator.clipboard) {\n reject(new SDKError(\"Clipboard API is not supported\"));\n return;\n }\n target.toBlob((blob) => {\n if (!blob) {\n reject(new SDKError(\"Failed to create blob\"));\n return;\n }\n return navigator.clipboard\n .write([new ClipboardItem({ [blob.type]: blob })])\n .then(resolve, reject);\n });\n });\n }, [target]);\n\n return {\n error,\n /**\n * The ref to the canvas element, you should pass this ref to the canvas element\n */\n ref,\n /**\n * Converts the poster to a data URL\n */\n toDataURL,\n /**\n * Converts the poster to a blob\n */\n toBlob,\n /**\n * Downloads the poster as an image\n */\n download,\n /**\n * Browser if supports copy image to clipboard\n */\n canCopy,\n copy,\n } as const;\n};\n"],"names":["usePoster","data","options","error","setError","useState","canCopy","setCanCopy","navigator","clipboard","painterRef","useRef","target","setTarget","useEffect","current","PosterPainter","ratio","draw","mergeDeepRight","layout","DefaultLayoutConfig","fontFamily","toDataURL","type","encoderOptions","SDKError","toBlob","useCallback","Promise","resolve","ref","tagName","toUpperCase","download","filename","img","Image","src","link","document","createElement","href","click","copy","reject","blob","write","ClipboardItem","then"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAmBaA;;;eAAAA;;;uBAnB4C;uBAC1B;yBACD;8BAEM;uBACX;AAclB,MAAMA,YAAY,CACvB;;GAEC,GACDC,MACAC;IAOA,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAAe;IACjD,MAAM,CAACC,SAASC,WAAW,GAAGF,IAAAA,eAAQ,EACpC,IAAM,OAAOG,UAAUC,SAAS,KAAK;IAGvC,MAAMC,aAAaC,IAAAA,aAAM,EAAuB;IAEhD,MAAM,CAACC,QAAQC,UAAU,GAAGR,IAAAA,eAAQ,EAA2B;IAE/DS,IAAAA,gBAAS,EAAC;QACR,8BAA8B;QAC9B,IAAIF,QAAQ;YACV,IAAI,CAACF,WAAWK,OAAO,EAAE;gBACvBL,WAAWK,OAAO,GAAG,IAAIC,sBAAa,CAACJ,QAAQ;oBAC7CK,OAAOf,SAASe,SAAS;oBACzB,GAAGf,OAAO;gBACZ;YACF;YAEAQ,WAAWK,OAAO,CAACG,IAAI,CACrBC,IAAAA,qBAAc,EACZ;gBAAEC,QAAQC,iCAAmB;gBAAEC,YAAY;YAAU,GACrDrB;QAGN;IACF,GAAG;QAACW;QAAQX;KAAK;IAEjB,oBAAoB;IACpB,8BAA8B;IAC9B,+BAA+B;IAC/B,2DAA2D;IAC3D,kEAAkE;IAClE,eAAe;IACf,UAAU;IACV,SAAS;IACT,MAAM;IACN,cAAc;IAEd,MAAMsB,YAAY,CAACC,MAAeC;QAChC,IAAI,CAACb,QAAQ;YACX,MAAM,IAAIc,eAAQ,CAAC;QACrB;QACA,OAAOd,OAAOW,SAAS,CAACC,MAAMC;IAChC;IAEA;;GAEC,GACD,MAAME,SAASC,IAAAA,kBAAW,EACxB,CAACJ,MAAeC;QACd,OAAO,IAAII,QAAqB,CAACC;YAC/B,IAAI,CAAClB,QAAQ;gBACXkB,QAAQ;gBACR;YACF;YACAlB,OAAOe,MAAM,CAACG,SAASN,MAAMC;QAC/B;IACF,GACA;QAACb;KAAO;IAGV,MAAMmB,MAAM,CAACA;QACX,IAAI,CAACA,KAAK;QACV,IAAIA,IAAIC,OAAO,CAACC,WAAW,OAAO,UAAU;YAC1C,uDAAuD;YACvD7B,SAAS,IAAIsB,eAAQ,CAAC;YACtB;QACF;QACAb,UAAUkB;IACZ;IAEA,MAAMG,WAAWN,IAAAA,kBAAW,EAC1B,CAACO,UAAkBX,OAAe,WAAW,EAAEC;QAC7C,IAAI,CAACb,QAAQ;YACX,MAAM,IAAIc,eAAQ,CAAC;QACrB;QACA,MAAMU,MAAM,IAAIC;QAChBD,IAAIE,GAAG,GAAG1B,OAAOW,SAAS,CAACC,MAAMC;QACjC,MAAMc,OAAOC,SAASC,aAAa,CAAC;QACpCF,KAAKG,IAAI,GAAGN,IAAIE,GAAG;QACnBC,KAAKL,QAAQ,GAAGC;QAChBI,KAAKI,KAAK;IACZ,GACA;QAAC/B;KAAO;IAGV,MAAMgC,OAAOhB,IAAAA,kBAAW,EAAC;QACvB,IAAI,CAAChB,QAAQ;YACX,MAAM,IAAIc,eAAQ,CAAC;QACrB;QACA,0BAA0B;QAC1B,OAAO,IAAIG,QAAc,CAACC,SAASe;YACjC,IAAI,CAACrC,UAAUC,SAAS,EAAE;gBACxBoC,OAAO,IAAInB,eAAQ,CAAC;gBACpB;YACF;YACAd,OAAOe,MAAM,CAAC,CAACmB;gBACb,IAAI,CAACA,MAAM;oBACTD,OAAO,IAAInB,eAAQ,CAAC;oBACpB;gBACF;gBACA,OAAOlB,UAAUC,SAAS,CACvBsC,KAAK,CAAC;oBAAC,IAAIC,cAAc;wBAAE,CAACF,KAAKtB,IAAI,CAAC,EAAEsB;oBAAK;iBAAG,EAChDG,IAAI,CAACnB,SAASe;YACnB;QACF;IACF,GAAG;QAACjC;KAAO;IAEX,OAAO;QACLT;QACA;;KAEC,GACD4B;QACA;;KAEC,GACDR;QACA;;KAEC,GACDI;QACA;;KAEC,GACDO;QACA;;KAEC,GACD5B;QACAsC;IACF;AACF"}
|