@simplysm/core-browser 14.0.10 → 14.0.12

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.
@@ -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
- * - `document.body`에 append한 드롭다운, 팝업 위치 지정
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;;;;;;;;;;;;;;;;;;;;;WAqBG;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"}
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 + scrollTop + (parentEl.scrollTop || 0),
18
- left: elementRect.left - parentRect.left + scrollLeft + (parentEl.scrollLeft || 0),
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":"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"}
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;IAmC/E,SAAS,CACb,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;CAejB"}
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
- if (dirPath === "/") {
71
- await this.putEntry(fullKeyBuilder("/"), "dir");
72
- return;
73
- }
74
- const segments = dirPath.split("/").filter(Boolean);
75
- let acc = "";
76
- for (const seg of segments) {
77
- acc += "/" + seg;
78
- const existing = await this.getEntry(fullKeyBuilder(acc));
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.10",
3
+ "version": "14.0.12",
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.10"
28
+ "@simplysm/core-common": "14.0.12"
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
- * - `document.body`에 append한 드롭다운, 팝업 위치 지정
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 + scrollTop + (parentEl.scrollTop || 0),
76
- left: elementRect.left - parentRect.left + scrollLeft + (parentEl.scrollLeft || 0),
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
- if (dirPath === "/") {
86
- await this.putEntry(fullKeyBuilder("/"), "dir");
87
- return;
88
- }
89
- const segments = dirPath.split("/").filter(Boolean);
90
- let acc = "";
91
- for (const seg of segments) {
92
- acc += "/" + seg;
93
- const existing = await this.getEntry(fullKeyBuilder(acc));
94
- if (!existing) {
95
- await this.putEntry(fullKeyBuilder(acc), "dir");
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
  }