@simplysm/angular 14.0.41 → 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 (256) 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 +2 -4
  12. package/dist/controls/collapse/sd-collapse-icon.d.ts.map +1 -1
  13. package/dist/controls/collapse/sd-collapse-icon.js +7 -7
  14. package/dist/controls/collapse/sd-collapse.d.ts +1 -1
  15. package/dist/controls/collapse/sd-collapse.d.ts.map +1 -1
  16. package/dist/controls/collapse/sd-collapse.js +8 -7
  17. package/dist/controls/dropdown/sd-dropdown-popup.d.ts +2 -0
  18. package/dist/controls/dropdown/sd-dropdown-popup.d.ts.map +1 -1
  19. package/dist/controls/dropdown/sd-dropdown-popup.js +21 -8
  20. package/dist/controls/dropdown/sd-dropdown.d.ts.map +1 -1
  21. package/dist/controls/dropdown/sd-dropdown.js +5 -16
  22. package/dist/controls/form/sd-form.js +1 -1
  23. package/dist/controls/gap/sd-gap.js +5 -5
  24. package/dist/controls/input/sd-date-range-picker.d.ts +1 -0
  25. package/dist/controls/input/sd-date-range-picker.d.ts.map +1 -1
  26. package/dist/controls/input/sd-date-range-picker.js +14 -19
  27. package/dist/controls/input/sd-numpad.js +3 -3
  28. package/dist/controls/input/sd-range.js +1 -1
  29. package/dist/controls/input/sd-textarea.js +2 -2
  30. package/dist/controls/input/sd-textfield-type-handlers.js +2 -2
  31. package/dist/controls/input/sd-textfield.js +9 -9
  32. package/dist/controls/list/sd-list-item.d.ts +0 -1
  33. package/dist/controls/list/sd-list-item.d.ts.map +1 -1
  34. package/dist/controls/list/sd-list-item.js +38 -38
  35. package/dist/controls/list/sd-list.d.ts.map +1 -1
  36. package/dist/controls/list/sd-list.js +3 -3
  37. package/dist/controls/pagination/sd-pagination.js +1 -1
  38. package/dist/controls/select/sd-select-button.d.ts.map +1 -1
  39. package/dist/controls/select/sd-select-button.js +4 -8
  40. package/dist/controls/select/sd-select-item.d.ts +3 -3
  41. package/dist/controls/select/sd-select-item.d.ts.map +1 -1
  42. package/dist/controls/select/sd-select-item.js +27 -20
  43. package/dist/controls/select/sd-select.d.ts +5 -4
  44. package/dist/controls/select/sd-select.d.ts.map +1 -1
  45. package/dist/controls/select/sd-select.js +20 -17
  46. package/dist/controls/tab/sd-tab-item.js +1 -1
  47. package/dist/controls/tab/sd-tab.js +1 -1
  48. package/dist/core/app-structure/sd-app-structure.utils.js +1 -1
  49. package/dist/core/busy/sd-busy-container.d.ts.map +1 -1
  50. package/dist/core/busy/sd-busy-container.js +62 -68
  51. package/dist/core/busy/sd-busy.provider.js +1 -1
  52. package/dist/core/commands/sd-command.d.ts +13 -0
  53. package/dist/core/commands/sd-command.d.ts.map +1 -0
  54. package/dist/core/commands/sd-command.js +52 -0
  55. package/dist/core/error-handler/sd-global-error-handler.plugin.js +1 -1
  56. package/dist/core/events/sd-events.d.ts +1 -6
  57. package/dist/core/events/sd-events.d.ts.map +1 -1
  58. package/dist/core/events/sd-events.js +3 -11
  59. package/dist/core/events/sd-intersection.d.ts +13 -0
  60. package/dist/core/events/sd-intersection.d.ts.map +1 -0
  61. package/dist/core/events/sd-intersection.js +27 -0
  62. package/dist/core/events/sd-resize.d.ts +16 -0
  63. package/dist/core/events/sd-resize.d.ts.map +1 -0
  64. package/dist/core/events/{sd-resize-event.plugin.js → sd-resize.js} +18 -20
  65. package/dist/core/file-dialog/sd-file-dialog.provider.js +1 -1
  66. package/dist/core/modal/injectDragResize.js +9 -9
  67. package/dist/core/modal/injectFocusTrap.js +1 -1
  68. package/dist/core/modal/sd-confirm-modal.js +1 -1
  69. package/dist/core/modal/sd-modal.d.ts +9 -1
  70. package/dist/core/modal/sd-modal.d.ts.map +1 -1
  71. package/dist/core/modal/sd-modal.js +140 -42
  72. package/dist/core/modal/sd-modal.provider.d.ts +1 -0
  73. package/dist/core/modal/sd-modal.provider.d.ts.map +1 -1
  74. package/dist/core/modal/sd-modal.provider.js +5 -5
  75. package/dist/core/modal/sd-prompt-modal.js +1 -1
  76. package/dist/core/provideSdAngular.d.ts.map +1 -1
  77. package/dist/core/provideSdAngular.js +0 -10
  78. package/dist/core/ripple/setupRipple.js +5 -5
  79. package/dist/core/routing/menu-utils.js +1 -1
  80. package/dist/core/routing/sd-navigate-window.provider.js +1 -1
  81. package/dist/core/routing/sd-router-link.js +1 -1
  82. package/dist/core/selection/setupCumulateSelectedKeys.js +3 -3
  83. package/dist/core/setupModelHook.js +1 -1
  84. package/dist/core/toast/sd-toast-container.d.ts +1 -1
  85. package/dist/core/toast/sd-toast-container.js +3 -7
  86. package/dist/core/toast/sd-toast.d.ts.map +1 -1
  87. package/dist/core/toast/sd-toast.js +27 -24
  88. package/dist/core/toast/sd-toast.provider.js +6 -6
  89. package/dist/core/validation/setupInvalid.js +2 -1
  90. package/dist/data/data-detail/sd-data-detail.d.ts +2 -1
  91. package/dist/data/data-detail/sd-data-detail.d.ts.map +1 -1
  92. package/dist/data/data-detail/sd-data-detail.js +37 -33
  93. package/dist/data/data-select-button/sd-data-select-button.js +1 -1
  94. package/dist/data/data-sheet/sd-data-sheet.d.ts +2 -1
  95. package/dist/data/data-sheet/sd-data-sheet.d.ts.map +1 -1
  96. package/dist/data/data-sheet/sd-data-sheet.js +99 -59
  97. package/dist/data/kanban/sd-kanban-board.js +1 -1
  98. package/dist/data/kanban/sd-kanban-lane.js +1 -1
  99. package/dist/data/kanban/sd-kanban.d.ts +1 -1
  100. package/dist/data/kanban/sd-kanban.d.ts.map +1 -1
  101. package/dist/data/kanban/sd-kanban.js +4 -4
  102. package/dist/data/permission-table/sd-permission-table.js +6 -6
  103. package/dist/data/shared-data/sd-shared-data-select-button.js +1 -1
  104. package/dist/data/shared-data/sd-shared-data-select-list.js +3 -3
  105. package/dist/data/shared-data/sd-shared-data-select.d.ts +1 -1
  106. package/dist/data/shared-data/sd-shared-data-select.d.ts.map +1 -1
  107. package/dist/data/shared-data/sd-shared-data-select.js +29 -54
  108. package/dist/data/sheet/injectSheetDomAccessor.d.ts +6 -2
  109. package/dist/data/sheet/injectSheetDomAccessor.d.ts.map +1 -1
  110. package/dist/data/sheet/injectSheetDomAccessor.js +27 -22
  111. package/dist/data/sheet/injectSheetSelectRowIndicator.d.ts +10 -0
  112. package/dist/data/sheet/injectSheetSelectRowIndicator.d.ts.map +1 -0
  113. package/dist/data/sheet/injectSheetSelectRowIndicator.js +55 -0
  114. package/dist/data/sheet/sd-sheet-column-cell-template.d.ts +9 -0
  115. package/dist/data/sheet/sd-sheet-column-cell-template.d.ts.map +1 -0
  116. package/dist/data/sheet/sd-sheet-column-cell-template.js +17 -0
  117. package/dist/data/sheet/sd-sheet-column.d.ts +10 -7
  118. package/dist/data/sheet/sd-sheet-column.d.ts.map +1 -1
  119. package/dist/data/sheet/sd-sheet-column.js +10 -6
  120. package/dist/data/sheet/sd-sheet-config.modal.d.ts +19 -20
  121. package/dist/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
  122. package/dist/data/sheet/sd-sheet-config.modal.js +357 -217
  123. package/dist/data/sheet/sd-sheet.d.ts +30 -15
  124. package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
  125. package/dist/data/sheet/sd-sheet.js +617 -274
  126. package/dist/data/sheet/types.d.ts +2 -0
  127. package/dist/data/sheet/types.d.ts.map +1 -1
  128. package/dist/data/sheet/useSheetCellAgent.js +6 -6
  129. package/dist/data/sheet/useSheetCellStyling.d.ts.map +1 -1
  130. package/dist/data/sheet/useSheetCellStyling.js +11 -5
  131. package/dist/data/sheet/useSheetFocusIndicator.d.ts +7 -0
  132. package/dist/data/sheet/useSheetFocusIndicator.d.ts.map +1 -0
  133. package/dist/data/sheet/useSheetFocusIndicator.js +53 -0
  134. package/dist/data/sheet/useSheetLayoutEngine.d.ts.map +1 -1
  135. package/dist/data/sheet/useSheetLayoutEngine.js +3 -1
  136. package/dist/data/state-preset/sd-state-preset.d.ts.map +1 -1
  137. package/dist/data/state-preset/sd-state-preset.js +14 -14
  138. package/dist/features/address/sd-address-search.modal.js +3 -3
  139. package/dist/features/editor/sd-tiptap-editor.js +6 -6
  140. package/dist/features/editor/useTiptapToolbar.js +2 -2
  141. package/dist/features/theme/sd-theme-selector.js +1 -1
  142. package/dist/features/visual/sd-barcode.js +1 -1
  143. package/dist/features/visual/sd-calendar.js +2 -2
  144. package/dist/features/visual/sd-echarts.d.ts +2 -1
  145. package/dist/features/visual/sd-echarts.d.ts.map +1 -1
  146. package/dist/features/visual/sd-echarts.js +5 -3
  147. package/dist/features/visual/sd-label.js +1 -1
  148. package/dist/features/visual/sd-note.js +1 -1
  149. package/dist/features/visual/sd-progress.js +1 -1
  150. package/dist/index.d.ts +5 -6
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +4 -5
  153. package/dist/layout/base-container/sd-base-container.js +3 -3
  154. package/dist/layout/dock/sd-dock-container.js +1 -1
  155. package/dist/layout/dock/sd-dock.d.ts +3 -2
  156. package/dist/layout/dock/sd-dock.d.ts.map +1 -1
  157. package/dist/layout/dock/sd-dock.js +6 -4
  158. package/dist/layout/sidebar/sd-sidebar-container.js +5 -5
  159. package/dist/layout/sidebar/sd-sidebar-menu.d.ts.map +1 -1
  160. package/dist/layout/sidebar/sd-sidebar-menu.js +7 -6
  161. package/dist/layout/sidebar/sd-sidebar-user.js +1 -1
  162. package/dist/layout/sidebar/sd-sidebar.js +1 -1
  163. package/dist/layout/topbar/sd-topbar-container.js +1 -1
  164. package/dist/layout/topbar/sd-topbar-menu.d.ts.map +1 -1
  165. package/dist/layout/topbar/sd-topbar-menu.js +7 -7
  166. package/dist/layout/topbar/sd-topbar-user.js +1 -1
  167. package/dist/layout/topbar/sd-topbar.js +3 -3
  168. package/package.json +6 -6
  169. package/src/controls/button/sd-modal-select-button.ts +7 -2
  170. package/src/controls/collapse/sd-collapse-icon.ts +3 -4
  171. package/src/controls/collapse/sd-collapse.ts +4 -5
  172. package/src/controls/dropdown/sd-dropdown-popup.ts +15 -2
  173. package/src/controls/dropdown/sd-dropdown.ts +4 -16
  174. package/src/controls/gap/sd-gap.ts +4 -4
  175. package/src/controls/input/sd-date-range-picker.ts +13 -16
  176. package/src/controls/input/sd-numpad.ts +1 -1
  177. package/src/controls/input/sd-textarea.ts +1 -1
  178. package/src/controls/input/sd-textfield-type-handlers.ts +2 -2
  179. package/src/controls/input/sd-textfield.ts +6 -6
  180. package/src/controls/list/sd-list-item.ts +40 -26
  181. package/src/controls/list/sd-list.ts +2 -1
  182. package/src/controls/select/sd-select-button.ts +8 -11
  183. package/src/controls/select/sd-select-item.ts +35 -27
  184. package/src/controls/select/sd-select.ts +111 -41
  185. package/src/core/app-structure/sd-app-structure.utils.ts +1 -1
  186. package/src/core/busy/sd-busy-container.ts +235 -123
  187. package/src/core/busy/sd-busy.provider.ts +1 -1
  188. package/src/core/commands/sd-command.ts +46 -0
  189. package/src/core/error-handler/sd-global-error-handler.plugin.ts +1 -1
  190. package/src/core/events/sd-events.ts +1 -12
  191. package/src/core/events/sd-intersection.ts +29 -0
  192. package/src/core/events/{sd-resize-event.plugin.ts → sd-resize.ts} +17 -24
  193. package/src/core/file-dialog/sd-file-dialog.provider.ts +1 -1
  194. package/src/core/modal/injectDragResize.ts +9 -9
  195. package/src/core/modal/injectFocusTrap.ts +1 -1
  196. package/src/core/modal/sd-modal.provider.ts +6 -5
  197. package/src/core/modal/sd-modal.ts +121 -42
  198. package/src/core/provideSdAngular.ts +0 -10
  199. package/src/core/ripple/setupRipple.ts +5 -5
  200. package/src/core/routing/menu-utils.ts +1 -1
  201. package/src/core/routing/sd-navigate-window.provider.ts +1 -1
  202. package/src/core/routing/sd-router-link.ts +1 -1
  203. package/src/core/selection/setupCumulateSelectedKeys.ts +3 -3
  204. package/src/core/setupModelHook.ts +1 -1
  205. package/src/core/toast/sd-toast-container.ts +1 -1
  206. package/src/core/toast/sd-toast.provider.ts +6 -6
  207. package/src/core/toast/sd-toast.ts +25 -22
  208. package/src/core/validation/setupInvalid.ts +2 -1
  209. package/src/data/data-detail/sd-data-detail.ts +15 -11
  210. package/src/data/data-sheet/sd-data-sheet.ts +27 -20
  211. package/src/data/kanban/sd-kanban.ts +4 -5
  212. package/src/data/permission-table/sd-permission-table.ts +4 -4
  213. package/src/data/shared-data/sd-shared-data-select-list.ts +1 -1
  214. package/src/data/shared-data/sd-shared-data-select.ts +8 -27
  215. package/src/data/sheet/injectSheetDomAccessor.ts +37 -25
  216. package/src/data/sheet/injectSheetSelectRowIndicator.ts +69 -0
  217. package/src/data/sheet/sd-sheet-column-cell-template.ts +17 -0
  218. package/src/data/sheet/sd-sheet-column.ts +12 -5
  219. package/src/data/sheet/sd-sheet-config.modal.ts +215 -191
  220. package/src/data/sheet/sd-sheet.ts +534 -203
  221. package/src/data/sheet/types.ts +2 -0
  222. package/src/data/sheet/useSheetCellAgent.ts +8 -8
  223. package/src/data/sheet/useSheetCellStyling.ts +9 -9
  224. package/src/data/sheet/useSheetFocusIndicator.ts +66 -0
  225. package/src/data/sheet/useSheetLayoutEngine.ts +3 -1
  226. package/src/data/state-preset/sd-state-preset.ts +26 -13
  227. package/src/features/address/sd-address-search.modal.ts +1 -1
  228. package/src/features/editor/sd-tiptap-editor.ts +4 -4
  229. package/src/features/editor/useTiptapToolbar.ts +2 -2
  230. package/src/features/visual/sd-calendar.ts +1 -1
  231. package/src/features/visual/sd-echarts.ts +2 -0
  232. package/src/index.ts +6 -7
  233. package/src/layout/base-container/sd-base-container.ts +1 -1
  234. package/src/layout/dock/sd-dock.ts +3 -2
  235. package/src/layout/sidebar/sd-sidebar-container.ts +2 -2
  236. package/src/layout/sidebar/sd-sidebar-menu.ts +1 -3
  237. package/src/layout/topbar/sd-topbar-menu.ts +11 -15
  238. package/src/layout/topbar/sd-topbar.ts +1 -1
  239. package/dist/core/commands/sd-insert-command-event.plugin.d.ts +0 -11
  240. package/dist/core/commands/sd-insert-command-event.plugin.d.ts.map +0 -1
  241. package/dist/core/commands/sd-insert-command-event.plugin.js +0 -35
  242. package/dist/core/commands/sd-refresh-command-event.plugin.d.ts +0 -11
  243. package/dist/core/commands/sd-refresh-command-event.plugin.d.ts.map +0 -1
  244. package/dist/core/commands/sd-refresh-command-event.plugin.js +0 -38
  245. package/dist/core/commands/sd-save-command-event.plugin.d.ts +0 -11
  246. package/dist/core/commands/sd-save-command-event.plugin.d.ts.map +0 -1
  247. package/dist/core/commands/sd-save-command-event.plugin.js +0 -38
  248. package/dist/core/events/sd-intersection-event.plugin.d.ts +0 -13
  249. package/dist/core/events/sd-intersection-event.plugin.d.ts.map +0 -1
  250. package/dist/core/events/sd-intersection-event.plugin.js +0 -29
  251. package/dist/core/events/sd-resize-event.plugin.d.ts +0 -16
  252. package/dist/core/events/sd-resize-event.plugin.d.ts.map +0 -1
  253. package/src/core/commands/sd-insert-command-event.plugin.ts +0 -39
  254. package/src/core/commands/sd-refresh-command-event.plugin.ts +0 -44
  255. package/src/core/commands/sd-save-command-event.plugin.ts +0 -44
  256. package/src/core/events/sd-intersection-event.plugin.ts +0 -35
