@libs-ui/utils 0.2.29 → 0.2.30-6.2

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 (59) hide show
  1. package/base64.d.ts +5 -0
  2. package/cache.d.ts +16 -15
  3. package/color.d.ts +1 -1
  4. package/communicate-micro.d.ts +4 -5
  5. package/constants.d.ts +3 -0
  6. package/crypto-3rd.d.ts +4 -0
  7. package/crypto.d.ts +4 -0
  8. package/date.d.ts +49 -0
  9. package/dom.d.ts +36 -1
  10. package/download.d.ts +3 -0
  11. package/esm2022/base64.mjs +43 -0
  12. package/esm2022/cache.mjs +121 -132
  13. package/esm2022/color.mjs +2 -2
  14. package/esm2022/communicate-micro.mjs +26 -24
  15. package/esm2022/constants.mjs +4 -1
  16. package/esm2022/crypto-3rd.mjs +5 -1
  17. package/esm2022/crypto.mjs +5 -1
  18. package/esm2022/date.mjs +189 -0
  19. package/esm2022/dom.mjs +200 -22
  20. package/esm2022/download.mjs +37 -0
  21. package/esm2022/file.mjs +79 -0
  22. package/esm2022/format-text.mjs +150 -0
  23. package/esm2022/get-smart-axis-scale.mjs +174 -0
  24. package/esm2022/helpers.mjs +402 -91
  25. package/esm2022/http-params.mjs +15 -3
  26. package/esm2022/index.mjs +12 -5
  27. package/esm2022/inject-token.mjs +5 -0
  28. package/esm2022/key-cache.mjs +20 -8
  29. package/esm2022/language.mjs +67 -4
  30. package/esm2022/pattern.mjs +21 -21
  31. package/esm2022/random.mjs +42 -0
  32. package/esm2022/two-way-signal-object.mjs +113 -0
  33. package/esm2022/uri.mjs +22 -0
  34. package/esm2022/uuid.mjs +3 -2
  35. package/esm2022/xss-filter.mjs +10 -0
  36. package/fesm2022/libs-ui-utils.mjs +2454 -1096
  37. package/fesm2022/libs-ui-utils.mjs.map +1 -1
  38. package/file.d.ts +18 -0
  39. package/format-text.d.ts +11 -0
  40. package/get-smart-axis-scale.d.ts +34 -0
  41. package/helpers.d.ts +218 -10
  42. package/http-params.d.ts +2 -2
  43. package/index.d.ts +11 -4
  44. package/inject-token.d.ts +4 -0
  45. package/language.d.ts +32 -0
  46. package/package.json +7 -4
  47. package/pattern.d.ts +20 -20
  48. package/random.d.ts +3 -0
  49. package/two-way-signal-object.d.ts +14 -0
  50. package/uri.d.ts +5 -0
  51. package/xss-filter.d.ts +3 -0
  52. package/delete-unicode.d.ts +0 -1
  53. package/escape-html.d.ts +0 -1
  54. package/esm2022/delete-unicode.mjs +0 -20
  55. package/esm2022/escape-html.mjs +0 -12
  56. package/esm2022/get-color-by-id.mjs +0 -17
  57. package/esm2022/remove-emoji.mjs +0 -10
  58. package/get-color-by-id.d.ts +0 -1
  59. package/remove-emoji.d.ts +0 -2
