@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.
@@ -0,0 +1,250 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, signal, untracked, ViewEncapsulation, } from "@angular/core";
2
+ import { setupInvalid } from "../../core/validation/setupInvalid";
3
+ import { Editor } from "@tiptap/core";
4
+ import StarterKit from "@tiptap/starter-kit";
5
+ import Placeholder from "@tiptap/extension-placeholder";
6
+ import { Markdown } from "@tiptap/markdown";
7
+ import { useTiptapToolbar } from "./useTiptapToolbar";
8
+ import * as i0 from "@angular/core";
9
+ function SdMarkdownEditor_Conditional_0_Template(rf, ctx) { if (rf & 1) {
10
+ const _r1 = i0.ɵɵgetCurrentView();
11
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 2)(2, "button", 3);
12
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("h1")); });
13
+ i0.ɵɵtext(3, "H1");
14
+ i0.ɵɵdomElementEnd();
15
+ i0.ɵɵdomElementStart(4, "button", 4);
16
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("h2")); });
17
+ i0.ɵɵtext(5, "H2");
18
+ i0.ɵɵdomElementEnd()();
19
+ i0.ɵɵdomElementStart(6, "div", 2)(7, "button", 5);
20
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("bold")); });
21
+ i0.ɵɵtext(8, "B");
22
+ i0.ɵɵdomElementEnd();
23
+ i0.ɵɵdomElementStart(9, "button", 6);
24
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("italic")); });
25
+ i0.ɵɵtext(10, "I");
26
+ i0.ɵɵdomElementEnd();
27
+ i0.ɵɵdomElementStart(11, "button", 7);
28
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("strike")); });
29
+ i0.ɵɵtext(12, "S");
30
+ i0.ɵɵdomElementEnd()();
31
+ i0.ɵɵdomElementStart(13, "div", 2)(14, "button", 8);
32
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("bulletList")); });
33
+ i0.ɵɵtext(15, "UL");
34
+ i0.ɵɵdomElementEnd();
35
+ i0.ɵɵdomElementStart(16, "button", 9);
36
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("orderedList")); });
37
+ i0.ɵɵtext(17, "OL");
38
+ i0.ɵɵdomElementEnd();
39
+ i0.ɵɵdomElementStart(18, "button", 10);
40
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("indent")); });
41
+ i0.ɵɵtext(19, "\u2192");
42
+ i0.ɵɵdomElementEnd();
43
+ i0.ɵɵdomElementStart(20, "button", 11);
44
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("outdent")); });
45
+ i0.ɵɵtext(21, "\u2190");
46
+ i0.ɵɵdomElementEnd()();
47
+ i0.ɵɵdomElementStart(22, "div", 2)(23, "button", 12);
48
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("blockquote")); });
49
+ i0.ɵɵtext(24, "\u275D");
50
+ i0.ɵɵdomElementEnd();
51
+ i0.ɵɵdomElementStart(25, "button", 13);
52
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("codeBlock")); });
53
+ i0.ɵɵtext(26, "</>");
54
+ i0.ɵɵdomElementEnd()();
55
+ i0.ɵɵdomElementStart(27, "div", 2)(28, "button", 14);
56
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("clean")); });
57
+ i0.ɵɵtext(29, "Tx");
58
+ i0.ɵɵdomElementEnd()()();
59
+ } if (rf & 2) {
60
+ const ctx_r1 = i0.ɵɵnextContext();
61
+ i0.ɵɵadvance(2);
62
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().h1);
63
+ i0.ɵɵadvance(2);
64
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().h2);
65
+ i0.ɵɵadvance(3);
66
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().bold);
67
+ i0.ɵɵadvance(2);
68
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().italic);
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().strike);
71
+ i0.ɵɵadvance(3);
72
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().bulletList);
73
+ i0.ɵɵadvance(2);
74
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().orderedList);
75
+ i0.ɵɵadvance(7);
76
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().blockquote);
77
+ i0.ɵɵadvance(2);
78
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().codeBlock);
79
+ } }
80
+ const DEFAULT_EXTENSIONS = [
81
+ StarterKit,
82
+ Markdown,
83
+ ];
84
+ export class SdMarkdownEditor {
85
+ value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
86
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
87
+ readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
88
+ required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
89
+ placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
90
+ validatorFn = input(...(ngDevMode ? [undefined, { debugName: "validatorFn" }] : /* istanbul ignore next */ []));
91
+ _elRef = inject(ElementRef);
92
+ _destroyRef = inject(DestroyRef);
93
+ /** @internal -- TipTap Editor 인스턴스. 테스트 및 고급 사용자용 */
94
+ editor = signal(undefined, ...(ngDevMode ? [{ debugName: "editor" }] : /* istanbul ignore next */ []));
95
+ _toolbar = useTiptapToolbar({ editor: this.editor });
96
+ activeStates = this._toolbar.activeStates;
97
+ _lastEditorMarkdown;
98
+ _lastExtensions;
99
+ _resolvedExtensions = computed(() => {
100
+ const ph = this.placeholder();
101
+ if (ph != null) {
102
+ return [...DEFAULT_EXTENSIONS, Placeholder.configure({ placeholder: ph })];
103
+ }
104
+ return DEFAULT_EXTENSIONS;
105
+ }, ...(ngDevMode ? [{ debugName: "_resolvedExtensions" }] : /* istanbul ignore next */ []));
106
+ constructor() {
107
+ effect(() => {
108
+ const extensions = this._resolvedExtensions();
109
+ const value = this.value();
110
+ const val = value === "" ? undefined : value;
111
+ if (value === "") {
112
+ untracked(() => this.value.set(undefined));
113
+ }
114
+ if (this._lastExtensions !== extensions) {
115
+ this._lastExtensions = extensions;
116
+ this._destroyEditor();
117
+ this._createEditor(extensions, val);
118
+ return;
119
+ }
120
+ if (val === this._lastEditorMarkdown)
121
+ return;
122
+ const currentEditor = untracked(() => this.editor());
123
+ if (currentEditor == null)
124
+ return;
125
+ const currentMarkdown = this._getEditorMarkdownFrom(currentEditor);
126
+ if (currentMarkdown === val)
127
+ return;
128
+ currentEditor.commands.setContent(val ?? "", { contentType: "markdown", emitUpdate: false });
129
+ this._lastEditorMarkdown = undefined;
130
+ });
131
+ effect(() => {
132
+ const ed = this.editor();
133
+ if (ed == null)
134
+ return;
135
+ const editable = !this.disabled() && !this.readonly();
136
+ ed.setEditable(editable);
137
+ });
138
+ setupInvalid(() => {
139
+ const errorMessages = [];
140
+ if (this.value() == null) {
141
+ if (this.required()) {
142
+ errorMessages.push("값을 입력하세요.");
143
+ }
144
+ }
145
+ const validatorFn = this.validatorFn();
146
+ if (validatorFn != null) {
147
+ const message = validatorFn(this.value());
148
+ if (message != null) {
149
+ errorMessages.push(message);
150
+ }
151
+ }
152
+ return errorMessages.join("\r\n");
153
+ });
154
+ this._destroyRef.onDestroy(() => {
155
+ this._destroyEditor();
156
+ });
157
+ }
158
+ execCmd(cmd) {
159
+ if (this.disabled() || this.readonly())
160
+ return;
161
+ this._toolbar.execCmd(cmd);
162
+ }
163
+ _createEditor(extensions, initialContent) {
164
+ const container = this._elRef.nativeElement.querySelector("._editor-container");
165
+ if (container == null)
166
+ return;
167
+ this.editor.set(new Editor({
168
+ element: container,
169
+ extensions,
170
+ content: initialContent ?? "",
171
+ contentType: "markdown",
172
+ editable: untracked(() => !this.disabled() && !this.readonly()),
173
+ onUpdate: ({ editor }) => {
174
+ const markdown = this._getEditorMarkdownFrom(editor);
175
+ this._lastEditorMarkdown = markdown;
176
+ this.value.set(markdown);
177
+ },
178
+ onTransaction: () => {
179
+ this._toolbar.refreshActiveStates();
180
+ },
181
+ }));
182
+ }
183
+ _destroyEditor() {
184
+ const ed = untracked(() => this.editor());
185
+ if (ed != null) {
186
+ ed.destroy();
187
+ this.editor.set(undefined);
188
+ }
189
+ this._lastEditorMarkdown = undefined;
190
+ }
191
+ _getEditorMarkdownFrom(editor) {
192
+ if (editor.isEmpty)
193
+ return undefined;
194
+ return editor.getMarkdown();
195
+ }
196
+ static ɵfac = function SdMarkdownEditor_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdMarkdownEditor)(); };
197
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdMarkdownEditor, selectors: [["sd-markdown-editor"]], hostVars: 2, hostBindings: function SdMarkdownEditor_HostBindings(rf, ctx) { if (rf & 2) {
198
+ i0.ɵɵattribute("data-sd-disabled", ctx.disabled())("data-sd-readonly", ctx.readonly());
199
+ } }, inputs: { value: [1, "value"], disabled: [1, "disabled"], readonly: [1, "readonly"], required: [1, "required"], placeholder: [1, "placeholder"], validatorFn: [1, "validatorFn"] }, outputs: { value: "valueChange" }, decls: 2, vars: 1, consts: [[1, "_toolbar"], [1, "_editor-container"], [1, "_btn-group"], ["type", "button", "data-cmd", "h1", 3, "click"], ["type", "button", "data-cmd", "h2", 3, "click"], ["type", "button", "data-cmd", "bold", 3, "click"], ["type", "button", "data-cmd", "italic", 3, "click"], ["type", "button", "data-cmd", "strike", 3, "click"], ["type", "button", "data-cmd", "bulletList", 3, "click"], ["type", "button", "data-cmd", "orderedList", 3, "click"], ["type", "button", "data-cmd", "indent", 3, "click"], ["type", "button", "data-cmd", "outdent", 3, "click"], ["type", "button", "data-cmd", "blockquote", 3, "click"], ["type", "button", "data-cmd", "codeBlock", 3, "click"], ["type", "button", "data-cmd", "clean", 3, "click"]], template: function SdMarkdownEditor_Template(rf, ctx) { if (rf & 1) {
200
+ i0.ɵɵconditionalCreate(0, SdMarkdownEditor_Conditional_0_Template, 30, 18, "div", 0);
201
+ i0.ɵɵdomElement(1, "div", 1);
202
+ } if (rf & 2) {
203
+ i0.ɵɵconditional(!ctx.disabled() && !ctx.readonly() ? 0 : -1);
204
+ } }, styles: ["sd-markdown-editor {\n display: block;\n position: relative;\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: var(--theme-secondary-lightest);\n}\nsd-markdown-editor > ._toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gap-xs);\n padding: var(--gap-xs);\n border-bottom: 1px solid var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group {\n display: flex;\n gap: 1px;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button {\n padding: var(--gap-xs) var(--gap-sm);\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: transparent;\n cursor: pointer;\n font-size: var(--font-size-default);\n line-height: 1;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active {\n background: var(--theme-primary-default);\n color: var(--text-trans-rev-default);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button:hover {\n background: var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active:hover {\n background: var(--theme-primary-default);\n}\nsd-markdown-editor > ._editor-container {\n padding: var(--gap-sm);\n min-height: 6.25rem;\n font-family: var(--font-family-field);\n}\nsd-markdown-editor > ._editor-container > .tiptap {\n outline: none;\n}\nsd-markdown-editor > ._editor-container > .tiptap:focus {\n outline: none;\n}\nsd-markdown-editor[data-sd-disabled=true] {\n background: var(--theme-gray-lightest);\n color: var(--text-trans-light);\n}\nsd-markdown-editor[data-sd-disabled=true] > ._editor-container > .tiptap {\n cursor: not-allowed;\n}\nsd-markdown-editor[data-sd-readonly=true] > ._editor-container > .tiptap {\n cursor: default;\n}"], encapsulation: 2, changeDetection: 0 });
205
+ }
206
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdMarkdownEditor, [{
207
+ type: Component,
208
+ args: [{ selector: "sd-markdown-editor", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [], template: `
209
+ @if (!disabled() && !readonly()) {
210
+ <div class="_toolbar">
211
+ <div class="_btn-group">
212
+ <button type="button" data-cmd="h1" [class._active]="activeStates().h1"
213
+ (click)="execCmd('h1')">H1</button>
214
+ <button type="button" data-cmd="h2" [class._active]="activeStates().h2"
215
+ (click)="execCmd('h2')">H2</button>
216
+ </div>
217
+ <div class="_btn-group">
218
+ <button type="button" data-cmd="bold" [class._active]="activeStates().bold"
219
+ (click)="execCmd('bold')">B</button>
220
+ <button type="button" data-cmd="italic" [class._active]="activeStates().italic"
221
+ (click)="execCmd('italic')">I</button>
222
+ <button type="button" data-cmd="strike" [class._active]="activeStates().strike"
223
+ (click)="execCmd('strike')">S</button>
224
+ </div>
225
+ <div class="_btn-group">
226
+ <button type="button" data-cmd="bulletList" [class._active]="activeStates().bulletList"
227
+ (click)="execCmd('bulletList')">UL</button>
228
+ <button type="button" data-cmd="orderedList" [class._active]="activeStates().orderedList"
229
+ (click)="execCmd('orderedList')">OL</button>
230
+ <button type="button" data-cmd="indent" (click)="execCmd('indent')">→</button>
231
+ <button type="button" data-cmd="outdent" (click)="execCmd('outdent')">←</button>
232
+ </div>
233
+ <div class="_btn-group">
234
+ <button type="button" data-cmd="blockquote" [class._active]="activeStates().blockquote"
235
+ (click)="execCmd('blockquote')">❝</button>
236
+ <button type="button" data-cmd="codeBlock" [class._active]="activeStates().codeBlock"
237
+ (click)="execCmd('codeBlock')">&lt;/&gt;</button>
238
+ </div>
239
+ <div class="_btn-group">
240
+ <button type="button" data-cmd="clean" (click)="execCmd('clean')">Tx</button>
241
+ </div>
242
+ </div>
243
+ }
244
+ <div class="_editor-container"></div>
245
+ `, host: {
246
+ "[attr.data-sd-disabled]": "disabled()",
247
+ "[attr.data-sd-readonly]": "readonly()",
248
+ }, styles: ["sd-markdown-editor {\n display: block;\n position: relative;\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: var(--theme-secondary-lightest);\n}\nsd-markdown-editor > ._toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gap-xs);\n padding: var(--gap-xs);\n border-bottom: 1px solid var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group {\n display: flex;\n gap: 1px;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button {\n padding: var(--gap-xs) var(--gap-sm);\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: transparent;\n cursor: pointer;\n font-size: var(--font-size-default);\n line-height: 1;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active {\n background: var(--theme-primary-default);\n color: var(--text-trans-rev-default);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button:hover {\n background: var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active:hover {\n background: var(--theme-primary-default);\n}\nsd-markdown-editor > ._editor-container {\n padding: var(--gap-sm);\n min-height: 6.25rem;\n font-family: var(--font-family-field);\n}\nsd-markdown-editor > ._editor-container > .tiptap {\n outline: none;\n}\nsd-markdown-editor > ._editor-container > .tiptap:focus {\n outline: none;\n}\nsd-markdown-editor[data-sd-disabled=true] {\n background: var(--theme-gray-lightest);\n color: var(--text-trans-light);\n}\nsd-markdown-editor[data-sd-disabled=true] > ._editor-container > .tiptap {\n cursor: not-allowed;\n}\nsd-markdown-editor[data-sd-readonly=true] > ._editor-container > .tiptap {\n cursor: default;\n}"] }]
249
+ }], () => [], { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], validatorFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "validatorFn", required: false }] }] }); })();
250
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdMarkdownEditor, { className: "SdMarkdownEditor", filePath: "packages/angular/src/features/editor/sd-markdown-editor.ts", lineNumber: 154 }); })();
package/dist/index.d.ts CHANGED
@@ -111,6 +111,7 @@ export { SdThemeProvider } from "./features/theme/sd-theme-provider";
111
111
  export { SdThemeSelector } from "./features/theme/sd-theme-selector";
