@simplysm/angular 14.0.7 → 14.0.9

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 (294) hide show
  1. package/README.md +234 -246
  2. package/dist/core/commons.d.ts.map +1 -1
  3. package/dist/core/directives/sd-events.directive.d.ts.map +1 -1
  4. package/dist/core/directives/sd-invalid.directive.d.ts.map +1 -1
  5. package/dist/core/directives/sd-item-of-template.directive.d.ts.map +1 -1
  6. package/dist/core/directives/sd-ripple.directive.d.ts.map +1 -1
  7. package/dist/core/directives/sd-router-link.directive.d.ts.map +1 -1
  8. package/dist/core/directives/sd-show-effect.directive.d.ts.map +1 -1
  9. package/dist/core/directives/sd-typed-template.directive.d.ts.map +1 -1
  10. package/dist/core/pipes/format.pipe.d.ts.map +1 -1
  11. package/dist/core/plugins/commands/findTopOpenModalEl.d.ts.map +1 -1
  12. package/dist/core/plugins/commands/sd-insert-command-event.plugin.d.ts.map +1 -1
  13. package/dist/core/plugins/commands/sd-refresh-command-event.plugin.d.ts.map +1 -1
  14. package/dist/core/plugins/commands/sd-save-command-event.plugin.d.ts.map +1 -1
  15. package/dist/core/plugins/events/sd-intersection-event.plugin.d.ts.map +1 -1
  16. package/dist/core/plugins/events/sd-option-event.plugin.d.ts.map +1 -1
  17. package/dist/core/plugins/events/sd-resize-event.plugin.d.ts.map +1 -1
  18. package/dist/core/plugins/sd-global-error-handler.plugin.d.ts.map +1 -1
  19. package/dist/core/provideSdAngular.d.ts.map +1 -1
  20. package/dist/core/providers/sd-angular-config.provider.d.ts.map +1 -1
  21. package/dist/core/providers/sd-app-structure.provider.d.ts.map +1 -1
  22. package/dist/core/providers/sd-file-dialog.provider.d.ts.map +1 -1
  23. package/dist/core/providers/sd-local-storage.provider.d.ts.map +1 -1
  24. package/dist/core/providers/sd-navigate-window.provider.d.ts.map +1 -1
  25. package/dist/core/providers/sd-print.provider.d.ts +7 -2
  26. package/dist/core/providers/sd-print.provider.d.ts.map +1 -1
  27. package/dist/core/providers/sd-service-client-factory.provider.d.ts.map +1 -1
  28. package/dist/core/providers/sd-shared-data.provider.d.ts +3 -0
  29. package/dist/core/providers/sd-shared-data.provider.d.ts.map +1 -1
  30. package/dist/core/providers/sd-system-config.provider.d.ts.map +1 -1
  31. package/dist/core/providers/sd-system-log.provider.d.ts.map +1 -1
  32. package/dist/core/providers/sd-theme-provider.d.ts.map +1 -1
  33. package/dist/core/utils/TDirectiveInputSignals.d.ts +4 -0
  34. package/dist/core/utils/TDirectiveInputSignals.d.ts.map +1 -1
  35. package/dist/core/utils/injectParent.d.ts +7 -0
  36. package/dist/core/utils/injectParent.d.ts.map +1 -0
  37. package/dist/core/utils/injectParent.js +26 -0
  38. package/dist/core/utils/setSafeStyle.d.ts.map +1 -1
  39. package/dist/core/utils/setups/setupBgTheme.d.ts.map +1 -1
  40. package/dist/core/utils/setups/setupCanDeactivate.d.ts.map +1 -1
  41. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.d.ts +9 -0
  42. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.d.ts.map +1 -0
  43. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.js +20 -0
  44. package/dist/core/utils/setups/setupCumulateSelectedKeys.d.ts +9 -0
  45. package/dist/core/utils/setups/setupCumulateSelectedKeys.d.ts.map +1 -0
  46. package/dist/core/utils/setups/setupCumulateSelectedKeys.js +27 -0
  47. package/dist/core/utils/setups/setupInvalid.d.ts.map +1 -1
  48. package/dist/core/utils/setups/setupModelHook.d.ts.map +1 -1
  49. package/dist/core/utils/setups/setupRevealOnShow.d.ts.map +1 -1
  50. package/dist/core/utils/setups/setupRipple.d.ts.map +1 -1
  51. package/dist/core/utils/useCurrentPageCodeSignal.d.ts.map +1 -1
  52. package/dist/core/utils/useExpandingManager.d.ts.map +1 -1
  53. package/dist/core/utils/useFullPageCodeSignal.d.ts.map +1 -1
  54. package/dist/core/utils/useSdSystemConfigResource.d.ts.map +1 -1
  55. package/dist/core/utils/useSelectionManager.d.ts.map +1 -1
  56. package/dist/core/utils/useSortingManager.d.ts.map +1 -1
  57. package/dist/core/utils/useViewTitleSignal.d.ts.map +1 -1
  58. package/dist/core/utils/useViewTypeSignal.d.ts.map +1 -1
  59. package/dist/features/address/sd-address-search.modal.d.ts +19 -0
  60. package/dist/features/address/sd-address-search.modal.d.ts.map +1 -0
  61. package/dist/features/address/sd-address-search.modal.js +88 -0
  62. package/dist/features/base/sd-base-container.control.d.ts +26 -0
  63. package/dist/features/base/sd-base-container.control.d.ts.map +1 -0
  64. package/dist/features/base/sd-base-container.control.js +183 -0
  65. package/dist/features/data-view/sd-data-detail.control.d.ts +70 -0
  66. package/dist/features/data-view/sd-data-detail.control.d.ts.map +1 -0
  67. package/dist/features/data-view/sd-data-detail.control.js +606 -0
  68. package/dist/features/data-view/sd-data-select-button.control.d.ts +35 -0
  69. package/dist/features/data-view/sd-data-select-button.control.d.ts.map +1 -0
  70. package/dist/features/data-view/sd-data-select-button.control.js +219 -0
  71. package/dist/features/data-view/sd-data-sheet-column.directive.d.ts +8 -0
  72. package/dist/features/data-view/sd-data-sheet-column.directive.d.ts.map +1 -0
  73. package/dist/features/data-view/sd-data-sheet-column.directive.js +15 -0
  74. package/dist/features/data-view/sd-data-sheet.control.d.ts +131 -0
  75. package/dist/features/data-view/sd-data-sheet.control.d.ts.map +1 -0
  76. package/dist/features/data-view/sd-data-sheet.control.js +1152 -0
  77. package/dist/features/shared-data/sd-shared-data-select-button.control.d.ts +16 -0
  78. package/dist/features/shared-data/sd-shared-data-select-button.control.d.ts.map +1 -0
  79. package/dist/features/shared-data/sd-shared-data-select-button.control.js +66 -0
  80. package/dist/features/shared-data/sd-shared-data-select-list.control.d.ts +33 -0
  81. package/dist/features/shared-data/sd-shared-data-select-list.control.d.ts.map +1 -0
  82. package/dist/features/shared-data/sd-shared-data-select-list.control.js +346 -0
  83. package/dist/features/shared-data/sd-shared-data-select.control.d.ts +50 -0
  84. package/dist/features/shared-data/sd-shared-data-select.control.d.ts.map +1 -0
  85. package/dist/features/shared-data/sd-shared-data-select.control.js +425 -0
  86. package/dist/index.d.ts +13 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +15 -0
  89. package/dist/ui/data/list/sd-list-item.control.d.ts +3 -1
  90. package/dist/ui/data/list/sd-list-item.control.d.ts.map +1 -1
  91. package/dist/ui/data/list/sd-list-item.control.js +9 -5
  92. package/dist/ui/data/list/sd-list.control.d.ts.map +1 -1
  93. package/dist/ui/data/list/sd-list.control.js +1 -1
  94. package/dist/ui/data/sheet/sd-sheet-column.directive.d.ts +8 -1
  95. package/dist/ui/data/sheet/sd-sheet-column.directive.d.ts.map +1 -1
  96. package/dist/ui/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
  97. package/dist/ui/data/sheet/sd-sheet-config.modal.js +1 -1
  98. package/dist/ui/data/sheet/sd-sheet.control.d.ts +6 -5
  99. package/dist/ui/data/sheet/sd-sheet.control.d.ts.map +1 -1
  100. package/dist/ui/data/sheet/sd-sheet.control.js +19 -17
  101. package/dist/ui/data/sheet/types.d.ts.map +1 -1
  102. package/dist/ui/data/sheet/useSheetCellAgent.d.ts.map +1 -1
  103. package/dist/ui/data/sheet/useSheetCellAgent.js +1 -2
  104. package/dist/ui/data/sheet/useSheetColumnFixing.d.ts.map +1 -1
  105. package/dist/ui/data/sheet/useSheetDomAccessor.d.ts.map +1 -1
  106. package/dist/ui/data/sheet/useSheetLayoutEngine.d.ts.map +1 -1
  107. package/dist/ui/data/sheet/useSheetLayoutEngine.js +1 -0
  108. package/dist/ui/form/button/sd-additional-button.control.d.ts.map +1 -1
  109. package/dist/ui/form/button/sd-additional-button.control.js +1 -1
  110. package/dist/ui/form/button/sd-anchor.control.d.ts.map +1 -1
  111. package/dist/ui/form/button/sd-anchor.control.js +1 -1
  112. package/dist/ui/form/button/sd-button.control.d.ts.map +1 -1
  113. package/dist/ui/form/button/sd-button.control.js +1 -1
  114. package/dist/ui/form/button/sd-modal-select-button.control.d.ts +16 -18
  115. package/dist/ui/form/button/sd-modal-select-button.control.d.ts.map +1 -1
  116. package/dist/ui/form/button/sd-modal-select-button.control.js +22 -39
  117. package/dist/ui/form/checkbox/sd-checkbox-group-item.control.d.ts.map +1 -1
  118. package/dist/ui/form/checkbox/sd-checkbox-group-item.control.js +1 -1
  119. package/dist/ui/form/checkbox/sd-checkbox-group.control.d.ts.map +1 -1
  120. package/dist/ui/form/checkbox/sd-checkbox-group.control.js +1 -1
  121. package/dist/ui/form/checkbox/sd-checkbox.control.d.ts.map +1 -1
  122. package/dist/ui/form/checkbox/sd-checkbox.control.js +1 -1
  123. package/dist/ui/form/checkbox/sd-switch.control.d.ts.map +1 -1
  124. package/dist/ui/form/checkbox/sd-switch.control.js +1 -1
  125. package/dist/ui/form/choice/sd-state-preset.control.d.ts.map +1 -1
  126. package/dist/ui/form/choice/sd-state-preset.control.js +1 -1
  127. package/dist/ui/form/editor/sd-tiptap-editor.control.d.ts +18 -1
  128. package/dist/ui/form/editor/sd-tiptap-editor.control.d.ts.map +1 -1
  129. package/dist/ui/form/editor/sd-tiptap-editor.control.js +18 -2
  130. package/dist/ui/form/input/sd-date-range.picker.d.ts.map +1 -1
  131. package/dist/ui/form/input/sd-date-range.picker.js +1 -1
  132. package/dist/ui/form/input/sd-numpad.control.d.ts.map +1 -1
  133. package/dist/ui/form/input/sd-numpad.control.js +1 -1
  134. package/dist/ui/form/input/sd-range.control.d.ts.map +1 -1
  135. package/dist/ui/form/input/sd-range.control.js +1 -1
  136. package/dist/ui/form/input/sd-textarea.control.d.ts.map +1 -1
  137. package/dist/ui/form/input/sd-textarea.control.js +1 -1
  138. package/dist/ui/form/input/sd-textfield-type-handlers.d.ts.map +1 -1
  139. package/dist/ui/form/input/sd-textfield.control.d.ts.map +1 -1
  140. package/dist/ui/form/input/sd-textfield.control.js +1 -1
  141. package/dist/ui/form/sd-form.control.d.ts.map +1 -1
  142. package/dist/ui/form/sd-form.control.js +1 -1
  143. package/dist/ui/form/select/sd-select-button.control.d.ts.map +1 -1
  144. package/dist/ui/form/select/sd-select-button.control.js +1 -1
  145. package/dist/ui/form/select/sd-select-item.control.d.ts +1 -1
  146. package/dist/ui/form/select/sd-select-item.control.d.ts.map +1 -1
  147. package/dist/ui/form/select/sd-select-item.control.js +1 -1
  148. package/dist/ui/form/select/sd-select.control.d.ts +9 -6
  149. package/dist/ui/form/select/sd-select.control.d.ts.map +1 -1
  150. package/dist/ui/form/select/sd-select.control.js +1 -1
  151. package/dist/ui/layout/dock/sd-dock-container.control.d.ts.map +1 -1
  152. package/dist/ui/layout/dock/sd-dock-container.control.js +1 -1
  153. package/dist/ui/layout/dock/sd-dock.control.d.ts +2 -0
  154. package/dist/ui/layout/dock/sd-dock.control.d.ts.map +1 -1
  155. package/dist/ui/layout/dock/sd-dock.control.js +13 -4
  156. package/dist/ui/layout/kanban/sd-kanban-board.control.d.ts.map +1 -1
  157. package/dist/ui/layout/kanban/sd-kanban-board.control.js +1 -1
  158. package/dist/ui/layout/kanban/sd-kanban-lane.control.d.ts.map +1 -1
  159. package/dist/ui/layout/kanban/sd-kanban-lane.control.js +8 -2
  160. package/dist/ui/layout/kanban/sd-kanban.control.d.ts.map +1 -1
  161. package/dist/ui/layout/kanban/sd-kanban.control.js +1 -1
  162. package/dist/ui/layout/sd-card.directive.d.ts.map +1 -1
  163. package/dist/ui/layout/sd-gap.control.d.ts +2 -2
  164. package/dist/ui/layout/sd-gap.control.d.ts.map +1 -1
  165. package/dist/ui/layout/sd-gap.control.js +1 -1
  166. package/dist/ui/layout/sd-pane.directive.d.ts.map +1 -1
  167. package/dist/ui/layout/view/sd-view-item.control.d.ts.map +1 -1
  168. package/dist/ui/layout/view/sd-view-item.control.js +1 -1
  169. package/dist/ui/layout/view/sd-view.control.d.ts.map +1 -1
  170. package/dist/ui/layout/view/sd-view.control.js +1 -1
  171. package/dist/ui/navigation/collapse/sd-collapse-icon.control.d.ts.map +1 -1
  172. package/dist/ui/navigation/collapse/sd-collapse-icon.control.js +1 -1
  173. package/dist/ui/navigation/collapse/sd-collapse.control.d.ts.map +1 -1
  174. package/dist/ui/navigation/collapse/sd-collapse.control.js +1 -1
  175. package/dist/ui/navigation/menu-utils.d.ts.map +1 -1
  176. package/dist/ui/navigation/pagination/sd-pagination.control.d.ts.map +1 -1
  177. package/dist/ui/navigation/pagination/sd-pagination.control.js +8 -4
  178. package/dist/ui/navigation/sidebar/sd-sidebar-container.control.d.ts.map +1 -1
  179. package/dist/ui/navigation/sidebar/sd-sidebar-container.control.js +2 -2
  180. package/dist/ui/navigation/sidebar/sd-sidebar-menu.control.d.ts.map +1 -1
  181. package/dist/ui/navigation/sidebar/sd-sidebar-menu.control.js +1 -1
  182. package/dist/ui/navigation/sidebar/sd-sidebar-user.control.d.ts.map +1 -1
  183. package/dist/ui/navigation/sidebar/sd-sidebar-user.control.js +1 -1
  184. package/dist/ui/navigation/sidebar/sd-sidebar.control.d.ts.map +1 -1
  185. package/dist/ui/navigation/sidebar/sd-sidebar.control.js +1 -1
  186. package/dist/ui/navigation/tab/sd-tab-item.control.d.ts.map +1 -1
  187. package/dist/ui/navigation/tab/sd-tab-item.control.js +1 -1
  188. package/dist/ui/navigation/tab/sd-tab.control.d.ts.map +1 -1
  189. package/dist/ui/navigation/tab/sd-tab.control.js +1 -1
  190. package/dist/ui/navigation/tab/sd-tabview-item.control.d.ts.map +1 -1
  191. package/dist/ui/navigation/tab/sd-tabview-item.control.js +1 -1
  192. package/dist/ui/navigation/tab/sd-tabview.control.d.ts.map +1 -1
  193. package/dist/ui/navigation/tab/sd-tabview.control.js +1 -1
  194. package/dist/ui/navigation/topbar/sd-topbar-container.control.d.ts.map +1 -1
  195. package/dist/ui/navigation/topbar/sd-topbar-container.control.js +1 -1
  196. package/dist/ui/navigation/topbar/sd-topbar-menu.control.d.ts.map +1 -1
  197. package/dist/ui/navigation/topbar/sd-topbar-menu.control.js +1 -1
  198. package/dist/ui/navigation/topbar/sd-topbar-user.control.d.ts.map +1 -1
  199. package/dist/ui/navigation/topbar/sd-topbar-user.control.js +1 -1
  200. package/dist/ui/navigation/topbar/sd-topbar.control.d.ts.map +1 -1
  201. package/dist/ui/navigation/topbar/sd-topbar.control.js +1 -1
  202. package/dist/ui/overlay/busy/sd-busy-container.control.d.ts.map +1 -1
  203. package/dist/ui/overlay/busy/sd-busy-container.control.js +1 -1
  204. package/dist/ui/overlay/busy/sd-busy.provider.d.ts.map +1 -1
  205. package/dist/ui/overlay/dropdown/sd-dropdown-popup.control.d.ts.map +1 -1
  206. package/dist/ui/overlay/dropdown/sd-dropdown-popup.control.js +2 -2
  207. package/dist/ui/overlay/dropdown/sd-dropdown.control.d.ts.map +1 -1
  208. package/dist/ui/overlay/dropdown/sd-dropdown.control.js +1 -1
  209. package/dist/ui/overlay/modal/sd-confirm-modal.control.d.ts.map +1 -1
  210. package/dist/ui/overlay/modal/sd-confirm-modal.control.js +1 -1
  211. package/dist/ui/overlay/modal/sd-modal.control.d.ts +1 -0
  212. package/dist/ui/overlay/modal/sd-modal.control.d.ts.map +1 -1
  213. package/dist/ui/overlay/modal/sd-modal.control.js +10 -2
  214. package/dist/ui/overlay/modal/sd-modal.provider.d.ts +9 -3
  215. package/dist/ui/overlay/modal/sd-modal.provider.d.ts.map +1 -1
  216. package/dist/ui/overlay/modal/sd-prompt-modal.control.d.ts.map +1 -1
  217. package/dist/ui/overlay/modal/sd-prompt-modal.control.js +1 -1
  218. package/dist/ui/overlay/toast/sd-toast-container.control.d.ts.map +1 -1
  219. package/dist/ui/overlay/toast/sd-toast-container.control.js +1 -1
  220. package/dist/ui/overlay/toast/sd-toast.control.d.ts.map +1 -1
  221. package/dist/ui/overlay/toast/sd-toast.control.js +1 -1
  222. package/dist/ui/overlay/toast/sd-toast.provider.d.ts.map +1 -1
  223. package/dist/ui/overlay/toast/sd-toast.provider.js +7 -3
  224. package/dist/ui/visual/sd-barcode.control.d.ts.map +1 -1
  225. package/dist/ui/visual/sd-barcode.control.js +1 -1
  226. package/dist/ui/visual/sd-calendar.control.d.ts.map +1 -1
  227. package/dist/ui/visual/sd-calendar.control.js +1 -1
  228. package/dist/ui/visual/sd-echarts.control.d.ts.map +1 -1
  229. package/dist/ui/visual/sd-echarts.control.js +1 -1
  230. package/dist/ui/visual/sd-label.control.d.ts.map +1 -1
  231. package/dist/ui/visual/sd-label.control.js +1 -1
  232. package/dist/ui/visual/sd-note.control.d.ts.map +1 -1
  233. package/dist/ui/visual/sd-note.control.js +1 -1
  234. package/dist/ui/visual/sd-progress.control.d.ts +1 -0
  235. package/dist/ui/visual/sd-progress.control.d.ts.map +1 -1
  236. package/dist/ui/visual/sd-progress.control.js +5 -4
  237. package/docs/core.md +877 -0
  238. package/docs/features.md +377 -0
  239. package/docs/styling.md +309 -0
  240. package/docs/ui-data.md +233 -0
  241. package/docs/ui-form.md +421 -0
  242. package/docs/ui-layout.md +216 -0
  243. package/docs/ui-navigation.md +279 -0
  244. package/docs/ui-overlay.md +330 -0
  245. package/docs/ui-visual.md +131 -0
  246. package/package.json +5 -5
  247. package/src/core/providers/sd-print.provider.ts +10 -2
  248. package/src/core/providers/sd-shared-data.provider.ts +3 -0
  249. package/src/core/utils/TDirectiveInputSignals.ts +5 -0
  250. package/src/core/utils/injectParent.ts +41 -0
  251. package/src/core/utils/setups/setupCloserWhenSingleSelectionChange.ts +29 -0
  252. package/src/core/utils/setups/setupCumulateSelectedKeys.ts +38 -0
  253. package/src/features/address/sd-address-search.modal.ts +119 -0
  254. package/src/features/base/sd-base-container.control.ts +113 -0
  255. package/src/features/data-view/sd-data-detail.control.ts +394 -0
  256. package/src/features/data-view/sd-data-select-button.control.ts +210 -0
  257. package/src/features/data-view/sd-data-sheet-column.directive.ts +10 -0
  258. package/src/features/data-view/sd-data-sheet.control.ts +850 -0
  259. package/src/features/shared-data/sd-shared-data-select-button.control.ts +64 -0
  260. package/src/features/shared-data/sd-shared-data-select-list.control.ts +245 -0
  261. package/src/features/shared-data/sd-shared-data-select.control.ts +364 -0
  262. package/src/index.ts +39 -1
  263. package/src/scss.d.ts +5 -0
  264. package/src/ui/data/list/sd-list-item.control.ts +4 -2
  265. package/src/ui/data/sheet/sd-sheet-column.directive.ts +9 -1
  266. package/src/ui/data/sheet/sd-sheet.control.ts +23 -19
  267. package/src/ui/data/sheet/useSheetCellAgent.ts +1 -2
  268. package/src/ui/data/sheet/useSheetLayoutEngine.ts +1 -0
  269. package/src/ui/form/button/sd-modal-select-button.control.ts +41 -59
  270. package/src/ui/form/editor/sd-tiptap-editor.control.ts +35 -1
  271. package/src/ui/form/select/sd-select-item.control.ts +1 -1
  272. package/src/ui/form/select/sd-select.control.ts +7 -4
  273. package/src/ui/layout/dock/sd-dock.control.ts +15 -2
  274. package/src/ui/layout/kanban/sd-kanban-lane.control.ts +6 -3
  275. package/src/ui/navigation/pagination/sd-pagination.control.ts +5 -3
  276. package/src/ui/navigation/sidebar/sd-sidebar-container.control.ts +1 -1
  277. package/src/ui/overlay/dropdown/sd-dropdown-popup.control.ts +1 -1
  278. package/src/ui/overlay/modal/sd-modal.control.ts +9 -0
  279. package/src/ui/overlay/modal/sd-modal.provider.ts +15 -3
  280. package/src/ui/overlay/toast/sd-toast.provider.ts +9 -3
  281. package/src/ui/visual/sd-progress.control.ts +4 -1
  282. package/docs/commons-and-configuration.md +0 -34
  283. package/docs/data-display-components.md +0 -146
  284. package/docs/directives.md +0 -158
  285. package/docs/event-plugins.md +0 -109
  286. package/docs/form-components.md +0 -362
  287. package/docs/hooks-and-utilities.md +0 -175
  288. package/docs/layout-components.md +0 -140
  289. package/docs/navigation-components.md +0 -200
  290. package/docs/overlay-components.md +0 -193
  291. package/docs/pipes.md +0 -25
  292. package/docs/providers.md +0 -448
  293. package/docs/setup-functions.md +0 -66
  294. package/docs/visual-components.md +0 -89
