@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
@@ -46,7 +46,7 @@ export class SdCollapseIcon {
46
46
 
47
47
  transitionStyle = computed(() => {
48
48
  return this.open()
49
- ? "transform var(--animation-duration) ease-out"
50
- : "transform var(--animation-duration) ease-in";
49
+ ? "transform var(--sd-animation-duration) ease-out"
50
+ : "transform var(--sd-animation-duration) ease-in";
51
51
  });
52
52
  }
@@ -55,8 +55,8 @@ export class SdCollapse {
55
55
  contentTransition = computed(() => {
56
56
  if (!this._initialized()) return "";
57
57
  return this.open()
58
- ? "margin-top var(--animation-duration) ease-out"
59
- : "margin-top var(--animation-duration) ease-in";
58
+ ? "margin-top var(--sd-animation-duration) ease-out"
59
+ : "margin-top var(--sd-animation-duration) ease-in";
60
60
  });
61
61
 
62
62
  constructor() {
@@ -30,18 +30,18 @@ import { SdResizeDirective } from "../../core/events/sd-resize";
30
30
 
31
31
  sd-dropdown-popup {
32
32
  position: fixed;
33
- z-index: var(--z-index-dropdown);
33
+ z-index: var(--sd-z-dropdown);
34
34
  opacity: 0;
35
35
  transform: translateY(-0.625rem);
36
- transition: var(--animation-duration) linear;
36
+ transition: var(--sd-animation-duration) linear;
37
37
  transition-property: transform, opacity;
38
38
  pointer-events: none;
39
- background: var(--control-color);
39
+ background-color: var(--sd-bg-overlay);
40
40
  min-width: 7.5rem;
41
41
  @include mixins.elevation(4);
42
42
  overflow: hidden;
43
- border-radius: var(--border-radius-default);
44
- border: 1px solid var(--border-color-light);
43
+ border-radius: var(--sd-radius-default);
44
+ border: 1px solid var(--sd-dropdown-bd);
45
45
 
46
46
  > div {
47
47
  width: 100%;
@@ -51,12 +51,12 @@ import { SdResizeDirective } from "../../core/events/sd-resize";
51
51
  }
52
52
 
53
53
  &:focus {
54
- outline: 1px solid var(--theme-primary-default);
54
+ outline: 1px solid var(--sd-focus-ring-color);
55
55
  }
56
56
 
57
57
  @media all and (max-width: variables.$breakpoint-mobile) {
58
58
  @include mixins.elevation(0);
59
- border: 1px solid var(--border-color-default);
59
+ border: 1px solid var(--sd-bd-strong);
60
60
  }
61
61
 
62
62
  &[data-sd-mobile] {
@@ -66,11 +66,11 @@ import { SdResizeDirective } from "../../core/events/sd-resize";
66
66
  bottom: 0;
67
67
  top: auto;
68
68
  max-height: 80vh;
69
- border-radius: var(--border-radius-default) var(--border-radius-default) 0 0;
69
+ border-radius: var(--sd-radius-default) var(--sd-radius-default) 0 0;
70
70
  opacity: 1;
71
71
  pointer-events: auto;
72
72
  transform: none;
73
- animation: sd-dropdown-slide-up var(--animation-duration) ease-out;
73
+ animation: sd-dropdown-slide-up var(--sd-animation-duration) ease-out;
74
74
  @include mixins.elevation(8);
75
75
  }
76
76
  }
@@ -87,9 +87,7 @@ import { SdResizeDirective } from "../../core/events/sd-resize";
87
87
  ],
88
88
  })
