@simplysm/angular 14.0.6 → 14.0.7

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 (57) hide show
  1. package/dist/core/directives/sd-router-link.directive.d.ts.map +1 -1
  2. package/dist/core/directives/sd-router-link.directive.js +5 -10
  3. package/dist/core/plugins/events/sd-resize-event.plugin.d.ts.map +1 -1
  4. package/dist/core/plugins/events/sd-resize-event.plugin.js +3 -0
  5. package/dist/core/plugins/sd-global-error-handler.plugin.d.ts +1 -0
  6. package/dist/core/plugins/sd-global-error-handler.plugin.d.ts.map +1 -1
  7. package/dist/core/plugins/sd-global-error-handler.plugin.js +4 -0
  8. package/dist/core/providers/sd-app-structure.provider.d.ts.map +1 -1
  9. package/dist/core/providers/sd-app-structure.provider.js +4 -1
  10. package/dist/core/providers/sd-navigate-window.provider.d.ts +2 -1
  11. package/dist/core/providers/sd-navigate-window.provider.d.ts.map +1 -1
  12. package/dist/core/providers/sd-navigate-window.provider.js +13 -10
  13. package/dist/core/utils/setups/setupCanDeactivate.d.ts.map +1 -1
  14. package/dist/core/utils/setups/setupCanDeactivate.js +9 -2
  15. package/dist/core/utils/setups/setupInvalid.d.ts.map +1 -1
  16. package/dist/core/utils/setups/setupInvalid.js +4 -0
  17. package/dist/core/utils/setups/setupModelHook.d.ts +1 -1
  18. package/dist/core/utils/setups/setupModelHook.d.ts.map +1 -1
  19. package/dist/core/utils/setups/setupModelHook.js +5 -1
  20. package/dist/core/utils/setups/setupRipple.d.ts.map +1 -1
  21. package/dist/core/utils/setups/setupRipple.js +3 -2
  22. package/dist/core/utils/useExpandingManager.d.ts.map +1 -1
  23. package/dist/core/utils/useExpandingManager.js +2 -1
  24. package/dist/core/utils/useSdSystemConfigResource.d.ts.map +1 -1
  25. package/dist/core/utils/useSdSystemConfigResource.js +6 -3
  26. package/dist/ui/form/editor/sd-tiptap-editor.control.d.ts +5 -5
  27. package/dist/ui/form/editor/sd-tiptap-editor.control.d.ts.map +1 -1
  28. package/dist/ui/form/editor/sd-tiptap-editor.control.js +79 -78
  29. package/dist/ui/form/input/sd-date-range.picker.d.ts.map +1 -1
  30. package/dist/ui/form/input/sd-date-range.picker.js +4 -3
  31. package/dist/ui/form/input/sd-textfield-type-handlers.d.ts.map +1 -1
  32. package/dist/ui/form/input/sd-textfield-type-handlers.js +21 -2
  33. package/dist/ui/form/input/sd-textfield.control.d.ts.map +1 -1
  34. package/dist/ui/form/input/sd-textfield.control.js +1 -0
  35. package/dist/ui/overlay/modal/sd-modal.control.js +1 -1
  36. package/dist/ui/overlay/modal/sd-modal.provider.d.ts +1 -1
  37. package/dist/ui/overlay/modal/sd-modal.provider.js +1 -1
  38. package/docs/providers.md +1 -1
  39. package/docs/setup-functions.md +1 -1
  40. package/package.json +7 -10
  41. package/src/core/directives/sd-router-link.directive.ts +5 -13
  42. package/src/core/plugins/events/sd-resize-event.plugin.ts +3 -0
  43. package/src/core/plugins/sd-global-error-handler.plugin.ts +4 -0
  44. package/src/core/providers/sd-app-structure.provider.ts +4 -1
  45. package/src/core/providers/sd-navigate-window.provider.ts +12 -13
  46. package/src/core/utils/setups/setupCanDeactivate.ts +10 -2
  47. package/src/core/utils/setups/setupInvalid.ts +5 -0
  48. package/src/core/utils/setups/setupModelHook.ts +5 -2
  49. package/src/core/utils/setups/setupRipple.ts +3 -2
  50. package/src/core/utils/useExpandingManager.ts +2 -1
  51. package/src/core/utils/useSdSystemConfigResource.ts +6 -3
  52. package/src/ui/form/editor/sd-tiptap-editor.control.ts +64 -61
  53. package/src/ui/form/input/sd-date-range.picker.ts +4 -3
  54. package/src/ui/form/input/sd-textfield-type-handlers.ts +25 -5
  55. package/src/ui/form/input/sd-textfield.control.ts +1 -0
  56. package/src/ui/overlay/modal/sd-modal.control.ts +1 -1
  57. package/src/ui/overlay/modal/sd-modal.provider.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sd-router-link.directive.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\directives\\sd-router-link.directive.ts"],"names":[],"mappings":";AAIA,qBAQa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAE/D,MAAM;cAEM,MAAM;iBACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;iBACtB;YACP,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;qBACY,MAAM;sBACL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;mBAGA;IAEpC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;yCAlBpC,qBAAqB;2CAArB,qBAAqB;CAoEjC"}
