@esfaenza/flow-builder 20.3.10 → 20.3.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/README.md CHANGED
@@ -133,7 +133,7 @@ sono opzionali e rifiutano con `MissingService` se non sovrascritti.
133
133
  | §6.4 Dizionari e cataloghi | |
134
134
  |---|---|
135
135
  | `getDictionaries(processType?)` | astratto — `processType` filtra le globali (§4.1) |
136
- | `getReferences(query)` / `getWritableReferences(query)` | astratti |
136
+ | `getReferences(definition)` / `getWritableReferences(definition)` | astratti — prendono il **documento nudo** e restituiscono **tutti** i riferimenti: nel body non c'e' nessun filtro di tipo, e la compatibilita' col campo la decide l'editor (§6.4, §13.17) |
137
137
  | `getConnectorTargets(definition, excluding?)` | astratto |
138
138
  | `getOutline(definition)` | astratto |
139
139
  | `listObjects()`, `listFields(object, usage?)` | astratti |
@@ -254,14 +254,20 @@ Restano fuori i percorsi radicati sul risultato **automatico** di un elemento
254
254
  (`Leggi_Contatti.Owner.Name`): la validazione non li verifica, e l'editor non accusa cio' che il
255
255
  backend non verifica.
256
256
 
257
- Il filtro di tipo di un campo (§6.4) guarda il tipo della **radice**, e quindi non basta: in un
257
+ Il filtro di tipo di un campo (§6.4) lo applica **l'editor**: la primitiva prende il documento nudo
258
+ e restituisce tutti i riferimenti, così la stessa risposta serve tutte le tendine di una schermata
259
+ (§13.17). La regola sta in `core/reference-filter.util.ts`, ed e' la stessa per le radici e per i
260
+ segmenti di un percorso. Il filtro guarda il tipo della **radice**, e quindi non basta: in un
258
261
  parametro `String` una variabile `Structure` non e' compatibile, ma `Richiesta.Ragione` sì. Per
259
- questo `<fb-reference-picker>`, dove un filtro c'e', chiede al backend **anche** l'elenco non
260
- filtrato, e ne ricava due cose: i contenitori compaiono come righe in cui si **entra** — cliccarle
261
- apre il percorso invece di scegliere un valore del tipo sbagliato — e le radici si riconoscono
262
- tutte, così un `Leggi_Ordine.Numero` già scritto in un campo `String` non viene accusato di non
263
- esistere. Le proposte le filtra il backend come prima; i segmenti di un percorso li filtra
264
- l'editor con la stessa regola, tenendo comunque quelli da cui si scende.
262
+ questo `<fb-reference-picker>` tiene l'elenco **completo** accanto a quello filtrato, e ne ricava
263
+ due cose: i contenitori compaiono come righe in cui si **entra** — cliccarle apre il percorso
264
+ invece di scegliere un valore del tipo sbagliato — e le radici si riconoscono tutte, così un
265
+ `Leggi_Ordine.Numero` già scritto in un campo `String` non viene accusato di non esistere. Nelle
266
+ proposte non entra comunque nessun valore del tipo sbagliato: i segmenti li filtra la stessa
267
+ regola, tenendo solo quelli da cui si scende. In un campo di **destinazione** le due liste sono due
268
+ richieste — `getWritableReferences` per le proposte, `getReferences` per le radici — perche' la
269
+ scrivibilita' e' del **percorso** e non della radice: un `$User.Anagrafica.Citta` scritto a mano e'
270
+ `TARGET_NOT_WRITABLE`, non un nome che non esiste.
265
271
 
266
272
  **Le globali si navigano come le risorse.** Un percorso dichiarato dall'host puo' portare un
267
273
  contenitore, e allora `objectType` dice di che tipo: `$User.Anagrafica.Citta` si propone e si
@@ -450,6 +456,8 @@ distribuire e nessuna dipendenza da un font di icone dell'applicazione ospite.
450
456
  | 14 | **`None` non e' un operatore, e' un "da completare"** | Condizione evidenziata come incompleta, con il conteggio in testa alla sezione e la frase «la bozza si salva, l'attivazione no»; il validatore della demo lo emette come **errore** |
451
457
  | 15 | **Un valore data senza `Z` significa ora locale** | `ValueEditorComponent` ha un selettore «Ora locale / UTC (Z)», dice che cambiare fuso riscrive l'orario e non lo converte, e toglie il suffisso solo per il controllo `datetime-local`, che con il fuso resterebbe vuoto |
