@simplysm/angular 14.0.19 → 14.0.22

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 (143) hide show
  1. package/dist/core/provideSdAngular.js +1 -1
  2. package/dist/core/providers/sd-activated-modal.provider.d.ts +13 -0
  3. package/dist/core/providers/sd-activated-modal.provider.d.ts.map +1 -0
  4. package/dist/core/providers/sd-activated-modal.provider.js +15 -0
  5. package/dist/core/providers/sd-app-structure.provider.d.ts +3 -64
  6. package/dist/core/providers/sd-app-structure.provider.d.ts.map +1 -1
  7. package/dist/core/providers/sd-app-structure.provider.js +1 -252
  8. package/dist/core/providers/sd-app-structure.types.d.ts +52 -0
  9. package/dist/core/providers/sd-app-structure.types.d.ts.map +1 -0
  10. package/dist/core/providers/sd-app-structure.types.js +1 -0
  11. package/dist/core/providers/sd-app-structure.utils.d.ts +13 -0
  12. package/dist/core/providers/sd-app-structure.utils.d.ts.map +1 -0
  13. package/dist/core/providers/sd-app-structure.utils.js +250 -0
  14. package/dist/{ui/overlay/busy → core/providers}/sd-busy.provider.d.ts +1 -1
  15. package/dist/core/providers/sd-busy.provider.d.ts.map +1 -0
  16. package/dist/{ui/overlay/busy → core/providers}/sd-busy.provider.js +1 -1
  17. package/dist/core/providers/sd-print.provider.js +1 -1
  18. package/dist/core/providers/sd-service-client-factory.provider.js +1 -1
  19. package/dist/{ui/overlay/toast → core/providers}/sd-toast.provider.d.ts +1 -1
  20. package/dist/core/providers/sd-toast.provider.d.ts.map +1 -0
  21. package/dist/{ui/overlay/toast → core/providers}/sd-toast.provider.js +3 -3
  22. package/dist/core/types/select-modal-output-result.d.ts +8 -0
  23. package/dist/core/types/select-modal-output-result.d.ts.map +1 -0
  24. package/dist/core/types/select-modal-output-result.js +1 -0
  25. package/dist/core/utils/setups/setupCanDeactivate.js +1 -1
  26. package/dist/core/utils/useViewTitleSignal.js +1 -1
  27. package/dist/core/utils/useViewTypeSignal.js +1 -1
  28. package/dist/features/base/sd-base-container.control.js +1 -1
  29. package/dist/features/data-view/sd-data-detail.control.js +1 -1
  30. package/dist/features/data-view/sd-data-sheet.control.d.ts +24 -37
  31. package/dist/features/data-view/sd-data-sheet.control.d.ts.map +1 -1
  32. package/dist/features/data-view/sd-data-sheet.control.js +98 -152
  33. package/dist/features/data-view/sd-data-sheet.types.d.ts +17 -0
  34. package/dist/features/data-view/sd-data-sheet.types.d.ts.map +1 -0
  35. package/dist/features/data-view/sd-data-sheet.types.js +1 -0
  36. package/dist/{core/utils/setups → features/data-view}/setupCloserWhenSingleSelectionChange.d.ts +1 -1
  37. package/dist/features/data-view/setupCloserWhenSingleSelectionChange.d.ts.map +1 -0
  38. package/dist/features/data-view/useDataSheetExcelManager.d.ts +14 -0
  39. package/dist/features/data-view/useDataSheetExcelManager.d.ts.map +1 -0
  40. package/dist/features/data-view/useDataSheetExcelManager.js +31 -0
  41. package/dist/features/data-view/useDataSheetFilterManager.d.ts +13 -0
  42. package/dist/features/data-view/useDataSheetFilterManager.d.ts.map +1 -0
  43. package/dist/features/data-view/useDataSheetFilterManager.js +19 -0
  44. package/dist/features/data-view/useDataSheetInlineEditManager.d.ts +26 -0
  45. package/dist/features/data-view/useDataSheetInlineEditManager.d.ts.map +1 -0
  46. package/dist/features/data-view/useDataSheetInlineEditManager.js +54 -0
  47. package/dist/features/data-view/useDataSheetModalEditManager.d.ts +19 -0
  48. package/dist/features/data-view/useDataSheetModalEditManager.d.ts.map +1 -0
  49. package/dist/features/data-view/useDataSheetModalEditManager.js +44 -0
  50. package/dist/features/data-view/useDataSheetRefreshManager.d.ts +25 -0
  51. package/dist/features/data-view/useDataSheetRefreshManager.d.ts.map +1 -0
  52. package/dist/features/data-view/useDataSheetRefreshManager.js +50 -0
  53. package/dist/features/permission-table/sd-permission-table.control.d.ts +1 -1
  54. package/dist/features/permission-table/sd-permission-table.control.d.ts.map +1 -1
  55. package/dist/index.d.ts +12 -6
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +10 -5
  58. package/dist/ui/data/sheet/sd-sheet-config.modal.d.ts +1 -2
  59. package/dist/ui/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
  60. package/dist/ui/data/sheet/sd-sheet-config.modal.js +8 -11
  61. package/dist/ui/data/sheet/sd-sheet.control.d.ts +22 -30
  62. package/dist/ui/data/sheet/sd-sheet.control.d.ts.map +1 -1
  63. package/dist/ui/data/sheet/sd-sheet.control.js +52 -210
  64. package/dist/ui/data/sheet/useSheetCellStyling.d.ts +22 -0
  65. package/dist/ui/data/sheet/useSheetCellStyling.d.ts.map +1 -0
  66. package/dist/ui/data/sheet/useSheetCellStyling.js +95 -0
  67. package/dist/ui/data/sheet/useSheetColumnResizing.d.ts +17 -0
  68. package/dist/ui/data/sheet/useSheetColumnResizing.d.ts.map +1 -0
  69. package/dist/ui/data/sheet/useSheetColumnResizing.js +65 -0
  70. package/dist/ui/data/sheet/useSheetDisplayPipeline.d.ts +24 -0
  71. package/dist/ui/data/sheet/useSheetDisplayPipeline.d.ts.map +1 -0
  72. package/dist/ui/data/sheet/useSheetDisplayPipeline.js +52 -0
  73. package/dist/ui/form/button/sd-modal-select-button.control.d.ts +1 -7
  74. package/dist/ui/form/button/sd-modal-select-button.control.d.ts.map +1 -1
  75. package/dist/ui/form/button/sd-modal-select-button.control.js +1 -1
  76. package/dist/ui/form/choice/sd-state-preset.control.js +1 -1
  77. package/dist/ui/form/select/sd-select.control.d.ts +1 -1
  78. package/dist/ui/form/select/sd-select.control.d.ts.map +1 -1
  79. package/dist/ui/form/select/sd-select.control.js +23 -27
  80. package/dist/ui/layout/sd-gap.control.d.ts +1 -2
  81. package/dist/ui/layout/sd-gap.control.d.ts.map +1 -1
  82. package/dist/ui/layout/sd-gap.control.js +22 -24
  83. package/dist/ui/navigation/menu-utils.d.ts +2 -7
  84. package/dist/ui/navigation/menu-utils.d.ts.map +1 -1
  85. package/dist/ui/overlay/busy/sd-busy-container.control.d.ts +1 -1
  86. package/dist/ui/overlay/busy/sd-busy-container.control.d.ts.map +1 -1
  87. package/dist/ui/overlay/busy/sd-busy-container.control.js +1 -1
  88. package/dist/ui/overlay/modal/sd-confirm-modal.control.d.ts.map +1 -1
  89. package/dist/ui/overlay/modal/sd-confirm-modal.control.js +29 -23
  90. package/dist/ui/overlay/modal/sd-modal.control.js +1 -1
  91. package/dist/ui/overlay/modal/sd-modal.provider.d.ts +0 -10
  92. package/dist/ui/overlay/modal/sd-modal.provider.d.ts.map +1 -1
  93. package/dist/ui/overlay/modal/sd-modal.provider.js +1 -13
  94. package/dist/ui/overlay/modal/sd-prompt-modal.control.d.ts.map +1 -1
  95. package/dist/ui/overlay/modal/sd-prompt-modal.control.js +40 -33
  96. package/dist/ui/overlay/toast/sd-toast.control.d.ts +1 -1
  97. package/dist/ui/overlay/toast/sd-toast.control.d.ts.map +1 -1
  98. package/package.json +5 -5
  99. package/src/core/provideSdAngular.ts +1 -1
  100. package/src/core/providers/sd-activated-modal.provider.ts +12 -0
  101. package/src/core/providers/sd-app-structure.provider.ts +2 -405
  102. package/src/core/providers/sd-app-structure.types.ts +60 -0
  103. package/src/core/providers/sd-app-structure.utils.ts +350 -0
  104. package/src/{ui/overlay/busy → core/providers}/sd-busy.provider.ts +1 -1
  105. package/src/core/providers/sd-print.provider.ts +1 -1
  106. package/src/core/providers/sd-service-client-factory.provider.ts +1 -1
  107. package/src/{ui/overlay/toast → core/providers}/sd-toast.provider.ts +4 -4
  108. package/src/core/types/select-modal-output-result.ts +7 -0
  109. package/src/core/utils/setups/setupCanDeactivate.ts +1 -1
  110. package/src/core/utils/useViewTitleSignal.ts +1 -1
  111. package/src/core/utils/useViewTypeSignal.ts +1 -1
  112. package/src/features/base/sd-base-container.control.ts +1 -1
  113. package/src/features/data-view/sd-data-detail.control.ts +1 -1
  114. package/src/features/data-view/sd-data-sheet.control.ts +117 -216
  115. package/src/features/data-view/sd-data-sheet.types.ts +18 -0
  116. package/src/{core/utils/setups → features/data-view}/setupCloserWhenSingleSelectionChange.ts +1 -1
  117. package/src/features/data-view/useDataSheetExcelManager.ts +57 -0
  118. package/src/features/data-view/useDataSheetFilterManager.ts +30 -0
  119. package/src/features/data-view/useDataSheetInlineEditManager.ts +89 -0
  120. package/src/features/data-view/useDataSheetModalEditManager.ts +76 -0
  121. package/src/features/data-view/useDataSheetRefreshManager.ts +90 -0
  122. package/src/features/permission-table/sd-permission-table.control.ts +1 -1
  123. package/src/index.ts +17 -11
  124. package/src/ui/data/sheet/sd-sheet-config.modal.ts +7 -11
  125. package/src/ui/data/sheet/sd-sheet.control.ts +50 -238
  126. package/src/ui/data/sheet/useSheetCellStyling.ts +113 -0
  127. package/src/ui/data/sheet/useSheetColumnResizing.ts +92 -0
  128. package/src/ui/data/sheet/useSheetDisplayPipeline.ts +64 -0
  129. package/src/ui/form/button/sd-modal-select-button.control.ts +1 -8
  130. package/src/ui/form/choice/sd-state-preset.control.ts +1 -1
  131. package/src/ui/form/select/sd-select.control.ts +21 -26
  132. package/src/ui/layout/sd-gap.control.ts +17 -21
  133. package/src/ui/navigation/menu-utils.ts +3 -7
  134. package/src/ui/overlay/busy/sd-busy-container.control.ts +1 -1
  135. package/src/ui/overlay/modal/sd-confirm-modal.control.ts +8 -26
  136. package/src/ui/overlay/modal/sd-modal.control.ts +1 -1
  137. package/src/ui/overlay/modal/sd-modal.provider.ts +1 -10
  138. package/src/ui/overlay/modal/sd-prompt-modal.control.ts +17 -43
  139. package/src/ui/overlay/toast/sd-toast.control.ts +1 -1
  140. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.d.ts.map +0 -1
  141. package/dist/ui/overlay/busy/sd-busy.provider.d.ts.map +0 -1
  142. package/dist/ui/overlay/toast/sd-toast.provider.d.ts.map +0 -1
  143. /package/dist/{core/utils/setups → features/data-view}/setupCloserWhenSingleSelectionChange.js +0 -0
