@simplysm/angular 14.0.8 → 14.0.10

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 (272) 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.map +1 -1
  36. package/dist/core/utils/setSafeStyle.d.ts.map +1 -1
  37. package/dist/core/utils/setups/setupBgTheme.d.ts.map +1 -1
  38. package/dist/core/utils/setups/setupCanDeactivate.d.ts.map +1 -1
  39. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.d.ts +9 -0
  40. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.d.ts.map +1 -0
  41. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.js +20 -0
  42. package/dist/core/utils/setups/setupCumulateSelectedKeys.d.ts +9 -0
  43. package/dist/core/utils/setups/setupCumulateSelectedKeys.d.ts.map +1 -0
  44. package/dist/core/utils/setups/setupCumulateSelectedKeys.js +27 -0
  45. package/dist/core/utils/setups/setupInvalid.d.ts.map +1 -1
  46. package/dist/core/utils/setups/setupModelHook.d.ts.map +1 -1
  47. package/dist/core/utils/setups/setupRevealOnShow.d.ts.map +1 -1
  48. package/dist/core/utils/setups/setupRipple.d.ts.map +1 -1
  49. package/dist/core/utils/useCurrentPageCodeSignal.d.ts.map +1 -1
  50. package/dist/core/utils/useExpandingManager.d.ts.map +1 -1
  51. package/dist/core/utils/useFullPageCodeSignal.d.ts.map +1 -1
  52. package/dist/core/utils/useSdSystemConfigResource.d.ts.map +1 -1
  53. package/dist/core/utils/useSelectionManager.d.ts.map +1 -1
  54. package/dist/core/utils/useSortingManager.d.ts.map +1 -1
  55. package/dist/core/utils/useViewTitleSignal.d.ts.map +1 -1
  56. package/dist/core/utils/useViewTypeSignal.d.ts.map +1 -1
  57. package/dist/features/address/sd-address-search.modal.d.ts +19 -0
  58. package/dist/features/address/sd-address-search.modal.d.ts.map +1 -0
  59. package/dist/features/address/sd-address-search.modal.js +88 -0
  60. package/dist/features/base/sd-base-container.control.d.ts.map +1 -1
  61. package/dist/features/base/sd-base-container.control.js +1 -1
  62. package/dist/features/data-view/sd-data-detail.control.d.ts +70 -0
  63. package/dist/features/data-view/sd-data-detail.control.d.ts.map +1 -0
  64. package/dist/features/data-view/sd-data-detail.control.js +606 -0
  65. package/dist/features/data-view/sd-data-select-button.control.d.ts +35 -0
  66. package/dist/features/data-view/sd-data-select-button.control.d.ts.map +1 -0
  67. package/dist/features/data-view/sd-data-select-button.control.js +219 -0
  68. package/dist/features/data-view/sd-data-sheet-column.directive.d.ts +8 -0
  69. package/dist/features/data-view/sd-data-sheet-column.directive.d.ts.map +1 -0
  70. package/dist/features/data-view/sd-data-sheet-column.directive.js +15 -0
  71. package/dist/features/data-view/sd-data-sheet.control.d.ts +131 -0
  72. package/dist/features/data-view/sd-data-sheet.control.d.ts.map +1 -0
  73. package/dist/features/data-view/sd-data-sheet.control.js +1152 -0
  74. package/dist/features/shared-data/sd-shared-data-select-button.control.d.ts +16 -0
  75. package/dist/features/shared-data/sd-shared-data-select-button.control.d.ts.map +1 -0
  76. package/dist/features/shared-data/sd-shared-data-select-button.control.js +66 -0
  77. package/dist/features/shared-data/sd-shared-data-select-list.control.d.ts +33 -0
  78. package/dist/features/shared-data/sd-shared-data-select-list.control.d.ts.map +1 -0
  79. package/dist/features/shared-data/sd-shared-data-select-list.control.js +346 -0
  80. package/dist/features/shared-data/sd-shared-data-select.control.d.ts +50 -0
  81. package/dist/features/shared-data/sd-shared-data-select.control.d.ts.map +1 -0
  82. package/dist/features/shared-data/sd-shared-data-select.control.js +425 -0
  83. package/dist/index.d.ts +11 -1
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +12 -0
  86. package/dist/ui/data/list/sd-list-item.control.d.ts +3 -1
  87. package/dist/ui/data/list/sd-list-item.control.d.ts.map +1 -1
  88. package/dist/ui/data/list/sd-list-item.control.js +8 -4
  89. package/dist/ui/data/list/sd-list.control.d.ts.map +1 -1
  90. package/dist/ui/data/list/sd-list.control.js +1 -1
  91. package/dist/ui/data/sheet/sd-sheet-column.directive.d.ts +8 -1
  92. package/dist/ui/data/sheet/sd-sheet-column.directive.d.ts.map +1 -1
  93. package/dist/ui/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
  94. package/dist/ui/data/sheet/sd-sheet-config.modal.js +1 -1
  95. package/dist/ui/data/sheet/sd-sheet.control.d.ts +4 -4
  96. package/dist/ui/data/sheet/sd-sheet.control.d.ts.map +1 -1
  97. package/dist/ui/data/sheet/sd-sheet.control.js +3 -4
  98. package/dist/ui/data/sheet/types.d.ts.map +1 -1
  99. package/dist/ui/data/sheet/useSheetCellAgent.d.ts.map +1 -1
  100. package/dist/ui/data/sheet/useSheetColumnFixing.d.ts.map +1 -1
  101. package/dist/ui/data/sheet/useSheetDomAccessor.d.ts.map +1 -1
  102. package/dist/ui/data/sheet/useSheetLayoutEngine.d.ts.map +1 -1
  103. package/dist/ui/form/button/sd-additional-button.control.d.ts.map +1 -1
  104. package/dist/ui/form/button/sd-additional-button.control.js +1 -1
  105. package/dist/ui/form/button/sd-anchor.control.d.ts.map +1 -1
  106. package/dist/ui/form/button/sd-anchor.control.js +1 -1
  107. package/dist/ui/form/button/sd-button.control.d.ts.map +1 -1
  108. package/dist/ui/form/button/sd-button.control.js +1 -1
  109. package/dist/ui/form/button/sd-modal-select-button.control.d.ts +16 -18
  110. package/dist/ui/form/button/sd-modal-select-button.control.d.ts.map +1 -1
  111. package/dist/ui/form/button/sd-modal-select-button.control.js +22 -39
  112. package/dist/ui/form/checkbox/sd-checkbox-group-item.control.d.ts.map +1 -1
  113. package/dist/ui/form/checkbox/sd-checkbox-group-item.control.js +1 -1
  114. package/dist/ui/form/checkbox/sd-checkbox-group.control.d.ts.map +1 -1
  115. package/dist/ui/form/checkbox/sd-checkbox-group.control.js +1 -1
  116. package/dist/ui/form/checkbox/sd-checkbox.control.d.ts.map +1 -1
  117. package/dist/ui/form/checkbox/sd-checkbox.control.js +1 -1
  118. package/dist/ui/form/checkbox/sd-switch.control.d.ts.map +1 -1
  119. package/dist/ui/form/checkbox/sd-switch.control.js +1 -1
  120. package/dist/ui/form/choice/sd-state-preset.control.d.ts.map +1 -1
  121. package/dist/ui/form/choice/sd-state-preset.control.js +1 -1
  122. package/dist/ui/form/editor/sd-tiptap-editor.control.d.ts +18 -1
  123. package/dist/ui/form/editor/sd-tiptap-editor.control.d.ts.map +1 -1
  124. package/dist/ui/form/editor/sd-tiptap-editor.control.js +18 -2
  125. package/dist/ui/form/input/sd-date-range.picker.d.ts.map +1 -1
  126. package/dist/ui/form/input/sd-date-range.picker.js +1 -1
  127. package/dist/ui/form/input/sd-numpad.control.d.ts.map +1 -1
  128. package/dist/ui/form/input/sd-numpad.control.js +1 -1
  129. package/dist/ui/form/input/sd-range.control.d.ts.map +1 -1
  130. package/dist/ui/form/input/sd-range.control.js +1 -1
  131. package/dist/ui/form/input/sd-textarea.control.d.ts.map +1 -1
  132. package/dist/ui/form/input/sd-textarea.control.js +1 -1
  133. package/dist/ui/form/input/sd-textfield-type-handlers.d.ts.map +1 -1
  134. package/dist/ui/form/input/sd-textfield.control.d.ts.map +1 -1
  135. package/dist/ui/form/input/sd-textfield.control.js +1 -1
  136. package/dist/ui/form/sd-form.control.d.ts.map +1 -1
  137. package/dist/ui/form/sd-form.control.js +1 -1
  138. package/dist/ui/form/select/sd-select-button.control.d.ts.map +1 -1
  139. package/dist/ui/form/select/sd-select-button.control.js +1 -1
  140. package/dist/ui/form/select/sd-select-item.control.d.ts +1 -1
  141. package/dist/ui/form/select/sd-select-item.control.d.ts.map +1 -1
  142. package/dist/ui/form/select/sd-select-item.control.js +1 -1
  143. package/dist/ui/form/select/sd-select.control.d.ts +9 -6
  144. package/dist/ui/form/select/sd-select.control.d.ts.map +1 -1
  145. package/dist/ui/form/select/sd-select.control.js +1 -1
  146. package/dist/ui/layout/dock/sd-dock-container.control.d.ts.map +1 -1
  147. package/dist/ui/layout/dock/sd-dock-container.control.js +1 -1
  148. package/dist/ui/layout/dock/sd-dock.control.d.ts.map +1 -1
  149. package/dist/ui/layout/dock/sd-dock.control.js +1 -1
  150. package/dist/ui/layout/kanban/sd-kanban-board.control.d.ts.map +1 -1
  151. package/dist/ui/layout/kanban/sd-kanban-board.control.js +1 -1
  152. package/dist/ui/layout/kanban/sd-kanban-lane.control.d.ts.map +1 -1
  153. package/dist/ui/layout/kanban/sd-kanban-lane.control.js +1 -1
  154. package/dist/ui/layout/kanban/sd-kanban.control.d.ts.map +1 -1
  155. package/dist/ui/layout/kanban/sd-kanban.control.js +1 -1
  156. package/dist/ui/layout/sd-card.directive.d.ts.map +1 -1
  157. package/dist/ui/layout/sd-gap.control.d.ts.map +1 -1
  158. package/dist/ui/layout/sd-gap.control.js +1 -1
  159. package/dist/ui/layout/sd-pane.directive.d.ts.map +1 -1
  160. package/dist/ui/layout/view/sd-view-item.control.d.ts.map +1 -1
  161. package/dist/ui/layout/view/sd-view-item.control.js +1 -1
  162. package/dist/ui/layout/view/sd-view.control.d.ts.map +1 -1
  163. package/dist/ui/layout/view/sd-view.control.js +1 -1
  164. package/dist/ui/navigation/collapse/sd-collapse-icon.control.d.ts.map +1 -1
  165. package/dist/ui/navigation/collapse/sd-collapse-icon.control.js +1 -1
  166. package/dist/ui/navigation/collapse/sd-collapse.control.d.ts.map +1 -1
  167. package/dist/ui/navigation/collapse/sd-collapse.control.js +1 -1
  168. package/dist/ui/navigation/menu-utils.d.ts.map +1 -1
  169. package/dist/ui/navigation/pagination/sd-pagination.control.d.ts.map +1 -1
  170. package/dist/ui/navigation/pagination/sd-pagination.control.js +1 -1
  171. package/dist/ui/navigation/sidebar/sd-sidebar-container.control.d.ts.map +1 -1
  172. package/dist/ui/navigation/sidebar/sd-sidebar-container.control.js +1 -1
  173. package/dist/ui/navigation/sidebar/sd-sidebar-menu.control.d.ts.map +1 -1
  174. package/dist/ui/navigation/sidebar/sd-sidebar-menu.control.js +1 -1
  175. package/dist/ui/navigation/sidebar/sd-sidebar-user.control.d.ts.map +1 -1
  176. package/dist/ui/navigation/sidebar/sd-sidebar-user.control.js +1 -1
  177. package/dist/ui/navigation/sidebar/sd-sidebar.control.d.ts.map +1 -1
  178. package/dist/ui/navigation/sidebar/sd-sidebar.control.js +1 -1
  179. package/dist/ui/navigation/tab/sd-tab-item.control.d.ts.map +1 -1
  180. package/dist/ui/navigation/tab/sd-tab-item.control.js +1 -1
  181. package/dist/ui/navigation/tab/sd-tab.control.d.ts.map +1 -1
  182. package/dist/ui/navigation/tab/sd-tab.control.js +1 -1
  183. package/dist/ui/navigation/tab/sd-tabview-item.control.d.ts.map +1 -1
  184. package/dist/ui/navigation/tab/sd-tabview-item.control.js +1 -1
  185. package/dist/ui/navigation/tab/sd-tabview.control.d.ts.map +1 -1
  186. package/dist/ui/navigation/tab/sd-tabview.control.js +1 -1
  187. package/dist/ui/navigation/topbar/sd-topbar-container.control.d.ts.map +1 -1
  188. package/dist/ui/navigation/topbar/sd-topbar-container.control.js +1 -1
  189. package/dist/ui/navigation/topbar/sd-topbar-menu.control.d.ts.map +1 -1
  190. package/dist/ui/navigation/topbar/sd-topbar-menu.control.js +1 -1
  191. package/dist/ui/navigation/topbar/sd-topbar-user.control.d.ts.map +1 -1
  192. package/dist/ui/navigation/topbar/sd-topbar-user.control.js +1 -1
  193. package/dist/ui/navigation/topbar/sd-topbar.control.d.ts.map +1 -1
  194. package/dist/ui/navigation/topbar/sd-topbar.control.js +1 -1
  195. package/dist/ui/overlay/busy/sd-busy-container.control.d.ts.map +1 -1
  196. package/dist/ui/overlay/busy/sd-busy-container.control.js +1 -1
  197. package/dist/ui/overlay/busy/sd-busy.provider.d.ts.map +1 -1
  198. package/dist/ui/overlay/dropdown/sd-dropdown-popup.control.d.ts.map +1 -1
  199. package/dist/ui/overlay/dropdown/sd-dropdown-popup.control.js +1 -1
  200. package/dist/ui/overlay/dropdown/sd-dropdown.control.d.ts.map +1 -1
  201. package/dist/ui/overlay/dropdown/sd-dropdown.control.js +1 -1
  202. package/dist/ui/overlay/modal/sd-confirm-modal.control.d.ts.map +1 -1
  203. package/dist/ui/overlay/modal/sd-confirm-modal.control.js +1 -1
  204. package/dist/ui/overlay/modal/sd-modal.control.d.ts.map +1 -1
  205. package/dist/ui/overlay/modal/sd-modal.control.js +1 -1
  206. package/dist/ui/overlay/modal/sd-modal.provider.d.ts +9 -3
  207. package/dist/ui/overlay/modal/sd-modal.provider.d.ts.map +1 -1
  208. package/dist/ui/overlay/modal/sd-prompt-modal.control.d.ts.map +1 -1
  209. package/dist/ui/overlay/modal/sd-prompt-modal.control.js +1 -1
  210. package/dist/ui/overlay/toast/sd-toast-container.control.d.ts.map +1 -1
  211. package/dist/ui/overlay/toast/sd-toast-container.control.js +1 -1
  212. package/dist/ui/overlay/toast/sd-toast.control.d.ts.map +1 -1
  213. package/dist/ui/overlay/toast/sd-toast.control.js +1 -1
  214. package/dist/ui/overlay/toast/sd-toast.provider.d.ts.map +1 -1
  215. package/dist/ui/visual/sd-barcode.control.d.ts.map +1 -1
  216. package/dist/ui/visual/sd-barcode.control.js +1 -1
  217. package/dist/ui/visual/sd-calendar.control.d.ts.map +1 -1
  218. package/dist/ui/visual/sd-calendar.control.js +1 -1
  219. package/dist/ui/visual/sd-echarts.control.d.ts.map +1 -1
  220. package/dist/ui/visual/sd-echarts.control.js +1 -1
  221. package/dist/ui/visual/sd-label.control.d.ts.map +1 -1
  222. package/dist/ui/visual/sd-label.control.js +1 -1
  223. package/dist/ui/visual/sd-note.control.d.ts.map +1 -1
  224. package/dist/ui/visual/sd-note.control.js +1 -1
  225. package/dist/ui/visual/sd-progress.control.d.ts.map +1 -1
  226. package/dist/ui/visual/sd-progress.control.js +1 -1
  227. package/docs/core.md +877 -0
  228. package/docs/features.md +377 -0
  229. package/docs/styling.md +309 -0
  230. package/docs/ui-data.md +233 -0
  231. package/docs/ui-form.md +421 -0
  232. package/docs/ui-layout.md +216 -0
  233. package/docs/ui-navigation.md +279 -0
  234. package/docs/ui-overlay.md +330 -0
  235. package/docs/ui-visual.md +131 -0
  236. package/package.json +5 -5
  237. package/src/core/providers/sd-print.provider.ts +10 -2
  238. package/src/core/providers/sd-shared-data.provider.ts +3 -0
  239. package/src/core/utils/TDirectiveInputSignals.ts +5 -0
  240. package/src/core/utils/setups/setupCloserWhenSingleSelectionChange.ts +29 -0
  241. package/src/core/utils/setups/setupCumulateSelectedKeys.ts +38 -0
  242. package/src/features/address/sd-address-search.modal.ts +119 -0
  243. package/src/features/data-view/sd-data-detail.control.ts +394 -0
  244. package/src/features/data-view/sd-data-select-button.control.ts +210 -0
  245. package/src/features/data-view/sd-data-sheet-column.directive.ts +10 -0
  246. package/src/features/data-view/sd-data-sheet.control.ts +850 -0
  247. package/src/features/shared-data/sd-shared-data-select-button.control.ts +64 -0
  248. package/src/features/shared-data/sd-shared-data-select-list.control.ts +245 -0
  249. package/src/features/shared-data/sd-shared-data-select.control.ts +364 -0
  250. package/src/index.ts +35 -1
  251. package/src/scss.d.ts +5 -0
  252. package/src/ui/data/list/sd-list-item.control.ts +3 -1
  253. package/src/ui/data/sheet/sd-sheet-column.directive.ts +9 -1
  254. package/src/ui/data/sheet/sd-sheet.control.ts +6 -6
  255. package/src/ui/form/button/sd-modal-select-button.control.ts +41 -59
  256. package/src/ui/form/editor/sd-tiptap-editor.control.ts +35 -1
  257. package/src/ui/form/select/sd-select-item.control.ts +1 -1
  258. package/src/ui/form/select/sd-select.control.ts +7 -4
  259. package/src/ui/overlay/modal/sd-modal.provider.ts +15 -3
  260. package/docs/commons-and-configuration.md +0 -34
  261. package/docs/data-display-components.md +0 -146
  262. package/docs/directives.md +0 -158
  263. package/docs/event-plugins.md +0 -109
  264. package/docs/form-components.md +0 -362
  265. package/docs/hooks-and-utilities.md +0 -175
  266. package/docs/layout-components.md +0 -140
  267. package/docs/navigation-components.md +0 -200
  268. package/docs/overlay-components.md +0 -193
  269. package/docs/pipes.md +0 -25
  270. package/docs/providers.md +0 -448
  271. package/docs/setup-functions.md +0 -66
  272. package/docs/visual-components.md +0 -89