112
112
  export { SdAddressSearchModal, type Address, } from "./features/address/sd-address-search.modal";
113
113
  export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
114
+ export { SdMarkdownEditor } from "./features/editor/sd-markdown-editor";
114
115
  export { SdLabel } from "./features/visual/sd-label";
115
116
  export { SdNote } from "./features/visual/sd-note";
116
117
  export { SdProgress } from "./features/visual/sd-progress";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -148,6 +148,7 @@ export { SdThemeSelector } from "./features/theme/sd-theme-selector";
148
148
  export { SdAddressSearchModal, } from "./features/address/sd-address-search.modal";
149
149
  // features/editor
150
150
  export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
151
+ export { SdMarkdownEditor } from "./features/editor/sd-markdown-editor";
151
152
  // features/visual
152
153
  export { SdLabel } from "./features/visual/sd-label";
153
154
  export { SdNote } from "./features/visual/sd-note";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/angular",
3
- "version": "14.0.101",
3
+ "version": "14.1.1",
4
4
  "description": "심플리즘 패키지 - Angular",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -33,28 +33,29 @@
33
33
  "@angular/service-worker": "^21.2.17",
34
34
  "@ng-icons/core": "^33.2.4",
35
35
  "@ng-icons/tabler-icons": "^33.2.4",