@@ -1,6 +1,7 @@
1
1
  import { type InputSignal } from "@angular/core";
2
2
  import { type ISdModal, type ISdModalInfo, type ISdModalOptions } from "../../overlay/modal/sd-modal.provider";
3
3
  import type { TSelectModeValue } from "../select/sd-select.control";
4
+ import type { ISelectModalOutputResult } from "../../../core/types/select-modal-output-result";
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
7
  * 모달 선택 컴포넌트가 구현해야 하는 인터페이스
@@ -10,13 +11,6 @@ export interface ISdSelectModal<T> extends ISdModal<ISelectModalOutputResult<T>>
10
11
  selectMode: InputSignal<"single" | "multi" | undefined>;
11
12
  selectedItemKeys: InputSignal<any[]>;
12
13
  }
13
- /**
14
- * 모달 선택 결과
15
- */
16
- export interface ISelectModalOutputResult<T> {
17
- selectedItemKeys: any[];
18
- selectedItems: T[];
19
- }
20
14
  /**
21
15
  * 모달 선택 정보 (selectMode/selectedItemKeys를 제외한 inputs)
22
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sd-modal-select-button.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/form/button/sd-modal-select-button.control.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;;AAOpE;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC9E,UAAU,EAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACxD,gBAAgB,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACxB,aAAa,EAAE,CAAC,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,IAAI,YAAY,CAC1E,CAAC,EACD,YAAY,GAAG,kBAAkB,CAClC,CAAC;AAEF,qBAuGa,0BAA0B,CACrC,CAAC,SAAS,MAAM,EAChB,CAAC,EACD,CAAC,SAAS,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,KAAK,qDAA2D;IAEhE,KAAK,0EAAmC;IACxC,aAAa,2CAAkB;IAE/B,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,KAAK,qEAAiD;IACtD,IAAI,uCAAwB;IAC5B,UAAU,iBAA2B;IACrC,YAAY,2CAA4B;IAExC,UAAU,sBAAuB;IAEjC,SAAS,CAAC,QAAQ,CAAC,YAAY,obAAgB;IAE/C,SAAS,0CAKN;;IAYH,YAAY,IAAI,IAAI;IAKd,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;yCA7CzB,0BAA0B;2CAA1B,0BAA0B;CAkEtC"}
1
+ {"version":3,"file":"sd-modal-select-button.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/form/button/sd-modal-select-button.control.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAIpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;;AAI/F;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC9E,UAAU,EAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACxD,gBAAgB,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,IAAI,YAAY,CAC1E,CAAC,EACD,YAAY,GAAG,kBAAkB,CAClC,CAAC;AAEF,qBAuGa,0BAA0B,CACrC,CAAC,SAAS,MAAM,EAChB,CAAC,EACD,CAAC,SAAS,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,KAAK,qDAA2D;IAEhE,KAAK,0EAAmC;IACxC,aAAa,2CAAkB;IAE/B,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,KAAK,qEAAiD;IACtD,IAAI,uCAAwB;IAC5B,UAAU,iBAA2B;IACrC,YAAY,2CAA4B;IAExC,UAAU,sBAAuB;IAEjC,SAAS,CAAC,QAAQ,CAAC,YAAY,obAAgB;IAE/C,SAAS,0CAKN;;IAYH,YAAY,IAAI,IAAI;IAKd,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;yCA7CzB,0BAA0B;2CAA1B,0BAA0B;CAkEtC"}
@@ -129,4 +129,4 @@ export class SdModalSelectButtonControl {
129
129
  "[attr.data-sd-disabled]": "disabled()",
130
130
  }, styles: ["sd-modal-select-button {\n display: flex;\n flex-direction: row;\n gap: var(--gap-sm);\n position: relative;\n border: 1px solid var(--trans-light);\n border-radius: var(--border-radius-default);\n overflow: hidden;\n}\nsd-modal-select-button > ._content {\n flex: 1;\n padding: var(--gap-sm) var(--gap-default);\n}\nsd-modal-select-button > ._button {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: row;\n}\n@supports not (appearance: auto) {\n sd-modal-select-button > ._button.gap-xxs {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-xxs > * + * {\n margin-left: var(--gap-xxs);\n }\n sd-modal-select-button > ._button.gap-xs {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-xs > * + * {\n margin-left: var(--gap-xs);\n }\n sd-modal-select-button > ._button.gap-sm {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-sm > * + * {\n margin-left: var(--gap-sm);\n }\n sd-modal-select-button > ._button.gap-default {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-default > * + * {\n margin-left: var(--gap-default);\n }\n sd-modal-select-button > ._button.gap-lg {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-lg > * + * {\n margin-left: var(--gap-lg);\n }\n sd-modal-select-button > ._button.gap-xl {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-xl > * + * {\n margin-left: var(--gap-xl);\n }\n sd-modal-select-button > ._button.gap-xxl {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-xxl > * + * {\n margin-left: var(--gap-xxl);\n }\n sd-modal-select-button > ._button.gap-0 {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-0 > * + * {\n margin-left: var(--gap-0);\n }\n sd-modal-select-button > ._button.gap-auto {\n gap: 0;\n }\n sd-modal-select-button > ._button.gap-auto > * + * {\n margin-left: var(--gap-auto);\n }\n}\nsd-modal-select-button > ._button > sd-anchor {\n padding: var(--gap-sm) !important;\n}\nsd-modal-select-button > ._button > sd-button > button {\n border-left: 1px solid var(--trans-lighter) !important;\n padding: var(--gap-sm) !important;\n height: 100%;\n}\nsd-modal-select-button[data-sd-inset=true] {\n border-radius: 0;\n border: none;\n}\nsd-modal-select-button[data-sd-size=sm] > ._content {\n padding: var(--gap-xs) var(--gap-default);\n}\nsd-modal-select-button[data-sd-size=sm] > ._button > sd-anchor {\n padding: var(--gap-xs) var(--gap-sm) !important;\n}\nsd-modal-select-button[data-sd-size=sm] > ._button > sd-button > button {\n padding: var(--gap-xs) var(--gap-sm) !important;\n}\nsd-modal-select-button[data-sd-size=lg] > ._content {\n padding: var(--gap-default) var(--gap-xl);\n}\nsd-modal-select-button[data-sd-size=lg] > ._button > sd-anchor {\n padding: var(--gap-default) !important;\n}\nsd-modal-select-button[data-sd-size=lg] > ._button > sd-button > button {\n padding: var(--gap-default) !important;\n}"] }]
131
131
  }], () => [], { modal: [{ type: i0.Input, args: [{ isSignal: true, alias: "modal", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], selectedItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedItems", required: false }] }, { type: i0.Output, args: ["selectedItemsChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], selectMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectMode", required: false }] }], modalOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "modalOptions", required: false }] }], searchIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchIcon", required: false }] }] }); })();
132
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdModalSelectButtonControl, { className: "SdModalSelectButtonControl", filePath: "packages/angular/src/ui/form/button/sd-modal-select-button.control.ts", lineNumber: 153, forbidOrphanRendering: true }); })();
132
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdModalSelectButtonControl, { className: "SdModalSelectButtonControl", filePath: "packages/angular/src/ui/form/button/sd-modal-select-button.control.ts", lineNumber: 146, forbidOrphanRendering: true }); })();
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, inject, input, model, ViewEncapsulation, } from "@angular/core";
2
2
  import { SdModalProvider } from "../../overlay/modal/sd-modal.provider";
3
- import { SdToastProvider } from "../../overlay/toast/sd-toast.provider";
3
+ import { SdToastProvider } from "../../../core/providers/sd-toast.provider";
4
4
  import { SdPromptModalControl } from "../../overlay/modal/sd-prompt-modal.control";
5
5
  import { SdConfirmModalControl } from "../../overlay/modal/sd-confirm-modal.control";
6
6
  import { useSdSystemConfigResource } from "../../../core/utils/useSdSystemConfigResource";
@@ -29,7 +29,7 @@ export declare class SdSelectControl<M extends "single" | "multi", T> {
29
29
  _beforeTpl: import("@angular/core").Signal<TemplateRef<void> | undefined>;
30
30
  _itemOfTpl: import("@angular/core").Signal<TemplateRef<any> | undefined>;
31
31
  _selectedItemContentHTML: import("@angular/core").WritableSignal<string | undefined>;
32
- _flatItems: import("@angular/core").WritableSignal<{
32
+ _flatItems: import("@angular/core").Signal<{
33
33
  data: T;
34
34
  index: number;
35
35
  depth: number;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-select.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/form/select/sd-select.control.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,WAAW,EAIZ,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;;AAU/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AAEF,qBAmJa,eAAe,CAAC,CAAC,SAAS,QAAQ,GAAG,OAAO,EAAE,CAAC;IAC1D,UAAU,yCAAwB;IAClC,KAAK,4EAAqC;IAC1C,WAAW,0DAAmB;IAC9B,QAAQ,qEAAiD;IACzD,MAAM,qEAAiD;IACvD,KAAK,qEAAiD;IACtD,IAAI,+DAAwB;IAC5B,QAAQ,qEAAiD;IAEzD,aAAa,qEAAiD;IAC9D,8BAA8B,8DAAuB;IAErD,KAAK,uDAAgB;IACrB,aAAa,8CAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,eAAI;IAEtD,YAAY,0DAAmB;IAC/B,YAAY,0DAAmB;IAE/B,YAAY,kDAAiB;IAE7B,SAAS,CAAC,QAAQ,CAAC,eAAe,iUAAmB;IAErD,aAAa,sEAAwC;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAC1E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG7B;IAEF,UAAU,gEAAgD;IAC1D,UAAU,gEAAgD;IAC1D,UAAU,+DAAkE;IAE5E,wBAAwB,6DAAyC;IAEjE,UAAU;cAAkB,CAAC;eAAS,MAAM;eAAS,MAAM;SAAU;;IA2JrE,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI;IAO9B,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI;IAI9B,OAAO,CAAC,YAAY;IAepB,WAAW,IAAI,IAAI;IAQnB,aAAa,IAAI,IAAI;IAIrB,aAAa,IAAI,IAAI;IAIrB,YAAY,IAAI,IAAI;yCAzOT,eAAe;2CAAf,eAAe;CA6O3B"}
1
+ {"version":3,"file":"sd-select.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/form/select/sd-select.control.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,WAAW,EAIZ,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;;AAU/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AAEF,qBAmJa,eAAe,CAAC,CAAC,SAAS,QAAQ,GAAG,OAAO,EAAE,CAAC;IAC1D,UAAU,yCAAwB;IAClC,KAAK,4EAAqC;IAC1C,WAAW,0DAAmB;IAC9B,QAAQ,qEAAiD;IACzD,MAAM,qEAAiD;IACvD,KAAK,qEAAiD;IACtD,IAAI,+DAAwB;IAC5B,QAAQ,qEAAiD;IAEzD,aAAa,qEAAiD;IAC9D,8BAA8B,8DAAuB;IAErD,KAAK,uDAAgB;IACrB,aAAa,8CAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,eAAI;IAEtD,YAAY,0DAAmB;IAC/B,YAAY,0DAAmB;IAE/B,YAAY,kDAAiB;IAE7B,SAAS,CAAC,QAAQ,CAAC,eAAe,iUAAmB;IAErD,aAAa,sEAAwC;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAC1E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG7B;IAEF,UAAU,gEAAgD;IAC1D,UAAU,gEAAgD;IAC1D,UAAU,+DAAkE;IAE5E,wBAAwB,6DAAyC;IAEjE,UAAU;cAIY,CAAC;eAAS,MAAM;eAAS,MAAM;SAelD;;IAkIH,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI;IAO9B,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI;IAI9B,OAAO,CAAC,YAAY;IAepB,WAAW,IAAI,IAAI;IAQnB,aAAa,IAAI,IAAI;IAIrB,aAAa,IAAI,IAAI;IAIrB,YAAY,IAAI,IAAI;yCAnOT,eAAe;2CAAf,eAAe;CAuO3B"}
@@ -1,4 +1,4 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, contentChild, contentChildren, effect, ElementRef, input, model, signal, TemplateRef, untracked, viewChild, ViewEncapsulation, } from "@angular/core";
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, contentChildren, effect, ElementRef, input, model, signal, TemplateRef, untracked, viewChild, ViewEncapsulation, } from "@angular/core";
2
2
  import { NgTemplateOutlet } from "@angular/common";
3
3
  import { SdDropdownControl } from "../../overlay/dropdown/sd-dropdown.control";
4
4
  import { SdDropdownPopupControl } from "../../overlay/dropdown/sd-dropdown-popup.control";
@@ -119,7 +119,27 @@ export class SdSelectControl {
119
119
  _beforeTpl = contentChild("beforeTpl", ...(ngDevMode ? [{ debugName: "_beforeTpl" }] : /* istanbul ignore next */ []));
