@plait/core 0.77.3 → 0.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/fesm2022/plait-core.mjs.map +1 -1
  2. package/package.json +1 -3
  3. package/esm2022/constants/cursor.mjs +0 -13
  4. package/esm2022/constants/index.mjs +0 -20
  5. package/esm2022/constants/keycodes.mjs +0 -127
  6. package/esm2022/constants/selection.mjs +0 -6
  7. package/esm2022/constants/zoom.mjs +0 -4
  8. package/esm2022/context.mjs +0 -23
  9. package/esm2022/core/element/context-change.mjs +0 -13
  10. package/esm2022/core/element/context.mjs +0 -2
  11. package/esm2022/core/element/element-flavour.mjs +0 -140
  12. package/esm2022/core/element/element-ref.mjs +0 -2
  13. package/esm2022/core/list-render.mjs +0 -217
  14. package/esm2022/differs/default_iterable_differ.mjs +0 -614
  15. package/esm2022/differs/iterable_differs.mjs +0 -9
  16. package/esm2022/interfaces/board.mjs +0 -108
  17. package/esm2022/interfaces/custom-types.mjs +0 -5
  18. package/esm2022/interfaces/direction.mjs +0 -8
  19. package/esm2022/interfaces/element.mjs +0 -43
  20. package/esm2022/interfaces/group.mjs +0 -6
  21. package/esm2022/interfaces/history.mjs +0 -5
  22. package/esm2022/interfaces/index.mjs +0 -19
  23. package/esm2022/interfaces/node.mjs +0 -57
  24. package/esm2022/interfaces/operation.mjs +0 -96
  25. package/esm2022/interfaces/path-ref.mjs +0 -15
  26. package/esm2022/interfaces/path.mjs +0 -183
  27. package/esm2022/interfaces/plugin.mjs +0 -6
  28. package/esm2022/interfaces/point.mjs +0 -27
  29. package/esm2022/interfaces/pointer.mjs +0 -6
  30. package/esm2022/interfaces/rectangle-client.mjs +0 -171
  31. package/esm2022/interfaces/selection.mjs +0 -13
  32. package/esm2022/interfaces/svg-arc-command.mjs +0 -2
  33. package/esm2022/interfaces/theme.mjs +0 -49
  34. package/esm2022/interfaces/viewport.mjs +0 -7
  35. package/esm2022/plait-core.mjs +0 -5
  36. package/esm2022/plugins/create-board.mjs +0 -122
  37. package/esm2022/plugins/index.mjs +0 -11
  38. package/esm2022/plugins/with-board.mjs +0 -20
  39. package/esm2022/plugins/with-hand.mjs +0 -113
  40. package/esm2022/plugins/with-history.mjs +0 -91
  41. package/esm2022/plugins/with-hotkey.mjs +0 -96
  42. package/esm2022/plugins/with-i18n.mjs +0 -13
  43. package/esm2022/plugins/with-moving.mjs +0 -282
  44. package/esm2022/plugins/with-options.mjs +0 -13
  45. package/esm2022/plugins/with-related-fragment.mjs +0 -23
  46. package/esm2022/plugins/with-selection.mjs +0 -230
  47. package/esm2022/public-api.mjs +0 -16
  48. package/esm2022/testing/core/create-board.mjs +0 -15
  49. package/esm2022/testing/core/fake-weak-map.mjs +0 -18
  50. package/esm2022/testing/core/index.mjs +0 -3
  51. package/esm2022/testing/fake-events/event-objects.mjs +0 -131
  52. package/esm2022/testing/fake-events/index.mjs +0 -2
  53. package/esm2022/testing/index.mjs +0 -3
  54. package/esm2022/testing/test-element.mjs +0 -9
  55. package/esm2022/transforms/board.mjs +0 -137
  56. package/esm2022/transforms/element.mjs +0 -22
  57. package/esm2022/transforms/general.mjs +0 -146
  58. package/esm2022/transforms/group.mjs +0 -64
  59. package/esm2022/transforms/index.mjs +0 -17
  60. package/esm2022/transforms/node.mjs +0 -37
  61. package/esm2022/transforms/selection.mjs +0 -26
  62. package/esm2022/transforms/theme.mjs +0 -8
  63. package/esm2022/transforms/viewport.mjs +0 -8
  64. package/esm2022/transforms/z-index.mjs +0 -20
  65. package/esm2022/utils/angle.mjs +0 -164
  66. package/esm2022/utils/board.mjs +0 -18
  67. package/esm2022/utils/clipboard/clipboard.mjs +0 -40
  68. package/esm2022/utils/clipboard/common.mjs +0 -82
  69. package/esm2022/utils/clipboard/data-transfer.mjs +0 -33
  70. package/esm2022/utils/clipboard/index.mjs +0 -3
  71. package/esm2022/utils/clipboard/navigator-clipboard.mjs +0 -71
  72. package/esm2022/utils/clipboard/types.mjs +0 -13
  73. package/esm2022/utils/common.mjs +0 -79
  74. package/esm2022/utils/debug.mjs +0 -91
  75. package/esm2022/utils/dnd.mjs +0 -8
  76. package/esm2022/utils/dom/common.mjs +0 -75
  77. package/esm2022/utils/dom/environment.mjs +0 -2
  78. package/esm2022/utils/dom/foreign.mjs +0 -26
  79. package/esm2022/utils/dom/index.mjs +0 -4
  80. package/esm2022/utils/drawing/arrow.mjs +0 -23
  81. package/esm2022/utils/drawing/circle.mjs +0 -4
  82. package/esm2022/utils/drawing/line.mjs +0 -47
  83. package/esm2022/utils/drawing/rectangle.mjs +0 -36
  84. package/esm2022/utils/element.mjs +0 -90
  85. package/esm2022/utils/environment.mjs +0 -14
  86. package/esm2022/utils/fragment.mjs +0 -27
  87. package/esm2022/utils/group.mjs +0 -239
  88. package/esm2022/utils/helper.mjs +0 -68
  89. package/esm2022/utils/history.mjs +0 -96
  90. package/esm2022/utils/hotkeys.mjs +0 -109
  91. package/esm2022/utils/id-creator.mjs +0 -11
  92. package/esm2022/utils/index.mjs +0 -35
  93. package/esm2022/utils/iterable.mjs +0 -32
  94. package/esm2022/utils/math.mjs +0 -480
  95. package/esm2022/utils/mobile.mjs +0 -6
  96. package/esm2022/utils/moving-element.mjs +0 -17
  97. package/esm2022/utils/pointer.mjs +0 -13
  98. package/esm2022/utils/position.mjs +0 -9
  99. package/esm2022/utils/selected-element.mjs +0 -145
  100. package/esm2022/utils/selection.mjs +0 -151
  101. package/esm2022/utils/snap/snap-moving.mjs +0 -199
  102. package/esm2022/utils/snap/snap.mjs +0 -211
  103. package/esm2022/utils/to-image.mjs +0 -204
  104. package/esm2022/utils/to-point.mjs +0 -74
  105. package/esm2022/utils/tree.mjs +0 -22
  106. package/esm2022/utils/viewport.mjs +0 -227
  107. package/esm2022/utils/weak-maps.mjs +0 -27
  108. package/esm2022/utils/z-index.mjs +0 -166
