@simplysm/angular 14.0.42 → 14.0.43

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 (241) hide show
  1. package/dist/controls/button/sd-additional-button.js +1 -1
  2. package/dist/controls/button/sd-anchor.js +1 -1
  3. package/dist/controls/button/sd-button.js +1 -1
  4. package/dist/controls/button/sd-modal-select-button.d.ts +1 -1
  5. package/dist/controls/button/sd-modal-select-button.d.ts.map +1 -1
  6. package/dist/controls/button/sd-modal-select-button.js +8 -6
  7. package/dist/controls/checkbox/sd-checkbox-group-item.js +1 -1
  8. package/dist/controls/checkbox/sd-checkbox-group.js +1 -1
  9. package/dist/controls/checkbox/sd-checkbox.js +1 -1
  10. package/dist/controls/checkbox/sd-switch.js +1 -1
  11. package/dist/controls/collapse/sd-collapse-icon.d.ts.map +1 -1
  12. package/dist/controls/collapse/sd-collapse-icon.js +3 -3
  13. package/dist/controls/collapse/sd-collapse.d.ts +1 -1
  14. package/dist/controls/collapse/sd-collapse.d.ts.map +1 -1
  15. package/dist/controls/collapse/sd-collapse.js +8 -7
  16. package/dist/controls/dropdown/sd-dropdown-popup.d.ts +2 -0
  17. package/dist/controls/dropdown/sd-dropdown-popup.d.ts.map +1 -1
  18. package/dist/controls/dropdown/sd-dropdown-popup.js +21 -8
  19. package/dist/controls/dropdown/sd-dropdown.d.ts.map +1 -1
  20. package/dist/controls/dropdown/sd-dropdown.js +5 -16
  21. package/dist/controls/form/sd-form.js +1 -1
  22. package/dist/controls/gap/sd-gap.js +5 -5
  23. package/dist/controls/input/sd-date-range-picker.d.ts +1 -0
  24. package/dist/controls/input/sd-date-range-picker.d.ts.map +1 -1
  25. package/dist/controls/input/sd-date-range-picker.js +14 -19
  26. package/dist/controls/input/sd-numpad.js +3 -3
  27. package/dist/controls/input/sd-range.js +1 -1
  28. package/dist/controls/input/sd-textarea.js +2 -2
  29. package/dist/controls/input/sd-textfield-type-handlers.js +2 -2
  30. package/dist/controls/input/sd-textfield.js +9 -9
  31. package/dist/controls/list/sd-list-item.d.ts +0 -1
  32. package/dist/controls/list/sd-list-item.d.ts.map +1 -1
  33. package/dist/controls/list/sd-list-item.js +38 -38
  34. package/dist/controls/list/sd-list.d.ts.map +1 -1
  35. package/dist/controls/list/sd-list.js +3 -3
  36. package/dist/controls/pagination/sd-pagination.js +1 -1
  37. package/dist/controls/select/sd-select-button.d.ts.map +1 -1
  38. package/dist/controls/select/sd-select-button.js +4 -8
  39. package/dist/controls/select/sd-select-item.d.ts +3 -3
  40. package/dist/controls/select/sd-select-item.d.ts.map +1 -1
  41. package/dist/controls/select/sd-select-item.js +27 -20
  42. package/dist/controls/select/sd-select.d.ts +5 -4
  43. package/dist/controls/select/sd-select.d.ts.map +1 -1
  44. package/dist/controls/select/sd-select.js +20 -17
  45. package/dist/controls/tab/sd-tab-item.js +1 -1
  46. package/dist/controls/tab/sd-tab.js +1 -1
  47. package/dist/core/app-structure/sd-app-structure.utils.js +1 -1
  48. package/dist/core/busy/sd-busy-container.d.ts.map +1 -1
  49. package/dist/core/busy/sd-busy-container.js +62 -68
  50. package/dist/core/busy/sd-busy.provider.js +1 -1
  51. package/dist/core/commands/sd-command.d.ts +13 -0
  52. package/dist/core/commands/sd-command.d.ts.map +1 -0
  53. package/dist/core/commands/sd-command.js +52 -0
  54. package/dist/core/error-handler/sd-global-error-handler.plugin.js +1 -1
  55. package/dist/core/events/sd-events.d.ts +1 -6
  56. package/dist/core/events/sd-events.d.ts.map +1 -1
  57. package/dist/core/events/sd-events.js +3 -11
  58. package/dist/core/events/sd-intersection.d.ts +13 -0
  59. package/dist/core/events/sd-intersection.d.ts.map +1 -0
  60. package/dist/core/events/sd-intersection.js +27 -0
  61. package/dist/core/events/sd-resize.d.ts +16 -0
  62. package/dist/core/events/sd-resize.d.ts.map +1 -0
  63. package/dist/core/events/{sd-resize-event.plugin.js → sd-resize.js} +18 -20
  64. package/dist/core/file-dialog/sd-file-dialog.provider.js +1 -1
  65. package/dist/core/modal/injectDragResize.js +9 -9
  66. package/dist/core/modal/injectFocusTrap.js +1 -1
  67. package/dist/core/modal/sd-confirm-modal.js +1 -1
  68. package/dist/core/modal/sd-modal.d.ts +8 -1
  69. package/dist/core/modal/sd-modal.d.ts.map +1 -1
  70. package/dist/core/modal/sd-modal.js +135 -39
  71. package/dist/core/modal/sd-modal.provider.js +5 -5
  72. package/dist/core/modal/sd-prompt-modal.js +1 -1
  73. package/dist/core/provideSdAngular.d.ts.map +1 -1
  74. package/dist/core/provideSdAngular.js +0 -10
  75. package/dist/core/ripple/setupRipple.js +5 -5
  76. package/dist/core/routing/menu-utils.js +1 -1
  77. package/dist/core/routing/sd-navigate-window.provider.js +1 -1
  78. package/dist/core/routing/sd-router-link.js +1 -1
  79. package/dist/core/selection/setupCumulateSelectedKeys.js +3 -3
  80. package/dist/core/setupModelHook.js +1 -1
  81. package/dist/core/toast/sd-toast-container.d.ts +1 -1
  82. package/dist/core/toast/sd-toast-container.js +3 -7
  83. package/dist/core/toast/sd-toast.d.ts.map +1 -1
  84. package/dist/core/toast/sd-toast.js +27 -24
  85. package/dist/core/toast/sd-toast.provider.js +6 -6
  86. package/dist/core/validation/setupInvalid.js +2 -1
  87. package/dist/data/data-detail/sd-data-detail.d.ts +2 -1
  88. package/dist/data/data-detail/sd-data-detail.d.ts.map +1 -1
  89. package/dist/data/data-detail/sd-data-detail.js +37 -33
  90. package/dist/data/data-select-button/sd-data-select-button.js +1 -1
  91. package/dist/data/data-sheet/sd-data-sheet.d.ts +2 -1
  92. package/dist/data/data-sheet/sd-data-sheet.d.ts.map +1 -1
  93. package/dist/data/data-sheet/sd-data-sheet.js +30 -22
  94. package/dist/data/kanban/sd-kanban-board.js +1 -1
  95. package/dist/data/kanban/sd-kanban-lane.js +1 -1
  96. package/dist/data/kanban/sd-kanban.d.ts +1 -1
  97. package/dist/data/kanban/sd-kanban.d.ts.map +1 -1
  98. package/dist/data/kanban/sd-kanban.js +4 -4
  99. package/dist/data/permission-table/sd-permission-table.js +6 -6
  100. package/dist/data/shared-data/sd-shared-data-select-button.js +1 -1
  101. package/dist/data/shared-data/sd-shared-data-select-list.js +3 -3
  102. package/dist/data/shared-data/sd-shared-data-select.d.ts +1 -1
  103. package/dist/data/shared-data/sd-shared-data-select.d.ts.map +1 -1
  104. package/dist/data/shared-data/sd-shared-data-select.js +29 -54
  105. package/dist/data/sheet/injectSheetDomAccessor.d.ts +6 -2
  106. package/dist/data/sheet/injectSheetDomAccessor.d.ts.map +1 -1
  107. package/dist/data/sheet/injectSheetDomAccessor.js +27 -22
  108. package/dist/data/sheet/injectSheetSelectRowIndicator.d.ts +10 -0
  109. package/dist/data/sheet/injectSheetSelectRowIndicator.d.ts.map +1 -0
  110. package/dist/data/sheet/injectSheetSelectRowIndicator.js +55 -0
  111. package/dist/data/sheet/sd-sheet-config.modal.d.ts +18 -19
  112. package/dist/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
  113. package/dist/data/sheet/sd-sheet-config.modal.js +357 -217
  114. package/dist/data/sheet/sd-sheet.d.ts +27 -13
  115. package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
  116. package/dist/data/sheet/sd-sheet.js +609 -291
  117. package/dist/data/sheet/useSheetCellAgent.js +6 -6
  118. package/dist/data/sheet/useSheetCellStyling.d.ts.map +1 -1
  119. package/dist/data/sheet/useSheetCellStyling.js +4 -4
  120. package/dist/data/sheet/useSheetFocusIndicator.d.ts +7 -0
  121. package/dist/data/sheet/useSheetFocusIndicator.d.ts.map +1 -0
  122. package/dist/data/sheet/useSheetFocusIndicator.js +53 -0
  123. package/dist/data/sheet/useSheetLayoutEngine.js +1 -1
  124. package/dist/data/state-preset/sd-state-preset.d.ts.map +1 -1
  125. package/dist/data/state-preset/sd-state-preset.js +14 -14
  126. package/dist/features/address/sd-address-search.modal.js +3 -3
  127. package/dist/features/editor/sd-tiptap-editor.js +6 -6
  128. package/dist/features/editor/useTiptapToolbar.js +2 -2
  129. package/dist/features/theme/sd-theme-selector.js +1 -1
  130. package/dist/features/visual/sd-barcode.js +1 -1
  131. package/dist/features/visual/sd-calendar.js +2 -2
  132. package/dist/features/visual/sd-echarts.d.ts +2 -1
  133. package/dist/features/visual/sd-echarts.d.ts.map +1 -1
  134. package/dist/features/visual/sd-echarts.js +5 -3
  135. package/dist/features/visual/sd-label.js +1 -1
  136. package/dist/features/visual/sd-note.js +1 -1
  137. package/dist/features/visual/sd-progress.js +1 -1
  138. package/dist/index.d.ts +3 -5
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +3 -5
  141. package/dist/layout/base-container/sd-base-container.js +3 -3
  142. package/dist/layout/dock/sd-dock-container.js +1 -1
  143. package/dist/layout/dock/sd-dock.d.ts +3 -2
  144. package/dist/layout/dock/sd-dock.d.ts.map +1 -1
  145. package/dist/layout/dock/sd-dock.js +6 -4
  146. package/dist/layout/sidebar/sd-sidebar-container.js +5 -5
  147. package/dist/layout/sidebar/sd-sidebar-menu.d.ts.map +1 -1
  148. package/dist/layout/sidebar/sd-sidebar-menu.js +7 -6
  149. package/dist/layout/sidebar/sd-sidebar-user.js +1 -1
  150. package/dist/layout/sidebar/sd-sidebar.js +1 -1
  151. package/dist/layout/topbar/sd-topbar-container.js +1 -1
  152. package/dist/layout/topbar/sd-topbar-menu.d.ts.map +1 -1
  153. package/dist/layout/topbar/sd-topbar-menu.js +7 -7
  154. package/dist/layout/topbar/sd-topbar-user.js +1 -1
  155. package/dist/layout/topbar/sd-topbar.js +3 -3
  156. package/package.json +5 -5
  157. package/src/controls/button/sd-modal-select-button.ts +7 -2
  158. package/src/controls/collapse/sd-collapse-icon.ts +2 -2
  159. package/src/controls/collapse/sd-collapse.ts +4 -5
  160. package/src/controls/dropdown/sd-dropdown-popup.ts +15 -2
  161. package/src/controls/dropdown/sd-dropdown.ts +4 -16
  162. package/src/controls/gap/sd-gap.ts +4 -4
  163. package/src/controls/input/sd-date-range-picker.ts +13 -16
  164. package/src/controls/input/sd-numpad.ts +1 -1
  165. package/src/controls/input/sd-textarea.ts +1 -1
  166. package/src/controls/input/sd-textfield-type-handlers.ts +2 -2
  167. package/src/controls/input/sd-textfield.ts +6 -6
  168. package/src/controls/list/sd-list-item.ts +40 -26
  169. package/src/controls/list/sd-list.ts +2 -1
  170. package/src/controls/select/sd-select-button.ts +8 -11
  171. package/src/controls/select/sd-select-item.ts +35 -27
  172. package/src/controls/select/sd-select.ts +111 -41
  173. package/src/core/app-structure/sd-app-structure.utils.ts +1 -1
  174. package/src/core/busy/sd-busy-container.ts +235 -123
  175. package/src/core/busy/sd-busy.provider.ts +1 -1
  176. package/src/core/commands/sd-command.ts +46 -0
  177. package/src/core/error-handler/sd-global-error-handler.plugin.ts +1 -1
  178. package/src/core/events/sd-events.ts +1 -12
  179. package/src/core/events/sd-intersection.ts +29 -0
  180. package/src/core/events/{sd-resize-event.plugin.ts → sd-resize.ts} +17 -24
  181. package/src/core/file-dialog/sd-file-dialog.provider.ts +1 -1
  182. package/src/core/modal/injectDragResize.ts +9 -9
  183. package/src/core/modal/injectFocusTrap.ts +1 -1
  184. package/src/core/modal/sd-modal.provider.ts +5 -5
  185. package/src/core/modal/sd-modal.ts +119 -41
  186. package/src/core/provideSdAngular.ts +0 -10
  187. package/src/core/ripple/setupRipple.ts +5 -5
  188. package/src/core/routing/menu-utils.ts +1 -1
  189. package/src/core/routing/sd-navigate-window.provider.ts +1 -1
  190. package/src/core/routing/sd-router-link.ts +1 -1
  191. package/src/core/selection/setupCumulateSelectedKeys.ts +3 -3
  192. package/src/core/setupModelHook.ts +1 -1
  193. package/src/core/toast/sd-toast-container.ts +1 -1
  194. package/src/core/toast/sd-toast.provider.ts +6 -6
  195. package/src/core/toast/sd-toast.ts +25 -22
  196. package/src/core/validation/setupInvalid.ts +2 -1
  197. package/src/data/data-detail/sd-data-detail.ts +15 -11
  198. package/src/data/data-sheet/sd-data-sheet.ts +13 -15
  199. package/src/data/kanban/sd-kanban.ts +4 -5
  200. package/src/data/permission-table/sd-permission-table.ts +4 -4
  201. package/src/data/shared-data/sd-shared-data-select-list.ts +1 -1
  202. package/src/data/shared-data/sd-shared-data-select.ts +8 -27
  203. package/src/data/sheet/injectSheetDomAccessor.ts +37 -25
  204. package/src/data/sheet/injectSheetSelectRowIndicator.ts +69 -0
  205. package/src/data/sheet/sd-sheet-config.modal.ts +215 -191
  206. package/src/data/sheet/sd-sheet.ts +529 -209
  207. package/src/data/sheet/useSheetCellAgent.ts +8 -8
  208. package/src/data/sheet/useSheetCellStyling.ts +4 -8
  209. package/src/data/sheet/useSheetFocusIndicator.ts +66 -0
  210. package/src/data/sheet/useSheetLayoutEngine.ts +1 -1
  211. package/src/data/state-preset/sd-state-preset.ts +26 -13
  212. package/src/features/address/sd-address-search.modal.ts +1 -1
  213. package/src/features/editor/sd-tiptap-editor.ts +4 -4
  214. package/src/features/editor/useTiptapToolbar.ts +2 -2
  215. package/src/features/visual/sd-calendar.ts +1 -1
  216. package/src/features/visual/sd-echarts.ts +2 -0
  217. package/src/index.ts +4 -6
  218. package/src/layout/base-container/sd-base-container.ts +1 -1
  219. package/src/layout/dock/sd-dock.ts +3 -2
  220. package/src/layout/sidebar/sd-sidebar-container.ts +2 -2
  221. package/src/layout/sidebar/sd-sidebar-menu.ts +1 -3
  222. package/src/layout/topbar/sd-topbar-menu.ts +11 -15
  223. package/src/layout/topbar/sd-topbar.ts +1 -1
  224. package/dist/core/commands/sd-insert-command-event.plugin.d.ts +0 -11
  225. package/dist/core/commands/sd-insert-command-event.plugin.d.ts.map +0 -1
  226. package/dist/core/commands/sd-insert-command-event.plugin.js +0 -35
  227. package/dist/core/commands/sd-refresh-command-event.plugin.d.ts +0 -11
  228. package/dist/core/commands/sd-refresh-command-event.plugin.d.ts.map +0 -1
  229. package/dist/core/commands/sd-refresh-command-event.plugin.js +0 -38
  230. package/dist/core/commands/sd-save-command-event.plugin.d.ts +0 -11
  231. package/dist/core/commands/sd-save-command-event.plugin.d.ts.map +0 -1
  232. package/dist/core/commands/sd-save-command-event.plugin.js +0 -38
  233. package/dist/core/events/sd-intersection-event.plugin.d.ts +0 -13
  234. package/dist/core/events/sd-intersection-event.plugin.d.ts.map +0 -1
  235. package/dist/core/events/sd-intersection-event.plugin.js +0 -29
  236. package/dist/core/events/sd-resize-event.plugin.d.ts +0 -16
  237. package/dist/core/events/sd-resize-event.plugin.d.ts.map +0 -1
  238. package/src/core/commands/sd-insert-command-event.plugin.ts +0 -39
  239. package/src/core/commands/sd-refresh-command-event.plugin.ts +0 -44
  240. package/src/core/commands/sd-save-command-event.plugin.ts +0 -44
  241. package/src/core/events/sd-intersection-event.plugin.ts +0 -35