120
120
  _itemOfTpl = contentChild(SdItemOfTemplateDirective, { ...(ngDevMode ? { debugName: "_itemOfTpl" } : /* istanbul ignore next */ {}), read: TemplateRef });
121
121
  _selectedItemContentHTML = signal(undefined, ...(ngDevMode ? [{ debugName: "_selectedItemContentHTML" }] : /* istanbul ignore next */ []));
122
- _flatItems = signal([], ...(ngDevMode ? [{ debugName: "_flatItems" }] : /* istanbul ignore next */ []));
122
+ _flatItems = computed(() => {
123
+ const items = this.items();
124
+ if (items == null)
125
+ return [];
126
+ const getChildren = this.getChildrenFn();
127
+ const flat = [];
128
+ let index = 0;
129
+ const walk = (list, depth) => {
130
+ for (const item of list) {
131
+ flat.push({ data: item, index: index++, depth });
132
+ if (getChildren !== undefined) {
133
+ const children = getChildren(item);
134
+ if (children !== undefined) {
135
+ walk(children, depth + 1);
136
+ }
137
+ }
138
+ }
139
+ };
140
+ walk(items, 0);
141
+ return flat;
142
+ }, ...(ngDevMode ? [{ debugName: "_flatItems" }] : /* istanbul ignore next */ []));
123
143
  constructor() {
124
144
  // Required validation
125
145
  setupInvalid(() => {
@@ -132,30 +152,6 @@ export class SdSelectControl {
132
152
  return "선택된 항목이 없습니다.";
133
153
  return "";
134
154
  });
135
- // Flatten items array (with hierarchy support)
136
- effect(() => {
137
- const items = this.items();
138
- if (items == null) {
139
- this._flatItems.set([]);
140
- return;
141
- }
142
- const getChildren = this.getChildrenFn();
143
- const flat = [];
144
- let index = 0;
145
- const walk = (list, depth) => {
146
- for (const item of list) {
147
- flat.push({ data: item, index: index++, depth });
148
- if (getChildren !== undefined) {
149
- const children = getChildren(item);
150
- if (children !== undefined) {
151
- walk(children, depth + 1);
152
- }
153
- }
154
- }
155
- };
156
- walk(items, 0);
157
- this._flatItems.set(flat);
158
- });
159
155
  // D3: contentClass/contentStyle via effect() on popup element
160
156
  // + D4: keyboard navigation via tabbable()
161
157
  effect((onCleanup) => {
@@ -431,4 +427,4 @@ export class SdSelectControl {
431
427
  "[attr.data-sd-disabled]": "disabled()",
432
428
  }, styles: ["sd-select {\n display: block;\n position: relative;\n}\nsd-select > sd-dropdown > ._sd-select-control {\n display: block;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid transparent;\n font-size: var(--font-size-default);\n font-family: var(--font-family);\n font-variant-numeric: tabular-nums;\n line-height: var(--line-height);\n color: var(--text-trans-default);\n display: flex;\n align-items: center;\n cursor: pointer;\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: var(--theme-secondary-lightest);\n}\nsd-select > sd-dropdown > ._sd-select-control > ._sd-select-control-content {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\nsd-select > sd-dropdown > ._sd-select-control > ._sd-select-control-icon {\n margin-left: var(--gap-sm);\n opacity: 0.3;\n}\nsd-select > sd-dropdown:focus-within > ._sd-select-control {\n border-color: var(--theme-secondary-default);\n}\nsd-select[data-sd-size=sm] > sd-dropdown > ._sd-select-control {\n padding: var(--gap-xs) var(--gap-sm);\n}\nsd-select[data-sd-size=lg] > sd-dropdown > ._sd-select-control {\n padding: var(--gap-default) var(--gap-lg);\n}\nsd-select[data-sd-inline=true] {\n display: inline-block;\n width: auto;\n}\nsd-select[data-sd-inset=true] > sd-dropdown > ._sd-select-control {\n border: none;\n border-radius: 0;\n}\nsd-select[data-sd-inset=true] > sd-dropdown > ._sd-select-control:focus-within {\n outline: 1px solid var(--theme-primary-default);\n}\nsd-select[data-sd-disabled=true] > sd-dropdown > ._sd-select-control {\n background: var(--trans-lighter);\n cursor: default;\n}\nsd-select[data-sd-disabled=true] > sd-dropdown > ._sd-select-control > ._sd-select-control-icon {\n display: none;\n}\n\n._sd-select-all-bar {\n display: flex;\n padding: var(--gap-sm) var(--gap-default);\n border-bottom: 1px solid var(--border-color-light);\n}"] }]
433
429
  }], () => [], { selectMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectMode", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], hideSelectAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideSelectAll", required: false }] }], multiSelectionDisplayDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSelectionDisplayDirection", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], getChildrenFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "getChildrenFn", required: false }] }], contentClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentClass", required: false }] }], contentStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentStyle", required: false }] }], _itemControls: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SdSelectItemControl), { isSignal: true }] }], _dropdownControl: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SdDropdownControl), { isSignal: true }] }], _dropdownElRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SdDropdownControl), { ...{ read: ElementRef }, isSignal: true }] }], _headerTpl: [{ type: i0.ContentChild, args: ["headerTpl", { isSignal: true }] }], _beforeTpl: [{ type: i0.ContentChild, args: ["beforeTpl", { isSignal: true }] }], _itemOfTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SdItemOfTemplateDirective), { ...{ read: TemplateRef }, isSignal: true }] }] }); })();