package/esm2022/dom.mjs CHANGED
@@ -1,22 +1,27 @@
1
+ import DeviceDetector from 'device-detector-js';
2
+ import Quill from "quill";
3
+ import { finalize, fromEvent, lastValueFrom, mergeMap, startWith, takeUntil, tap, timer } from "rxjs";
4
+ import { decodeEscapeHtml } from "./format-text";
5
+ const deviceDetector = new DeviceDetector();
6
+ const parser = new DOMParser();
7
+ const quill = new Quill(document.createElement('div'));
8
+ export const getDeviceInfo = () => {
9
+ return deviceDetector.parse(window.navigator.userAgent);
10
+ };
1
11
  export const getPlatFromBrowser = () => {
2
- const userAgent = navigator.userAgent;
3
- let tem;
4
- let match = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
5
- if (/trident/i.test(match[1])) {
6
- tem = /\brv[ :]+(\d+)/g.exec(userAgent) || [];
7
- return 'IE ' + (tem[1] || '');
8
- }
9
- if (match[1] === 'Chrome') {
10
- tem = userAgent.match(/\b(OPR|Edge)\/(\d+)/);
11
- if (tem !== null) {
12
- return tem.slice(1).join(' ').replace('OPR', 'Opera');
13
- }
14
- }
15
- match = match[2] ? [match[1], match[2]] : [navigator.appName, navigator.appVersion, '-?'];
16
- if ((tem = userAgent.match(/version\/(\d+)/i)) !== null) {
17
- match.splice(1, 1, tem[1]);
12
+ const info = getDeviceInfo();
13
+ return `${info.client?.name} ${info.client?.version}`;
14
+ };
15
+ export const getEventNameHandleClick = (() => {
16
+ const deviceInfo = getDeviceInfo();
17
+ let nameEventHandleClick = deviceInfo.device?.type === 'desktop' ? 'click' : 'touchstart';
18
+ if ('onpointerdown' in window) {
19
+ nameEventHandleClick = 'pointerdown';
18
20
  }
19
- return match.join(' ');
21
+ return nameEventHandleClick;
22
+ })();
23
+ export const getDocumentByString = (htmlStr) => {
24
+ return parser.parseFromString(htmlStr, 'text/html');
20
25
  };
21
26
  export const cloneIBoundingClientRect = (rect) => {
22
27
  return {
@@ -24,10 +29,10 @@ export const cloneIBoundingClientRect = (rect) => {
24
29
  left: rect['left'],
25
30
  width: rect['width'],
26
31
  height: rect['height'],
27
- bottom: rect['bottom']
32
+ bottom: rect['bottom'],
28
33
  };
29
34
  };
30
- export const setStyles = (el, styles, render2) => {
35
+ export const setStylesElement = (el, styles, render2) => {
31
36
  Object.keys(styles).forEach((key) => render2.setStyle(el, key, styles[key]));
32
37
  };
33
38
  export const getViewport = (win = window) => {
@@ -63,7 +68,10 @@ export const checkViewInScreen = (container, element, elementScroll, maxTopLeft)
63
68
  const limitLeft = leftContainer + scrollLeftContainer + widthContainer;
64
69
  const maxTopItem = top + (maxTopLeft?.top || 0);
65
70
  const maxLeftItem = left + (maxTopLeft?.left || 0);
66
- if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {
71
+ if (topContainer <= maxTopItem &&
72
+ maxTopItem <= limitTop &&
73
+ leftContainer <= maxLeftItem &&
74
+ maxLeftItem <= limitLeft) {
67
75
  return true;
68
76
  }
69
77
  return false;
@@ -77,9 +85,179 @@ export const checkMouseOverInContainer = (mousePosition, element, rect) => {
77
85
  const limitLeft = left + width;
78
86
  const limitTop = top + height;
79
87
  const { clientX, clientY } = mousePosition;
80
- if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {
88
+ if (left <= clientX &&
89
+ clientX <= limitLeft &&
90
+ top <= clientY &&
91
+ clientY <= limitTop) {
81
92
  return true;
82
93
  }
83
94
  return false;
84
95
  };
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUUsRUFBRTtJQUNwQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ3RDLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVsRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QixHQUFHLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5QyxPQUFPLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUVILENBQUM7SUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FB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LElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBYSxDQUFDO0lBQzlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0lBQzlCLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBRTNDLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhdEZyb21Ccm93c2VyID0gKCk9PiB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGxldCB0ZW07XG4gIGxldCBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuXG4gIGlmICgvdHJpZGVudC9pLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVzZXJBZ2VudCkgfHwgW107XG5cbiAgICByZXR1cm4gJ0lFICcgKyAodGVtWzFdIHx8ICcnKTtcbiAgfVxuICBpZiAobWF0Y2hbMV0gPT09ICdDaHJvbWUnKSB7XG4gICAgdGVtID0gdXNlckFnZW50Lm1hdGNoKC9cXGIoT1BSfEVkZ2UpXFwvKFxcZCspLyk7XG4gICAgaWYgKHRlbSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlbS5zbGljZSgxKS5qb2luKCcgJykucmVwbGFjZSgnT1BSJywgJ09wZXJhJyk7XG4gICAgfVxuXG4gIH1cbiAgbWF0Y2ggPSBtYXRjaFsyXSA/IFttYXRjaFsxXSwgbWF0Y2hbMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gIGlmICgodGVtID0gdXNlckFnZW50Lm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPT0gbnVsbCkge1xuICAgIG1hdGNoLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoLmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsb25lSUJvdW5kaW5nQ2xpZW50UmVjdCA9IChyZWN0OiBJQm91bmRpbmdDbGllbnRSZWN0KTogSUJvdW5kaW5nQ2xpZW50UmVjdCA9PiB7XG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0Wyd0b3AnXSxcbiAgICBsZWZ0OiByZWN0WydsZWZ0J10sXG4gICAgd2lkdGg6IHJlY3RbJ3dpZHRoJ10sXG4gICAgaGVpZ2h0OiByZWN0WydoZWlnaHQnXSxcbiAgICBib3R0b206IHJlY3RbJ2JvdHRvbSddXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzZXRTdHlsZXMgPSAoZWw6IEhUTUxFbGVtZW50LCBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJlbmRlcjI6IFJlbmRlcmVyMik6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiByZW5kZXIyLnNldFN0eWxlKGVsLCBrZXksIHN0eWxlc1trZXldKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydCA9ICh3aW46IFdpbmRvdyA9IHdpbmRvdyk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IGRvYyA9IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgYm9keSA9IHdpbi5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLFxuICAgIHcgPSB3aW4uaW5uZXJXaWR0aCB8fCBkb2MuY2xpZW50V2lkdGggfHwgYm9keS5jbGllbnRXaWR0aCxcbiAgICBoID0gd2luLmlubmVySGVpZ2h0IHx8IGRvYy5jbGllbnRIZWlnaHQgfHwgYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgcmV0dXJuIHsgd2lkdGg6IHcsIGhlaWdodDogaCB9O1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9IChlbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudCwgcG9zaXRpb246IG51bWJlcik6IHZvaWQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5mb2N1cygpO1xuICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG59XG5cbmV4cG9ydCBjb25zdCBjaGVja1ZpZXdJblNjcmVlbiA9IChjb250YWluZXI6IEhUTUxFbGVtZW50LCBlbGVtZW50OiBIVE1MRWxlbWVudCwgZWxlbWVudFNjcm9sbD86IEhUTUxFbGVtZW50LCBtYXhUb3BMZWZ0PzogeyB0b3A/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIgfSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNvbnRhaW5lciB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlY3RDb250YWluZXIgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QoY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICBpZiAoZWxlbWVudFNjcm9sbCkge1xuICAgIGNvbnN0IHJlY3RFbGVtZW50U2Nyb2xsID0gZWxlbWVudFNjcm9sbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJlY3RDb250YWluZXJbJ2xlZnQnXSA9IHJlY3RFbGVtZW50U2Nyb2xsLmxlZnQ7XG4gICAgcmVjdENvbnRhaW5lclsndG9wJ10gPSByZWN0RWxlbWVudFNjcm9sbC50b3A7XG5cbiAgfVxuXG4gIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHJlY3RFbGVtZW50O1xuICBjb25zdCB0b3BDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd0b3AnXTtcbiAgY29uc3QgbGVmdENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ2xlZnQnXTtcbiAgY29uc3Qgd2lkdGhDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd3aWR0aCddO1xuICBjb25zdCBoZWlnaHRDb250YWluZXIgPSByZWN0Q29udGFpbmVyWydoZWlnaHQnXTtcbiAgY29uc3Qgc2Nyb2xsVG9wQ29udGFpbmVyID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3Qgc2Nyb2xsTGVmdENvbnRhaW5lciA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICBjb25zdCBsaW1pdFRvcCA9IHRvcENvbnRhaW5lciArIHNjcm9sbFRvcENvbnRhaW5lciArIGhlaWdodENvbnRhaW5lcjtcbiAgY29uc3QgbGltaXRMZWZ0ID0gbGVmdENvbnRhaW5lciArIHNjcm9sbExlZnRDb250YWluZXIgKyB3aWR0aENvbnRhaW5lcjtcblxuICBjb25zdCBtYXhUb3BJdGVtID0gdG9wICsgKG1heFRvcExlZnQ/LnRvcCB8fCAwKTtcbiAgY29uc3QgbWF4TGVmdEl0ZW0gPSBsZWZ0ICsgKG1heFRvcExlZnQ/LmxlZnQgfHwgMCk7XG5cbiAgaWYgKHRvcENvbnRhaW5lciA8PSBtYXhUb3BJdGVtICYmIG1heFRvcEl0ZW0gPD0gbGltaXRUb3AgJiYgbGVmdENvbnRhaW5lciA8PSBtYXhMZWZ0SXRlbSAmJiBtYXhMZWZ0SXRlbSA8PSBsaW1pdExlZnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyID0gKG1vdXNlUG9zaXRpb246IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSwgZWxlbWVudD86IEhUTUxFbGVtZW50LCByZWN0PzogRE9NUmVjdCk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWVsZW1lbnQgJiYgIXJlY3QpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcmVjdEVsZW1lbnQgPSByZWN0IHx8IGVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IHt9IGFzIERPTVJlY3Q7XG4gIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0RWxlbWVudDtcbiAgY29uc3QgbGltaXRMZWZ0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBsaW1pdFRvcCA9IHRvcCArIGhlaWdodDtcbiAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBtb3VzZVBvc2l0aW9uO1xuXG4gIGlmIChsZWZ0IDw9IGNsaWVudFggJiYgY2xpZW50WCA8PSBsaW1pdExlZnQgJiYgdG9wIDw9IGNsaWVudFkgJiYgY2xpZW50WSA8PSBsaW1pdFRvcCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTsiXX0=
96
+ export const getDragEventByElement = (config) => {
97
+ let timer;
98
+ const addClass = () => {
99
+ timer = setTimeout(() => {
100
+ document.body.classList.add('!select-none');
101
+ document.body.classList.add('!cursor-grabbing');
102
+ }, 250);
103
+ };
104
+ const removeClass = () => {
105
+ document.body.classList.remove('!select-none');
106
+ document.body.classList.remove('!cursor-grabbing');
107
+ clearTimeout(timer);
108
+ };
109
+ fromEvent(config.elementMouseDown, 'mouseleave')
110
+ .pipe(tap(() => document.body.classList.remove('cursor-pointer')), takeUntil(config.onDestroy))
111
+ .subscribe();
112
+ fromEvent(config.elementMouseDown, 'mouseenter')
113
+ .pipe(tap(() => document.body.classList.add('cursor-pointer')), takeUntil(config.onDestroy))
114
+ .subscribe();
115
+ const mouseDown = fromEvent(config.elementMouseDown, 'mousedown').pipe(tap((e) => {
116
+ e.stopPropagation();
117
+ addClass();
118
+ config.functionMouseDown?.(e);
119
+ }));
120
+ const mouseup = fromEvent(config.elementMouseUp || document, 'mouseup').pipe(tap((e) => {
121
+ e.stopPropagation();
122
+ removeClass();
123
+ config.functionMouseUp?.(e);
124
+ }));
125
+ const mousemove = fromEvent(config.elementMouseMove || document, 'mousemove').pipe(tap((e) => {
126
+ e.stopPropagation();
127
+ config.functionMouseMove?.(e);
128
+ }), takeUntil(mouseup));
129
+ return mouseDown.pipe(mergeMap((e) => config.isStartWithMouseDownEvent
130
+ ? mousemove.pipe(startWith(e))
131
+ : mousemove), takeUntil(config.onDestroy), finalize(removeClass));
132
+ };
133
+ export const getHTMLFromQuill = async (data, options) => {
134
+ const { replaceNewLineTo = '<br>', replaceTagBRTo, replaceTags, replaceBrToDiv } = options || {};
135
+ const delta = (typeof data === 'string') ? await getDeltaFromHTML(data) : data;
136
+ if (options?.functionReplaceDelta) {
137
+ options.functionReplaceDelta(delta);
138
+ }
139
+ delta.ops.forEach((op) => {
140
+ if (op.insert) {
141
+ if (typeof op.insert === 'string') {
142
+ if (replaceNewLineTo) {
143
+ op.insert = op.insert.replace(/\n/g, replaceNewLineTo);
144
+ }
145
+ if (replaceTagBRTo) {
146
+ op.insert = op.insert.replace(/<br>/g, replaceTagBRTo);
147
+ }
148
+ if (replaceTags?.length) {
149
+ for (const tag of replaceTags) {
150
+ op.insert = op.insert.replace(new RegExp(`<${tag.tag}>`, 'g'), `<${tag.replaceTo}>`);
151
+ op.insert = op.insert.replace(new RegExp(`</${tag.tag}>`, 'g'), `</${tag.replaceTo}>`);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ });
157
+ quill.setContents(delta);
158
+ let htmlText = options?.getRootHtml ? quill.root.innerHTML : quill.root.firstElementChild?.innerHTML;
159
+ if (replaceBrToDiv) {
160
+ htmlText = convertHtmlToDivBlocks(htmlText || '');
161
+ }
162
+ return decodeEscapeHtml(htmlText || '');
163
+ };
164
+ export const convertHtmlToDivBlocks = (html) => {
165
+ const BREAK_TOKEN = '<<<BREAK>>>';
166
+ // Bước 1: thay <br> thành token tạm
167
+ const normalizedHtml = html.replace(/<br\s*\/?>/gi, BREAK_TOKEN);
168
+ // Bước 2: tách theo token
169
+ const parts = normalizedHtml.split(BREAK_TOKEN);
170
+ const parser = new DOMParser();
171
+ const divs = [];
172
+ for (const raw of parts) {
173
+ const trimmed = raw.trim();
174
+ if (!trimmed)
175
+ continue;
176
+ // parse mỗi phần nhỏ như một document riêng
177
+ const doc = parser.parseFromString(trimmed, 'text/html');
178
+ const body = doc.body;
179
+ // Lấy lại nội dung bên trong body
180
+ divs.push(`<div>${body.innerHTML}</div>`);
181
+ }
182
+ return divs.join('');
183
+ };
184
+ export const getDeltaFromHTML = async (html) => {
185
+ quill.root.innerHTML = html;
186
+ setTimeout(() => {
187
+ console.log(quill.getContents());
188
+ }, 1000);
189
+ await lastValueFrom(timer(1000));
190
+ return quill.getContents();
191
+ };
192
+ export const processPasteData = async (e, config) => {
193
+ const element = config.element;
194
+ const files = e.clipboardData?.files;
195
+ if (files?.length) {
196
+ e.preventDefault();
197
+ config.handlerPasteFile?.(files);
198
+ config.callBack?.('file');
199
+ return;
200
+ }
201
+ // Lưu selection TRƯỚC khi prevent default
202
+ const selection = window.getSelection();
203
+ let savedRange = null;
204
+ if (selection && selection.rangeCount > 0) {
205
+ const range = selection.getRangeAt(0);
206
+ // Chỉ lưu nếu range nằm trong contentText element
207
+ const container = range.commonAncestorContainer;
208
+ const isInContentElement = element.contains(container.nodeType === Node.TEXT_NODE ? container.parentNode : container);
209
+ if (isInContentElement) {
210
+ savedRange = range.cloneRange();
211
+ }
212
+ }
213
+ // Prevent default để tự xử lý paste
214
+ e.preventDefault();
215
+ // Sử dụng Quill để clean HTML content
216
+ const htmlContent = e.clipboardData?.getData('text/html') || '';
217
+ const plainText = e.clipboardData?.getData('text/plain') || '';
218
+ let contentToInsert = (plainText || '').replace(/\n/g, '<br>');
219
+ if (htmlContent) {
220
+ contentToInsert = await getHTMLFromQuill(htmlContent);
221
+ }
222
+ if (!contentToInsert) {
223
+ config.callBack?.('no-content');
224
+ return;
225
+ }
226
+ if (savedRange) {
227
+ insertContentWithRange(contentToInsert, savedRange, element);
228
+ config.callBack?.('range');
229
+ return;
230
+ }
231
+ element.innerHTML += contentToInsert;
232
+ config.callBack?.('content');
233
+ };
234
+ export const insertContentWithRange = (content, savedRange, element) => {
235
+ const selection = window.getSelection();
236
+ if (!selection) {
237
+ // Fallback: append vào cuối
238
+ element.innerHTML += content;
239
+ return;
240
+ }
241
+ // Restore selection
242
+ selection.removeAllRanges();
243
+ selection.addRange(savedRange);
244
+ // Xóa nội dung đã select (nếu có)
245
+ savedRange.deleteContents();
246
+ // Tạo document fragment từ HTML content
247
+ const tempDiv = document.createElement('div');
248
+ tempDiv.innerHTML = content;
249
+ const fragment = document.createDocumentFragment();
250
+ while (tempDiv.firstChild) {
251
+ fragment.appendChild(tempDiv.firstChild);
252
+ }
253
+ // Insert fragment tại vị trí range
254
+ savedRange.insertNode(fragment);
255
+ // Di chuyển cursor đến cuối nội dung vừa insert
256
+ if (fragment.lastChild) {
257
+ savedRange.setStartAfter(fragment.lastChild);
258
+ }
259
+ savedRange.collapse(true);
260
+ selection.removeAllRanges();
261
+ selection.addRange(savedRange);
262
+ };
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBVyxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQ2hDLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUM3QixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUMzQyxNQUFNLFVBQVUsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxJQUFJLG9CQUFvQixHQUFHLFVB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Q0FBQyxDQUFDO0lBQ2hDLGdEQUFnRDtJQUNoRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QixVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgRGV2aWNlRGV0ZWN0b3IgZnJvbSAnZGV2aWNlLWRldGVjdG9yLWpzJztcbmltcG9ydCBRdWlsbCBmcm9tIFwicXVpbGxcIjtcbmltcG9ydCBEZWx0YSBmcm9tIFwicXVpbGwtZGVsdGFcIjtcbmltcG9ydCB7IGZpbmFsaXplLCBmcm9tRXZlbnQsIGxhc3RWYWx1ZUZyb20sIG1lcmdlTWFwLCBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwLCB0aW1lciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWNvZGVFc2NhcGVIdG1sIH0gZnJvbSBcIi4vZm9ybWF0LXRleHRcIjtcblxuY29uc3QgZGV2aWNlRGV0ZWN0b3IgPSBuZXcgRGV2aWNlRGV0ZWN0b3IoKTtcbmNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbmNvbnN0IHF1aWxsID0gbmV3IFF1aWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxuZXhwb3J0IGNvbnN0IGdldERldmljZUluZm8gPSAoKSA9PiB7XG4gIHJldHVybiBkZXZpY2VEZXRlY3Rvci5wYXJzZSh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldFBsYXRGcm9tQnJvd3NlciA9ICgpID0+IHtcbiAgY29uc3QgaW5mbyA9IGdldERldmljZUluZm8oKTtcbiAgcmV0dXJuIGAke2luZm8uY2xpZW50Py5uYW1lfSAke2luZm8uY2xpZW50Py52ZXJzaW9ufWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnROYW1lSGFuZGxlQ2xpY2sgPSAoKCkgPT4ge1xuICBjb25zdCBkZXZpY2VJbmZvID0gZ2V0RGV2aWNlSW5mbygpO1xuICBsZXQgbmFtZUV2ZW50SGFuZGxlQ2xpY2sgPSBkZXZpY2VJbmZvLmRldmljZT8udHlwZSA9PT0gJ2Rlc2t0b3AnID8gJ2NsaWNrJyA6ICd0b3VjaHN0YXJ0JztcbiAgaWYgKCdvbnBvaW50ZXJkb3duJyBpbiB3aW5kb3cpIHtcbiAgICBuYW1lRXZlbnRIYW5kbGVDbGljayA9ICdwb2ludGVyZG93bic7XG4gIH1cblxuICByZXR1cm4gbmFtZUV2ZW50SGFuZGxlQ2xpY2s7XG59KSgpO1xuXG5leHBvcnQgY29uc3QgZ2V0RG9jdW1lbnRCeVN0cmluZyA9IChodG1sU3RyOiBzdHJpbmcpOiBEb2N1bWVudCA9PiB7XG4gIHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWxTdHIsICd0ZXh0L2h0bWwnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QgPSAoXG4gIHJlY3Q6IElCb3VuZGluZ0NsaWVudFJlY3Rcbik6IElCb3VuZGluZ0NsaWVudFJlY3QgPT4ge1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdFsndG9wJ10sXG4gICAgbGVmdDogcmVjdFsnbGVmdCddLFxuICAgIHdpZHRoOiByZWN0Wyd3aWR0aCddLFxuICAgIGhlaWdodDogcmVjdFsnaGVpZ2h0J10sXG4gICAgYm90dG9tOiByZWN0Wydib3R0b20nXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTdHlsZXNFbGVtZW50ID0gKFxuICBlbDogSFRNTEVsZW1lbnQsXG4gIHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgcmVuZGVyMjogUmVuZGVyZXIyXG4pOiB2b2lkID0+IHtcbiAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT5cbiAgICByZW5kZXIyLnNldFN0eWxlKGVsLCBrZXksIHN0eWxlc1trZXldKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0ID0gKFxuICB3aW46IFdpbmRvdyA9IHdpbmRvd1xuKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9ID0+IHtcbiAgY29uc3QgZG9jID0gd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBib2R5ID0gd2luLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0sXG4gICAgdyA9IHdpbi5pbm5lcldpZHRoIHx8IGRvYy5jbGllbnRXaWR0aCB8fCBib2R5LmNsaWVudFdpZHRoLFxuICAgIGggPSB3aW4uaW5uZXJIZWlnaHQgfHwgZG9jLmNsaWVudEhlaWdodCB8fCBib2R5LmNsaWVudEhlaWdodDtcblxuICByZXR1cm4geyB3aWR0aDogdywgaGVpZ2h0OiBoIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQsXG4gIHBvc2l0aW9uOiBudW1iZXJcbik6IHZvaWQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5mb2N1cygpO1xuICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tWaWV3SW5TY3JlZW4gPSAoXG4gIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBlbGVtZW50U2Nyb2xsPzogSFRNTEVsZW1lbnQsXG4gIG1heFRvcExlZnQ/OiB7IHRvcD86IG51bWJlcjsgbGVmdD86IG51bWJlciB9XG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjb250YWluZXIgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0Q29udGFpbmVyID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KFxuICAgIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICApO1xuXG4gIGlmIChlbGVtZW50U2Nyb2xsKSB7XG4gICAgY29uc3QgcmVjdEVsZW1lbnRTY3JvbGwgPSBlbGVtZW50U2Nyb2xsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmVjdENvbnRhaW5lclsnbGVmdCddID0gcmVjdEVsZW1lbnRTY3JvbGwubGVmdDtcbiAgICByZWN0Q29udGFpbmVyWyd0b3AnXSA9IHJlY3RFbGVtZW50U2Nyb2xsLnRvcDtcbiAgfVxuXG4gIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHJlY3RFbGVtZW50O1xuICBjb25zdCB0b3BDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd0b3AnXTtcbiAgY29uc3QgbGVmdENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ2xlZnQnXTtcbiAgY29uc3Qgd2lkdGhDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd3aWR0aCddO1xuICBjb25zdCBoZWlnaHRDb250YWluZXIgPSByZWN0Q29udGFpbmVyWydoZWlnaHQnXTtcbiAgY29uc3Qgc2Nyb2xsVG9wQ29udGFpbmVyID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3Qgc2Nyb2xsTGVmdENvbnRhaW5lciA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICBjb25zdCBsaW1pdFRvcCA9IHRvcENvbnRhaW5lciArIHNjcm9sbFRvcENvbnRhaW5lciArIGhlaWdodENvbnRhaW5lcjtcbiAgY29uc3QgbGltaXRMZWZ0ID0gbGVmdENvbnRhaW5lciArIHNjcm9sbExlZnRDb250YWluZXIgKyB3aWR0aENvbnRhaW5lcjtcblxuICBjb25zdCBtYXhUb3BJdGVtID0gdG9wICsgKG1heFRvcExlZnQ/LnRvcCB8fCAwKTtcbiAgY29uc3QgbWF4TGVmdEl0ZW0gPSBsZWZ0ICsgKG1heFRvcExlZnQ/LmxlZnQgfHwgMCk7XG5cbiAgaWYgKFxuICAgIHRvcENvbnRhaW5lciA8PSBtYXhUb3BJdGVtICYmXG4gICAgbWF4VG9wSXRlbSA8PSBsaW1pdFRvcCAmJlxuICAgIGxlZnRDb250YWluZXIgPD0gbWF4TGVmdEl0ZW0gJiZcbiAgICBtYXhMZWZ0SXRlbSA8PSBsaW1pdExlZnRcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lciA9IChcbiAgbW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LFxuICBlbGVtZW50PzogSFRNTEVsZW1lbnQsXG4gIHJlY3Q/OiBET01SZWN0XG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFlbGVtZW50ICYmICFyZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlY3RFbGVtZW50ID1cbiAgICByZWN0IHx8IGVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8ICh7fSBhcyBET01SZWN0KTtcbiAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IHJlY3RFbGVtZW50O1xuICBjb25zdCBsaW1pdExlZnQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGxpbWl0VG9wID0gdG9wICsgaGVpZ2h0O1xuICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IG1vdXNlUG9zaXRpb247XG4gIGlmIChcbiAgICBsZWZ0IDw9IGNsaWVudFggJiZcbiAgICBjbGllbnRYIDw9IGxpbWl0TGVmdCAmJlxuICAgIHRvcCA8PSBjbGllbnRZICYmXG4gICAgY2xpZW50WSA8PSBsaW1pdFRvcFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREcmFnRXZlbnRCeUVsZW1lbnQgPSAoY29uZmlnOiB7XG4gIGVsZW1lbnRNb3VzZURvd246IEhUTUxFbGVtZW50O1xuICBmdW5jdGlvbk1vdXNlRG93bj86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgaXNTdGFydFdpdGhNb3VzZURvd25FdmVudD86IGJvb2xlYW47XG4gIGVsZW1lbnRNb3VzZU1vdmU/OiBIVE1MRWxlbWVudDtcbiAgZnVuY3Rpb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGVsZW1lbnRNb3VzZVVwPzogSFRNTEVsZW1lbnQ7XG4gIGZ1bmN0aW9uTW91c2VVcD86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgb25EZXN0cm95OiBTdWJqZWN0PGFueT47XG59KSA9PiB7XG4gIGxldCB0aW1lcjogbnVtYmVyO1xuICBjb25zdCBhZGRDbGFzcyA9ICgpID0+IHtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCchc2VsZWN0LW5vbmUnKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnIWN1cnNvci1ncmFiYmluZycpO1xuICAgIH0sIDI1MCk7XG4gIH07XG4gIGNvbnN0IHJlbW92ZUNsYXNzID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnIXNlbGVjdC1ub25lJyk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCchY3Vyc29yLWdyYWJiaW5nJyk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfTtcbiAgZnJvbUV2ZW50KGNvbmZpZy5lbGVtZW50TW91c2VEb3duLCAnbW91c2VsZWF2ZScpXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItcG9pbnRlcicpKSxcbiAgICAgIHRha2VVbnRpbChjb25maWcub25EZXN0cm95KVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG4gIGZyb21FdmVudChjb25maWcuZWxlbWVudE1vdXNlRG93biwgJ21vdXNlZW50ZXInKVxuICAgIC5waXBlKFxuICAgICAgdGFwKCgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnY3Vyc29yLXBvaW50ZXInKSksXG4gICAgICB0YWtlVW50aWwoY29uZmlnLm9uRGVzdHJveSlcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGNvbnN0IG1vdXNlRG93biA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihcbiAgICBjb25maWcuZWxlbWVudE1vdXNlRG93bixcbiAgICAnbW91c2Vkb3duJ1xuICApLnBpcGUoXG4gICAgdGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgYWRkQ2xhc3MoKTtcbiAgICAgIGNvbmZpZy5mdW5jdGlvbk1vdXNlRG93bj8uKGUpO1xuICAgIH0pXG4gICk7XG4gIGNvbnN0IG1vdXNldXAgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oXG4gICAgY29uZmlnLmVsZW1lbnRNb3VzZVVwIHx8IGRvY3VtZW50LFxuICAgICdtb3VzZXVwJ1xuICApLnBpcGUoXG4gICAgdGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmVtb3ZlQ2xhc3MoKTtcbiAgICAgIGNvbmZpZy5mdW5jdGlvbk1vdXNlVXA/LihlKTtcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0IG1vdXNlbW92ZSA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihcbiAgICBjb25maWcuZWxlbWVudE1vdXNlTW92ZSB8fCBkb2N1bWVudCxcbiAgICAnbW91c2Vtb3ZlJ1xuICApLnBpcGUoXG4gICAgdGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uZmlnLmZ1bmN0aW9uTW91c2VNb3ZlPy4oZSk7XG4gICAgfSksXG4gICAgdGFrZVVudGlsKG1vdXNldXApXG4gICk7XG5cbiAgcmV0dXJuIG1vdXNlRG93bi5waXBlKFxuICAgIG1lcmdlTWFwKChlOiBNb3VzZUV2ZW50KSA9PlxuICAgICAgY29uZmlnLmlzU3RhcnRXaXRoTW91c2VEb3duRXZlbnRcbiAgICAgICAgPyBtb3VzZW1vdmUucGlwZShzdGFydFdpdGgoZSkpXG4gICAgICAgIDogbW91c2Vtb3ZlXG4gICAgKSxcbiAgICB0YWtlVW50aWwoY29uZmlnLm9uRGVzdHJveSksXG4gICAgZmluYWxpemUocmVtb3ZlQ2xhc3MpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SFRNTEZyb21RdWlsbCA9IGFzeW5jIChkYXRhOiBEZWx0YSB8IHN0cmluZywgb3B0aW9ucz86IHtcbiAgZ2V0Um9vdEh0bWw/OmJvb2xlYW47XG4gIHJlcGxhY2VOZXdMaW5lVG8/OiBzdHJpbmc7XG4gIHJlcGxhY2VUYWdCUlRvPzogc3RyaW5nO1xuICByZXBsYWNlQnJUb0Rpdj86IGJvb2xlYW47XG4gIGZ1bmN0aW9uUmVwbGFjZURlbHRhPzogKG9wOkRlbHRhKT0+dm9pZDtcbiAgcmVwbGFjZVRhZ3M/OntcbiAgICB0YWc6c3RyaW5nO1xuICAgIHJlcGxhY2VUbzpzdHJpbmc7XG4gIH1bXTtcbn0pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IHJlcGxhY2VOZXdMaW5lVG8gPSAnPGJyPicsIHJlcGxhY2VUYWdCUlRvLHJlcGxhY2VUYWdzLHJlcGxhY2VCclRvRGl2fSA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGRlbHRhID0gKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgPyBhd2FpdCBnZXREZWx0YUZyb21IVE1MKGRhdGEpIDogZGF0YTtcbiAgaWYob3B0aW9ucz8uZnVuY3Rpb25SZXBsYWNlRGVsdGEpe1xuICAgIG9wdGlvbnMuZnVuY3Rpb25SZXBsYWNlRGVsdGEoZGVsdGEpO1xuICB9XG5cbiAgZGVsdGEub3BzLmZvckVhY2goKG9wKSA9PiB7XG4gICAgaWYgKG9wLmluc2VydCkge1xuICAgICAgaWYgKHR5cGVvZiBvcC5pbnNlcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChyZXBsYWNlTmV3TGluZVRvKSB7XG4gICAgICAgICAgb3AuaW5zZXJ0ID0gb3AuaW5zZXJ0LnJlcGxhY2UoL1xcbi9nLCByZXBsYWNlTmV3TGluZVRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVwbGFjZVRhZ0JSVG8pIHtcbiAgICAgICAgICBvcC5pbnNlcnQgPSBvcC5pbnNlcnQucmVwbGFjZSgvPGJyPi9nLCByZXBsYWNlVGFnQlJUbyk7XG4gICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgaWYgKHJlcGxhY2VUYWdzPy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiByZXBsYWNlVGFncykge1xuICAgICAgICAgICAgb3AuaW5zZXJ0ID0gb3AuaW5zZXJ0LnJlcGxhY2UobmV3IFJlZ0V4cChgPCR7dGFnLnRhZ30+YCwgJ2cnKSwgYDwke3RhZy5yZXBsYWNlVG99PmApIGFzIHN0cmluZztcbiAgICAgICAgICAgIG9wLmluc2VydCA9IG9wLmluc2VydC5yZXBsYWNlKG5ldyBSZWdFeHAoYDwvJHt0YWcudGFnfT5gLCAnZycpLCBgPC8ke3RhZy5yZXBsYWNlVG99PmApIGFzIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBxdWlsbC5zZXRDb250ZW50cyhkZWx0YSk7XG4gIGxldCBodG1sVGV4dCA9IG9wdGlvbnM/LmdldFJvb3RIdG1sID8gcXVpbGwucm9vdC5pbm5lckhUTUwgOiBxdWlsbC5yb290LmZpcnN0RWxlbWVudENoaWxkPy5pbm5lckhUTUw7XG4gIGlmKHJlcGxhY2VCclRvRGl2KXtcbiAgICBodG1sVGV4dCA9IGNvbnZlcnRIdG1sVG9EaXZCbG9ja3MoaHRtbFRleHQgfHwgJycpO1xuICB9XG4gIHJldHVybiBkZWNvZGVFc2NhcGVIdG1sKGh0bWxUZXh0IHx8ICcnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0SHRtbFRvRGl2QmxvY2tzID0gKGh0bWw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IEJSRUFLX1RPS0VOID0gJzw8PEJSRUFLPj4+JztcbiAgLy8gQsaw4bubYyAxOiB0aGF5IDxicj4gdGjDoG5oIHRva2VuIHThuqFtXG4gIGNvbnN0IG5vcm1hbGl6ZWRIdG1sID0gaHRtbC5yZXBsYWNlKC88YnJcXHMqXFwvPz4vZ2ksIEJSRUFLX1RPS0VOKTtcblxuICAvLyBCxrDhu5tjIDI6IHTDoWNoIHRoZW8gdG9rZW5cbiAgY29uc3QgcGFydHMgPSBub3JtYWxpemVkSHRtbC5zcGxpdChCUkVBS19UT0tFTik7XG5cbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCBkaXZzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmF3IG9mIHBhcnRzKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHJhdy50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSBjb250aW51ZTtcblxuICAgIC8vIHBhcnNlIG3hu5dpIHBo4bqnbiBuaOG7jyBuaMawIG3hu5l0IGRvY3VtZW50IHJpw6puZ1xuICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodHJpbW1lZCwgJ3RleHQvaHRtbCcpO1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcblxuICAgIC8vIEzhuqV5IGzhuqFpIG7hu5lpIGR1bmcgYsOqbiB0cm9uZyBib2R5XG4gICAgZGl2cy5wdXNoKGA8ZGl2PiR7Ym9keS5pbm5lckhUTUx9PC9kaXY+YCk7XG4gIH1cblxuICByZXR1cm4gZGl2cy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldERlbHRhRnJvbUhUTUwgPSBhc3luYyAoaHRtbDogc3RyaW5nKTpQcm9taXNlPERlbHRhPiA9PiB7XG4gIHF1aWxsLnJvb3QuaW5uZXJIVE1MID0gaHRtbDtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2cocXVpbGwuZ2V0Q29udGVudHMoKSk7XG4gIH0sIDEwMDApO1xuXG4gIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIoMTAwMCkpO1xuICByZXR1cm4gcXVpbGwuZ2V0Q29udGVudHMoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzUGFzdGVEYXRhID0gYXN5bmMgKGU6IENsaXBib2FyZEV2ZW50LGNvbmZpZzp7XG4gIGVsZW1lbnQ6SFRNTEVsZW1lbnQ7XG4gIGhhbmRsZXJQYXN0ZUZpbGU/OihmaWxlczpGaWxlTGlzdCk9PnZvaWQ7XG4gIGNhbGxCYWNrPzoocG9zaXRvblJldHVybjonZmlsZScgfCAncmFuZ2UnIHwgJ2NvbnRlbnQnIHwgJ25vLWNvbnRlbnQnKT0+dm9pZDtcbn0pID0+e1xuICBjb25zdCBlbGVtZW50ID0gY29uZmlnLmVsZW1lbnQ7XG4gIGNvbnN0IGZpbGVzID0gZS5jbGlwYm9hcmREYXRhPy5maWxlcztcbiAgaWYgKGZpbGVzPy5sZW5ndGgpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uZmlnLmhhbmRsZXJQYXN0ZUZpbGU/LihmaWxlcyk7XG4gICAgY29uZmlnLmNhbGxCYWNrPy4oJ2ZpbGUnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gTMawdSBzZWxlY3Rpb24gVFLGr+G7mkMga2hpIHByZXZlbnQgZGVmYXVsdFxuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGxldCBzYXZlZFJhbmdlOiBSYW5nZSB8IG51bGwgPSBudWxsO1xuICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgLy8gQ2jhu4kgbMawdSBu4bq/dSByYW5nZSBu4bqxbSB0cm9uZyBjb250ZW50VGV4dCBlbGVtZW50XG4gICAgY29uc3QgY29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgY29uc3QgaXNJbkNvbnRlbnRFbGVtZW50ID0gZWxlbWVudC5jb250YWlucyhcbiAgICAgIGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lclxuICAgICk7XG4gICAgaWYgKGlzSW5Db250ZW50RWxlbWVudCkge1xuICAgICAgc2F2ZWRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICB9XG4gIH1cbiAgLy8gUHJldmVudCBkZWZhdWx0IMSR4buDIHThu7EgeOG7rSBsw70gcGFzdGVcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBT4butIGThu6VuZyBRdWlsbCDEkeG7gyBjbGVhbiBIVE1MIGNvbnRlbnRcbiAgY29uc3QgaHRtbENvbnRlbnQgPSBlLmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvaHRtbCcpIHx8ICcnO1xuICBjb25zdCBwbGFpblRleHQgPSBlLmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKSB8fCAnJztcbiAgbGV0IGNvbnRlbnRUb0luc2VydCA9IChwbGFpblRleHR8fCAnJykucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gIGlmIChodG1sQ29udGVudCkge1xuICAgIGNvbnRlbnRUb0luc2VydCA9IGF3YWl0IGdldEhUTUxGcm9tUXVpbGwoaHRtbENvbnRlbnQpO1xuICB9XG5cbiAgaWYoIWNvbnRlbnRUb0luc2VydCl7XG4gICAgY29uZmlnLmNhbGxCYWNrPy4oJ25vLWNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2F2ZWRSYW5nZSkge1xuICAgIGluc2VydENvbnRlbnRXaXRoUmFuZ2UoY29udGVudFRvSW5zZXJ0LCBzYXZlZFJhbmdlLGVsZW1lbnQpO1xuICAgIGNvbmZpZy5jYWxsQmFjaz8uKCdyYW5nZScpO1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50LmlubmVySFRNTCArPSBjb250ZW50VG9JbnNlcnQ7XG4gIGNvbmZpZy5jYWxsQmFjaz8uKCdjb250ZW50Jyk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGluc2VydENvbnRlbnRXaXRoUmFuZ2UgPSAoY29udGVudDogc3RyaW5nLCBzYXZlZFJhbmdlOiBSYW5nZSxlbGVtZW50OkhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAvLyBGYWxsYmFjazogYXBwZW5kIHbDoG8gY3Xhu5FpXG4gICAgZWxlbWVudC5pbm5lckhUTUwgKz0gY29udGVudDtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUmVzdG9yZSBzZWxlY3Rpb25cbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2F2ZWRSYW5nZSk7XG4gIC8vIFjDs2EgbuG7mWkgZHVuZyDEkcOjIHNlbGVjdCAobuG6v3UgY8OzKVxuICBzYXZlZFJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gIC8vIFThuqFvIGRvY3VtZW50IGZyYWdtZW50IHThu6sgSFRNTCBjb250ZW50XG4gIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgdGVtcERpdi5pbm5lckhUTUwgPSBjb250ZW50O1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRlbXBEaXYuZmlyc3RDaGlsZCk7XG4gIH1cbiAgLy8gSW5zZXJ0IGZyYWdtZW50IHThuqFpIHbhu4sgdHLDrSByYW5nZVxuICBzYXZlZFJhbmdlLmluc2VydE5vZGUoZnJhZ21lbnQpO1xuICAvLyBEaSBjaHV54buDbiBjdXJzb3IgxJHhur9uIGN14buRaSBu4buZaSBkdW5nIHbhu6thIGluc2VydFxuICBpZiAoZnJhZ21lbnQubGFzdENoaWxkKSB7XG4gICAgc2F2ZWRSYW5nZS5zZXRTdGFydEFmdGVyKGZyYWdtZW50Lmxhc3RDaGlsZCk7XG4gIH1cbiAgc2F2ZWRSYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2F2ZWRSYW5nZSk7XG59Il19
@@ -0,0 +1,37 @@
1
+ import { convertBase64ToBlob } from "./base64";
2
+ export const downloadFileByUrlUseXmlRequest = (fileUrl, filename) => {
3
+ const xmlRequest = new XMLHttpRequest();
4
+ xmlRequest.open('GET', fileUrl, true);
5
+ xmlRequest.responseType = 'blob';
6
+ xmlRequest.onload = () => {
7
+ const url = window.URL.createObjectURL(xmlRequest.response);
8
+ downloadFileByUrl(url, filename);
9
+ };
10
+ xmlRequest.send();
11
+ };
12
+ export const downloadFileByUrl = async (fileUrl, filename, onlyOpen) => {
13
+ const downloadFileElement = document.createElement('a');
14
+ if (!onlyOpen) {
15
+ const response = await fetch(fileUrl);
16
+ if (response.ok) {
17
+ const blob = await response.blob();
18
+ fileUrl = URL.createObjectURL(blob);
19
+ }
20
+ }
21
+ downloadFileElement.href = fileUrl;
22
+ downloadFileElement.download = filename;
23
+ downloadFileElement.target = '_blank';
24
+ downloadFileElement.click();
25
+ downloadFileElement.remove();
26
+ };
27
+ export const downloadImageFromELement = (imageElement, typeFileDownload, nameFile) => {
28
+ const parentElement = imageElement?.src;
29
+ const blobData = convertBase64ToBlob(parentElement);
30
+ const blob = new Blob([blobData], { type: typeFileDownload || "image/png" });
31
+ const url = window.URL.createObjectURL(blob);
32
+ const link = document.createElement('a');
33
+ link.href = url;
34
+ link.download = nameFile || 'barcode';
35
+ link.click();
36
+ };
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9kb3dubG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFFeEMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1RCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBQ0YsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFBRSxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxRQUFrQixFQUFFLEVBQUU7SUFDL0YsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRDLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRW5DLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNuQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3hDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDdEMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxZQUE4QixFQUFFLGdCQUF5QixFQUFFLFFBQWlCLEVBQUUsRUFBRTtJQUN2SCxNQUFNLGFBQWEsR0FBRyxZQUFZLEVBQUUsR0FBRyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iIH0gZnJvbSBcIi4vYmFzZTY0XCI7XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeVVybFVzZVhtbFJlcXVlc3QgPSAoZmlsZVVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHhtbFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICB4bWxSZXF1ZXN0Lm9wZW4oJ0dFVCcsIGZpbGVVcmwsIHRydWUpO1xuICB4bWxSZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgeG1sUmVxdWVzdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoeG1sUmVxdWVzdC5yZXNwb25zZSk7XG5cbiAgICBkb3dubG9hZEZpbGVCeVVybCh1cmwsIGZpbGVuYW1lKTtcbiAgfTtcbiAgeG1sUmVxdWVzdC5zZW5kKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZG93bmxvYWRGaWxlQnlVcmwgPSBhc3luYyAoZmlsZVVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBvbmx5T3Blbj86IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgZG93bmxvYWRGaWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblxuICBpZiAoIW9ubHlPcGVuKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaWxlVXJsKTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcblxuICAgICAgZmlsZVVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgfVxuICB9XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQuaHJlZiA9IGZpbGVVcmw7XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgZG93bmxvYWRGaWxlRWxlbWVudC50YXJnZXQgPSAnX2JsYW5rJztcbiAgZG93bmxvYWRGaWxlRWxlbWVudC5jbGljaygpO1xuICBkb3dubG9hZEZpbGVFbGVtZW50LnJlbW92ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSW1hZ2VGcm9tRUxlbWVudCA9IChpbWFnZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQsIHR5cGVGaWxlRG93bmxvYWQ/OiBzdHJpbmcsIG5hbWVGaWxlPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBpbWFnZUVsZW1lbnQ/LnNyYztcbiAgY29uc3QgYmxvYkRhdGEgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHBhcmVudEVsZW1lbnQpO1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Jsb2JEYXRhXSwgeyB0eXBlOiB0eXBlRmlsZURvd25sb2FkIHx8IFwiaW1hZ2UvcG5nXCIgfSk7XG4gIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXG4gIGxpbmsuaHJlZiA9IHVybDtcbiAgbGluay5kb3dubG9hZCA9IG5hbWVGaWxlIHx8ICdiYXJjb2RlJztcbiAgbGluay5jbGljaygpO1xufTsiXX0=
@@ -0,0 +1,79 @@
1
+ import { convertBase64ToBlob } from "./base64";
2
+ import { get, set } from "./helpers";
3
+ import { uuid } from "./uuid";
4
+ export const isTypeImage = (file) => file.type.match(/image.*/) ? true : false;
5
+ export const isTypeVideo = (file) => file.type.match(/video.*/) ? true : false;
6
+ export const isTypeAudio = (file) => file.type.match(/audio.*/) ? true : false;
7
+ export const isTypeFile = (file) => file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false;
8
+ export const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
9
+ export const DocumentExtList = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'json', 'xml', 'application/msword',
10
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
11
+ 'application/vnd.ms-excel',
12
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
13
+ 'application/vnd.ms-powerpoint',
14
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
15
+ 'application/pdf',
16
+ 'application/json',
17
+ 'application/xml'];
18
+ export const isIncludeDocumentExtList = (ext, listExt = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);
19
+ export const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png'];
20
+ export const isIncludeImageExtList = (ext, listExt = ImageExtList) => listExt.includes(ext);
21
+ export const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];
22
+ export const isIncludeVideoExtList = (ext, listExt = VideoExtList) => listExt.includes(ext);
23
+ export const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];
24
+ export const isIncludeAudioExtList = (ext, listExt = AudioExtList) => listExt.includes(ext);
25
+ export const getFileExtension = (file) => {
26
+ if (file instanceof File && file.type) {
27
+ return (file.type.split('/').pop() || '').toLowerCase();
28
+ }
29
+ file = file;
30
+ if (file.mimetype || file.file?.type) {
31
+ return file.mimetype || file.file?.type;
32
+ }
33
+ let fileName = file.name;
34
+ const url = get(file, 'url') || get(file, 'origin_url');
35
+ if (!fileName && !url) {
36
+ return;
37
+ }
38
+ if (!fileName && url) {
39
+ fileName = url.split('/').pop() || '';
40
+ set(file, 'name', fileName);
41
+ }
42
+ const dots = fileName.split(".");
43
+ if (!dots) {
44
+ return;
45
+ }
46
+ return (dots.pop() || '').toLowerCase();
47
+ };
48
+ export const getLabelBySizeFile = (size, toFixed = 2) => {
49
+ if (size < 1024 * 1024) {
50
+ return ` ${(size / 1024).toFixed(toFixed)} KB`;
51
+ }
52
+ return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;
53
+ };
54
+ export const convertBlobToFile = (blob, fileName) => {
55
+ const type = blob.type.split('/')[1];
56
+ const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;
57
+ return new File([blob], name, { type: blob.type, lastModified: Date.now() });
58
+ };
59
+ export const convertUrlToFile = (url, fileName) => {
60
+ return new Promise((resolve, reject) => {
61
+ const xhr = new XMLHttpRequest();
62
+ xhr.onload = function () {
63
+ const reader = new FileReader();
64
+ reader.onloadend = () => {
65
+ const file = convertBase64ToBlob(reader.result);
66
+ resolve(convertBlobToFile(file, fileName || Date.now().toLocaleString()));
67
+ };
68
+ reader.onerror = () => resolve(undefined);
69
+ reader.readAsDataURL(xhr.response);
70
+ };
71
+ xhr.onerror = (err) => {
72
+ reject(err);
73
+ };
74
+ xhr.open('GET', url);
75
+ xhr.responseType = 'blob';
76
+ xhr.send();
77
+ });
78
+ };
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1RixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDNUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBRTFJLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtB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Q2QsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckIsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmlsZSB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iIH0gZnJvbSBcIi4vYmFzZTY0XCI7XG5pbXBvcnQgeyBnZXQsIHNldCB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHV1aWQgfSBmcm9tIFwiLi91dWlkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1R5cGVJbWFnZSA9IChmaWxlOiBGaWxlIHwgQmxvYikgPT4gZmlsZS50eXBlLm1hdGNoKC9pbWFnZS4qLykgPyB0cnVlIDogZmFsc2U7XG5leHBvcnQgY29uc3QgaXNUeXBlVmlkZW8gPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IGZpbGUudHlwZS5tYXRjaCgvdmlkZW8uKi8pID8gdHJ1ZSA6IGZhbHNlO1xuZXhwb3J0IGNvbnN0IGlzVHlwZUF1ZGlvID0gKGZpbGU6IEZpbGUgfCBCbG9iKSA9PiBmaWxlLnR5cGUubWF0Y2goL2F1ZGlvLiovKSA/IHRydWUgOiBmYWxzZTtcbmV4cG9ydCBjb25zdCBpc1R5cGVGaWxlID0gKGZpbGU6IEZpbGUpID0+IGZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmaWxlKSA9PT0gJ1tvYmplY3QgRmlsZV0nID8gdHJ1ZSA6IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgRXhjZWxFeHRMaXN0ID0gWyd4bHMnLCAneGxzeCcsICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXTtcbmV4cG9ydCBjb25zdCBEb2N1bWVudEV4dExpc3QgPSBbJ2RvYycsICdkb2N4JywgJ3hscycsICd4bHN4JywgJ3BwdCcsICdwcHR4JywgJ3BkZicsICdqc29uJywgJ3htbCcsICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAnYXBwbGljYXRpb24vcGRmJyxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnYXBwbGljYXRpb24veG1sJ107XG5leHBvcnQgY29uc3QgaXNJbmNsdWRlRG9jdW1lbnRFeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gRG9jdW1lbnRFeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCkgfHwgbGlzdEV4dC5pbmNsdWRlcyhgYXBwbGljYXRpb24vJHtleHR9YCk7XG5cbmV4cG9ydCBjb25zdCBJbWFnZUV4dExpc3QgPSBbJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnaW1hZ2UvZ2lmJywgJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnXTtcbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVJbWFnZUV4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBJbWFnZUV4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KTtcblxuZXhwb3J0IGNvbnN0IFZpZGVvRXh0TGlzdCA9IFsnbXA0JywgJ21vdicsICdtcGcnLCAnYXZpJywgJ3dtdicsICd2aWRlby9tcDQnLCAndmlkZW8vcXVpY2t0aW1lJywgJ3ZpZGVvL21wZWcnLCAndmlkZW8veC1tc3ZpZGVvJywgJ3ZpZGVvL3gtbXMtd212J107XG5leHBvcnQgY29uc3QgaXNJbmNsdWRlVmlkZW9FeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gVmlkZW9FeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCk7XG5leHBvcnQgY29uc3QgQXVkaW9FeHRMaXN0ID0gWydtcDMnLCAnd2F2JywgJ29nZycsICdhYWMnLCAnbTRhJywgJ2ZsYWMnLCAnd21hJywgJ2F1ZGlvL21wZWcnLCAnYXVkaW8vd2F2JywgJ2F1ZGlvL29nZycsICdhdWRpby9hYWMnLCAnYXVkaW8vbXA0JywgJ2F1ZGlvL2ZsYWMnLCAnYXVkaW8veC1tcy13bWEnXTtcbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVBdWRpb0V4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBBdWRpb0V4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVFeHRlbnNpb24gPSAoZmlsZTogSUZpbGUgfCBGaWxlKSA9PiB7XG4gIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnR5cGUpIHtcbiAgICByZXR1cm4gKGZpbGUudHlwZS5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIGZpbGUgPSBmaWxlIGFzIElGaWxlO1xuICBpZiAoZmlsZS5taW1ldHlwZSB8fCBmaWxlLmZpbGU/LnR5cGUpIHtcbiAgICByZXR1cm4gZmlsZS5taW1ldHlwZSB8fCBmaWxlLmZpbGU/LnR5cGU7XG4gIH1cblxuICBsZXQgZmlsZU5hbWUgPSBmaWxlLm5hbWUgYXMgc3RyaW5nO1xuICBjb25zdCB1cmwgPSBnZXQoZmlsZSwgJ3VybCcpIHx8IGdldChmaWxlLCAnb3JpZ2luX3VybCcpO1xuICBpZiAoIWZpbGVOYW1lICYmICF1cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFmaWxlTmFtZSAmJiB1cmwpIHtcbiAgICBmaWxlTmFtZSA9IHVybC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnO1xuICAgIHNldChmaWxlLCAnbmFtZScsIGZpbGVOYW1lKTtcbiAgfVxuICBjb25zdCBkb3RzID0gZmlsZU5hbWUuc3BsaXQoXCIuXCIpO1xuXG4gIGlmICghZG90cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiAoZG90cy5wb3AoKSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMYWJlbEJ5U2l6ZUZpbGUgPSAoc2l6ZTogbnVtYmVyLCB0b0ZpeGVkID0gMikgPT4ge1xuICBpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0KSB7XG4gICAgcmV0dXJuIGAgJHsoc2l6ZSAvIDEwMjQpLnRvRml4ZWQodG9GaXhlZCl9IEtCYDtcbiAgfVxuXG4gIHJldHVybiBgICR7KHNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKHRvRml4ZWQpfSBNQmA7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydEJsb2JUb0ZpbGUgPSAoYmxvYjogQmxvYiwgZmlsZU5hbWU/OiBzdHJpbmcpOiBGaWxlID0+IHtcbiAgY29uc3QgdHlwZSA9IGJsb2IudHlwZS5zcGxpdCgnLycpWzFdO1xuICBjb25zdCBuYW1lID0gZmlsZU5hbWUgPyBgJHtmaWxlTmFtZS5zcGxpdCgnLicpWzBdfS4ke3R5cGV9YCA6IGAke3V1aWQoKX0uJHt0eXBlfWA7XG5cbiAgcmV0dXJuIG5ldyBGaWxlKFtibG9iXSwgbmFtZSwgeyB0eXBlOiBibG9iLnR5cGUsIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VXJsVG9GaWxlID0gKHVybDogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8RmlsZSB8IHVuZGVmaW5lZD4oKHJlc29sdmUscmVqZWN0KSA9PiB7XG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlID0gY29udmVydEJhc2U2NFRvQmxvYihyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgIHJlc29sdmUoY29udmVydEJsb2JUb0ZpbGUoZmlsZSwgZmlsZU5hbWUgfHwgRGF0ZS5ub3coKS50b0xvY2FsZVN0cmluZygpKSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9O1xuICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgeGhyLnNlbmQoKTtcbiAgfSk7XG59OyJdfQ==