@@ -1,5 +1,6 @@
1
- import type { SdResizeEvent } from "../../core/events/sd-resize-event.plugin";
1
+ import { type SdResizeEvent } from "../../core/events/sd-resize";
2
2
  import * as i0 from "@angular/core";
3
+ import * as i1 from "../../core/events/sd-resize";
3
4
  export declare class SdDock {
4
5
  private readonly _elRef;
5
6
  private readonly _destroyRef;
@@ -14,6 +15,6 @@ export declare class SdDock {
14
15
  onHostResize(event: SdResizeEvent): void;
15
16
  onResizeBarMousedown(event: MouseEvent): void;
16
17
  static ɵfac: i0.ɵɵFactoryDeclaration<SdDock, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<SdDock, "sd-dock", never, { "key": { "alias": "key"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdDock, "sd-dock", never, { "key": { "alias": "key"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.SdResizeDirective; inputs: {}; outputs: { "sdResize": "sdResize"; }; }]>;
18
19
  }
19
20
  //# sourceMappingURL=sd-dock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sd-dock.d.ts","sourceRoot":"","sources":["../../../src/layout/dock/sd-dock.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;;AAE9E,qBAyEa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,OAAO,CAAC,YAAY,CAA2B;IAE/C,GAAG,0DAAmB;IACtB,QAAQ,2EAAqD;IAC7D,SAAS,qEAAiD;IAE1D,IAAI,iDAAa;IAEjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsE;;IAoB9F,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAI/C,YAAY,CAAC,KAAK,EAAE,aAAa;IASjC,oBAAoB,CAAC,KAAK,EAAE,UAAU;yCA7C3B,MAAM;2CAAN,MAAM;CAiGlB"}
1
+ {"version":3,"file":"sd-dock.d.ts","sourceRoot":"","sources":["../../../src/layout/dock/sd-dock.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;;;AAEpF,qBA0Ea,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,OAAO,CAAC,YAAY,CAA2B;IAE/C,GAAG,0DAAmB;IACtB,QAAQ,2EAAqD;IAC7D,SAAS,qEAAiD;IAE1D,IAAI,iDAAa;IAEjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsE;;IAoB9F,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAI/C,YAAY,CAAC,KAAK,EAAE,aAAa;IASjC,oBAAoB,CAAC,KAAK,EAAE,UAAU;yCA7C3B,MAAM;2CAAN,MAAM;CAiGlB"}
@@ -1,6 +1,8 @@
1
1
  import { booleanAttribute, ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, signal, ViewEncapsulation, } from "@angular/core";
2
2
  import { injectSdSystemConfigResource } from "../../core/config/injectSdSystemConfigResource";
3
+ import { SdResizeDirective } from "../../core/events/sd-resize";
3
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "../../core/events/sd-resize";
4
6
  const _c0 = ["*"];
5
7
  function SdDock_Conditional_1_Template(rf, ctx) { if (rf & 1) {
6
8
  const _r1 = i0.ɵɵgetCurrentView();
@@ -96,7 +98,7 @@ export class SdDock {
96
98
  i0.ɵɵlistener("sdResize", function SdDock_sdResize_HostBindingHandler($event) { return ctx.onHostResize($event); });
97
99
  } if (rf & 2) {
98
100
  i0.ɵɵattribute("data-sd-position", ctx.position())("data-sd-resizable", ctx.resizable());
99
- } }, inputs: { key: [1, "key"], position: [1, "position"], resizable: [1, "resizable"] }, ngContentSelectors: _c0, decls: 2, vars: 1, consts: [[1, "_resize-bar"], [1, "_resize-bar", 3, "mousedown"]], template: function SdDock_Template(rf, ctx) { if (rf & 1) {
101
+ } }, inputs: { key: [1, "key"], position: [1, "position"], resizable: [1, "resizable"] }, features: [i0.ɵɵHostDirectivesFeature([{ directive: i1.SdResizeDirective, outputs: ["sdResize", "sdResize"] }])], ngContentSelectors: _c0, decls: 2, vars: 1, consts: [[1, "_resize-bar"], [1, "_resize-bar", 3, "mousedown"]], template: function SdDock_Template(rf, ctx) { if (rf & 1) {
100
102
  i0.ɵɵprojectionDef();
101
103
  i0.ɵɵprojection(0);
102
104
  i0.ɵɵconditionalCreate(1, SdDock_Conditional_1_Template, 1, 0, "div", 0);
@@ -107,10 +109,10 @@ export class SdDock {
107
109
  }
108
110
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdDock, [{
109
111
  type: Component,
110
- args: [{ selector: "sd-dock", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [], host: {
112
+ args: [{ selector: "sd-dock", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [], hostDirectives: [{ directive: SdResizeDirective, outputs: ["sdResize"] }], host: {
111
113
  "[attr.data-sd-position]": "position()",
112
114
  "[attr.data-sd-resizable]": "resizable()",
113
- "(sdResize)": "onHostResize($any($event))",
115
+ "(sdResize)": "onHostResize($event)",
114
116
  }, template: `
115
117
  <ng-content></ng-content>
116
118
  @if (resizable()) {
@@ -118,4 +120,4 @@ export class SdDock {
118
120
  }
119
121
  `, styles: ["sd-dock {\n display: block;\n position: absolute;\n overflow: auto;\n}\nsd-dock[data-sd-resizable=true] > ._resize-bar {\n position: absolute;\n}\nsd-dock[data-sd-resizable=true][data-sd-position=top] > ._resize-bar {\n bottom: 0;\n left: 0;\n width: 100%;\n height: 2px;\n cursor: ns-resize;\n}\nsd-dock[data-sd-resizable=true][data-sd-position=bottom] > ._resize-bar {\n top: 0;\n left: 0;\n width: 100%;\n height: 2px;\n cursor: ns-resize;\n}\nsd-dock[data-sd-resizable=true][data-sd-position=left] > ._resize-bar {\n top: 0;\n right: 0;\n height: 100%;\n width: 2px;\n cursor: ew-resize;\n}\nsd-dock[data-sd-resizable=true][data-sd-position=right] > ._resize-bar {\n top: 0;\n left: 0;\n height: 100%;\n width: 2px;\n cursor: ew-resize;\n}"] }]
120
122
  }], () => [], { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }] }); })();
121
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdDock, { className: "SdDock", filePath: "packages/angular/src/layout/dock/sd-dock.ts", lineNumber: 89, forbidOrphanRendering: true }); })();
123
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdDock, { className: "SdDock", filePath: "packages/angular/src/layout/dock/sd-dock.ts", lineNumber: 90 }); })();
@@ -21,16 +21,16 @@ export class SdSidebarContainer {
21
21
  }