@@ -0,0 +1,216 @@
1
+ # UI Layout
2
+
3
+ Layout components for structuring page content: dock panels, panes, views, cards, and kanban boards.
4
+
5
+ ## `SdDockContainerControl`
6
+
7
+ Flex container that positions child `SdDockControl` panels around a central content area.
8
+
9
+ ```typescript
10
+ @Component({ selector: "sd-dock-container" })
11
+ class SdDockContainerControl {
12
+ contentClass = input<string>();
13
+ }
14
+ ```
15
+
16
+ | Input | Type | Description |
17
+ |-------|------|-------------|
18
+ | `contentClass` | `string \| undefined` | CSS class applied to the inner content div |
19
+
20
+ ## `SdDockControl`
21
+
22
+ Dockable panel that attaches to a side of `SdDockContainerControl`. Supports resizing with optional config persistence.
23
+
24
+ ```typescript
25
+ @Component({ selector: "sd-dock" })
26
+ class SdDockControl {
27
+ key = input<string>();
28
+ position = input<"top" | "bottom" | "right" | "left">("top");
29
+ resizable = input(false, { transform: booleanAttribute });
30
+ size = signal(0);
31
+ }
32
+ ```
33
+
34
+ | Input | Type | Default | Description |
35
+ |-------|------|---------|-------------|
36
+ | `key` | `string \| undefined` | — | Persistence key for resize state |
37
+ | `position` | `"top" \| "bottom" \| "right" \| "left"` | `"top"` | Dock position |
38
+ | `resizable` | `boolean` | `false` | Enable drag-to-resize |
39
+
40
+ ## `SdPaneDirective`
41
+
42
+ CSS utility directive that makes the host element fill its container with scrollable overflow.
43
+
44
+ ```typescript
45
+ @Directive({ selector: "sd-pane, [sd-pane]" })
46
+ class SdPaneDirective { }
47
+ ```
48
+
49
+ Applies `class="fill"` and `style="display: block"`.
50
+
51
+ ## `SdGapControl`
52
+
53
+ Empty spacer element with configurable width and/or height.
54
+
55
+ ```typescript
56
+ @Component({ selector: "sd-gap" })
57
+ class SdGapControl {
58
+ height = input<"xxs" | "xs" | "sm" | "default" | "lg" | "xl" | "xxl">();
59
+ heightPx = input<number>();
60
+ width = input<"xxs" | "xs" | "sm" | "default" | "lg" | "xl" | "xxl">();
61
+ widthPx = input<number>();
62
+ widthEm = input<number>();
63
+ }
64
+ ```
65
+
66
+ | Input | Type | Description |
67
+ |-------|------|-------------|
68
+ | `height` | size token \| undefined | Named vertical gap |
69
+ | `heightPx` | `number \| undefined` | Explicit height in px |
70
+ | `width` | size token \| undefined | Named horizontal gap |
71
+ | `widthPx` | `number \| undefined` | Explicit width in px |
72
+ | `widthEm` | `number \| undefined` | Explicit width in em |
73
+
74
+ ## `SdViewControl`
75
+
76
+ Container that shows one child `SdViewItemControl` at a time based on a matched value.
77
+
78
+ ```typescript
79
+ @Component({ selector: "sd-view" })
80
+ class SdViewControl {
81
+ value = input<any>();
82
+ fill = input(false, { transform: booleanAttribute });
83
+ }
84
+ ```
85
+
86
+ | Input | Type | Default | Description |
87
+ |-------|------|---------|-------------|
88
+ | `value` | `any` | — | Currently active view value |
89
+ | `fill` | `boolean` | `false` | When true, sets `height: 100%` |
90
+
91
+ ## `SdViewItemControl`
92
+
93
+ Content panel shown only when its `value` matches the parent `SdViewControl.value`.
94
+
95
+ ```typescript
96
+ @Component({ selector: "sd-view-item" })
97
+ class SdViewItemControl {
98
+ value = input<any>();
99
+ isSelected = computed(/* parent.value() === this.value() */);
100
+ }
101
+ ```
102
+
103
+ ## `SdCardDirective`
104
+
105
+ CSS marker directive that applies the `.card` class (background, border-radius, shadow, hover elevation).
106
+
107
+ ```typescript
108
+ @Directive({ selector: "sd-card, [sd-card]" })
109
+ class SdCardDirective { }
110
+ ```
111
+
112
+ ## `SdKanbanBoardControl`
113
+
114
+ Container for kanban lanes. Manages drag-and-drop state and multi-selection.
115
+
116
+ ```typescript
117
+ @Component({ selector: "sd-kanban-board" })
118
+ class SdKanbanBoardControl<L, T> {
119
+ selectedValues = model<T[]>([]);
120
+ drop = output<ISdKanbanBoardDropInfo<L, T>>();
121
+ dragKanban = signal<ISdKanbanDragRef<L, T> | undefined>(undefined);
122
+ }
123
+ ```
124
+
125
+ | Model/Output | Type | Description |
126
+ |--------------|------|-------------|
127
+ | `selectedValues` | `T[]` | Two-way bound selected kanban card values |
128
+ | `drop` | `ISdKanbanBoardDropInfo<L, T>` | Emitted when a card is dropped |
129
+
130
+ ## `ISdKanbanBoardDropInfo`
131
+
132
+ ```typescript
133
+ interface ISdKanbanBoardDropInfo<L, T> {
134
+ sourceKanbanValue?: T;
135
+ targetLaneValue?: L;
136
+ targetKanbanValue?: T;
137
+ }
138
+ ```
139
+
140
+ | Field | Type | Description |
141
+ |-------|------|-------------|
142
+ | `sourceKanbanValue` | `T \| undefined` | Value of the dragged card |
143
+ | `targetLaneValue` | `L \| undefined` | Value of the target lane |
144
+ | `targetKanbanValue` | `T \| undefined` | Value of the card dropped before |
145
+
146
+ ## `ISdKanbanDragRef`
147
+
148
+ ```typescript
149
+ interface ISdKanbanDragRef<_L, T> {
150
+ value(): T | undefined;
151
+ heightOnDrag(): number;
152
+ }
153
+ ```
154
+
155
+ | Field | Type | Description |
156
+ |-------|------|-------------|
157
+ | `value` | `() => T \| undefined` | Dragged card value |
158
+ | `heightOnDrag` | `() => number` | Card height at drag start (for placeholder) |
159
+
160
+ ## `ISdKanbanDropTarget`
161
+
162
+ ```typescript
163
+ interface ISdKanbanDropTarget<L, T> {
164
+ targetLaneValue(): L | undefined;
165
+ targetKanbanValue?(): T | undefined;
166
+ }
167
+ ```
168
+
169
+ | Field | Type | Description |
170
+ |-------|------|-------------|
171
+ | `targetLaneValue` | `() => L \| undefined` | Lane value of drop target |
172
+ | `targetKanbanValue` | `(() => T \| undefined) \| undefined` | Card value if dropping before a card |
173
+
174
+ ## `SdKanbanControl`
175
+
176
+ Individual kanban card. Supports drag-and-drop and shift-click selection. Implements `ISdKanbanDragRef` and `ISdKanbanDropTarget`.
177
+
178
+ ```typescript
179
+ @Component({ selector: "sd-kanban" })
180
+ class SdKanbanControl<L, T> implements ISdKanbanDragRef<L, T>, ISdKanbanDropTarget<L, T> {
181
+ value = input<T>();
182
+ selectable = input(false, { transform: booleanAttribute });
183
+ draggable = input(false, { transform: booleanAttribute });
184
+ contentClass = input<string>();
185
+ }
186
+ ```
187
+
188
+ | Input | Type | Default | Description |
189
+ |-------|------|---------|-------------|
190
+ | `value` | `T \| undefined` | — | Card identity value |
191
+ | `selectable` | `boolean` | `false` | Enable shift-click selection |
192
+ | `draggable` | `boolean` | `false` | Enable drag-and-drop |
193
+ | `contentClass` | `string \| undefined` | — | CSS class for inner card |
194
+
195
+ ## `SdKanbanLaneControl`
196
+
197
+ Kanban lane (column) that holds kanban cards. Implements `ISdKanbanDropTarget`. Supports collapse, select-all, and custom title/tool templates.
198
+
199
+ ```typescript
200
+ @Component({ selector: "sd-kanban-lane" })
201
+ class SdKanbanLaneControl<L, T> implements ISdKanbanDropTarget<L, T> {
202
+ value = input<L>();
203
+ busy = input(false, { transform: booleanAttribute });
204
+ useCollapse = input(false, { transform: booleanAttribute });
205
+ collapse = model(false);
206
+ }
207
+ ```
208
+
209
+ | Input | Type | Default | Description |
210
+ |-------|------|---------|-------------|
211
+ | `value` | `L \| undefined` | — | Lane identity value |
212
+ | `busy` | `boolean` | `false` | Shows busy indicator |
213
+ | `useCollapse` | `boolean` | `false` | Enables collapse toggle |
214
+ | `collapse` | `boolean` | `false` | Two-way collapsed state |
215
+
216
+ Content templates: `#toolTpl`, `#titleTpl`.
@@ -0,0 +1,279 @@
1
+ # UI Navigation
2
+
3
+ Navigation components: collapse, tabs, pagination, sidebar, and topbar.
4
+
5
+ ## `SdCollapseControl`
6
+
7
+ Animated collapse/expand container using height-based margin transition.
8
+
9
+ ```typescript
10
+ @Component({ selector: "sd-collapse" })
11
+ class SdCollapseControl {
12
+ open = input(false, { transform: booleanAttribute });
13
+ }
14
+ ```
15
+
16
+ | Input | Type | Default | Description |
17
+ |-------|------|---------|-------------|
18
+ | `open` | `boolean` | `false` | Whether content is expanded |
19
+
20
+ ## `SdCollapseIconControl`
21
+
22
+ Animated chevron icon that rotates when the associated collapse is open.
23
+
24
+ ```typescript
25
+ @Component({ selector: "sd-collapse-icon" })
26
+ class SdCollapseIconControl {
27
+ open = input(false, { transform: booleanAttribute });
28
+ openRotate = input(90, { transform: numberAttribute });
29
+ }
30
+ ```
31
+
32
+ | Input | Type | Default | Description |
33
+ |-------|------|---------|-------------|
34
+ | `open` | `boolean` | `false` | Rotation active state |
35
+ | `openRotate` | `number` | `90` | Degrees to rotate when open |
36
+
37
+ ## `SdTabControl`
38
+
39
+ Tab bar container. Manages the selected tab value.
40
+
41
+ ```typescript
42
+ @Component({ selector: "sd-tab" })
43
+ class SdTabControl {
44
+ value = model<any>();
45
+ }
46
+ ```
47
+
48
+ ## `SdTabItemControl`
49
+
50
+ Individual tab button. Must be a child of `SdTabControl`.
51
+
52
+ ```typescript
53
+ @Component({ selector: "sd-tab-item" })
54
+ class SdTabItemControl {
55
+ value = input<any>();
56
+ isSelected = computed(/* parent.value() === this.value() */);
57
+ }
58
+ ```
59
+
60
+ ## `SdTabviewControl`
61
+
62
+ Combined tab bar + content panel container. Builds tabs from projected `SdTabviewItemControl` children.
63
+
64
+ ```typescript
65
+ @Component({ selector: "sd-tabview" })
66
+ class SdTabviewControl<T> {
67
+ value = model<T | undefined>();
68
+ }
69
+ ```
70
+
71
+ ## `SdTabviewItemControl`
72
+
73
+ Content panel for a single tab within `SdTabviewControl`. Hidden unless selected.
74
+
75
+ ```typescript
76
+ @Component({ selector: "sd-tabview-item" })
77
+ class SdTabviewItemControl<T> {
78
+ value = input.required<T>();
79
+ header = input<string>();
80
+ isSelected = computed(/* parent.value() === this.value() */);
81
+ }
82
+ ```
83
+
84
+ | Input | Type | Description |
85
+ |-------|------|-------------|
86
+ | `value` | `T` | Tab identity value (required) |
87
+ | `header` | `string \| undefined` | Tab bar label (falls back to `value`) |
88
+
89
+ ## `SdPaginationControl`
90
+
91
+ Pagination bar with first/last/prev-group/next-group navigation.
92
+
93
+ ```typescript
94
+ @Component({ selector: "sd-pagination" })
95
+ class SdPaginationControl {
96
+ currentPage = model(0);
97
+ totalPageCount = input(0, { transform: numberAttribute });
98
+ visiblePageCount = input(10, { transform: numberAttribute });
99
+
100
+ hasPrev: Signal<boolean>;
101
+ hasNext: Signal<boolean>;
102
+ displayPages: Signal<number[]>;
103
+
104
+ goToPage(page: number): void;
105
+ goToNextGroup(): void;
106
+ goToPrevGroup(): void;
107
+ goToFirst(): void;
108
+ goToLast(): void;
109
+ }
110
+ ```
111
+
112
+ | Input | Type | Default | Description |
113
+ |-------|------|---------|-------------|
114
+ | `currentPage` | `number` | `0` | Zero-based current page (two-way) |
115
+ | `totalPageCount` | `number` | `0` | Total number of pages |
116
+ | `visiblePageCount` | `number` | `10` | Max page buttons per group |
117
+
118
+ ## `SdSidebarContainerControl`
119
+
120
+ Layout wrapper for sidebar + main content. Manages sidebar toggle state; auto-closes on router `NavigationStart`.
121
+
122
+ ```typescript
123
+ @Component({ selector: "sd-sidebar-container" })
124
+ class SdSidebarContainerControl {
125
+ toggle: WritableSignal<boolean>;
126
+ }
127
+ ```
128
+
129
+ ## `SdSidebarControl`
130
+
131
+ The sidebar panel. Must be a child of `SdSidebarContainerControl`.
132
+
133
+ ```typescript
134
+ @Component({ selector: "sd-sidebar" })
135
+ class SdSidebarControl {
136
+ toggle: Signal<boolean>; // mirrors parent
137
+ }
138
+ ```
139
+
140
+ ## `SdSidebarMenuControl`
141
+
142
+ Recursive sidebar navigation menu. Supports accordion and flat layouts, router links, and icons.
143
+
144
+ ```typescript
145
+ @Component({ selector: "sd-sidebar-menu" })
146
+ class SdSidebarMenuControl {
147
+ menus = input<ISdSidebarMenu[]>([]);
148
+ layout = input<"accordion" | "flat">();
149
+ getMenuIsSelectedFn = input<(menu: ISdSidebarMenu) => boolean>();
150
+ }
151
+ ```
152
+
153
+ | Input | Type | Default | Description |
154
+ |-------|------|---------|-------------|
155
+ | `menus` | `ISdSidebarMenu[]` | `[]` | Menu items |
156
+ | `layout` | `"accordion" \| "flat" \| undefined` | auto | Flat when ≤3 root menus |
157
+ | `getMenuIsSelectedFn` | `((menu) => boolean) \| undefined` | — | Custom selection predicate |
158
+
159
+ ## `ISdSidebarMenu`
160
+
161
+ ```typescript
162
+ interface ISdSidebarMenu {
163
+ title: string;
164
+ codeChain: string[];
165
+ url?: string;
166
+ icon?: string;
167
+ children?: ISdSidebarMenu[];
168
+ }
169
+ ```
170
+
171
+ | Field | Type | Description |
172
+ |-------|------|-------------|
173
+ | `title` | `string` | Display text |
174
+ | `codeChain` | `string[]` | Hierarchical code path for router link |
175
+ | `url` | `string \| undefined` | External URL (opens in new tab) |
176
+ | `icon` | `string \| undefined` | Icon SVG string |
177
+ | `children` | `ISdSidebarMenu[] \| undefined` | Sub-menus |
178
+
179
+ ## `SdSidebarUserControl`
180
+
181
+ Sidebar user section with a collapsible dropdown menu.
182
+
183
+ ```typescript
184
+ @Component({ selector: "sd-sidebar-user" })
185
+ class SdSidebarUserControl {
186
+ userMenu = input<ISidebarUserMenu>();
187
+ }
188
+ ```
189
+
190
+ ## `ISidebarUserMenu`
191
+
192
+ ```typescript
193
+ interface ISidebarUserMenu {
194
+ title: string;
195
+ menus: { title: string; onClick: () => void }[];
196
+ }
197
+ ```
198
+
199
+ | Field | Type | Description |
200
+ |-------|------|-------------|
201
+ | `title` | `string` | User display name |
202
+ | `menus` | `{ title: string; onClick: () => void }[]` | Dropdown action items |
203
+
204
+ ## `SdTopbarContainerControl`
205
+
206
+ Simple flex column layout shell for topbar + content area.
207
+
208
+ ```typescript
209
+ @Component({ selector: "sd-topbar-container" })
210
+ class SdTopbarContainerControl { }
211
+ ```
212
+
213
+ ## `SdTopbarControl`
214
+
215
+ Top navigation bar. Optionally renders a hamburger button to toggle an associated sidebar.
216
+
217
+ ```typescript
218
+ @Component({ selector: "sd-topbar" })
219
+ class SdTopbarControl {
220
+ sidebarContainer = input<SdSidebarContainerControl>();
221
+ }
222
+ ```
223
+
224
+ ## `SdTopbarMenuControl`
225
+
226
+ Horizontal topbar navigation menu with dropdown sub-menus.
227
+
228
+ ```typescript
229
+ @Component({ selector: "sd-topbar-menu" })
230
+ class SdTopbarMenuControl {
231
+ menus = input<ISdTopbarMenu[]>([]);
232
+ getMenuIsSelectedFn = input<(menu: ISdTopbarMenu) => boolean>();
233
+ }
234
+ ```
235
+
236
+ ## `ISdTopbarMenu`
237
+
238
+ ```typescript
239
+ interface ISdTopbarMenu {
240
+ title: string;
241
+ codeChain: string[];
242
+ url?: string;
243
+ icon?: string;
244
+ children?: ISdTopbarMenu[];
245
+ }
246
+ ```
247
+
248
+ | Field | Type | Description |
249
+ |-------|------|-------------|
250
+ | `title` | `string` | Display text |
251
+ | `codeChain` | `string[]` | Hierarchical code path for router link |
252
+ | `url` | `string \| undefined` | External URL (opens in new tab) |
253
+ | `icon` | `string \| undefined` | Icon SVG string |
254
+ | `children` | `ISdTopbarMenu[] \| undefined` | Sub-menus |
255
+
256
+ ## `SdTopbarUserControl`
257
+
258
+ Topbar user button with a dropdown menu.
259
+
260
+ ```typescript
261
+ @Component({ selector: "sd-topbar-user" })
262
+ class SdTopbarUserControl {
263
+ menus = input.required<ISdTopbarUserMenu[]>();
264
+ }
265
+ ```
266
+
267
+ ## `ISdTopbarUserMenu`
268
+
269
+ ```typescript
270
+ interface ISdTopbarUserMenu {
271
+ title: string;
272
+ onClick: () => void;
273
+ }
274
+ ```
275
+
276
+ | Field | Type | Description |
277
+ |-------|------|-------------|
278
+ | `title` | `string` | Menu item label |
279
+ | `onClick` | `() => void` | Click handler |