36
- "@tiptap/core": "^3.26.1",
37
- "@tiptap/extension-color": "^3.26.1",
38
- "@tiptap/extension-document": "^3.26.1",
39
- "@tiptap/extension-highlight": "^3.26.1",
40
- "@tiptap/extension-image": "^3.26.1",
41
- "@tiptap/extension-paragraph": "^3.26.1",
42
- "@tiptap/extension-placeholder": "^3.26.1",
43
- "@tiptap/extension-text": "^3.26.1",
44
- "@tiptap/extension-text-align": "^3.26.1",
45
- "@tiptap/extension-text-style": "^3.26.1",
46
- "@tiptap/extension-underline": "^3.26.1",
47
- "@tiptap/starter-kit": "^3.26.1",
36
+ "@tiptap/core": "^3.27.1",
37
+ "@tiptap/extension-color": "^3.27.1",
38
+ "@tiptap/extension-document": "^3.27.1",
39
+ "@tiptap/extension-highlight": "^3.27.1",
40
+ "@tiptap/extension-image": "^3.27.1",
41
+ "@tiptap/extension-paragraph": "^3.27.1",
42
+ "@tiptap/extension-placeholder": "^3.27.1",
43
+ "@tiptap/extension-text": "^3.27.1",
44
+ "@tiptap/extension-text-align": "^3.27.1",
45
+ "@tiptap/extension-text-style": "^3.27.1",
46
+ "@tiptap/extension-underline": "^3.27.1",
47
+ "@tiptap/markdown": "^3.27.1",
48
+ "@tiptap/starter-kit": "^3.27.1",
48
49
  "bwip-js": "^4.11.1",