452
458
  | 16 | **`Structure` e `Object` non sono intercambiabili** | `StructurePickerComponent` per la classe (fuori catalogo = **errore**, `STRUCTURE_TYPE_UNKNOWN`) e `StructureMemberPickerComponent` per i membri, filtrati su `isWritable` dove serve una destinazione. Il pannello risorse mostra la classe come obbligatoria con severita' di errore e **non** mostra il valore iniziale, perche' un `structureValue` non esiste; `ReferencePickerComponent` propone `Variabile.Membro` e verifica il percorso **fino in fondo** con `core/path-navigation.ts`, con `PATH_NOT_VERIFIABLE` dove la catena si interrompe; il Transform con target classe chiede un membro invece di un campo. `FlowDictionaryStore.isStructure` legge il flag dal dizionario, non dal nome del tipo. La risposta dei membri e' la **descrizione della classe** (`{className, label, members}`), e i suoi tre esiti restano distinti fino alla UI: `FlowCatalogStore.describeStructure` li traduce in `declared` / `undeclared` / `unknown-class` / `unknown-catalog`, e solo `declared` autorizza a dire che un membro non esiste (§4.7.1) |
459
+ | 17 | **Due body diversi per due famiglie di primitive** | `HttpFlowBuilderApi`: le primitive che **analizzano** il documento — `validate`, `parse`, `references`, `references/writable`, `connector-targets`, `outline` — lo mandano **nudo alla radice**; l'involucro `{definition, flowName, …}` resta alle sole primitive di scrittura della §6.2. Sbagliare involucro non da' nessun errore: il backend legge un flow vuoto e risponde `200`. Per lo stesso motivo `getReferences`/`getWritableReferences` prendono la `FlowDefinition` e non un oggetto query: non c'e' nessun campo di filtro nel body, e il filtro di tipo lo applica l'editor con `core/reference-filter.util.ts` |
460
+ | 18 | **Gli enum si scrivono come stringhe** | Il modello e' fatto di unioni di stringhe letterali (`FlowDataType`, `FlowVersionStatus`, …) e non di enum numerici: `JSON.stringify` non ha modo di produrre un ordinale. Conta perche' `"status": 3` non e' `Draft` ma `InvalidDraft` e `"dataType": 0` e' `String`, non "non specificato" — nessun errore lo segnalerebbe. Chi scrive un'altra implementazione di `FlowBuilderApi` non traduca i valori in numeri |
453
461
 
454
462
  Altre regole del contratto rispettate: liste vuote omesse invece di scritte come `[]` (§2),
455
463
  `filterLogic` mostrato **solo** dove il modello lo prevede (§4.4), `fullName` / `status` mai
@@ -410,6 +410,12 @@ class HttpFlowBuilderApi extends FlowBuilderApi {
410
410
  return this.del(`/flows/editor/${HttpFlowBuilderApi.segment(flowName)}`);
411
411
  }
412
412
  // ---------------------------------------------------------------- §6.3
413
+ /**
414
+ * Documento nudo alla radice: le primitive che **analizzano** il documento non usano
415
+ * l'involucro `{definition, flowName, …}` della §6.2, che serve solo a chi deve sapere dove
416
+ * riporlo (§6.4, §13.17). Sbagliare involucro qui non produce nessun errore: si otterrebbe la
417
+ * validazione di un flow vuoto, cioe' «manca lo Start».
418
+ */
413
419
  validateDefinition(definition) {
414
420
  return this.post(`/flows/editor/validate`, definition);
415
421
  }
@@ -421,11 +427,17 @@ class HttpFlowBuilderApi extends FlowBuilderApi {
421
427
  // `processType` filtra le globali: `$Record` non esiste in uno screen flow (§4.1).
422
428
  return this.get('/flows/editor/dictionaries', HttpFlowBuilderApi.params({ processType }));
423
429
  }
