@simplysm/core-browser 14.0.11 → 14.0.13
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/dist/extensions/html-element-ext.d.ts +3 -5
- package/dist/extensions/html-element-ext.d.ts.map +1 -1
- package/dist/extensions/html-element-ext.js +2 -4
- package/dist/extensions/html-element-ext.js.map +1 -1
- package/dist/utils/IndexedDbVirtualFs.d.ts.map +1 -1
- package/dist/utils/IndexedDbVirtualFs.js +23 -12
- package/dist/utils/IndexedDbVirtualFs.js.map +1 -1
- package/package.json +2 -2
- package/src/extensions/html-element-ext.ts +5 -10
- package/src/utils/IndexedDbVirtualFs.ts +25 -12
|
@@ -8,16 +8,14 @@ declare global {
|
|
|
8
8
|
* 부모 요소 기준 상대 위치 계산 (CSS 포지셔닝용)
|
|
9
9
|
*
|
|
10
10
|
* @remarks
|
|
11
|
-
* 부모 요소 기준으로 요소 위치를 계산하며, CSS `top`/`left` 속성에 바로 사용할 수 있는
|
|
12
|
-
* `window.scrollX/Y`를 포함한 문서 기반 좌표를 반환합니다.
|
|
11
|
+
* 부모 요소 기준으로 요소 위치를 계산하며, CSS `top`/`left` 속성에 바로 사용할 수 있는 좌표를 반환합니다.
|
|
13
12
|
*
|
|
14
13
|
* 주요 사용 사례:
|
|
15
|
-
* -
|
|
16
|
-
* - 스크롤된
|
|
14
|
+
* - position: relative/absolute 부모 내에서 드롭다운, 팝업 위치 지정
|
|
15
|
+
* - 스크롤된 컨테이너에서도 정상 동작
|
|
17
16
|
*
|
|
18
17
|
* 계산에 포함되는 요소:
|
|
19
18
|
* - 뷰포트 기준 위치 (getBoundingClientRect)
|
|
20
|
-
* - 문서 스크롤 위치 (window.scrollX/Y)
|
|
21
19
|
* - 부모 요소 내부 스크롤 (parentEl.scrollTop/Left)
|
|
22
20
|
* - 중간 요소의 border 두께
|
|
23
21
|
* - CSS transform 변환
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-element-ext.d.ts","sourceRoot":"","sources":["../../src/extensions/html-element-ext.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB;;WAEG;QACH,OAAO,IAAI,IAAI,CAAC;QAEhB
|
|
1
|
+
{"version":3,"file":"html-element-ext.d.ts","sourceRoot":"","sources":["../../src/extensions/html-element-ext.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB;;WAEG;QACH,OAAO,IAAI,IAAI,CAAC;QAEhB;;;;;;;;;;;;;;;;;;;WAmBG;QACH,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAE/E;;;;;;;;;;WAUG;QACH,sBAAsB,CACpB,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EACrC,MAAM,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GACrC,IAAI,CAAC;KACT;CACF"}
|
|
@@ -11,11 +11,9 @@ HTMLElement.prototype.getRelativeOffset = function (parent) {
|
|
|
11
11
|
}
|
|
12
12
|
const elementRect = this.getBoundingClientRect();
|
|
13
13
|
const parentRect = parentEl.getBoundingClientRect();
|
|
14
|
-
const scrollLeft = window.scrollX;
|
|
15
|
-
const scrollTop = window.scrollY;
|
|
16
14
|
const relativeOffset = {
|
|
17
|
-
top: elementRect.top - parentRect.top +
|
|
18
|
-
left: elementRect.left - parentRect.left +
|
|
15
|
+
top: elementRect.top - parentRect.top + (parentEl.scrollTop || 0),
|
|
16
|
+
left: elementRect.left - parentRect.left + (parentEl.scrollLeft || 0),
|
|
19
17
|
};
|
|
20
18
|
let currentEl = this.parentElement;
|
|
21
19
|
while (currentEl !== null && currentEl !== parentEl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-element-ext.js","sourceRoot":"","sources":["../../src/extensions/html-element-ext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"html-element-ext.js","sourceRoot":"","sources":["../../src/extensions/html-element-ext.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDbVirtualFs.d.ts","sourceRoot":"","sources":["../../src/utils/IndexedDbVirtualFs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM;IAG9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAI9D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"IndexedDbVirtualFs.d.ts","sourceRoot":"","sources":["../../src/utils/IndexedDbVirtualFs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM;IAG9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAI9D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAqC/E,SAAS,CACb,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;CA0BjB"}
|
|
@@ -57,6 +57,9 @@ export class IndexedDbVirtualFs {
|
|
|
57
57
|
const isDir = segments.length > 1 || cursor.value.kind === "dir";
|
|
58
58
|
map.set(firstSeg, isDir);
|
|
59
59
|
}
|
|
60
|
+
else if (segments.length > 1 && !map.get(firstSeg)) {
|
|
61
|
+
map.set(firstSeg, true);
|
|
62
|
+
}
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
}
|
|
@@ -67,19 +70,27 @@ export class IndexedDbVirtualFs {
|
|
|
67
70
|
});
|
|
68
71
|
}
|
|
69
72
|
async ensureDir(fullKeyBuilder, dirPath) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!existing) {
|
|
80
|
-
await this.putEntry(fullKeyBuilder(acc), "dir");
|
|
73
|
+
await this._db.withStore(this._storeName, "readwrite", async (store) => {
|
|
74
|
+
const resolveReq = (req) => new Promise((resolve, reject) => {
|
|
75
|
+
req.onsuccess = () => resolve(req.result);
|
|
76
|
+
req.onerror = () => reject(req.error);
|
|
77
|
+
});
|
|
78
|
+
if (dirPath === "/") {
|
|
79
|
+
const key = fullKeyBuilder("/");
|
|
80
|
+
await resolveReq(store.put({ [this._keyField]: key, kind: "dir" }));
|
|
81
|
+
return;
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
+
const segments = dirPath.split("/").filter(Boolean);
|
|
84
|
+
let acc = "";
|
|
85
|
+
for (const seg of segments) {
|
|
86
|
+
acc += "/" + seg;
|
|
87
|
+
const key = fullKeyBuilder(acc);
|
|
88
|
+
const existing = await resolveReq(store.get(key));
|
|
89
|
+
if (existing == null) {
|
|
90
|
+
await resolveReq(store.put({ [this._keyField]: key, kind: "dir" }));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
83
94
|
}
|
|
84
95
|
}
|
|
85
96
|
//# sourceMappingURL=IndexedDbVirtualFs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDbVirtualFs.js","sourceRoot":"","sources":["../../src/utils/IndexedDbVirtualFs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IndexedDbVirtualFs.js","sourceRoot":"","sources":["../../src/utils/IndexedDbVirtualFs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/core-browser",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.13",
|
|
4
4
|
"description": "심플리즘 패키지 - 코어 (browser)",
|
|
5
5
|
"author": "심플리즘",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,6 +25,6 @@
|
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"tabbable": "^6.4.0",
|
|
28
|
-
"@simplysm/core-common": "14.0.
|
|
28
|
+
"@simplysm/core-common": "14.0.13"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -11,16 +11,14 @@ declare global {
|
|
|
11
11
|
* 부모 요소 기준 상대 위치 계산 (CSS 포지셔닝용)
|
|
12
12
|
*
|
|
13
13
|
* @remarks
|
|
14
|
-
* 부모 요소 기준으로 요소 위치를 계산하며, CSS `top`/`left` 속성에 바로 사용할 수 있는
|
|
15
|
-
* `window.scrollX/Y`를 포함한 문서 기반 좌표를 반환합니다.
|
|
14
|
+
* 부모 요소 기준으로 요소 위치를 계산하며, CSS `top`/`left` 속성에 바로 사용할 수 있는 좌표를 반환합니다.
|
|
16
15
|
*
|
|
17
16
|
* 주요 사용 사례:
|
|
18
|
-
* -
|
|
19
|
-
* - 스크롤된
|
|
17
|
+
* - position: relative/absolute 부모 내에서 드롭다운, 팝업 위치 지정
|
|
18
|
+
* - 스크롤된 컨테이너에서도 정상 동작
|
|
20
19
|
*
|
|
21
20
|
* 계산에 포함되는 요소:
|
|
22
21
|
* - 뷰포트 기준 위치 (getBoundingClientRect)
|
|
23
|
-
* - 문서 스크롤 위치 (window.scrollX/Y)
|
|
24
22
|
* - 부모 요소 내부 스크롤 (parentEl.scrollTop/Left)
|
|
25
23
|
* - 중간 요소의 border 두께
|
|
26
24
|
* - CSS transform 변환
|
|
@@ -68,12 +66,9 @@ HTMLElement.prototype.getRelativeOffset = function (parent: HTMLElement | string
|
|
|
68
66
|
const elementRect = this.getBoundingClientRect();
|
|
69
67
|
const parentRect = parentEl.getBoundingClientRect();
|
|
70
68
|
|
|
71
|
-
const scrollLeft = window.scrollX;
|
|
72
|
-
const scrollTop = window.scrollY;
|
|
73
|
-
|
|
74
69
|
const relativeOffset = {
|
|
75
|
-
top: elementRect.top - parentRect.top +
|
|
76
|
-
left: elementRect.left - parentRect.left +
|
|
70
|
+
top: elementRect.top - parentRect.top + (parentEl.scrollTop || 0),
|
|
71
|
+
left: elementRect.left - parentRect.left + (parentEl.scrollLeft || 0),
|
|
77
72
|
};
|
|
78
73
|
|
|
79
74
|
let currentEl = this.parentElement;
|
|
@@ -67,6 +67,8 @@ export class IndexedDbVirtualFs {
|
|
|
67
67
|
const isDir =
|
|
68
68
|
segments.length > 1 || (cursor.value as VirtualFsEntry).kind === "dir";
|
|
69
69
|
map.set(firstSeg, isDir);
|
|
70
|
+
} else if (segments.length > 1 && !map.get(firstSeg)) {
|
|
71
|
+
map.set(firstSeg, true);
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
}
|
|
@@ -82,18 +84,29 @@ export class IndexedDbVirtualFs {
|
|
|
82
84
|
fullKeyBuilder: (path: string) => string,
|
|
83
85
|
dirPath: string,
|
|
84
86
|
): Promise<void> {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
await this._db.withStore(this._storeName, "readwrite", async (store) => {
|
|
88
|
+
const resolveReq = <T>(req: IDBRequest<T>): Promise<T> =>
|
|
89
|
+
new Promise((resolve, reject) => {
|
|
90
|
+
req.onsuccess = () => resolve(req.result);
|
|
91
|
+
req.onerror = () => reject(req.error);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
if (dirPath === "/") {
|
|
95
|
+
const key = fullKeyBuilder("/");
|
|
96
|
+
await resolveReq(store.put({ [this._keyField]: key, kind: "dir" }));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const segments = dirPath.split("/").filter(Boolean);
|
|
101
|
+
let acc = "";
|
|
102
|
+
for (const seg of segments) {
|
|
103
|
+
acc += "/" + seg;
|
|
104
|
+
const key = fullKeyBuilder(acc);
|
|
105
|
+
const existing = await resolveReq(store.get(key));
|
|
106
|
+
if (existing == null) {
|
|
107
|
+
await resolveReq(store.put({ [this._keyField]: key, kind: "dir" }));
|
|
108
|
+
}
|
|
96
109
|
}
|
|
97
|
-
}
|
|
110
|
+
});
|
|
98
111
|
}
|
|
99
112
|
}
|