89
89
  export class SdDropdownPopup {
90
- private readonly _parentControl = inject<SdDropdown>(
91
- forwardRef(() => SdDropdown),
92
- );
90
+ private readonly _parentControl = inject<SdDropdown>(forwardRef(() => SdDropdown));
93
91
  private readonly _elRef = inject(ElementRef<HTMLElement>);
94
92
  private _capped = false;
95
93
 
@@ -74,7 +74,7 @@ export class SdDropdown {
74
74
  const backdrop = document.createElement("div");
75
75
  backdrop.setAttribute("data-sd-dropdown-backdrop", "");
76
76
  backdrop.style.cssText =
77
- "position:fixed;inset:0;background:var(--busy-overlay-bg);z-index:var(--z-index-dropdown)";
77
+ "position:fixed;inset:0;background-color:var(--sd-bg-busy-overlay);z-index:var(--sd-z-dropdown)";
78
78
  backdrop.addEventListener("click", () => {
79
79
  this._closePopup();
80
80
  });
@@ -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
 
3
9
  @Component({
4
10
  selector: "sd-gap",
@@ -12,13 +18,13 @@ import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation
12
18
  @use "../../../scss/commons/variables";
13
19
 
14
20
  sd-gap {
15
- @each $key, $val in map.get(variables.$vars, gap) {
21
+ @each $key, $val in map.get(variables.$sd, gap) {
16
22
  &[data-sd-height="#{$key}"] {
17
- height: var(--gap-#{$key});
23
+ height: var(--sd-gap-#{$key});
18
24
  }
19
25
 
20
26
  &[data-sd-width="#{$key}"] {
21
- width: var(--gap-#{$key});
27
+ width: var(--sd-gap-#{$key});
22
28
  }
23
29
  }
24
30
  }
@@ -44,11 +50,7 @@ export class SdGap {
44
50
  _displayStyle = computed(() => {
45
51
  if (this.widthPx() === 0 || this.heightPx() === 0 || this.widthEm() === 0) {
46
52
  return "none";
47
- } else if (
48
- this.width() != null ||
49
- this.widthPx() != null ||
50
- this.widthEm() != null
51
- ) {
53
+ } else if (this.width() != null || this.widthPx() != null || this.widthEm() != null) {
52
54
  return "inline-block";
53
55
  } else if (this.height() != null || this.heightPx() != null) {
54
56
  return "block";
@@ -26,7 +26,7 @@ import { DateOnly } from "@simplysm/core-common";
26
26
  display: flex;
27
27
  align-items: center;
28
28
 
29
- @include mixins.flex-direction(row, var(--gap-sm));
29
+ @include mixins.flex-direction(row, var(--sd-gap-sm));
30
30
  }
31
31
  `,
32
32
  ],
@@ -59,20 +59,12 @@ import { tablerArrowLeft, tablerEraser } from "@ng-icons/tabler-icons";
59
59
  </td>
60
60
  }
61
61
  <td [attr.colspan]="useMinusButton() ? 1 : 2">
62
- <sd-button
63
- [size]="'lg'"
64
- [buttonClass]="'tx-theme-danger-default'"
65
- (click)="onButtonClick('C')"
66
- >
62
+ <sd-button [size]="'lg'" [buttonClass]="'tx-danger'" (click)="onButtonClick('C')">
67
63
  <ng-icon [svg]="tablerEraser" />
68
64
  </sd-button>
69
65
  </td>
70
66
  <td>
71
- <sd-button
72
- [size]="'lg'"
73
- [buttonClass]="'tx-theme-warning-default'"
74
- (click)="onButtonClick('BS')"
75
- >
67
+ <sd-button [size]="'lg'" [buttonClass]="'tx-warning'" (click)="onButtonClick('BS')">
76
68
  <ng-icon [svg]="tablerArrowLeft" />
77
69
  </sd-button>
78
70
  </td>
@@ -108,7 +100,7 @@ import { tablerArrowLeft, tablerEraser } from "@ng-icons/tabler-icons";
108
100
 
109
101
  > * > tr > * {
110
102
  border: none;
111
- padding: var(--gap-xxs);
103
+ padding: var(--sd-gap-xxs);
112
104
 
113
105
  > sd-button {
114
106
  border: none;
@@ -41,7 +41,7 @@ import type { SdTextfieldTypes } from "./sd-textfield-type-handlers";
41
41
  display: flex;
42
42
  align-items: center;
43
43
 
44
- @include mixins.flex-direction(row, var(--gap-sm));
44
+ @include mixins.flex-direction(row, var(--sd-gap-sm));
45
45
  }
46
46
  `,
47
47
  ],
@@ -25,7 +25,7 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
25
25
  @if (value()) {
26
26
  <pre>{{ value() }} </pre>
27
27
  } @else if (placeholder()) {
28
- <span class="tx-trans-lighter">{{ placeholder() }}</span>
28
+ <span class="tx-faint">{{ placeholder() }}</span>
29
29
  } @else {
30
30
  <span>&nbsp;</span>
31
31
  }
@@ -44,8 +44,6 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
44
44
  `,
45
45
  styles: [
46
46
  /* language=SCSS */ `
47
- @use "sass:map";
48
-
49
47
  @use "../../../scss/commons/variables";
50
48
  @use "../../../scss/commons/mixins";
51
49
 
@@ -56,19 +54,19 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
56
54
  > textarea,
57
55
  > ._contents {
58
56
  @include mixins.form-control-base();
59
- font-family: var(--font-family-field);
57
+ font-family: var(--sd-font-family-field);
60
58
  resize: none;
61
59
 
62
60
  overflow: auto;
63
61
  width: 100%;
64
62
 
65
- border: 1px solid var(--trans-lighter);
66
- border-radius: var(--border-radius-default);
67
- background: var(--theme-secondary-lightest);
63
+ border: 1px solid var(--sd-bd-field);
64
+ border-radius: var(--sd-radius-default);
65
+ background-color: var(--sd-bg-field);
68
66
 
69
67
  &:focus {
70
68
  outline: none;
71
- border-color: var(--theme-primary-default);
69
+ border-color: var(--sd-focus-ring-color);
72
70
  }
73
71
 
74
72
  &::-webkit-scrollbar {
@@ -76,7 +74,7 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
76
74
  }
77
75
 
78
76
  &::-webkit-input-placeholder {
79
- color: var(--text-trans-lighter);
77
+ color: var(--sd-tx-faint);
80
78
  }
81
79
  }
82
80
 
@@ -93,11 +91,11 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
93
91
  margin-bottom: 0;
94
92
  }
95
93
 
96
- @each $key, $val in map.get(variables.$vars, theme) {
94
+ @each $key in variables.$theme-keys {
97
95
  &[data-sd-theme="#{$key}"] {
98
96
  > textarea,
99
97
  > ._contents {
100
- background: var(--theme-#{$key}-lightest);
98
+ background-color: var(--sd-bg-#{$key}-subtle);
101
99
  }
102
100
  }
103
101
  }
@@ -105,14 +103,14 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
105
103
  &[data-sd-size="sm"] {
106
104
  > textarea,
107
105
  > ._contents {
108
- padding: var(--gap-xs) var(--gap-sm);
106
+ padding: var(--sd-gap-xs) var(--sd-gap-sm);
109
107
  }
110
108
  }
111
109
 
112
110
  &[data-sd-size="lg"] {
113
111
  > textarea,
114
112
  > ._contents {
115
- padding: var(--gap-default) var(--gap-lg);
113
+ padding: var(--sd-gap-default) var(--sd-gap-lg);
116
114
  }
117
115
  }
118
116
 
@@ -146,22 +144,24 @@ import { setupInvalid } from "../../core/validation/setupInvalid";
146
144
  }
147
145
 
148
146
  > textarea:focus {
149
- outline: 1px solid var(--theme-primary-default);
147
+ outline: 1px solid var(--sd-focus-ring-color);
150
148
  outline-offset: -1px;
151
149
  }
152
150
  }
153
151
 
152
+ // disabled 는 색 치환 단일 규약 (DEC-009)
154
153
  &[data-sd-disabled="true"] {
155
154
  > ._contents {
156
155
  display: block;
157
- background: var(--theme-gray-lightest);
158
- color: var(--text-trans-light);
156
+ background-color: var(--sd-bg-disabled);
157
+ color: var(--sd-tx-disabled);
159
158
  }
160
159
 
160
+ // inset(시트 셀 등)의 disabled 는 일반 콘텐츠처럼 표시(현행 유지)
161
161
  &[data-sd-inset="true"] {
162
162
  > ._contents {
163
- background: var(--control-color);
164
- color: var(--text-trans-default);
163
+ background-color: var(--sd-bg-control);
164
+ color: var(--sd-tx-default);
165
165
  }
166
166
  }
167
167
  }
@@ -15,10 +15,7 @@ import {
15
15
  ViewEncapsulation,
16
16
  } from "@angular/core";
17
17
  import { setupInvalid } from "../../core/validation/setupInvalid";
18
- import {
19
- textfieldTypeHandlers,
20
- type SdTextfieldTypes,
21
- } from "./sd-textfield-type-handlers";
18
+ import { textfieldTypeHandlers, type SdTextfieldTypes } from "./sd-textfield-type-handlers";
22
19
 
23
20
  @Component({
24
21
  selector: "sd-textfield",
@@ -34,12 +31,12 @@ import {
34
31
  [style.visibility]="!readonly() && !disabled() ? 'hidden' : undefined"
35
32
  >
36
33
  @if (controlType() === "password") {
37
- <span class="tx-trans-light">****</span>
34
+ <span class="tx-muted">****</span>
38
35
  } @else {
39
36
  @if (controlValue()) {
40
37
  <pre>{{ controlValueText() ? controlValueText() : " " }}</pre>
41
38
  } @else if (placeholder()) {
42
- <span class="tx-trans-lighter">{{ placeholder() }}</span>
39
+ <span class="tx-faint">{{ placeholder() }}</span>
43
40
  } @else {
44
41
  <span>&nbsp;</span>
45
42
  }
@@ -67,8 +64,6 @@ import {
67
64
  `,
68
65
  styles: [
69
66
  /* language=SCSS */ `
70
- @use "sass:map";
71
-
72
67
  @use "../../../scss/commons/variables";
73
68
  @use "../../../scss/commons/mixins";
74
69
 
@@ -79,25 +74,25 @@ import {
79
74
  > input,
80
75
  > ._contents {
81
76
  @include mixins.form-control-base();
82
- font-family: var(--font-family-field);
77
+ font-family: var(--sd-font-family-field);
83
78
 
84
79
  overflow: auto;
85
80
  width: 100%;
86
81
 
87
- border: 1px solid var(--border-color-light);
88
- border-radius: var(--border-radius-default);
89
- background: var(--theme-secondary-lightest);
82
+ border: 1px solid var(--sd-bd-field);
83
+ border-radius: var(--sd-radius-default);
84
+ background-color: var(--sd-bg-field);
90
85
 
91
86
  &:focus {
92
87
  outline: none;
93
- border-color: var(--theme-primary-default);
88
+ border-color: var(--sd-focus-ring-color);
94
89
  }
95
90
 
96
91
  &[type="date"],
97
92
  &[type="month"],
98
93
  &[type="datetime-local"] {
99
- padding-top: calc(var(--gap-sm) - 1px);
100
- padding-bottom: calc(var(--gap-sm) - 1px);
94
+ padding-top: calc(var(--sd-gap-sm) - 1px);
95
+ padding-bottom: calc(var(--sd-gap-sm) - 1px);
101
96
  }
102
97
 
103
98
  &::-webkit-scrollbar {
@@ -105,7 +100,7 @@ import {
105
100
  }
106
101
 
107
102
  &::-webkit-input-placeholder {
108
- color: var(--text-trans-lighter);
103
+ color: var(--sd-tx-faint);
109
104
  }
110
105
 
111
106
  &::-webkit-outer-spin-button,
@@ -135,11 +130,11 @@ import {
135
130
  }
136
131
  }
137
132
 
138
- @each $key, $val in map.get(variables.$vars, theme) {
133
+ @each $key in variables.$theme-keys {
139
134
  &[data-sd-theme="#{$key}"] {
140
135
  > input,
141
136
  > ._contents {
142
- background: var(--theme-#{$key}-lightest);
137
+ background-color: var(--sd-bg-#{$key}-subtle);
143
138
  }
144
139
  }
145
140
  }
@@ -147,14 +142,14 @@ import {
147
142
  &[data-sd-size="sm"] {
148
143
  > input,
149
144
  > ._contents {
150
- padding: var(--gap-xs) var(--gap-sm);
145
+ padding: var(--sd-gap-xs) var(--sd-gap-sm);
151
146
 
152
147
  &[type="date"],
153
148
  &[type="month"],
154
149
  &[type="datetime-local"],
155
150
  &[type="color"] {
156
- padding-top: calc(var(--gap-xs) - 1px);
157
- padding-bottom: calc(var(--gap-xs) - 1px);
151
+ padding-top: calc(var(--sd-gap-xs) - 1px);
152
+ padding-bottom: calc(var(--sd-gap-xs) - 1px);
158
153
  }
159
154
  }
160
155
  }
@@ -162,14 +157,14 @@ import {
162
157
  &[data-sd-size="lg"] {
163
158
  > input,
164
159
  > ._contents {
165
- padding: var(--gap-default) var(--gap-lg);
160
+ padding: var(--sd-gap-default) var(--sd-gap-lg);
166
161
 
167
162
  &[type="date"],
168
163
  &[type="month"],
169
164
  &[type="datetime-local"],
170
165
  &[type="color"] {
171
- padding-top: calc(var(--gap-default) - 1px);
172
- padding-bottom: calc(var(--gap-default) - 1px);
166
+ padding-top: calc(var(--sd-gap-default) - 1px);
167
+ padding-bottom: calc(var(--sd-gap-default) - 1px);
173
168
  }
174
169
  }
175
170
  }
@@ -204,7 +199,7 @@ import {
204
199
  }
205
200
 
206
201
  > input:focus {
207
- outline: 1px solid var(--theme-primary-default);
202
+ outline: 1px solid var(--sd-focus-ring-color);
208
203
  outline-offset: -1px;
209
204
  }
210
205
 
@@ -240,7 +235,8 @@ import {
240
235
  > input,
241
236
  > ._contents {
242
237
  height: calc(
243
- var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2
238
+ var(--sd-font-size-default) * var(--sd-line-height-strip-unit) + var(--sd-gap-sm) *
239
+ 2
244
240
  );
245
241
  }
246
242
 
@@ -248,7 +244,8 @@ import {
248
244
  > input,
249
245
  > ._contents {
250
246
  height: calc(
251
- var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2
247
+ var(--sd-font-size-default) * var(--sd-line-height-strip-unit) +
248
+ var(--sd-gap-xs) * 2
252
249
  );
253
250
  }
254
251
  }
@@ -257,24 +254,27 @@ import {
257
254
  > input,
258
255
  > ._contents {
259
256
  height: calc(
260
- var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2
257
+ var(--sd-font-size-default) * var(--sd-line-height-strip-unit) +
258
+ var(--sd-gap-default) * 2
261
259
  );
262
260
  }
263
261
  }
264
262
  }
265
263
  }
266
264
 
265
+ // disabled 는 색 치환 단일 규약 (DEC-009)
267
266
  &[data-sd-disabled="true"] {
268
267
  > ._contents {
269
268
  display: block;
270
- background: var(--trans-lightest);
271
- color: var(--text-trans-light);
269
+ background-color: var(--sd-bg-disabled);
270
+ color: var(--sd-tx-disabled);
272
271
  }
273
272
 
273
+ // inset(시트 셀 등)의 disabled 는 일반 콘텐츠처럼 표시(현행 유지)
274
274
  &[data-sd-inset="true"] {
275
275
  > ._contents {
276
- background: var(--control-color);
277
- color: var(--text-trans-default);
276
+ background-color: var(--sd-bg-control);
277
+ color: var(--sd-tx-default);
278
278
  }
279
279
  }
280
280
  }
@@ -356,9 +356,11 @@ export class SdTextfield<K extends keyof SdTextfieldTypes> {
356
356
  controlValueText = computed(() => {
357
357
  const value = this.value();
358
358
  if (value == null) return undefined;
359
- return this._handler().toDisplayText(value, {
360
- minDigits: this.minDigits(),
361
- }) ?? this.controlValue();
359
+ return (
360
+ this._handler().toDisplayText(value, {
361
+ minDigits: this.minDigits(),
362
+ }) ?? this.controlValue()
363
+ );
362
364
  });
363
365
 
364
366
  constructor() {
@@ -379,8 +381,8 @@ export class SdTextfield<K extends keyof SdTextfieldTypes> {
379
381
  const domParsed = this._handler().parse(inputEl.value, { format: this.format() });
380
382
  // DOM raw 가 현재 모델의 유효한 표현이면(사용자 입력 유래) 되쓰지 않아 캐럿·IME 보호
381
383
  const domReflectsModel =
382
- domParsed != null
383
- && this._handler().toControlValue(domParsed, {
384
+ domParsed != null &&
385
+ this._handler().toControlValue(domParsed, {
384
386
  useNumberComma: this.useNumberComma(),
385
387
  format: this.format(),
386
388
  }) === controlValue;