424
- getReferences(query) {
425
- return this.post('/flows/editor/references', query);
430
+ /**
431
+ * Il body e' il documento **nudo**, come per validate/parse/outline/connector-targets (§6.4,
432
+ * §13.17): avvolgerlo (`{definition: …}`) o aggiungergli campi di filtro non da' nessun errore
433
+ * — il backend deserializza un `Flow` in cui non riconosce nessuna proprieta', risponde `200` e
434
+ * l'elenco contiene le sole globali. Se le tendine sembrano vuote, si guarda qui prima di tutto.
435
+ */
436
+ getReferences(definition) {
437
+ return this.post('/flows/editor/references', definition);
426
438
  }
427
- getWritableReferences(query) {
428
- return this.post('/flows/editor/writable-references', query);
439
+ getWritableReferences(definition) {
440
+ return this.post('/flows/editor/writable-references', definition);
429
441
  }
430
442
  getConnectorTargets(definition, excluding) {
431
443
  return this.post('/flows/editor/connector-targets', definition, HttpFlowBuilderApi.params({ excluding }));
@@ -1601,6 +1613,45 @@ function navigatePath(catalog, request) {
1601
1613
  return { resolution: resolution.asReadonly(), isPending: isPending.asReadonly() };
1602
1614
  }
1603
1615
 
1616
+ /**
1617
+ * Filtro di compatibilita' dei riferimenti — FRONTEND.md §6.4.
1618
+ *
1619
+ * `POST /flows/references` e `POST /flows/references/writable` prendono il **documento nudo** e
1620
+ * restituiscono **tutti** i riferimenti, ognuno col proprio `dataType`, `isCollection` e
1621
+ * `isWritable`: nel body non c'e' nessun campo di filtro. Chi sceglie cosa e' compatibile col
1622
+ * campo che l'utente sta compilando e' quindi l'editor, ed e' deliberato — la stessa risposta
1623
+ * serve tutte le tendine di una schermata, quindi si chiede una volta e si filtra n volte.
1624
+ *
1625
+ * Il filtro guarda **la radice**, non il percorso: una radice scartata si porta via anche cio'
1626
+ * che sta sotto, e chi propone i segmenti navigati applica la stessa regola separatamente
1627
+ * (`reference-picker`).
1628
+ */
1629
+ /** `true` se il campo non pone nessun vincolo: lì filtrare e' inutile. */
1630
+ function isEmptyReferenceFilter(filter) {
1631
+ return !filter || (!filter.dataType && filter.isCollection == null && !filter.objectType);
1632
+ }
1633
+ function matchesReferenceFilter(entry, filter) {
1634
+ // Un riferimento di tipo ignoto non si scarta: sarebbe peggio nasconderlo.
1635
+ if (filter.dataType && entry.dataType && entry.dataType !== filter.dataType) {
1636
+ return false;
1637
+ }
1638
+ // `!= null`, non `!== undefined`: nei template il safe navigation di Angular produce **null**,
1639
+ // e trattarlo come "voglio i valori singoli" svuoterebbe l'elenco.
1640
+ if (filter.isCollection != null && entry.isCollection != null && !!entry.isCollection !== filter.isCollection) {
1641
+ return false;
1642
+ }
1643
+ if (filter.objectType && entry.objectType && entry.objectType !== filter.objectType) {
1644
+ return false;
1645
+ }
1646
+ return true;
1647
+ }
1648
+ function filterReferences(references, filter) {
1649
+ if (isEmptyReferenceFilter(filter)) {
1650
+ return [...references];
1651
+ }
1652
+ return references.filter((entry) => matchesReferenceFilter(entry, filter));
1653
+ }
1654
+
1604
1655
  /**
1605
1656
  * Lo store del documento in lavorazione.
1606
1657
  *
@@ -3702,6 +3753,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
3702
3753
  * pur non essendo dichiarati in nessuna collection di risorse: la primitiva li restituisce
3703
3754
  * già, ed e' il motivo per cui non si ricostruisce l'elenco lato client.
3704
3755
  *
3756
+ * La primitiva prende il **documento nudo** e restituisce **tutti** i riferimenti: il filtro di
3757
+ * tipo del campo lo applica l'editor, con `core/reference-filter.util` (§6.4, §13.17). L'elenco
3758
+ * completo resta comunque a portata di mano, e serve — il filtro guarda la **radice**, e una radice
3759
+ * scartata si porta via cio' che sta sotto: in un parametro `String` una variabile `Structure` non
3760
+ * e' compatibile, ma `Richiesta.Ragione` sì.
3761
+ *
3705
3762
  * I **percorsi navigati** non sono piu' tutti uguali. Quando la radice e' una risorsa dichiarata
3706
3763
  * di cui si conosce la forma — una `Structure` con la sua classe, un record con la sua entita' — il
3707
3764
  * percorso si naviga **fino in fondo** (§4.4, §4.7.1): i segmenti si propongono un livello alla
@@ -3738,21 +3795,41 @@ class ReferencePickerComponent {
3738
3795
  */
3739
3796
  elementsOnly = input(false, ...(ngDevMode ? [{ debugName: "elementsOnly" }] : []));
3740
3797
  valueChange = output();
3741
- references = signal([], ...(ngDevMode ? [{ debugName: "references" }] : []));
3742
3798
  /**
3743
- * L'elenco **senza** il filtro di tipo, che serve solo a riconoscere le radici dei percorsi.
3799
+ * L'elenco come arriva dalla primitiva, **senza** il filtro di tipo.
3744
3800
  *
3745
- * Il filtro (§6.4) guarda il tipo della **radice**, e una radice scartata si porta via anche cio'
3746
- * che sta sotto: in un parametro `String` una variabile `Structure` non e' compatibile, ma
3747
- * `Richiesta.Ragione` lo e', e `Leggi_Ordine` non e' un `String` mentre `Leggi_Ordine.Numero` lo
3748
- * e'. Senza questo elenco il primo membro non si puo' proporre e il secondo viene accusato di non
3749
- * esistere pur essendo un riferimento valido (§4.5).
3750
- *
3751
- * Vuoto dove il filtro non c'e': lì {@link references} e' già l'elenco completo.
3801
+ * Serve a due cose oltre che a produrre le proposte: riconoscere le radici dei percorsi e
3802
+ * mostrare i contenitori come righe in cui si entra. Il filtro (§6.4) guarda il tipo della
3803
+ * **radice**, e una radice scartata si porta via anche cio' che sta sotto: in un parametro
3804
+ * `String` una variabile `Structure` non e' compatibile, ma `Richiesta.Ragione` lo e', e
3805
+ * `Leggi_Ordine` non e' un `String` mentre `Leggi_Ordine.Numero` lo e'. Senza questo elenco il
3806
+ * primo membro non si puo' proporre e il secondo viene accusato di non esistere pur essendo un
3807
+ * riferimento valido (§4.5).
3752
3808
  */
3753
3809
  unfiltered = signal([], ...(ngDevMode ? [{ debugName: "unfiltered" }] : []));
3810
+ /**
3811
+ * L'insieme da cui si pesca prima del filtro di tipo: in un campo di destinazione e' la
3812
+ * risposta di `getWritableReferences`, altrove {@link unfiltered} stesso.
3813
+ */
3814
+ available = signal([], ...(ngDevMode ? [{ debugName: "available" }] : []));
3815
+ /**
3816
+ * Le proposte compatibili col campo. Il filtro e' **locale**: la primitiva prende il documento
3817
+ * nudo e restituisce tutto (§6.4, §13.17), cosi' la stessa risposta serve tutte le tendine di
3818
+ * una schermata.
3819
+ */
3820
+ references = computed(() => filterReferences(this.available(), {
3821
+ /**
3822
+ * `?? undefined` non e' cosmetico: nei template il safe navigation di Angular
3823
+ * (`describe(x)?.isCollection`) produce **null**, non `undefined`. Un `isCollection: null`
3824
+ * letto come "filtra per valore singolo" svuoterebbe l'elenco: un campo senza filtro non
3825
+ * deve porre nessun vincolo.
3826
+ */
3827
+ dataType: this.dataType() ?? undefined,
3828
+ isCollection: this.isCollection() ?? undefined,
3829
+ objectType: this.objectType() ?? undefined,
3830
+ }), ...(ngDevMode ? [{ debugName: "references" }] : []));
3754
3831
  /** Tutto cio' che puo' essere la radice di un percorso, filtrato o no. */
3755
- roots = computed(() => [...this.references(), ...this.unfiltered()], ...(ngDevMode ? [{ debugName: "roots" }] : []));
3832
+ roots = computed(() => this.unfiltered(), ...(ngDevMode ? [{ debugName: "roots" }] : []));
3756
3833
  isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
3757
3834
  loadError = signal(null, ...(ngDevMode ? [{ debugName: "loadError" }] : []));
3758
3835
  isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
@@ -3763,65 +3840,64 @@ class ReferencePickerComponent {
3763
3840
  effect(() => {
3764
3841
  const definition = this.store.document();
3765
3842
  const writable = this.writableOnly();
3766
- const dataType = this.dataType();
3767
- const isCollection = this.isCollection();
3768
- const objectType = this.objectType();
3769
3843
  if (this.elementsOnly()) {
3770
3844
  // I node li conosce già il documento: nessuna richiesta necessaria.
3771
- this.unfiltered.set([]);
3772
- this.references.set(this.store.nodes().map((reference) => ({
3845
+ const nodes = this.store.nodes().map((reference) => ({
3773
3846
  name: reference.name,
3774
3847
  label: reference.node.label ?? null,
3775
3848
  kind: 'ElementOutput',
3776
3849
  description: this.dictionaries.labelOf(reference.type),
3777
3850
  isWritable: false,
3778
- })));
3851
+ }));
3852
+ this.unfiltered.set(nodes);
3853
+ this.available.set(nodes);
3779
3854
  return;
3780
3855
  }
3781
- /**
3782
- * `?? undefined` non e' cosmetico: nei template il safe navigation di Angular
3783
- * (`describe(x)?.isCollection`) produce **null**, non `undefined`. Un `isCollection: null`
3784
- * che arriva alla primitiva viene letto come "filtra per valore singolo" e svuota
3785
- * l'elenco: un campo senza filtro deve mandare il campo **assente**.
3786
- */
3787
- const query = {
3788
- definition,
3789
- dataType: dataType ?? undefined,
3790
- isCollection: isCollection ?? undefined,
3791
- objectType: objectType ?? undefined,
3792
- };
3793
3856
  this.isLoading.set(true);
3794
3857
  this.loadError.set(null);
3795
- const request = writable ? this.api.getWritableReferences(query) : this.api.getReferences(query);
3796
- void request
3797
- .then((list) => this.references.set(list ?? []))
3858
+ /**
3859
+ * Una sola richiesta dove non c'e' vincolo di scrittura: il body e' il documento nudo e la
3860
+ * risposta e' completa, quindi l'elenco delle radici e quello da cui si pesca sono lo stesso
3861
+ * (§6.4, §13.17). Il filtro di tipo lo applica {@link references}.
3862
+ */
3863
+ void this.api
3864
+ .getReferences(definition)
3865
+ .then((list) => {
3866
+ this.unfiltered.set(list ?? []);
3867
+ if (!writable) {
3868
+ this.available.set(list ?? []);
3869
+ }
3870
+ })
3798
3871
  .catch((error) => {
3799
3872
  // Senza l'elenco il campo resta scrivibile a mano: e' meglio di un campo bloccato.
3800
3873
  this.loadError.set(error instanceof Error ? error.message : String(error));
3801
- this.references.set([]);
3802
- })
3803
- .finally(() => this.isLoading.set(false));
3804
- /**
3805
- * Seconda richiesta **senza filtri**, per le sole radici: chi filtra le proposte resta il
3806
- * backend — da qui non entra nessun valore del tipo sbagliato, entrano i contenitori in cui
3807
- * scendere e i nomi da non accusare.
3808
- *
3809
- * Non filtrata vuol dire anche `getReferences` e non `getWritableReferences`, pure in un campo
3810
- * di destinazione: la scrivibilita' e' del **percorso**, non della radice, e le radici scartate
3811
- * sono quelle che servono per dire la cosa giusta — un `$User.Anagrafica.Citta` scritto a mano
3812
- * e' `TARGET_NOT_WRITABLE`, non un nome che non esiste. Dove non c'e' filtro **ne'** vincolo di
3813
- * scrittura la prima richiesta le contiene già, e la seconda non si fa.
3814
- */
3815
- const hasTypeFilter = !!query.dataType || query.isCollection != null || !!query.objectType;
3816
- if (!hasTypeFilter && !writable) {
3817
3874
  this.unfiltered.set([]);
3875
+ if (!writable) {
3876
+ this.available.set([]);
3877
+ }
3878
+ })
3879
+ .finally(() => {
3880
+ if (!writable) {
3881
+ this.isLoading.set(false);
3882
+ }
3883
+ });
3884
+ if (!writable) {
3818
3885
  return;
3819
3886
  }
3887
+ /**
3888
+ * In un campo di destinazione le proposte sono un elenco a parte, ma le **radici** restano
3889
+ * quelle di `getReferences`: la scrivibilita' e' del **percorso**, non della radice, e le
3890
+ * radici escluse sono quelle che servono per dire la cosa giusta — un `$User.Anagrafica.Citta`
3891
+ * scritto a mano e' `TARGET_NOT_WRITABLE`, non un nome che non esiste.
3892
+ */
3820
3893
  void this.api
3821
- .getReferences({ definition })
3822
- .then((list) => this.unfiltered.set(list ?? []))
3823
- // Una radice in meno degrada le proposte, non il campo: nessun messaggio.
3824
- .catch(() => this.unfiltered.set([]));
3894
+ .getWritableReferences(definition)
3895
+ .then((list) => this.available.set(list ?? []))
3896
+ .catch((error) => {
3897
+ this.loadError.set(error instanceof Error ? error.message : String(error));
3898
+ this.available.set([]);
3899
+ })
3900
+ .finally(() => this.isLoading.set(false));
3825
3901
  });
3826
3902
  }
3827
3903
  /**
@@ -3922,25 +3998,19 @@ class ReferencePickerComponent {
3922
3998
  }));
3923
3999
  }, ...(ngDevMode ? [{ debugName: "pathReferences" }] : []));
3924
4000
  /**
3925
- * Lo stesso filtro che il backend applica alle radici (§6.4), applicato ai segmenti di un
3926
- * percorso: in un parametro `String` non si propone un membro `Date`. Un segmento da cui si
3927
- * scende resta comunque proposto anche se il suo tipo non combacia — e' la strada per arrivare
3928
- * al membro che combacia.
4001
+ * Lo stesso filtro delle radici (§6.4), applicato ai segmenti di un percorso: in un parametro
4002
+ * `String` non si propone un membro `Date`. Un segmento da cui si scende resta comunque proposto
4003
+ * anche se il suo tipo non combacia — e' la strada per arrivare al membro che combacia.
3929
4004
  */
3930
4005
  matchesTarget(entry) {
3931
4006
  if (entry.next) {
3932
4007
  return true;
3933
4008
  }
3934
- const dataType = this.dataType();
3935
- if (dataType && entry.dataType && entry.dataType !== dataType) {
3936
- return false;
3937
- }
3938
- const isCollection = this.isCollection();
3939
- if (isCollection != null && entry.isCollection != null && !!entry.isCollection !== isCollection) {
3940
- return false;
3941
- }
3942
- const objectType = this.objectType();
3943
- return !(objectType && entry.objectType && entry.objectType !== objectType);
4009
+ return matchesReferenceFilter(entry, {
4010
+ dataType: this.dataType() ?? undefined,
4011
+ isCollection: this.isCollection() ?? undefined,
4012
+ objectType: this.objectType() ?? undefined,
4013
+ });
3944
4014
  }
3945
4015
  /**
3946
4016
  * I contenitori che il filtro di tipo ha scartato: si mostrano per **entrarci**, non per
@@ -5301,7 +5371,7 @@ class ConditionEditorComponent {
5301
5371
  return;
5302
5372
  }
5303
5373
  void this.api
5304
- .getReferences({ definition })
5374
+ .getReferences(definition)
5305
5375
  .then((list) => this.references.set(list ?? []))
5306
5376
  // Senza l'elenco non si segnala nulla: non sapere non e' sapere che e' sbagliato.
5307
5377
  .catch(() => this.references.set([]));
@@ -9997,5 +10067,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
9997
10067
  * Generated bundle index. Do not edit.
9998
10068
  */
9999
10069
 
10000
- export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, elementIcon, emptyFlowDefinition, flowNodeWidth, flowNodeWidthClass, isCustomConditionLogic, isGlobalReference, isNumericType, isTypeCheckedOperator, isValidFlowName, loadPathLevel, moveCondition, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, resolvePath, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, variantFieldOf, variantOf, variantPresetOf };
10070
+ export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, elementIcon, emptyFlowDefinition, filterReferences, flowNodeWidth, flowNodeWidthClass, isCustomConditionLogic, isEmptyReferenceFilter, isGlobalReference, isNumericType, isTypeCheckedOperator, isValidFlowName, loadPathLevel, matchesReferenceFilter, moveCondition, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, resolvePath, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, variantFieldOf, variantOf, variantPresetOf };
10001
10071
  //# sourceMappingURL=esfaenza-flow-builder.mjs.map