package/src/index.ts CHANGED
@@ -57,11 +57,45 @@ export { useFullPageCodeSignal } from "./core/utils/useFullPageCodeSignal";
57
57
  export { useViewTitleSignal } from "./core/utils/useViewTitleSignal";
58
58
  export { useViewTypeSignal, type TSdViewType } from "./core/utils/useViewTypeSignal";
59
59
  export { setupCanDeactivate } from "./core/utils/setups/setupCanDeactivate";
60
+ export { setupCumulateSelectedKeys } from "./core/utils/setups/setupCumulateSelectedKeys";
61
+ export { setupCloserWhenSingleSelectionChange } from "./core/utils/setups/setupCloserWhenSingleSelectionChange";
60
62
  export {
61
63
  useExpandingManager,
62
64
  type IExpandItemDef,
63
65
  } from "./core/utils/useExpandingManager";
64
66
  export { useSelectionManager } from "./core/utils/useSelectionManager";
67
+ export { injectParent } from "./core/utils/injectParent";
68
+
69
+ // features/address
70
+ export {
71
+ SdAddressSearchModal,
72
+ type IAddress,
73
+ } from "./features/address/sd-address-search.modal";
74
+
75
+ // features
76
+ export { SdBaseContainerControl } from "./features/base/sd-base-container.control";
77
+ export {
78
+ SdDataSheetControl,
79
+ AbsSdDataSheet,
80
+ type ISdDataSheetItemPropInfo,
81
+ type ISdDataSheetItemInfo,
82
+ type ISdDataSheetSearchResult,
83
+ } from "./features/data-view/sd-data-sheet.control";
84
+ export { SdDataSheetColumnDirective } from "./features/data-view/sd-data-sheet-column.directive";
85
+ export {
86
+ SdDataDetailControl,
87
+ AbsSdDataDetail,
88
+ type ISdDataDetailDataInfo,
89
+ } from "./features/data-view/sd-data-detail.control";
90
+ export {
91
+ SdDataSelectButtonControl,
92
+ AbsSdDataSelectButton,
93
+ } from "./features/data-view/sd-data-select-button.control";
94
+
95
+ // features/shared-data
96
+ export { SdSharedDataSelectControl } from "./features/shared-data/sd-shared-data-select.control";
97
+ export { SdSharedDataSelectButtonControl } from "./features/shared-data/sd-shared-data-select-button.control";
98
+ export { SdSharedDataSelectListControl } from "./features/shared-data/sd-shared-data-select-list.control";
65
99
 
