@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xiriframework/xiri-ng",
3
- "version": "0.2.43",
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/animations": "^21.2",
24
- "@angular/compiler": "^21.2",
25
- "@angular/platform-browser": "^21.2",
26
- "@angular/platform-browser-dynamic": "^21.2",
27
- "@angular/router": "^21.2",
28
- "@angular/common": "^21.2",
29
- "@angular/core": "^21.2",
30
- "@angular/material": "^21.2",
31
- "@angular/cdk": "^21.2",
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