@simplysm/angular 14.0.23 → 14.0.24
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/package.json +6 -7
- package/README.md +0 -310
- package/docs/core.md +0 -909
- package/docs/features.md +0 -402
- package/docs/styling.md +0 -309
- package/docs/ui-data.md +0 -249
- package/docs/ui-form.md +0 -421
- package/docs/ui-layout.md +0 -216
- package/docs/ui-navigation.md +0 -243
- package/docs/ui-overlay.md +0 -330
- package/docs/ui-visual.md +0 -131
package/docs/ui-overlay.md
DELETED
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
# UI Overlay
|
|
2
|
-
|
|
3
|
-
Overlay components: dropdowns, modals, toasts, and busy indicators.
|
|
4
|
-
|
|
5
|
-
## `SdDropdownControl`
|
|
6
|
-
|
|
7
|
-
Toggleable dropdown trigger that manages popup positioning, mobile bottom-sheet, and focus lifecycle.
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
@Component({ selector: "sd-dropdown" })
|
|
11
|
-
class SdDropdownControl {
|
|
12
|
-
open = model(false);
|
|
13
|
-
disabled = input(false, { transform: booleanAttribute });
|
|
14
|
-
}
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
| Input | Type | Default | Description |
|
|
18
|
-
|-------|------|---------|-------------|
|
|
19
|
-
| `open` | `boolean` | `false` | Two-way open state |
|
|
20
|
-
| `disabled` | `boolean` | `false` | Disables toggle |
|
|
21
|
-
|
|
22
|
-
Keyboard: ArrowDown opens, ArrowUp/Escape closes, Space toggles.
|
|
23
|
-
|
|
24
|
-
## `SdDropdownPopupControl`
|
|
25
|
-
|
|
26
|
-
Container for dropdown popup content. Auto-caps height at 300px.
|
|
27
|
-
|
|
28
|
-
```typescript
|
|
29
|
-
@Component({ selector: "sd-dropdown-popup" })
|
|
30
|
-
class SdDropdownPopupControl { }
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## `SdModalControl`
|
|
34
|
-
|
|
35
|
-
Modal dialog shell with drag, resize, focus-trap, z-index management, and config persistence.
|
|
36
|
-
|
|
37
|
-
```typescript
|
|
38
|
-
@Component({ selector: "sd-modal" })
|
|
39
|
-
class SdModalControl {
|
|
40
|
-
open = model(false);
|
|
41
|
-
key = input<string>();
|
|
42
|
-
title = input("");
|
|
43
|
-
hideHeader = input(false, { transform: booleanAttribute });
|
|
44
|
-
hideCloseButton = input(false, { transform: booleanAttribute });
|
|
45
|
-
useCloseByBackdrop = input(true, { transform: booleanAttribute });
|
|
46
|
-
useCloseByEscapeKey = input(true, { transform: booleanAttribute });
|
|
47
|
-
float = input(false, { transform: booleanAttribute });
|
|
48
|
-
fill = input(false, { transform: booleanAttribute });
|
|
49
|
-
resizable = input(false, { transform: booleanAttribute });
|
|
50
|
-
movable = input(false, { transform: booleanAttribute });
|
|
51
|
-
position = input<"bottom-right" | "top-right">();
|
|
52
|
-
minHeightPx = input<number>();
|
|
53
|
-
minWidthPx = input<number>();
|
|
54
|
-
heightPx = input<number>();
|
|
55
|
-
widthPx = input<number>();
|
|
56
|
-
headerStyle = input<string>();
|
|
57
|
-
noFirstControlFocusing = input(false, { transform: booleanAttribute });
|
|
58
|
-
actionTplRef = input<TemplateRef<any>>();
|
|
59
|
-
closeRequest = output<void>();
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
| Input | Type | Default | Description |
|
|
64
|
-
|-------|------|---------|-------------|
|
|
65
|
-
| `open` | `boolean` | `false` | Two-way open state |
|
|
66
|
-
| `key` | `string \| undefined` | — | Persistence key for size/position |
|
|
67
|
-
| `title` | `string` | `""` | Modal title |
|
|
68
|
-
| `hideHeader` | `boolean` | `false` | Hides the header bar |
|
|
69
|
-
| `hideCloseButton` | `boolean` | `false` | Hides the X button |
|
|
70
|
-
| `useCloseByBackdrop` | `boolean` | `true` | Close on backdrop click |
|
|
71
|
-
| `useCloseByEscapeKey` | `boolean` | `true` | Close on Escape key |
|
|
72
|
-
| `float` | `boolean` | `false` | Floating (non-centered) modal |
|
|
73
|
-
| `fill` | `boolean` | `false` | Full-screen modal |
|
|
74
|
-
| `resizable` | `boolean` | `false` | Enable resize handles |
|
|
75
|
-
| `movable` | `boolean` | `false` | Enable header drag-to-move |
|
|
76
|
-
| `position` | `"bottom-right" \| "top-right" \| undefined` | — | Fixed position variant |
|
|
77
|
-
| `minHeightPx` | `number \| undefined` | — | Minimum height |
|
|
78
|
-
| `minWidthPx` | `number \| undefined` | — | Minimum width |
|
|
79
|
-
| `heightPx` | `number \| undefined` | — | Initial height |
|
|
80
|
-
| `widthPx` | `number \| undefined` | — | Initial width |
|
|
81
|
-
| `headerStyle` | `string \| undefined` | — | Inline style for header |
|
|
82
|
-
| `noFirstControlFocusing` | `boolean` | `false` | Skip auto-focus on first control |
|
|
83
|
-
|
|
84
|
-
## `SdModalProvider`
|
|
85
|
-
|
|
86
|
-
Programmatically creates and displays modals.
|
|
87
|
-
|
|
88
|
-
```typescript
|
|
89
|
-
@Injectable({ providedIn: "root" })
|
|
90
|
-
class SdModalProvider {
|
|
91
|
-
modalCount: WritableSignal<number>;
|
|
92
|
-
async showAsync<T extends ISdModal<any>>(modal: ISdModalInfo<T>, options?: ISdModalOptions): Promise</* output type */>;
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## `SdActivatedModalProvider`
|
|
97
|
-
|
|
98
|
-
Injected inside a modal component tree to access the modal shell and content.
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
@Injectable()
|
|
102
|
-
class SdActivatedModalProvider<T> {
|
|
103
|
-
modalComponent: WritableSignal<any>;
|
|
104
|
-
contentComponent: WritableSignal<T | undefined>;
|
|
105
|
-
canDeactiveFn: () => boolean;
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## `ISdModal`
|
|
110
|
-
|
|
111
|
-
Contract that modal content components must implement.
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
interface ISdModal<O> {
|
|
115
|
-
initialized: Signal<boolean>;
|
|
116
|
-
close: OutputEmitterRef<O | undefined>;
|
|
117
|
-
actionTplRef?: TemplateRef<any>;
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
| Field | Type | Description |
|
|
122
|
-
|-------|------|-------------|
|
|
123
|
-
| `initialized` | `Signal<boolean>` | Signals when component is ready |
|
|
124
|
-
| `close` | `OutputEmitterRef<O \| undefined>` | Emits result on close |
|
|
125
|
-
| `actionTplRef` | `TemplateRef<any> \| undefined` | Optional action bar template |
|
|
126
|
-
|
|
127
|
-
## `ISdModalInfo`
|
|
128
|
-
|
|
129
|
-
Input descriptor for `SdModalProvider.showAsync`.
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
interface ISdModalInfo<T> {
|
|
133
|
-
title: string;
|
|
134
|
-
type: Type<T>;
|
|
135
|
-
inputs: Omit<TDirectiveInputSignals<T>, "initialized" | "close" | "actionTplRef">;
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
| Field | Type | Description |
|
|
140
|
-
|-------|------|-------------|
|
|
141
|
-
| `title` | `string` | Modal title |
|
|
142
|
-
| `type` | `Type<T>` | Component class |
|
|
143
|
-
| `inputs` | `Omit<TDirectiveInputSignals<T>, ...>` | Input values (excluding modal internals) |
|
|
144
|
-
|
|
145
|
-
## `ISdModalOptions`
|
|
146
|
-
|
|
147
|
-
Display and behavior options for `showAsync`.
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
interface ISdModalOptions {
|
|
151
|
-
key?: string;
|
|
152
|
-
hideHeader?: boolean;
|
|
153
|
-
hideCloseButton?: boolean;
|
|
154
|
-
useCloseByBackdrop?: boolean;
|
|
155
|
-
useCloseByEscapeKey?: boolean;
|
|
156
|
-
float?: boolean;
|
|
157
|
-
fill?: boolean;
|
|
158
|
-
resizable?: boolean;
|
|
159
|
-
movable?: boolean;
|
|
160
|
-
position?: "bottom-right" | "top-right";
|
|
161
|
-
minHeightPx?: number;
|
|
162
|
-
minWidthPx?: number;
|
|
163
|
-
heightPx?: number;
|
|
164
|
-
widthPx?: number;
|
|
165
|
-
headerStyle?: string;
|
|
166
|
-
noFirstControlFocusing?: boolean;
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
## `SdPromptModalControl`
|
|
171
|
-
|
|
172
|
-
Built-in modal with a text input. Implements `ISdModal<string>`.
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
@Component({ selector: "sd-prompt-modal" })
|
|
176
|
-
class SdPromptModalControl implements ISdModal<string> {
|
|
177
|
-
message = input.required<string>();
|
|
178
|
-
close = output<string | undefined>();
|
|
179
|
-
initialized = signal(true);
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
Confirm emits the entered string; cancel emits `undefined`.
|
|
184
|
-
|
|
185
|
-
## `SdConfirmModalControl`
|
|
186
|
-
|
|
187
|
-
Built-in confirm/cancel modal. Implements `ISdModal<boolean>`.
|
|
188
|
-
|
|
189
|
-
```typescript
|
|
190
|
-
@Component({ selector: "sd-confirm-modal" })
|
|
191
|
-
class SdConfirmModalControl implements ISdModal<boolean> {
|
|
192
|
-
message = input.required<string>();
|
|
193
|
-
close = output<boolean | undefined>();
|
|
194
|
-
initialized = signal(true);
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Confirm emits `true`; cancel emits `undefined`.
|
|
199
|
-
|
|
200
|
-
## `SdToastControl`
|
|
201
|
-
|
|
202
|
-
Single toast notification with optional progress bar and slide/fade animation.
|
|
203
|
-
|
|
204
|
-
```typescript
|
|
205
|
-
@Component({ selector: "sd-toast" })
|
|
206
|
-
class SdToastControl {
|
|
207
|
-
open = model(false);
|
|
208
|
-
progress = model(0);
|
|
209
|
-
message = model<string>();
|
|
210
|
-
useProgress = input(false, { transform: booleanAttribute });
|
|
211
|
-
theme = input<TSdToastTheme>("info");
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## `SdToastContainerControl`
|
|
216
|
-
|
|
217
|
-
Fixed-position container for `sd-toast` elements. Stacks vertically at top of viewport.
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
@Component({ selector: "sd-toast-container" })
|
|
221
|
-
class SdToastContainerControl {
|
|
222
|
-
overlap = input(false, { transform: booleanAttribute });
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
| Input | Type | Default | Description |
|
|
227
|
-
|-------|------|---------|-------------|
|
|
228
|
-
| `overlap` | `boolean` | `false` | Single toast as full-bottom overlay |
|
|
229
|
-
|
|
230
|
-
## `SdToastProvider`
|
|
231
|
-
|
|
232
|
-
Programmatic toast creation and display.
|
|
233
|
-
|
|
234
|
-
```typescript
|
|
235
|
-
@Injectable({ providedIn: "root" })
|
|
236
|
-
class SdToastProvider {
|
|
237
|
-
alertThemes: WritableSignal<TSdToastSeverity[]>;
|
|
238
|
-
overlap: WritableSignal<boolean>;
|
|
239
|
-
beforeShowFn?: (theme: TSdToastSeverity) => void;
|
|
240
|
-
|
|
241
|
-
info(message: string, useProgress?: boolean): void | WritableSignal<number>;
|
|
242
|
-
success(message: string, useProgress?: boolean): void | WritableSignal<number>;
|
|
243
|
-
warning(message: string, useProgress?: boolean): void | WritableSignal<number>;
|
|
244
|
-
danger(message: string, useProgress?: boolean): void | WritableSignal<number>;
|
|
245
|
-
async notify<T>(input: ISdToastInput<T>): Promise<any>;
|
|
246
|
-
async try<R>(fn: () => Promise<R>, messageFn?: (err: Error) => string): Promise<R | undefined>;
|
|
247
|
-
}
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
- When `useProgress` is `true`, returns a `WritableSignal<number>` to update progress (0–100).
|
|
251
|
-
- `try`: runs async function; shows `danger` toast on error and logs via `SdSystemLogProvider`.
|
|
252
|
-
|
|
253
|
-
## `TSdToastSeverity`
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
type TSdToastSeverity = "info" | "success" | "warning" | "danger";
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
## `TSdToastTheme`
|
|
260
|
-
|
|
261
|
-
```typescript
|
|
262
|
-
type TSdToastTheme = "primary" | "secondary" | TSdToastSeverity | "gray" | "blue-gray";
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
## `ISdToast`
|
|
266
|
-
|
|
267
|
-
Contract for custom toast content components.
|
|
268
|
-
|
|
269
|
-
```typescript
|
|
270
|
-
interface ISdToast<O> {
|
|
271
|
-
close: OutputEmitterRef<O | undefined>;
|
|
272
|
-
}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
## `ISdToastInput`
|
|
276
|
-
|
|
277
|
-
Input for `SdToastProvider.notify`.
|
|
278
|
-
|
|
279
|
-
```typescript
|
|
280
|
-
interface ISdToastInput<T> {
|
|
281
|
-
type: Type<T>;
|
|
282
|
-
inputs: Omit<TDirectiveInputSignals<T>, "close">;
|
|
283
|
-
}
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
| Field | Type | Description |
|
|
287
|
-
|-------|------|-------------|
|
|
288
|
-
| `type` | `Type<T>` | Toast component class |
|
|
289
|
-
| `inputs` | `Omit<TDirectiveInputSignals<T>, "close">` | Input values |
|
|
290
|
-
|
|
291
|
-
## `SdBusyContainerControl`
|
|
292
|
-
|
|
293
|
-
Overlay that blocks interaction and shows an animated indicator while busy.
|
|
294
|
-
|
|
295
|
-
```typescript
|
|
296
|
-
@Component({ selector: "sd-busy-container" })
|
|
297
|
-
class SdBusyContainerControl {
|
|
298
|
-
busy = input(false, { transform: booleanAttribute });
|
|
299
|
-
message = input<string>();
|
|
300
|
-
type = input<TSdBusyType>();
|
|
301
|
-
progressPercent = input<number>();
|
|
302
|
-
}
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
| Input | Type | Default | Description |
|
|
306
|
-
|-------|------|---------|-------------|
|
|
307
|
-
| `busy` | `boolean` | `false` | Shows overlay when true |
|
|
308
|
-
| `message` | `string \| undefined` | — | Message shown during busy |
|
|
309
|
-
| `type` | `TSdBusyType \| undefined` | provider default | Animation type |
|
|
310
|
-
| `progressPercent` | `number \| undefined` | — | Shows progress bar when set |
|
|
311
|
-
|
|
312
|
-
## `SdBusyProvider`
|
|
313
|
-
|
|
314
|
-
Global busy state manager. Creates a full-screen overlay on `document.body`.
|
|
315
|
-
|
|
316
|
-
```typescript
|
|
317
|
-
@Injectable({ providedIn: "root" })
|
|
318
|
-
class SdBusyProvider {
|
|
319
|
-
type: WritableSignal<TSdBusyType>; // default: "bar"
|
|
320
|
-
globalBusyCount: WritableSignal<number>;
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Increment `globalBusyCount` to show the overlay; decrement to hide.
|
|
325
|
-
|
|
326
|
-
## `TSdBusyType`
|
|
327
|
-
|
|
328
|
-
```typescript
|
|
329
|
-
type TSdBusyType = "spinner" | "bar" | "cube";
|
|
330
|
-
```
|
package/docs/ui-visual.md
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# UI Visual
|
|
2
|
-
|
|
3
|
-
Visual display components: labels, notes, progress bars, calendars, barcodes, and charts.
|
|
4
|
-
|
|
5
|
-
## `SdLabelControl`
|
|
6
|
-
|
|
7
|
-
Inline badge/tag label.
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
@Component({ selector: "sd-label" })
|
|
11
|
-
class SdLabelControl {
|
|
12
|
-
theme = input<"primary" | "secondary" | "info" | "success" | "warning" | "danger" | "gray" | "blue-gray">();
|
|
13
|
-
color = input<string>();
|
|
14
|
-
clickable = input(false, { transform: booleanAttribute });
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
| Input | Type | Default | Description |
|
|
19
|
-
|-------|------|---------|-------------|
|
|
20
|
-
| `theme` | theme token \| undefined | — | Predefined color theme |
|
|
21
|
-
| `color` | `string \| undefined` | — | Custom CSS background color |
|
|
22
|
-
| `clickable` | `boolean` | `false` | Adds hover/cursor styles |
|
|
23
|
-
|
|
24
|
-
## `SdNoteControl`
|
|
25
|
-
|
|
26
|
-
Block-level note/callout box.
|
|
27
|
-
|
|
28
|
-
```typescript
|
|
29
|
-
@Component({ selector: "sd-note" })
|
|
30
|
-
class SdNoteControl {
|
|
31
|
-
theme = input<"primary" | "secondary" | "info" | "success" | "warning" | "danger" | "gray" | "blue-gray">();
|
|
32
|
-
size = input<"sm" | "lg">();
|
|
33
|
-
inset = input(false, { transform: booleanAttribute });
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
| Input | Type | Default | Description |
|
|
38
|
-
|-------|------|---------|-------------|
|
|
39
|
-
| `theme` | theme token \| undefined | — | Color theme |
|
|
40
|
-
| `size` | `"sm" \| "lg" \| undefined` | — | Size variant |
|
|
41
|
-
| `inset` | `boolean` | `false` | Removes border-radius |
|
|
42
|
-
|
|
43
|
-
## `SdProgressControl`
|
|
44
|
-
|
|
45
|
-
Progress bar with percentage label.
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
@Component({ selector: "sd-progress" })
|
|
49
|
-
class SdProgressControl {
|
|
50
|
-
theme = input.required<"primary" | "secondary" | "info" | "success" | "warning" | "danger" | "gray" | "blue-gray">();
|
|
51
|
-
value = input.required<number>();
|
|
52
|
-
inset = input(false, { transform: booleanAttribute });
|
|
53
|
-
size = input<"sm" | "lg">();
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
| Input | Type | Description |
|
|
58
|
-
|-------|------|-------------|
|
|
59
|
-
| `theme` | theme token | Color theme (required) |
|
|
60
|
-
| `value` | `number` | Progress from `0.0` to `1.0` (required) |
|
|
61
|
-
| `inset` | `boolean` | Removes border-radius |
|
|
62
|
-
| `size` | `"sm" \| "lg" \| undefined` | Size variant |
|
|
63
|
-
|
|
64
|
-
## `SdCalendarControl`
|
|
65
|
-
|
|
66
|
-
Month calendar grid that distributes typed items by date.
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
@Component({ selector: "sd-calendar" })
|
|
70
|
-
class SdCalendarControl<T> {
|
|
71
|
-
items = input.required<T[]>();
|
|
72
|
-
getItemDateFn = input.required<(item: T, index: number) => DateOnly>();
|
|
73
|
-
yearMonth = input<DateOnly>(/* first day of current month */);
|
|
74
|
-
weekStartDay = input(0);
|
|
75
|
-
minDaysInFirstWeek = input(1);
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
| Input | Type | Default | Description |
|
|
80
|
-
|-------|------|---------|-------------|
|
|
81
|
-
| `items` | `T[]` | — | Data items (required) |
|
|
82
|
-
| `getItemDateFn` | `(item, index) => DateOnly` | — | Maps item to date (required) |
|
|
83
|
-
| `yearMonth` | `DateOnly` | current month | Month to display |
|
|
84
|
-
| `weekStartDay` | `number` | `0` (Sunday) | First day of week |
|
|
85
|
-
| `minDaysInFirstWeek` | `number` | `1` | Min days in first week |
|
|
86
|
-
|
|
87
|
-
Content template: `SdItemOfTemplateDirective` — template for rendering each item cell.
|
|
88
|
-
|
|
89
|
-
## `SdBarcodeControl`
|
|
90
|
-
|
|
91
|
-
Renders a barcode as inline SVG using bwip-js.
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
@Component({ selector: "sd-barcode" })
|
|
95
|
-
class SdBarcodeControl {
|
|
96
|
-
type = input.required<TBarcodeType>();
|
|
97
|
-
value = input<string>();
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
| Input | Type | Description |
|
|
102
|
-
|-------|------|-------------|
|
|
103
|
-
| `type` | `TBarcodeType` | Barcode format (required) |
|
|
104
|
-
| `value` | `string \| undefined` | Barcode content; empty clears display |
|
|
105
|
-
|
|
106
|
-
## `TBarcodeType`
|
|
107
|
-
|
|
108
|
-
Union of ~100 barcode format strings supported by bwip-js.
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
type TBarcodeType = "qrcode" | "code128" | "ean13" | "pdf417" | "datamatrix" | /* ... ~100 more */;
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## `SdEchartsControl`
|
|
115
|
-
|
|
116
|
-
Apache ECharts wrapper with auto-resize and SVG renderer.
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
@Component({ selector: "sd-echarts" })
|
|
120
|
-
class SdEchartsControl {
|
|
121
|
-
option = input.required<echarts.EChartsOption>();
|
|
122
|
-
notMerge = input(false);
|
|
123
|
-
loading = input(false);
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
| Input | Type | Default | Description |
|
|
128
|
-
|-------|------|---------|-------------|
|
|
129
|
-
| `option` | `echarts.EChartsOption` | — | ECharts configuration (required) |
|
|
130
|
-
| `notMerge` | `boolean` | `false` | Whether to replace options instead of merge |
|
|
131
|
-
| `loading` | `boolean` | `false` | Shows/hides ECharts loading overlay |
|