@simplysm/angular 14.1.20 → 14.2.1

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 (185) hide show
  1. package/dist/controls/button/sd-additional-button.js +2 -2
  2. package/dist/controls/button/sd-anchor.d.ts.map +1 -1
  3. package/dist/controls/button/sd-anchor.js +3 -3
  4. package/dist/controls/button/sd-button.d.ts.map +1 -1
  5. package/dist/controls/button/sd-button.js +3 -3
  6. package/dist/controls/button/sd-modal-select-button.d.ts.map +1 -1
  7. package/dist/controls/button/sd-modal-select-button.js +2 -2
  8. package/dist/controls/checkbox/sd-checkbox.d.ts.map +1 -1
  9. package/dist/controls/checkbox/sd-checkbox.js +3 -3
  10. package/dist/controls/checkbox/sd-switch.d.ts.map +1 -1
  11. package/dist/controls/checkbox/sd-switch.js +3 -3
  12. package/dist/controls/collapse/sd-collapse-icon.d.ts +1 -1
  13. package/dist/controls/collapse/sd-collapse-icon.d.ts.map +1 -1
  14. package/dist/controls/collapse/sd-collapse-icon.js +2 -2
  15. package/dist/controls/collapse/sd-collapse.d.ts +1 -1
  16. package/dist/controls/collapse/sd-collapse.d.ts.map +1 -1
  17. package/dist/controls/collapse/sd-collapse.js +2 -2
  18. package/dist/controls/dropdown/sd-dropdown-popup.d.ts.map +1 -1
  19. package/dist/controls/dropdown/sd-dropdown-popup.js +2 -2
  20. package/dist/controls/dropdown/sd-dropdown.js +1 -1
  21. package/dist/controls/gap/sd-gap.d.ts.map +1 -1
  22. package/dist/controls/gap/sd-gap.js +5 -7
  23. package/dist/controls/input/sd-date-range-picker.js +2 -2
  24. package/dist/controls/input/sd-numpad.d.ts.map +1 -1
  25. package/dist/controls/input/sd-numpad.js +7 -15
  26. package/dist/controls/input/sd-range.js +2 -2
  27. package/dist/controls/input/sd-textarea.js +4 -4
  28. package/dist/controls/input/sd-textfield.d.ts.map +1 -1
  29. package/dist/controls/input/sd-textfield.js +10 -10
  30. package/dist/controls/list/sd-list-item.js +43 -43
  31. package/dist/controls/list/sd-list.js +2 -2
  32. package/dist/controls/pagination/sd-pagination.d.ts.map +1 -1
  33. package/dist/controls/pagination/sd-pagination.js +7 -5
  34. package/dist/controls/select/sd-select-button.d.ts.map +1 -1
  35. package/dist/controls/select/sd-select-button.js +4 -4
  36. package/dist/controls/select/sd-select-item.d.ts.map +1 -1
  37. package/dist/controls/select/sd-select-item.js +3 -3
  38. package/dist/controls/select/sd-select.d.ts.map +1 -1
  39. package/dist/controls/select/sd-select.js +10 -19
  40. package/dist/controls/tab/sd-tab-item.js +2 -2
  41. package/dist/controls/tab/sd-tab.js +2 -2
  42. package/dist/core/busy/sd-busy-container.d.ts.map +1 -1
  43. package/dist/core/busy/sd-busy-container.js +3 -3
  44. package/dist/core/modal/sd-modal.d.ts.map +1 -1
  45. package/dist/core/modal/sd-modal.js +3 -3
  46. package/dist/core/provideSdAngular.d.ts.map +1 -1
  47. package/dist/core/provideSdAngular.js +31 -10
  48. package/dist/core/ripple/setupRipple.js +2 -2
  49. package/dist/core/setupBgTheme.d.ts +0 -1
  50. package/dist/core/setupBgTheme.d.ts.map +1 -1
  51. package/dist/core/setupBgTheme.js +3 -4
  52. package/dist/core/show-effect/setupRevealOnShow.js +1 -1
  53. package/dist/core/toast/sd-toast-container.js +2 -2
  54. package/dist/core/toast/sd-toast.d.ts.map +1 -1
  55. package/dist/core/toast/sd-toast.js +3 -3
  56. package/dist/core/validation/setupInvalid.js +5 -5
  57. package/dist/data/crud/sd-base-container.d.ts.map +1 -1
  58. package/dist/data/crud/sd-base-container.js +50 -52
  59. package/dist/data/kanban/sd-kanban-board.js +2 -2
  60. package/dist/data/kanban/sd-kanban-lane.d.ts.map +1 -1
  61. package/dist/data/kanban/sd-kanban-lane.js +4 -4
  62. package/dist/data/kanban/sd-kanban.d.ts.map +1 -1
  63. package/dist/data/kanban/sd-kanban.js +4 -4
  64. package/dist/data/permission-table/sd-permission-table.d.ts.map +1 -1
  65. package/dist/data/permission-table/sd-permission-table.js +5 -17
  66. package/dist/data/shared-data/sd-shared-data-select-list.d.ts.map +1 -1
  67. package/dist/data/shared-data/sd-shared-data-select-list.js +5 -19
  68. package/dist/data/shared-data/sd-shared-data-select.d.ts.map +1 -1
  69. package/dist/data/shared-data/sd-shared-data-select.js +8 -15
  70. package/dist/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
  71. package/dist/data/sheet/sd-sheet-config.modal.js +7 -9
  72. package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
  73. package/dist/data/sheet/sd-sheet.js +10 -12
  74. package/dist/data/sheet/useSheetCellStyling.d.ts.map +1 -1
  75. package/dist/data/sheet/useSheetCellStyling.js +1 -1
  76. package/dist/data/state-preset/sd-state-preset.js +5 -5
  77. package/dist/features/editor/sd-markdown-editor.d.ts.map +1 -1
  78. package/dist/features/editor/sd-markdown-editor.js +85 -34
  79. package/dist/features/editor/sd-tiptap-editor.d.ts.map +1 -1
  80. package/dist/features/editor/sd-tiptap-editor.js +192 -61
  81. package/dist/features/theme/sd-theme-provider.d.ts +18 -1
  82. package/dist/features/theme/sd-theme-provider.d.ts.map +1 -1
  83. package/dist/features/theme/sd-theme-provider.js +21 -4
  84. package/dist/features/theme/sd-theme-selector.d.ts.map +1 -1
  85. package/dist/features/theme/sd-theme-selector.js +50 -9
  86. package/dist/features/theme/wcag-contrast.d.ts +9 -0
  87. package/dist/features/theme/wcag-contrast.d.ts.map +1 -0
  88. package/dist/features/theme/wcag-contrast.js +83 -0
  89. package/dist/features/visual/sd-calendar.js +2 -2
  90. package/dist/features/visual/sd-label.d.ts.map +1 -1
  91. package/dist/features/visual/sd-label.js +5 -5
  92. package/dist/features/visual/sd-note.d.ts.map +1 -1
  93. package/dist/features/visual/sd-note.js +3 -3
  94. package/dist/features/visual/sd-progress.d.ts.map +1 -1
  95. package/dist/features/visual/sd-progress.js +3 -3
  96. package/dist/index.d.ts +12 -11
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +10 -9
  99. package/dist/layout/sidebar/sd-sidebar-container.d.ts.map +1 -1
  100. package/dist/layout/sidebar/sd-sidebar-container.js +11 -5
  101. package/dist/layout/sidebar/sd-sidebar-menu.d.ts.map +1 -1
  102. package/dist/layout/sidebar/sd-sidebar-menu.js +5 -17
  103. package/dist/layout/sidebar/sd-sidebar-user.js +32 -32
  104. package/dist/layout/sidebar/sd-sidebar.d.ts.map +1 -1
  105. package/dist/layout/sidebar/sd-sidebar.js +3 -3
  106. package/dist/layout/topbar/sd-topbar-menu.js +5 -5
  107. package/dist/layout/topbar/sd-topbar.d.ts.map +1 -1
  108. package/dist/layout/topbar/sd-topbar.js +5 -5
  109. package/package.json +5 -5
  110. package/scss/commons/_colors.scss +296 -242
  111. package/scss/commons/_density.scss +23 -0
  112. package/scss/commons/_mixins.scss +142 -129
  113. package/scss/commons/_styles.scss +78 -103
  114. package/scss/commons/_theme-variables.scss +16 -2
  115. package/scss/commons/_variables.scss +277 -149
  116. package/scss/controls/_card.scss +12 -8
  117. package/scss/controls/_form-box.scss +7 -7
  118. package/scss/controls/_form-table.scss +7 -7
  119. package/scss/controls/_table.scss +5 -5
  120. package/scss/sd-tokens.md +132 -0
  121. package/scss/styles.scss +3 -4
  122. package/scss/themes/_variables-blueprint.scss +127 -81
  123. package/scss/themes/_variables-ide-dark.scss +215 -0
  124. package/src/controls/button/sd-additional-button.ts +12 -12
  125. package/src/controls/button/sd-anchor.ts +7 -8
  126. package/src/controls/button/sd-button.ts +42 -44
  127. package/src/controls/button/sd-modal-select-button.ts +15 -19
  128. package/src/controls/checkbox/sd-checkbox.ts +55 -43
  129. package/src/controls/checkbox/sd-switch.ts +18 -19
  130. package/src/controls/collapse/sd-collapse-icon.ts +2 -2
  131. package/src/controls/collapse/sd-collapse.ts +2 -2
  132. package/src/controls/dropdown/sd-dropdown-popup.ts +10 -12
  133. package/src/controls/dropdown/sd-dropdown.ts +1 -1
  134. package/src/controls/gap/sd-gap.ts +11 -9
  135. package/src/controls/input/sd-date-range-picker.ts +1 -1
  136. package/src/controls/input/sd-numpad.ts +3 -11
  137. package/src/controls/input/sd-range.ts +1 -1
  138. package/src/controls/input/sd-textarea.ts +18 -18
  139. package/src/controls/input/sd-textfield.ts +39 -37
  140. package/src/controls/list/sd-list-item.ts +195 -195
  141. package/src/controls/list/sd-list.ts +8 -8
  142. package/src/controls/pagination/sd-pagination.ts +4 -2
  143. package/src/controls/select/sd-select-button.ts +6 -10
  144. package/src/controls/select/sd-select-item.ts +14 -15
  145. package/src/controls/select/sd-select.ts +34 -35
  146. package/src/controls/tab/sd-tab-item.ts +4 -4
  147. package/src/controls/tab/sd-tab.ts +2 -2
  148. package/src/core/busy/sd-busy-container.ts +17 -16
  149. package/src/core/modal/sd-modal.ts +38 -32
  150. package/src/core/provideSdAngular.ts +34 -10
  151. package/src/core/ripple/setupRipple.ts +2 -2
  152. package/src/core/setupBgTheme.ts +5 -14
  153. package/src/core/show-effect/setupRevealOnShow.ts +1 -1
  154. package/src/core/toast/sd-toast-container.ts +5 -5
  155. package/src/core/toast/sd-toast.ts +16 -17
  156. package/src/core/validation/setupInvalid.ts +5 -5
  157. package/src/data/crud/sd-base-container.ts +120 -122
  158. package/src/data/kanban/sd-kanban-board.ts +1 -1
  159. package/src/data/kanban/sd-kanban-lane.ts +9 -14
  160. package/src/data/kanban/sd-kanban.ts +9 -19
  161. package/src/data/permission-table/sd-permission-table.ts +12 -20
  162. package/src/data/shared-data/sd-shared-data-select-list.ts +5 -19
  163. package/src/data/shared-data/sd-shared-data-select.ts +11 -28
  164. package/src/data/sheet/sd-sheet-config.modal.ts +5 -7
  165. package/src/data/sheet/sd-sheet.ts +29 -28
  166. package/src/data/sheet/useSheetCellStyling.ts +12 -3
  167. package/src/data/state-preset/sd-state-preset.ts +16 -16
  168. package/src/features/editor/sd-markdown-editor.ts +110 -56
  169. package/src/features/editor/sd-tiptap-editor.ts +214 -81
  170. package/src/features/theme/sd-theme-provider.ts +28 -3
  171. package/src/features/theme/sd-theme-selector.ts +21 -2
  172. package/src/features/theme/wcag-contrast.ts +103 -0
  173. package/src/features/visual/sd-calendar.ts +8 -8
  174. package/src/features/visual/sd-label.ts +11 -12
  175. package/src/features/visual/sd-note.ts +10 -11
  176. package/src/features/visual/sd-progress.ts +9 -11
  177. package/src/index.ts +15 -40
  178. package/src/layout/sidebar/sd-sidebar-container.ts +21 -8
  179. package/src/layout/sidebar/sd-sidebar-menu.ts +15 -17
  180. package/src/layout/sidebar/sd-sidebar-user.ts +100 -100
  181. package/src/layout/sidebar/sd-sidebar.ts +7 -9
  182. package/src/layout/topbar/sd-topbar-menu.ts +3 -3
  183. package/src/layout/topbar/sd-topbar.ts +12 -14
  184. package/styles.css +1641 -2462
  185. package/scss/themes/_blueprint-surfaces.scss +0 -87
