@xiriframework/xiri-ng 0.4.9 → 0.4.11
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/fesm2022/xiriframework-xiri-ng.mjs +397 -76
- package/fesm2022/xiriframework-xiri-ng.mjs.map +1 -1
- package/package.json +1 -1
- package/skills/xiri-ng-expert/SKILL.md +21 -3
- package/skills/xiri-ng-expert/references/components.md +29 -2
- package/skills/xiri-ng-expert/references/form-fields.md +54 -2
- package/skills/xiri-ng-expert/references/setup.md +38 -8
- package/types/xiriframework-xiri-ng.d.ts +117 -18
- package/types/xiriframework-xiri-ng.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: xiri-ng-expert
|
|
3
|
-
description: Experte für die xiri-ng Angular-Library. Verwende diesen Skill IMMER wenn Angular-Code geschrieben wird der @xiriframework/xiri-ng importiert, oder wenn der User nach xiri-Komponenten (xiri-dyncomponent, xiri-form-fields, xiri-table, xiri-card usw.), XiriDataService, XiriSnackbarService, provideXiriServices, Form-Feldern mit showWhen-Bedingungen oder reloadOn-Abhängigkeiten (Optionen vom Server nachladen), oder Server-Side-Tables fragt.
|
|
3
|
+
description: Experte für die xiri-ng Angular-Library. Verwende diesen Skill IMMER wenn Angular-Code geschrieben wird der @xiriframework/xiri-ng importiert, oder wenn der User nach xiri-Komponenten (xiri-dyncomponent, xiri-form-fields, xiri-table, xiri-card usw.), XiriDataService, XiriSnackbarService, provideXiriServices, Form-Feldern mit showWhen-Bedingungen oder reloadOn-Abhängigkeiten (Optionen vom Server nachladen), addUrl („+“-Button legt neue Option per Dialog an), oder Server-Side-Tables fragt.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# xiri-ng Expert
|
|
@@ -57,8 +57,9 @@ snackbar.info(msg, duration?, action?)
|
|
|
57
57
|
snackbar.warning(msg, duration?, action?)
|
|
58
58
|
snackbar.handleResponse(response): boolean // parst response.message + response.messageType
|
|
59
59
|
|
|
60
|
-
// Backend-Response-Handler (navigation / page-refresh / table-refresh)
|
|
61
|
-
responseHandler.handle(result, { onTableRefresh?, onTableUpdate? })
|
|
60
|
+
// Backend-Response-Handler (navigation / page-refresh / table-refresh / panel-refresh)
|
|
61
|
+
responseHandler.handle(result, { onTableRefresh?, onTableUpdate?, onPanelRefresh? })
|
|
62
|
+
// refresh:"panel" lädt die nächstgelegene xiri-card mit url neu (DI-Token XIRI_PANEL_HOST, s. setup.md)
|
|
62
63
|
|
|
63
64
|
// File-Download (tab = Handle aus openTab() → im Tab anzeigen, null → speichern)
|
|
64
65
|
download.openTab(): Window | null // synchron im Click, sonst blockt der Browser
|
|
@@ -152,6 +153,19 @@ Patchbar sind `list`, `name`, `hint`, `class`, `required`, `disabled`, `hide`, `
|
|
|
152
153
|
`max`, `params` — jeweils nur mit passendem Typ. `value`, `type`, `id` und `url` bewusst nicht.
|
|
153
154
|
Details und Grenzen in `references/form-fields.md`.
|
|
154
155
|
|
|
156
|
+
**addUrl — neue Option per Dialog anlegen.** `select`, `multiselect`/`treeselect`, `object`/`model`
|
|
157
|
+
und `chips` bekommen mit `addUrl` einen „+“-Button neben dem Feld:
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
{ id: 'tags', type: 'select', multiple: true, name: 'Tags', list: [...], addUrl: 'Tag/AddDialog' }
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Klick lädt `xiri-dialog` per GET auf `addUrl` (ein normaler Form-Dialog vom Backend). Antwortet
|
|
164
|
+
dessen POST mit `{ done: true, created: { id, name } }`, hängt das Feld die Option an seine `list`
|
|
165
|
+
und selektiert sie — bei Mehrfachwerten zusätzlich, ohne Duplikat. `id` muss den Typ der
|
|
166
|
+
vorhandenen Options-IDs haben (chips: Zahl). Go: `f.BaseField.SetAddURL(u)` +
|
|
167
|
+
`response.NewReturnDone().WithCreated(id, name)`.
|
|
168
|
+
|
|
155
169
|
Zugriff auf die reactive Form:
|
|
156
170
|
|
|
157
171
|
```typescript
|
|
@@ -316,6 +330,8 @@ stepperSettings = {
|
|
|
316
330
|
<xiri-expansion [settings]="{ panels: [{ title: 'GPS', buttons: {...}, data: [{ type: 'card', cols: 12, data: { flat: true, data: {...} } }] }] }"/> <!-- buttons: Header-Buttons; flat: Card ohne Schatten -->
|
|
317
331
|
<!-- Tabelle im Panel: options.flat statt Rahmen im Rahmen, kein cols nötig. Panel halbiert dann automatisch seinen Seitenabstand. -->
|
|
318
332
|
<xiri-expansion [settings]="{ multi: false, unload: true, panels: [{ title: 'Standort Wien', icon: 'place', data: [{ type: 'table', data: { data: rows, fields, options: { flat: true, pagination: false, search: false } } }] }] }"/>
|
|
333
|
+
<!-- Nachladbares Panel: url → POST null → { panel: { title, buttons, data, … } }; refresh:'panel' aus Header-Button/Inhalt lädt nur dieses Panel neu (auch xiri-card mit url). -->
|
|
334
|
+
<xiri-expansion [settings]="{ panels: [{ title: 'lädt …', expanded: true, url: 'Vehicle/7/Panel/Insurance', data: [] }] }"/>
|
|
319
335
|
<xiri-sidenav [settings]="{ prefix: '/app/', fields: navItems }"/>
|
|
320
336
|
<xiri-breadcrumb [settings]="breadcrumbItems"/>
|
|
321
337
|
<xiri-skeleton type="table-row" [lines]="5" [columns]="4"/>
|
|
@@ -446,3 +462,5 @@ edit(row: any) {
|
|
|
446
462
|
- Nicht `reloadOn` ohne `reloadUrl` (oder umgekehrt) — eine halbe Deklaration wird ignoriert
|
|
447
463
|
- Nicht `url` **und** `reloadOn` auf demselben treeselect — mit `url` lädt es seinen Baum selbst
|
|
448
464
|
per GET und ignoriert die gepatchte `list`
|
|
465
|
+
- Keinen eigenen „Neu anlegen“-Button neben ein Select bauen — `addUrl` am Feld, der Dialog-POST
|
|
466
|
+
antwortet mit `created: { id, name }`
|
|
@@ -96,7 +96,7 @@ dialog.open(XiriAlertComponent, {
|
|
|
96
96
|
@input.required settings: XiriCardSettings;
|
|
97
97
|
|
|
98
98
|
interface XiriCardSettings {
|
|
99
|
-
url?: string; // POST mit null → Load
|
|
99
|
+
url?: string; // POST mit null → Load; Antwort {card: …} oder {data: rows}, s. u.
|
|
100
100
|
reload?: boolean;
|
|
101
101
|
data?: any;
|
|
102
102
|
fields?: XiriTableField[]; // Card als Mini-Table
|
|
@@ -127,6 +127,21 @@ interface XiriCardSettings {
|
|
|
127
127
|
}
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
+
**Antwort des `url`-Endpoints** (POST, Body `null`), Modus wird an der rohen Antwort entschieden:
|
|
131
|
+
|
|
132
|
+
- `{ card: { type, header, headerSub, headerIcon, buttonsTop, buttonsBottom, fields, data, components, … } }` —
|
|
133
|
+
komplette Card (so liefert es `Card.DataResponse(ctx)` in xiri-go ab 0.3.10). Header-Felder überlagern
|
|
134
|
+
`settings`; die Inhaltsfelder `fields`, `data`, `dense`, `components`, `showHeader`, `forceMinWidth` kommen
|
|
135
|
+
ausschließlich aus der Antwort. Bei einem Reload bleibt der bisherige Inhalt stehen (kein Skeleton); schlägt der
|
|
136
|
+
Reload fehl, bleiben Titel und Buttons der letzten Antwort, nur der Inhalt zeigt die Fehlermeldung.
|
|
137
|
+
- `{ data: rows }` oder `rows` direkt — nur Inhaltszeilen, Header bleibt aus `settings` (Legacy-Form). Was
|
|
138
|
+
innerhalb von `data` steht, wird nie als Card gedeutet.
|
|
139
|
+
|
|
140
|
+
**Nachladbares Panel (`refresh: "panel"`):** Gibt ein Button oder eine Tabellenaktion in der Card
|
|
141
|
+
`{ done: true, refresh: 'panel' }` zurück, lädt die Card ihre `url` erneut. Die Card ist dafür `XIRI_PANEL_HOST`
|
|
142
|
+
(siehe setup.md → XiriResponseHandlerService). Typischer Einsatz: Detailseiten mit mehreren Panels
|
|
143
|
+
(Versicherung, Leasing, Preise), deren Bearbeiten-Dialog nur das eigene Panel aktualisieren soll.
|
|
144
|
+
|
|
130
145
|
**Card als Panel-Inhalt (`flat`):** Card ohne `header` mit `flat: true` in `panel.data` legen; Titel und
|
|
131
146
|
Buttons gehören dann in den Panel-Header (`XiriExpansionPanelSettings.buttons`, siehe xiri-expansion).
|
|
132
147
|
`cols: 12` auf dem `XiriDynData`-Eintrag nicht vergessen — `xiri-dyncomponent` rendert Cards sonst nur
|
|
@@ -625,7 +640,8 @@ interface XiriExpansionPanelSettings {
|
|
|
625
640
|
icon?: string;
|
|
626
641
|
disabled?: boolean; // sperrt nur den Toggle, nicht die Header-Buttons
|
|
627
642
|
expanded?: boolean;
|
|
628
|
-
data:
|
|
643
|
+
url?: string; // Nachladbares Panel: POST null → {panel: …}, s. u. Shell hat data: []
|
|
644
|
+
data?: XiriDynData[];
|
|
629
645
|
lazy?: boolean;
|
|
630
646
|
unload?: boolean;
|
|
631
647
|
buttons?: XiriButtonlineSettings; // Aktions-Buttons rechts im Panel-Header (wie section.buttons).
|
|
@@ -639,6 +655,17 @@ Enthält ein Panel eine flache Card (`card.flat`) oder eine flache Tabelle (`tab
|
|
|
639
655
|
bekommt das Panel die Klasse `flat-content` und halbiert seinen Seitenabstand (24px → 12px) — die
|
|
640
656
|
flache Komponente bringt Rahmen und Innenabstand selbst mit.
|
|
641
657
|
|
|
658
|
+
**Nachladbares Panel (`url` + `refresh: "panel"`):** Jedes `mat-expansion-panel` trägt die Directive
|
|
659
|
+
`xiriExpansionPanel` und ist damit `XIRI_PANEL_HOST` (siehe setup.md). Mit `url` lädt sich das Panel per POST
|
|
660
|
+
(Body `null`); die Antwort `{ panel: { title, description?, icon?, buttons?, data } }` (Go:
|
|
661
|
+
`Panel.DataResponse(ctx)` ab xiri-go 0.3.10) ersetzt Titel, Beschreibung, Icon, Header-Buttons und Inhalt —
|
|
662
|
+
`expanded`, `disabled`, `lazy`, `unload` bleiben aus der Page, ein Reload klappt nichts zu. Gibt ein Header-Button,
|
|
663
|
+
ein Button im Inhalt oder eine Tabellenaktion `{ done: true, refresh: 'panel' }` zurück, lädt genau dieses Panel
|
|
664
|
+
neu. Eine flache Card ohne `url` im Inhalt reicht an das Panel weiter. Lade-, Fehler- und Puffer-Verhalten wie bei
|
|
665
|
+
`xiri-card` (Skeleton nur beim ersten Laden, Inhalt bleibt beim Reload stehen, bei Reload-Fehler bleibt der Header).
|
|
666
|
+
Der Inhalt wird mit `ngTemplateOutletInjector` = Element-Injector des Panels gerendert; ohne das fänden Buttons im
|
|
667
|
+
Inhalt (eingebettete View) das Panel nicht.
|
|
668
|
+
|
|
642
669
|
**Panel mit Header-Buttons + rahmenloser Card** (statt Card mit `buttonsTop` im Panel, die doppelten
|
|
643
670
|
Titel und Schatten erzeugt):
|
|
644
671
|
|
|
@@ -91,6 +91,7 @@ export interface XiriFormField {
|
|
|
91
91
|
|
|
92
92
|
// --- Select / Model / Treeselect ---
|
|
93
93
|
multiple?: boolean;
|
|
94
|
+
selectAll?: boolean; // select + multiple: „Alle / Keine“-Toggle über der Optionsliste
|
|
94
95
|
url?: string; // load options von Backend
|
|
95
96
|
search?: boolean;
|
|
96
97
|
serverSideSearch?: boolean;
|
|
@@ -111,6 +112,7 @@ export interface XiriFormField {
|
|
|
111
112
|
// --- Server-driven content ---
|
|
112
113
|
reloadOn?: string[]; // Feld-IDs, deren Änderung dieses Feld neu lädt
|
|
113
114
|
reloadUrl?: string; // Endpoint für den Reload (beides oder keins)
|
|
115
|
+
addUrl?: string; // „+“-Button: Dialog (GET) legt eine neue Option an, POST → {done, created:{id,name}}
|
|
114
116
|
|
|
115
117
|
// --- Weitere ---
|
|
116
118
|
rows?: number; // textarea
|
|
@@ -141,8 +143,8 @@ letzterer geht über das FormControl, das Feld fällt dann also auch aus `formGr
|
|
|
141
143
|
| `textarea` | Mat-Textarea | `rows` |
|
|
142
144
|
| `number` | Mat-Input type=number | `min`, `max`, `textSuffix` |
|
|
143
145
|
| `bool` | Mat-Checkbox / Slide-Toggle | `placeholder` für Begleittext |
|
|
144
|
-
| `select` | Mat-Select mit `list` | `multiple`, `search`
|
|
145
|
-
| `multiselect` |
|
|
146
|
+
| `select` | Mat-Select mit `list` | `multiple`, `search`, `selectAll` |
|
|
147
|
+
| `multiselect` | Checkbox-Liste (flacher Treeselect) | `list` oder `url`, `min`, `max` |
|
|
146
148
|
| `model` | Mat-Select mit Backend-Load | `url`, `serverSideSearch` |
|
|
147
149
|
| `object` | Komplexes Objekt-Select (JSON-Value) | `url`, `list` |
|
|
148
150
|
| `treeselect` | Tree-Picker | `url`, `tree: true` |
|
|
@@ -309,6 +311,46 @@ Fenster gespeicherter Filter verlöre das Feld.
|
|
|
309
311
|
Ketten funktionieren: hängt C an B und wird Bs Wert durch einen Patch verworfen, lädt C nach. Das
|
|
310
312
|
terminiert, weil Pruning nur entfernt.
|
|
311
313
|
|
|
314
|
+
### addUrl — neue Option per Dialog anlegen
|
|
315
|
+
|
|
316
|
+
Für `select` (single und `multiple`), `multiselect`/`treeselect`, `object`/`model` und `chips`.
|
|
317
|
+
Mit `addUrl` rendert die Komponente neben dem Control einen `mat-icon-button` „+“ (`button.add-option`,
|
|
318
|
+
`aria-label="Neu anlegen"`); Control und Button liegen in einem Flex-Wrapper `.add-wrap`, der
|
|
319
|
+
`field.class` und `[hidden]` trägt.
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
{ id: 'tags', type: 'select', multiple: true, name: 'Tags', search: false,
|
|
323
|
+
list: [ { id: 1, name: 'Produktion' } ], addUrl: 'Tag/AddDialog' }
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Ablauf:
|
|
327
|
+
|
|
328
|
+
1. Klick öffnet `XiriDialogComponent` mit `{ type: 'load', url: addUrl }` — also ein GET, das einen
|
|
329
|
+
normalen Form-Dialog liefert (`header`, `type: 'form'`, `url`, `fields`, `buttons`).
|
|
330
|
+
2. Der Dialog postet das Formular an seine `url`. Antwortet der Server mit
|
|
331
|
+
`{ done: true, created: { id, name } }` (Go: `response.NewReturnDone().WithCreated(id, name)`),
|
|
332
|
+
zeigt der Dialog kurz die Erfolgsanzeige und schließt mit der Antwort. Während dieser Anzeige sind
|
|
333
|
+
Escape, Backdrop und das Kreuz gesperrt, damit das Ergebnis nicht verloren geht.
|
|
334
|
+
3. Die Komponente hängt `{ id, name }` an `field.list` (falls noch nicht enthalten) und setzt den Wert:
|
|
335
|
+
Einzelwert → `id`; Mehrfachwert (`multiple`, `treeselect`, `chips`) → bestehende Werte plus `id`,
|
|
336
|
+
ohne Duplikat. Das Feld wird wie bei einem `reloadOn`-Patch als Kopie neu gerendert.
|
|
337
|
+
|
|
338
|
+
Verworfen wird das Ergebnis, wenn der Dialog ohne `created` schließt (Abbrechen), das Formular
|
|
339
|
+
inzwischen gewechselt hat (die Control-Identität entscheidet, nicht die Feld-ID), das Control
|
|
340
|
+
deaktiviert ist oder `created` ungültig ist (`id` muss String oder endliche Zahl sein, `name` ein
|
|
341
|
+
String; `0` ist gültig). Der Button ist deaktiviert, solange die Form oder das Control deaktiviert ist.
|
|
342
|
+
|
|
343
|
+
Grenzen:
|
|
344
|
+
|
|
345
|
+
- `id` muss den JSON-Typ der vorhandenen Options-IDs haben; der Vergleich ist strikt. `chips` löst
|
|
346
|
+
Labels nur für numerische IDs auf (Strings sind dort Freitext).
|
|
347
|
+
- Ein `treeselect` mit `url` ignoriert `list` und lädt seinen Baum nach dem Anlegen selbst neu — der
|
|
348
|
+
Server muss die neue Entität dann sofort liefern.
|
|
349
|
+
- Ein späterer `reloadOn`-Patch ersetzt die Liste; liefert der Server die neue Option nicht mit, wird
|
|
350
|
+
der Wert verworfen. Serverseitig validieren `SelectField` und Chips beim Submit gegen ihre
|
|
351
|
+
Optionsliste — die neue Entität muss dort enthalten sein; `ModelField`/`ModelListField` prüfen nur
|
|
352
|
+
Typ und Anzahl.
|
|
353
|
+
|
|
312
354
|
### Select-Optionen
|
|
313
355
|
|
|
314
356
|
```typescript
|
|
@@ -339,6 +381,16 @@ Inline (statisch):
|
|
|
339
381
|
]}
|
|
340
382
|
```
|
|
341
383
|
|
|
384
|
+
Mehrfachauswahl mit „Alle / Keine“-Toggle (`selectAll` — Checkbox von `ngx-mat-select-search` über der Liste; wirkt auf die
|
|
385
|
+
aktuell sichtbaren, also bei aktiver Suche nur die gefilterten Optionen, lässt `disabled`-Optionen unangetastet und wird
|
|
386
|
+
ausgeblendet, wenn kein Treffer wählbar ist. Mit `selectAll` wird immer der Such-Zweig gerendert, auch bei `search: false`.
|
|
387
|
+
Go-Seite: `SelectField.SetMultiple(true).SetSelectAll(true)`):
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
{ id: 'tags', type: 'select', name: 'Tags', multiple: true, selectAll: true, value: [],
|
|
391
|
+
list: [ { id: 1, name: 'Produktion' }, { id: 2, name: 'Logistik' }, { id: 3, name: 'Archiv', disabled: true } ] }
|
|
392
|
+
```
|
|
393
|
+
|
|
342
394
|
Hierarchisch (`treeselect` — Optionen über `children` verschachteln; auswählbar sind die Blattknoten, `isGroup` markiert Elternknoten):
|
|
343
395
|
|
|
344
396
|
```typescript
|
|
@@ -65,20 +65,50 @@ Wird von `XiriDataService` intern aufgerufen — du musst `handleResponse` nur s
|
|
|
65
65
|
|
|
66
66
|
## XiriResponseHandlerService
|
|
67
67
|
|
|
68
|
-
Zentrale Logik für Backend-Responses aus `xiri-go` (`ReturnGoto`, `ReturnRefreshPage`, `ReturnRefreshTable`,
|
|
68
|
+
Zentrale Logik für Backend-Responses aus `xiri-go` (`ReturnGoto`, `ReturnRefreshPage`, `ReturnRefreshTable`,
|
|
69
|
+
`ReturnRefreshPanel`, Table-Update).
|
|
69
70
|
|
|
70
71
|
```typescript
|
|
71
|
-
handle(result:
|
|
72
|
+
handle(result: unknown, callbacks?: {
|
|
72
73
|
onTableRefresh?: () => void;
|
|
73
|
-
onTableUpdate?: (id:
|
|
74
|
+
onTableUpdate?: (id: unknown, field: string, content: unknown) => void;
|
|
75
|
+
onPanelRefresh?: () => void;
|
|
74
76
|
}): void
|
|
75
77
|
```
|
|
76
78
|
|
|
77
|
-
Verhalten je nach
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
79
|
+
Verhalten je nach Response:
|
|
80
|
+
- `goto: url` → `router.navigate([url])`
|
|
81
|
+
- `refresh: "page"` → `router.navigate([router.url])` — braucht `onSameUrlNavigation: 'reload'` (siehe dyncomponent.md)
|
|
82
|
+
- `refresh: "table"` → `onTableRefresh()` wenn gesetzt, sonst wie `refresh: "page"`
|
|
83
|
+
- `refresh: "panel"` → `onPanelRefresh()` wenn gesetzt, sonst nichts (kein Router-Fallback im Handler; `xiri-button` und
|
|
84
|
+
`xiri-table` liefern ohne Panel-Host selbst `{ refresh: "page" }` nach, siehe unten)
|
|
85
|
+
- `update: "table"` → `onTableUpdate(id, field, content)` wenn gesetzt
|
|
86
|
+
|
|
87
|
+
### Nachladbare Panels: `XIRI_PANEL_HOST`
|
|
88
|
+
|
|
89
|
+
`refresh: "panel"` lädt genau eine `xiri-card` mit `url` neu (Titel, Buttons, Inhalt), die restliche Seite bleibt
|
|
90
|
+
stehen. Die Verdrahtung läuft über DI, nicht über Outputs:
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
export interface XiriPanelHost { reloadPanel(): void; }
|
|
94
|
+
export const XIRI_PANEL_HOST: InjectionToken<XiriPanelHost>;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
- `xiri-card` und jedes `mat-expansion-panel` in `xiri-expansion` (Directive `xiriExpansionPanel`) stellen sich als
|
|
98
|
+
`XIRI_PANEL_HOST` bereit (`providers: [{ provide: XIRI_PANEL_HOST, useExisting: … }]`).
|
|
99
|
+
- `xiri-button` und `xiri-table` injizieren den Token optional und rufen bei `refresh: "panel"` `reloadPanel()` der
|
|
100
|
+
nächstgelegenen Card — egal ob der Button im Card-Header, unten oder in einer verschachtelten Komponente liegt.
|
|
101
|
+
Ohne umschließende Card: `refresh: "page"` (ab 0.4.11; 0.4.10 warnte nur in der Konsole) — braucht wie
|
|
102
|
+
`refresh: "page"` `onSameUrlNavigation: 'reload'`. Nur diese beiden Auslöser kennen `refresh: "panel"`;
|
|
103
|
+
`xiri-links` und der `addUrl`-Dialog der Formularfelder ignorieren es.
|
|
104
|
+
- Eine Card ohne `url` reicht per `skipSelf` an die nächste äußere Card weiter; ohne solche → `refresh: "page"`.
|
|
105
|
+
- Eigene Komponenten, die als Panel gelten sollen, implementieren `XiriPanelHost` und providen den Token genauso;
|
|
106
|
+
`createPanelLoader({ url, key })` aus `services/panel-loader.ts` liefert Laden, Envelope-Auspacken, Puffer und
|
|
107
|
+
Reload-Queue fertig (so nutzen es Card und Expansion-Panel).
|
|
108
|
+
- Rendert die Komponente Inhalt über `ngTemplateOutlet`, muss sie `injector` (ihren Element-Injector) mitgeben —
|
|
109
|
+
eingebettete Views lösen DI sonst über die deklarierende View auf, und Buttons im Inhalt finden den Host nicht.
|
|
110
|
+
|
|
111
|
+
Antwortformat des Card-Endpoints siehe `components.md` → xiri-card. Ab xiri-ng 0.4.10 / xiri-go 0.3.10.
|
|
82
112
|
|
|
83
113
|
## XiriFormService
|
|
84
114
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { PipeTransform, OnInit, OnDestroy, ChangeDetectorRef, TemplateRef, Type, Signal, WritableSignal, AfterViewInit, ElementRef, EnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { PipeTransform, OnInit, OnDestroy, ChangeDetectorRef, TemplateRef, Type, InjectionToken, Signal, WritableSignal, Injector, AfterViewInit, ElementRef, EnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { Params } from '@angular/router';
|
|
4
4
|
import * as _angular_forms from '@angular/forms';
|
|
5
|
-
import { ValidatorFn, FormControl, UntypedFormGroup, UntypedFormControl } from '@angular/forms';
|
|
5
|
+
import { ValidatorFn, FormControl, UntypedFormGroup, UntypedFormControl, AbstractControl } from '@angular/forms';
|
|
6
6
|
import * as rxjs from 'rxjs';
|
|
7
7
|
import { Observable, Subject } from 'rxjs';
|
|
8
8
|
import * as _angular_material_paginator from '@angular/material/paginator';
|
|
@@ -104,6 +104,7 @@ interface XiriFormField {
|
|
|
104
104
|
max?: number;
|
|
105
105
|
pattern?: string;
|
|
106
106
|
multiple?: boolean;
|
|
107
|
+
selectAll?: boolean;
|
|
107
108
|
url?: string;
|
|
108
109
|
search?: boolean;
|
|
109
110
|
serverSideSearch?: boolean;
|
|
@@ -118,6 +119,7 @@ interface XiriFormField {
|
|
|
118
119
|
showWhen?: XiriFormFieldCondition | XiriFormFieldCondition[];
|
|
119
120
|
reloadOn?: string[];
|
|
120
121
|
reloadUrl?: string;
|
|
122
|
+
addUrl?: string;
|
|
121
123
|
control?: FormControl;
|
|
122
124
|
placeholder?: string;
|
|
123
125
|
array?: (string | number)[];
|
|
@@ -128,6 +130,8 @@ type XiriFormFieldDisplay = 'full' | 'line' | 'small';
|
|
|
128
130
|
declare class XiriFormFieldsComponent implements OnInit {
|
|
129
131
|
private formBuilder;
|
|
130
132
|
private destroyRef;
|
|
133
|
+
private dialog;
|
|
134
|
+
private destroyed;
|
|
131
135
|
private elementRef;
|
|
132
136
|
private readonly localeService;
|
|
133
137
|
private dataService;
|
|
@@ -157,6 +161,8 @@ declare class XiriFormFieldsComponent implements OnInit {
|
|
|
157
161
|
private dependentFields;
|
|
158
162
|
private triggerValues;
|
|
159
163
|
private fetchPatches;
|
|
164
|
+
protected openAdd(id: string): void;
|
|
165
|
+
private addOption;
|
|
160
166
|
private applyPatch;
|
|
161
167
|
private pruneValue;
|
|
162
168
|
fields: _angular_core.Signal<XiriFormField[] | null>;
|
|
@@ -185,6 +191,9 @@ declare class XiriSelectDirective implements OnInit, OnDestroy {
|
|
|
185
191
|
private _filterFormControl;
|
|
186
192
|
/** list of _allValues filtered by search keyword */
|
|
187
193
|
private _filteredValuesSubject;
|
|
194
|
+
/** what the panel currently shows — the basis for the select-all toggle */
|
|
195
|
+
private _filtered;
|
|
196
|
+
private emit;
|
|
188
197
|
/** indicate search operation is in progress */
|
|
189
198
|
searching: boolean;
|
|
190
199
|
/** Subject that emits when the component has been destroyed. */
|
|
@@ -201,6 +210,13 @@ declare class XiriSelectDirective implements OnInit, OnDestroy {
|
|
|
201
210
|
ngOnInit(): void;
|
|
202
211
|
ngOnDestroy(): void;
|
|
203
212
|
private applyFilter;
|
|
213
|
+
private selectableIds;
|
|
214
|
+
private static ids;
|
|
215
|
+
/** false when nothing is selectable — the checkbox is hidden then, otherwise MatCheckbox would stay checked after a no-op click */
|
|
216
|
+
hasSelectable(): boolean;
|
|
217
|
+
allSelected(value: unknown): boolean;
|
|
218
|
+
someSelected(value: unknown): boolean;
|
|
219
|
+
toggleSelectAll(selectAll: boolean, control: AbstractControl | null): void;
|
|
204
220
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XiriSelectDirective, never>;
|
|
205
221
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XiriSelectDirective, "[xiriSelect]", ["xiriSelect"], { "predicate": { "alias": "predicate"; "required": false; "isSignal": true; }; "compare": { "alias": "compare"; "required": false; "isSignal": true; }; "serverSideSearch": { "alias": "serverSideSearch"; "required": false; "isSignal": true; }; "serverUrl": { "alias": "serverUrl"; "required": false; "isSignal": true; }; "serverParams": { "alias": "serverParams"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
206
222
|
}
|
|
@@ -279,6 +295,7 @@ declare class XiriButtonComponent implements OnDestroy {
|
|
|
279
295
|
private dialog;
|
|
280
296
|
private downloadService;
|
|
281
297
|
private responseHandler;
|
|
298
|
+
private panelHost;
|
|
282
299
|
_disabled: _angular_core.Signal<boolean>;
|
|
283
300
|
_url: _angular_core.Signal<string | undefined>;
|
|
284
301
|
constructor();
|
|
@@ -288,6 +305,7 @@ declare class XiriButtonComponent implements OnDestroy {
|
|
|
288
305
|
openMenuDialog(event: MouseEvent, item: Record<string, unknown>): void;
|
|
289
306
|
private actionApi;
|
|
290
307
|
private processResult;
|
|
308
|
+
private refreshPanel;
|
|
291
309
|
private startPolling;
|
|
292
310
|
private pollTick;
|
|
293
311
|
private cancelPollTimers;
|
|
@@ -462,6 +480,7 @@ declare class XiriTableInlineEditService {
|
|
|
462
480
|
searching: _angular_core.WritableSignal<boolean>;
|
|
463
481
|
displayedOptions: _angular_core.WritableSignal<EditableOption[]>;
|
|
464
482
|
private editingOriginalValue;
|
|
483
|
+
private editSeq;
|
|
465
484
|
private editableOptionsSub;
|
|
466
485
|
private optionCache;
|
|
467
486
|
private searchSub;
|
|
@@ -472,6 +491,7 @@ declare class XiriTableInlineEditService {
|
|
|
472
491
|
private onSaved;
|
|
473
492
|
private onDataUpdate;
|
|
474
493
|
private onCallReturn;
|
|
494
|
+
private isRowLive;
|
|
475
495
|
private get editUrl();
|
|
476
496
|
private get displayedColumns();
|
|
477
497
|
init(config: {
|
|
@@ -481,6 +501,7 @@ declare class XiriTableInlineEditService {
|
|
|
481
501
|
onSaved: (row: XiriTableRow, fieldId: string) => void;
|
|
482
502
|
onDataUpdate: () => void;
|
|
483
503
|
onCallReturn: (result: unknown) => void;
|
|
504
|
+
isRowLive: (row: XiriTableRow) => boolean;
|
|
484
505
|
}): void;
|
|
485
506
|
start(row: XiriTableRow, column: XiriTableField, skipSavingCheck?: boolean): void;
|
|
486
507
|
/** Sets up the search box + subscription for searchable inline-edit selects. */
|
|
@@ -596,6 +617,7 @@ declare class XiriTableComponent implements OnInit, OnDestroy {
|
|
|
596
617
|
private numberService;
|
|
597
618
|
private snackbar;
|
|
598
619
|
private responseHandler;
|
|
620
|
+
private panelHost;
|
|
599
621
|
private downloadService;
|
|
600
622
|
inlineEdit: XiriTableInlineEditService;
|
|
601
623
|
tree: XiriTableTreeService;
|
|
@@ -710,6 +732,7 @@ declare class XiriTableComponent implements OnInit, OnDestroy {
|
|
|
710
732
|
private makeApiCall;
|
|
711
733
|
buttonReturn(event: XiriButtonResult): void;
|
|
712
734
|
private callReturn;
|
|
735
|
+
private refreshPanel;
|
|
713
736
|
private getSelectionIDs;
|
|
714
737
|
startInlineEdit(row: XiriTableRow, column: XiriTableField, skipSavingCheck?: boolean): void;
|
|
715
738
|
cancelInlineEdit(): void;
|
|
@@ -768,7 +791,7 @@ type XiriDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
|
|
768
791
|
interface XiriDialogSettings {
|
|
769
792
|
url?: string;
|
|
770
793
|
size?: XiriDialogSize | string;
|
|
771
|
-
type: "form" | "data" | "question" | "waiting" | "table" | "component";
|
|
794
|
+
type: "form" | "data" | "question" | "waiting" | "table" | "component" | "load";
|
|
772
795
|
data?: unknown;
|
|
773
796
|
filter?: Record<string, unknown> | null;
|
|
774
797
|
}
|
|
@@ -939,6 +962,26 @@ declare class XiriQueryComponent implements OnInit {
|
|
|
939
962
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<XiriQueryComponent, "xiri-query", never, { "settings": { "alias": "settings"; "required": true; "isSignal": true; }; "dyncomponent": { "alias": "dyncomponent"; "required": false; "isSignal": true; }; "count": { "alias": "count"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
|
|
940
963
|
}
|
|
941
964
|
|
|
965
|
+
/**
|
|
966
|
+
* Nächstgelegener Panel-Container eines Auslösers: eine xiri-card oder ein mat-expansion-panel (Directive
|
|
967
|
+
* xiriExpansionPanel). Beide stellen sich per Provider bereit; Button und Tabelle injizieren den Token optional
|
|
968
|
+
* und rufen bei refresh:'panel' reloadPanel().
|
|
969
|
+
*/
|
|
970
|
+
interface XiriPanelHost {
|
|
971
|
+
reloadPanel(): void;
|
|
972
|
+
}
|
|
973
|
+
declare const XIRI_PANEL_HOST: InjectionToken<XiriPanelHost>;
|
|
974
|
+
declare class XiriResponseHandlerService {
|
|
975
|
+
private router;
|
|
976
|
+
handle(result: unknown, callbacks?: {
|
|
977
|
+
onTableRefresh?: () => void;
|
|
978
|
+
onTableUpdate?: (id: unknown, field: string, content: unknown) => void;
|
|
979
|
+
onPanelRefresh?: () => void;
|
|
980
|
+
}): void;
|
|
981
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XiriResponseHandlerService, never>;
|
|
982
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<XiriResponseHandlerService>;
|
|
983
|
+
}
|
|
984
|
+
|
|
942
985
|
interface XiriCardSettings {
|
|
943
986
|
url?: string;
|
|
944
987
|
reload?: boolean;
|
|
@@ -960,16 +1003,25 @@ interface XiriCardSettings {
|
|
|
960
1003
|
flat?: boolean;
|
|
961
1004
|
padding?: string;
|
|
962
1005
|
}
|
|
963
|
-
declare class XiriCardComponent {
|
|
964
|
-
private
|
|
1006
|
+
declare class XiriCardComponent implements XiriPanelHost {
|
|
1007
|
+
private responseHandler;
|
|
1008
|
+
private parentPanel;
|
|
965
1009
|
settings: _angular_core.InputSignal<XiriCardSettings>;
|
|
1010
|
+
private loader;
|
|
966
1011
|
showHeader: Signal<boolean>;
|
|
967
1012
|
isCollapsed: _angular_core.WritableSignal<boolean>;
|
|
968
|
-
private cardResource;
|
|
969
1013
|
loading: Signal<boolean>;
|
|
970
1014
|
errorMsg: Signal<string>;
|
|
1015
|
+
private _raw;
|
|
1016
|
+
/** Zuletzt erfolgreich geladene komplette Card ({card: …}); null bei Zeilen-Antworten. */
|
|
1017
|
+
private loadedCard;
|
|
1018
|
+
/** Inhaltszeilen aus einer Nicht-Card-Antwort: {data: rows} → rows, sonst die Antwort selbst. */
|
|
971
1019
|
private _loaded;
|
|
1020
|
+
/** settings(), überlagert von einer nachgeladenen kompletten Card. Inhaltsfelder kommen dann nur aus der Antwort. */
|
|
1021
|
+
card: Signal<XiriCardSettings>;
|
|
972
1022
|
cardData: Signal<unknown>;
|
|
1023
|
+
/** Skeleton nur, solange noch nie etwas geladen wurde (auch nicht gepuffert) und kein statischer Inhalt da ist. */
|
|
1024
|
+
showSkeleton: Signal<boolean>;
|
|
973
1025
|
hasComponents: Signal<boolean>;
|
|
974
1026
|
/** Resolves padding setting (token or free CSS value) into a CSS length string. */
|
|
975
1027
|
componentsPadding: Signal<string>;
|
|
@@ -978,6 +1030,8 @@ declare class XiriCardComponent {
|
|
|
978
1030
|
/** Klick irgendwo im Header toggelt; Buttons/Links (Collapse, Reload, buttonsTop) behalten ihre eigene Aktion. */
|
|
979
1031
|
onHeaderClick(event: MouseEvent): void;
|
|
980
1032
|
reload(): void;
|
|
1033
|
+
/** refresh:'panel' aus Button/Tabelle in dieser Card. Ohne url: äußere Card, sonst Page-Reload. */
|
|
1034
|
+
reloadPanel(): void;
|
|
981
1035
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XiriCardComponent, never>;
|
|
982
1036
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<XiriCardComponent, "xiri-card", never, { "settings": { "alias": "settings"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
983
1037
|
}
|
|
@@ -1339,7 +1393,8 @@ interface XiriExpansionPanelSettings {
|
|
|
1339
1393
|
icon?: string;
|
|
1340
1394
|
disabled?: boolean;
|
|
1341
1395
|
expanded?: boolean;
|
|
1342
|
-
|
|
1396
|
+
url?: string;
|
|
1397
|
+
data?: XiriDynData[];
|
|
1343
1398
|
buttons?: XiriButtonlineSettings;
|
|
1344
1399
|
lazy?: boolean;
|
|
1345
1400
|
unload?: boolean;
|
|
@@ -1367,6 +1422,37 @@ declare class XiriExpansionComponent {
|
|
|
1367
1422
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<XiriExpansionComponent, "xiri-expansion", never, { "settings": { "alias": "settings"; "required": true; "isSignal": true; }; "filterData": { "alias": "filterData"; "required": false; "isSignal": true; }; "dyncomponent": { "alias": "dyncomponent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1368
1423
|
}
|
|
1369
1424
|
|
|
1425
|
+
/**
|
|
1426
|
+
* Macht ein mat-expansion-panel zum Panel-Host für refresh:'panel' und lädt es bei gesetzter url nach.
|
|
1427
|
+
* Sitzt als Directive direkt auf dem Material-Panel, damit der Element-Injector des Panels den Token trägt:
|
|
1428
|
+
* Header-Buttons und (über ngTemplateOutletInjector) der Inhalt finden so genau dieses Panel.
|
|
1429
|
+
*/
|
|
1430
|
+
declare class XiriExpansionPanelDirective implements XiriPanelHost {
|
|
1431
|
+
/**
|
|
1432
|
+
* Shell-Settings des Panels aus XiriExpansionSettings.panels. Nicht `required`: der Loader-Effect einer Directive
|
|
1433
|
+
* läuft in der Host-View und kann vor dem ersten Setzen der Inputs feuern (NG0950) – der leere Default hat keine url.
|
|
1434
|
+
*/
|
|
1435
|
+
settings: _angular_core.InputSignal<XiriExpansionPanelSettings>;
|
|
1436
|
+
/** Element-Injector des Panels – als ngTemplateOutletInjector für den Inhalt, sonst löst der über die deklarierende View auf. */
|
|
1437
|
+
injector: Injector;
|
|
1438
|
+
private responseHandler;
|
|
1439
|
+
private parentPanel;
|
|
1440
|
+
private loader;
|
|
1441
|
+
loading: _angular_core.Signal<boolean>;
|
|
1442
|
+
errorMsg: _angular_core.Signal<string>;
|
|
1443
|
+
/**
|
|
1444
|
+
* Shell, überlagert von title/description/icon/buttons/data der letzten Antwort.
|
|
1445
|
+
* expanded/disabled/lazy/unload bleiben Shell-Werte – sonst klappte ein Reload ohne `expanded` das Panel zu.
|
|
1446
|
+
*/
|
|
1447
|
+
panel: _angular_core.Signal<XiriExpansionPanelSettings>;
|
|
1448
|
+
/** Skeleton nur, solange noch nie etwas geladen wurde (auch nicht gepuffert) und die Shell keinen Inhalt hat. */
|
|
1449
|
+
showSkeleton: _angular_core.Signal<boolean>;
|
|
1450
|
+
/** refresh:'panel' aus Header-Button, Inhalt oder Tabelle in diesem Panel. Ohne url: äußerer Host, sonst Page-Reload. */
|
|
1451
|
+
reloadPanel(): void;
|
|
1452
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XiriExpansionPanelDirective, never>;
|
|
1453
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XiriExpansionPanelDirective, "mat-expansion-panel[xiriExpansionPanel]", ["xiriExpansionPanel"], { "settings": { "alias": "xiriExpansionPanel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1370
1456
|
interface XiriBreadcrumbItem {
|
|
1371
1457
|
label: string;
|
|
1372
1458
|
link?: string;
|
|
@@ -2660,15 +2746,28 @@ declare class XiriSnackbarService {
|
|
|
2660
2746
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<XiriSnackbarService>;
|
|
2661
2747
|
}
|
|
2662
2748
|
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2749
|
+
/**
|
|
2750
|
+
* Lädt ein Panel (Card, Expansion-Panel) von einer URL und puffert die letzte erfolgreiche Antwort.
|
|
2751
|
+
* Gemeinsame Logik der XIRI_PANEL_HOST-Implementierungen; muss im Injection-Context aufgerufen werden.
|
|
2752
|
+
*
|
|
2753
|
+
* - `raw`: rohe Antwort, nur gelesen, wenn die Resource einen Wert hat (value() wirft im Fehlerzustand).
|
|
2754
|
+
* - `loaded`: das Objekt unter `opts.key` der letzten erfolgreichen Antwort. Bleibt bei Reload-Fehler
|
|
2755
|
+
* stehen, wird bei url-Wechsel und bei einer erfolgreichen Antwort ohne `opts.key` geleert.
|
|
2756
|
+
* - `reloadOrQueue`: lädt neu; läuft der erste Load noch, wird der Reload nachgeholt, sobald er fertig ist.
|
|
2757
|
+
*/
|
|
2758
|
+
declare function createPanelLoader<T extends object>(opts: {
|
|
2759
|
+
url: () => string | undefined;
|
|
2760
|
+
key: string;
|
|
2761
|
+
}): {
|
|
2762
|
+
loading: _angular_core.Signal<boolean>;
|
|
2763
|
+
errorMsg: _angular_core.Signal<string>;
|
|
2764
|
+
raw: _angular_core.Signal<unknown>;
|
|
2765
|
+
loaded: _angular_core.WritableSignal<T | null>;
|
|
2766
|
+
/** Manueller Reload (Reload-Button): kein Doppelstart, solange geladen wird. */
|
|
2767
|
+
reload: () => void;
|
|
2768
|
+
/** refresh:'panel': reload() gibt false zurück, solange der erste Load läuft – dann nachholen. */
|
|
2769
|
+
reloadOrQueue: () => void;
|
|
2770
|
+
};
|
|
2672
2771
|
|
|
2673
2772
|
declare class XiriDownloadService {
|
|
2674
2773
|
/**
|
|
@@ -2690,6 +2789,6 @@ declare class XiriDownloadService {
|
|
|
2690
2789
|
|
|
2691
2790
|
declare function provideXiriServices(config: Partial<XiriDataServiceConfig>): EnvironmentProviders;
|
|
2692
2791
|
|
|
2693
|
-
export { COLOR_CSS_VAR, DEFAULT_COMPARE, DEFAULT_PREDICATE, FALLBACK_COLORS, SafehtmlPipe, ThemeService, XiriAlertComponent, XiriBarChartComponent, XiriBreadcrumbComponent, XiriBulletChartComponent, XiriButtonComponent, XiriButtonlineComponent, XiriButtonstyleComponent, XiriCalendarComponent, XiriCalloutComponent, XiriCardComponent, XiriCardlinkComponent, XiriColsDirective, XiriDataService, XiriDataServiceConfig, XiriDescriptionListComponent, XiriDialogComponent, XiriDividerComponent, XiriDoneComponent, XiriDownloadService, XiriDynComponentComponent, XiriEchartsHostComponent, XiriEmptyStateComponent, XiriErrorComponent, XiriExpansionComponent, XiriFormComponent, XiriFormFieldsComponent, XiriFormService, XiriGanttComponent, XiriGaugeChartComponent, XiriHeaderComponent, XiriHeatmapComponent, XiriImagetextComponent, XiriInfopointComponent, XiriLineChartComponent, XiriLinksComponent, XiriListComponent, XiriLocalStorageService, XiriLocaleService, XiriMultiStatComponent, XiriMultiprogressComponent, XiriPageHeaderComponent, XiriPieChartComponent, XiriProgressComponent, XiriQueryComponent, XiriRawTableComponent, XiriResponseHandlerService, XiriSankeyComponent, XiriSearchComponent, XiriSectionComponent, XiriSelectDirective, XiriSessionStorageService, XiriSidenavComponent, XiriSidepanelComponent, XiriSidepanelRef, XiriSidepanelService, XiriSkeletonComponent, XiriSnackbarService, XiriStatComponent, XiriStatGridComponent, XiriStatusComponent, XiriStepperComponent, XiriTableComponent, XiriTabsComponent, XiriTimelineComponent, XiriToolbarComponent, XiriTreeComponent, XiriUrlPipe, colsToClasses, defaultXiriDataServiceConfig, escapeHtml, notifyThemeChanged, provideXiriServices, resolveColor };
|
|
2694
|
-
export type { ThemeMode, XiriAlertConfig, XiriBarChartBar, XiriBarChartMode, XiriBarChartPoint, XiriBarChartSegment, XiriBarChartSettings, XiriBreadcrumbItem, XiriBulletChartSettings, XiriButton, XiriButtonResponse, XiriButtonResult, XiriButtonlineSettings, XiriCalendarCell, XiriCalendarSettings, XiriCalloutSettings, XiriCalloutTone, XiriCardSettings, XiriCardlinkSettings, XiriColor, XiriCols, XiriDescriptionListItem, XiriDescriptionListSettings, XiriDialogResponse, XiriDialogSettings, XiriDialogSize, XiriDividerSettings, XiriDynData, XiriDynDataType, XiriEchartsCallbackParams, XiriEchartsClick, XiriEchartsRenderItemApi, XiriEchartsTooltipParams, XiriEmptyStateSettings, XiriExpansionPanelSettings, XiriExpansionSettings, XiriExtendedColor, XiriFormField, XiriFormFieldCondition, XiriFormFieldConditionOperator, XiriFormFieldDisplay, XiriFormFieldSelectOption, XiriFormServiceData, XiriFormServiceError, XiriFormServiceReturn, XiriFormSettings, XiriFormValidator, XiriGanttSettings, XiriGanttTask, XiriGaugeChartSettings, XiriHeaderSettings, XiriHeatmapCell, XiriHeatmapSettings, XiriImagetextSettings, XiriInfopointSettings, XiriLanguage, XiriLanguageDefinition, XiriLineChartLine, XiriLineChartSettings, XiriLinksSettings, XiriListItem, XiriListSection, XiriListSettings, XiriMultiStatSettings, XiriMultiprogressItem, XiriMultiprogressSettings, XiriNavigationField, XiriPageHeaderSettings, XiriPieChartSettings, XiriPieChartSlice, XiriProgressSettings, XiriQueryActiveFilter, XiriQueryFormChangeEvent, XiriQueryResultCount, XiriQuerySettings, XiriRawTableRow, XiriRawTableSettings, XiriSankeyLink, XiriSankeyNode, XiriSankeySettings, XiriSectionSettings, XiriSelectCompare, XiriSelectPredicate, XiriSidebarSettings, XiriSidepanelConfig, XiriSkeletonType, XiriSnackbarType, XiriStatGridSettings, XiriStatSettings, XiriStatTrend, XiriStatusSettings, XiriStatusTone, XiriStatusVariant, XiriStepperFormChangeEvent, XiriStepperResponse, XiriStepperSettings, XiriStepperStep, XiriTabSettings, XiriTableCellValue, XiriTableEmptyState, XiriTableField, XiriTableOptions, XiriTableResponse, XiriTableRow, XiriTableSettings, XiriTableTreeSettings, XiriTabsSettings, XiriTagChip, XiriThemeColor, XiriTimelineItem, XiriTimelineSettings, XiriToolbarSearchConfig, XiriToolbarSettings, XiriTreeNode, XiriTreeSettings, XiriUrl, XiriValidationMessages };
|
|
2792
|
+
export { COLOR_CSS_VAR, DEFAULT_COMPARE, DEFAULT_PREDICATE, FALLBACK_COLORS, SafehtmlPipe, ThemeService, XIRI_PANEL_HOST, XiriAlertComponent, XiriBarChartComponent, XiriBreadcrumbComponent, XiriBulletChartComponent, XiriButtonComponent, XiriButtonlineComponent, XiriButtonstyleComponent, XiriCalendarComponent, XiriCalloutComponent, XiriCardComponent, XiriCardlinkComponent, XiriColsDirective, XiriDataService, XiriDataServiceConfig, XiriDescriptionListComponent, XiriDialogComponent, XiriDividerComponent, XiriDoneComponent, XiriDownloadService, XiriDynComponentComponent, XiriEchartsHostComponent, XiriEmptyStateComponent, XiriErrorComponent, XiriExpansionComponent, XiriExpansionPanelDirective, XiriFormComponent, XiriFormFieldsComponent, XiriFormService, XiriGanttComponent, XiriGaugeChartComponent, XiriHeaderComponent, XiriHeatmapComponent, XiriImagetextComponent, XiriInfopointComponent, XiriLineChartComponent, XiriLinksComponent, XiriListComponent, XiriLocalStorageService, XiriLocaleService, XiriMultiStatComponent, XiriMultiprogressComponent, XiriPageHeaderComponent, XiriPieChartComponent, XiriProgressComponent, XiriQueryComponent, XiriRawTableComponent, XiriResponseHandlerService, XiriSankeyComponent, XiriSearchComponent, XiriSectionComponent, XiriSelectDirective, XiriSessionStorageService, XiriSidenavComponent, XiriSidepanelComponent, XiriSidepanelRef, XiriSidepanelService, XiriSkeletonComponent, XiriSnackbarService, XiriStatComponent, XiriStatGridComponent, XiriStatusComponent, XiriStepperComponent, XiriTableComponent, XiriTabsComponent, XiriTimelineComponent, XiriToolbarComponent, XiriTreeComponent, XiriUrlPipe, colsToClasses, createPanelLoader, defaultXiriDataServiceConfig, escapeHtml, notifyThemeChanged, provideXiriServices, resolveColor };
|
|
2793
|
+
export type { ThemeMode, XiriAlertConfig, XiriBarChartBar, XiriBarChartMode, XiriBarChartPoint, XiriBarChartSegment, XiriBarChartSettings, XiriBreadcrumbItem, XiriBulletChartSettings, XiriButton, XiriButtonResponse, XiriButtonResult, XiriButtonlineSettings, XiriCalendarCell, XiriCalendarSettings, XiriCalloutSettings, XiriCalloutTone, XiriCardSettings, XiriCardlinkSettings, XiriColor, XiriCols, XiriDescriptionListItem, XiriDescriptionListSettings, XiriDialogResponse, XiriDialogSettings, XiriDialogSize, XiriDividerSettings, XiriDynData, XiriDynDataType, XiriEchartsCallbackParams, XiriEchartsClick, XiriEchartsRenderItemApi, XiriEchartsTooltipParams, XiriEmptyStateSettings, XiriExpansionPanelSettings, XiriExpansionSettings, XiriExtendedColor, XiriFormField, XiriFormFieldCondition, XiriFormFieldConditionOperator, XiriFormFieldDisplay, XiriFormFieldSelectOption, XiriFormServiceData, XiriFormServiceError, XiriFormServiceReturn, XiriFormSettings, XiriFormValidator, XiriGanttSettings, XiriGanttTask, XiriGaugeChartSettings, XiriHeaderSettings, XiriHeatmapCell, XiriHeatmapSettings, XiriImagetextSettings, XiriInfopointSettings, XiriLanguage, XiriLanguageDefinition, XiriLineChartLine, XiriLineChartSettings, XiriLinksSettings, XiriListItem, XiriListSection, XiriListSettings, XiriMultiStatSettings, XiriMultiprogressItem, XiriMultiprogressSettings, XiriNavigationField, XiriPageHeaderSettings, XiriPanelHost, XiriPieChartSettings, XiriPieChartSlice, XiriProgressSettings, XiriQueryActiveFilter, XiriQueryFormChangeEvent, XiriQueryResultCount, XiriQuerySettings, XiriRawTableRow, XiriRawTableSettings, XiriSankeyLink, XiriSankeyNode, XiriSankeySettings, XiriSectionSettings, XiriSelectCompare, XiriSelectPredicate, XiriSidebarSettings, XiriSidepanelConfig, XiriSkeletonType, XiriSnackbarType, XiriStatGridSettings, XiriStatSettings, XiriStatTrend, XiriStatusSettings, XiriStatusTone, XiriStatusVariant, XiriStepperFormChangeEvent, XiriStepperResponse, XiriStepperSettings, XiriStepperStep, XiriTabSettings, XiriTableCellValue, XiriTableEmptyState, XiriTableField, XiriTableOptions, XiriTableResponse, XiriTableRow, XiriTableSettings, XiriTableTreeSettings, XiriTabsSettings, XiriTagChip, XiriThemeColor, XiriTimelineItem, XiriTimelineSettings, XiriToolbarSearchConfig, XiriToolbarSettings, XiriTreeNode, XiriTreeSettings, XiriUrl, XiriValidationMessages };
|
|
2695
2794
|
//# sourceMappingURL=xiriframework-xiri-ng.d.ts.map
|