49
50
  "echarts": "^6.1.0",
50
51
  "html-to-image": "^1.11.13",
51
52
  "jspdf": "^4.2.1",
52
53
  "rxjs": "^7.8.2",
53
54
  "tabbable": "^6.4.0",
54
- "@simplysm/core-browser": "14.0.101",
55
- "@simplysm/service-client": "14.0.101",
56
- "@simplysm/core-common": "14.0.101",
57
- "@simplysm/service-common": "14.0.101"
55
+ "@simplysm/core-browser": "14.1.1",
56
+ "@simplysm/core-common": "14.1.1",
57
+ "@simplysm/service-client": "14.1.1",
58
+ "@simplysm/service-common": "14.1.1"
58
59
  },
59
60
  "devDependencies": {
60
61
  "@angular/compiler": "^21.2.17",
@@ -41,41 +41,47 @@ body.sd-theme-blueprint,
41
41
  }
42
42
  }
43
43
 
44
- .sd-theme-blueprint sd-permission-table table > * > tr > * {
45
- border-bottom: 1px solid var(--border-color-lighter);
46
- }
47
-
48
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="first"] > *._before,
49
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="first"] > *._title,
50
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="first"] > *._after {
51
- background: var(--trans-lighter);
52
- border-top: 1px solid var(--border-color-default);
53
- border-bottom: 1px solid var(--border-color-default);
54
- color: var(--text-trans-default);
55
- font-weight: 700;
56
-
57
- > * {
58
- color: var(--text-trans-default) !important;
59
- }
60
- }
61
-
62
- // 하위 depth 틴트(info/warning/success lightest) 제거 → 무지, 행 헤어라인으로만 구분
63
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="info"] > *._title,
64
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="info"] > *._after,
65
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="warning"] > *._title,
66
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="warning"] > *._after,
67
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="success"] > *._title,
68
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="success"] > *._after {
69
- background: transparent;
70
- }
71
-
72
44
  .sd-theme-blueprint {
73
45
  sd-modal > ._dialog > ._header {
74
46
  background: var(--theme-primary-default);
75
47
  color: var(--text-trans-rev-default);
48
+
49
+ > ._close-btn {
50
+ color: var(--text-trans-rev-dark);
51
+
52
+ &:hover {
53
+ color: var(--text-trans-rev-default);
54
+ }
55
+ }
76
56
  }
77
57
 
78
58
  sd-crud-detail > sd-base-container > sd-busy-container > .bg-control > .main-align-end {
79
59
  background: var(--theme-gray-lightest);
80
60
  }
61
+
62
+ sd-permission-table {
63
+ > table > * > tr[data-sd-theme="first"] > *._before,
64
+ > table > * > tr[data-sd-theme="first"] > *._title,
65
+ > table > * > tr[data-sd-theme="first"] > *._after {
66
+ border-radius: 0;
67
+ box-shadow: inset 0 -1px 0 var(--border-color-lighter);
68
+ background: var(--theme-gray-lighter);
69
+ font-weight: bold;
70
+
71
+ > * {
72
+ color: var(--text-trans-default) !important;
73
+ }
74
+ }
75
+
76
+ > table > * > tr[data-sd-theme="info"] > *._title,
77
+ > table > * > tr[data-sd-theme="info"] > *._after,
78
+ > table > * > tr[data-sd-theme="warning"] > *._title,
79
+ > table > * > tr[data-sd-theme="warning"] > *._after,
80
+ > table > * > tr[data-sd-theme="success"] > *._title,
81
+ > table > * > tr[data-sd-theme="success"] > *._after {
82
+ border-radius: 0;
83
+ box-shadow: inset 0 -1px 0 var(--border-color-lighter);
84
+ background: var(--theme-gray-lightest);
85
+ }
86
+ }
81
87
  }
