@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.
- package/dist/controls/button/sd-additional-button.js +2 -2
- package/dist/controls/button/sd-anchor.d.ts.map +1 -1
- package/dist/controls/button/sd-anchor.js +3 -3
- package/dist/controls/button/sd-button.d.ts.map +1 -1
- package/dist/controls/button/sd-button.js +3 -3
- package/dist/controls/button/sd-modal-select-button.d.ts.map +1 -1
- package/dist/controls/button/sd-modal-select-button.js +2 -2
- package/dist/controls/checkbox/sd-checkbox.d.ts.map +1 -1
- package/dist/controls/checkbox/sd-checkbox.js +3 -3
- package/dist/controls/checkbox/sd-switch.d.ts.map +1 -1
- package/dist/controls/checkbox/sd-switch.js +3 -3
- package/dist/controls/collapse/sd-collapse-icon.d.ts +1 -1
- package/dist/controls/collapse/sd-collapse-icon.d.ts.map +1 -1
- package/dist/controls/collapse/sd-collapse-icon.js +2 -2
- package/dist/controls/collapse/sd-collapse.d.ts +1 -1
- package/dist/controls/collapse/sd-collapse.d.ts.map +1 -1
- package/dist/controls/collapse/sd-collapse.js +2 -2
- package/dist/controls/dropdown/sd-dropdown-popup.d.ts.map +1 -1
- package/dist/controls/dropdown/sd-dropdown-popup.js +2 -2
- package/dist/controls/dropdown/sd-dropdown.js +1 -1
- package/dist/controls/gap/sd-gap.d.ts.map +1 -1
- package/dist/controls/gap/sd-gap.js +5 -7
- package/dist/controls/input/sd-date-range-picker.js +2 -2
- package/dist/controls/input/sd-numpad.d.ts.map +1 -1
- package/dist/controls/input/sd-numpad.js +7 -15
- package/dist/controls/input/sd-range.js +2 -2
- package/dist/controls/input/sd-textarea.js +4 -4
- package/dist/controls/input/sd-textfield.d.ts.map +1 -1
- package/dist/controls/input/sd-textfield.js +10 -10
- package/dist/controls/list/sd-list-item.js +43 -43
- package/dist/controls/list/sd-list.js +2 -2
- package/dist/controls/pagination/sd-pagination.d.ts.map +1 -1
- package/dist/controls/pagination/sd-pagination.js +7 -5
- package/dist/controls/select/sd-select-button.d.ts.map +1 -1
- package/dist/controls/select/sd-select-button.js +4 -4
- package/dist/controls/select/sd-select-item.d.ts.map +1 -1
- package/dist/controls/select/sd-select-item.js +3 -3
- package/dist/controls/select/sd-select.d.ts.map +1 -1
- package/dist/controls/select/sd-select.js +10 -19
- package/dist/controls/tab/sd-tab-item.js +2 -2
- package/dist/controls/tab/sd-tab.js +2 -2
- package/dist/core/busy/sd-busy-container.d.ts.map +1 -1
- package/dist/core/busy/sd-busy-container.js +3 -3
- package/dist/core/modal/sd-modal.d.ts.map +1 -1
- package/dist/core/modal/sd-modal.js +3 -3
- package/dist/core/provideSdAngular.d.ts.map +1 -1
- package/dist/core/provideSdAngular.js +31 -10
- package/dist/core/ripple/setupRipple.js +2 -2
- package/dist/core/setupBgTheme.d.ts +0 -1
- package/dist/core/setupBgTheme.d.ts.map +1 -1
- package/dist/core/setupBgTheme.js +3 -4
- package/dist/core/show-effect/setupRevealOnShow.js +1 -1
- package/dist/core/toast/sd-toast-container.js +2 -2
- package/dist/core/toast/sd-toast.d.ts.map +1 -1
- package/dist/core/toast/sd-toast.js +3 -3
- package/dist/core/validation/setupInvalid.js +5 -5
- package/dist/data/crud/sd-base-container.d.ts.map +1 -1
- package/dist/data/crud/sd-base-container.js +50 -52
- package/dist/data/kanban/sd-kanban-board.js +2 -2
- package/dist/data/kanban/sd-kanban-lane.d.ts.map +1 -1
- package/dist/data/kanban/sd-kanban-lane.js +4 -4
- package/dist/data/kanban/sd-kanban.d.ts.map +1 -1
- package/dist/data/kanban/sd-kanban.js +4 -4
- package/dist/data/permission-table/sd-permission-table.d.ts.map +1 -1
- package/dist/data/permission-table/sd-permission-table.js +5 -17
- package/dist/data/shared-data/sd-shared-data-select-list.d.ts.map +1 -1
- package/dist/data/shared-data/sd-shared-data-select-list.js +5 -19
- package/dist/data/shared-data/sd-shared-data-select.d.ts.map +1 -1
- package/dist/data/shared-data/sd-shared-data-select.js +8 -15
- package/dist/data/sheet/sd-sheet-config.modal.d.ts.map +1 -1
- package/dist/data/sheet/sd-sheet-config.modal.js +7 -9
- package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
- package/dist/data/sheet/sd-sheet.js +10 -12
- package/dist/data/sheet/useSheetCellStyling.d.ts.map +1 -1
- package/dist/data/sheet/useSheetCellStyling.js +1 -1
- package/dist/data/state-preset/sd-state-preset.js +5 -5
- package/dist/features/editor/sd-markdown-editor.d.ts.map +1 -1
- package/dist/features/editor/sd-markdown-editor.js +85 -34
- package/dist/features/editor/sd-tiptap-editor.d.ts.map +1 -1
- package/dist/features/editor/sd-tiptap-editor.js +192 -61
- package/dist/features/theme/sd-theme-provider.d.ts +18 -1
- package/dist/features/theme/sd-theme-provider.d.ts.map +1 -1
- package/dist/features/theme/sd-theme-provider.js +21 -4
- package/dist/features/theme/sd-theme-selector.d.ts.map +1 -1
- package/dist/features/theme/sd-theme-selector.js +50 -9
- package/dist/features/theme/wcag-contrast.d.ts +9 -0
- package/dist/features/theme/wcag-contrast.d.ts.map +1 -0
- package/dist/features/theme/wcag-contrast.js +83 -0
- package/dist/features/visual/sd-calendar.js +2 -2
- package/dist/features/visual/sd-label.d.ts.map +1 -1
- package/dist/features/visual/sd-label.js +5 -5
- package/dist/features/visual/sd-note.d.ts.map +1 -1
- package/dist/features/visual/sd-note.js +3 -3
- package/dist/features/visual/sd-progress.d.ts.map +1 -1
- package/dist/features/visual/sd-progress.js +3 -3
- package/dist/index.d.ts +12 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -9
- package/dist/layout/sidebar/sd-sidebar-container.d.ts.map +1 -1
- package/dist/layout/sidebar/sd-sidebar-container.js +11 -5
- package/dist/layout/sidebar/sd-sidebar-menu.d.ts.map +1 -1
- package/dist/layout/sidebar/sd-sidebar-menu.js +5 -17
- package/dist/layout/sidebar/sd-sidebar-user.js +32 -32
- package/dist/layout/sidebar/sd-sidebar.d.ts.map +1 -1
- package/dist/layout/sidebar/sd-sidebar.js +3 -3
- package/dist/layout/topbar/sd-topbar-menu.js +5 -5
- package/dist/layout/topbar/sd-topbar.d.ts.map +1 -1
- package/dist/layout/topbar/sd-topbar.js +5 -5
- package/package.json +5 -5
- package/scss/commons/_colors.scss +296 -242
- package/scss/commons/_density.scss +23 -0
- package/scss/commons/_mixins.scss +142 -129
- package/scss/commons/_styles.scss +78 -103
- package/scss/commons/_theme-variables.scss +16 -2
- package/scss/commons/_variables.scss +277 -149
- package/scss/controls/_card.scss +12 -8
- package/scss/controls/_form-box.scss +7 -7
- package/scss/controls/_form-table.scss +7 -7
- package/scss/controls/_table.scss +5 -5
- package/scss/sd-tokens.md +132 -0
- package/scss/styles.scss +3 -4
- package/scss/themes/_variables-blueprint.scss +127 -81
- package/scss/themes/_variables-ide-dark.scss +215 -0
- package/src/controls/button/sd-additional-button.ts +12 -12
- package/src/controls/button/sd-anchor.ts +7 -8
- package/src/controls/button/sd-button.ts +42 -44
- package/src/controls/button/sd-modal-select-button.ts +15 -19
- package/src/controls/checkbox/sd-checkbox.ts +55 -43
- package/src/controls/checkbox/sd-switch.ts +18 -19
- package/src/controls/collapse/sd-collapse-icon.ts +2 -2
- package/src/controls/collapse/sd-collapse.ts +2 -2
- package/src/controls/dropdown/sd-dropdown-popup.ts +10 -12
- package/src/controls/dropdown/sd-dropdown.ts +1 -1
- package/src/controls/gap/sd-gap.ts +11 -9
- package/src/controls/input/sd-date-range-picker.ts +1 -1
- package/src/controls/input/sd-numpad.ts +3 -11
- package/src/controls/input/sd-range.ts +1 -1
- package/src/controls/input/sd-textarea.ts +18 -18
- package/src/controls/input/sd-textfield.ts +39 -37
- package/src/controls/list/sd-list-item.ts +195 -195
- package/src/controls/list/sd-list.ts +8 -8
- package/src/controls/pagination/sd-pagination.ts +4 -2
- package/src/controls/select/sd-select-button.ts +6 -10
- package/src/controls/select/sd-select-item.ts +14 -15
- package/src/controls/select/sd-select.ts +34 -35
- package/src/controls/tab/sd-tab-item.ts +4 -4
- package/src/controls/tab/sd-tab.ts +2 -2
- package/src/core/busy/sd-busy-container.ts +17 -16
- package/src/core/modal/sd-modal.ts +38 -32
- package/src/core/provideSdAngular.ts +34 -10
- package/src/core/ripple/setupRipple.ts +2 -2
- package/src/core/setupBgTheme.ts +5 -14
- package/src/core/show-effect/setupRevealOnShow.ts +1 -1
- package/src/core/toast/sd-toast-container.ts +5 -5
- package/src/core/toast/sd-toast.ts +16 -17
- package/src/core/validation/setupInvalid.ts +5 -5
- package/src/data/crud/sd-base-container.ts +120 -122
- package/src/data/kanban/sd-kanban-board.ts +1 -1
- package/src/data/kanban/sd-kanban-lane.ts +9 -14
- package/src/data/kanban/sd-kanban.ts +9 -19
- package/src/data/permission-table/sd-permission-table.ts +12 -20
- package/src/data/shared-data/sd-shared-data-select-list.ts +5 -19
- package/src/data/shared-data/sd-shared-data-select.ts +11 -28
- package/src/data/sheet/sd-sheet-config.modal.ts +5 -7
- package/src/data/sheet/sd-sheet.ts +29 -28
- package/src/data/sheet/useSheetCellStyling.ts +12 -3
- package/src/data/state-preset/sd-state-preset.ts +16 -16
- package/src/features/editor/sd-markdown-editor.ts +110 -56
- package/src/features/editor/sd-tiptap-editor.ts +214 -81
- package/src/features/theme/sd-theme-provider.ts +28 -3
- package/src/features/theme/sd-theme-selector.ts +21 -2
- package/src/features/theme/wcag-contrast.ts +103 -0
- package/src/features/visual/sd-calendar.ts +8 -8
- package/src/features/visual/sd-label.ts +11 -12
- package/src/features/visual/sd-note.ts +10 -11
- package/src/features/visual/sd-progress.ts +9 -11
- package/src/index.ts +15 -40
- package/src/layout/sidebar/sd-sidebar-container.ts +21 -8
- package/src/layout/sidebar/sd-sidebar-menu.ts +15 -17
- package/src/layout/sidebar/sd-sidebar-user.ts +100 -100
- package/src/layout/sidebar/sd-sidebar.ts +7 -9
- package/src/layout/topbar/sd-topbar-menu.ts +3 -3
- package/src/layout/topbar/sd-topbar.ts +12 -14
- package/styles.css +1641 -2462
- 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-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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]="
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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(--
|
|
365
|
-
$border-color-dark: var(--
|
|
366
|
-
$border-color-darker: var(--
|
|
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(--
|
|
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
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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
|
|
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
|
-
|
|
517
|
-
border-
|
|
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:
|
|
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(--
|
|
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(--
|
|
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(
|
|
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(
|
|
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-
|
|
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-
|
|
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(--
|
|
76
|
-
padding: var(--gap-sm) var(--gap-default);
|
|
77
|
-
background: var(--
|
|
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(--
|
|
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
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
+
</>
|
|
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(--
|
|
79
|
-
border-radius: var(--
|
|
80
|
-
background: var(--
|
|
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(--
|
|
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(--
|
|
96
|
-
border-radius: var(--
|
|
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(--
|
|
104
|
-
color: var(--
|
|
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(--
|
|
159
|
+
background-color: var(--sd-bg-state-hover);
|
|
109
160
|
}
|
|
110
161
|
|
|
111
162
|
&._active:hover {
|
|
112
|
-
background: var(--
|
|
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(--
|
|
134
|
-
color: var(--
|
|
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(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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 {
|