22
22
  }
23
23
  onBackdropClick() {
24
- this.toggle.set(false);
24
+ this.toggle.update((v) => !v);
25
25
  }
26
26
  static ɵfac = function SdSidebarContainer_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdSidebarContainer)(); };
27
27
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdSidebarContainer, selectors: [["sd-sidebar-container"]], hostVars: 1, hostBindings: function SdSidebarContainer_HostBindings(rf, ctx) { if (rf & 2) {
28
28
  i0.ɵɵattribute("data-sd-toggle", ctx.toggle());
29
- } }, ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, "_backdrop", 3, "mousedown"]], template: function SdSidebarContainer_Template(rf, ctx) { if (rf & 1) {
29
+ } }, ngContentSelectors: _c0, decls: 2, vars: 0, consts: [["tabindex", "0", "role", "button", 1, "_backdrop", 3, "click", "keydown.enter"]], template: function SdSidebarContainer_Template(rf, ctx) { if (rf & 1) {
30
30
  i0.ɵɵprojectionDef();
31
31
  i0.ɵɵprojection(0);
32
32
  i0.ɵɵdomElementStart(1, "div", 0);
33
- i0.ɵɵdomListener("mousedown", function SdSidebarContainer_Template_div_mousedown_1_listener() { return ctx.onBackdropClick(); });
33
+ i0.ɵɵdomListener("click", function SdSidebarContainer_Template_div_click_1_listener() { return ctx.onBackdropClick(); })("keydown.enter", function SdSidebarContainer_Template_div_keydown_enter_1_listener() { return ctx.onBackdropClick(); });
34
34
  i0.ɵɵdomElementEnd();
35
35
  } }, styles: ["sd-sidebar-container {\n display: block;\n position: relative;\n height: 100%;\n padding-left: var(--sidebar-width);\n transition: padding-left 0.1s ease-out;\n}\nsd-sidebar-container[data-sd-toggle=true] {\n padding-left: 0;\n transition: padding-left 0.1s ease-in;\n}\nsd-sidebar-container > ._backdrop {\n display: none;\n}\n\n@media all and (max-width: 520px) {\n sd-sidebar-container {\n padding-left: 0;\n }\n sd-sidebar-container > ._backdrop {\n position: absolute;\n display: block;\n z-index: calc(var(--z-index-sidebar) - 1);\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--background-rev-color);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease-in-out;\n }\n sd-sidebar-container[data-sd-toggle=true] > ._backdrop {\n opacity: 0.6;\n pointer-events: auto;\n }\n}"], encapsulation: 2, changeDetection: 0 });