@@ -14,7 +14,7 @@ import {
14
14
  imports: [],
15
15
  host: {
16
16
  "[attr.data-sd-theme]": "theme()",
17
- "[style.background]": "color()",
17
+ "[style.background-color]": "color()",
18
18
  "[attr.data-sd-clickable]": "clickable()",
19
19
  },
20
20
  template: `
@@ -22,21 +22,20 @@ import {
22
22
  `,
23
23
  styles: [
24
24
  /* language=SCSS */ `
25
- @use "sass:map";
26
-
27
25
  @use "../../../scss/commons/variables";
28
26
 
29
27
  sd-label {
30
28
  display: inline-block;
31
- background: var(--theme-gray-darker);
32
- color: var(--text-trans-rev-default);
33
- padding: 0 var(--gap-sm);
34
- border-radius: var(--border-radius-default);
29
+ background-color: var(--sd-bg-gray-solid);
30
+ color: var(--sd-tx-gray-solid);
31
+ padding: 0 var(--sd-gap-sm);
32
+ border-radius: var(--sd-radius-default);
35
33
  text-indent: 0;
36
34
 
37
- @each $key, $val in map.get(variables.$vars, theme) {
35
+ @each $key in variables.$theme-keys {
38
36
  &[data-sd-theme="#{$key}"] {
39
- background: var(--theme-#{$key}-default);
37
+ background-color: var(--sd-bg-#{$key}-solid);
38
+ color: var(--sd-tx-#{$key}-solid);
40
39
  }
41
40
  }
42
41
 
@@ -44,11 +43,11 @@ import {
44
43
  cursor: pointer;
45
44
 
46
45
  &:hover {
47
- background: var(--theme-gray-dark);
46
+ background-color: var(--sd-bg-gray-solid-hover);
48
47
 
49
- @each $key, $val in map.get(variables.$vars, theme) {
48
+ @each $key in variables.$theme-keys {
50
49
  &[data-sd-theme="#{$key}"] {
51
- background: var(--theme-#{$key}-dark);
50
+ background-color: var(--sd-bg-#{$key}-solid-hover);
52
51
  }
53
52
  }
54
53
  }
@@ -22,32 +22,31 @@ import {
22
22
  `,
23
23
  styles: [
24
24
  /* language=SCSS */ `
25
- @use "sass:map";
26
-
27
25
  @use "../../../scss/commons/variables";
28
26
 
29
27
  sd-note {
30
28
  display: block;
31
- padding: var(--gap-sm) var(--gap-default);
32
- background: var(--theme-gray-lightest);
29
+ padding: var(--sd-gap-sm) var(--sd-gap-default);
30
+ background-color: var(--sd-bg-gray-subtle);
33
31
 
34
32
  border: none;
35
- border-radius: var(--border-radius-default);
33
+ border-radius: var(--sd-radius-default);
36
34
 
37
- @each $key, $val in map.get(variables.$vars, theme) {
35
+ @each $key in variables.$theme-keys {
38
36
  &[data-sd-theme="#{$key}"] {
39
- background: var(--theme-#{$key}-lightest);
40
- border: 1px solid var(--theme-#{$key}-lightest);
37
+ background-color: var(--sd-bg-#{$key}-subtle);
38
+ // 보더는 배경과 동일 톤(라이트에선 비가시, 테마의 subtle 값을 그대로 추종)
39
+ border: 1px solid var(--sd-bg-#{$key}-subtle);
41
40
  }
42
41
  }
43
42
 
44
43
  &[data-sd-size="sm"] {
45
- font-size: var(--font-size-sm);
46
- padding: var(--gap-xs) var(--gap-sm);
44
+ font-size: var(--sd-font-size-sm);
45
+ padding: var(--sd-gap-xs) var(--sd-gap-sm);
47
46
  }
48
47
 
49
48
  &[data-sd-size="lg"] {
50
- padding: var(--gap-default) var(--gap-lg);
49
+ padding: var(--sd-gap-default) var(--sd-gap-lg);
51
50
  }
52
51
 
53
52
  &[data-sd-inset="true"] {
@@ -27,8 +27,6 @@ import { PercentPipe } from "@angular/common";
27
27
  `,
28
28
  styles: [
29
29
  /* language=SCSS */ `
30
- @use "sass:map";
31
-
32
30
  @use "../../../scss/commons/variables";
33
31
 
34
32
  sd-progress {
@@ -36,15 +34,15 @@ import { PercentPipe } from "@angular/common";
36
34
  display: block;
37
35
  width: 100%;
38
36
  white-space: nowrap;
39
- background: var(--theme-gray-lightest);
40
- border: 1px solid var(--theme-gray-lightest);
41
- border-radius: var(--border-radius-default);
37
+ background-color: var(--sd-bg-gray-subtle);
38
+ border: 1px solid var(--sd-bd-hairline);
39
+ border-radius: var(--sd-radius-default);
42
40
  overflow: hidden;
43
41
 
44
42
  > ._content {
45
43
  position: relative;
46
44
  z-index: 2;
47
- padding: var(--gap-lg) var(--gap-default);
45
+ padding: var(--sd-gap-lg) var(--sd-gap-default);
48
46
  }
49
47
 
50
48
  > ._progress {
@@ -55,24 +53,24 @@ import { PercentPipe } from "@angular/common";
55
53
  height: 100%;
56
54
  }
57
55
 
58
- @each $key, $val in map.get(variables.$vars, theme) {
56
+ @each $key in variables.$theme-keys {
59
57
  &[data-sd-theme="#{$key}"] > ._progress {
60
- background: var(--theme-#{$key}-default);
58
+ background-color: var(--sd-bg-#{$key}-solid);
61
59
  }
62
60
  }
63
61
 
64
62
  &[data-sd-size="sm"] > ._content {
65
- padding: var(--gap-xs) var(--gap-default);
63
+ padding: var(--sd-gap-xs) var(--sd-gap-default);
66
64
  }
67
65
 
68
66
  &[data-sd-size="lg"] > ._content {
69
- padding: var(--gap-default) var(--gap-xl);
67
+ padding: var(--sd-gap-default) var(--sd-gap-xl);
70
68
  }
71
69
 
72
70
  &[data-sd-inset="true"] {
73
71
  border-radius: 0;
74
72
  border: none;
75
- background: var(--control-color);
73
+ background-color: var(--sd-bg-control);
76
74
  }
77
75
  }
78
76
  `,
package/src/index.ts CHANGED
@@ -17,10 +17,7 @@ export type {
17
17
  // core/events
18
18
  export { SdOptionEventPlugin } from "./core/events/sd-option-event.plugin";
19
19
  export { SdResizeDirective, type SdResizeEvent } from "./core/events/sd-resize";
20
- export {
21
- SdIntersectionDirective,
22
- type SdIntersectionEvent,
23
- } from "./core/events/sd-intersection";
20
+ export { SdIntersectionDirective, type SdIntersectionEvent } from "./core/events/sd-intersection";
24
21
  export { SdEvents } from "./core/events/sd-events";
25
22
 
26
23
  // core/commands
@@ -71,11 +68,7 @@ export {
71
68
  injectPermsSignal,
72
69
  } from "./core/app-structure/sd-app-structure.provider";
73
70
  export { SdAppStructureUtils } from "./core/app-structure/sd-app-structure.utils";
74
- export type {
75
- SdMenu,
76
- SdFlatMenu,
77
- SdPermission,
78
- } from "./core/app-structure/sd-app-structure.types";
71
+ export type { SdMenu, SdFlatMenu, SdPermission } from "./core/app-structure/sd-app-structure.types";
79
72
 
80
73
  // core/file-dialog
81
74
  export { SdFileDialogProvider } from "./core/file-dialog/sd-file-dialog.provider";
@@ -93,10 +86,7 @@ export {
93
86
  } from "./core/shared-data/sd-shared-data.provider";
94
87
 
95
88
  // core/selection
96
- export {
97
- useExpandingManager,
98
- type ExpandItemDef,
99
- } from "./core/selection/useExpandingManager";
89
+ export { useExpandingManager, type ExpandItemDef } from "./core/selection/useExpandingManager";
100
90
  export { useSelectionManager } from "./core/selection/useSelectionManager";
101
91
  export { useSortingManager, type SortingDef } from "./core/selection/useSortingManager";
102
92
 
@@ -125,17 +115,10 @@ export {
125
115
 
126
116
  // core/busy
127
117
  export { SdBusyContainer } from "./core/busy/sd-busy-container";
128
- export {
129
- SdBusyProvider,
130
- type SdBusyType,
131
- } from "./core/busy/sd-busy.provider";
118
+ export { SdBusyProvider, type SdBusyType } from "./core/busy/sd-busy.provider";
132
119
 
133
120
  // core/print
134
- export {
135
- SdPrintProvider,
136
- type SdPrint,
137
- type SdPrintInput,
138
- } from "./core/print/sd-print.provider";
121
+ export { SdPrintProvider, type SdPrint, type SdPrintInput } from "./core/print/sd-print.provider";
139
122
 
140
123
  // controls/button
141
124
  export { SdButton } from "./controls/button/sd-button";
@@ -149,7 +132,10 @@ export {
149
132
 
150
133
  // controls/input
151
134
  export { SdTextfield } from "./controls/input/sd-textfield";
152
- export { type SdTextfieldTypes, sdTextfieldTypes } from "./controls/input/sd-textfield-type-handlers";
135
+ export {
136
+ type SdTextfieldTypes,
137
+ sdTextfieldTypes,
138
+ } from "./controls/input/sd-textfield-type-handlers";
153
139
  export { SdTextarea } from "./controls/input/sd-textarea";
154
140
  export { SdNumpad } from "./controls/input/sd-numpad";
155
141
  export { SdRange } from "./controls/input/sd-range";
@@ -195,19 +181,13 @@ export { SdPagination } from "./controls/pagination/sd-pagination";
195
181
  export { SdSidebarContainer } from "./layout/sidebar/sd-sidebar-container";
196
182
  export { SdSidebar } from "./layout/sidebar/sd-sidebar";
197
183
  export { SdSidebarMenu } from "./layout/sidebar/sd-sidebar-menu";
198
- export {
199
- SdSidebarUser,
200
- type SdSidebarUserMenu,
201
- } from "./layout/sidebar/sd-sidebar-user";
184
+ export { SdSidebarUser, type SdSidebarUserMenu } from "./layout/sidebar/sd-sidebar-user";
202
185
 
203
186
  // layout/topbar
204
187
  export { SdTopbarContainer } from "./layout/topbar/sd-topbar-container";
205
188
  export { SdTopbar } from "./layout/topbar/sd-topbar";
206
189
  export { SdTopbarMenu } from "./layout/topbar/sd-topbar-menu";
207
- export {
208
- SdTopbarUser,
209
- type SdTopbarUserMenu,
210
- } from "./layout/topbar/sd-topbar-user";
190
+ export { SdTopbarUser, type SdTopbarUserMenu } from "./layout/topbar/sd-topbar-user";
211
191
 
212
192
  // data/sheet
213
193
  export { SdSheet } from "./data/sheet/sd-sheet";
@@ -242,10 +222,7 @@ export { SdKanbanLane } from "./data/kanban/sd-kanban-lane";
242
222
  export { SdPermissionTable } from "./data/permission-table/sd-permission-table";
243
223
 
244
224
  // data/state-preset
245
- export {
246
- SdStatePreset,
247
- type SdStatePresetDef,
248
- } from "./data/state-preset/sd-state-preset";
225
+ export { SdStatePreset, type SdStatePresetDef } from "./data/state-preset/sd-state-preset";
249
226
 
250
227
  // data/crud
251
228
  export { SdBaseContainer } from "./data/crud/sd-base-container";
@@ -253,14 +230,12 @@ export { SdCrudDetail } from "./data/crud/sd-crud-detail";
253
230
  export { SdCrudList } from "./data/crud/sd-crud-list";
254
231
 
255
232
  // features/theme
256
- export { SdThemeProvider } from "./features/theme/sd-theme-provider";
233
+ export { SdThemeProvider, type SdThemeName } from "./features/theme/sd-theme-provider";
257
234
  export { SdThemeSelector } from "./features/theme/sd-theme-selector";
235
+ export { getWcagContrastRatio } from "./features/theme/wcag-contrast";
258
236
 
259
237
  // features/address
260
- export {
261
- SdAddressSearchModal,
262
- type Address,
263
- } from "./features/address/sd-address-search.modal";
238
+ export { SdAddressSearchModal, type Address } from "./features/address/sd-address-search.modal";
264
239
 
265
240
  // features/editor
266
241
  export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
@@ -1,4 +1,11 @@
1
- import { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from "@angular/core";
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ effect,
5
+ inject,
6
+ signal,
7
+ ViewEncapsulation,
8
+ } from "@angular/core";
2
9
  import { toSignal } from "@angular/core/rxjs-interop";
3
10
  import { NavigationStart, Router } from "@angular/router";
4
11
  import { filter } from "rxjs";
@@ -14,7 +21,13 @@ import { filter } from "rxjs";
14
21
  },
15
22
  template: `
16
23
  <ng-content />
17
- <div class="_backdrop" tabindex="0" role="button" (click)="onBackdropClick()" (keydown.enter)="onBackdropClick()"></div>
24
+ <div
25
+ class="_backdrop"
26
+ tabindex="0"
27
+ role="button"
28
+ (click)="onBackdropClick()"
29
+ (keydown.enter)="onBackdropClick()"
30
+ ></div>
18
31
  `,
19
32
  styles: [
20
33
  /* language=SCSS */ `
@@ -24,12 +37,12 @@ import { filter } from "rxjs";
24
37
  display: block;
25
38
  position: relative;
26
39
  height: 100%;
27
- padding-left: var(--sidebar-width);
28
- transition: padding-left var(--animation-duration) ease-out;
40
+ padding-left: var(--sd-sidebar-width);
41
+ transition: padding-left var(--sd-animation-duration) ease-out;
29
42
 
30
43
  &[data-sd-toggle="true"] {
31
44
  padding-left: 0;
32
- transition: padding-left var(--animation-duration) ease-in;
45
+ transition: padding-left var(--sd-animation-duration) ease-in;
33
46
  }
34
47
 
35
48
  > ._backdrop {
@@ -44,15 +57,15 @@ import { filter } from "rxjs";
44
57
  > ._backdrop {
45
58
  position: absolute;
46
59
  display: block;
47
- z-index: calc(var(--z-index-sidebar) - 1);
60
+ z-index: calc(var(--sd-z-sidebar) - 1);
48
61
  top: 0;
49
62
  left: 0;
50
63
  width: 100%;
51
64
  height: 100%;
52
- background: var(--background-rev-color);
65
+ background-color: var(--sd-bg-inverse);
53
66
  opacity: 0;
54
67
  pointer-events: none;
55
- transition: opacity var(--animation-duration) ease-in-out;
68
+ transition: opacity var(--sd-animation-duration) ease-in-out;
56
69
  }
57
70
 
58
71
  &[data-sd-toggle="true"] {
@@ -1,4 +1,10 @@
1
- import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from "@angular/core";
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ computed,
5
+ input,
6
+ ViewEncapsulation,
7
+ } from "@angular/core";
2
8
  import { injectFullPageCodeSignal } from "../../core/routing/injectFullPageCodeSignal";
3
9
  import {
4
10
  type SdMenu,
@@ -17,14 +23,7 @@ import { NgIcon } from "@ng-icons/core";
17
23
  changeDetection: ChangeDetectionStrategy.OnPush,
18
24
  encapsulation: ViewEncapsulation.None,
19
25
  standalone: true,
20
- imports: [
21
- NgTemplateOutlet,
22
- SdTypedTemplate,
23
- SdRouterLink,
24
- SdList,
25
- SdListItem,
26
- NgIcon,
27
- ],
26
+ imports: [NgTemplateOutlet, SdTypedTemplate, SdRouterLink, SdList, SdListItem, NgIcon],
28
27
  host: {
29
28
  "class": "flex-column fill",
30
29
  "[attr.data-sd-root-layout]": "rootLayout()",
@@ -70,15 +69,14 @@ import { NgIcon } from "@ng-icons/core";
70
69
  styles: [
71
70
  /* language=SCSS */ `
72
71
  sd-sidebar-menu {
73
- /*> sd-list[data-sd-inset="true"] {
74
- sd-list {
75
- background: var(--trans-lightest);
76
- }
77
- }*/
78
-
79
72
  &[data-sd-root-layout="flat"] {
80
- > sd-list[data-sd-inset="true"] > sd-list-item > sd-collapse > ._content > ._children > sd-list {
81
- background: transparent;
73
+ > sd-list[data-sd-inset="true"]
74
+ > sd-list-item
75
+ > sd-collapse
76
+ > ._content
77
+ > ._children
78
+ > sd-list {
79
+ background-color: transparent;
82
80
  }
83
81
  }
84
82
  }
@@ -1,100 +1,100 @@
1
- import {
2
- ChangeDetectionStrategy,
3
- Component,
4
- input,
5
- signal,
6
- ViewEncapsulation,
7
- } from "@angular/core";
8
- import { SdCollapseIcon } from "../../controls/collapse/sd-collapse-icon";
9
- import { SdCollapse } from "../../controls/collapse/sd-collapse";
10
- import { SdRipple } from "../../core/ripple/sd-ripple";
11
- import { SdList } from "../../controls/list/sd-list";
12
- import { SdListItem } from "../../controls/list/sd-list-item";
13
- import { NgIcon } from "@ng-icons/core";
14
-
15
- @Component({
16
- selector: "sd-sidebar-user",
17
- changeDetection: ChangeDetectionStrategy.OnPush,
18
- encapsulation: ViewEncapsulation.None,
19
- standalone: true,
20
- imports: [SdCollapseIcon, SdCollapse, SdRipple, SdList, SdListItem, NgIcon],
21
- host:{
22
- "[class]": "'pv-lg'"
23
- },
24
- template: `
25
- <div class="p-xs-default">
26
- <ng-content />
27
- </div>
28
- @if (userMenu(); as _userMenu) {
29
- <div
30
- class="_menu-button"
31
- tabindex="0"
32
- (click)="onMenuOpenButtonClick()"
33
- (keydown.enter)="onMenuOpenButtonClick()"
34
- [sdRipple]="true"
35
- >
36
- @if (_userMenu.icon) {
37
- <ng-icon [svg]="_userMenu.icon" />
38
- }
39
- {{ _userMenu.title }}
40
- <sd-collapse-icon [open]="menuOpen()" style="float: right;" [openRotate]="180" />
41
- </div>
42
-
43
- <sd-collapse [open]="menuOpen()">
44
- <sd-list [inset]="true">
45
- @for (menu of _userMenu.menus; track menu.title) {
46
- <sd-list-item (click)="menu.onClick()">
47
- {{ menu.title }}
48
- </sd-list-item>
49
- }
50
- </sd-list>
51
- </sd-collapse>
52
- }
53
- `,
54
- styles: [
55
- /* language=SCSS */ `
56
- sd-sidebar-user {
57
- display: block;
58
-
59
- > ._menu-button {
60
- display: block;
61
- cursor: pointer;
62
- user-select: none;
63
- color: var(--text-trans-light);
64
-
65
- padding: var(--gap-sm) var(--gap-default);
66
- border-radius: var(--border-radius-default);
67
- margin: 0 var(--gap-sm);
68
-
69
- &:hover {
70
- background: var(--trans-lighter);
71
- }
72
- }
73
-
74
- > sd-collapse > ._content > sd-list {
75
- background: var(--trans-lightest);
76
- padding: var(--gap-xs) 0;
77
- margin: 0 var(--gap-sm);
78
- }
79
- }
80
- `,
81
- ],
82
- })
83
- export class SdSidebarUser {
84
- userMenu = input<SdSidebarUserMenu>();
85
-
86
- menuOpen = signal(false);
87
-
88
- onMenuOpenButtonClick(): void {
89
- this.menuOpen.update((v) => !v);
90
- }
91
- }
92
-
93
- export interface SdSidebarUserMenu {
94
- icon?: string;
95
- title: string;
96
- menus: {
97
- title: string;
98
- onClick: () => Promise<void> | void;
99
- }[];
100
- }
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ input,
5
+ signal,
6
+ ViewEncapsulation,
7
+ } from "@angular/core";
8
+ import { SdCollapseIcon } from "../../controls/collapse/sd-collapse-icon";
9
+ import { SdCollapse } from "../../controls/collapse/sd-collapse";
10
+ import { SdRipple } from "../../core/ripple/sd-ripple";
11
+ import { SdList } from "../../controls/list/sd-list";
12
+ import { SdListItem } from "../../controls/list/sd-list-item";
13
+ import { NgIcon } from "@ng-icons/core";
14
+
15
+ @Component({
16
+ selector: "sd-sidebar-user",
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ encapsulation: ViewEncapsulation.None,
19
+ standalone: true,
20
+ imports: [SdCollapseIcon, SdCollapse, SdRipple, SdList, SdListItem, NgIcon],
21
+ host: {
22
+ "[class]": "'pv-lg'",
23
+ },
24
+ template: `
25
+ <div class="p-xs-default">
26
+ <ng-content />
27
+ </div>
28
+ @if (userMenu(); as _userMenu) {
29
+ <div
30
+ class="_menu-button"
31
+ tabindex="0"
32
+ (click)="onMenuOpenButtonClick()"
33
+ (keydown.enter)="onMenuOpenButtonClick()"
34
+ [sdRipple]="true"
35
+ >
36
+ @if (_userMenu.icon) {
37
+ <ng-icon [svg]="_userMenu.icon" />
38
+ }
39
+ {{ _userMenu.title }}
40
+ <sd-collapse-icon [open]="menuOpen()" style="float: right;" [openRotate]="180" />
41
+ </div>
42
+
43
+ <sd-collapse [open]="menuOpen()">
44
+ <sd-list [inset]="true">
45
+ @for (menu of _userMenu.menus; track menu.title) {
46
+ <sd-list-item (click)="menu.onClick()">
47
+ {{ menu.title }}
48
+ </sd-list-item>
49
+ }
50
+ </sd-list>
51
+ </sd-collapse>
52
+ }
53
+ `,
54
+ styles: [
55
+ /* language=SCSS */ `
56
+ sd-sidebar-user {
57
+ display: block;
58
+
59
+ > ._menu-button {
60
+ display: block;
61
+ cursor: pointer;
62
+ user-select: none;
63
+ color: var(--sd-tx-muted);
64
+
65
+ padding: var(--sd-gap-sm) var(--sd-gap-default);
66
+ border-radius: var(--sd-radius-default);
67
+ margin: 0 var(--sd-gap-sm);
68
+
69
+ &:hover {
70
+ background-color: var(--sd-bg-state-hover);
71
+ }
72
+ }
73
+
74
+ > sd-collapse > ._content > sd-list {
75
+ background-color: var(--sd-bg-gray-subtle);
76
+ padding: var(--sd-gap-xs) 0;
77
+ margin: 0 var(--sd-gap-sm);
78
+ }
79
+ }
80
+ `,
81
+ ],
82
+ })
83
+ export class SdSidebarUser {
84
+ userMenu = input<SdSidebarUserMenu>();
85
+
86
+ menuOpen = signal(false);
87
+
88
+ onMenuOpenButtonClick(): void {
89
+ this.menuOpen.update((v) => !v);
90
+ }
91
+ }
92
+
93
+ export interface SdSidebarUserMenu {
94
+ icon?: string;
95
+ title: string;
96
+ menus: {
97
+ title: string;
98
+ onClick: () => Promise<void> | void;
99
+ }[];
100
+ }
@@ -27,31 +27,29 @@ import { SdSidebarContainer } from "./sd-sidebar-container";
27
27
 
28
28
  sd-sidebar {
29
29
  position: absolute;
30
- z-index: var(--z-index-sidebar);
30
+ z-index: var(--sd-z-sidebar);
31
31
  top: 0;
32
32
  left: 0;
33
- width: var(--sidebar-width);
33
+ width: var(--sd-sidebar-width);
34
34
  height: 100%;
35
- //background: var(--control-color);
36
- //background: var(--theme-gray-lightest);
37
- border-right: 1px solid var(--border-color-lighter);
35
+ border-right: 1px solid var(--sd-bd-soft);
38
36
 
39
37
  @media not all and (max-width: variables.$breakpoint-mobile) {
40
- transition: transform var(--animation-duration) ease-out;
38
+ transition: transform var(--sd-animation-duration) ease-out;
41
39
 
42
40
  &[data-sd-toggle="true"] {
43
41
  transform: translateX(-100%);
44
- transition: transform var(--animation-duration) ease-in;
42
+ transition: transform var(--sd-animation-duration) ease-in;
45
43
  }
46
44
  }
47
45
 
48
46
  @media all and (max-width: variables.$breakpoint-mobile) {
49
- transition: transform var(--animation-duration) ease-in;
47
+ transition: transform var(--sd-animation-duration) ease-in;
50
48
  transform: translateX(-100%);
51
49
 
52
50
  &[data-sd-toggle="true"] {
53
51
  transform: none;
54
- transition: transform var(--animation-duration) ease-out;
52
+ transition: transform var(--sd-animation-duration) ease-out;
55
53
  @include mixins.elevation(16);
56
54
  }
57
55
  }
@@ -39,13 +39,13 @@ import { tablerCaretDown } from "@ng-icons/tabler-icons";
39
39
  NgIcon,
40
40
  ],
41
41
  host: {
42
- "class": "flex-row gap-sm",
42
+ class: "flex-row gap-sm",
43
43
  },
44
44
  styles: [
45
45
  /* language=SCSS */ `
46
46
  sd-topbar-menu {
47
47
  sd-list sd-list {
48
- background: var(--trans-lightest);
48
+ background-color: var(--sd-bg-gray-subtle);
49
49
  }
50
50
  }
51
51
  `,
@@ -88,7 +88,7 @@ import { tablerCaretDown } from "@ng-icons/tabler-icons";
88
88
  @for (menu of currMenus; track menu.codeChain.join(".")) {
89
89
  <sd-list-item
90
90
  [style.padding-left.em]="depth > 0 ? (depth + 1) * 0.5 : undefined"
91
- [style.padding-block]="depth === 0 ? 'var(--gap-default)' : undefined"
91
+ [style.padding-block]="depth === 0 ? 'var(--sd-gap-default)' : undefined"
92
92
  [sdRouterLink]="getMenuRouterLinkOption(menu)"
93
93
  (click)="onMenuClick(menu, dropdownIndex)"
94
94
  [selected]="getIsMenuSelected(menu)"