kfb-view 3.0.8 → 3.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/kfb-view.js +1 -1
- package/lib/kfb-view.js.LICENSE.txt +3 -3
- package/package.json +3 -2
- package/src/components/area/index.js +38 -48
- package/src/components/board/index.js +1 -1
- package/src/components/common/common.js +0 -67
- package/src/plugin/openseadragon/openseadragon.js +667 -126
- package/src/util/calculate.js +79 -35
- package/src/util/imageData.js +0 -5
- package/src/view.js +6 -6
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/git_toolbox_prj.xml +0 -20
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/inspectionProfiles/profiles_settings.xml +0 -5
- package/.idea/kfb-view.iml +0 -12
- package/.idea/misc.xml +0 -86
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/.idea/watcherTasks.xml +0 -4
- package/.idea/workspace.xml +0 -874
- package/config/utils.js +0 -77
- package/config/webpack.base.conf.js +0 -95
- package/config/webpack.dev.conf.js +0 -80
- package/config/webpack.lib.conf.js +0 -92
- package/config/webpack.prod.conf.js +0 -102
- package/config/webpack.test.conf.js +0 -0
- package/example/index.js +0 -547
- package/example/label/check.svg +0 -8
- package/example/label/check_empty.svg +0 -9
- package/example/label/cross.svg +0 -6
- package/example/label/cross_empty.svg +0 -6
- package/example/label/delete.svg +0 -8
- package/example/label/delete_empty.svg +0 -8
- package/example/label/hasAudit.svg +0 -26
- package/example/style/index.css +0 -153
- package/example/worker/canvas.worker.js +0 -28
- package/test.html +0 -246
- package/yarn.lock +0 -7508
package/src/util/calculate.js
CHANGED
|
@@ -51,8 +51,20 @@ function getRectPoint(startPoint, endPoint, deg = 0) {
|
|
|
51
51
|
}];
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
/*
|
|
55
|
+
* 叉乘计算公式 a×b =(x1y2-x2y1)
|
|
56
|
+
* @param {Object} p1
|
|
57
|
+
* @param {Object} p2
|
|
58
|
+
* @return {number}
|
|
59
|
+
*/
|
|
60
|
+
function crossProduct(p1, p2) {
|
|
61
|
+
return p1.x * p2.y - p2.x * p1.y;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
54
65
|
/**
|
|
55
|
-
* 判断一个点是否在某条线段的一边上,就可以利用叉乘的方向性,
|
|
66
|
+
* 判断一个点是否在某条线段的一边上,就可以利用叉乘的方向性,AB X AC
|
|
67
|
+
* (B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y);
|
|
56
68
|
* @param {Object} p1
|
|
57
69
|
* @param {Object} p2
|
|
58
70
|
* @param {Object} p
|
|
@@ -69,6 +81,9 @@ function getCross(p1, p2, p) {
|
|
|
69
81
|
* @param {Object} p3
|
|
70
82
|
* @param {Object} p4
|
|
71
83
|
* @param {Object} p
|
|
84
|
+
* p1————p2
|
|
85
|
+
* | |
|
|
86
|
+
* p3————p4
|
|
72
87
|
* @return {boolean}
|
|
73
88
|
*/
|
|
74
89
|
function isPointInMatrix(p1, p2, p3, p4, p) {
|
|
@@ -78,6 +93,7 @@ function isPointInMatrix(p1, p2, p3, p4, p) {
|
|
|
78
93
|
|
|
79
94
|
/**
|
|
80
95
|
* 判断p是否在椭圆中
|
|
96
|
+
* x² / a² + y² / b² = 1 椭圆计算公式, <1点在椭圆内
|
|
81
97
|
* @param {Object} point 点
|
|
82
98
|
* @param {Object} center 椭圆中心
|
|
83
99
|
* @param {Number} a 长轴
|
|
@@ -107,7 +123,6 @@ function pointInOtherPoint(point, currentPoint, width = 10) {
|
|
|
107
123
|
/**
|
|
108
124
|
* 判断一个点是否在闭合的曲线内
|
|
109
125
|
* 从目标点引一条射线,判断这条线与曲线的交点个数为奇数还是偶数,为奇数表示点在曲线内,偶数表示点在曲线外。
|
|
110
|
-
* 向Y轴正方向引射线,判断射线与曲线的交点个数。
|
|
111
126
|
* @param {Object} p
|
|
112
127
|
* @param {Object[]} poly
|
|
113
128
|
* @return {boolean}
|
|
@@ -115,37 +130,67 @@ function pointInOtherPoint(point, currentPoint, width = 10) {
|
|
|
115
130
|
function isPointInPolygon(p, poly) {
|
|
116
131
|
const px = p.x;
|
|
117
132
|
const py = p.y;
|
|
118
|
-
let
|
|
133
|
+
let count = 0;
|
|
119
134
|
|
|
120
135
|
for (let i = 0, l = poly.length, j = l - 1; i < l; j = i, i++) {
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// 判断线段两端点是否在射线两侧
|
|
132
|
-
if ((sy < py && ty >= py) || (sy >= py && ty < py)) {
|
|
133
|
-
// 线段上与射线 Y 坐标相同的点的 X 坐标
|
|
134
|
-
const x = sx + (py - sy) * (tx - sx) / (ty - sy);
|
|
135
|
-
// 点在多边形的边上,8像素的偏差
|
|
136
|
-
if (Math.abs(x - px) < 10) {
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
136
|
+
const x0 = poly[j].x;
|
|
137
|
+
const y0 = poly[j].y;
|
|
138
|
+
const x1 = poly[i].x;
|
|
139
|
+
const y1 = poly[i].y;
|
|
140
|
+
const minY = Math.min(y0, y1);
|
|
141
|
+
const maxY = Math.max(y0, y1);
|
|
142
|
+
const minX = Math.min(x0, x1);
|
|
143
|
+
const maxX = Math.max(x0, x1);
|
|
139
144
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
145
|
+
if (py > maxY) {
|
|
146
|
+
// 无交点,与最小外接矩形不相交
|
|
147
|
+
} else if (py < minY) {
|
|
148
|
+
// 无交点,与最小外接矩形不相交
|
|
149
|
+
} else { // minY <= py && py <= maxY
|
|
150
|
+
if (px > maxX) {
|
|
151
|
+
// 无交点,与最小外接矩形不相交
|
|
152
|
+
} else if (px < minX) { // 有交点,但需要判断是否与最小外接矩形边界重合
|
|
153
|
+
if (minY === py && py < maxY) {
|
|
154
|
+
count++; // 交点计数,与最小外接矩形下边界重合
|
|
155
|
+
} else if (minY < py && py === maxY) {
|
|
156
|
+
// 交点不计,与最小外接矩形上边界重合
|
|
157
|
+
} else if (minY === py && py === maxY) {
|
|
158
|
+
// 交点不计,与最小外接矩形上下边界重合
|
|
159
|
+
} else {
|
|
160
|
+
count++; // 交点计数,不与最小外界矩形边界重合
|
|
161
|
+
}
|
|
162
|
+
} else { // minX <= px && px <= maxX
|
|
163
|
+
const p1 = {
|
|
164
|
+
x: x0 - px,
|
|
165
|
+
y: y0 - py,
|
|
166
|
+
};
|
|
167
|
+
const p2 = {
|
|
168
|
+
x: x1 - x0,
|
|
169
|
+
y: y1 - y0,
|
|
170
|
+
};
|
|
171
|
+
const p3 = {
|
|
172
|
+
x: x1 - x0 - 100000,
|
|
173
|
+
y: y1 - y0,
|
|
174
|
+
};
|
|
175
|
+
// (P1Q1 X Q2Q1) *(P2Q1 X Q2Q1)
|
|
176
|
+
if (crossProduct(p1, p2) * crossProduct(p3, p2) > 0) {
|
|
177
|
+
// 跨立判断不成立
|
|
178
|
+
} else { // 有交点,但需要判断是否与最小外接矩形边界重合
|
|
179
|
+
if (minY === py && py < maxY) {
|
|
180
|
+
count++; // 交点计数,与最小外接矩形下边界重合
|
|
181
|
+
} else if (minY < py && py === maxY) {
|
|
182
|
+
// 交点不计,与最小外接矩形上边界重合
|
|
183
|
+
} else if (minY === py && py === maxY) {
|
|
184
|
+
// 交点不计,与最小外接矩形上下边界重合
|
|
185
|
+
} else {
|
|
186
|
+
count++; // 交点计数,不与最小外界矩形边界重合
|
|
187
|
+
}
|
|
188
|
+
}
|
|
143
189
|
}
|
|
144
190
|
}
|
|
145
191
|
}
|
|
146
192
|
|
|
147
|
-
|
|
148
|
-
return flag;
|
|
193
|
+
return count % 2 === 1;
|
|
149
194
|
}
|
|
150
195
|
|
|
151
196
|
/**
|
|
@@ -155,15 +200,14 @@ function isPointInPolygon(p, poly) {
|
|
|
155
200
|
* @return {boolean}
|
|
156
201
|
*/
|
|
157
202
|
function isPointInLine(p, points) {
|
|
158
|
-
const
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
// 点在多边形的边上,8像素的偏差
|
|
203
|
+
const s1 = points[0];
|
|
204
|
+
const s2 = points[1];
|
|
205
|
+
if ((s1.y < p.y && s2.y >= p.y) ||
|
|
206
|
+
(s1.y >= p.y && s2.y < p.y)) {
|
|
207
|
+
// 叉乘计算
|
|
208
|
+
const x = s1.x + (p.y - s1.y) *
|
|
209
|
+
(s2.x - s1.x) / (s2.y - s1.y);
|
|
210
|
+
// 8像素的偏差
|
|
167
211
|
if (Math.abs(x - p.x) < 8) {
|
|
168
212
|
return true;
|
|
169
213
|
}
|
package/src/util/imageData.js
CHANGED
package/src/view.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import openSeadragon from './plugin/openseadragon/openseadragon';
|
|
2
2
|
import './util/canvas';
|
|
3
3
|
import {EventEmitter} from './util/event-emitter';
|
|
4
|
-
import {$, dataType, deepClone
|
|
4
|
+
import {$, dataType, deepClone} from './util';
|
|
5
5
|
import {pointsToRegion} from './util/calculate';
|
|
6
6
|
import * as COMPONENTS from './const/component';
|
|
7
7
|
import * as EVENTS from './const/event';
|
|
@@ -351,8 +351,8 @@ function initEvent(kv) {
|
|
|
351
351
|
kv.area.onCanvasRelease(e.position);
|
|
352
352
|
}
|
|
353
353
|
});
|
|
354
|
-
|
|
355
|
-
kv.viewer.addHandler('canvas-key',
|
|
354
|
+
|
|
355
|
+
kv.viewer.addHandler('canvas-key', (e) => {
|
|
356
356
|
const {originalEvent} = e;
|
|
357
357
|
e.preventDefaultAction = originalEvent.key.indexOf('Arrow') === -1;
|
|
358
358
|
handlerCacheEvent(originalEvent, kv);
|
|
@@ -367,7 +367,7 @@ function initEvent(kv) {
|
|
|
367
367
|
kv.area?.change?.(e);
|
|
368
368
|
kv.shape?.change?.(e);
|
|
369
369
|
}
|
|
370
|
-
}
|
|
370
|
+
});
|
|
371
371
|
|
|
372
372
|
kv.viewer.addHandler('canvas-double-click', (e) => {
|
|
373
373
|
if (kv.board?.isInDraw) {
|
|
@@ -393,9 +393,9 @@ function initEvent(kv) {
|
|
|
393
393
|
let isRightDown = false;
|
|
394
394
|
let dragPosition;
|
|
395
395
|
|
|
396
|
-
kv.viewer.
|
|
396
|
+
kv.viewer.addHandler('canvas-contextmenu', function(e) {
|
|
397
397
|
if (kv.board?.isInDraw) {
|
|
398
|
-
|
|
398
|
+
e.preventDefault = true;
|
|
399
399
|
}
|
|
400
400
|
});
|
|
401
401
|
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="GitToolBoxProjectSettings">
|
|
4
|
-
<option name="commitMessageIssueKeyValidationOverride">
|
|
5
|
-
<BoolValueOverride>
|
|
6
|
-
<option name="enabled" value="true" />
|
|
7
|
-
</BoolValueOverride>
|
|
8
|
-
</option>
|
|
9
|
-
<option name="commitMessageValidationConfigOverride">
|
|
10
|
-
<CommitMessageValidationOverride>
|
|
11
|
-
<option name="enabled" value="true" />
|
|
12
|
-
</CommitMessageValidationOverride>
|
|
13
|
-
</option>
|
|
14
|
-
<option name="commitMessageValidationEnabledOverride">
|
|
15
|
-
<BoolValueOverride>
|
|
16
|
-
<option name="enabled" value="true" />
|
|
17
|
-
</BoolValueOverride>
|
|
18
|
-
</option>
|
|
19
|
-
</component>
|
|
20
|
-
</project>
|
package/.idea/kfb-view.iml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="WEB_MODULE" version="4">
|
|
3
|
-
<component name="NewModuleRootManager">
|
|
4
|
-
<content url="file://$MODULE_DIR$">
|
|
5
|
-
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
6
|
-
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
7
|
-
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
8
|
-
</content>
|
|
9
|
-
<orderEntry type="inheritedJdk" />
|
|
10
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
11
|
-
</component>
|
|
12
|
-
</module>
|
package/.idea/misc.xml
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="MarkdownProjectSettings" wasCopied="true">
|
|
4
|
-
<PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true" openRemoteLinks="true" replaceUnicodeEmoji="false" lastLayoutSetsDefault="false">
|
|
5
|
-
<PanelProvider>
|
|
6
|
-
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" />
|
|
7
|
-
</PanelProvider>
|
|
8
|
-
</PreviewSettings>
|
|
9
|
-
<ParserSettings gitHubSyntaxChange="false" emojiShortcuts="1" emojiImages="0">
|
|
10
|
-
<PegdownExtensions>
|
|
11
|
-
<option name="ABBREVIATIONS" value="false" />
|
|
12
|
-
<option name="ANCHORLINKS" value="true" />
|
|
13
|
-
<option name="ASIDE" value="false" />
|
|
14
|
-
<option name="ATXHEADERSPACE" value="true" />
|
|
15
|
-
<option name="AUTOLINKS" value="true" />
|
|
16
|
-
<option name="DEFINITIONS" value="false" />
|
|
17
|
-
<option name="DEFINITION_BREAK_DOUBLE_BLANK_LINE" value="false" />
|
|
18
|
-
<option name="FENCED_CODE_BLOCKS" value="true" />
|
|
19
|
-
<option name="FOOTNOTES" value="false" />
|
|
20
|
-
<option name="HARDWRAPS" value="false" />
|
|
21
|
-
<option name="HTML_DEEP_PARSER" value="false" />
|
|
22
|
-
<option name="INSERTED" value="false" />
|
|
23
|
-
<option name="QUOTES" value="false" />
|
|
24
|
-
<option name="RELAXEDHRULES" value="true" />
|
|
25
|
-
<option name="SMARTS" value="false" />
|
|
26
|
-
<option name="STRIKETHROUGH" value="true" />
|
|
27
|
-
<option name="SUBSCRIPT" value="false" />
|
|
28
|
-
<option name="SUPERSCRIPT" value="false" />
|
|
29
|
-
<option name="SUPPRESS_HTML_BLOCKS" value="false" />
|
|
30
|
-
<option name="SUPPRESS_INLINE_HTML" value="false" />
|
|
31
|
-
<option name="TABLES" value="true" />
|
|
32
|
-
<option name="TASKLISTITEMS" value="true" />
|
|
33
|
-
<option name="TOC" value="false" />
|
|
34
|
-
<option name="WIKILINKS" value="false" />
|
|
35
|
-
</PegdownExtensions>
|
|
36
|
-
<ParserOptions>
|
|
37
|
-
<option name="ADMONITION_EXT" value="false" />
|
|
38
|
-
<option name="ATTRIBUTES_EXT" value="false" />
|
|
39
|
-
<option name="COMMONMARK_LISTS" value="true" />
|
|
40
|
-
<option name="DUMMY" value="false" />
|
|
41
|
-
<option name="EMOJI_SHORTCUTS" value="true" />
|
|
42
|
-
<option name="ENUMERATED_REFERENCES_EXT" value="false" />
|
|
43
|
-
<option name="FLEXMARK_FRONT_MATTER" value="false" />
|
|
44
|
-
<option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="false" />
|
|
45
|
-
<option name="GFM_TABLE_RENDERING" value="true" />
|
|
46
|
-
<option name="GITBOOK_URL_ENCODING" value="false" />
|
|
47
|
-
<option name="GITHUB_LISTS" value="false" />
|
|
48
|
-
<option name="GITHUB_WIKI_LINKS" value="false" />
|
|
49
|
-
<option name="GITLAB_EXT" value="false" />
|
|
50
|
-
<option name="GITLAB_MATH_EXT" value="false" />
|
|
51
|
-
<option name="GITLAB_MERMAID_EXT" value="false" />
|
|
52
|
-
<option name="HEADER_ID_NON_ASCII_TO_LOWERCASE" value="false" />
|
|
53
|
-
<option name="HEADER_ID_NO_DUPED_DASHES" value="false" />
|
|
54
|
-
<option name="JEKYLL_FRONT_MATTER" value="false" />
|
|
55
|
-
<option name="MACROS_EXT" value="false" />
|
|
56
|
-
<option name="NO_TEXT_ATTRIBUTES" value="false" />
|
|
57
|
-
<option name="PARSE_HTML_ANCHOR_ID" value="false" />
|
|
58
|
-
<option name="PLANTUML_FENCED_CODE" value="false" />
|
|
59
|
-
<option name="PUML_FENCED_CODE" value="false" />
|
|
60
|
-
<option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
|
|
61
|
-
</ParserOptions>
|
|
62
|
-
</ParserSettings>
|
|
63
|
-
<HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true" embedImages="false" embedHttpImages="false" imageUriSerials="false" addDocTypeHtml="true" noParaTags="false" plantUmlConversion="0" mathConversion="-1">
|
|
64
|
-
<GeneratorProvider>
|
|
65
|
-
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
|
|
66
|
-
</GeneratorProvider>
|
|
67
|
-
<headerTop />
|
|
68
|
-
<headerBottom />
|
|
69
|
-
<bodyTop />
|
|
70
|
-
<bodyBottom />
|
|
71
|
-
</HtmlSettings>
|
|
72
|
-
<CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssUriSerial="false" isCssTextEnabled="false" isDynamicPageWidth="true">
|
|
73
|
-
<StylesheetProvider>
|
|
74
|
-
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" />
|
|
75
|
-
</StylesheetProvider>
|
|
76
|
-
<ScriptProviders />
|
|
77
|
-
<cssText />
|
|
78
|
-
<cssUriHistory />
|
|
79
|
-
</CssSettings>
|
|
80
|
-
<AnnotatorSettings targetHasSpaces="true" linkCaseMismatch="true" wikiCaseMismatch="true" wikiLinkHasDashes="true" notUnderWikiHome="true" targetNotWikiPageExt="true" notUnderSourceWikiHome="true" targetNameHasAnchor="true" targetPathHasAnchor="true" wikiLinkHasSlash="true" wikiLinkHasSubdir="true" wikiLinkHasOnlyAnchor="true" linkTargetsWikiHasExt="true" linkTargetsWikiHasBadExt="true" notUnderSameRepo="true" targetNotUnderVcs="false" linkNeedsExt="true" linkHasBadExt="true" linkTargetNeedsExt="true" linkTargetHasBadExt="true" wikiLinkNotInWiki="true" imageTargetNotInRaw="true" repoRelativeAcrossVcsRoots="true" multipleWikiTargetsMatch="true" unresolvedLinkReference="true" linkIsIgnored="true" anchorIsIgnored="true" anchorIsUnresolved="true" anchorLineReferenceIsUnresolved="true" anchorLineReferenceFormat="true" anchorHasDuplicates="true" abbreviationDuplicates="true" abbreviationNotUsed="true" attributeIdDuplicateDefinition="true" attributeIdNotUsed="true" footnoteDuplicateDefinition="true" footnoteUnresolved="true" footnoteDuplicates="true" footnoteNotUsed="true" macroDuplicateDefinition="true" macroUnresolved="true" macroDuplicates="true" macroNotUsed="true" referenceDuplicateDefinition="true" referenceUnresolved="true" referenceDuplicates="true" referenceNotUsed="true" referenceUnresolvedNumericId="true" enumRefDuplicateDefinition="true" enumRefUnresolved="true" enumRefDuplicates="true" enumRefNotUsed="true" enumRefLinkUnresolved="true" enumRefLinkDuplicates="true" simTocUpdateNeeded="true" simTocTitleSpaceNeeded="true" />
|
|
81
|
-
<HtmlExportSettings updateOnSave="false" parentDir="" targetDir="" cssDir="css" scriptDir="js" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetPathType="2" targetExt="" useTargetExt="false" noCssNoScripts="false" useElementStyleAttribute="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" />
|
|
82
|
-
<LinkMapSettings>
|
|
83
|
-
<textMaps />
|
|
84
|
-
</LinkMapSettings>
|
|
85
|
-
</component>
|
|
86
|
-
</project>
|
package/.idea/modules.xml
DELETED
package/.idea/vcs.xml
DELETED
package/.idea/watcherTasks.xml
DELETED