36
36
  }
@@ -40,7 +40,7 @@ export class SdSidebarContainer {
40
40
  "[attr.data-sd-toggle]": "toggle()",
41
41
  }, template: `
42
42
  <ng-content />
43
- <div class="_backdrop" (mousedown)="onBackdropClick()"></div>
43
+ <div class="_backdrop" tabindex="0" role="button" (click)="onBackdropClick()" (keydown.enter)="onBackdropClick()"></div>
44
44
  `, styles: ["sd-sidebar-container {\n display: block;\n position: relative;\n height: 100%;\n padding-left: var(--sidebar-width);\n transition: padding-left 0.1s ease-out;\n}\nsd-sidebar-container[data-sd-toggle=true] {\n padding-left: 0;\n transition: padding-left 0.1s ease-in;\n}\nsd-sidebar-container > ._backdrop {\n display: none;\n}\n\n@media all and (max-width: 520px) {\n sd-sidebar-container {\n padding-left: 0;\n }\n sd-sidebar-container > ._backdrop {\n position: absolute;\n display: block;\n z-index: calc(var(--z-index-sidebar) - 1);\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--background-rev-color);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease-in-out;\n }\n sd-sidebar-container[data-sd-toggle=true] > ._backdrop {\n opacity: 0.6;\n pointer-events: auto;\n }\n}"] }]
45
45
  }], () => [], null); })();
