@simplysm/angular 14.0.101 → 14.1.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/checkbox/sd-checkbox.d.ts.map +1 -1
- package/dist/controls/checkbox/sd-checkbox.js +3 -3
- package/dist/data/crud/sd-crud-list.d.ts +4 -2
- package/dist/data/crud/sd-crud-list.d.ts.map +1 -1
- package/dist/data/crud/sd-crud-list.js +60 -58
- package/dist/features/editor/sd-markdown-editor.d.ts +28 -0
- package/dist/features/editor/sd-markdown-editor.d.ts.map +1 -0
- package/dist/features/editor/sd-markdown-editor.js +250 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/package.json +18 -17
- package/scss/themes/_blueprint-surfaces.scss +34 -28
- package/scss/themes/_variables-blueprint.scss +10 -10
- package/src/controls/checkbox/sd-checkbox.ts +1 -0
- package/src/data/crud/sd-crud-list.ts +24 -22
- package/src/features/editor/sd-markdown-editor.ts +278 -0
- package/src/index.ts +1 -0
- package/styles.css +39 -38
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import {
|
|
2
|
+
booleanAttribute,
|
|
3
|
+
ChangeDetectionStrategy,
|
|
4
|
+
Component,
|
|
5
|
+
computed,
|
|
6
|
+
DestroyRef,
|
|
7
|
+
effect,
|
|
8
|
+
ElementRef,
|
|
9
|
+
inject,
|
|
10
|
+
input,
|
|
11
|
+
model,
|
|
12
|
+
signal,
|
|
13
|
+
untracked,
|
|
14
|
+
ViewEncapsulation,
|
|
15
|
+
type WritableSignal,
|
|
16
|
+
} from "@angular/core";
|
|
17
|
+
import { setupInvalid } from "../../core/validation/setupInvalid";
|
|
18
|
+
import { Editor, type AnyExtension } from "@tiptap/core";
|
|
19
|
+
import StarterKit from "@tiptap/starter-kit";
|
|
20
|
+
import Placeholder from "@tiptap/extension-placeholder";
|
|
21
|
+
import { Markdown } from "@tiptap/markdown";
|
|
22
|
+
import { useTiptapToolbar } from "./useTiptapToolbar";
|
|
23
|
+
|
|
24
|
+
const DEFAULT_EXTENSIONS: AnyExtension[] = [
|
|
25
|
+
StarterKit,
|
|
26
|
+
Markdown,
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
@Component({
|
|
30
|
+
selector: "sd-markdown-editor",
|
|
31
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
32
|
+
encapsulation: ViewEncapsulation.None,
|
|
33
|
+
standalone: true,
|
|
34
|
+
imports: [],
|
|
35
|
+
template: `
|
|
36
|
+
@if (!disabled() && !readonly()) {
|
|
37
|
+
<div class="_toolbar">
|
|
38
|
+
<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>
|
|
43
|
+
</div>
|
|
44
|
+
<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>
|
|
51
|
+
</div>
|
|
52
|
+
<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>
|
|
57
|
+
<button type="button" data-cmd="indent" (click)="execCmd('indent')">→</button>
|
|
58
|
+
<button type="button" data-cmd="outdent" (click)="execCmd('outdent')">←</button>
|
|
59
|
+
</div>
|
|
60
|
+
<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')"></></button>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="_btn-group">
|
|
67
|
+
<button type="button" data-cmd="clean" (click)="execCmd('clean')">Tx</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
}
|
|
71
|
+
<div class="_editor-container"></div>
|
|
72
|
+
`,
|
|
73
|
+
styles: [
|
|
74
|
+
/* language=SCSS */ `
|
|
75
|
+
sd-markdown-editor {
|
|
76
|
+
display: block;
|
|
77
|
+
position: relative;
|
|
78
|
+
border: 1px solid var(--trans-lighter);
|
|
79
|
+
border-radius: var(--border-radius-default);
|
|
80
|
+
background: var(--theme-secondary-lightest);
|
|
81
|
+
|
|
82
|
+
> ._toolbar {
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-wrap: wrap;
|
|
85
|
+
gap: var(--gap-xs);
|
|
86
|
+
padding: var(--gap-xs);
|
|
87
|
+
border-bottom: 1px solid var(--trans-lighter);
|
|
88
|
+
|
|
89
|
+
> ._btn-group {
|
|
90
|
+
display: flex;
|
|
91
|
+
gap: 1px;
|
|
92
|
+
|
|
93
|
+
> 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;
|
|
98
|
+
cursor: pointer;
|
|
99
|
+
font-size: var(--font-size-default);
|
|
100
|
+
line-height: 1;
|
|
101
|
+
|
|
102
|
+
&._active {
|
|
103
|
+
background: var(--theme-primary-default);
|
|
104
|
+
color: var(--text-trans-rev-default);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&:hover {
|
|
108
|
+
background: var(--trans-lighter);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&._active:hover {
|
|
112
|
+
background: var(--theme-primary-default);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
> ._editor-container {
|
|
119
|
+
padding: var(--gap-sm);
|
|
120
|
+
min-height: 6.25rem;
|
|
121
|
+
font-family: var(--font-family-field);
|
|
122
|
+
|
|
123
|
+
> .tiptap {
|
|
124
|
+
outline: none;
|
|
125
|
+
|
|
126
|
+
&:focus {
|
|
127
|
+
outline: none;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
&[data-sd-disabled="true"] {
|
|
133
|
+
background: var(--theme-gray-lightest);
|
|
134
|
+
color: var(--text-trans-light);
|
|
135
|
+
|
|
136
|
+
> ._editor-container > .tiptap {
|
|
137
|
+
cursor: not-allowed;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
&[data-sd-readonly="true"] {
|
|
142
|
+
> ._editor-container > .tiptap {
|
|
143
|
+
cursor: default;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
`,
|
|
148
|
+
],
|
|
149
|
+
host: {
|
|
150
|
+
"[attr.data-sd-disabled]": "disabled()",
|
|
151
|
+
"[attr.data-sd-readonly]": "readonly()",
|
|
152
|
+
},
|
|
153
|
+
})
|
|
154
|
+
export class SdMarkdownEditor {
|
|
155
|
+
value = model<string>();
|
|
156
|
+
disabled = input(false, { transform: booleanAttribute });
|
|
157
|
+
readonly = input(false, { transform: booleanAttribute });
|
|
158
|
+
required = input(false, { transform: booleanAttribute });
|
|
159
|
+
placeholder = input<string>();
|
|
160
|
+
validatorFn = input<(value: string | undefined) => string | undefined>();
|
|
161
|
+
|
|
162
|
+
private readonly _elRef = inject<ElementRef<HTMLElement>>(ElementRef);
|
|
163
|
+
private readonly _destroyRef = inject(DestroyRef);
|
|
164
|
+
|
|
165
|
+
/** @internal -- TipTap Editor 인스턴스. 테스트 및 고급 사용자용 */
|
|
166
|
+
editor: WritableSignal<Editor | undefined> = signal(undefined);
|
|
167
|
+
|
|
168
|
+
private readonly _toolbar = useTiptapToolbar({ editor: this.editor });
|
|
169
|
+
activeStates = this._toolbar.activeStates;
|
|
170
|
+
|
|
171
|
+
private _lastEditorMarkdown: string | undefined;
|
|
172
|
+
private _lastExtensions: AnyExtension[] | undefined;
|
|
173
|
+
|
|
174
|
+
private readonly _resolvedExtensions = computed(() => {
|
|
175
|
+
const ph = this.placeholder();
|
|
176
|
+
if (ph != null) {
|
|
177
|
+
return [...DEFAULT_EXTENSIONS, Placeholder.configure({ placeholder: ph })];
|
|
178
|
+
}
|
|
179
|
+
return DEFAULT_EXTENSIONS;
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
constructor() {
|
|
183
|
+
effect(() => {
|
|
184
|
+
const extensions = this._resolvedExtensions();
|
|
185
|
+
const value = this.value();
|
|
186
|
+
const val = value === "" ? undefined : value;
|
|
187
|
+
if (value === "") {
|
|
188
|
+
untracked(() => this.value.set(undefined));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (this._lastExtensions !== extensions) {
|
|
192
|
+
this._lastExtensions = extensions;
|
|
193
|
+
this._destroyEditor();
|
|
194
|
+
this._createEditor(extensions, val);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (val === this._lastEditorMarkdown) return;
|
|
199
|
+
|
|
200
|
+
const currentEditor = untracked(() => this.editor());
|
|
201
|
+
if (currentEditor == null) return;
|
|
202
|
+
const currentMarkdown = this._getEditorMarkdownFrom(currentEditor);
|
|
203
|
+
if (currentMarkdown === val) return;
|
|
204
|
+
currentEditor.commands.setContent(val ?? "", { contentType: "markdown", emitUpdate: false });
|
|
205
|
+
this._lastEditorMarkdown = undefined;
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
effect(() => {
|
|
209
|
+
const ed = this.editor();
|
|
210
|
+
if (ed == null) return;
|
|
211
|
+
const editable = !this.disabled() && !this.readonly();
|
|
212
|
+
ed.setEditable(editable);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
setupInvalid(() => {
|
|
216
|
+
const errorMessages: string[] = [];
|
|
217
|
+
if (this.value() == null) {
|
|
218
|
+
if (this.required()) {
|
|
219
|
+
errorMessages.push("값을 입력하세요.");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const validatorFn = this.validatorFn();
|
|
224
|
+
if (validatorFn != null) {
|
|
225
|
+
const message = validatorFn(this.value());
|
|
226
|
+
if (message != null) {
|
|
227
|
+
errorMessages.push(message);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return errorMessages.join("\r\n");
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
this._destroyRef.onDestroy(() => {
|
|
235
|
+
this._destroyEditor();
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
execCmd(cmd: string): void {
|
|
240
|
+
if (this.disabled() || this.readonly()) return;
|
|
241
|
+
this._toolbar.execCmd(cmd);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
private _createEditor(extensions: AnyExtension[], initialContent: string | undefined): void {
|
|
245
|
+
const container = this._elRef.nativeElement.querySelector("._editor-container");
|
|
246
|
+
if (container == null) return;
|
|
247
|
+
|
|
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
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private _destroyEditor(): void {
|
|
266
|
+
const ed = untracked(() => this.editor());
|
|
267
|
+
if (ed != null) {
|
|
268
|
+
ed.destroy();
|
|
269
|
+
this.editor.set(undefined);
|
|
270
|
+
}
|
|
271
|
+
this._lastEditorMarkdown = undefined;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
private _getEditorMarkdownFrom(editor: Editor): string | undefined {
|
|
275
|
+
if (editor.isEmpty) return undefined;
|
|
276
|
+
return editor.getMarkdown();
|
|
277
|
+
}
|
|
278
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -264,6 +264,7 @@ export {
|
|
|
264
264
|
|
|
265
265
|
// features/editor
|
|
266
266
|
export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
|
|
267
|
+
export { SdMarkdownEditor } from "./features/editor/sd-markdown-editor";
|
|
267
268
|
|
|
268
269
|
// features/visual
|
|
269
270
|
export { SdLabel } from "./features/visual/sd-label";
|
package/styles.css
CHANGED
|
@@ -492,13 +492,13 @@
|
|
|
492
492
|
filter: invert(1) hue-rotate(180deg);
|
|
493
493
|
}
|
|
494
494
|
.sd-theme-blueprint {
|
|
495
|
-
--theme-gray-lightest: rgb(
|
|
496
|
-
--theme-gray-lighter: rgb(
|
|
497
|
-
--theme-gray-light: rgb(
|
|
498
|
-
--theme-gray-default: rgb(
|
|
499
|
-
--theme-gray-dark: rgb(
|
|
500
|
-
--theme-gray-darker: rgb(
|
|
501
|
-
--theme-gray-darkest: rgb(
|
|
495
|
+
--theme-gray-lightest: rgb(249.965274862, 249.965274862, 249.965274862);
|
|
496
|
+
--theme-gray-lighter: rgb(243.8781621679, 243.8782584823, 244.632450036);
|
|
497
|
+
--theme-gray-light: rgb(211.9273206973, 211.9262145525, 216.3278766188);
|
|
498
|
+
--theme-gray-default: rgb(112.9637770491, 112.9469501767, 123.3700946526);
|
|
499
|
+
--theme-gray-dark: rgb(81.9013746844, 81.8780014744, 92.3374227947);
|
|
500
|
+
--theme-gray-darker: rgb(62.8536504092, 62.8440021684, 70.4985501248);
|
|
501
|
+
--theme-gray-darkest: rgb(38.9887136761, 38.9861462622, 42.2714131908);
|
|
502
502
|
--theme-blue-gray-lightest: rgb(248.1529573248, 249.9108643939, 251.6690680963);
|
|
503
503
|
--theme-blue-gray-lighter: rgb(240.8410507803, 244.9263194607, 249.0113985417);
|
|
504
504
|
--theme-blue-gray-light: rgb(202.0487085986, 213.136127163, 226.4329675211);
|
|
@@ -534,9 +534,9 @@
|
|
|
534
534
|
--theme-success-dark: hsl(149.9515480441, 168.4093941383%, 24.2652557495%);
|
|
535
535
|
--theme-success-darker: hsl(150.0005284119, 143.0825359597%, 20.9804319787%);
|
|
536
536
|
--theme-success-darkest: rgb(1.4779812192, 102.3765397158, 48.0900438304);
|
|
537
|
-
--theme-warning-lightest: hsl(
|
|
538
|
-
--theme-warning-lighter: hsl(
|
|
539
|
-
--theme-warning-light: hsl(
|
|
537
|
+
--theme-warning-lightest: hsl(34.2903094524, 101.2893750504%, 91.682860556%);
|
|
538
|
+
--theme-warning-lighter: hsl(32.1783475455, 100.2607268985%, 82.8640062583%);
|
|
539
|
+
--theme-warning-light: hsl(30.9781472306, 103.8794214342%, 71.2539413381%);
|
|
540
540
|
--theme-warning-default: hsl(31.4330872217, 102.5675912326%, 51.3170331393%);
|
|
541
541
|
--theme-warning-dark: hsl(23.8136653657, 138.2924575772%, 40.3162356329%);
|
|
542
542
|
--theme-warning-darker: hsl(20.5064222619, 127.6827158995%, 34.7800557535%);
|
|
@@ -3728,41 +3728,42 @@ body.sd-theme-blueprint,
|
|
|
3728
3728
|
box-shadow: 5px 5px 0 rgba(28, 62, 156, 0.14);
|
|
3729
3729
|
}
|
|
3730
3730
|
|
|
3731
|
-
.sd-theme-blueprint sd-permission-table table > * > tr > * {
|
|
3732
|
-
border-bottom: 1px solid var(--border-color-lighter);
|
|
3733
|
-
}
|
|
3734
|
-
|
|
3735
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._before,
|
|
3736
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._title,
|
|
3737
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._after {
|
|
3738
|
-
background: var(--trans-lighter);
|
|
3739
|
-
border-top: 1px solid var(--border-color-default);
|
|
3740
|
-
border-bottom: 1px solid var(--border-color-default);
|
|
3741
|
-
color: var(--text-trans-default);
|
|
3742
|
-
font-weight: 700;
|
|
3743
|
-
}
|
|
3744
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._before > *,
|
|
3745
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._title > *,
|
|
3746
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._after > * {
|
|
3747
|
-
color: var(--text-trans-default) !important;
|
|
3748
|
-
}
|
|
3749
|
-
|
|
3750
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=info] > *._title,
|
|
3751
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=info] > *._after,
|
|
3752
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=warning] > *._title,
|
|
3753
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=warning] > *._after,
|
|
3754
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=success] > *._title,
|
|
3755
|
-
.sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=success] > *._after {
|
|
3756
|
-
background: transparent;
|
|
3757
|
-
}
|
|
3758
|
-
|
|
3759
3731
|
.sd-theme-blueprint sd-modal > ._dialog > ._header {
|
|
3760
3732
|
background: var(--theme-primary-default);
|
|
3761
3733
|
color: var(--text-trans-rev-default);
|
|
3762
3734
|
}
|
|
3735
|
+
.sd-theme-blueprint sd-modal > ._dialog > ._header > ._close-btn {
|
|
3736
|
+
color: var(--text-trans-rev-dark);
|
|
3737
|
+
}
|
|
3738
|
+
.sd-theme-blueprint sd-modal > ._dialog > ._header > ._close-btn:hover {
|
|
3739
|
+
color: var(--text-trans-rev-default);
|
|
3740
|
+
}
|
|
3763
3741
|
.sd-theme-blueprint sd-crud-detail > sd-base-container > sd-busy-container > .bg-control > .main-align-end {
|
|
3764
3742
|
background: var(--theme-gray-lightest);
|
|
3765
3743
|
}
|
|
3744
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._before,
|
|
3745
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._title,
|
|
3746
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._after {
|
|
3747
|
+
border-radius: 0;
|
|
3748
|
+
box-shadow: inset 0 -1px 0 var(--border-color-lighter);
|
|
3749
|
+
background: var(--theme-gray-lighter);
|
|
3750
|
+
font-weight: bold;
|
|
3751
|
+
}
|
|
3752
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._before > *,
|
|
3753
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._title > *,
|
|
3754
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._after > * {
|
|
3755
|
+
color: var(--text-trans-default) !important;
|
|
3756
|
+
}
|
|
3757
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=info] > *._title,
|
|
3758
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=info] > *._after,
|
|
3759
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=warning] > *._title,
|
|
3760
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=warning] > *._after,
|
|
3761
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=success] > *._title,
|
|
3762
|
+
.sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=success] > *._after {
|
|
3763
|
+
border-radius: 0;
|
|
3764
|
+
box-shadow: inset 0 -1px 0 var(--border-color-lighter);
|
|
3765
|
+
background: var(--theme-gray-lightest);
|
|
3766
|
+
}
|
|
3766
3767
|
|
|
3767
3768
|
.flex-row {
|
|
3768
3769
|
display: flex !important;
|