434
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSelectControl, { className: "SdSelectControl", filePath: "packages/angular/src/ui/form/select/sd-select.control.ts", lineNumber: 182, forbidOrphanRendering: true }); })();
430
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSelectControl, { className: "SdSelectControl", filePath: "packages/angular/src/ui/form/select/sd-select.control.ts", lineNumber: 183, forbidOrphanRendering: true }); })();
@@ -1,12 +1,11 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class SdGapControl {
3
- private readonly _elRef;
4
3
  height: import("@angular/core").InputSignal<"default" | "sm" | "lg" | "xxs" | "xs" | "xl" | "xxl" | undefined>;
5
4
  heightPx: import("@angular/core").InputSignal<number | undefined>;
6
5
  width: import("@angular/core").InputSignal<"default" | "sm" | "lg" | "xxs" | "xs" | "xl" | "xxl" | undefined>;
7
6
  widthPx: import("@angular/core").InputSignal<number | undefined>;
8
7
  widthEm: import("@angular/core").InputSignal<number | undefined>;
9
- constructor();
8
+ _displayStyle: import("@angular/core").Signal<"none" | "block" | "inline-block" | undefined>;
10
9
  static ɵfac: i0.ɵɵFactoryDeclaration<SdGapControl, never>;
11
10
  static ɵcmp: i0.ɵɵComponentDeclaration<SdGapControl, "sd-gap", never, { "height": { "alias": "height"; "required": false; "isSignal": true; }; "heightPx": { "alias": "heightPx"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "widthPx": { "alias": "widthPx"; "required": false; "isSignal": true; }; "widthEm": { "alias": "widthEm"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sd-gap.control.d.ts","sourceRoot":"","sources":["../../../src/ui/layout/sd-gap.control.ts"],"names":[],"mappings":";AAEA,qBAkCa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAE1D,MAAM,yGAAkE;IACxE,QAAQ,0DAAmB;IAC3B,KAAK,yGAAkE;IACvE,OAAO,0DAAmB;IAC1B,OAAO,0DAAmB;;yCAPf,YAAY;2CAAZ,YAAY;CA0BxB"}
1
+ {"version":3,"file":"sd-gap.control.d.ts","sourceRoot":"","sources":["../../../src/ui/layout/sd-gap.control.ts"],"names":[],"mappings":";AAEA,qBAkCa,YAAY;IACvB,MAAM,yGAAkE;IACxE,QAAQ,0DAAmB;IAC3B,KAAK,yGAAkE;IACvE,OAAO,0DAAmB;IAC1B,OAAO,0DAAmB;IAE1B,aAAa,gFAcV;yCArBQ,YAAY;2CAAZ,YAAY;CAsBxB"}
@@ -1,44 +1,42 @@
1
- import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, ViewEncapsulation } from "@angular/core";
1
+ import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class SdGapControl {
4
- _elRef = inject((ElementRef));
5
4
  height = input(...(ngDevMode ? [undefined, { debugName: "height" }] : /* istanbul ignore next */ []));
6
5
  heightPx = input(...(ngDevMode ? [undefined, { debugName: "heightPx" }] : /* istanbul ignore next */ []));
7
6
  width = input(...(ngDevMode ? [undefined, { debugName: "width" }] : /* istanbul ignore next */ []));
8
7
  widthPx = input(...(ngDevMode ? [undefined, { debugName: "widthPx" }] : /* istanbul ignore next */ []));
9
8
  widthEm = input(...(ngDevMode ? [undefined, { debugName: "widthEm" }] : /* istanbul ignore next */ []));
10
- constructor() {
11
- effect(() => {
12
- if (this.widthPx() === 0 || this.heightPx() === 0 || this.widthEm() === 0) {
13
- this._elRef.nativeElement.style.display = "none";
14
- }
15
- else if (this.width() !== undefined ||
16
- this.widthPx() !== undefined ||
17
- this.widthEm() !== undefined) {
18
- this._elRef.nativeElement.style.display = "inline-block";
19
- }
20
- else if (this.height() !== undefined || this.heightPx() !== undefined) {
21
- this._elRef.nativeElement.style.display = "block";
22
- }
23
- else {
24
- this._elRef.nativeElement.style.display = "";
25
- }
26
- });
27
- }
9
+ _displayStyle = computed(() => {
10
+ if (this.widthPx() === 0 || this.heightPx() === 0 || this.widthEm() === 0) {
11
+ return "none";
12
+ }
13
+ else if (this.width() !== undefined ||
14
+ this.widthPx() !== undefined ||
15
+ this.widthEm() !== undefined) {
16
+ return "inline-block";
17
+ }
18
+ else if (this.height() !== undefined || this.heightPx() !== undefined) {
19
+ return "block";
20
+ }
21
+ else {
22
+ return undefined;
23
+ }
24
+ }, ...(ngDevMode ? [{ debugName: "_displayStyle" }] : /* istanbul ignore next */ []));
28
25
  static ɵfac = function SdGapControl_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdGapControl)(); };
29
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdGapControl, selectors: [["sd-gap"]], hostVars: 8, hostBindings: function SdGapControl_HostBindings(rf, ctx) { if (rf & 2) {
26
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdGapControl, selectors: [["sd-gap"]], hostVars: 10, hostBindings: function SdGapControl_HostBindings(rf, ctx) { if (rf & 2) {
30
27
  i0.ɵɵattribute("data-sd-height", ctx.height())("data-sd-width", ctx.width());
31
- i0.ɵɵstyleProp("height", ctx.heightPx(), "px")("width", ctx.widthPx(), "px")("width", ctx.widthEm(), "em");
28
+ i0.ɵɵstyleProp("height", ctx.heightPx(), "px")("width", ctx.widthPx(), "px")("width", ctx.widthEm(), "em")("display", ctx._displayStyle());
32
29
  } }, inputs: { height: [1, "height"], heightPx: [1, "heightPx"], width: [1, "width"], widthPx: [1, "widthPx"], widthEm: [1, "widthEm"] }, decls: 0, vars: 0, template: function SdGapControl_Template(rf, ctx) { }, styles: ["sd-gap[data-sd-height=xxs] {\n height: var(--gap-xxs);\n}\nsd-gap[data-sd-width=xxs] {\n width: var(--gap-xxs);\n}\nsd-gap[data-sd-height=xs] {\n height: var(--gap-xs);\n}\nsd-gap[data-sd-width=xs] {\n width: var(--gap-xs);\n}\nsd-gap[data-sd-height=sm] {\n height: var(--gap-sm);\n}\nsd-gap[data-sd-width=sm] {\n width: var(--gap-sm);\n}\nsd-gap[data-sd-height=default] {\n height: var(--gap-default);\n}\nsd-gap[data-sd-width=default] {\n width: var(--gap-default);\n}\nsd-gap[data-sd-height=lg] {\n height: var(--gap-lg);\n}\nsd-gap[data-sd-width=lg] {\n width: var(--gap-lg);\n}\nsd-gap[data-sd-height=xl] {\n height: var(--gap-xl);\n}\nsd-gap[data-sd-width=xl] {\n width: var(--gap-xl);\n}\nsd-gap[data-sd-height=xxl] {\n height: var(--gap-xxl);\n}\nsd-gap[data-sd-width=xxl] {\n width: var(--gap-xxl);\n}\nsd-gap[data-sd-height=\"0\"] {\n height: var(--gap-0);\n}\nsd-gap[data-sd-width=\"0\"] {\n width: var(--gap-0);\n}\nsd-gap[data-sd-height=auto] {\n height: var(--gap-auto);\n}\nsd-gap[data-sd-width=auto] {\n width: var(--gap-auto);\n}"], encapsulation: 2, changeDetection: 0 });
33
30
  }
34
31
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdGapControl, [{
35
32
  type: Component,
36
- args: [{ selector: "sd-gap", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [], template: "", host: {
33
+ args: [{ selector: "sd-gap", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [], template: "", host: {
37
34
  "[attr.data-sd-height]": "height()",
38
35
  "[style.height.px]": "heightPx()",
39
36
  "[attr.data-sd-width]": "width()",
40
37
  "[style.width.px]": "widthPx()",
41
38
  "[style.width.em]": "widthEm()",
39
+ "[style.display]": "_displayStyle()",
42
40
  }, styles: ["sd-gap[data-sd-height=xxs] {\n height: var(--gap-xxs);\n}\nsd-gap[data-sd-width=xxs] {\n width: var(--gap-xxs);\n}\nsd-gap[data-sd-height=xs] {\n height: var(--gap-xs);\n}\nsd-gap[data-sd-width=xs] {\n width: var(--gap-xs);\n}\nsd-gap[data-sd-height=sm] {\n height: var(--gap-sm);\n}\nsd-gap[data-sd-width=sm] {\n width: var(--gap-sm);\n}\nsd-gap[data-sd-height=default] {\n height: var(--gap-default);\n}\nsd-gap[data-sd-width=default] {\n width: var(--gap-default);\n}\nsd-gap[data-sd-height=lg] {\n height: var(--gap-lg);\n}\nsd-gap[data-sd-width=lg] {\n width: var(--gap-lg);\n}\nsd-gap[data-sd-height=xl] {\n height: var(--gap-xl);\n}\nsd-gap[data-sd-width=xl] {\n width: var(--gap-xl);\n}\nsd-gap[data-sd-height=xxl] {\n height: var(--gap-xxl);\n}\nsd-gap[data-sd-width=xxl] {\n width: var(--gap-xxl);\n}\nsd-gap[data-sd-height=\"0\"] {\n height: var(--gap-0);\n}\nsd-gap[data-sd-width=\"0\"] {\n width: var(--gap-0);\n}\nsd-gap[data-sd-height=auto] {\n height: var(--gap-auto);\n}\nsd-gap[data-sd-width=auto] {\n width: var(--gap-auto);\n}"] }]
43
- }], () => [], { height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], heightPx: [{ type: i0.Input, args: [{ isSignal: true, alias: "heightPx", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], widthPx: [{ type: i0.Input, args: [{ isSignal: true, alias: "widthPx", required: false }] }], widthEm: [{ type: i0.Input, args: [{ isSignal: true, alias: "widthEm", required: false }] }] }); })();
41
+ }], null, { height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], heightPx: [{ type: i0.Input, args: [{ isSignal: true, alias: "heightPx", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], widthPx: [{ type: i0.Input, args: [{ isSignal: true, alias: "widthPx", required: false }] }], widthEm: [{ type: i0.Input, args: [{ isSignal: true, alias: "widthEm", required: false }] }] }); })();
44
42
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdGapControl, { className: "SdGapControl", filePath: "packages/angular/src/ui/layout/sd-gap.control.ts", lineNumber: 37, forbidOrphanRendering: true }); })();
@@ -1,10 +1,5 @@
1
- export interface ISdMenu {
2
- title: string;
3
- codeChain: string[];
4
- url?: string;
5
- icon?: string;
6
- children?: ISdMenu[];
7
- }
1
+ import type { ISdMenu } from "../../core/providers/sd-app-structure.types";
2
+ export type { ISdMenu } from "../../core/providers/sd-app-structure.types";
8
3
  export declare function getMenuRouterLinkOption(menu: ISdMenu): {
9
4
  link: string;
10
5
  queryParams: Record<string, string> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"menu-utils.d.ts","sourceRoot":"","sources":["../../../src/ui/navigation/menu-utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,CAiB/E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACpC,OAAO,CAET"}
1
+ {"version":3,"file":"menu-utils.d.ts","sourceRoot":"","sources":["../../../src/ui/navigation/menu-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6CAA6C,CAAC;AAE3E,YAAY,EAAE,OAAO,EAAE,MAAM,6CAA6C,CAAC;AAE3E,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,CAiB/E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACpC,OAAO,CAET"}
@@ -1,4 +1,4 @@
1
- import { type TSdBusyType } from "./sd-busy.provider";
1
+ import { type TSdBusyType } from "../../../core/providers/sd-busy.provider";
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class SdBusyContainerControl {
4
4
  private readonly _sdBusy;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-busy-container.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/busy/sd-busy-container.control.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;;AAEtE,qBA+Ma,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD,IAAI,qEAAiD;IACrD,OAAO,0DAAwC;IAC/C,IAAI,+DAA6C;IACjD,eAAe,0DAAwC;IAEvD,QAAQ,8CAAsD;;yCARnD,sBAAsB;2CAAtB,sBAAsB;CAuBlC"}
1
+ {"version":3,"file":"sd-busy-container.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/busy/sd-busy-container.control.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,0CAA0C,CAAC;;AAE5F,qBA+Ma,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD,IAAI,qEAAiD;IACrD,OAAO,0DAAwC;IAC/C,IAAI,+DAA6C;IACjD,eAAe,0DAAwC;IAEvD,QAAQ,8CAAsD;;yCARnD,sBAAsB;2CAAtB,sBAAsB;CAuBlC"}
@@ -1,5 +1,5 @@
1
1
  import { booleanAttribute, ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, ViewEncapsulation, } from "@angular/core";
2
- import { SdBusyProvider } from "./sd-busy.provider";
2
+ import { SdBusyProvider } from "../../../core/providers/sd-busy.provider";
3
3
  import * as i0 from "@angular/core";
4
4
  const _c0 = ["*"];
5
5
  function SdBusyContainerControl_Conditional_0_Case_3_Template(rf, ctx) { if (rf & 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"sd-confirm-modal.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/modal/sd-confirm-modal.control.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;;AAGpD;;;;GAIG;AACH,qBAoCa,qBAAsB,YAAW,QAAQ,CAAC,OAAO,CAAC;IAC7D,WAAW,kDAAgB;IAC3B,KAAK,gEAAiC;IAEtC,OAAO,8CAA4B;IAEnC,SAAS,IAAI,IAAI;IAIjB,QAAQ,IAAI,IAAI;yCAVL,qBAAqB;2CAArB,qBAAqB;CAajC"}
1
+ {"version":3,"file":"sd-confirm-modal.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/modal/sd-confirm-modal.control.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;;AAGpD;;;;GAIG;AACH,qBAkBa,qBAAsB,YAAW,QAAQ,CAAC,OAAO,CAAC;IAC7D,WAAW,kDAAgB;IAC3B,KAAK,gEAAiC;IAEtC,OAAO,8CAA4B;IAEnC,SAAS,IAAI,IAAI;IAIjB,QAAQ,IAAI,IAAI;yCAVL,qBAAqB;2CAArB,qBAAqB;CAajC"}
@@ -17,35 +17,41 @@ export class SdConfirmModalControl {
17
17
  this.close.emit(undefined);
18
18
  }
19
19
  static ɵfac = function SdConfirmModalControl_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdConfirmModalControl)(); };
20
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdConfirmModalControl, selectors: [["sd-confirm-modal"]], inputs: { message: [1, "message"] }, outputs: { close: "close" }, decls: 8, vars: 2, consts: [[1, "_sd-confirm-modal"], [1, "_message"], [1, "_actions"], [3, "click", "theme"], [3, "click"]], template: function SdConfirmModalControl_Template(rf, ctx) { if (rf & 1) {
21
- i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
22
- i0.ɵɵtext(2);
20
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdConfirmModalControl, selectors: [["sd-confirm-modal"]], hostAttrs: [1, "p-default", 2, "display", "block"], inputs: { message: [1, "message"] }, outputs: { close: "close" }, decls: 6, vars: 2, consts: [[1, "mb-default", 3, "innerHTML"], [1, "flex-row", "main-align-end", "gap-sm"], [3, "click", "theme"], [3, "click"]], template: function SdConfirmModalControl_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelement(0, "p", 0);
22
+ i0.ɵɵelementStart(1, "div", 1)(2, "sd-button", 2);
23
+ i0.ɵɵlistener("click", function SdConfirmModalControl_Template_sd_button_click_2_listener() { return ctx.onConfirm(); });
24
+ i0.ɵɵtext(3, "\uD655\uC778");
23
25
  i0.ɵɵelementEnd();
24
- i0.ɵɵelementStart(3, "div", 2)(4, "sd-button", 3);
25
- i0.ɵɵlistener("click", function SdConfirmModalControl_Template_sd_button_click_4_listener() { return ctx.onConfirm(); });
26
- i0.ɵɵtext(5, "\uD655\uC778");
27
- i0.ɵɵelementEnd();
28
- i0.ɵɵelementStart(6, "sd-button", 4);
29
- i0.ɵɵlistener("click", function SdConfirmModalControl_Template_sd_button_click_6_listener() { return ctx.onCancel(); });
30
- i0.ɵɵtext(7, "\uCDE8\uC18C");
31
- i0.ɵɵelementEnd()()();
26
+ i0.ɵɵelementStart(4, "sd-button", 3);
27
+ i0.ɵɵlistener("click", function SdConfirmModalControl_Template_sd_button_click_4_listener() { return ctx.onCancel(); });
28
+ i0.ɵɵtext(5, "\uCDE8\uC18C");
29
+ i0.ɵɵelementEnd()();
32
30
  } if (rf & 2) {
33
- i0.ɵɵadvance(2);
34
- i0.ɵɵtextInterpolate(ctx.message());
31
+ i0.ɵɵproperty("innerHTML", ctx.message(), i0.ɵɵsanitizeHtml);
35
32
  i0.ɵɵadvance(2);
36
33
  i0.ɵɵproperty("theme", "primary");
37
- } }, dependencies: [SdButtonControl], styles: ["sd-confirm-modal {\n display: block;\n padding: var(--gap-default);\n}\nsd-confirm-modal > ._sd-confirm-modal > ._message {\n margin-bottom: var(--gap-default);\n}\nsd-confirm-modal > ._sd-confirm-modal > ._actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--gap-sm);\n}"], encapsulation: 2, changeDetection: 0 });
34
+ } }, dependencies: [SdButtonControl], encapsulation: 2, changeDetection: 0 });
38
35
  }