46
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebarContainer, { className: "SdSidebarContainer", filePath: "packages/angular/src/layout/sidebar/sd-sidebar-container.ts", lineNumber: 69, forbidOrphanRendering: true }); })();
46
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebarContainer, { className: "SdSidebarContainer", filePath: "packages/angular/src/layout/sidebar/sd-sidebar-container.ts", lineNumber: 69 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"sd-sidebar-menu.d.ts","sourceRoot":"","sources":["../../../src/layout/sidebar/sd-sidebar-menu.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,+BAA+B,CAAC;;AAQvC,qBA8Ea,aAAa;IACxB,KAAK,gDAAuB;IAC5B,MAAM,wEAAiC;IACvC,mBAAmB,8CAAgB,MAAM,KAAK,OAAO,eAAI;IAEzD,YAAY,yCAA8B;IAE1C,UAAU,uDAAsF;IAEhG,uBAAuB,CACrB,IAAI,EAAE,MAAM,GACX;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS;IAIhF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG;QACpC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;yCA5BS,aAAa;2CAAb,aAAa;CA6BzB"}
1
+ {"version":3,"file":"sd-sidebar-menu.d.ts","sourceRoot":"","sources":["../../../src/layout/sidebar/sd-sidebar-menu.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,+BAA+B,CAAC;;AAQvC,qBA4Ea,aAAa;IACxB,KAAK,gDAAuB;IAC5B,MAAM,wEAAiC;IACvC,mBAAmB,8CAAgB,MAAM,KAAK,OAAO,eAAI;IAEzD,YAAY,yCAA8B;IAE1C,UAAU,uDAAsF;IAEhG,uBAAuB,CACrB,IAAI,EAAE,MAAM,GACX;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS;IAIhF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG;QACpC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;yCA5BS,aAAa;2CAAb,aAAa;CA6BzB"}
@@ -46,7 +46,7 @@ function SdSidebarMenu_ng_template_4_For_1_Template(rf, ctx) { if (rf & 1) {
46
46
  const depth_r4 = i0.ɵɵnextContext().depth;
47
47
  const ctx_r2 = i0.ɵɵnextContext();
48
48
  i0.ɵɵstyleProp("text-indent", depth_r4 > 0 ? (depth_r4 + 1) * 0.5 : undefined, "em");
49
- i0.ɵɵproperty("sdRouterLink", ctx_r2.getMenuRouterLinkOption(menu_r2))("selected", ctx_r2.getIsMenuSelected(menu_r2))("layout", depth_r4 === 0 ? ctx_r2.rootLayout() : "accordion");
49
+ i0.ɵɵproperty("contentClass", depth_r4 === 0 ? "pv-default" : "")("sdRouterLink", ctx_r2.getMenuRouterLinkOption(menu_r2))("selected", ctx_r2.getIsMenuSelected(menu_r2))("layout", depth_r4 === 0 ? ctx_r2.rootLayout() : "accordion");
50
50
  i0.ɵɵadvance();
51
51
  i0.ɵɵconditional(menu_r2.icon ? 1 : -1);
52
52
  i0.ɵɵadvance();
@@ -55,7 +55,7 @@ function SdSidebarMenu_ng_template_4_For_1_Template(rf, ctx) { if (rf & 1) {
55
55
  i0.ɵɵconditional(menu_r2.children ? 3 : -1);
56
56
  } }
57
57
  function SdSidebarMenu_ng_template_4_Template(rf, ctx) { if (rf & 1) {
58
- i0.ɵɵrepeaterCreate(0, SdSidebarMenu_ng_template_4_For_1_Template, 4, 8, "sd-list-item", 5, _forTrack0);
58
+ i0.ɵɵrepeaterCreate(0, SdSidebarMenu_ng_template_4_For_1_Template, 4, 9, "sd-list-item", 5, _forTrack0);
59
59
  } if (rf & 2) {
60
60
  const currMenus_r6 = ctx.menus;
61
61
  i0.ɵɵrepeater(currMenus_r6);
@@ -81,7 +81,7 @@ export class SdSidebarMenu {
81
81
  static ɵfac = function SdSidebarMenu_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdSidebarMenu)(); };
82
82
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdSidebarMenu, selectors: [["sd-sidebar-menu"]], hostAttrs: [1, "flex-column", "fill"], hostVars: 1, hostBindings: function SdSidebarMenu_HostBindings(rf, ctx) { if (rf & 2) {
83
83
  i0.ɵɵattribute("data-sd-root-layout", ctx.rootLayout());
84
- } }, inputs: { menus: [1, "menus"], layout: [1, "layout"], getMenuIsSelectedFn: [1, "getMenuIsSelectedFn"] }, decls: 6, vars: 6, consts: [["itemTpl", ""], [1, "control-header", "p-default"], [1, "flex-fill", 3, "inset"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "typed"], [3, "text-indent", "sdRouterLink", "selected", "layout"], [3, "click", "sdRouterLink", "selected", "layout"], [3, "inset"], [3, "svg"]], template: function SdSidebarMenu_Template(rf, ctx) { if (rf & 1) {
84
+ } }, inputs: { menus: [1, "menus"], layout: [1, "layout"], getMenuIsSelectedFn: [1, "getMenuIsSelectedFn"] }, decls: 6, vars: 6, consts: [["itemTpl", ""], [1, "control-header", "p-default"], [1, "flex-fill", 3, "inset"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "typed"], [3, "contentClass", "text-indent", "sdRouterLink", "selected", "layout"], [3, "click", "contentClass", "sdRouterLink", "selected", "layout"], [3, "inset"], [3, "svg"]], template: function SdSidebarMenu_Template(rf, ctx) { if (rf & 1) {
85
85
  i0.ɵɵelementStart(0, "div", 1);
86
86
  i0.ɵɵtext(1, "MENU");
87
87
  i0.ɵɵelementEnd();
@@ -102,7 +102,7 @@ export class SdSidebarMenu {
102
102
  SdRouterLink,
103
103
  SdList,
104
104
  SdListItem,
105
- NgIcon], styles: ["sd-sidebar-menu > sd-list[data-sd-inset=true] sd-list {\n background: var(--trans-lightest);\n}\nsd-sidebar-menu > sd-list[data-sd-inset=true] > sd-list-item > ._content {\n padding-block: var(--gap-default);\n}\nsd-sidebar-menu:not([data-sd-root-layout=accordion]) > sd-list[data-sd-inset=true] > sd-list-item > sd-collapse > ._content > sd-list {\n background: transparent;\n}"], encapsulation: 2, changeDetection: 0 });
105
+ NgIcon], styles: ["sd-sidebar-menu > sd-list[data-sd-inset=true] sd-list {\n background: var(--trans-lightest);\n}\nsd-sidebar-menu:not([data-sd-root-layout=accordion]) > sd-list[data-sd-inset=true] > sd-list-item > sd-collapse > ._content > sd-list {\n background: transparent;\n}"], encapsulation: 2, changeDetection: 0 });
106
106
  }
107
107
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdSidebarMenu, [{
108
108
  type: Component,
@@ -129,6 +129,7 @@ export class SdSidebarMenu {
129
129
  <ng-template #itemTpl [typed]="itemTemplateType" let-currMenus="menus" let-depth="depth">
130
130
  @for (menu of currMenus; track menu.codeChain.join(".")) {
131
131
  <sd-list-item
132
+ [contentClass]="depth === 0 ? 'pv-default' : ''"
132
133
  [style.text-indent.em]="depth > 0 ? (depth + 1) * 0.5 : undefined"
133
134
  [sdRouterLink]="getMenuRouterLinkOption(menu)"
134
135
  (click)="onMenuClick(menu)"
@@ -154,6 +155,6 @@ export class SdSidebarMenu {
154
155
  </sd-list-item>
155
156
  }
156
157
  </ng-template>
157
- `, styles: ["sd-sidebar-menu > sd-list[data-sd-inset=true] sd-list {\n background: var(--trans-lightest);\n}\nsd-sidebar-menu > sd-list[data-sd-inset=true] > sd-list-item > ._content {\n padding-block: var(--gap-default);\n}\nsd-sidebar-menu:not([data-sd-root-layout=accordion]) > sd-list[data-sd-inset=true] > sd-list-item > sd-collapse > ._content > sd-list {\n background: transparent;\n}"] }]
158
+ `, styles: ["sd-sidebar-menu > sd-list[data-sd-inset=true] sd-list {\n background: var(--trans-lightest);\n}\nsd-sidebar-menu:not([data-sd-root-layout=accordion]) > sd-list[data-sd-inset=true] > sd-list-item > sd-collapse > ._content > sd-list {\n background: transparent;\n}"] }]
158
159
  }], null, { menus: [{ type: i0.Input, args: [{ isSignal: true, alias: "menus", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], getMenuIsSelectedFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "getMenuIsSelectedFn", required: false }] }] }); })();
159
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebarMenu, { className: "SdSidebarMenu", filePath: "packages/angular/src/layout/sidebar/sd-sidebar-menu.ts", lineNumber: 93, forbidOrphanRendering: true }); })();
160
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebarMenu, { className: "SdSidebarMenu", filePath: "packages/angular/src/layout/sidebar/sd-sidebar-menu.ts", lineNumber: 91 }); })();
@@ -106,4 +106,4 @@ export class SdSidebarUser {
106
106
  }
107
107
  `, styles: ["sd-sidebar-user {\n display: block;\n}\nsd-sidebar-user > ._menu-button {\n display: block;\n cursor: pointer;\n user-select: none;\n padding: var(--gap-default);\n}\nsd-sidebar-user > ._menu-button:hover {\n background: var(--trans-lighter);\n}\nsd-sidebar-user > sd-collapse > ._content > sd-list {\n background: var(--trans-lightest);\n padding: var(--gap-xs) 0;\n}"] }]
108
108
  }], null, { userMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "userMenu", required: false }] }] }); })();
109
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebarUser, { className: "SdSidebarUser", filePath: "packages/angular/src/layout/sidebar/sd-sidebar-user.ts", lineNumber: 68, forbidOrphanRendering: true }); })();
109
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebarUser, { className: "SdSidebarUser", filePath: "packages/angular/src/layout/sidebar/sd-sidebar-user.ts", lineNumber: 68 }); })();
@@ -21,4 +21,4 @@ export class SdSidebar {
21
21
  <ng-content />
22
22
  `, styles: ["sd-sidebar {\n position: absolute;\n z-index: var(--z-index-sidebar);\n top: 0;\n left: 0;\n width: var(--sidebar-width);\n height: 100%;\n background: var(--control-color);\n border-right: 1px solid var(--border-color-lighter);\n}\n@media not all and (max-width: 520px) {\n sd-sidebar {\n transition: transform 0.1s ease-out;\n }\n sd-sidebar[data-sd-toggle=true] {\n transform: translateX(-100%);\n transition: transform 0.1s ease-in;\n }\n}\n@media all and (max-width: 520px) {\n sd-sidebar {\n transition: transform 0.3s ease-in;\n transform: translateX(-100%);\n }\n sd-sidebar[data-sd-toggle=true] {\n transform: none;\n transition: transform 0.3s ease-out;\n box-shadow: 0 calc(16 * var(--elevation-size)) calc(16 * 4 * var(--elevation-size)) var(--trans-lighter), 0 var(--elevation-size) var(--elevation-size) var(--trans-lighter);\n }\n}"] }]
23
23
  }], null, null); })();
