@dooboostore/simple-web-component 1.0.30 → 1.0.32

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 (93) hide show
  1. package/README.md +220 -1
  2. package/dist/cjs/decorators/applyStyle.js +1 -1
  3. package/dist/cjs/decorators/applyStyle.js.map +2 -2
  4. package/dist/cjs/decorators/attribute.js +17 -1
  5. package/dist/cjs/decorators/attribute.js.map +2 -2
  6. package/dist/cjs/decorators/elementDefine.js +29 -12
  7. package/dist/cjs/decorators/elementDefine.js.map +3 -3
  8. package/dist/cjs/elements/SwcAppEngine.js +3 -3
  9. package/dist/cjs/elements/SwcAppEngine.js.map +2 -2
  10. package/dist/cjs/elements/SwcAppMixin.js +1 -8
  11. package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
  12. package/dist/cjs/elements/SwcAsync.js +71 -78
  13. package/dist/cjs/elements/SwcAsync.js.map +2 -2
  14. package/dist/cjs/elements/SwcChoose.js +66 -81
  15. package/dist/cjs/elements/SwcChoose.js.map +2 -2
  16. package/dist/cjs/elements/SwcIf.js +52 -96
  17. package/dist/cjs/elements/SwcIf.js.map +2 -2
  18. package/dist/cjs/elements/SwcLoop.js +60 -103
  19. package/dist/cjs/elements/SwcLoop.js.map +2 -2
  20. package/dist/cjs/elements/SwcSubTemplates.js +0 -27
  21. package/dist/cjs/elements/SwcSubTemplates.js.map +2 -2
  22. package/dist/cjs/elements/register.js +314 -343
  23. package/dist/cjs/elements/register.js.map +2 -2
  24. package/dist/cjs/router/ElementRouter.js +1 -8
  25. package/dist/cjs/router/ElementRouter.js.map +2 -2
  26. package/dist/cjs/types.js.map +1 -1
  27. package/dist/cjs/utils/Utils.js +31 -24
  28. package/dist/cjs/utils/Utils.js.map +2 -2
  29. package/dist/esm/decorators/applyStyle.js +1 -1
  30. package/dist/esm/decorators/applyStyle.js.map +2 -2
  31. package/dist/esm/decorators/attribute.js +18 -2
  32. package/dist/esm/decorators/attribute.js.map +2 -2
  33. package/dist/esm/decorators/elementDefine.js +27 -10
  34. package/dist/esm/decorators/elementDefine.js.map +3 -3
  35. package/dist/esm/elements/SwcAppEngine.js +3 -3
  36. package/dist/esm/elements/SwcAppEngine.js.map +2 -2
  37. package/dist/esm/elements/SwcAppMixin.js +1 -8
  38. package/dist/esm/elements/SwcAppMixin.js.map +2 -2
  39. package/dist/esm/elements/SwcAsync.js +72 -60
  40. package/dist/esm/elements/SwcAsync.js.map +2 -2
  41. package/dist/esm/elements/SwcChoose.js +67 -63
  42. package/dist/esm/elements/SwcChoose.js.map +2 -2
  43. package/dist/esm/elements/SwcIf.js +53 -78
  44. package/dist/esm/elements/SwcIf.js.map +2 -2
  45. package/dist/esm/elements/SwcLoop.js +61 -85
  46. package/dist/esm/elements/SwcLoop.js.map +2 -2
  47. package/dist/esm/elements/SwcSubTemplates.js +0 -8
  48. package/dist/esm/elements/SwcSubTemplates.js.map +2 -2
  49. package/dist/esm/elements/register.js +246 -275
  50. package/dist/esm/elements/register.js.map +2 -2
  51. package/dist/esm/router/ElementRouter.js +1 -8
  52. package/dist/esm/router/ElementRouter.js.map +2 -2
  53. package/dist/esm/types.js.map +1 -1
  54. package/dist/esm/utils/Utils.js +31 -24
  55. package/dist/esm/utils/Utils.js.map +2 -2
  56. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +2223 -2009
  57. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  58. package/dist/types/decorators/attribute.d.ts.map +1 -1
  59. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  60. package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
  61. package/dist/types/elements/SwcAsync.d.ts +1 -11
  62. package/dist/types/elements/SwcAsync.d.ts.map +1 -1
  63. package/dist/types/elements/SwcChoose.d.ts +1 -13
  64. package/dist/types/elements/SwcChoose.d.ts.map +1 -1
  65. package/dist/types/elements/SwcIf.d.ts +1 -13
  66. package/dist/types/elements/SwcIf.d.ts.map +1 -1
  67. package/dist/types/elements/SwcLoop.d.ts +1 -13
  68. package/dist/types/elements/SwcLoop.d.ts.map +1 -1
  69. package/dist/types/elements/SwcSubTemplates.d.ts +6 -6
  70. package/dist/types/elements/SwcSubTemplates.d.ts.map +1 -1
  71. package/dist/types/elements/register.d.ts.map +1 -1
  72. package/dist/types/router/ElementRouter.d.ts.map +1 -1
  73. package/dist/types/types.d.ts +11 -1
  74. package/dist/types/types.d.ts.map +1 -1
  75. package/dist/types/utils/Utils.d.ts +10 -0
  76. package/dist/types/utils/Utils.d.ts.map +1 -1
  77. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +2223 -2009
  78. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  79. package/package.json +3 -3
  80. package/src/decorators/applyStyle.ts +1 -1
  81. package/src/decorators/attribute.ts +35 -30
  82. package/src/decorators/elementDefine.ts +32 -10
  83. package/src/elements/SwcAppEngine.ts +3 -3
  84. package/src/elements/SwcAppMixin.ts +6 -27
  85. package/src/elements/SwcAsync.ts +75 -57
  86. package/src/elements/SwcChoose.ts +69 -77
  87. package/src/elements/SwcIf.ts +50 -75
  88. package/src/elements/SwcLoop.ts +56 -82
  89. package/src/elements/SwcSubTemplates.ts +6 -6
  90. package/src/elements/register.ts +234 -285
  91. package/src/router/ElementRouter.ts +1 -12
  92. package/src/types.ts +9 -2
  93. package/src/utils/Utils.ts +48 -37