@@ -51,10 +51,10 @@ export type SelectModeValue<T> = {
51
51
  <sd-dropdown [disabled]="disabled()" [(open)]="dropdownOpen">
52
52
  <div class="_sd-select-control" [sdRipple]="!disabled()">
53
53
  <div class="_sd-select-control-content" #contentEl>
54
- @if (_selectedItemContentHTML() !== undefined) {
54
+ @if (_selectedItemContentHTML() != null) {
55
55
  <div [innerHTML]="_selectedItemContentHTML()"></div>
56
56
  } @else if (placeholder()) {
57
- <span class="tx-trans-lighter">{{ placeholder() }}</span>
57
+ <span class="sd-text-color-gray-default">{{ placeholder() }}</span>
58
58
  } @else {
59
59
  <span>&nbsp;</span>
60
60
  }
@@ -83,7 +83,7 @@ export type SelectModeValue<T> = {
83
83
  <ng-template [ngTemplateOutlet]="_beforeTpl()!" />
84
84
  }
85
85
  @if (_itemOfTpl(); as tpl) {
86
- @for (item of _flatItems(); track item) {
86
+ @for (item of _flatItems(); track trackByFn()(item.data, item.index)) {
87
87
  <ng-template
88
88
  [ngTemplateOutlet]="tpl"
89
89
  [ngTemplateOutletContext]="{ $implicit: item.data, item: item.data, index: item.index, depth: item.depth }"
@@ -97,23 +97,33 @@ export type SelectModeValue<T> = {
97
97
  `,
98
98
  styles: [
99
99
  /* language=SCSS */ `
100
- @use "../../../scss/commons/mixins";
101
-
102
100
  sd-select {
103
101
  display: block;
104
102
  position: relative;
103
+ width: 100%;
104
+ min-width: 10em;
105
105
 
106
106
  > sd-dropdown {
107
+ display: flex;
108
+ overflow: hidden;
109
+
110
+ border: 1px solid var(--trans-lighter);
111
+ border-radius: var(--border-radius-default);
112
+ background: var(--theme-secondary-lightest);
113
+
114
+ &:focus,
115
+ &:focus-within {
116
+ border-color: var(--theme-primary-default);
117
+ }
118
+
107
119
  > ._sd-select-control {
108
- @include mixins.form-control-base();
109
120
  display: flex;
110
- align-items: center;
121
+ position: relative;
122
+ gap: var(--gap-default);
123
+ flex-grow: 1;
124
+ padding: var(--gap-sm) var(--gap-default);
111
125
  cursor: pointer;
112
126
 
113
- border: 1px solid var(--trans-lighter);
114
- border-radius: var(--border-radius-default);
115
- background: var(--theme-secondary-lightest);
116
-
117
127
  > ._sd-select-control-content {
118
128
  flex: 1;
119
129
  overflow: hidden;
@@ -122,45 +132,103 @@ export type SelectModeValue<T> = {
122
132
  }
123
133
 
124
134
  > ._sd-select-control-icon {
125
- margin-left: var(--gap-sm);
126
135
  opacity: 0.3;
127
136
  }
137
+
138
+ &:hover > ._sd-select-control-icon,
139
+ &:focus > ._sd-select-control-icon,
140
+ &:active > ._sd-select-control-icon {
141
+ opacity: 1;
142
+ }
128
143
  }
129
144
 
130
- &:focus-within > ._sd-select-control {
131
- border-color: var(--theme-secondary-default);
145
+ > sd-select-button {
146
+ padding: var(--gap-sm);
147
+ border-left: 1px solid var(--theme-gray-lightest);
148
+
149
+ &:last-of-type {
150
+ border-top-right-radius: var(--border-radius-default);
151
+ border-bottom-right-radius: var(--border-radius-default);
152
+ }
132
153
  }
133
154
  }
134
155
 
135
- &[data-sd-size="sm"] > sd-dropdown > ._sd-select-control {
136
- padding: var(--gap-xs) var(--gap-sm);
137
- }
156
+ &[data-sd-disabled="true"] {
157
+ > sd-dropdown {
158
+ background: var(--theme-gray-lightest);
138
159
 
139
- &[data-sd-size="lg"] > sd-dropdown > ._sd-select-control {
140
- padding: var(--gap-default) var(--gap-lg);
160
+ > ._sd-select-control {
161
+ color: var(--text-trans-light);
162
+ cursor: default;
163
+
164
+ > ._sd-select-control-icon {
165
+ display: none;
166
+ }
167
+ }
168
+ }
141
169
  }
142
170
 
143
171
  &[data-sd-inline="true"] {
144
172
  display: inline-block;
145
173
  width: auto;
174
+ vertical-align: top;
146
175
  }
147
176
 
148
- &[data-sd-inset="true"] > sd-dropdown > ._sd-select-control {
149
- border: none;
150
- border-radius: 0;
177
+ &[data-sd-size="sm"] {
178
+ > sd-dropdown {
179
+ > ._sd-select-control {
180
+ padding: var(--gap-xs) var(--gap-sm);
181
+ gap: var(--gap-sm);
182
+ }
151
183
 
152
- &:focus-within {
153
- outline: 1px solid var(--theme-primary-default);
184
+ > sd-select-button {
185
+ padding: var(--gap-xs);
186
+ }
154
187
  }
155
188
  }
156
189
 
157
- &[data-sd-disabled="true"] {
158
- > sd-dropdown > ._sd-select-control {
159
- background: var(--trans-lighter);
160
- cursor: default;
190
+ &[data-sd-size="lg"] {
191
+ > sd-dropdown {
192
+ > ._sd-select-control {
193
+ padding: var(--gap-default) var(--gap-lg);
194
+ gap: var(--gap-lg);
195
+ }
161
196
 
162
- > ._sd-select-control-icon {
163
- display: none;
197
+ > sd-select-button {
198
+ padding: var(--gap-default);
199
+ }
200
+ }
201
+ }
202
+
203
+ &[data-sd-inset="true"] {
204
+ min-width: auto;
205
+ border-radius: 0;
206
+
207
+ > sd-dropdown {
208
+ border: none;
209
+ border-radius: 0;
210
+
211
+ > sd-select-button {
212
+ border-radius: 0;
213
+ }
214
+
215
+ &:focus,
216
+ &:focus-within {
217
+ outline: 1px solid var(--theme-primary-default);
218
+ outline-offset: -1px;
219
+
220
+ > sd-select-button {
221
+ outline: 1px solid var(--theme-primary-default);
222
+ outline-offset: -1px;
223
+ }
224
+ }
225
+ }
226
+
227
+ &[data-sd-disabled="true"] > sd-dropdown {
228
+ background: var(--control-color);
229
+
230
+ > ._sd-select-control {
231
+ color: var(--text-trans-default);
164
232
  }
165
233
  }
166
234
  }
@@ -194,12 +262,13 @@ export class SdSelect<M extends "single" | "multi", T> {
194
262
  multiSelectionDisplayDirection = input<"vertical">();
195
263
 
196
264
  items = input<T[]>();
265
+ trackByFn = input<(item: T, index: number) => unknown>((item) => item);
197
266
  getChildrenFn = input<(item: T) => T[] | undefined>();
198
267
 
199
268
  contentClass = input<string>();
200
269
  contentStyle = input<string>();
201
270
 
202
- dropdownOpen = signal(false);
271
+ dropdownOpen = model(false);
203
272
 
204
273
  protected readonly tablerCaretDown = tablerCaretDown;
205
274
 
@@ -225,9 +294,9 @@ export class SdSelect<M extends "single" | "multi", T> {
225
294
  const walk = (list: T[], depth: number) => {
226
295
  for (const item of list) {
227
296
  flat.push({ data: item, index: index++, depth });
228
- if (getChildren !== undefined) {
297
+ if (getChildren != null) {
229
298
  const children = getChildren(item);
230
- if (children !== undefined) {
299
+ if (children != null) {
231
300
  walk(children, depth + 1);
232
301
  }
233
302
  }
@@ -254,7 +323,7 @@ export class SdSelect<M extends "single" | "multi", T> {
254
323
  const popupEl = this._dropdownControl().popupElRef().nativeElement;
255
324
  const cls = this.contentClass();
256
325
  const addedClasses: string[] = [];
257
- if (cls !== undefined) {
326
+ if (cls != null) {
258
327
  for (const c of cls.split(" ").filter(Boolean)) {
259
328
  popupEl.classList.add(c);
260
329
  addedClasses.push(c);
@@ -262,7 +331,7 @@ export class SdSelect<M extends "single" | "multi", T> {
262
331
  }
263
332
  const style = this.contentStyle();
264
333
  const addedStyleProps: string[] = [];
265
- if (style !== undefined) {
334
+ if (style != null) {
266
335
  const tempEl = document.createElement("div");
267
336
  tempEl.style.cssText = style;
268
337
  for (let i = 0; i < tempEl.style.length; i++) {
@@ -330,12 +399,13 @@ export class SdSelect<M extends "single" | "multi", T> {
330
399
 
331
400
  const selectedItems = untracked(() => items.filter((item) => arr.includes(item.value())));
332
401
 
333
- const separator = this.multiSelectionDisplayDirection() === "vertical" ? "<br>" : ", ";
402
+ const isVertical = this.multiSelectionDisplayDirection() === "vertical";
403
+ const separator = isVertical ? "<div class='p-sm-0'></div>" : ", ";
334
404
  const htmlParts: string[] = [];
335
405
  for (const item of selectedItems) {
336
406
  const html = item.contentHTML();
337
407
  if (html !== "") {
338
- htmlParts.push(html);
408
+ htmlParts.push(`<span style="display: inline">${html}</span>`);
339
409
  }
340
410
  }
341
411
  if (htmlParts.length > 0) {
@@ -360,24 +430,24 @@ export class SdSelect<M extends "single" | "multi", T> {
360
430
  });
361
431
  }
362
432
 
363
- selectItem(itemValue: T): void {
433
+ selectItem(itemValue: T | undefined): void {
364
434
  this._setOrToggle(itemValue);
365
435
  if (this.selectMode() === "single") {
366
436
  this.closeDropdown();
367
437
  }
368
438
  }
369
439
 
370
- toggleItem(itemValue: T): void {
440
+ toggleItem(itemValue: T | undefined): void {
371
441
  this._setOrToggle(itemValue);
372
442
  }
373
443
 
374
- private _setOrToggle(itemValue: T): void {
444
+ private _setOrToggle(itemValue: T | undefined): void {
375
445
  if (this.selectMode() === "single") {
376
446
  this.value.set(itemValue);
377
447
  } else {
378
448
  this.value.update((v) => {
379
449
  const arr = (v as T[] | undefined) ?? [];
380
- if (arr.includes(itemValue)) {
450
+ if (arr.includes(itemValue as T)) {
381
451
  return arr.filter((item) => item !== itemValue);
382
452
  } else {
383
453
  return [...arr, itemValue];
@@ -28,7 +28,7 @@ export abstract class SdAppStructureUtils {
28
28
  permKeys: K[],
29
29
  permRecord: Record<string, boolean> | undefined,
30
30
  ): K[] {
31
- if (permRecord === undefined) return [] as K[];
31
+ if (permRecord == null) return [] as K[];
32
32
 
33
33
  const result = [] as K[];
34
34
  for (const permKey of permKeys) {