24
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebar, { className: "SdSidebar", filePath: "packages/angular/src/layout/sidebar/sd-sidebar.ts", lineNumber: 61, forbidOrphanRendering: true }); })();
24
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdSidebar, { className: "SdSidebar", filePath: "packages/angular/src/layout/sidebar/sd-sidebar.ts", lineNumber: 61 }); })();
@@ -14,4 +14,4 @@ export class SdTopbarContainer {
14
14
  <ng-content />
15
15
  `, styles: ["sd-topbar-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n}"] }]
16
16
  }], null, null); })();
17
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbarContainer, { className: "SdTopbarContainer", filePath: "packages/angular/src/layout/topbar/sd-topbar-container.ts", lineNumber: 22, forbidOrphanRendering: true }); })();
17
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbarContainer, { className: "SdTopbarContainer", filePath: "packages/angular/src/layout/topbar/sd-topbar-container.ts", lineNumber: 22 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"sd-topbar-menu.d.ts","sourceRoot":"","sources":["../../../src/layout/topbar/sd-topbar-menu.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,+BAA+B,CAAC;;AAYvC,qBAkGa,YAAY;IACvB,KAAK,gDAAuB;IAC5B,mBAAmB,8CAAgB,MAAM,KAAK,OAAO,eAAI;IAEzD,YAAY,yCAA8B;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IAEvD,uBAAuB,CACrB,IAAI,EAAE,MAAM,GACX;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS;IAIhF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAUtD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG;QACpC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,eAAe,iUAAmB;yCAlC1C,YAAY;2CAAZ,YAAY;CAmCxB"}
1
+ {"version":3,"file":"sd-topbar-menu.d.ts","sourceRoot":"","sources":["../../../src/layout/topbar/sd-topbar-menu.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,+BAA+B,CAAC;;AAYvC,qBA8Fa,YAAY;IACvB,KAAK,gDAAuB;IAC5B,mBAAmB,8CAAgB,MAAM,KAAK,OAAO,eAAI;IAEzD,YAAY,yCAA8B;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IAEvD,uBAAuB,CACrB,IAAI,EAAE,MAAM,GACX;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS;IAIhF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAUtD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG;QACpC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,eAAe,iUAAmB;yCAlC1C,YAAY;2CAAZ,YAAY;CAmCxB"}
@@ -105,7 +105,7 @@ function SdTopbarMenu_ng_template_2_For_1_Template(rf, ctx) { if (rf & 1) {
105
105
  const depth_r10 = i0.ɵɵnextContext().depth;
106
106
  const ctx_r4 = i0.ɵɵnextContext();
107
107
  i0.ɵɵstyleProp("padding-left", depth_r10 > 0 ? (depth_r10 + 1) * 0.5 : undefined, "em")("padding-block", depth_r10 === 0 ? "var(--gap-default)" : undefined);
108
- i0.ɵɵproperty("sdRouterLink", ctx_r4.getMenuRouterLinkOption(menu_r7))("selected", ctx_r4.getIsMenuSelected(menu_r7))("open", true);
108
+ i0.ɵɵproperty("sdRouterLink", ctx_r4.getMenuRouterLinkOption(menu_r7))("selected", ctx_r4.getIsMenuSelected(menu_r7))("layout", "flat");
109
109
  i0.ɵɵadvance();
110
110
  i0.ɵɵconditional(menu_r7.icon ? 1 : -1);
111
111
  i0.ɵɵadvance();
@@ -134,7 +134,7 @@ export class SdTopbarMenu {
134
134
  if (menu.url != null) {
135
135
  window.open(menu.url, "_blank");
136
136
  }
137
- if (menu.children === undefined) {
137
+ if (menu.children == null) {
138
138
  this._dropdowns()[dropdownIndex].open.set(false);
139
139
  }
140
140
  }
@@ -145,7 +145,7 @@ export class SdTopbarMenu {
145
145
  i0.ɵɵviewQuerySignal(ctx._dropdowns, SdDropdown, 5);
146
146
  } if (rf & 2) {
147
147
  i0.ɵɵqueryAdvance();
148
- } }, hostAttrs: [1, "flex-row", "gap-sm"], inputs: { menus: [1, "menus"], getMenuIsSelectedFn: [1, "getMenuIsSelectedFn"] }, decls: 4, vars: 1, consts: [["itemTpl", ""], [3, "typed"], [3, "theme"], [3, "svg"], [3, "inset"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "padding-left", "padding-block", "sdRouterLink", "selected", "open"], [3, "click", "sdRouterLink", "selected", "open"]], template: function SdTopbarMenu_Template(rf, ctx) { if (rf & 1) {
148
+ } }, hostAttrs: [1, "flex-row", "gap-sm"], inputs: { menus: [1, "menus"], getMenuIsSelectedFn: [1, "getMenuIsSelectedFn"] }, decls: 4, vars: 1, consts: [["itemTpl", ""], [3, "typed"], [3, "theme"], [3, "svg"], [3, "inset"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "padding-left", "padding-block", "sdRouterLink", "selected", "layout"], [3, "click", "sdRouterLink", "selected", "layout"]], template: function SdTopbarMenu_Template(rf, ctx) { if (rf & 1) {
149
149
  i0.ɵɵrepeaterCreate(0, SdTopbarMenu_For_1_Template, 9, 6, "sd-dropdown", null, _forTrack0);
150
150
  i0.ɵɵtemplate(2, SdTopbarMenu_ng_template_2_Template, 2, 0, "ng-template", 1, 0, i0.ɵɵtemplateRefExtractor);
151
151
  } if (rf & 2) {
@@ -160,7 +160,7 @@ export class SdTopbarMenu {
160
160
  SdList,
161
161
  SdListItem,
162
162
  SdButton,
163
- NgIcon], styles: ["sd-topbar-menu sd-dropdown-popup sd-list[data-sd-inset=true] sd-list {\n background: var(--trans-lightest);\n}"], encapsulation: 2, changeDetection: 0 });
163
+ NgIcon], styles: ["sd-topbar-menu sd-list sd-list {\n background: var(--trans-lightest);\n}"], encapsulation: 2, changeDetection: 0 });
164
164
  }
165
165
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdTopbarMenu, [{
166
166
  type: Component,
@@ -218,7 +218,7 @@ export class SdTopbarMenu {
218
218
  [sdRouterLink]="getMenuRouterLinkOption(menu)"
219
219
  (click)="onMenuClick(menu, dropdownIndex)"
220
220
  [selected]="getIsMenuSelected(menu)"
221
- [open]="true"
221
+ [layout]="'flat'"
222
222
  >
223
223
  @if (menu.icon) {
224
224
  <ng-icon [svg]="menu.icon" />
@@ -240,6 +240,6 @@ export class SdTopbarMenu {
240
240
  </sd-list-item>
241
241
  }
242
242
  </ng-template>
243
- `, styles: ["sd-topbar-menu sd-dropdown-popup sd-list[data-sd-inset=true] sd-list {\n background: var(--trans-lightest);\n}"] }]
243
+ `, styles: ["sd-topbar-menu sd-list sd-list {\n background: var(--trans-lightest);\n}"] }]
244
244
  }], null, { menus: [{ type: i0.Input, args: [{ isSignal: true, alias: "menus", required: false }] }], getMenuIsSelectedFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "getMenuIsSelectedFn", required: false }] }], _dropdowns: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => SdDropdown), { isSignal: true }] }] }); })();
245
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbarMenu, { className: "SdTopbarMenu", filePath: "packages/angular/src/layout/topbar/sd-topbar-menu.ts", lineNumber: 123, forbidOrphanRendering: true }); })();
245
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbarMenu, { className: "SdTopbarMenu", filePath: "packages/angular/src/layout/topbar/sd-topbar-menu.ts", lineNumber: 119 }); })();
@@ -74,4 +74,4 @@ export class SdTopbarUser {
74
74
  </sd-dropdown>
75
75
  ` }]
76
76
  }], null, { menus: [{ type: i0.Input, args: [{ isSignal: true, alias: "menus", required: true }] }], _dropdown: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SdDropdown), { isSignal: true }] }] }); })();