@@ -5,13 +5,13 @@
5
5
  $paper: (
6
6
  theme: (
7
7
  "gray": (
8
- lightest: colors.get(stone, 50),
9
- lighter: colors.get(stone, 100),
10
- light: colors.get(stone, 300),
11
- default: colors.get(stone, 500),
12
- dark: colors.get(stone, 600),
13
- darker: colors.get(stone, 700),
14
- darkest: colors.get(stone, 800)
8
+ lightest: colors.get(zinc, 50),
9
+ lighter: colors.get(zinc, 100),
10
+ light: colors.get(zinc, 300),
11
+ default: colors.get(zinc, 500),
12
+ dark: colors.get(zinc, 600),
13
+ darker: colors.get(zinc, 700),
14
+ darkest: colors.get(zinc, 800)
15
15
  ),
16
16
  blue-gray: (
17
17
  lightest: colors.get(slate, 50),
@@ -59,9 +59,9 @@ $paper: (
59
59
  darkest: colors.get(green, 800)
60
60
  ),
61
61
  warning: (
62
- lightest: colors.get(orange, 50),
63
- lighter: colors.get(orange, 100),
64
- light: colors.get(orange, 200),
62
+ lightest: colors.get(orange, 100),
63
+ lighter: colors.get(orange, 200),
64
+ light: colors.get(orange, 300),
65
65
  default: colors.get(orange, 400),
66
66
  dark: colors.get(orange, 600),
67
67
  darker: colors.get(orange, 700),
@@ -96,6 +96,7 @@ import { tablerCheck } from "@ng-icons/tabler-icons";
96
96
 
97
97
  &[data-sd-checked="true"] {
98
98
  > ._indicator_rect {
99
+ border-color: var(--theme-primary-default);
99
100
  background: var(--theme-primary-default);
100
101
 
101
102
  > ._indicator {
@@ -131,33 +131,33 @@ import {
131
131
  </sd-form>
132
132
  }
133
133
 
134
- @if (!readonly() || toolTplRef()) {
134
+ @if (canCreate() || canDelete() || toolTplRef()) {
135
135
  <div class="flex-row gap-sm p-xs-default">
136
- @if (!readonly()) {
136
+ @if (canCreate()) {
137
137
  <sd-button [size]="'sm'" [theme]="'link-primary'" (click)="create.emit()">
138
138
  <ng-icon [svg]="tablerCirclePlus" />
139
139
  등록
140
140
  </sd-button>
141
- @if (selectMode() !== "single") {
141
+ }
142
+ @if (canDelete() && selectMode() !== "single") {
143
+ <sd-button
144
+ [size]="'sm'"
145
+ [theme]="'link-danger'"
146
+ (click)="delete.emit(currSelectedItems())"
147
+ [disabled]="!hasSelectedNotDeleted()"
148
+ >
149
+ <ng-icon [svg]="tablerEraser" />
150
+ 선택 삭제
151
+ </sd-button>
152
+ @if (hasSelectedDeleted()) {
142
153
  <sd-button
143
154
  [size]="'sm'"
144
- [theme]="'link-danger'"
145
- (click)="delete.emit(currSelectedItems())"
146
- [disabled]="!hasSelectedNotDeleted()"
155
+ [theme]="'link-warning'"
156
+ (click)="restore.emit(currSelectedItems())"
147
157
  >
148
- <ng-icon [svg]="tablerEraser" />
149
- 선택 삭제
158
+ <ng-icon [svg]="tablerRestore" />
159
+ 선택 복구
150
160
  </sd-button>
151
- @if (hasSelectedDeleted()) {
152
- <sd-button
153
- [size]="'sm'"
154
- [theme]="'link-warning'"
155
- (click)="restore.emit(currSelectedItems())"
156
- >
157
- <ng-icon [svg]="tablerRestore" />
158
- 선택 복구
159
- </sd-button>
160
- }
161
161
  }
162
162
  }
163
163
 
@@ -190,7 +190,7 @@ import {
190
190
  [visiblePageCount]="visiblePageCount()"
191
191
  [(sorts)]="sorts"
192
192
  [useAutoSort]="totalPageCount() === 0"
193
- [selectMode]="selectMode() ?? (readonly() ? undefined : 'multi')"
193
+ [selectMode]="selectMode() ?? (canDelete() ? 'multi' : undefined)"
194
194
  [(selectedKeys)]="selectedKeys"
195
195
  [getItemSelectableFn]="getItemSelectableFn()"
196
196
  [trackByFn]="trackByFn()"
@@ -199,7 +199,7 @@ import {
199
199
  [columnControlsInput]="columnControls()"
200
200
  (selectedKeysChange)="onSelectedKeysChange()"
201
201
  >
202
- @if (inlineEditEnabled()) {
202
+ @if (canDelete() && inlineEdit()) {
203
203
  <sd-sheet-column
204
204
  [fixed]="true"
205
205
  [key]="'deleteButton'"
@@ -234,7 +234,9 @@ export class SdCrudList<TItem, TKey> {
234
234
  initialized = input(false);
235
235
  busyCount = model(0);
236
236
  restricted = input(false);
237
- readonly = input(false);
237
+ canCreate = input(true);
238
+ canEdit = input(true);
239
+ canDelete = input(true);
238
240
  inlineEdit = input(true);
239
241
  viewType = input.required<SdViewType>();
240
242
  selectMode = input<"single" | "multi">();
@@ -277,7 +279,7 @@ export class SdCrudList<TItem, TKey> {
277
279
 
278
280
  columnControls = contentChildren(SdSheetColumn);
279
281
 
280
- inlineEditEnabled = computed(() => !this.readonly() && this.inlineEdit());
282
+ inlineEditEnabled = computed(() => this.canEdit() && this.inlineEdit());
281
283
 
282
284
  hasSelectedDeleted = computed(() => this.currSelectedItems().some((it) => this.isDeleted(it)));
283
285
  hasSelectedNotDeleted = computed(() =>