66
100
  // ui/layout
67
101
  export { SdDockContainerControl } from "./ui/layout/dock/sd-dock-container.control";
@@ -225,4 +259,8 @@ export {
225
259
 
226
260
  // core/utils
227
261
  export { useSortingManager, type ISortingDef } from "./core/utils/useSortingManager";
228
- export type { TDirectiveInputSignals, TUndefToOptional } from "./core/utils/TDirectiveInputSignals";
262
+ export type {
263
+ TDirectiveInputSignals,
264
+ TUndefToOptional,
265
+ TWithOptional,
266
+ } from "./core/utils/TDirectiveInputSignals";
package/src/scss.d.ts CHANGED
@@ -1 +1,6 @@
1
1
  declare module "*.scss" {}
2
+
3
+ declare module "*.scss?inline" {
4
+ const content: string;
5
+ export default content;
6
+ }
@@ -24,7 +24,7 @@ import { setupRipple } from "../../../core/utils/setups/setupRipple";
24
24
  standalone: true,
25
25
  imports: [SdCollapseControl, SdCollapseIconControl, NgTemplateOutlet, NgIcon],
26
26
  template: `
27
- <div class="_content" tabindex="0" (click)="onContentClick()" (keydown.enter)="onContentClick()">
27
+ <div class="_content" [style]="contentStyle()" [class]="contentClass()" tabindex="0" (click)="onContentClick()" (keydown.enter)="onContentClick()">
28
28
  @if (layout() === "accordion" && hasChildren()) {
29
29
  <sd-collapse-icon [open]="open()" />
30
30
  }
@@ -119,6 +119,8 @@ export class SdListItemControl {
119
119
  selected = input(false, { transform: booleanAttribute });
120
120
  selectedIcon = input<string>();
121
121
  readonly = input(false, { transform: booleanAttribute });
122
+ contentStyle = input<string>();
123
+ contentClass = input<string>();
122
124
 
123
125
  toolTpl = contentChild<TemplateRef<void>>("toolTpl");
124
126
 
@@ -131,7 +133,7 @@ export class SdListItemControl {
131
133
  });
132
134
 
133
135
  constructor() {
134
- setupRipple(() => !this.readonly() && !(this.layout() === "flat" && this.hasChildren()));
136
+ setupRipple(() => !this.readonly() && this.layout() !== "flat");
135
137
  }
136
138
 
137
139
  onContentClick(): void {
@@ -6,6 +6,14 @@ import {
6
6
  TemplateRef,
7
7
  } from "@angular/core";
8
8
 
9
+ export interface SdSheetCellContext {
10
+ $implicit: unknown;
11
+ item: unknown;
12
+ index: number;
13
+ depth: number;
14
+ edit: boolean;
15
+ }
16
+
9
17
  @Directive({
10
18
  selector: "sd-sheet-column",
11
19
  standalone: true,
@@ -21,6 +29,6 @@ export class SdSheetColumnDirective {
21
29
  disableResizing = input(false, { transform: booleanAttribute });
22
30
  ordering = input(0);
23
31
 
24
- cellTplRef = contentChild<TemplateRef<void>>("cellTpl");
32
+ cellTplRef = contentChild<TemplateRef<SdSheetCellContext>>("cellTpl");
25
33
  summaryTplRef = contentChild<TemplateRef<void>>("summaryTpl");
26
34
  }
@@ -135,7 +135,7 @@ import { SdSheetConfigModal } from "./sd-sheet-config.modal";
135
135
  >
136
136
  @if (expanding.hasExpandable()) {
137
137
  <td class="_expand-col">
138
- @if (getItemDef(item)?.hasChildren) {
138
+ @if (getItemDef(item).hasChildren) {
139
139
  <sd-anchor (click)="onExpandClick($event, item)">
140
140
  <ng-icon [svg]="isExpanded(item) ? icons.tablerChevronDown : icons.tablerChevronRight" />
141
141
  </sd-anchor>
@@ -351,7 +351,7 @@ export class SdSheetControl<T> {
351
351
  inset = input(false, { transform: booleanAttribute });
352
352
  contentStyle = input<string>();
353
353
  getItemCellClassFn = input<(item: T, colKey: string) => string>();
354
- getItemCellStyleFn = input<(item: T, colKey: string) => string>();
354
+ getItemCellStyleFn = input<(item: T, colKey: string) => string | undefined>();
355
355
  hideConfigBar = input(false, { transform: booleanAttribute });
356
356
 
357
357
  // Outputs
@@ -384,7 +384,7 @@ export class SdSheetControl<T> {
384
384
  // Resizing state
385
385
  _isResizing = signal(false);
386
386
  _resizeIndicatorLeft = signal(0);
387
- private _isOnResizing = false;
387
+ private _lastResizeEndTimeStamp = 0;
388
388
  private _resizingCleanup: (() => void) | null = null;
389
389
 
390
390
  // Config resource
@@ -478,13 +478,21 @@ export class SdSheetControl<T> {
478
478
  getItemSelectableFn: this.getItemSelectableFn,
479
479
  });
480
480
 
481
+ private readonly _columnControlMap = computed(() => {
482
+ const map = new Map<string, SdSheetColumnDirective>();
483
+ for (const col of this.columnControls()) {
484
+ map.set(col.key(), col);
485
+ }
486
+ return map;
487
+ });
488
+
481
489
  getColumnCellTpl(key: string) {
482
- const col = this.columnControls().find((c) => c.key() === key);
490
+ const col = this._columnControlMap().get(key);
483
491
  return col?.cellTplRef() ?? null;
484
492
  }
485
493
 
486
494
  getColumnSummaryTpl(key: string) {
487
- const col = this.columnControls().find((c) => c.key() === key);
495
+ const col = this._columnControlMap().get(key);
488
496
  return col?.summaryTplRef() ?? null;
489
497
  }
490
498
 
@@ -513,9 +521,8 @@ export class SdSheetControl<T> {
513
521
  if (fixedStyle != null) {
514
522
  parts.push(fixedStyle);
515
523
  }
516
- const customStyle = this.getItemCellStyleFn()
517
- ? this.getItemCellStyleFn()!(item, colDef.key)
518
- : undefined;
524
+ const styleFn = this.getItemCellStyleFn();
525
+ const customStyle = styleFn != null ? styleFn(item, colDef.key) : undefined;
519
526
  if (customStyle != null) {
520
527
  parts.push(customStyle);
521
528
  }
@@ -556,7 +563,7 @@ export class SdSheetControl<T> {
556
563
  }
557
564
 
558
565
  onHeaderClick(event: MouseEvent, cell: ISdSheetHeaderDef): void {
559
- if (this._isOnResizing) return;
566
+ if (event.timeStamp - this._lastResizeEndTimeStamp < 50) return;
560
567
  if (cell.colDef == null) return;
561
568
  if (cell.colDef.disableSorting) return;
562
569
  this.sorting.toggle(cell.colDef.key, event.shiftKey);
@@ -642,7 +649,8 @@ export class SdSheetControl<T> {
642
649
 
643
650
  getDataCellClass(item: T, colDef: ISdSheetColumnDef, r: number, c: number): string | null {
644
651
  const parts: string[] = [];
645
- const customClass = this.getItemCellClassFn() ? this.getItemCellClassFn()!(item, colDef.key) : undefined;
652
+ const classFn = this.getItemCellClassFn();
653
+ const customClass = classFn != null ? classFn(item, colDef.key) : undefined;
646
654
  if (customClass != null) {
647
655
  parts.push(customClass);
648
656
  }
@@ -652,16 +660,16 @@ export class SdSheetControl<T> {
652
660
  return parts.length > 0 ? parts.join(" ") : null;
653
661
  }
654
662
 
655
- async onKeydownCapture(event: KeyboardEvent): Promise<void> {
656
- await this.cellAgent.handleKeydownCapture(event);
663
+ async onKeydownCapture(event: Event): Promise<void> {
664
+ await this.cellAgent.handleKeydownCapture(event as KeyboardEvent);
657
665
  }
658
666
 
659
667
  onDblClick(event: MouseEvent): void {
660
668
  this.cellAgent.handleCellDoubleClick(event);
661
669
  }
662
670
 
663
- onBlurCapture(event: FocusEvent): void {
664
- this.cellAgent.handleBlurCapture(event);
671
+ onBlurCapture(event: Event): void {
672
+ this.cellAgent.handleBlurCapture(event as FocusEvent);
665
673
  }
666
674
 
667
675
  onItemKeydown(event: KeyboardEvent, item: T): void {
@@ -700,7 +708,6 @@ export class SdSheetControl<T> {
700
708
  const startWidth = th.offsetWidth;
701
709
 
702
710
  this._isResizing.set(true);
703
- this._isOnResizing = true;
704
711
  this._resizeIndicatorLeft.set(
705
712
  th.offsetLeft + th.offsetWidth - container.scrollLeft,
706
713
  );
@@ -724,10 +731,7 @@ export class SdSheetControl<T> {
724
731
  this._isResizing.set(false);
725
732
  this._saveColumnConfig(colDef.key, { width: `${newWidth}px` });
726
733
 
727
- // Prevent sorting for 300ms after resize
728
- setTimeout(() => {
729
- this._isOnResizing = false;
730
- }, 300);
734
+ this._lastResizeEndTimeStamp = e.timeStamp;
731
735
  };
732
736
 
733
737
  document.addEventListener("mousemove", onMouseMove);
@@ -192,8 +192,7 @@ export function useSheetCellAgent(options: {
192
192
  }
193
193
 
194
194
  event.preventDefault();
195
- const text = td.textContent;
196
- await navigator.clipboard.writeText(text);
195
+ await navigator.clipboard.writeText(td.textContent);
197
196
  return;
198
197
  }
199
198
 
@@ -112,6 +112,7 @@ export function useSheetLayoutEngine(options: {
112
112
 
113
113
  if (canMerge && lastCell != null) {
114
114
  lastCell.colspan += 1;
115
+ spanStartHeaders[row] = headers;
115
116
  } else {
116
117
  table[row].push({
117
118
  text,
@@ -15,7 +15,6 @@ import {
15
15
  type ISdModalInfo,
16
16
  type ISdModalOptions,
17
17
  } from "../../overlay/modal/sd-modal.provider";
18
- import type { TDirectiveInputSignals } from "../../../core/utils/TDirectiveInputSignals";
19
18
  import type { TSelectModeValue } from "../select/sd-select.control";
20
19
  import { SdAnchorControl } from "./sd-anchor.control";
21
20
  import { SdButtonControl } from "./sd-button.control";
@@ -28,30 +27,25 @@ import { tablerSearch, tablerEraser } from "@ng-icons/tabler-icons";
28
27
  * ISdModal을 확장하여 selectMode와 selectedItemKeys를 추가한다.
29
28
  */
30
29
  export interface ISdSelectModal<T> extends ISdModal<ISelectModalOutputResult<T>> {
31
- selectMode: InputSignal<"single" | "multi">;
32
- selectedItemKeys: InputSignal<T[]>;
30
+ selectMode: InputSignal<"single" | "multi" | undefined>;
31
+ selectedItemKeys: InputSignal<any[]>;
33
32
  }
34
33
 
35
34
  /**
36
35
  * 모달 선택 결과
37
36
  */
38
37
  export interface ISelectModalOutputResult<T> {
39
- selectedItemKeys: T[];
40
- selectedItems: Record<string, unknown>[];
38
+ selectedItemKeys: any[];
39
+ selectedItems: T[];
41
40
  }
42
41
 
43
42
  /**
44
43
  * 모달 선택 정보 (selectMode/selectedItemKeys를 제외한 inputs)
45
44
  */
46
- export type TSdSelectModalInfo<T extends ISdSelectModal<any>> = Omit<
47
- ISdModalInfo<T>,
48
- "inputs"
49
- > & {
50
- inputs: Omit<
51
- TDirectiveInputSignals<T>,
52
- "initialized" | "close" | "actionTplRef" | "selectMode" | "selectedItemKeys"
53
- >;
54
- };
45
+ export type TSdSelectModalInfo<T extends ISdSelectModal<any>> = ISdModalInfo<
46
+ T,
47
+ "selectMode" | "selectedItemKeys"
48
+ >;
55
49
 
56
50
  @Component({
57
51
  selector: "sd-modal-select-button",
@@ -71,7 +65,7 @@ export type TSdSelectModalInfo<T extends ISdSelectModal<any>> = Omit<
71
65
  }
72
66
  @if (!disabled()) {
73
67
  <sd-button [inset]="true" (click)="onSearchClick()">
74
- <ng-icon [svg]="tablerSearch" />
68
+ <ng-icon [svg]="searchIcon()" />
75
69
  </sd-button>
76
70
  }
77
71
  </div>
@@ -156,20 +150,27 @@ export type TSdSelectModalInfo<T extends ISdSelectModal<any>> = Omit<
156
150
  "[attr.data-sd-disabled]": "disabled()",
157
151
  },
158
152
  })
159
- export class SdModalSelectButtonControl {
153
+ export class SdModalSelectButtonControl<
154
+ T extends object,
155
+ K,
156
+ M extends keyof TSelectModeValue<K> = keyof TSelectModeValue<K>,
157
+ > {
160
158
  private readonly _sdModal = inject(SdModalProvider);
161
159
 
162
- selectMode = input<"single" | "multi">("single");
163
- value = model<TSelectModeValue<any>>();
164
- selectedItems = model<Record<string, unknown>[]>([]);
160
+ modal = input.required<TSdSelectModalInfo<ISdSelectModal<T>>>();
161
+
162
+ value = model<TSelectModeValue<K>[M]>();
163
+ selectedItems = model<T[]>([]);
164
+
165
165
  disabled = input(false, { transform: booleanAttribute });
166
166
  required = input(false, { transform: booleanAttribute });
167
- modal = input<TSdSelectModalInfo<any>>();
168
- modalOptions = input<ISdModalOptions>();
169
- size = input<"sm" | "lg">();
170
167
  inset = input(false, { transform: booleanAttribute });
168
+ size = input<"sm" | "lg">();
169
+ selectMode = input<M>("single" as M);
170
+ modalOptions = input<ISdModalOptions>();
171
+
172
+ searchIcon = input(tablerSearch);
171
173
 
172
- protected readonly tablerSearch = tablerSearch;
173
174
  protected readonly tablerEraser = tablerEraser;
174
175
 
175
176
  _hasValue = computed(() => {
@@ -190,48 +191,29 @@ export class SdModalSelectButtonControl {
190
191
  }
191
192
 
192
193
  onEraseClick(): void {
193
- if (this.selectMode() === "multi") {
194
- this.value.set([]);
195
- } else {
196
- this.value.set(undefined);
197
- }
194
+ this.value.set((this.selectMode() === "multi" ? [] : undefined) as any);
198
195
  this.selectedItems.set([]);
199
196
  }
200
197
 
201
198
  async onSearchClick(): Promise<void> {
202
- const modalInfo = this.modal();
203
- if (modalInfo == null) return;
204
-
205
- const currentValue = this.value();
206
- const selectedItemKeys: any[] =
207
- this.selectMode() === "multi"
208
- ? (currentValue as any[] | undefined) ?? []
209
- : currentValue != null
210
- ? [currentValue]
211
- : [];
212
-
213
- const result = await this._sdModal.showAsync(
214
- {
215
- title: modalInfo.title,
216
- type: modalInfo.type,
217
- inputs: {
218
- ...modalInfo.inputs,
219
- selectMode: this.selectMode(),
220
- selectedItemKeys,
221
- } as any,
199
+ const modal = this.modal();
200
+ const result = await this._sdModal.showAsync({
201
+ ...modal,
202
+ inputs: {
203
+ selectMode: this.selectMode(),
204
+ selectedItemKeys: (this.selectMode() === "multi"
205
+ ? ((this.value() as any[] | undefined) ?? [])
206
+ : [this.value()]
207
+ ).filterExists(),
208
+ ...modal.inputs,
222
209
  },
223
- this.modalOptions(),
224
- );
225
-
226
- if (result == null) return;
227
-
228
- const typedResult = result as ISelectModalOutputResult<any>;
210
+ });
229
211
 
230
- if (this.selectMode() === "multi") {
231
- this.value.set(typedResult.selectedItemKeys);
232
- } else {
233
- this.value.set(typedResult.selectedItemKeys[0]);
212
+ if (result) {
213
+ const newValue =
214
+ this.selectMode() === "multi" ? result.selectedItemKeys : result.selectedItemKeys[0];
215
+ this.value.set(newValue);
216
+ this.selectedItems.set(result.selectedItems);
234
217
  }
235
- this.selectedItems.set(typedResult.selectedItems);
236
218
  }
237
219
  }
@@ -24,6 +24,40 @@ import TextAlign from "@tiptap/extension-text-align";
24
24
  import Image from "@tiptap/extension-image";
25
25
  import Placeholder from "@tiptap/extension-placeholder";
26
26
 
27
+ interface TiptapActiveStates {
28
+ h1: boolean;
29
+ h2: boolean;
30
+ bold: boolean;
31
+ italic: boolean;
32
+ underline: boolean;
33
+ strike: boolean;
34
+ bulletList: boolean;
35
+ orderedList: boolean;
36
+ blockquote: boolean;
37
+ codeBlock: boolean;
38
+ alignLeft: boolean;
39
+ alignCenter: boolean;
40
+ alignRight: boolean;
41
+ alignJustify: boolean;
42
+ }
43
+
44
+ const DEFAULT_ACTIVE_STATES: TiptapActiveStates = {
45
+ h1: false,
46
+ h2: false,
47
+ bold: false,
48
+ italic: false,
49
+ underline: false,
50
+ strike: false,
51
+ bulletList: false,
52
+ orderedList: false,
53
+ blockquote: false,
54
+ codeBlock: false,
55
+ alignLeft: false,
56
+ alignCenter: false,
57
+ alignRight: false,
58
+ alignJustify: false,
59
+ };
60
+
27
61
  const DEFAULT_EXTENSIONS: AnyExtension[] = [
28
62
  StarterKit,
29
63
  TextStyle,
@@ -251,7 +285,7 @@ export class SdTiptapEditorControl {
251
285
  "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#a4c2f4", "#9fc5e8", "#b4a7d6", "#d5a6bd",
252
286
  ];
253
287
 
254
- activeStates: WritableSignal<Record<string, boolean>> = signal({});
288
+ activeStates: WritableSignal<TiptapActiveStates> = signal(DEFAULT_ACTIVE_STATES);
255
289
  activeColor = signal("");
256
290
  activeBgColor = signal("");
257
291
  colorPickerMode: "text" | "bg" | undefined;
@@ -78,7 +78,7 @@ import { SdGapControl } from "../../layout/sd-gap.control";
78
78
  },
79
79
  })
80
80
  export class SdSelectItemControl<T> {
81
- protected readonly _parentControl = inject<SdSelectControl<T>>(
81
+ protected readonly _parentControl = inject<SdSelectControl<any, T>>(
82
82
  forwardRef(() => SdSelectControl),
83
83
  );
84
84
  private readonly _elRef = inject(ElementRef<HTMLElement>);
@@ -26,7 +26,10 @@ import { NgIcon } from "@ng-icons/core";
26
26
  import { tablerCaretDown } from "@ng-icons/tabler-icons";
27
27
  import { tabbable } from "tabbable";
28
28
 
29
- export type TSelectModeValue<T> = T | T[] | undefined;
29
+ export type TSelectModeValue<T> = {
30
+ multi: T[];
31
+ single: T;
32
+ };
30
33
 
31
34
  @Component({
32
35
  selector: "sd-select",
@@ -175,9 +178,9 @@ export type TSelectModeValue<T> = T | T[] | undefined;
175
178
  "[attr.data-sd-disabled]": "disabled()",
176
179
  },
177
180
  })
178
- export class SdSelectControl<T> {
179
- selectMode = input<"single" | "multi">("single");
180
- value = model<TSelectModeValue<T>>();
181
+ export class SdSelectControl<M extends "single" | "multi", T> {
182
+ selectMode = input("single" as M);
183
+ value = model<TSelectModeValue<any>[M]>();
181
184
  placeholder = input<string>();
182
185
  disabled = input(false, { transform: booleanAttribute });
183
186
  inline = input(false, { transform: booleanAttribute });
@@ -2,6 +2,7 @@ import {
2
2
  booleanAttribute,
3
3
  ChangeDetectionStrategy,
4
4
  Component,
5
+ DestroyRef,
5
6
  effect,
6
7
  ElementRef,
7
8
  inject,
@@ -87,6 +88,9 @@ import type { ISdResizeEvent } from "../../../core/plugins/events/sd-resize-even
87
88
  })
88
89
  export class SdDockControl {
89
90
  private readonly _elRef = inject(ElementRef<HTMLElement>);
91
+ private readonly _destroyRef = inject(DestroyRef);
92
+
93
+ private _dragCleanup: (() => void) | undefined;
90
94
 
91
95
  key = input<string>();
92
96
  position = input<"top" | "bottom" | "right" | "left">("top");
@@ -97,6 +101,10 @@ export class SdDockControl {
97
101
  private readonly _config = useSdSystemConfigResource<{ size?: string }>({ key: this.key });
98
102
 
99
103
  constructor() {
104
+ this._destroyRef.onDestroy(() => {
105
+ this._dragCleanup?.();
106
+ });
107
+
100
108
  effect(() => {
101
109
  const conf = this._config.value();
102
110
  if (this.resizable() && conf && conf.size != null) {
@@ -151,8 +159,7 @@ export class SdDockControl {
151
159
  e.stopPropagation();
152
160
  e.preventDefault();
153
161
 
154
- document.removeEventListener("mousemove", doDrag);
155
- document.removeEventListener("mouseup", stopDrag);
162
+ this._dragCleanup?.();
156
163
 
157
164
  if (this.key() != null) {
158
165
  const newConf: { size?: string } = {};
@@ -167,5 +174,11 @@ export class SdDockControl {
167
174
 
168
175
  document.addEventListener("mousemove", doDrag);
169
176
  document.addEventListener("mouseup", stopDrag);
177
+
178
+ this._dragCleanup = () => {
179
+ document.removeEventListener("mousemove", doDrag);
180
+ document.removeEventListener("mouseup", stopDrag);
181
+ this._dragCleanup = undefined;
182
+ };
170
183
  }
171
184
  }
@@ -136,9 +136,10 @@ export class SdKanbanLaneControl<L, T> implements ISdKanbanDropTarget<L, T> {
136
136
  toolTplRef = contentChild<any, TemplateRef<void>>("toolTpl", { read: TemplateRef });
137
137
  titleTplRef = contentChild<any, TemplateRef<void>>("titleTpl", { read: TemplateRef });
138
138
 
139
- isAllSelected = computed(() =>
140
- this.kanbanControls().length > 0 && this.kanbanControls().every((ctrl) => ctrl.selected()),
141
- );
139
+ isAllSelected = computed(() => {
140
+ const selectableControls = this.kanbanControls().filter((ctrl) => ctrl.selectable());
141
+ return selectableControls.length > 0 && selectableControls.every((ctrl) => ctrl.selected());
142
+ });
142
143
 
143
144
  dragKanban = computed(() => this._boardControl.dragKanban());
144
145
 
@@ -161,6 +162,7 @@ export class SdKanbanLaneControl<L, T> implements ISdKanbanDropTarget<L, T> {
161
162
  this._boardControl.selectedValues.update((v) => {
162
163
  const r = [...v];
163
164
  for (const ctrl of this.kanbanControls()) {
165
+ if (!ctrl.selectable()) continue;
164
166
  if (ctrl.value() == null) continue;
165
167
  if (!v.includes(ctrl.value()!)) {
166
168
  r.push(ctrl.value()!);
@@ -171,6 +173,7 @@ export class SdKanbanLaneControl<L, T> implements ISdKanbanDropTarget<L, T> {
171
173
  } else {
172
174
  this._boardControl.selectedValues.update((v) => {
173
175
  const kanbanValues = this.kanbanControls()
176
+ .filter((ctrl) => ctrl.selectable())
174
177
  .map((ctrl) => ctrl.value())
175
178
  .filter((v2): v2 is T => v2 != null);
176
179
  const result = v.filter((item) => !kanbanValues.includes(item));
@@ -67,7 +67,7 @@ export class SdPaginationControl {
67
67
  visiblePageCount = input(10, { transform: numberAttribute });
68
68
 
69
69
  private readonly groupIndex = computed(() => {
70
- return Math.floor(this.currentPage() / this.visiblePageCount());
70
+ return Math.floor(this.currentPage() / Math.max(this.visiblePageCount(), 1));
71
71
  });
72
72
 
73
73
  hasPrev = computed(() => {
@@ -82,7 +82,7 @@ export class SdPaginationControl {
82
82
  if (totalPageCount === 0) {
83
83
  return false;
84
84
  }
85
- const lastGroupIndex = Math.floor((totalPageCount - 1) / this.visiblePageCount());
85
+ const lastGroupIndex = Math.floor((totalPageCount - 1) / Math.max(this.visiblePageCount(), 1));
86
86
  return this.groupIndex() < lastGroupIndex;
87
87
  });
88
88
 
@@ -112,7 +112,8 @@ export class SdPaginationControl {
112
112
  }
113
113
 
114
114
  goToPrevGroup(): void {
115
- this.currentPage.set((this.groupIndex() - 1) * this.visiblePageCount());
115
+ if (!this.hasPrev()) return;
116
+ this.currentPage.set((this.groupIndex() - 1) * Math.max(this.visiblePageCount(), 1));
116
117
  }
117
118
 
118
119
  goToFirst(): void {
@@ -120,6 +121,7 @@ export class SdPaginationControl {
120
121
  }
121
122
 
122
123
  goToLast(): void {
124
+ if (this.totalPageCount() === 0) return;
123
125
  this.currentPage.set(this.totalPageCount() - 1);
124
126
  }
125
127
  }
@@ -87,6 +87,6 @@ export class SdSidebarContainerControl {
87
87
  }
88
88
 
89
89
  onBackdropClick(): void {
90
- this.toggle.update((v) => !v);
90
+ this.toggle.set(false);
91
91
  }
92
92
  }
@@ -102,7 +102,7 @@ export class SdDropdownPopupControl {
102
102
  const divEl = el.firstElementChild as HTMLElement;
103
103
 
104
104
  if (divEl.clientHeight > 300) {
105
- el.style.height = "18.75rem";
105
+ el.style.height = "300px";
106
106
  } else {
107
107
  el.style.height = "";
108
108
  }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  ChangeDetectionStrategy,
3
3
  Component,
4
+ DestroyRef,
4
5
  effect,
5
6
  ElementRef,
6
7
  inject,
@@ -62,6 +63,7 @@ export class SdModalControl {
62
63
  private readonly _elRef = inject(ElementRef<HTMLElement>);
63
64
  private readonly _activatedModal = inject(SdActivatedModalProvider, { optional: true });
64
65
  private readonly _systemConfig = inject(SdSystemConfigProvider, { optional: true });
66
+ private readonly _destroyRef = inject(DestroyRef);
65
67
 
66
68
  open = model(false);
67
69
  key = input<string | undefined>(undefined);
@@ -147,6 +149,11 @@ export class SdModalControl {
147
149
  void this._saveConfig();
148
150
  }
149
151
  };
152
+
153
+ this._destroyRef.onDestroy(() => {
154
+ document.removeEventListener("mousemove", this._onDocumentMouseMove);
155
+ document.removeEventListener("mouseup", this._onDocumentMouseUp);
156
+ });
150
157
  }
151
158
 
152
159
  onResizeMouseDown(event: MouseEvent, dir: string): void {
@@ -262,6 +269,8 @@ export class SdModalControl {
262
269
  maxZ = z;
263
270
  }
264
271
  }
272
+ const currentZ = parseInt(hostEl.style.zIndex, 10);
273
+ if (currentZ >= maxZ) return;
265
274
  hostEl.style.zIndex = String(maxZ + 1);
266
275
  }
267
276