1
+ {"version":3,"file":"sd-router-link.directive.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\directives\\sd-router-link.directive.ts"],"names":[],"mappings":";AAIA,qBAQa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAE/D,MAAM;cAEM,MAAM;iBACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;iBACtB;YACP,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;qBACY,MAAM;sBACL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;mBAGA;IAEpC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;yCAlBpC,qBAAqB;2CAArB,qBAAqB;CA4DjC"}
@@ -10,6 +10,9 @@ export class SdRouterLinkDirective {
10
10
  const option = this.option();
11
11
  if (!option)
12
12
  return;
13
+ // Alt+click → 무시 (Chrome 표준: 다운로드, SPA에서는 해당 없음)
14
+ if (event.altKey)
15
+ return;
13
16
  event.preventDefault();
14
17
  event.stopPropagation();
15
18
  if (this._navWindow.isWindow) {
@@ -20,19 +23,11 @@ export class SdRouterLinkDirective {
20
23
  : "";
21
24
  this._navWindow.open(option.link + qp, option.params, `width=${width},height=${height}`);
22
25
  }
23
- else if (event.ctrlKey || event.altKey) {
24
- const qp = option.queryParams
25
- ? "?" + new URLSearchParams(option.queryParams).toString()
26
- : "";
27
- this._navWindow.open(option.link + qp, option.params, "_blank");
28
- }
29
- else if (event.shiftKey) {
30
- const width = option.window?.width ?? 800;
31
- const height = option.window?.height ?? 800;
26
+ else if (event.ctrlKey || event.shiftKey) {
32
27
  const qp = option.queryParams
33
28
  ? "?" + new URLSearchParams(option.queryParams).toString()
34
29
  : "";
35
- this._navWindow.open(option.link + qp, option.params, `width=${width},height=${height}`);
30
+ this._navWindow.open(option.link + qp, option.params);
36
31
  }
37
32
  else if (option.outletName === undefined) {
38
33
  await this._router.navigate([option.link, ...(option.params ? [option.params] : [])], option.queryParams ? { queryParams: option.queryParams } : undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"sd-resize-event.plugin.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\plugins\\events\\sd-resize-event.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;;AAG/D,qBACa,mBAAoB,SAAQ,kBAAkB;;IAKhD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIpC,gBAAgB,CACvB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GACvC,MAAM,IAAI;yCAbF,mBAAmB;6CAAnB,mBAAmB;CA6C/B;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,eAAe,CAAC;CAC9B"}
1
+ {"version":3,"file":"sd-resize-event.plugin.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\plugins\\events\\sd-resize-event.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;;AAG/D,qBACa,mBAAoB,SAAQ,kBAAkB;;IAKhD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIpC,gBAAgB,CACvB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GACvC,MAAM,IAAI;yCAbF,mBAAmB;6CAAnB,mBAAmB;CAgD/B;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,eAAe,CAAC;CAC9B"}
@@ -33,6 +33,9 @@ export class SdResizeEventPlugin extends EventManagerPlugin {
33
33
  });
34
34
  resizeObserver.observe(element);
35
35
  return () => {
36
+ if (animationFrameId != null) {
37
+ cancelAnimationFrame(animationFrameId);
38
+ }
36
39
  resizeObserver.disconnect();
37
40
  };
38
41
  }
@@ -3,6 +3,7 @@ import * as i0 from "@angular/core";
3
3
  export declare class SdGlobalErrorHandlerPlugin implements ErrorHandler {
4
4
  private readonly _envInjector;
5
5
  private readonly _systemLog;
6
+ private _hasDisplayedError;
6
7
  handleError(event: any): false | undefined;
7
8
  private _displayErrorMessage;
8
9
  static ɵfac: i0.ɵɵFactoryDeclaration<SdGlobalErrorHandlerPlugin, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-global-error-handler.plugin.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\plugins\\sd-global-error-handler.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAIb,MAAM,eAAe,CAAC;;AAGvB,qBACa,0BAA2B,YAAW,YAAY;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAE1D,WAAW,CAAC,KAAK,EAAE,GAAG;IAoEtB,OAAO,CAAC,oBAAoB;yCAxEjB,0BAA0B;6CAA1B,0BAA0B;CA6GtC"}
1
+ {"version":3,"file":"sd-global-error-handler.plugin.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\plugins\\sd-global-error-handler.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAIb,MAAM,eAAe,CAAC;;AAGvB,qBACa,0BAA2B,YAAW,YAAY;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,OAAO,CAAC,kBAAkB,CAAS;IAEnC,WAAW,CAAC,KAAK,EAAE,GAAG;IAoEtB,OAAO,CAAC,oBAAoB;yCAzEjB,0BAA0B;6CAA1B,0BAA0B;CAiHtC"}
@@ -4,6 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export class SdGlobalErrorHandlerPlugin {
5
5
  _envInjector = inject(EnvironmentInjector);
6
6
  _systemLog = inject(SdSystemLogProvider);
7
+ _hasDisplayedError = false;
7
8
  handleError(event) {
8
9
  try {
9
10
  if (event instanceof PromiseRejectionEvent) {
@@ -70,6 +71,9 @@ export class SdGlobalErrorHandlerPlugin {
70
71
  return false;
71
72
  }
72
73
  _displayErrorMessage(title, param) {
74
+ if (this._hasDisplayedError)
75
+ return;
76
+ this._hasDisplayedError = true;
73
77
  const paramLines = Object.keys(param).map((key) => key + ": " + param[key]);
74
78
  void this._systemLog.writeAsync("error", `[${title}]\n${paramLines.join("\n")}`);
75
79
  const appRef = this._envInjector.get(ApplicationRef);
@@ -1 +1 @@
1
- {"version":3,"file":"sd-app-structure.provider.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\providers\\sd-app-structure.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;;AAE5C,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAG5F;AAID,8BACsB,sBAAsB,CAAC,OAAO,GAAG,OAAO;IAC5D,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAEjE,WAAW,6BAET;IACF,eAAe,iCAEb;IAEF,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,GAAE,MAAM,EAAO;IAIzF,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAInC,sBAAsB,CAAC,QAAQ,EAAE,MAAM;IAIvC,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;yCAxBzD,sBAAsB;6CAAtB,sBAAsB;CAgC3C;AAED,8BAAsB,mBAAmB;IAGvC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM;IAU1F,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,SAAS,MAAM,EACjD,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,CAAC,EAAE,EACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,CAAC,EAAE;IAqBN,MAAM,CAAC,sBAAsB,CAAC,OAAO,EACnC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAoBjC,MAAM,CAAC,QAAQ,CAAC,OAAO,EACrB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,OAAO,CAAC,OAAO,CAAC,EAAE;IA6CrB,MAAM,CAAC,YAAY,CAAC,OAAO,EACzB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,WAAW,CAAC,OAAO,CAAC,EAAE;IA0DzB,MAAM,CAAC,cAAc,CAAC,OAAO,EAC3B,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,GACnC,aAAa,CAAC,OAAO,CAAC,EAAE;IAyC3B,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAC/B,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS;IAgFtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAiBhC;AAED,MAAM,MAAM,mBAAmB,CAAC,OAAO,GAAG,OAAO,IAC7C,wBAAwB,CAAC,OAAO,CAAC,GACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAErC,UAAU,wBAAwB,CAAC,OAAO;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1C;AAED,UAAU,uBAAuB,CAAC,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,4BAA4B,CAAC,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO,CAAC,OAAO,GAAG,OAAO;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,OAAO;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,OAAO;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,OAAO;IAClD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;CAC3B"}
1
+ {"version":3,"file":"sd-app-structure.provider.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\providers\\sd-app-structure.provider.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,9 @@ export class SdAppStructureUtils {
32
32
  //---------- Info
33
33
  static getTitleByFullCode(items, fullCode) {
34
34
  const itemChain = this.getItemChainByFullCode(items, fullCode);
35
+ if (itemChain.length === 0) {
36
+ throw new Error(`Item not found for fullCode: ${fullCode}`);
37
+ }
35
38
  const parent = itemChain
36
39
  .slice(0, -1)
37
40
  .map((item) => item.title)
@@ -49,7 +52,7 @@ export class SdAppStructureUtils {
49
52
  // 권한이라는것이 아얘 존재하지 않거나
50
53
  else if (fullCodes.every((fullCode) => {
51
54
  const item = this.getItemChainByFullCode(items, fullCode).last();
52
- return !item || !("perms" in item);
55
+ return item != null && !("perms" in item);
53
56
  })) {
54
57
  result.push(permKey);
55
58
  }
@@ -1,6 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class SdNavigateWindowProvider {
3
- private _beforeUnloadController;
3
+ private readonly _openedWindows;
4
+ private _beforeUnloadRegistered;
4
5
  get isWindow(): boolean;
5
6
  open(navigate: string, params?: Record<string, string>, features?: string): void;
6
7
  static ɵfac: i0.ɵɵFactoryDeclaration<SdNavigateWindowProvider, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-navigate-window.provider.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\providers\\sd-navigate-window.provider.ts"],"names":[],"mappings":";AAEA,qBACa,wBAAwB;IACnC,OAAO,CAAC,uBAAuB,CAA8B;IAE7D,IAAI,QAAQ,IAAI,OAAO,CAKtB;IAED,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;yCAVrE,wBAAwB;6CAAxB,wBAAwB;CAwCpC"}
1
+ {"version":3,"file":"sd-navigate-window.provider.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\providers\\sd-navigate-window.provider.ts"],"names":[],"mappings":";AAEA,qBACa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,uBAAuB,CAAS;IAExC,IAAI,QAAQ,IAAI,OAAO,CAKtB;IAED,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;yCAXrE,wBAAwB;6CAAxB,wBAAwB;CAuCpC"}
@@ -1,7 +1,8 @@
1
1
  import { Injectable } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class SdNavigateWindowProvider {
4
- _beforeUnloadController;
4
+ _openedWindows = new Set();
5
+ _beforeUnloadRegistered = false;
5
6
  get isWindow() {
6
7
  const urlSearchParams = new URLSearchParams(location.hash.slice(location.hash.indexOf(";") + 1));
7
8
  return urlSearchParams.get("window") === "true";
@@ -9,16 +10,18 @@ export class SdNavigateWindowProvider {
9
10
  open(navigate, params, features) {
10
11
  if (this.isWindow || (features != null && features !== "")) {
11
12
  const newWindow = window.open(`${location.pathname}#${navigate};${new URLSearchParams({ ...params, window: "true" }).toString()}`, "", features);
12
- // 기존 beforeunload 리스너 제거
13
- if (this._beforeUnloadController != null) {
14
- this._beforeUnloadController.abort();
13
+ if (newWindow) {
14
+ this._openedWindows.add(newWindow);
15
+ }
16
+ if (!this._beforeUnloadRegistered) {
17
+ this._beforeUnloadRegistered = true;
18
+ window.addEventListener("beforeunload", () => {
19
+ for (const w of this._openedWindows) {
20
+ w.close();
21
+ }
22
+ this._openedWindows.clear();
23
+ });
15
24
  }
16
- this._beforeUnloadController = new AbortController();
17
- window.addEventListener("beforeunload", () => {
18
- if (newWindow) {
19
- newWindow.close();
20
- }
21
- }, { signal: this._beforeUnloadController.signal });
22
25
  }
23
26
  else {
24
27
  window.open(`${location.pathname}#${navigate};${new URLSearchParams(params).toString()}`, "_blank");
@@ -1 +1 @@
1
- {"version":3,"file":"setupCanDeactivate.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupCanDeactivate.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI,CA6B1D"}
1
+ {"version":3,"file":"setupCanDeactivate.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupCanDeactivate.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI,CAqC1D"}
@@ -1,4 +1,4 @@
1
- import { ElementRef, inject, reflectComponentType } from "@angular/core";
1
+ import { DestroyRef, ElementRef, inject, reflectComponentType } from "@angular/core";
2
2
  import { ActivatedRoute } from "@angular/router";
3
3
  import { SdActivatedModalProvider } from "../../../ui/overlay/modal/sd-modal.provider";
4
4
  export function setupCanDeactivate(fn) {
@@ -6,7 +6,7 @@ export function setupCanDeactivate(fn) {
6
6
  const activatedRoute = inject(ActivatedRoute, { optional: true });
7
7
  const elRef = inject(ElementRef);
8
8
  if (activatedModal != null) {
9
- activatedModal.canDeactivefn = fn;
9
+ activatedModal.canDeactiveFn = fn;
10
10
  return;
11
11
  }
12
12
  if (activatedRoute) {
@@ -24,5 +24,12 @@ export function setupCanDeactivate(fn) {
24
24
  activatedRoute.routeConfig.canDeactivate = [];
25
25
  }
26
26
  activatedRoute.routeConfig.canDeactivate.push(canDeactivateFn);
27
+ const destroyRef = inject(DestroyRef);
28
+ destroyRef.onDestroy(() => {
29
+ const idx = activatedRoute.routeConfig.canDeactivate.indexOf(canDeactivateFn);
30
+ if (idx !== -1) {
31
+ activatedRoute.routeConfig.canDeactivate.splice(idx, 1);
32
+ }
33
+ });
27
34
  }
28
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setupInvalid.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupInvalid.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CA8BlE"}
1
+ {"version":3,"file":"setupInvalid.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupInvalid.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CAmClE"}
@@ -18,6 +18,10 @@ export function setupInvalid(getInvalidMessage) {
18
18
  const isInvalid = !inputEl.checkValidity();
19
19
  setSafeStyle(renderer, indicatorEl, { display: isInvalid ? "block" : "none" });
20
20
  });
21
+ destroyRef.onDestroy(() => {
22
+ indicatorEl.remove();
23
+ inputEl.remove();
24
+ });
21
25
  const formEl = inputEl.form;
22
26
  if (formEl == null)
23
27
  return;
@@ -1,3 +1,3 @@
1
- import type { Signal, WritableSignal } from "@angular/core";
1
+ import { type Signal, type WritableSignal } from "@angular/core";
2
2
  export declare function setupModelHook<T, S extends WritableSignal<T>>(model: S, canFn: Signal<(item: T) => boolean | Promise<boolean>>): void;
3
3
  //# sourceMappingURL=setupModelHook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupModelHook.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupModelHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5D,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAC3D,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GACrD,IAAI,CAoBN"}
1
+ {"version":3,"file":"setupModelHook.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupModelHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvF,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAC3D,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GACrD,IAAI,CAuBN"}
@@ -1,4 +1,6 @@
1
+ import { ErrorHandler, inject } from "@angular/core";
1
2
  export function setupModelHook(model, canFn) {
3
+ const errorHandler = inject(ErrorHandler);
2
4
  const orgSet = model.set;
3
5
  model.set = (value) => {
4
6
  const canSet = canFn()(value);
@@ -13,6 +15,8 @@ export function setupModelHook(model, canFn) {
13
15
  if (allowed !== false) {
14
16
  orgSet(value);
15
17
  }
16
- }).catch(() => { });
18
+ }).catch((err) => {
19
+ errorHandler.handleError(err);
20
+ });
17
21
  };
18
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setupRipple.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupRipple.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CA2E1D"}
1
+ {"version":3,"file":"setupRipple.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\core\\utils\\setups\\setupRipple.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CA4E1D"}
@@ -33,9 +33,10 @@ export function setupRipple(enableFn) {
33
33
  transform: "scale(0.1)",
34
34
  });
35
35
  el.appendChild(indicatorEl);
36
- indicatorEl.ontransitionend = () => {
37
- if (indicatorEl !== undefined && getComputedStyle(indicatorEl).opacity === "0") {
36
+ indicatorEl.ontransitionend = (ev) => {
37
+ if (ev.propertyName === "opacity" && indicatorEl !== undefined) {
38
38
  indicatorEl.remove();
39
+ indicatorEl = undefined;
39
40
  }
40
41
  };
41
42
  requestAnimationFrame(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useExpandingManager.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\utils\\useExpandingManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;IACjF,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CAC3B,GAAG;IACF,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACjC,CA6FA"}
1
+ {"version":3,"file":"useExpandingManager.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\utils\\useExpandingManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;IACjF,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CAC3B,GAAG;IACF,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACjC,CA8FA"}
@@ -57,9 +57,10 @@ export function useExpandingManager(binding) {
57
57
  const itemDef = map.get(item);
58
58
  if (itemDef == null)
59
59
  return false;
60
+ const expandedSet = new Set(binding.expandedItems());
60
61
  let current = itemDef.parentDef;
61
62
  while (current != null) {
62
- if (!binding.expandedItems().includes(current.item)) {
63
+ if (!expandedSet.has(current.item)) {
63
64
  return false;
64
65
  }
65
66
  current = current.parentDef;
@@ -1 +1 @@
1
- {"version":3,"file":"useSdSystemConfigResource.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\utils\\useSdSystemConfigResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5F,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE;;;;;;eAmB1E,CAAC,GAAG,SAAS;eAQb,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS;EAKpD"}
1
+ {"version":3,"file":"useSdSystemConfigResource.d.ts","sourceRoot":"","sources":["..\\..\\..\\src\\core\\utils\\useSdSystemConfigResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAG1G,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE;;;;;;eAoB1E,CAAC,GAAG,SAAS;eAUb,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS;EAKpD"}
@@ -1,8 +1,9 @@
1
- import { ElementRef, inject, resource } from "@angular/core";
1
+ import { ElementRef, ErrorHandler, inject, resource } from "@angular/core";
2
2
  import { SdSystemConfigProvider } from "../providers/sd-system-config.provider";
3
3
  export function useSdSystemConfigResource(options) {
4
4
  const sdSystemConfig = inject(SdSystemConfigProvider);
5
5
  const elRef = inject(ElementRef);
6
+ const errorHandler = inject(ErrorHandler);
6
7
  const elTag = elRef.nativeElement.tagName.toLowerCase();
7
8
  const res = resource({ ...(ngDevMode ? { debugName: "res" } : /* istanbul ignore next */ {}), params: () => options.key(),
8
9
  loader: async ({ params: key }) => {
@@ -19,8 +20,10 @@ export function useSdSystemConfigResource(options) {
19
20
  const key = options.key();
20
21
  if (key == null)
21
22
  return;
22
- queueMicrotask(async () => {
23
- await sdSystemConfig.setAsync(`${elTag}.${key}`, value);
23
+ queueMicrotask(() => {
24
+ sdSystemConfig.setAsync(`${elTag}.${key}`, value).catch((err) => {
25
+ errorHandler.handleError(err);
26
+ });
24
27
  });
25
28
  },
26
29
  update(fn) {
@@ -1,3 +1,4 @@
1
+ import { type WritableSignal } from "@angular/core";
1
2
  import { Editor, type AnyExtension } from "@tiptap/core";
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class SdTiptapEditorControl {
@@ -11,19 +12,18 @@ export declare class SdTiptapEditorControl {
11
12
  private readonly elRef;
12
13
  private readonly destroyRef;
13
14
  readonly colorPresets: string[];
14
- activeStates: Record<string, boolean>;
15
- activeColor: string;
16
- activeBgColor: string;
15
+ activeStates: WritableSignal<Record<string, boolean>>;
16
+ activeColor: WritableSignal<string>;
17
+ activeBgColor: WritableSignal<string>;
17
18
  colorPickerMode: "text" | "bg" | undefined;
18
19
  /** @internal -- TipTap Editor 인스턴스. 테스트 및 고급 사용자용 */
19
- editor: Editor | undefined;
20
+ editor: WritableSignal<Editor | undefined>;
20
21
  private updatingFromEditor;
21
22
  private lastExtensions;
22
23
  private readonly resolvedExtensions;
23
24
  constructor();
24
25
  private createEditor;
25
26
  private destroyEditor;
26
- private getEditorHtml;
27
27
  private getEditorHtmlFrom;
28
28
  execCmd(cmd: string): void;
29
29
  toggleColorPicker(mode: "text" | "bg"): void;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-tiptap-editor.control.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\ui\\form\\editor\\sd-tiptap-editor.control.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;;AAkBzD,qBAsMa,qBAAqB;IAChC,KAAK,0DAAmB;IACxB,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,WAAW,0DAAmB;IAC9B,WAAW,+CAAiB,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,eAAI;IACzE,UAAU,kEAA2B;IAErC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,QAAQ,CAAC,YAAY,WAMnB;IAEF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC3C,WAAW,SAAM;IACjB,aAAa,SAAM;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAE3C,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAShC;;IAyDH,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA2D1B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI5C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAoB3C,OAAO,CAAC,mBAAmB;yCA1NhB,qBAAqB;2CAArB,qBAAqB;CAkPjC"}
1
+ {"version":3,"file":"sd-tiptap-editor.control.d.ts","sourceRoot":"","sources":["..\\..\\..\\..\\src\\ui\\form\\editor\\sd-tiptap-editor.control.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;;AAkBzD,qBAsMa,qBAAqB;IAChC,KAAK,0DAAmB;IACxB,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,WAAW,0DAAmB;IAC9B,WAAW,+CAAiB,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,eAAI;IACzE,UAAU,kEAA2B;IAErC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,QAAQ,CAAC,YAAY,WAMnB;IAEF,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAc;IACnE,WAAW,yBAAc;IACzB,aAAa,yBAAc;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAE3C,qDAAqD;IACrD,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAqB;IAC/D,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAShC;;IA2DH,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA4D1B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI5C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAqB3C,OAAO,CAAC,mBAAmB;yCA1NhB,qBAAqB;2CAArB,qBAAqB;CAmPjC"}