77
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbarUser, { className: "SdTopbarUser", filePath: "packages/angular/src/layout/topbar/sd-topbar-user.ts", lineNumber: 44, forbidOrphanRendering: true }); })();
77
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbarUser, { className: "SdTopbarUser", filePath: "packages/angular/src/layout/topbar/sd-topbar-user.ts", lineNumber: 44 }); })();
@@ -37,7 +37,7 @@ export class SdTopbar {
37
37
  i0.ɵɵprojection(1);
38
38
  } if (rf & 2) {
39
39
  i0.ɵɵconditional(ctx.hasSidebar() ? 0 : -1);
40
- } }, dependencies: [SdButton, NgIcon], styles: ["sd-topbar {\n height: var(--topbar-height);\n overflow-x: auto;\n overflow-y: hidden;\n user-select: none;\n background: var(--control-color);\n color: var(--text-trans-default);\n border-bottom: 1px solid var(--border-color-lighter);\n padding-left: var(--gap-sm);\n}\nsd-topbar > h1 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h2 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h3 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h4 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h5 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h6 {\n padding-right: var(--gap-xl);\n}\nsd-topbar::-webkit-scrollbar-track {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar-corner {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar {\n width: var(--gap-sm);\n height: var(--gap-sm);\n background-color: transparent;\n}\nsd-topbar::-webkit-scrollbar-thumb {\n background-color: var(--trans-default);\n}"], encapsulation: 2, changeDetection: 0 });
40
+ } }, dependencies: [SdButton, NgIcon], styles: ["sd-topbar {\n min-height: var(--topbar-height);\n overflow-x: auto;\n overflow-y: hidden;\n user-select: none;\n background: var(--control-color);\n color: var(--text-trans-default);\n border-bottom: 1px solid var(--border-color-lighter);\n padding-left: var(--gap-sm);\n}\nsd-topbar > h1 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h2 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h3 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h4 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h5 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h6 {\n padding-right: var(--gap-xl);\n}\nsd-topbar::-webkit-scrollbar-track {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar-corner {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar {\n width: var(--gap-sm);\n height: var(--gap-sm);\n background-color: transparent;\n}\nsd-topbar::-webkit-scrollbar-thumb {\n background-color: var(--trans-default);\n}"], encapsulation: 2, changeDetection: 0 });
41
41
  }
42
42
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdTopbar, [{
43
43
  type: Component,
@@ -55,6 +55,6 @@ export class SdTopbar {
55
55
  }
56
56
 
57
57
  <ng-content />
58
- `, styles: ["sd-topbar {\n height: var(--topbar-height);\n overflow-x: auto;\n overflow-y: hidden;\n user-select: none;\n background: var(--control-color);\n color: var(--text-trans-default);\n border-bottom: 1px solid var(--border-color-lighter);\n padding-left: var(--gap-sm);\n}\nsd-topbar > h1 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h2 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h3 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h4 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h5 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h6 {\n padding-right: var(--gap-xl);\n}\nsd-topbar::-webkit-scrollbar-track {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar-corner {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar {\n width: var(--gap-sm);\n height: var(--gap-sm);\n background-color: transparent;\n}\nsd-topbar::-webkit-scrollbar-thumb {\n background-color: var(--trans-default);\n}"] }]
58
+ `, styles: ["sd-topbar {\n min-height: var(--topbar-height);\n overflow-x: auto;\n overflow-y: hidden;\n user-select: none;\n background: var(--control-color);\n color: var(--text-trans-default);\n border-bottom: 1px solid var(--border-color-lighter);\n padding-left: var(--gap-sm);\n}\nsd-topbar > h1 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h2 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h3 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h4 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h5 {\n padding-right: var(--gap-xl);\n}\nsd-topbar > h6 {\n padding-right: var(--gap-xl);\n}\nsd-topbar::-webkit-scrollbar-track {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar-corner {\n background-color: var(--trans-light);\n}\nsd-topbar::-webkit-scrollbar {\n width: var(--gap-sm);\n height: var(--gap-sm);\n background-color: transparent;\n}\nsd-topbar::-webkit-scrollbar-thumb {\n background-color: var(--trans-default);\n}"] }]
59
59
  }], null, { sidebarContainer: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarContainer", required: false }] }] }); })();
60
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbar, { className: "SdTopbar", filePath: "packages/angular/src/layout/topbar/sd-topbar.ts", lineNumber: 76, forbidOrphanRendering: true }); })();
60
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdTopbar, { className: "SdTopbar", filePath: "packages/angular/src/layout/topbar/sd-topbar.ts", lineNumber: 76 }); })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/angular",
3
- "version": "14.0.42",
3
+ "version": "14.0.43",
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-browser": "14.0.42",
54
- "@simplysm/core-common": "14.0.42",
55
- "@simplysm/service-common": "14.0.42",
56
- "@simplysm/service-client": "14.0.42"
53
+ "@simplysm/core-common": "14.0.43",
54
+ "@simplysm/core-browser": "14.0.43",
55
+ "@simplysm/service-client": "14.0.43",
56
+ "@simplysm/service-common": "14.0.43"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@angular/compiler": "^21.2.8",
@@ -57,7 +57,7 @@ export type SdSelectModalInfo<T extends SdSelectModal<any>> = SdModalInfo<
57
57
  </sd-anchor>
58
58
  }
59
59
  @if (!disabled()) {
60
- <sd-button [inset]="true" (click)="onSearchClick()">
60
+ <sd-button [inset]="true" (click)="onSearchClick($event)">
61
61
  <ng-icon [svg]="searchIcon()" />
62
62
  </sd-button>
63
63
  }
@@ -72,6 +72,8 @@ export type SdSelectModalInfo<T extends SdSelectModal<any>> = SdModalInfo<
72
72
  flex-direction: row;
73
73
  gap: var(--gap-sm);
74
74
  position: relative;
75
+ width: 100%;
76
+ min-width: 3em;
75
77
 
76
78
  border: 1px solid var(--trans-light);
77
79
  border-radius: var(--border-radius-default);
@@ -188,7 +190,10 @@ export class SdModalSelectButton<
188
190
  this.selectedItems.set([]);
189
191
  }
190
192
 