39
36
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdConfirmModalControl, [{
40
37
  type: Component,
41
- args: [{ selector: "sd-confirm-modal", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [SdButtonControl], template: `
42
- <div class="_sd-confirm-modal">
43
- <p class="_message">{{ message() }}</p>
44
- <div class="_actions">
45
- <sd-button [theme]="'primary'" (click)="onConfirm()">확인</sd-button>
46
- <sd-button (click)="onCancel()">취소</sd-button>
47
- </div>
38
+ args: [{
39
+ selector: "sd-confirm-modal",
40
+ changeDetection: ChangeDetectionStrategy.OnPush,
41
+ encapsulation: ViewEncapsulation.None,
42
+ standalone: true,
43
+ imports: [SdButtonControl],
44
+ host: {
45
+ style: "display: block",
46
+ class: "p-default",
47
+ },
48
+ template: `
49
+ <p class="mb-default" [innerHTML]="message()"></p>
50
+ <div class="flex-row main-align-end gap-sm">
51
+ <sd-button [theme]="'primary'" (click)="onConfirm()">확인</sd-button>
52
+ <sd-button (click)="onCancel()">취소</sd-button>
48
53
  </div>
49
- `, styles: ["sd-confirm-modal {\n display: block;\n padding: var(--gap-default);\n}\nsd-confirm-modal > ._sd-confirm-modal > ._message {\n margin-bottom: var(--gap-default);\n}\nsd-confirm-modal > ._sd-confirm-modal > ._actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--gap-sm);\n}"] }]
54
+ `,
55
+ }]
50
56
  }], null, { close: [{ type: i0.Output, args: ["close"] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] }); })();