@@ -1,239 +0,0 @@
1
- import { ACTIVE_STROKE_WIDTH } from '../constants';
2
- import { PlaitGroupElement, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';
3
- import { getSelectionAngle, setAngleForG } from './angle';
4
- import { createG } from './dom';
5
- import { drawRectangle } from './drawing/rectangle';
6
- import { getRectangleByElements } from './element';
7
- import { idCreator } from './id-creator';
8
- import { getSelectedElements } from './selected-element';
9
- import { isSelectionMoving } from './selection';
10
- import { depthFirstRecursion } from './tree';
11
- import { moveElementsToNewPath } from './common';
12
- import { sortElements } from './position';
13
- export const getElementsInGroup = (board, group, recursion, includeGroup) => {
14
- let result = [];
15
- const elements = board.children.filter(value => value.groupId === group.id);
16
- if (recursion) {
17
- elements.forEach(item => {
18
- if (PlaitGroupElement.isGroup(item)) {
19
- if (includeGroup) {
20
- result.push(item);
21
- }
22
- result.push(...getElementsInGroup(board, item, recursion, includeGroup));
23
- }
24
- else {
25
- result.push(item);
26
- }
27
- });
28
- }
29
- else {
30
- result = includeGroup ? elements : elements.filter(item => !PlaitGroupElement.isGroup(item));
31
- }
32
- return result;
33
- };
34
- export const getAllElementsInGroup = (board, group, recursion, includeGroup) => {
35
- const elementsInGroup = getElementsInGroup(board, group, recursion, includeGroup);
36
- const result = [];
37
- elementsInGroup.forEach(element => {
38
- depthFirstRecursion(element, node => {
39
- result.push(node);
40
- }, () => true);
41
- });
42
- return result;
43
- };
44
- export const getRectangleByGroup = (board, group, recursion) => {
45
- const elementsInGroup = getAllElementsInGroup(board, group, recursion);
46
- return getRectangleByElements(board, elementsInGroup, false);
47
- };
48
- export const getGroupByElement = (board, element, recursion, originElements) => {
49
- const group = (originElements || board.children).find(item => item.id === element?.groupId);
50
- if (!group) {
51
- return recursion ? [] : null;
52
- }
53
- if (recursion) {
54
- const groups = [group];
55
- const grandGroups = getGroupByElement(board, group, recursion, originElements);
56
- if (grandGroups.length) {
57
- groups.push(...grandGroups);
58
- }
59
- return groups;
60
- }
61
- else {
62
- return group;
63
- }
64
- };
65
- export const getHighestGroup = (board, element) => {
66
- const hitElementGroups = getGroupByElement(board, element, true);
67
- if (hitElementGroups.length) {
68
- return hitElementGroups[hitElementGroups.length - 1];
69
- }
70
- return null;
71
- };
72
- export const getElementsInGroupByElement = (board, element) => {
73
- const highestGroup = getHighestGroup(board, element);
74
- if (highestGroup) {
75
- return getAllElementsInGroup(board, highestGroup, true);
76
- }
77
- else {
78
- return [element];
79
- }
80
- };
81
- export const isSelectedElementOrGroup = (board, element, elements) => {
82
- const selectedElements = elements?.length ? elements : getSelectedElements(board);
83
- if (PlaitGroupElement.isGroup(element)) {
84
- return isSelectedAllElementsInGroup(board, element, elements);
85
- }
86
- return selectedElements.map(item => item.id).includes(element.id);
87
- };
88
- export const isSelectedAllElementsInGroup = (board, group, elements) => {
89
- const selectedElements = elements?.length ? elements : getSelectedElements(board);
90
- const elementsInGroup = getElementsInGroup(board, group, true);
91
- return elementsInGroup.every(item => selectedElements.map(element => element.id).includes(item.id));
92
- };
93
- export const filterSelectedGroups = (board, groups, elements) => {
94
- const selectedGroups = [];
95
- groups.forEach(item => {
96
- if (isSelectedElementOrGroup(board, item, elements)) {
97
- selectedGroups.push(item);
98
- }
99
- });
100
- return selectedGroups;
101
- };
102
- export const getSelectedGroups = (board, elements, originElements) => {
103
- const highestSelectedGroups = getHighestSelectedGroups(board, elements, originElements);
104
- const groups = [];
105
- highestSelectedGroups.forEach(item => {
106
- groups.push(item);
107
- const elementsInGroup = getElementsInGroup(board, item, true, true);
108
- groups.push(...elementsInGroup.filter(item => PlaitGroupElement.isGroup(item)));
109
- });
110
- return groups;
111
- };
112
- export const getHighestSelectedGroup = (board, element, elements, originElements) => {
113
- const hitElementGroups = getGroupByElement(board, element, true, originElements);
114
- const selectedGroups = filterSelectedGroups(board, hitElementGroups, elements);
115
- if (selectedGroups.length) {
116
- return selectedGroups[selectedGroups.length - 1];
117
- }
118
- return null;
119
- };
120
- export const getHighestSelectedGroups = (board, elements, originElements) => {
121
- let result = [];
122
- const selectedElements = elements?.length ? elements : getSelectedElements(board);
123
- selectedElements.forEach(item => {
124
- if (item.groupId) {
125
- const group = getHighestSelectedGroup(board, item, elements, originElements);
126
- if (group && !result.includes(group)) {
127
- result.push(group);
128
- }
129
- }
130
- });
131
- return result;
132
- };
133
- export const getSelectedIsolatedElements = (board, elements) => {
134
- let result = [];
135
- const selectedElements = elements?.length ? elements : getSelectedElements(board);
136
- selectedElements
137
- .filter(item => !PlaitGroupElement.isGroup(item))
138
- .forEach(item => {
139
- if (!item.groupId) {
140
- result.push(item);
141
- }
142
- else {
143
- const group = getHighestSelectedGroup(board, item, elements);
144
- if (!group) {
145
- result.push(item);
146
- }
147
- }
148
- });
149
- return result;
150
- };
151
- export const getSelectedIsolatedElementsCanAddToGroup = (board, elements) => {
152
- const selectedIsolatedElements = getSelectedIsolatedElements(board, elements);
153
- return selectedIsolatedElements.filter(item => board.canAddToGroup(item));
154
- };
155
- export const getHighestSelectedElements = (board, elements) => {
156
- return [...getHighestSelectedGroups(board, elements), ...getSelectedIsolatedElements(board, elements)];
157
- };
158
- export const createGroupRectangleG = (board, elements) => {
159
- const selectedElementIds = getSelectedElements(board).map(item => item.id);
160
- let groupRectangleG = null;
161
- const isMoving = isSelectionMoving(board);
162
- elements.forEach(item => {
163
- const isRender = (!selectedElementIds.includes(item.id) && !isMoving) || isMoving;
164
- if (item.groupId && isRender) {
165
- if (!groupRectangleG) {
166
- groupRectangleG = createG();
167
- }
168
- const elements = getElementsInGroupByElement(board, item);
169
- const rectangle = getRectangleByElements(board, elements, false);
170
- const rectangleG = drawRectangle(board, rectangle, {
171
- stroke: SELECTION_BORDER_COLOR,
172
- strokeWidth: ACTIVE_STROKE_WIDTH,
173
- strokeLineDash: [5]
174
- });
175
- const angle = getSelectionAngle(elements);
176
- if (angle) {
177
- setAngleForG(rectangleG, RectangleClient.getCenterPoint(rectangle), angle);
178
- }
179
- groupRectangleG.append(rectangleG);
180
- }
181
- });
182
- return groupRectangleG;
183
- };
184
- export const createGroup = (groupId) => {
185
- return groupId
186
- ? {
187
- id: idCreator(),
188
- type: 'group',
189
- groupId
190
- }
191
- : {
192
- id: idCreator(),
193
- type: 'group'
194
- };
195
- };
196
- export const nonGroupInHighestSelectedElements = (elements) => {
197
- return elements.every(item => !item.groupId);
198
- };
199
- export const hasSelectedElementsInSameGroup = (elements) => {
200
- return elements.every(item => item.groupId && item.groupId === elements[0].groupId);
201
- };
202
- export const canAddGroup = (board, elements) => {
203
- const highestSelectedElements = getHighestSelectedElements(board, elements);
204
- const rootElements = highestSelectedElements.filter(item => board.canAddToGroup(item));
205
- if (rootElements.length > 1) {
206
- return nonGroupInHighestSelectedElements(rootElements) || hasSelectedElementsInSameGroup(rootElements);
207
- }
208
- return false;
209
- };
210
- export const canRemoveGroup = (board, elements, originElements) => {
211
- const selectedGroups = getHighestSelectedGroups(board, elements, originElements);
212
- const selectedElements = elements?.length ? elements : getSelectedElements(board);
213
- return selectedElements.length > 0 && selectedGroups.length > 0;
214
- };
215
- export const getEditingGroup = (board, element) => {
216
- const groups = getGroupByElement(board, element, true);
217
- let editingGroup = null;
218
- if (groups?.length) {
219
- for (let i = 0; i < groups?.length; i++) {
220
- if (!isSelectedAllElementsInGroup(board, groups[i])) {
221
- editingGroup = groups[i];
222
- break;
223
- }
224
- }
225
- }
226
- return editingGroup;
227
- };
228
- export const moveElementsToNewPathAfterAddGroup = (board, selectedElements, newPath) => {
229
- const moveElements = [...selectedElements];
230
- sortElements(board, moveElements);
231
- moveElements.pop();
232
- moveElementsToNewPath(board, moveElements.map(element => {
233
- return {
234
- element,
235
- newPath
236
- };
237
- }));
238
- };
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUE4QyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFpQixFQUFFLFNBQW1CLEVBQUUsWUFBc0IsRUFBRSxFQUFFO0lBQ3BILElBQUksTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFzQixDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxD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RUFBRSxPQUFhLEVBQUUsRUFBRTtJQUNySCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuQixxQkFBcUIsQ0FDakIsS0FBSyxFQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsT0FBTztZQUNILE9BQU87WUFDUCxPQUFPO1NBQ1YsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUNMLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQ1RJVkVfU1RST0tFX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRHcm91cCwgUGxhaXRHcm91cEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uQW5nbGUsIHNldEFuZ2xlRm9yRyB9IGZyb20gJy4vYW5nbGUnO1xuaW1wb3J0IHsgY3JlYXRlRyB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IGRyYXdSZWN0YW5nbGUgfSBmcm9tICcuL2RyYXdpbmcvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgaWRDcmVhdG9yIH0gZnJvbSAnLi9pZC1jcmVhdG9yJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuL3NlbGVjdGVkLWVsZW1lbnQnO1xuaW1wb3J0IHsgaXNTZWxlY3Rpb25Nb3ZpbmcgfSBmcm9tICcuL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcbmltcG9ydCB7IG1vdmVFbGVtZW50c1RvTmV3UGF0aCB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IHNvcnRFbGVtZW50cyB9IGZyb20gJy4vcG9zaXRpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudHNJbkdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbiwgaW5jbHVkZUdyb3VwPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZXN1bHQ6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgZWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIFBsYWl0RWxlbWVudCkuZ3JvdXBJZCA9PT0gZ3JvdXAuaWQpIGFzIFBsYWl0RWxlbWVudFtdO1xuICAgIGlmIChyZWN1cnNpb24pIHtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBpdGVtLCByZWN1cnNpb24sIGluY2x1ZGVHcm91cCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaW5jbHVkZUdyb3VwID8gZWxlbWVudHMgOiAoZWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gIVBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCByZWN1cnNpb24/OiBib29sZWFuLCBpbmNsdWRlR3JvdXA/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cCwgcmVjdXJzaW9uLCBpbmNsdWRlR3JvdXApO1xuICAgIGNvbnN0IHJlc3VsdDogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBlbGVtZW50c0luR3JvdXAuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVCeUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEFsbEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHJlY3Vyc2lvbikgYXMgUGxhaXRFbGVtZW50W107XG4gICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzSW5Hcm91cCwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwQnlFbGVtZW50ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCxcbiAgICByZWN1cnNpb24/OiBib29sZWFuLFxuICAgIG9yaWdpbkVsZW1lbnRzPzogUGxhaXRFbGVtZW50W11cbik6IFBsYWl0R3JvdXAgfCBQbGFpdEdyb3VwW10gfCBudWxsID0+IHtcbiAgICBjb25zdCBncm91cCA9IChvcmlnaW5FbGVtZW50cyB8fCBib2FyZC5jaGlsZHJlbikuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQ/Lmdyb3VwSWQpO1xuICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2lvbiA/IFtdIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKHJlY3Vyc2lvbikge1xuICAgICAgICBjb25zdCBncm91cHMgPSBbZ3JvdXBdO1xuICAgICAgICBjb25zdCBncmFuZEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBncm91cCwgcmVjdXJzaW9uLCBvcmlnaW5FbGVtZW50cykgYXMgUGxhaXRHcm91cFtdO1xuICAgICAgICBpZiAoZ3JhbmRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBncm91cHMucHVzaCguLi5ncmFuZEdyb3Vwcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwcyBhcyBQbGFpdEdyb3VwW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwIGFzIFBsYWl0R3JvdXA7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaGl0RWxlbWVudEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgaWYgKGhpdEVsZW1lbnRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBoaXRFbGVtZW50R3JvdXBzW2hpdEVsZW1lbnRHcm91cHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzSW5Hcm91cEJ5RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaGlnaGVzdEdyb3VwID0gZ2V0SGlnaGVzdEdyb3VwKGJvYXJkLCBlbGVtZW50KTtcbiAgICBpZiAoaGlnaGVzdEdyb3VwKSB7XG4gICAgICAgIHJldHVybiBnZXRBbGxFbGVtZW50c0luR3JvdXAoYm9hcmQsIGhpZ2hlc3RHcm91cCwgdHJ1ZSkgYXMgUGxhaXRHcm91cFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbZWxlbWVudF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRFbGVtZW50T3JHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBlbGVtZW50LCBlbGVtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLm1hcChpdGVtID0+IGl0ZW0uaWQpLmluY2x1ZGVzKGVsZW1lbnQuaWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRBbGxFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHRydWUpO1xuICAgIHJldHVybiBlbGVtZW50c0luR3JvdXAuZXZlcnkoaXRlbSA9PiBzZWxlY3RlZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IGVsZW1lbnQuaWQpLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJTZWxlY3RlZEdyb3VwcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXBzOiBQbGFpdEdyb3VwW10sIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pOiBQbGFpdEdyb3VwW10gPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzOiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBncm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRFbGVtZW50T3JHcm91cChib2FyZCwgaXRlbSwgZWxlbWVudHMpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEdyb3Vwcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkR3JvdXBzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKTogUGxhaXRHcm91cFtdID0+IHtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzLCBvcmlnaW5FbGVtZW50cyk7XG4gICAgY29uc3QgZ3JvdXBzOiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBoaWdoZXN0U2VsZWN0ZWRHcm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZ3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgaXRlbSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdyb3Vwcy5wdXNoKC4uLihlbGVtZW50c0luR3JvdXAuZmlsdGVyKGl0ZW0gPT4gUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSkgYXMgUGxhaXRHcm91cFtdKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBlbGVtZW50OiBQbGFpdEVsZW1lbnQsXG4gICAgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSxcbiAgICBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdXG4pOiBQbGFpdEdyb3VwIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgaGl0RWxlbWVudEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlLCBvcmlnaW5FbGVtZW50cykgYXMgUGxhaXRHcm91cFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZmlsdGVyU2VsZWN0ZWRHcm91cHMoYm9hcmQsIGhpdEVsZW1lbnRHcm91cHMsIGVsZW1lbnRzKTtcbiAgICBpZiAoc2VsZWN0ZWRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEdyb3Vwc1tzZWxlY3RlZEdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKTogUGxhaXRHcm91cFtdID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHM/Lmxlbmd0aCA/IGVsZW1lbnRzIDogZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5ncm91cElkKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtLCBlbGVtZW50cywgb3JpZ2luRWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKGdyb3VwICYmICFyZXN1bHQuaW5jbHVkZXMoZ3JvdXApKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cz8ubGVuZ3RoID8gZWxlbWVudHMgOiBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBzZWxlY3RlZEVsZW1lbnRzXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSlcbiAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzQ2FuQWRkVG9Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyhib2FyZCwgZWxlbWVudHMpO1xuICAgIHJldHVybiBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gYm9hcmQuY2FuQWRkVG9Hcm91cChpdGVtKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gWy4uLmdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCwgZWxlbWVudHMpLCAuLi5nZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKV07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBSZWN0YW5nbGVHID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10pOiBTVkdHRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudElkcyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgIGxldCBncm91cFJlY3RhbmdsZUc6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgaXNNb3ZpbmcgPSBpc1NlbGVjdGlvbk1vdmluZyhib2FyZCk7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpc1JlbmRlciA9ICghc2VsZWN0ZWRFbGVtZW50SWRzLmluY2x1ZGVzKGl0ZW0uaWQpICYmICFpc01vdmluZykgfHwgaXNNb3Zpbmc7XG4gICAgICAgIGlmIChpdGVtLmdyb3VwSWQgJiYgaXNSZW5kZXIpIHtcbiAgICAgICAgICAgIGlmICghZ3JvdXBSZWN0YW5nbGVHKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBSZWN0YW5nbGVHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZUcgPSBkcmF3UmVjdGFuZ2xlKGJvYXJkLCByZWN0YW5nbGUsIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZURhc2g6IFs1XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgICAgIHNldEFuZ2xlRm9yRyhyZWN0YW5nbGVHLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKSwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBSZWN0YW5nbGVHLmFwcGVuZChyZWN0YW5nbGVHKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBncm91cFJlY3RhbmdsZUc7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXAgPSAoZ3JvdXBJZD86IHN0cmluZyk6IFBsYWl0R3JvdXAgPT4ge1xuICAgIHJldHVybiBncm91cElkXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgICAgICAgIGdyb3VwSWRcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdncm91cCdcbiAgICAgICAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vbkdyb3VwSW5IaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuZXZlcnkoaXRlbSA9PiAhaXRlbS5ncm91cElkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5ncm91cElkICYmIGl0ZW0uZ3JvdXBJZCA9PT0gZWxlbWVudHNbMF0uZ3JvdXBJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2FuQWRkR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IGdldEhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gYm9hcmQuY2FuQWRkVG9Hcm91cChpdGVtKSk7XG4gICAgaWYgKHJvb3RFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBub25Hcm91cEluSGlnaGVzdFNlbGVjdGVkRWxlbWVudHMocm9vdEVsZW1lbnRzKSB8fCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAocm9vdEVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhblJlbW92ZUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzLCBvcmlnaW5FbGVtZW50cyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRHcm91cHMubGVuZ3RoID4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFZGl0aW5nR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgbGV0IGVkaXRpbmdHcm91cCA9IG51bGw7XG4gICAgaWYgKGdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZWRpdGluZ0dyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlZGl0aW5nR3JvdXA7XG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUVsZW1lbnRzVG9OZXdQYXRoQWZ0ZXJBZGRHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG5ld1BhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBtb3ZlRWxlbWVudHMgPSBbLi4uc2VsZWN0ZWRFbGVtZW50c107XG4gICAgc29ydEVsZW1lbnRzKGJvYXJkLCBtb3ZlRWxlbWVudHMpO1xuICAgIG1vdmVFbGVtZW50cy5wb3AoKTtcbiAgICBtb3ZlRWxlbWVudHNUb05ld1BhdGgoXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBtb3ZlRWxlbWVudHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1BhdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcbn07XG4iXX0=
@@ -1,68 +0,0 @@
1
- export function isNullOrUndefined(value) {
2
- return value === null || value === undefined;
3
- }
4
- /**
5
- * get {x,y} point
6
- * @param point
7
- * @returns point
8
- */
9
- export function normalizePoint(point) {
10
- return Array.isArray(point)
11
- ? {
12
- x: point[0],
13
- y: point[1]
14
- }
15
- : point;
16
- }
17
- export const RgbaToHEX = (Rgb, opacity) => {
18
- return Rgb + Math.floor(opacity * 255).toString(16);
19
- };
20
- export function isContextmenu(event) {
21
- return event.button === 2;
22
- }
23
- export function uniqueById(elements) {
24
- const uniqueMap = new Map();
25
- elements.forEach(item => {
26
- if (!uniqueMap.has(item.id)) {
27
- uniqueMap.set(item.id, item);
28
- }
29
- });
30
- return Array.from(uniqueMap.values());
31
- }
32
- export const findLastIndex = (array, cb, fromIndex = array.length - 1) => {
33
- if (fromIndex < 0) {
34
- fromIndex = array.length + fromIndex;
35
- }
36
- fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));
37
- let index = fromIndex + 1;
38
- while (--index > -1) {
39
- if (cb(array[index], index, array)) {
40
- return index;
41
- }
42
- }
43
- return -1;
44
- };
45
- export const findIndex = (array, cb, fromIndex = 0) => {
46
- // fromIndex = 2
47
- if (fromIndex < 0) {
48
- fromIndex = array.length + fromIndex;
49
- }
50
- fromIndex = Math.min(array.length, Math.max(fromIndex, 0));
51
- let index = fromIndex - 1;
52
- while (++index < array.length) {
53
- if (cb(array[index], index, array)) {
54
- return index;
55
- }
56
- }
57
- return -1;
58
- };
59
- export const isIndicesContinuous = (indexes) => {
60
- indexes.sort((a, b) => a - b);
61
- for (let i = 1; i < indexes.length; i++) {
62
- if (indexes[i] !== indexes[i - 1] + 1) {
63
- return false;
64
- }
65
- }
66
- return true;
67
- };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQ3hDLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFlO0lBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1lBQ0ksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNkO1FBQ0gsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWlCO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBd0I7SUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU1QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUN6QixLQUFtQixFQUNuQixFQUErRCxFQUMvRCxZQUFvQixLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdEMsRUFBRTtJQUNBLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2hCLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3JCLEtBQW1CLEVBQ25CLEVBQStELEVBQy9ELFlBQW9CLENBQUMsRUFDdkIsRUFBRTtJQUNBLGdCQUFnQjtJQUNoQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQixTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUNELFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLEtBQUssR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQWlCLEVBQVcsRUFBRTtJQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIGdldCB7eCx5fSBwb2ludFxuICogQHBhcmFtIHBvaW50XG4gKiBAcmV0dXJucyBwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUG9pbnQocG9pbnQ6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocG9pbnQpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICB4OiBwb2ludFswXSxcbiAgICAgICAgICAgICAgeTogcG9pbnRbMV1cbiAgICAgICAgICB9XG4gICAgICAgIDogcG9pbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBSZ2JhVG9IRVggPSAoUmdiOiBzdHJpbmcsIG9wYWNpdHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBSZ2IgKyBNYXRoLmZsb29yKG9wYWNpdHkgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHRtZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUJ5SWQoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSB7XG4gICAgY29uc3QgdW5pcXVlTWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKCF1bmlxdWVNYXAuaGFzKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgICB1bmlxdWVNYXAuc2V0KGl0ZW0uaWQsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVNYXAudmFsdWVzKCkpO1xufVxuXG5leHBvcnQgY29uc3QgZmluZExhc3RJbmRleCA9IDxUPihcbiAgICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICAgIGNiOiAoZWxlbWVudDogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IHJlYWRvbmx5IFRbXSkgPT4gYm9vbGVhbixcbiAgICBmcm9tSW5kZXg6IG51bWJlciA9IGFycmF5Lmxlbmd0aCAtIDFcbikgPT4ge1xuICAgIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgICB9XG4gICAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoIC0gMSwgTWF0aC5tYXgoZnJvbUluZGV4LCAwKSk7XG4gICAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICB3aGlsZSAoLS1pbmRleCA+IC0xKSB7XG4gICAgICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZEluZGV4ID0gPFQ+KFxuICAgIGFycmF5OiByZWFkb25seSBUW10sXG4gICAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICAgIGZyb21JbmRleDogbnVtYmVyID0gMFxuKSA9PiB7XG4gICAgLy8gZnJvbUluZGV4ID0gMlxuICAgIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgICB9XG4gICAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgICBsZXQgaW5kZXggPSBmcm9tSW5kZXggLSAxO1xuICAgIHdoaWxlICgrK2luZGV4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJbmRpY2VzQ29udGludW91cyA9IChpbmRleGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgIGluZGV4ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXhlc1tpXSAhPT0gaW5kZXhlc1tpIC0gMV0gKyAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuIl19
@@ -1,96 +0,0 @@
1
- // Credits to slate - https://github.com/ianstormtaylor/slate
2
- import { MERGING, SAVING, SPLITTING_ONCE } from '../interfaces';
3
- /**
4
- * Check whether to merge an operation into the previous operation.
5
- */
6
- export const shouldMerge = (op, prev) => {
7
- if (op.type === 'set_viewport' && op.type === prev?.type) {
8
- return true;
9
- }
10
- return false;
11
- };
12
- /**
13
- * Check whether an operation needs to be saved to the history.
14
- */
15
- export const shouldSave = (op, prev) => {
16
- if (op.type === 'set_selection' || op.type === 'set_viewport') {
17
- return false;
18
- }
19
- return true;
20
- };
21
- /**
22
- * Check whether an operation should clear the redos stack.
23
- */
24
- export const shouldClear = (op) => {
25
- if (op.type === 'set_selection') {
26
- return false;
27
- }
28
- return true;
29
- };
30
- export const PlaitHistoryBoard = {
31
- /**
32
- * Get the saving flag's current value.
33
- */
34
- isSaving(board) {
35
- return SAVING.get(board);
36
- },
37
- /**
38
- * Get the merge flag's current value.
39
- */
40
- isMerging(board) {
41
- return MERGING.get(board);
42
- },
43
- /**
44
- * Get the splitting once flag's current value.
45
- */
46
- isSplittingOnce(board) {
47
- return SPLITTING_ONCE.get(board);
48
- },
49
- setSplittingOnce(board, value) {
50
- SPLITTING_ONCE.set(board, value);
51
- },
52
- /**
53
- * Apply a series of changes inside a synchronous `fn`, These operations will
54
- * be merged into the previous history.
55
- */
56
- withMerging(board, fn) {
57
- const prev = PlaitHistoryBoard.isMerging(board);
58
- MERGING.set(board, true);
59
- fn();
60
- MERGING.set(board, prev);
61
- },
62
- /**
63
- * Apply a series of changes inside a synchronous `fn`, ensuring that the first
64
- * operation starts a new batch in the history. Subsequent operations will be
65
- * merged as usual.
66
- */
67
- withNewBatch(board, fn) {
68
- const prev = PlaitHistoryBoard.isMerging(board);
69
- MERGING.set(board, true);
70
- SPLITTING_ONCE.set(board, true);
71
- fn();
72
- MERGING.set(board, prev);
73
- SPLITTING_ONCE.delete(board);
74
- },
75
- /**
76
- * Apply a series of changes inside a synchronous `fn`, without merging any of
77
- * the new operations into previous save point in the history.
78
- */
79
- withoutMerging(board, fn) {
80
- const prev = PlaitHistoryBoard.isMerging(board);
81
- MERGING.set(board, false);
82
- fn();
83
- MERGING.set(board, prev);
84
- },
85
- /**
86
- * Apply a series of changes inside a synchronous `fn`, without saving any of
87
- * their operations into the history.
88
- */
89
- withoutSaving(board, fn) {
90
- const prev = PlaitHistoryBoard.isSaving(board);
91
- SAVING.set(board, false);
92
- fn();
93
- SAVING.set(board, prev);
94
- }
95
- };
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2hpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQThCLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUY7O0dBRUc7QUFFSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFrQixFQUFFLElBQWdDLEVBQVcsRUFBRTtJQUN6RixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUVILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQWtCLEVBQUUsSUFBZ0MsRUFBVyxFQUFFO0lBQ3hGLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFrQixFQUFXLEVBQUU7SUFDdkQsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUM3Qjs7T0FFRztJQUNILFFBQVEsQ0FBQyxLQUFpQjtRQUN0QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBRUgsU0FBUyxDQUFDLEtBQWlCO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFFSCxlQUFlLENBQUMsS0FBaUI7UUFDN0IsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLEtBQTBCO1FBQzFELGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBaUIsRUFBRSxFQUFjO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixFQUFFLEVBQUUsQ0FBQztRQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLEtBQWlCLEVBQUUsRUFBYztRQUMxQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsRUFBRSxFQUFFLENBQUM7UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFFSCxjQUFjLENBQUMsS0FBaUIsRUFBRSxFQUFjO1FBQzVDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQixFQUFFLEVBQUUsQ0FBQztRQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRDs7O09BR0c7SUFFSCxhQUFhLENBQUMsS0FBaUIsRUFBRSxFQUFjO1FBQzNDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QixFQUFFLEVBQUUsQ0FBQztRQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlZGl0cyB0byBzbGF0ZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9pYW5zdG9ybXRheWxvci9zbGF0ZVxuXG5pbXBvcnQgeyBNRVJHSU5HLCBQbGFpdEJvYXJkLCBQbGFpdE9wZXJhdGlvbiwgU0FWSU5HLCBTUExJVFRJTkdfT05DRSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdG8gbWVyZ2UgYW4gb3BlcmF0aW9uIGludG8gdGhlIHByZXZpb3VzIG9wZXJhdGlvbi5cbiAqL1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkTWVyZ2UgPSAob3A6IFBsYWl0T3BlcmF0aW9uLCBwcmV2OiBQbGFpdE9wZXJhdGlvbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChvcC50eXBlID09PSAnc2V0X3ZpZXdwb3J0JyAmJiBvcC50eXBlID09PSBwcmV2Py50eXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb3BlcmF0aW9uIG5lZWRzIHRvIGJlIHNhdmVkIHRvIHRoZSBoaXN0b3J5LlxuICovXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTYXZlID0gKG9wOiBQbGFpdE9wZXJhdGlvbiwgcHJldjogUGxhaXRPcGVyYXRpb24gfCB1bmRlZmluZWQpOiBib29sZWFuID0+IHtcbiAgICBpZiAob3AudHlwZSA9PT0gJ3NldF9zZWxlY3Rpb24nIHx8IG9wLnR5cGUgPT09ICdzZXRfdmlld3BvcnQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvcGVyYXRpb24gc2hvdWxkIGNsZWFyIHRoZSByZWRvcyBzdGFjay5cbiAqL1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xlYXIgPSAob3A6IFBsYWl0T3BlcmF0aW9uKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKG9wLnR5cGUgPT09ICdzZXRfc2VsZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhaXRIaXN0b3J5Qm9hcmQgPSB7XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzYXZpbmcgZmxhZydzIGN1cnJlbnQgdmFsdWUuXG4gICAgICovXG4gICAgaXNTYXZpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIFNBVklORy5nZXQoYm9hcmQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG1lcmdlIGZsYWcncyBjdXJyZW50IHZhbHVlLlxuICAgICAqL1xuXG4gICAgaXNNZXJnaW5nKGJvYXJkOiBQbGFpdEJvYXJkKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBNRVJHSU5HLmdldChib2FyZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3BsaXR0aW5nIG9uY2UgZmxhZydzIGN1cnJlbnQgdmFsdWUuXG4gICAgICovXG5cbiAgICBpc1NwbGl0dGluZ09uY2UoYm9hcmQ6IFBsYWl0Qm9hcmQpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIFNQTElUVElOR19PTkNFLmdldChib2FyZCk7XG4gICAgfSxcblxuICAgIHNldFNwbGl0dGluZ09uY2UoYm9hcmQ6IFBsYWl0Qm9hcmQsIHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIFNQTElUVElOR19PTkNFLnNldChib2FyZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBhIHNlcmllcyBvZiBjaGFuZ2VzIGluc2lkZSBhIHN5bmNocm9ub3VzIGBmbmAsIFRoZXNlIG9wZXJhdGlvbnMgd2lsbFxuICAgICAqIGJlIG1lcmdlZCBpbnRvIHRoZSBwcmV2aW91cyBoaXN0b3J5LlxuICAgICAqL1xuICAgIHdpdGhNZXJnaW5nKGJvYXJkOiBQbGFpdEJvYXJkLCBmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gUGxhaXRIaXN0b3J5Qm9hcmQuaXNNZXJnaW5nKGJvYXJkKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHRydWUpO1xuICAgICAgICBmbigpO1xuICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgcHJldik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGEgc2VyaWVzIG9mIGNoYW5nZXMgaW5zaWRlIGEgc3luY2hyb25vdXMgYGZuYCwgZW5zdXJpbmcgdGhhdCB0aGUgZmlyc3RcbiAgICAgKiBvcGVyYXRpb24gc3RhcnRzIGEgbmV3IGJhdGNoIGluIHRoZSBoaXN0b3J5LiBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgd2lsbCBiZVxuICAgICAqIG1lcmdlZCBhcyB1c3VhbC5cbiAgICAgKi9cbiAgICB3aXRoTmV3QmF0Y2goYm9hcmQ6IFBsYWl0Qm9hcmQsIGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBQbGFpdEhpc3RvcnlCb2FyZC5pc01lcmdpbmcoYm9hcmQpO1xuICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgdHJ1ZSk7XG4gICAgICAgIFNQTElUVElOR19PTkNFLnNldChib2FyZCwgdHJ1ZSk7XG4gICAgICAgIGZuKCk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCBwcmV2KTtcbiAgICAgICAgU1BMSVRUSU5HX09OQ0UuZGVsZXRlKGJvYXJkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBzZXJpZXMgb2YgY2hhbmdlcyBpbnNpZGUgYSBzeW5jaHJvbm91cyBgZm5gLCB3aXRob3V0IG1lcmdpbmcgYW55IG9mXG4gICAgICogdGhlIG5ldyBvcGVyYXRpb25zIGludG8gcHJldmlvdXMgc2F2ZSBwb2ludCBpbiB0aGUgaGlzdG9yeS5cbiAgICAgKi9cblxuICAgIHdpdGhvdXRNZXJnaW5nKGJvYXJkOiBQbGFpdEJvYXJkLCBmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gUGxhaXRIaXN0b3J5Qm9hcmQuaXNNZXJnaW5nKGJvYXJkKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgZm4oKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHByZXYpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBzZXJpZXMgb2YgY2hhbmdlcyBpbnNpZGUgYSBzeW5jaHJvbm91cyBgZm5gLCB3aXRob3V0IHNhdmluZyBhbnkgb2ZcbiAgICAgKiB0aGVpciBvcGVyYXRpb25zIGludG8gdGhlIGhpc3RvcnkuXG4gICAgICovXG5cbiAgICB3aXRob3V0U2F2aW5nKGJvYXJkOiBQbGFpdEJvYXJkLCBmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gUGxhaXRIaXN0b3J5Qm9hcmQuaXNTYXZpbmcoYm9hcmQpO1xuICAgICAgICBTQVZJTkcuc2V0KGJvYXJkLCBmYWxzZSk7XG4gICAgICAgIGZuKCk7XG4gICAgICAgIFNBVklORy5zZXQoYm9hcmQsIHByZXYpO1xuICAgIH1cbn07XG4iXX0=
@@ -1,109 +0,0 @@
1
- import { isKeyHotkey } from 'is-hotkey';
2
- import { IS_APPLE } from './environment';
3
- /**
4
- * Hotkey mappings for each platform.
5
- */
6
- const HOTKEYS = {
7
- bold: 'mod+b',
8
- compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],
9
- arrow: ['down', 'left', 'right', 'up'],
10
- extendArrow: ['shift+down', 'shift+left', 'shift+right', 'shift+up'],
11
- moveBackward: 'left',
12
- moveForward: 'right',
13
- moveUp: 'up',
14
- moveDown: 'down',
15
- moveWordBackward: 'ctrl+left',
16
- moveWordForward: 'ctrl+right',
17
- deleteBackward: 'shift?+backspace',
18
- deleteForward: 'shift?+delete',
19
- extendBackward: 'shift+left',
20
- extendForward: 'shift+right',
21
- extendUp: 'shift+up',
22
- extendDown: 'shift+down',
23
- italic: 'mod+i',
24
- splitBlock: 'shift?+enter',
25
- undo: 'mod+z',
26
- shift: 'shift'
27
- };
28
- const APPLE_HOTKEYS = {
29
- moveLineBackward: 'opt+up',
30
- moveLineForward: 'opt+down',
31
- moveWordBackward: 'opt+left',
32
- moveWordForward: 'opt+right',
33
- deleteBackward: ['ctrl+backspace', 'ctrl+h'],
34
- deleteForward: ['ctrl+delete', 'ctrl+d'],
35
- deleteLineBackward: 'cmd+shift?+backspace',
36
- deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],
37
- deleteWordBackward: 'opt+shift?+backspace',
38
- deleteWordForward: 'opt+shift?+delete',
39
- extendLineBackward: 'opt+shift+up',
40
- extendLineForward: 'opt+shift+down',
41
- redo: 'cmd+shift+z',
42
- transposeCharacter: 'ctrl+t'
43
- };
44
- const WINDOWS_HOTKEYS = {
45
- deleteWordBackward: 'ctrl+shift?+backspace',
46
- deleteWordForward: 'ctrl+shift?+delete',
47
- redo: ['ctrl+y', 'ctrl+shift+z']
48
- };
49
- /**
50
- * Create a platform-aware hotkey checker.
51
- */
52
- const create = (key) => {
53
- const generic = HOTKEYS[key];
54
- const apple = APPLE_HOTKEYS[key];
55
- const windows = WINDOWS_HOTKEYS[key];
56
- const isGeneric = generic && isKeyHotkey(generic);
57
- const isApple = apple && isKeyHotkey(apple);
58
- const isWindows = windows && isKeyHotkey(windows);
59
- return (event) => {
60
- if (isGeneric && isGeneric(event)) {
61
- return true;
62
- }
63
- if (IS_APPLE && isApple && isApple(event)) {
64
- return true;
65
- }
66
- if (!IS_APPLE && isWindows && isWindows(event)) {
67
- return true;
68
- }
69
- return false;
70
- };
71
- };
72
- /**
73
- * Hotkeys.
74
- */
75
- const hotkeys = {
76
- isBold: create('bold'),
77
- isCompose: create('compose'),
78
- isArrow: create('arrow'),
79
- isMoveBackward: create('moveBackward'),
80
- isMoveForward: create('moveForward'),
81
- isMoveUp: create('moveUp'),
82
- isMoveDown: create('moveDown'),
83
- isDeleteBackward: create('deleteBackward'),
84
- isDeleteForward: create('deleteForward'),
85
- isDeleteLineBackward: create('deleteLineBackward'),
86
- isDeleteLineForward: create('deleteLineForward'),
87
- isDeleteWordBackward: create('deleteWordBackward'),
88
- isDeleteWordForward: create('deleteWordForward'),
89
- isExtendBackward: create('extendBackward'),
90
- isExtendForward: create('extendForward'),
91
- isExtendUp: create('extendUp'),
92
- isExtendDown: create('extendDown'),
93
- isExtendArrow: create('extendArrow'),
94
- isExtendLineBackward: create('extendLineBackward'),
95
- isExtendLineForward: create('extendLineForward'),
96
- isItalic: create('italic'),
97
- isMoveLineBackward: create('moveLineBackward'),
98
- isMoveLineForward: create('moveLineForward'),
99
- isMoveWordBackward: create('moveWordBackward'),
100
- isMoveWordForward: create('moveWordForward'),
101
- isRedo: create('redo'),
102
- isSplitBlock: create('splitBlock'),
103
- isTransposeCharacter: create('transposeCharacter'),
104
- isUndo: create('undo'),
105
- isShift: create('shift')
106
- };
107
- export default hotkeys;
108
- export { hotkeys };
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2hvdGtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDOztHQUVHO0FBRUgsTUFBTSxPQUFPLEdBQVE7SUFDakIsSUFBSSxFQUFFLE9BQU87SUFDYixPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQztJQUM5RCxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDdEMsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO0lBQ3BFLFlBQVksRUFBRSxNQUFNO0lBQ3BCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLE1BQU0sRUFBRSxJQUFJO0lBQ1osUUFBUSxFQUFFLE1BQU07SUFDaEIsZ0JBQWdCLEVBQUUsV0FBVztJQUM3QixlQUFlLEVBQUUsWUFBWTtJQUM3QixjQUFjLEVBQUUsa0JBQWtCO0lBQ2xDLGFBQWEsRUFBRSxlQUFlO0lBQzlCLGNBQWMsRUFBRSxZQUFZO0lBQzVCLGFBQWEsRUFBRSxhQUFhO0lBQzVCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE1BQU0sRUFBRSxPQUFPO0lBQ2YsVUFBVSxFQUFFLGNBQWM7SUFDMUIsSUFBSSxFQUFFLE9BQU87SUFDYixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQVE7SUFDdkIsZ0JBQWdCLEVBQUUsUUFBUTtJQUMxQixlQUFlLEVBQUUsVUFBVTtJQUMzQixnQkFBZ0IsRUFBRSxV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QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNwQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CLENBQUM7SUFDbEQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQ2hELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQzFCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUM5QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDNUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQzlDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUM1QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN0QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CLENBQUM7SUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7Q0FDM0IsQ0FBQztBQUNGLGVBQWUsT0FBTyxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcbmltcG9ydCB7IElTX0FQUExFIH0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbi8qKlxuICogSG90a2V5IG1hcHBpbmdzIGZvciBlYWNoIHBsYXRmb3JtLlxuICovXG5cbmNvbnN0IEhPVEtFWVM6IGFueSA9IHtcbiAgICBib2xkOiAnbW9kK2InLFxuICAgIGNvbXBvc2U6IFsnZG93bicsICdsZWZ0JywgJ3JpZ2h0JywgJ3VwJywgJ2JhY2tzcGFjZScsICdlbnRlciddLFxuICAgIGFycm93OiBbJ2Rvd24nLCAnbGVmdCcsICdyaWdodCcsICd1cCddLFxuICAgIGV4dGVuZEFycm93OiBbJ3NoaWZ0K2Rvd24nLCAnc2hpZnQrbGVmdCcsICdzaGlmdCtyaWdodCcsICdzaGlmdCt1cCddLFxuICAgIG1vdmVCYWNrd2FyZDogJ2xlZnQnLFxuICAgIG1vdmVGb3J3YXJkOiAncmlnaHQnLFxuICAgIG1vdmVVcDogJ3VwJyxcbiAgICBtb3ZlRG93bjogJ2Rvd24nLFxuICAgIG1vdmVXb3JkQmFja3dhcmQ6ICdjdHJsK2xlZnQnLFxuICAgIG1vdmVXb3JkRm9yd2FyZDogJ2N0cmwrcmlnaHQnLFxuICAgIGRlbGV0ZUJhY2t3YXJkOiAnc2hpZnQ/K2JhY2tzcGFjZScsXG4gICAgZGVsZXRlRm9yd2FyZDogJ3NoaWZ0PytkZWxldGUnLFxuICAgIGV4dGVuZEJhY2t3YXJkOiAnc2hpZnQrbGVmdCcsXG4gICAgZXh0ZW5kRm9yd2FyZDogJ3NoaWZ0K3JpZ2h0JyxcbiAgICBleHRlbmRVcDogJ3NoaWZ0K3VwJyxcbiAgICBleHRlbmREb3duOiAnc2hpZnQrZG93bicsXG4gICAgaXRhbGljOiAnbW9kK2knLFxuICAgIHNwbGl0QmxvY2s6ICdzaGlmdD8rZW50ZXInLFxuICAgIHVuZG86ICdtb2QreicsXG4gICAgc2hpZnQ6ICdzaGlmdCdcbn07XG5cbmNvbnN0IEFQUExFX0hPVEtFWVM6IGFueSA9IHtcbiAgICBtb3ZlTGluZUJhY2t3YXJkOiAnb3B0K3VwJyxcbiAgICBtb3ZlTGluZUZvcndhcmQ6ICdvcHQrZG93bicsXG4gICAgbW92ZVdvcmRCYWNrd2FyZDogJ29wdCtsZWZ0JyxcbiAgICBtb3ZlV29yZEZvcndhcmQ6ICdvcHQrcmlnaHQnLFxuICAgIGRlbGV0ZUJhY2t3YXJkOiBbJ2N0cmwrYmFja3NwYWNlJywgJ2N0cmwraCddLFxuICAgIGRlbGV0ZUZvcndhcmQ6IFsnY3RybCtkZWxldGUnLCAnY3RybCtkJ10sXG4gICAgZGVsZXRlTGluZUJhY2t3YXJkOiAnY21kK3NoaWZ0PytiYWNrc3BhY2UnLFxuICAgIGRlbGV0ZUxpbmVGb3J3YXJkOiBbJ2NtZCtzaGlmdD8rZGVsZXRlJywgJ2N0cmwrayddLFxuICAgIGRlbGV0ZVdvcmRCYWNrd2FyZDogJ29wdCtzaGlmdD8rYmFja3NwYWNlJyxcbiAgICBkZWxldGVXb3JkRm9yd2FyZDogJ29wdCtzaGlmdD8rZGVsZXRlJyxcbiAgICBleHRlbmRMaW5lQmFja3dhcmQ6ICdvcHQrc2hpZnQrdXAnLFxuICAgIGV4dGVuZExpbmVGb3J3YXJkOiAnb3B0K3NoaWZ0K2Rvd24nLFxuICAgIHJlZG86ICdjbWQrc2hpZnQreicsXG4gICAgdHJhbnNwb3NlQ2hhcmFjdGVyOiAnY3RybCt0J1xufTtcblxuY29uc3QgV0lORE9XU19IT1RLRVlTOiBhbnkgPSB7XG4gICAgZGVsZXRlV29yZEJhY2t3YXJkOiAnY3RybCtzaGlmdD8rYmFja3NwYWNlJyxcbiAgICBkZWxldGVXb3JkRm9yd2FyZDogJ2N0cmwrc2hpZnQ/K2RlbGV0ZScsXG4gICAgcmVkbzogWydjdHJsK3knLCAnY3RybCtzaGlmdCt6J11cbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcGxhdGZvcm0tYXdhcmUgaG90a2V5IGNoZWNrZXIuXG4gKi9cblxuY29uc3QgY3JlYXRlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZ2VuZXJpYyA9IEhPVEtFWVNba2V5XTtcbiAgICBjb25zdCBhcHBsZSA9IEFQUExFX0hPVEtFWVNba2V5XTtcbiAgICBjb25zdCB3aW5kb3dzID0gV0lORE9XU19IT1RLRVlTW2tleV07XG4gICAgY29uc3QgaXNHZW5lcmljID0gZ2VuZXJpYyAmJiBpc0tleUhvdGtleShnZW5lcmljKTtcbiAgICBjb25zdCBpc0FwcGxlID0gYXBwbGUgJiYgaXNLZXlIb3RrZXkoYXBwbGUpO1xuICAgIGNvbnN0IGlzV2luZG93cyA9IHdpbmRvd3MgJiYgaXNLZXlIb3RrZXkod2luZG93cyk7XG5cbiAgICByZXR1cm4gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChpc0dlbmVyaWMgJiYgaXNHZW5lcmljKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0FQUExFICYmIGlzQXBwbGUgJiYgaXNBcHBsZShldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghSVNfQVBQTEUgJiYgaXNXaW5kb3dzICYmIGlzV2luZG93cyhldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBIb3RrZXlzLlxuICovXG5cbmNvbnN0IGhvdGtleXMgPSB7XG4gICAgaXNCb2xkOiBjcmVhdGUoJ2JvbGQnKSxcbiAgICBpc0NvbXBvc2U6IGNyZWF0ZSgnY29tcG9zZScpLFxuICAgIGlzQXJyb3c6IGNyZWF0ZSgnYXJyb3cnKSxcbiAgICBpc01vdmVCYWNrd2FyZDogY3JlYXRlKCdtb3ZlQmFja3dhcmQnKSxcbiAgICBpc01vdmVGb3J3YXJkOiBjcmVhdGUoJ21vdmVGb3J3YXJkJyksXG4gICAgaXNNb3ZlVXA6IGNyZWF0ZSgnbW92ZVVwJyksXG4gICAgaXNNb3ZlRG93bjogY3JlYXRlKCdtb3ZlRG93bicpLFxuICAgIGlzRGVsZXRlQmFja3dhcmQ6IGNyZWF0ZSgnZGVsZXRlQmFja3dhcmQnKSxcbiAgICBpc0RlbGV0ZUZvcndhcmQ6IGNyZWF0ZSgnZGVsZXRlRm9yd2FyZCcpLFxuICAgIGlzRGVsZXRlTGluZUJhY2t3YXJkOiBjcmVhdGUoJ2RlbGV0ZUxpbmVCYWNrd2FyZCcpLFxuICAgIGlzRGVsZXRlTGluZUZvcndhcmQ6IGNyZWF0ZSgnZGVsZXRlTGluZUZvcndhcmQnKSxcbiAgICBpc0RlbGV0ZVdvcmRCYWNrd2FyZDogY3JlYXRlKCdkZWxldGVXb3JkQmFja3dhcmQnKSxcbiAgICBpc0RlbGV0ZVdvcmRGb3J3YXJkOiBjcmVhdGUoJ2RlbGV0ZVdvcmRGb3J3YXJkJyksXG4gICAgaXNFeHRlbmRCYWNrd2FyZDogY3JlYXRlKCdleHRlbmRCYWNrd2FyZCcpLFxuICAgIGlzRXh0ZW5kRm9yd2FyZDogY3JlYXRlKCdleHRlbmRGb3J3YXJkJyksXG4gICAgaXNFeHRlbmRVcDogY3JlYXRlKCdleHRlbmRVcCcpLFxuICAgIGlzRXh0ZW5kRG93bjogY3JlYXRlKCdleHRlbmREb3duJyksXG4gICAgaXNFeHRlbmRBcnJvdzogY3JlYXRlKCdleHRlbmRBcnJvdycpLFxuICAgIGlzRXh0ZW5kTGluZUJhY2t3YXJkOiBjcmVhdGUoJ2V4dGVuZExpbmVCYWNrd2FyZCcpLFxuICAgIGlzRXh0ZW5kTGluZUZvcndhcmQ6IGNyZWF0ZSgnZXh0ZW5kTGluZUZvcndhcmQnKSxcbiAgICBpc0l0YWxpYzogY3JlYXRlKCdpdGFsaWMnKSxcbiAgICBpc01vdmVMaW5lQmFja3dhcmQ6IGNyZWF0ZSgnbW92ZUxpbmVCYWNrd2FyZCcpLFxuICAgIGlzTW92ZUxpbmVGb3J3YXJkOiBjcmVhdGUoJ21vdmVMaW5lRm9yd2FyZCcpLFxuICAgIGlzTW92ZVdvcmRCYWNrd2FyZDogY3JlYXRlKCdtb3ZlV29yZEJhY2t3YXJkJyksXG4gICAgaXNNb3ZlV29yZEZvcndhcmQ6IGNyZWF0ZSgnbW92ZVdvcmRGb3J3YXJkJyksXG4gICAgaXNSZWRvOiBjcmVhdGUoJ3JlZG8nKSxcbiAgICBpc1NwbGl0QmxvY2s6IGNyZWF0ZSgnc3BsaXRCbG9jaycpLFxuICAgIGlzVHJhbnNwb3NlQ2hhcmFjdGVyOiBjcmVhdGUoJ3RyYW5zcG9zZUNoYXJhY3RlcicpLFxuICAgIGlzVW5kbzogY3JlYXRlKCd1bmRvJyksXG4gICAgaXNTaGlmdDogY3JlYXRlKCdzaGlmdCcpXG59O1xuZXhwb3J0IGRlZmF1bHQgaG90a2V5cztcbmV4cG9ydCB7IGhvdGtleXMgfTtcbiJdfQ==
@@ -1,11 +0,0 @@
1
- export function idCreator(length = 5) {
2
- // remove numeral
3
- const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /**** Easily confusing characters are removed by default oOLl,9gq,Vv,Uu,I1****/
4
- const maxPosition = $chars.length;
5
- let key = '';
6
- for (let i = 0; i < length; i++) {
7
- key += $chars.charAt(Math.floor(Math.random() * maxPosition));
8
- }
9
- return key;
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2lkLWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztJQUNoQyxpQkFBaUI7SUFDakIsTUFBTSxNQUFNLEdBQUcsMkNBQTJDLENBQUMsQ0FBQywrRUFBK0U7SUFDM0ksTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGlkQ3JlYXRvcihsZW5ndGggPSA1KSB7XG4gICAgLy8gcmVtb3ZlIG51bWVyYWxcbiAgICBjb25zdCAkY2hhcnMgPSAnQUJDREVGR0hKS01OUFFSU1RXWFlaYWJjZGVmaGlqa21ucHJzdHd4eXonOyAvKioqKiBFYXNpbHkgY29uZnVzaW5nIGNoYXJhY3RlcnMgYXJlIHJlbW92ZWQgYnkgZGVmYXVsdCBvT0xsLDlncSxWdixVdSxJMSoqKiovXG4gICAgY29uc3QgbWF4UG9zaXRpb24gPSAkY2hhcnMubGVuZ3RoO1xuICAgIGxldCBrZXkgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGtleSArPSAkY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heFBvc2l0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG59XG4iXX0=