@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
@@ -92,14 +92,13 @@ import { matchesSearchText } from "./matchesSearchText";
92
92
 
93
93
  <ng-template #beforeTpl>
94
94
  @if (
95
- (!required() && selectMode() === "single") ||
96
- (useUndefined() && selectMode() === "multi")
95
+ (!required() && selectMode() === "single") || (useUndefined() && selectMode() === "multi")
97
96
  ) {
98
97
  <sd-select-item>
99
98
  @if (undefinedTplRef()) {
100
99
  <ng-template [ngTemplateOutlet]="undefinedTplRef()!" />
101
100
  } @else {
102
- <span class="tx-theme-gray-default">미지정</span>
101
+ <span class="tx-gray">미지정</span>
103
102
  }
104
103
  </sd-select-item>
105
104
  }
@@ -117,9 +116,7 @@ import { matchesSearchText } from "./matchesSearchText";
117
116
  ) {
118
117
  <sd-select-item [value]="item.__valueKey" [hidden]="!getItemVisible(item, index)">
119
118
  <span
120
- [style.text-decoration]="
121
- getIsHiddenFn()(item, index) ? 'line-through' : undefined
122
- "
119
+ [style.text-decoration]="getIsHiddenFn()(item, index) ? 'line-through' : undefined"
123
120
  >
124
121
  <ng-template
125
122
  [ngTemplateOutlet]="itemTplRef() ?? null"
@@ -165,13 +162,10 @@ export class SdSharedDataSelect<
165
162
 
166
163
  selectClass = input<string>();
167
164
  multiSelectionDisplayDirection = input<"vertical">();
168
- getIsHiddenFn = input<(item: TItem, index: number) => boolean>(
169
- (item) => item.__isHidden,
170
- );
171
- getSearchTextFn = input<(item: TItem, index: number) => string>(
172
- (item) => item.__searchText,
173
- );
174
- displayOrderByFn = input<(item: TItem) => string | number | DateOnly | DateTime | Time | undefined>();
165
+ getIsHiddenFn = input<(item: TItem, index: number) => boolean>((item) => item.__isHidden);
166
+ getSearchTextFn = input<(item: TItem, index: number) => string>((item) => item.__searchText);
167
+ displayOrderByFn =
168
+ input<(item: TItem) => string | number | DateOnly | DateTime | Time | undefined>();
175
169
 
176
170
  itemTplRef = contentChild<SdItemOfTemplate<TItem>, TemplateRef<SdItemOfTemplateContext<TItem>>>(
177
171
  SdItemOfTemplate,
@@ -187,9 +181,7 @@ export class SdSharedDataSelect<
187
181
 
188
182
  isDropdownOpen = computed(() => this._selectCtrl()?.dropdownOpen() ?? false);
189
183
 
190
- hasParentKey = computed(() =>
191
- this.items().some((item) => item.__parentKey != null),
192
- );
184
+ hasParentKey = computed(() => this.items().some((item) => item.__parentKey != null));
193
185
 
194
186
  itemByParentKeyMap = computed(() => {
195
187
  if (!this.hasParentKey()) return undefined;
@@ -296,10 +288,7 @@ export class SdSharedDataSelect<
296
288
  }
297
289
 
298
290
  getItemVisible(item: TItem, index: number): boolean {
299
- if (
300
- this.isIncludeSearchText(item, index) &&
301
- !this.getIsHiddenFn()(item, index)
302
- ) {
291
+ if (this.isIncludeSearchText(item, index) && !this.getIsHiddenFn()(item, index)) {
303
292
  return true;
304
293
  }
305
294
  // 현재 선택된 항목은 항상 표시
@@ -328,10 +317,7 @@ export class SdSharedDataSelect<
328
317
  });
329
318
 
330
319
  getChildren = (item: SharedDataBase<string | number>): TItem[] => {
331
- return (
332
- this._sortedChildrenMap()?.get(item.__valueKey) ??
333
- []
334
- );
320
+ return this._sortedChildrenMap()?.get(item.__valueKey) ?? [];
335
321
  };
336
322
 
337
323
  async onModalButtonClick(event: MouseEvent): Promise<void> {
@@ -351,10 +337,7 @@ export class SdSharedDataSelect<
351
337
  });
352
338
 
353
339
  if (result != null) {
354
- const newValue =
355
- this.selectMode() === "multi"
356
- ? result.selectedKeys
357
- : result.selectedKeys[0];
340
+ const newValue = this.selectMode() === "multi" ? result.selectedKeys : result.selectedKeys[0];
358
341
  this.value.set(newValue);
359
342
  }
360
343
  }
@@ -92,7 +92,9 @@ interface ConfigItem {
92
92
  <ng-icon [svg]="tablerChevronUp" />
93
93
  </sd-anchor>
94
94
  <sd-anchor
95
- [disabled]="index === items().length - 1 || (item.fixed && !items()[index + 1].fixed)"
95
+ [disabled]="
96
+ index === items().length - 1 || (item.fixed && !items()[index + 1].fixed)
97
+ "
96
98
  (click)="onMoveDown(item)"
97
99
  >
98
100
  <ng-icon [svg]="tablerChevronDown" />
@@ -147,7 +149,7 @@ interface ConfigItem {
147
149
  </sd-sheet>
148
150
  </div>
149
151
 
150
- <div class="p-sm-default flex-row gap-sm bdt bdt-theme-gray-lightest">
152
+ <div class="p-sm-default flex-row gap-sm bdt bdt-hairline">
151
153
  <div class="flex-fill align-start">
152
154
  <sd-button
153
155
  [size]="'sm'"
@@ -167,11 +169,7 @@ interface ConfigItem {
167
169
  >
168
170
  OK
169
171
  </sd-button>
170
- <sd-button
171
- [size]="'sm'"
172
- [buttonStyle]="'min-width: 60px;'"
173
- (click)="onCancelClick()"
174
- >
172
+ <sd-button [size]="'sm'" [buttonStyle]="'min-width: 60px;'" (click)="onCancelClick()">
175
173
  Cancel
176
174
  </sd-button>
177
175
  </div>
@@ -136,7 +136,7 @@ import { SdEvents } from "../../core/events/sd-events";
136
136
  >
137
137
  <ng-icon
138
138
  [svg]="icons.tablerCaretRight"
139
- [class.tx-theme-primary-default]="expanding.isAllExpanded()"
139
+ [class.tx-primary]="expanding.isAllExpanded()"
140
140
  [style.transform]="expanding.isAllExpanded() ? 'rotate(90deg)' : undefined"
141
141
  (click)="expanding.toggleAll()"
142
142
  />
@@ -151,9 +151,7 @@ import { SdEvents } from "../../core/events/sd-events";
151
151
  [attr.rowspan]="cell.rowspan > 1 ? cell.rowspan : null"
152
152
  [attr.data-c]="cell.colIndex"
153
153
  [attr.title]="cell.text"
154
- [style.left.px]="
155
- cell.fixed ? fixing.fixedLeftMap().get(cell.colIndex) : null
156
- "
154
+ [style.left.px]="cell.fixed ? fixing.fixedLeftMap().get(cell.colIndex) : null"
157
155
  >
158
156
  <div class="_p-sheet">
159
157
  <pre>{{ cell.text }}</pre>
@@ -192,7 +190,7 @@ import { SdEvents } from "../../core/events/sd-events";
192
190
  } @else if (_sortDef?.desc === true) {
193
191
  <ng-icon [svg]="icons.tablerSortDescending" />
194
192
  } @else {
195
- <ng-icon [svg]="icons.tablerArrowsSort" class="tx-trans-lightest" />
193
+ <ng-icon [svg]="icons.tablerArrowsSort" class="tx-faint" />
196
194
  }
197
195
  @if (_sortDef?.indexText) {
198
196
  <sub>{{ _sortDef?.indexText }}</sub>
@@ -301,7 +299,7 @@ import { SdEvents } from "../../core/events/sd-events";
301
299
  <ng-icon
302
300
  [svg]="icons.tablerCaretRight"
303
301
  [style.transform]="isExpanded(item) ? 'rotate(90deg)' : undefined"
304
- [class.tx-theme-primary-default]="isExpanded(item)"
302
+ [class.tx-primary]="isExpanded(item)"
305
303
  [attr.aria-expanded]="getAriaExpanded(item)"
306
304
  (click)="onExpandClick($event, item)"
307
305
  />
@@ -361,18 +359,18 @@ import { SdEvents } from "../../core/events/sd-events";
361
359
  $z-index-focus-row-indicator: 6;
362
360
  $z-index-resize-indicator: 7;
363
361
 
364
- $border-color: var(--border-color-lighter);
365
- $border-color-dark: var(--border-color-lighter);
366
- $border-color-darker: var(--border-color-light);
362
+ $border-color: var(--sd-bd-soft);
363
+ $border-color-dark: var(--sd-bd-soft);
364
+ $border-color-darker: var(--sd-bd-default);
367
365
 
368
- $border-radius: var(--border-radius-default);
366
+ $border-radius: var(--sd-radius-default);
369
367
 
370
368
  sd-sheet {
371
369
  border: 1px solid $border-color-dark;
372
370
  border-radius: $border-radius;
373
371
 
374
372
  > ._tool {
375
- background: var(--control-color);
373
+ background-color: var(--sd-bg-control);
376
374
  border-top-left-radius: $border-radius;
377
375
  border-top-right-radius: $border-radius;
378
376
  border-bottom: 1px solid $border-color-dark;
@@ -380,7 +378,8 @@ import { SdEvents } from "../../core/events/sd-events";
380
378
 
381
379
  > ._sheet-container {
382
380
  position: relative;
383
- background: var(--sheet-bg);
381
+ background-color: var(--sd-bg-sheet);
382
+ background-image: var(--sd-bg-sheet-image);
384
383
  border-bottom-left-radius: $border-radius;
385
384
  border-bottom-right-radius: $border-radius;
386
385
  overflow: auto;
@@ -391,6 +390,7 @@ import { SdEvents } from "../../core/events/sd-events";
391
390
  margin-right: 2px;
392
391
  margin-bottom: 2px;
393
392
  border-bottom-right-radius: $border-radius;
393
+ box-shadow: var(--sd-sheet-shadow);
394
394
 
395
395
  > * > tr > *:last-child {
396
396
  border-right: 1px solid $border-color-dark;
@@ -418,14 +418,14 @@ import { SdEvents } from "../../core/events/sd-events";
418
418
  }
419
419
 
420
420
  &._feature-cell {
421
- background: var(--theme-gray-lightest);
422
- min-width: calc(var(--font-size-default) + 2px + var(--sheet-ph) * 2);
423
- padding: var(--sheet-pv) var(--sheet-ph);
421
+ background-color: var(--sd-bg-gray-subtle);
422
+ min-width: calc(var(--sd-font-size-default) + 2px + var(--sd-sheet-ph) * 2);
423
+ padding: var(--sd-sheet-pv) var(--sd-sheet-ph);
424
424
  text-align: left;
425
425
 
426
426
  > ng-icon {
427
427
  cursor: pointer;
428
- color: var(--text-trans-lightest);
428
+ color: var(--sd-tx-faint);
429
429
  }
430
430
  }
431
431
 
@@ -446,7 +446,7 @@ import { SdEvents } from "../../core/events/sd-events";
446
446
 
447
447
  > tr > th {
448
448
  position: relative;
449
- background: var(--theme-gray-lightest);
449
+ background-color: var(--sd-bg-gray-subtle);
450
450
  vertical-align: middle;
451
451
 
452
452
  &._fixed {
@@ -471,8 +471,8 @@ import { SdEvents } from "../../core/events/sd-events";
471
471
 
472
472
  > ._headerContent {
473
473
  > ._sort-icon {
474
- padding: var(--gap-xs) var(--gap-xs) var(--gap-xs) 0;
475
- background-color: var(--theme-gray-lightest);
474
+ padding: var(--sd-gap-xs) var(--sd-gap-xs) var(--sd-gap-xs) 0;
475
+ background-color: var(--sd-bg-gray-subtle);
476
476
  }
477
477
  }
478
478
 
@@ -492,7 +492,7 @@ import { SdEvents } from "../../core/events/sd-events";
492
492
  }
493
493
 
494
494
  > tr._summary-row > th {
495
- background: var(--theme-warning-lightest);
495
+ background-color: var(--sd-bg-warning-subtle);
496
496
  text-align: left;
497
497
  border-bottom: 1px solid $border-color-dark;
498
498
  }
@@ -500,8 +500,8 @@ import { SdEvents } from "../../core/events/sd-events";
500
500
  }
501
501
 
502
502
  > tbody > tr > td {
503
- font-family: var(--font-family-field);
504
- background: var(--control-color);
503
+ font-family: var(--sd-font-family-field);
504
+ background-color: var(--sd-bg-control);
505
505
  vertical-align: top;
506
506
 
507
507
  &._fixed {
@@ -513,8 +513,9 @@ import { SdEvents } from "../../core/events/sd-events";
513
513
  margin-top: 0.4em;
514
514
  width: 0.5em;
515
515
  height: 0.5em;
516
- border-left: 1px solid var(--text-trans-default);
517
- border-bottom: 1px solid var(--text-trans-default);
516
+ // 텍스트 색을 그대로 따르는 눈금 (--text-trans-default 고정과 시각 등가)
517
+ border-left: 1px solid currentColor;
518
+ border-bottom: 1px solid currentColor;
518
519
  vertical-align: top;
519
520
  }
520
521
  }
@@ -524,12 +525,12 @@ import { SdEvents } from "../../core/events/sd-events";
524
525
  display: none;
525
526
  position: absolute;
526
527
  pointer-events: none;
527
- background: rgba(158, 158, 158, 0.1);
528
+ background-color: var(--sd-bg-state-active);
528
529
  z-index: $z-index-focus-row-indicator;
529
530
 
530
531
  > ._focus-cell-indicator {
531
532
  position: absolute;
532
- border: 2px solid var(--theme-primary-default);
533
+ border: 2px solid var(--sd-focus-ring-color);
533
534
  border-radius: $border-radius;
534
535
  }
535
536
  }
@@ -559,14 +560,14 @@ import { SdEvents } from "../../core/events/sd-events";
559
560
  left: 0;
560
561
  position: absolute;
561
562
  pointer-events: none;
562
- background: var(--theme-primary-default);
563
+ background-color: var(--sd-bg-primary-solid);
563
564
  opacity: 0.1;
564
565
  }
565
566
  }
566
567
  }
567
568
 
568
569
  ._p-sheet {
569
- padding: var(--sheet-pv) var(--sheet-ph);
570
+ padding: var(--sd-sheet-pv) var(--sd-sheet-ph);
570
571
  }
571
572
 
572
573
  &[data-sd-focus-mode="row"] {
@@ -66,7 +66,11 @@ export function useSheetCellStyling<T>(options: {
66
66
  return getFixedLeftStyle(colIdx);
67
67
  }
68
68
 
69
- function getCellStyleWithIndent(item: T, colDef: SdSheetColumnDef, colIdx: number): string | null {
69
+ function getCellStyleWithIndent(
70
+ item: T,
71
+ colDef: SdSheetColumnDef,
72
+ colIdx: number,
73
+ ): string | null {
70
74
  const parts: string[] = [];
71
75
  const cellStyle = getCellStyle(item, colDef);
72
76
  if (cellStyle != null) {
@@ -75,13 +79,18 @@ export function useSheetCellStyling<T>(options: {
75
79
  if (colIdx === 0 && options.getChildrenFn() != null) {
76
80
  const itemDef = options.expandingDef(item);
77
81
  if (itemDef.depth > 0) {
78
- parts.push(`padding-left: calc(var(--gap-default) + ${itemDef.depth}em)`);
82
+ parts.push(`padding-left: calc(var(--sd-gap-default) + ${itemDef.depth}em)`);
79
83
  }
80
84
  }
81
85
  return parts.length > 0 ? parts.join("; ") : null;
82
86
  }
83
87
 
84
- function getDataCellClass(item: T, colDef: SdSheetColumnDef, r: number, c: number): string | null {
88
+ function getDataCellClass(
89
+ item: T,
90
+ colDef: SdSheetColumnDef,
91
+ r: number,
92
+ c: number,
93
+ ): string | null {
85
94
  const parts: string[] = [];
86
95
  const classFn = options.getItemCellClassFn();
87
96
  const customClass = classFn != null ? classFn(item, colDef.key) : undefined;
@@ -31,11 +31,11 @@ export interface SdStatePresetDef<TState> {
31
31
  template: `
32
32
  <div class="_sd-state-preset">
33
33
  <sd-anchor (click)="onAddClick()" class="_add-btn">
34
- <ng-icon [svg]="tablerStar" class="tx-theme-warning-default" />
34
+ <ng-icon [svg]="tablerStar" class="tx-warning" />
35
35
  </sd-anchor>
36
36
  @for (preset of _presets(); track preset.name) {
37
37
  <div class="_preset-item">
38
- <sd-anchor class="_preset-name tx-trans-default" (click)="onPresetClick(preset)">
38
+ <sd-anchor class="_preset-name tx-default" (click)="onPresetClick(preset)">
39
39
  {{ preset.name }}
40
40
  </sd-anchor>
41
41
  <sd-anchor class="_preset-save" (click)="onSaveClick(preset)">
@@ -57,52 +57,52 @@ export interface SdStatePresetDef<TState> {
57
57
  > ._sd-state-preset {
58
58
  display: flex;
59
59
  align-items: center;
60
- gap: var(--gap-sm);
60
+ gap: var(--sd-gap-sm);
61
61
  flex-wrap: wrap;
62
62
 
63
63
  > ._add-btn {
64
- line-height: var(--line-height);
64
+ line-height: var(--sd-line-height);
65
65
  border: 1px solid transparent;
66
- padding: var(--gap-sm) var(--gap-default);
66
+ padding: var(--sd-gap-sm) var(--sd-gap-default);
67
67
  }
68
68
 
69
69
  > ._preset-item {
70
70
  display: inline-flex;
71
71
  align-items: center;
72
- gap: var(--gap-xs);
73
- line-height: var(--line-height);
72
+ gap: var(--sd-gap-xs);
73
+ line-height: var(--sd-line-height);
74
74
  border: 1px solid transparent;
75
- border-radius: var(--border-radius-lg);
76
- padding: var(--gap-sm) var(--gap-default);
77
- background: var(--theme-gray-lightest);
75
+ border-radius: var(--sd-radius-lg);
76
+ padding: var(--sd-gap-sm) var(--sd-gap-default);
77
+ background-color: var(--sd-bg-gray-subtle);
78
78
 
79
79
  &:hover {
80
- background: var(--theme-gray-lighter);
80
+ background-color: var(--sd-bg-gray-subtle-hover);
81
81
  }
82
82
 
83
83
  > sd-anchor {
84
- padding: 0 var(--gap-sm);
84
+ padding: 0 var(--sd-gap-sm);
85
85
  }
86
86
  }
87
87
  }
88
88
 
89
89
  &[data-sd-size="sm"] > ._sd-state-preset {
90
90
  > ._add-btn {
91
- padding: var(--gap-xs) var(--gap-default);
91
+ padding: var(--sd-gap-xs) var(--sd-gap-default);
92
92
  }
93
93
 
94
94
  > ._preset-item {
95
- padding: var(--gap-xs) var(--gap-default);
95
+ padding: var(--sd-gap-xs) var(--sd-gap-default);
96
96
  }
97
97
  }
98
98
 
99
99
  &[data-sd-size="lg"] > ._sd-state-preset {
100
100
  > ._add-btn {
101
- padding: var(--gap-default) var(--gap-lg);
101
+ padding: var(--sd-gap-default) var(--sd-gap-lg);
102
102
  }
103
103
 
104
104
  > ._preset-item {
105
- padding: var(--gap-default) var(--gap-lg);
105
+ padding: var(--sd-gap-default) var(--sd-gap-lg);
106
106
  }
107
107
  }
108
108
  }
@@ -21,10 +21,7 @@ import Placeholder from "@tiptap/extension-placeholder";
21
21
  import { Markdown } from "@tiptap/markdown";
22
22
  import { useTiptapToolbar, type TiptapCommand } from "./useTiptapToolbar";
23
23
 
24
- const DEFAULT_EXTENSIONS: AnyExtension[] = [
25
- StarterKit,
26
- Markdown,
27
- ];
24
+ const DEFAULT_EXTENSIONS: AnyExtension[] = [StarterKit, Markdown];
28
25
 
29
26
  @Component({
30
27
  selector: "sd-markdown-editor",
@@ -36,32 +33,86 @@ const DEFAULT_EXTENSIONS: AnyExtension[] = [
36
33
  @if (!disabled() && !readonly()) {
37
34
  <div class="_toolbar">
38
35
  <div class="_btn-group">
39
- <button type="button" data-cmd="h1" [class._active]="activeStates().h1"
40
- (click)="execCmd('h1')">H1</button>
41
- <button type="button" data-cmd="h2" [class._active]="activeStates().h2"
42
- (click)="execCmd('h2')">H2</button>
36
+ <button
37
+ type="button"
38
+ data-cmd="h1"
39
+ [class._active]="activeStates().h1"
40
+ (click)="execCmd('h1')"
41
+ >
42
+ H1
43
+ </button>
44
+ <button
45
+ type="button"
46
+ data-cmd="h2"
47
+ [class._active]="activeStates().h2"
48
+ (click)="execCmd('h2')"
49
+ >
50
+ H2
51
+ </button>
43
52
  </div>
44
53
  <div class="_btn-group">
45
- <button type="button" data-cmd="bold" [class._active]="activeStates().bold"
46
- (click)="execCmd('bold')">B</button>
47
- <button type="button" data-cmd="italic" [class._active]="activeStates().italic"
48
- (click)="execCmd('italic')">I</button>
49
- <button type="button" data-cmd="strike" [class._active]="activeStates().strike"
50
- (click)="execCmd('strike')">S</button>
54
+ <button
55
+ type="button"
56
+ data-cmd="bold"
57
+ [class._active]="activeStates().bold"
58
+ (click)="execCmd('bold')"
59
+ >
60
+ B
61
+ </button>
62
+ <button
63
+ type="button"
64
+ data-cmd="italic"
65
+ [class._active]="activeStates().italic"
66
+ (click)="execCmd('italic')"
67
+ >
68
+ I
69
+ </button>
70
+ <button
71
+ type="button"
72
+ data-cmd="strike"
73
+ [class._active]="activeStates().strike"
74
+ (click)="execCmd('strike')"
75
+ >
76
+ S
77
+ </button>
51
78
  </div>
52
79
  <div class="_btn-group">
53
- <button type="button" data-cmd="bulletList" [class._active]="activeStates().bulletList"
54
- (click)="execCmd('bulletList')">UL</button>
55
- <button type="button" data-cmd="orderedList" [class._active]="activeStates().orderedList"
56
- (click)="execCmd('orderedList')">OL</button>
80
+ <button
81
+ type="button"
82
+ data-cmd="bulletList"
83
+ [class._active]="activeStates().bulletList"
84
+ (click)="execCmd('bulletList')"
85
+ >
86
+ UL
87
+ </button>
88
+ <button
89
+ type="button"
90
+ data-cmd="orderedList"
91
+ [class._active]="activeStates().orderedList"
92
+ (click)="execCmd('orderedList')"
93
+ >
94
+ OL
95
+ </button>
57
96
  <button type="button" data-cmd="indent" (click)="execCmd('indent')">→</button>
58
97
  <button type="button" data-cmd="outdent" (click)="execCmd('outdent')">←</button>
59
98
  </div>
60
99
  <div class="_btn-group">
61
- <button type="button" data-cmd="blockquote" [class._active]="activeStates().blockquote"
62
- (click)="execCmd('blockquote')">❝</button>
63
- <button type="button" data-cmd="codeBlock" [class._active]="activeStates().codeBlock"
64
- (click)="execCmd('codeBlock')">&lt;/&gt;</button>
100
+ <button
101
+ type="button"
102
+ data-cmd="blockquote"
103
+ [class._active]="activeStates().blockquote"
104
+ (click)="execCmd('blockquote')"
105
+ >
106
+
107
+ </button>
108
+ <button
109
+ type="button"
110
+ data-cmd="codeBlock"
111
+ [class._active]="activeStates().codeBlock"
112
+ (click)="execCmd('codeBlock')"
113
+ >
114
+ &lt;/&gt;
115
+ </button>
65
116
  </div>
66
117
  <div class="_btn-group">
67
118
  <button type="button" data-cmd="clean" (click)="execCmd('clean')">Tx</button>
@@ -75,50 +126,50 @@ const DEFAULT_EXTENSIONS: AnyExtension[] = [
75
126
  sd-markdown-editor {
76
127
  display: block;
77
128
  position: relative;
78
- border: 1px solid var(--trans-lighter);
79
- border-radius: var(--border-radius-default);
80
- background: var(--theme-secondary-lightest);
129
+ border: 1px solid var(--sd-bd-field);
130
+ border-radius: var(--sd-radius-default);
131
+ background-color: var(--sd-bg-field);
81
132
 
82
133
  > ._toolbar {
83
134
  display: flex;
84
135
  flex-wrap: wrap;
85
- gap: var(--gap-xs);
86
- padding: var(--gap-xs);
87
- border-bottom: 1px solid var(--trans-lighter);
136
+ gap: var(--sd-gap-xs);
137
+ padding: var(--sd-gap-xs);
138
+ border-bottom: 1px solid var(--sd-bd-hairline);
88
139
 
89
140
  > ._btn-group {
90
141
  display: flex;
91
142
  gap: 1px;
92
143
 
93
144
  > button {
94
- padding: var(--gap-xs) var(--gap-sm);
95
- border: 1px solid var(--trans-lighter);
96
- border-radius: var(--border-radius-default);
97
- background: transparent;
145
+ padding: var(--sd-gap-xs) var(--sd-gap-sm);
146
+ border: 1px solid var(--sd-bd-hairline);
147
+ border-radius: var(--sd-radius-default);
148
+ background-color: transparent;
98
149
  cursor: pointer;
99
- font-size: var(--font-size-default);
150
+ font-size: var(--sd-font-size-default);
100
151
  line-height: 1;
101
152
 
102
153
  &._active {
103
- background: var(--theme-primary-default);
104
- color: var(--text-trans-rev-default);
154
+ background-color: var(--sd-bg-primary-solid);
155
+ color: var(--sd-tx-primary-solid);
105
156
  }
106
157
 
107
158
  &:hover {
108
- background: var(--trans-lighter);
159
+ background-color: var(--sd-bg-state-hover);
109
160
  }
110
161
 
111
162
  &._active:hover {
112
- background: var(--theme-primary-default);
163
+ background-color: var(--sd-bg-primary-solid);
113
164
  }
114
165
  }
115
166
  }
116
167
  }
117
168
 
118
169
  > ._editor-container {
119
- padding: var(--gap-sm);
170
+ padding: var(--sd-gap-sm);
120
171
  min-height: 6.25rem;
121
- font-family: var(--font-family-field);
172
+ font-family: var(--sd-font-family-field);
122
173
 
123
174
  > .tiptap {
124
175
  outline: none;
@@ -129,9 +180,10 @@ const DEFAULT_EXTENSIONS: AnyExtension[] = [
129
180
  }
130
181
  }
131
182
 
183
+ // disabled 는 색 치환 단일 규약 (DEC-009)
132
184
  &[data-sd-disabled="true"] {
133
- background: var(--theme-gray-lightest);
134
- color: var(--text-trans-light);
185
+ background-color: var(--sd-bg-disabled);
186
+ color: var(--sd-tx-disabled);
135
187
 
136
188
  > ._editor-container > .tiptap {
137
189
  cursor: not-allowed;
@@ -245,21 +297,23 @@ export class SdMarkdownEditor {
245
297
  const container = this._elRef.nativeElement.querySelector("._editor-container");
246
298
  if (container == null) return;
247
299
 
248
- this.editor.set(new Editor({
249
- element: container,
250
- extensions,
251
- content: initialContent ?? "",
252
- contentType: "markdown",
253
- editable: untracked(() => !this.disabled() && !this.readonly()),
254
- onUpdate: ({ editor }) => {
255
- const markdown = this._getEditorMarkdownFrom(editor);
256
- this._lastEditorMarkdown = markdown;
257
- this.value.set(markdown);
258
- },
259
- onTransaction: () => {
260
- this._toolbar.refreshActiveStates();
261
- },
262
- }));
300
+ this.editor.set(
301
+ new Editor({
302
+ element: container,
303
+ extensions,
304
+ content: initialContent ?? "",
305
+ contentType: "markdown",
306
+ editable: untracked(() => !this.disabled() && !this.readonly()),
307
+ onUpdate: ({ editor }) => {
308
+ const markdown = this._getEditorMarkdownFrom(editor);
309
+ this._lastEditorMarkdown = markdown;
310
+ this.value.set(markdown);
311
+ },
312
+ onTransaction: () => {
313
+ this._toolbar.refreshActiveStates();
314
+ },
315
+ }),
316
+ );
263
317
  }
264
318
 
265
319
  private _destroyEditor(): void {