51
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdConfirmModalControl, { className: "SdConfirmModalControl", filePath: "packages/angular/src/ui/overlay/modal/sd-confirm-modal.control.ts", lineNumber: 53, forbidOrphanRendering: true }); })();
57
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdConfirmModalControl, { className: "SdConfirmModalControl", filePath: "packages/angular/src/ui/overlay/modal/sd-confirm-modal.control.ts", lineNumber: 35, forbidOrphanRendering: true }); })();
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, model, output, ViewEncapsulation, } from "@angular/core";
2
2
  import { isTabbable } from "tabbable";
3
3
  import { NgTemplateOutlet } from "@angular/common";
4
- import { SdActivatedModalProvider } from "./sd-modal.provider";
4
+ import { SdActivatedModalProvider } from "../../../core/providers/sd-activated-modal.provider";
5
5
  import { SdSystemConfigProvider } from "../../../core/providers/sd-system-config.provider";
6
6
  import "@simplysm/core-browser";
7
7
  import * as i0 from "@angular/core";
@@ -44,16 +44,6 @@ export interface ISdModalOptions {
44
44
  headerStyle?: string;
45
45
  noFirstControlFocusing?: boolean;
46
46
  }
47
- /**
48
- * 모달 내부에서 inject하여 사용하는 프로바이더
49
- */
50
- export declare class SdActivatedModalProvider<T extends ISdModal<any> = ISdModal<any>> {
51
- modalComponent: import("@angular/core").WritableSignal<any>;
52
- contentComponent: import("@angular/core").WritableSignal<T | undefined>;
53
- canDeactiveFn: () => boolean;
54
- static ɵfac: i0.ɵɵFactoryDeclaration<SdActivatedModalProvider<any>, never>;
55
- static ɵprov: i0.ɵɵInjectableDeclaration<SdActivatedModalProvider<any>>;
56
- }
57
47
  /**
58
48
  * 모달을 프로그래밍 방식으로 생성하는 프로바이더
59
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sd-modal.provider.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/modal/sd-modal.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACd,MAAM,4CAA4C,CAAC;AAEpD,OAAO,wBAAwB,CAAC;;AAEhC;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,KAAK,mBAAmB,GAAG,aAAa,GAAG,OAAO,GAAG,cAAc,GAAG,sBAAsB,CAAC;AAC7F,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACtF,CAAC,GACD,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,EAAE,aAAa,CACnB,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,EACxD,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,CACzF,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,qBACa,wBAAwB,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;IAC3E,cAAc,8CAA0B;IACxC,gBAAgB,wDAAoC;IACpD,aAAa,EAAE,MAAM,OAAO,CAAc;yCAH/B,wBAAwB;6CAAxB,wBAAwB;CAIpC;AAED;;GAEG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAE9C,UAAU,iDAAa;IAEjB,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EACrC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAmJzD,OAAO,CAAC,aAAa;yCA7JV,eAAe;6CAAf,eAAe;CAwK3B"}
1
+ {"version":3,"file":"sd-modal.provider.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/modal/sd-modal.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACd,MAAM,4CAA4C,CAAC;AAGpD,OAAO,wBAAwB,CAAC;;AAEhC;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,KAAK,mBAAmB,GAAG,aAAa,GAAG,OAAO,GAAG,cAAc,GAAG,sBAAsB,CAAC;AAC7F,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACtF,CAAC,GACD,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,EAAE,aAAa,CACnB,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,EACxD,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,CACzF,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAE9C,UAAU,iDAAa;IAEjB,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EACrC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAmJzD,OAAO,CAAC,aAAa;yCA7JV,eAAe;6CAAf,eAAe;CAwK3B"}
@@ -2,21 +2,9 @@ import { ApplicationRef, createComponent, EnvironmentInjector, inject, Injectabl
2
2
  import { outputToObservable } from "@angular/core/rxjs-interop";
3
3
  import { Subscription } from "rxjs";
4
4
  import { SdModalControl } from "./sd-modal.control";
5
+ import { SdActivatedModalProvider } from "../../../core/providers/sd-activated-modal.provider";
5
6
  import "@simplysm/core-browser";
6
7
  import * as i0 from "@angular/core";
7
- /**
8
- * 모달 내부에서 inject하여 사용하는 프로바이더
9
- */
10
- export class SdActivatedModalProvider {
11
- modalComponent = signal(undefined, ...(ngDevMode ? [{ debugName: "modalComponent" }] : /* istanbul ignore next */ []));
12
- contentComponent = signal(undefined, ...(ngDevMode ? [{ debugName: "contentComponent" }] : /* istanbul ignore next */ []));
13
- canDeactiveFn = () => true;
14
- static ɵfac = function SdActivatedModalProvider_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdActivatedModalProvider)(); };
15
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SdActivatedModalProvider, factory: SdActivatedModalProvider.ɵfac });
16
- }
17
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdActivatedModalProvider, [{
18
- type: Injectable
19
- }], null, null); })();
20
8
  /**
21
9
  * 모달을 프로그래밍 방식으로 생성하는 프로바이더
22
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sd-prompt-modal.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/modal/sd-prompt-modal.control.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;;AAGpD;;;;GAIG;AACH,qBAoDa,oBAAqB,YAAW,QAAQ,CAAC,MAAM,CAAC;IAC3D,WAAW,kDAAgB;IAC3B,KAAK,+DAAgC;IAErC,OAAO,8CAA4B;IAEnC,WAAW,iDAAc;IAEzB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKjC,SAAS,IAAI,IAAI;IAOjB,QAAQ,IAAI,IAAI;yCApBL,oBAAoB;2CAApB,oBAAoB;CAuBhC"}
1
+ {"version":3,"file":"sd-prompt-modal.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/modal/sd-prompt-modal.control.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;;AAIpD;;;;GAIG;AACH,qBAyBa,oBAAqB,YAAW,QAAQ,CAAC,MAAM,CAAC;IAC3D,WAAW,kDAAgB;IAC3B,KAAK,+DAAgC;IAErC,OAAO,8CAA4B;IAEnC,WAAW,iDAAc;IAEzB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKjC,SAAS,IAAI,IAAI;IAOjB,QAAQ,IAAI,IAAI;yCApBL,oBAAoB;2CAApB,oBAAoB;CAuBhC"}
@@ -1,5 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, input, output, signal, ViewEncapsulation, } from "@angular/core";
2
2
  import { SdButtonControl } from "../../form/button/sd-button.control";
3
+ import { SdTextfieldControl } from "../../form/input/sd-textfield.control";
3
4
  import * as i0 from "@angular/core";
4
5
  /**
5
6
  * 범용 프롬프트 모달.
@@ -25,47 +26,53 @@ export class SdPromptModalControl {
25
26
  this.close.emit(undefined);
26
27
  }
27
28
  static ɵfac = function SdPromptModalControl_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdPromptModalControl)(); };
28
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdPromptModalControl, selectors: [["sd-prompt-modal"]], inputs: { message: [1, "message"] }, outputs: { close: "close" }, decls: 9, vars: 3, consts: [[1, "_sd-prompt-modal"], [1, "_message"], ["type", "text", 1, "_input", 3, "input", "keydown.enter", "value"], [1, "_actions"], [3, "click", "theme"], [3, "click"]], template: function SdPromptModalControl_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
30
- i0.ɵɵtext(2);
29
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdPromptModalControl, selectors: [["sd-prompt-modal"]], hostAttrs: [1, "p-default", 2, "display", "block"], inputs: { message: [1, "message"] }, outputs: { close: "close" }, decls: 7, vars: 4, consts: [[1, "mb-default", 3, "innerHTML"], [1, "mb-default", 3, "input", "keydown.enter", "type", "value"], [1, "flex-row", "main-align-end", "gap-sm"], [3, "click", "theme"], [3, "click"]], template: function SdPromptModalControl_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelement(0, "p", 0);
31
+ i0.ɵɵelementStart(1, "sd-textfield", 1);
32
+ i0.ɵɵlistener("input", function SdPromptModalControl_Template_sd_textfield_input_1_listener($event) { return ctx.onInputChange($event); })("keydown.enter", function SdPromptModalControl_Template_sd_textfield_keydown_enter_1_listener() { return ctx.onConfirm(); });
31
33
  i0.ɵɵelementEnd();
32
- i0.ɵɵelementStart(3, "input", 2);
33
- i0.ɵɵlistener("input", function SdPromptModalControl_Template_input_input_3_listener($event) { return ctx.onInputChange($event); })("keydown.enter", function SdPromptModalControl_Template_input_keydown_enter_3_listener() { return ctx.onConfirm(); });
34
+ i0.ɵɵelementStart(2, "div", 2)(3, "sd-button", 3);
35
+ i0.ɵɵlistener("click", function SdPromptModalControl_Template_sd_button_click_3_listener() { return ctx.onConfirm(); });
36
+ i0.ɵɵtext(4, "\uD655\uC778");
34
37
  i0.ɵɵelementEnd();
35
- i0.ɵɵelementStart(4, "div", 3)(5, "sd-button", 4);
36
- i0.ɵɵlistener("click", function SdPromptModalControl_Template_sd_button_click_5_listener() { return ctx.onConfirm(); });
37
- i0.ɵɵtext(6, "\uD655\uC778");
38
- i0.ɵɵelementEnd();
39
- i0.ɵɵelementStart(7, "sd-button", 5);
40
- i0.ɵɵlistener("click", function SdPromptModalControl_Template_sd_button_click_7_listener() { return ctx.onCancel(); });
41
- i0.ɵɵtext(8, "\uCDE8\uC18C");
42
- i0.ɵɵelementEnd()()();
38
+ i0.ɵɵelementStart(5, "sd-button", 4);
39
+ i0.ɵɵlistener("click", function SdPromptModalControl_Template_sd_button_click_5_listener() { return ctx.onCancel(); });
40
+ i0.ɵɵtext(6, "\uCDE8\uC18C");
41
+ i0.ɵɵelementEnd()();
43
42
  } if (rf & 2) {
44
- i0.ɵɵadvance(2);
45
- i0.ɵɵtextInterpolate(ctx.message());
43
+ i0.ɵɵproperty("innerHTML", ctx.message(), i0.ɵɵsanitizeHtml);
46
44
  i0.ɵɵadvance();
47
- i0.ɵɵproperty("value", ctx._inputValue());
45
+ i0.ɵɵproperty("type", "text")("value", ctx._inputValue());
48
46
  i0.ɵɵadvance(2);
49
47
  i0.ɵɵproperty("theme", "primary");
50
- } }, dependencies: [SdButtonControl], styles: ["sd-prompt-modal {\n display: block;\n padding: var(--gap-default);\n}\nsd-prompt-modal > ._sd-prompt-modal > ._message {\n margin-bottom: var(--gap-default);\n}\nsd-prompt-modal > ._sd-prompt-modal > ._input {\n display: block;\n width: 100%;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n margin-bottom: var(--gap-default);\n}\nsd-prompt-modal > ._sd-prompt-modal > ._actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--gap-sm);\n}"], encapsulation: 2, changeDetection: 0 });
48
+ } }, dependencies: [SdButtonControl, SdTextfieldControl], encapsulation: 2, changeDetection: 0 });
51
49
  }
52
50
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdPromptModalControl, [{
53
51
  type: Component,
54
- args: [{ selector: "sd-prompt-modal", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [SdButtonControl], template: `
55
- <div class="_sd-prompt-modal">
56
- <p class="_message">{{ message() }}</p>
57
- <input
58
- class="_input"
59
- type="text"
60
- [value]="_inputValue()"
61
- (input)="onInputChange($event)"
62
- (keydown.enter)="onConfirm()"
63
- />
64
- <div class="_actions">
65
- <sd-button [theme]="'primary'" (click)="onConfirm()">확인</sd-button>
66
- <sd-button (click)="onCancel()">취소</sd-button>
67
- </div>
52
+ args: [{
53
+ selector: "sd-prompt-modal",
54
+ changeDetection: ChangeDetectionStrategy.OnPush,
55
+ encapsulation: ViewEncapsulation.None,
56
+ standalone: true,
57
+ imports: [SdButtonControl, SdTextfieldControl],
58
+ host: {
59
+ style: "display: block",
60
+ class: "p-default",
61
+ },
62
+ template: `
63
+ <p class="mb-default" [innerHTML]="message()"></p>
64
+ <sd-textfield
65
+ [type]="'text'"
66
+ [value]="_inputValue()"
67
+ (input)="onInputChange($event)"
68
+ (keydown.enter)="onConfirm()"
69
+ class="mb-default"
70
+ />
71
+ <div class="flex-row main-align-end gap-sm">
72
+ <sd-button [theme]="'primary'" (click)="onConfirm()">확인</sd-button>
73
+ <sd-button (click)="onCancel()">취소</sd-button>
68
74
  </div>
69
- `, styles: ["sd-prompt-modal {\n display: block;\n padding: var(--gap-default);\n}\nsd-prompt-modal > ._sd-prompt-modal > ._message {\n margin-bottom: var(--gap-default);\n}\nsd-prompt-modal > ._sd-prompt-modal > ._input {\n display: block;\n width: 100%;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n margin-bottom: var(--gap-default);\n}\nsd-prompt-modal > ._sd-prompt-modal > ._actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--gap-sm);\n}"] }]
75
+ `,
76
+ }]
70
77
  }], null, { close: [{ type: i0.Output, args: ["close"] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] }); })();
71
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdPromptModalControl, { className: "SdPromptModalControl", filePath: "packages/angular/src/ui/overlay/modal/sd-prompt-modal.control.ts", lineNumber: 69, forbidOrphanRendering: true }); })();
78
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdPromptModalControl, { className: "SdPromptModalControl", filePath: "packages/angular/src/ui/overlay/modal/sd-prompt-modal.control.ts", lineNumber: 43, forbidOrphanRendering: true }); })();
@@ -1,4 +1,4 @@
1
- import type { TSdToastTheme } from "./sd-toast.provider";
1
+ import type { TSdToastTheme } from "../../../core/providers/sd-toast.provider";
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class SdToastControl {
4
4
  open: import("@angular/core").ModelSignal<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-toast.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/toast/sd-toast.control.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;;AAKzD,qBAwFa,cAAc;IACzB,IAAI,+CAAgB;IACpB,WAAW,qEAAiD;IAC5D,KAAK,qDAAgC;IACrC,QAAQ,8CAAY;IACpB,OAAO,0DAAwC;IAE/C,QAAQ,iEAKL;IAEH,QAAQ,qEAKL;yCAnBQ,cAAc;2CAAd,cAAc;CAoB1B"}
1
+ {"version":3,"file":"sd-toast.control.d.ts","sourceRoot":"","sources":["../../../../src/ui/overlay/toast/sd-toast.control.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;;AAK/E,qBAwFa,cAAc;IACzB,IAAI,+CAAgB;IACpB,WAAW,qEAAiD;IAC5D,KAAK,qDAAgC;IACrC,QAAQ,8CAAY;IACpB,OAAO,0DAAwC;IAE/C,QAAQ,iEAKL;IAEH,QAAQ,qEAKL;yCAnBQ,cAAc;2CAAd,cAAc;CAoB1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/angular",
3
- "version": "14.0.19",
3
+ "version": "14.0.22",
4
4
  "description": "심플리즘 패키지 - Angular",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -50,10 +50,10 @@
50
50
  "jspdf": "^4.2.1",
51
51
  "rxjs": "^7.8.2",
52
52
  "tabbable": "^6.4.0",
53
- "@simplysm/core-common": "14.0.19",
54
- "@simplysm/core-browser": "14.0.19",
55
- "@simplysm/service-client": "14.0.19",
56
- "@simplysm/service-common": "14.0.19"
53
+ "@simplysm/core-browser": "14.0.22",
54
+ "@simplysm/service-common": "14.0.22",
55
+ "@simplysm/service-client": "14.0.22",
56
+ "@simplysm/core-common": "14.0.22"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@angular/compiler": "^21.2.7",
@@ -22,7 +22,7 @@ import {
22
22
  } from "@angular/router";
23
23
  import { SwUpdate } from "@angular/service-worker";
24
24
  import { provideNgIconsConfig } from "@ng-icons/core";
25
- import { SdBusyProvider } from "../ui/overlay/busy/sd-busy.provider";
25
+ import { SdBusyProvider } from "./providers/sd-busy.provider";
26
26
  import { SdAngularConfigProvider } from "./providers/sd-angular-config.provider";
27
27
  import { SdThemeProvider } from "./providers/sd-theme-provider";
28
28
  import { SdLocalStorageProvider } from "./providers/sd-local-storage.provider";