191
- async onSearchClick(): Promise<void> {
193
+ async onSearchClick(event: MouseEvent): Promise<void> {
194
+ event.preventDefault();
195
+ event.stopPropagation();
196
+
192
197
  const modal = this.modal();
193
198
  const result = await this._sdModal.showAsync({
194
199
  ...modal,
@@ -8,7 +8,7 @@ import {
8
8
  ViewEncapsulation,
9
9
  } from "@angular/core";
10
10
  import { NgIcon } from "@ng-icons/core";
11
- import { tablerChevronRight } from "@ng-icons/tabler-icons";
11
+ import { tablerChevronDown } from "@ng-icons/tabler-icons";
12
12
 
13
13
  @Component({
14
14
  selector: "sd-collapse-icon",
@@ -36,7 +36,7 @@ import { tablerChevronRight } from "@ng-icons/tabler-icons";
36
36
  },
37
37
  })
38
38
  export class SdCollapseIcon {
39
- icon = input(tablerChevronRight);
39
+ icon = input(tablerChevronDown);
40
40
  open = input(false, { transform: booleanAttribute });
41
41
  openRotate = input(90, { transform: numberAttribute });
42
42
 
@@ -11,21 +11,21 @@ import {
11
11
  viewChild,
12
12
  ViewEncapsulation,
13
13
  } from "@angular/core";
14
- import type { SdResizeEvent } from "../../core/events/sd-resize-event.plugin";
14
+ import { SdResizeDirective, type SdResizeEvent } from "../../core/events/sd-resize";
15
15
 
16
16
  @Component({
17
17
  selector: "sd-collapse",
18
18
  changeDetection: ChangeDetectionStrategy.OnPush,
19
19
  encapsulation: ViewEncapsulation.None,
20
20
  standalone: true,
21
- imports: [],
21
+ imports: [SdResizeDirective],
22
22
  template: `
23
23
  <div
24
24
  #contentEl
25
25
  class="_content"
26
26
  [style.margin-top]="contentMarginTop()"
27
27
  [style.transition]="contentTransition()"
28
- (sdResize)="onContentResize($any($event))"
28
+ (sdResize)="onContentResize($event)"
29
29
  >
30
30
  <ng-content />
31
31
  </div>
@@ -42,8 +42,7 @@ import type { SdResizeEvent } from "../../core/events/sd-resize-event.plugin";
42
42
  export class SdCollapse {
43
43
  open = input(false, { transform: booleanAttribute });
44
44
 
45
- private readonly _contentElRef =
46
- viewChild.required<ElementRef<HTMLElement>>("contentEl");
45
+ private readonly _contentElRef = viewChild.required<ElementRef<HTMLElement>>("contentEl");
47
46
 
48
47
  contentHeight = signal(0);
49
48
 
@@ -1,23 +1,25 @@
1
1
  import {
2
2
  ChangeDetectionStrategy,
3
3
  Component,
4
+ ElementRef,
4
5
  forwardRef,
5
6
  inject,
6
7
  ViewEncapsulation,
7
8
  } from "@angular/core";
8
9
  import { SdDropdown } from "./sd-dropdown";
10
+ import { SdResizeDirective } from "../../core/events/sd-resize";
9
11
 
10
12
  @Component({
11
13
  selector: "sd-dropdown-popup",
12
14
  changeDetection: ChangeDetectionStrategy.OnPush,
13
15
  encapsulation: ViewEncapsulation.None,
14
16
  standalone: true,
15
- imports: [],
17
+ imports: [SdResizeDirective],
16
18
  host: {
17
19
  "(keydown)": "onKeydown($event)",
18
20
  },
19
21
  template: `
20
- <div>
22
+ <div (sdResize)="onResize()">
21
23
  <ng-content></ng-content>
22
24
  </div>
23
25
  `,
@@ -88,8 +90,19 @@ export class SdDropdownPopup {
88
90
  private readonly _parentControl = inject<SdDropdown>(
89
91
  forwardRef(() => SdDropdown),
90
92
  );
93
+ private readonly _elRef = inject(ElementRef<HTMLElement>);
91
94
 
92
95
  onKeydown(event: KeyboardEvent): void {
93
96
  this._parentControl.onPopupKeydown(event);
94
97
  }
98
+
99
+ onResize(): void {
100
+ const el = this._elRef.nativeElement;
101
+ const divEl = el.firstElementChild!;
102
+ if (divEl.clientHeight > 300) {
103
+ el.style.height = "300px";
104
+ } else {
105
+ el.style.removeProperty("height");
106
+ }
107
+ }
95
108
  }
@@ -208,21 +208,12 @@ export class SdDropdown {
208
208
  const leftPos = shouldPlaceLeft ? undefined : rect.left;
209
209
  const rightPos = shouldPlaceLeft ? window.innerWidth - rect.right : undefined;
210
210
 
211
- // Calculate available space for popup
212
- const availableHeight = shouldPlaceAbove
213
- ? rect.top - gap
214
- : window.innerHeight - rect.bottom - gap;
215
- const availableWidth = shouldPlaceLeft ? rect.right : window.innerWidth - rect.left;
216
-
217
211
  Object.assign(popupEl.style, {
218
- top: topPos !== undefined ? topPos + "px" : "",
219
- bottom: bottomPos !== undefined ? bottomPos + "px" : "",
220
- left: leftPos !== undefined ? leftPos + "px" : "",
221
- right: rightPos !== undefined ? rightPos + "px" : "",
212
+ top: topPos != null ? topPos + "px" : "",
213
+ bottom: bottomPos != null ? bottomPos + "px" : "",
214
+ left: leftPos != null ? leftPos + "px" : "",
215
+ right: rightPos != null ? rightPos + "px" : "",
222
216
  minWidth: contentEl.offsetWidth + "px",
223
- maxHeight: availableHeight > 0 ? availableHeight + "px" : "",
224
- maxWidth: availableWidth > 0 ? availableWidth + "px" : "",
225
- overflow: "auto",
226
217
  opacity: "1",
227
218
  pointerEvents: "auto",
228
219
  transform: "none",
@@ -296,9 +287,6 @@ export class SdDropdown {
296
287
  left: "",
297
288
  right: "",
298
289
  minWidth: "",
299
- maxHeight: "",
300
- maxWidth: "",
301
- overflow: "",
302
290
  opacity: "",
303
291
  pointerEvents: "",
304
292
  transform: "",
@@ -45,12 +45,12 @@ export class SdGap {
45
45
  if (this.widthPx() === 0 || this.heightPx() === 0 || this.widthEm() === 0) {
46
46
  return "none";
47
47
  } else if (
48
- this.width() !== undefined ||
49
- this.widthPx() !== undefined ||
50
- this.widthEm() !== undefined
48
+ this.width() != null ||
49
+ this.widthPx() != null ||
50
+ this.widthEm() != null
51
51
  ) {
52
52
  return "inline-block";
53
- } else if (this.height() !== undefined || this.heightPx() !== undefined) {
53
+ } else if (this.height() != null || this.heightPx() != null) {
54
54
  return "block";
55
55
  } else {
56
56
  return undefined;
@@ -68,14 +68,7 @@ export class SdDateRangePicker {
68
68
 
69
69
  handleDatePeriodTypeChanged(): void {
70
70
  if (this.periodType() === "월") {
71
- const fromDate = this.from();
72
- if (fromDate) {
73
- const firstOfMonth = fromDate.setDay(1);
74
- this.from.set(firstOfMonth);
75
- this.to.set(firstOfMonth.addMonths(1).addDays(-1));
76
- } else {
77
- this.to.set(undefined);
78
- }
71
+ this._syncMonthRange();
79
72
  } else if (this.periodType() === "일") {
80
73
  this.to.set(this.from());
81
74
  }
@@ -83,14 +76,7 @@ export class SdDateRangePicker {
83
76
 
84
77
  handleFromDateChanged(): void {
85
78
  if (this.periodType() === "월") {
86
- const fromDate = this.from();
87
- if (fromDate) {
88
- const firstOfMonth = fromDate.setDay(1);
89
- this.from.set(firstOfMonth);
90
- this.to.set(firstOfMonth.addMonths(1).addDays(-1));
91
- } else {
92
- this.to.set(undefined);
93
- }
79
+ this._syncMonthRange();
94
80
  } else if (this.periodType() === "일") {
95
81
  this.to.set(this.from());
96
82
  } else if (
@@ -102,4 +88,15 @@ export class SdDateRangePicker {
102
88
  this.to.set(this.from());
103
89
  }
104
90
  }
91
+
92
+ private _syncMonthRange(): void {
93
+ const fromDate = this.from();
94
+ if (fromDate) {
95
+ const firstOfMonth = fromDate.setDay(1);
96
+ this.from.set(firstOfMonth);
97
+ this.to.set(firstOfMonth.addMonths(1).addDays(-1));
98
+ } else {
99
+ this.to.set(undefined);
100
+ }
101
+ }
105
102
  }
@@ -42,7 +42,7 @@ import { tablerArrowLeft, tablerEraser } from "@ng-icons/tabler-icons";
42
42
  <sd-button
43
43
  [size]="'lg'"
44
44
  [theme]="'primary'"
45
- [disabled]="required() && value() === undefined"
45
+ [disabled]="required() && value() == undefined"
46
46
  (click)="onButtonClick('ENT')"
47
47
  >
48
48
  ENT
@@ -204,7 +204,7 @@ export class SdTextarea {
204
204
 
205
205
  if (this.validatorFn()) {
206
206
  const message = this.validatorFn()!(this.value());
207
- if (message !== undefined) {
207
+ if (message != null) {
208
208
  errorMessages.push(message);
209
209
  }
210
210
  }
@@ -105,10 +105,10 @@ function createStringHandler(type: "text" | "password" | "email" | "color"): Tex
105
105
 
106
106
  if (type !== "color") {
107
107
  const str = value as string;
108
- if (opts.minlength !== undefined && opts.minlength > str.length) {
108
+ if (opts.minlength != null && opts.minlength > str.length) {
109
109
  errors.push(`문자의 길이가 ${opts.minlength}보다 길거나 같아야 합니다.`);
110
110
  }
111
- if (opts.maxlength !== undefined && opts.maxlength < str.length) {
111
+ if (opts.maxlength != null && opts.maxlength < str.length) {
112
112
  errors.push(`문자의 길이가 ${opts.maxlength}보다 짧거나 같아야 합니다.`);
113
113
  }
114
114