@xiriframework/xiri-ng 0.2.43 → 0.2.45
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 +1197 -902
- package/fesm2022/xiriframework-xiri-ng.mjs.map +1 -1
- package/package.json +10 -12
- package/skills/xiri-ng-expert/SKILL.md +4 -0
- package/skills/xiri-ng-expert/references/components.md +3 -0
- package/skills/xiri-ng-expert/references/form-fields.md +16 -1
- package/types/xiriframework-xiri-ng.d.ts +358 -249
- package/types/xiriframework-xiri-ng.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xiriframework/xiri-ng",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.45",
|
|
4
4
|
"description": "Angular UI component library for the Xiri Framework",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -20,17 +20,15 @@
|
|
|
20
20
|
"tslib": "^2.8.1"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"@angular/
|
|
24
|
-
"@angular/
|
|
25
|
-
"@angular/
|
|
26
|
-
"@angular/
|
|
27
|
-
"@angular/
|
|
28
|
-
"@angular/
|
|
29
|
-
"@angular/
|
|
30
|
-
"@angular/
|
|
31
|
-
"@angular/
|
|
32
|
-
"@angular/forms": "^21.2",
|
|
33
|
-
"@angular/material-date-fns-adapter": "^21.2",
|
|
23
|
+
"@angular/compiler": "^22.0",
|
|
24
|
+
"@angular/platform-browser": "^22.0",
|
|
25
|
+
"@angular/router": "^22.0",
|
|
26
|
+
"@angular/common": "^22.0",
|
|
27
|
+
"@angular/core": "^22.0",
|
|
28
|
+
"@angular/material": "^22.0",
|
|
29
|
+
"@angular/cdk": "^22.0",
|
|
30
|
+
"@angular/forms": "^22.0",
|
|
31
|
+
"@angular/material-date-fns-adapter": "^22.0",
|
|
34
32
|
"date-fns": "^4.3",
|
|
35
33
|
"@date-fns/tz": "^1.5",
|
|
36
34
|
"material-symbols": ">=0.44",
|
|
@@ -208,6 +208,8 @@ Keine Pagination, kein Sort, keine API — nur Daten rendern.
|
|
|
208
208
|
|
|
209
209
|
Debounce 300ms, ergebnis unter dem Filter als `XiriDynData[]`.
|
|
210
210
|
|
|
211
|
+
**Auto-Load beim Öffnen:** Mit gesetzter `url` lädt die Query automatisch beim ersten gültigen Filter-Zustand. Nutzt der Filter stattdessen einen `buttonline`-Button zum Nachladen, setze `autoLoad: true` an diesem Button (`action:'api'`) → er feuert einmalig automatisch beim Laden, sobald der Filter gültig ist (siehe xiri-button unten).
|
|
212
|
+
|
|
211
213
|
## xiri-dialog — Modal-Dialog
|
|
212
214
|
|
|
213
215
|
```typescript
|
|
@@ -251,6 +253,8 @@ buttons: XiriButton[] = [
|
|
|
251
253
|
|
|
252
254
|
`data?: Record<string, any>` — Custom-Payload, das beim Klick mit `filterData` gemerged in den POST-Body geht (für `action: 'api'` / `'download'`). Der Backend-Builder (`xiri-go`) setzt das via `button.WithData(...)`. Beispiel: CSV-Download-Button hat `data: { _csv: true }`, das Backend liest das Flag in `LoadFilterData` und schaltet auf CSV-Output.
|
|
253
255
|
|
|
256
|
+
`autoLoad?: boolean` — löst die Button-Aktion **einmalig automatisch beim Laden** aus, sobald der Button nicht mehr disabled ist (`filterData !== null` und nicht via `disabled` gesperrt). Für Filter mit „Suchen"-Button, dessen Ergebnis ohne initialen Klick erscheinen soll. Backend: `button.WithAutoLoad(true)`. Details: `references/components.md`.
|
|
257
|
+
|
|
254
258
|
## xiri-stepper — Multi-Step Wizard
|
|
255
259
|
|
|
256
260
|
```typescript
|
|
@@ -195,6 +195,8 @@ interface XiriButtonResult {
|
|
|
195
195
|
|
|
196
196
|
**Button am Ende/laufend ändern (`button`-Patch):** Jede vom Button verarbeitete Antwort darf ein `button`-Objekt mitschicken (`{ text?, color?, icon?, type?, hint?, disabled? }`), das auf den Button gemergt und angezeigt wird — z. B. am Worker-Ende `text:'Erledigt ✓'`, `color:'success'`, `disabled:true`. Der Override bleibt, bis die Aktion erneut ausgelöst wird (dann Reset). Backend: `….WithButton(response.NewButtonPatch().WithText("Erledigt ✓").WithColor("success").Disable())`.
|
|
197
197
|
|
|
198
|
+
**Auto-Load (`button.autoLoad`):** Mit `autoLoad: true` löst der Button seine Aktion **einmalig automatisch beim Laden** aus, sobald er nicht mehr disabled ist — d. h. `filterData !== null` **und** nicht via `disabled` gesperrt (in einer `xiri-query` bindet die Query `disabled = !formValid`, also feuert es erst bei gültigem Filter). Typischer Fall: ein Filter mit „Suchen"-Button (`action:'api'`), dessen Ergebnisse ohne initialen Klick erscheinen sollen. Feuert **genau einmal** (One-shot, per `effect` intern); spätere `filterData`-Änderungen lösen kein erneutes Auto-Load aus — dann klickt der Nutzer wie gewohnt. Backend-Setter: `button.WithAutoLoad(true)` (siehe xiri-go-expert). Alternative ohne Button: `XiriQuerySettings.url` setzen → die Query lädt selbst automatisch beim ersten gültigen Filter-Zustand.
|
|
199
|
+
|
|
198
200
|
JSON-Beispiele:
|
|
199
201
|
```json
|
|
200
202
|
// läuft (vom Status-Endpoint, vom Button gepollt):
|
|
@@ -251,6 +253,7 @@ interface XiriButton {
|
|
|
251
253
|
tabIndex?: number;
|
|
252
254
|
inline?: boolean;
|
|
253
255
|
disabled?: boolean;
|
|
256
|
+
autoLoad?: boolean; // Aktion einmalig automatisch beim Laden auslösen (siehe unten)
|
|
254
257
|
|
|
255
258
|
data?: any;
|
|
256
259
|
target?: string;
|
|
@@ -219,10 +219,12 @@ Array = **UND**-Verknüpfung:
|
|
|
219
219
|
|
|
220
220
|
```typescript
|
|
221
221
|
export interface XiriFormFieldSelectOption {
|
|
222
|
-
id: number;
|
|
222
|
+
id: number | string;
|
|
223
223
|
name: string;
|
|
224
224
|
disabled?: boolean;
|
|
225
225
|
color?: XiriColor;
|
|
226
|
+
isGroup?: boolean; // markiert einen Gruppen-/Elternknoten (treeselect)
|
|
227
|
+
children?: XiriFormFieldSelectOption[]; // verschachtelte Optionen → Hierarchie für treeselect
|
|
226
228
|
}
|
|
227
229
|
```
|
|
228
230
|
|
|
@@ -237,6 +239,19 @@ Inline (statisch):
|
|
|
237
239
|
]}
|
|
238
240
|
```
|
|
239
241
|
|
|
242
|
+
Hierarchisch (`treeselect` — Optionen über `children` verschachteln; auswählbar sind die Blattknoten, `isGroup` markiert Elternknoten):
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
{ id: 'region', type: 'treeselect', name: 'Region',
|
|
246
|
+
list: [
|
|
247
|
+
{ id: 'eu', name: 'Europa', isGroup: true, children: [
|
|
248
|
+
{ id: 'at', name: 'Österreich' },
|
|
249
|
+
{ id: 'de', name: 'Deutschland' },
|
|
250
|
+
]},
|
|
251
|
+
{ id: 'us', name: 'USA' },
|
|
252
|
+
]}
|
|
253
|
+
```
|
|
254
|
+
|
|
240
255
|
Per Backend (`model` oder `select` mit `url`):
|
|
241
256
|
|
|
242
257
|
```typescript
|