@@ -6,18 +6,7 @@ export class ElementRouter extends Router {
6
6
  private _currentIndex = -1;
7
7
 
8
8
  constructor(config: RouterConfig) {
9
- // Router 부모 클래스가 생성자에서 go()를 호출하여 초기화되지 않은 필드에 접근하는 것을 방지하기 위해
10
- // firstUrl을 제거하고 넘긴 뒤 자식에서 수동 처리합니다.
11
- const { firstUrl, ...rest } = config;
12
- super(rest);
13
-
14
- const startUrl = firstUrl ?? '/';
15
- this._history = [{ url: startUrl, data: null }];
16
- this._currentIndex = 0;
17
-
18
- if (firstUrl) {
19
- this.replace(firstUrl, { config: { noEventAndPublish: true } });
20
- }
9
+ super(config);
21
10
  }
22
11
 
23
12
  // Override pushState to manage internal history
package/src/types.ts CHANGED
@@ -41,8 +41,15 @@ export type HostSet = {
41
41
  $lastAppHost: SwcAppInterface | null;
42
42
  };
43
43
 
44
- export type HelperHostSet = HelperSet & HostSet;
45
-
44
+ export type HelperHostSet = HelperSet & HostSet & {$this: any};
45
+ export interface SwcChooseInterface extends HTMLTemplateElement {
46
+ value: any;
47
+ refresh(): void;
48
+ }
49
+ export interface SwcIfInterface extends HTMLTemplateElement {
50
+ value: any;
51
+ refresh(): void;
52
+ }
46
53
  export interface SwcAppInterface extends HTMLElement {
47
54
  simpleApplication?: SimpleApplication;
48
55
  router?: Router;
@@ -1,5 +1,6 @@
1
1
  import { SwcAppInterface, HostSet, HelperSet, HelperHostSet } from '../types';
2
2
  import {getElementConfig} from "../decorators";
3
+ import { getExpression, ExpressionResult, GetExpressionConfig, GetExpressionResult } from '@dooboostore/core';
3
4
 
4
5
  export const SWC_NOT_FOUND = Symbol.for('simple-web-component:not-found');
5
6
 
@@ -148,6 +149,27 @@ export const htmlArticleElement = (options?: { doc?: Document; attrs?: Record<st
148
149
  };
149
150
 
150
151
  export namespace SwcUtils {
152
+
153
+
154
+ export const parsePathPatternsSetAttributeString = (pathPattern: string[], path: string) => {
155
+ return JSON.stringify(SwcUtils.parsePathPatternsSet(pathPattern, path)).replace(/"/g, "'");
156
+ }
157
+
158
+ export const parsePathPatternsSet = (pathPattern: string[], path: string) => {
159
+ return {
160
+ path: path,
161
+ pathData: SwcUtils.parsePathPatterns(pathPattern, path)
162
+ };
163
+ };
164
+ export const parsePathPatterns = (pathPattern: string[], path: string) => {
165
+ for (const pattern of pathPattern) {
166
+ const data = SwcUtils.parsePathPattern(pattern, path || '/');
167
+ if (data !== null) {
168
+ return data;
169
+ }
170
+ }
171
+ };
172
+
151
173
  export const getHelperSet = (win: Window): HelperSet => {
152
174
  const doc: Document = win.document;
153
175
  return {
@@ -164,7 +186,8 @@ export namespace SwcUtils {
164
186
  const hostSet = getHostSet(el);
165
187
  return {
166
188
  ...helperSet,
167
- ...hostSet
189
+ ...hostSet,
190
+ $this: el,
168
191
  };
169
192
  };
170
193
 
@@ -255,34 +278,30 @@ export namespace SwcUtils {
255
278
  export const findAllParentAppHostsDirect = (el: HTMLElement): SwcAppInterface[] => {
256
279
  const appHosts: SwcAppInterface[] = [];
257
280
 
258
- // Shadow DOM 내부의 depth를 정상적으로 탐색하기 위해
259
- // el.parentElement부터 시작하고, shadow root 경계를 만날 때만 host로 이동
260
- let current: HTMLElement | null = el.parentElement;
261
-
281
+ // el 자체부터 시작 (el이 app host일 수도 있음)
282
+ let current: HTMLElement | null = el;
283
+
262
284
  while (current) {
263
- // console.log('vvvvvvv');
264
- // alert(1)
265
- // debugger;
266
285
  const isAppHost =
267
- current.tagName.toLowerCase() === 'swc-app' ||
286
+ current.tagName.toLowerCase() === 'swc-app' ||
268
287
  current.getAttribute('is')?.startsWith('swc-app-');
269
288
  if (isAppHost) {
270
289
  appHosts.push(current as SwcAppInterface);
271
290
  }
272
- // Handle shadow DOM
273
- if (current.shadowRoot) {
274
- current = ((current.shadowRoot as any).host as HTMLElement).parentElement;
291
+
292
+ // 다음 부모 찾기
293
+ if (current.parentElement) {
294
+ // Light DOM: 정상적인 부모 요소
295
+ current = current.parentElement;
275
296
  } else {
276
- // 부모가 없으면 shadow root 경계일 수 있음
277
- if (!current.parentElement) {
278
- const parentNode = current.parentNode;
279
- if (parentNode instanceof ShadowRoot) {
280
- current = (parentNode as any).host as HTMLElement;
281
- } else {
282
- break;
283
- }
297
+ // parentElement가 없음 = Shadow root의 직접 자식일 수 있음
298
+ const root = current.getRootNode();
299
+ if (root instanceof ShadowRoot) {
300
+ // Shadow host로 올라가기
301
+ current = root.host as HTMLElement;
284
302
  } else {
285
- current = current.parentElement;
303
+ // Document root 도달
304
+ break;
286
305
  }
287
306
  }
288
307
  }
@@ -290,22 +309,12 @@ export namespace SwcUtils {
290
309
  };
291
310
 
292
311
  export const getHostSet = (el: HTMLElement): HostSet => {
293
- const isSwc = !!getElementConfig(el);
294
312
  const ancestors = findAllSwcHosts(el); // [root, ..., parent]
295
-
296
- let $host: HTMLElement;
297
- let $parentHost: HTMLElement | null;
298
-
299
- if (isSwc) {
300
- $host = el;
301
- $parentHost = ancestors.length > 0 ? ancestors[ancestors.length - 1] : null;
302
- } else {
303
- $host = ancestors.length > 0 ? ancestors[ancestors.length - 1] : el;
304
- $parentHost = ancestors.length > 1 ? ancestors[ancestors.length - 2] : null;
305
- }
306
-
307
- const $hosts = isSwc ? [...ancestors, el] : ancestors;
308
- const $firstHost = $hosts.length > 0 ? $hosts[0] : null;
313
+
314
+ const $host = ancestors.length > 0 ? ancestors[ancestors.length - 1] : null;
315
+ const $parentHost = ancestors.length > 1 ? ancestors[ancestors.length - 2] : null;
316
+ const $hosts = ancestors;
317
+ const $firstHost = ancestors.length > 0 ? ancestors[0] : null;
309
318
 
310
319
  // Collect loop contexts
311
320
  const loopContext: Record<string, any> = {};
@@ -369,4 +378,6 @@ export namespace SwcUtils {
369
378
 
370
379
  return result;
371
380
  };
372
- }
381
+
382
+
383
+ };