@rslsp1/fa-app-tools 4.0.0 → 5.0.0

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.
@@ -5225,6 +5225,29 @@ function findPromptRun(events, runId) {
5225
5225
  return collectPromptRuns(events).find((run) => run.run_id === runId) ?? null;
5226
5226
  }
5227
5227
 
5228
+ // src/lib/szenen/bildVorschau.ts
5229
+ async function ladeVorschauen(port, mediaRefs, fertig, optionen = {}) {
5230
+ const laden = port.loadPreview;
5231
+ if (!laden) return;
5232
+ const parallel = Math.max(1, optionen.parallel ?? 4);
5233
+ const lauf = optionen.lauf;
5234
+ const offen = mediaRefs.filter((ref) => !(optionen.hat?.(ref) ?? false));
5235
+ let naechster = 0;
5236
+ async function arbeiter() {
5237
+ while (naechster < offen.length) {
5238
+ if (lauf?.abgebrochen) return;
5239
+ const ref = offen[naechster];
5240
+ naechster += 1;
5241
+ const ergebnis = await laden.call(port, ref);
5242
+ if (lauf?.abgebrochen) return;
5243
+ if (ergebnis.kind === "ok") fertig(ref, ergebnis.value);
5244
+ }
5245
+ }
5246
+ await Promise.all(
5247
+ Array.from({ length: Math.min(parallel, offen.length) }, () => arbeiter())
5248
+ );
5249
+ }
5250
+
5228
5251
  // src/lib/szenen/textGenerationPort.ts
5229
5252
  function simulatedAnswerFor(request) {
5230
5253
  let input;
@@ -6183,7 +6206,7 @@ async function runSceneDerivation(input, port, userPrompt) {
6183
6206
  }
6184
6207
 
6185
6208
  // src/features/szenen/SzenenView.tsx
6186
- import { useMemo as useMemo3, useState as useState16 } from "react";
6209
+ import { useMemo as useMemo4, useState as useState16 } from "react";
6187
6210
 
6188
6211
  // src/features/szenen/areas/ElementsArea.tsx
6189
6212
  import { useState as useState11 } from "react";
@@ -9973,7 +9996,7 @@ var MediaArea = ({ port }) => {
9973
9996
  };
9974
9997
 
9975
9998
  // src/features/szenen/areas/DeriveArea.tsx
9976
- import { useRef as useRef2, useState as useState15 } from "react";
9999
+ import { useEffect as useEffect5, useMemo as useMemo3, useRef as useRef2, useState as useState15 } from "react";
9977
10000
 
9978
10001
  // src/features/szenen/areas/RecoveryPanel.tsx
9979
10002
  import { useState as useState13 } from "react";
@@ -10341,14 +10364,64 @@ function readAsBase642(datei) {
10341
10364
  leser.readAsDataURL(datei);
10342
10365
  });
10343
10366
  }
10367
+ function useVorschauen(port, mediaRefs) {
10368
+ const [quellen, setQuellen] = useState15(() => /* @__PURE__ */ new Map());
10369
+ const gehalten = useRef2(/* @__PURE__ */ new Map());
10370
+ const schluessel = mediaRefs.join(" ");
10371
+ useEffect5(() => {
10372
+ const bestand = port.imageLibrary;
10373
+ if (!bestand?.loadPreview) return void 0;
10374
+ const refs = schluessel ? schluessel.split(" ") : [];
10375
+ const lauf = { abgebrochen: false };
10376
+ void ladeVorschauen(
10377
+ bestand,
10378
+ refs,
10379
+ (mediaRef, quelle) => {
10380
+ gehalten.current.set(mediaRef, quelle);
10381
+ setQuellen(new Map(gehalten.current));
10382
+ },
10383
+ { parallel: 4, hat: (ref) => gehalten.current.has(ref), lauf }
10384
+ );
10385
+ return () => {
10386
+ lauf.abgebrochen = true;
10387
+ };
10388
+ }, [port, schluessel]);
10389
+ return quellen;
10390
+ }
10391
+ var Kachel = ({ quelle, alt }) => /* @__PURE__ */ jsx17("span", { className: "szenen-bildkachel", children: quelle ? /* @__PURE__ */ jsx17("img", { src: quelle, alt, loading: "lazy" }) : /* @__PURE__ */ jsx17("span", { className: "szenen-bildkachel__leer", "aria-hidden": "true" }) });
10344
10392
  var BildWaehler = ({ port, gewaehlt, onWaehlen, onEntfernen }) => {
10345
10393
  const [suche, setSuche] = useState15("");
10346
- const [bilder] = usePortQuery(
10347
- () => port.imageLibrary.listImages({ search: suche.trim() || void 0, limit: 60 }),
10394
+ const [offenesWerk, setOffenesWerk] = useState15(null);
10395
+ const [items] = usePortQuery(
10396
+ () => port.imageLibrary.listItems({ search: suche.trim() || void 0, limit: 60 }),
10348
10397
  [port, suche]
10349
10398
  );
10399
+ const werk = items.status === "ready" ? items.value.find((i) => i.itemRef === offenesWerk) ?? null : null;
10400
+ const sichtbar = useMemo3(() => {
10401
+ const refs = werk ? werk.images.map((b) => b.mediaRef) : items.status === "ready" ? items.value.map((i) => i.images[0]?.mediaRef).filter((r) => Boolean(r)) : [];
10402
+ return [.../* @__PURE__ */ new Set([...refs, ...gewaehlt.map((b) => b.mediaRef)])];
10403
+ }, [items, werk, gewaehlt]);
10404
+ const quellen = useVorschauen(port, sichtbar);
10405
+ const quelleVon = (bild) => bild.thumbUrl || quellen.get(bild.mediaRef) || null;
10350
10406
  return /* @__PURE__ */ jsxs17("div", { className: "szenen-bildwahl", "data-testid": "bildwahl", children: [
10351
- /* @__PURE__ */ jsxs17("label", { className: "szenen-field", children: [
10407
+ werk ? /* @__PURE__ */ jsxs17("div", { className: "szenen-bildwahl__kopf", children: [
10408
+ /* @__PURE__ */ jsx17(
10409
+ "button",
10410
+ {
10411
+ type: "button",
10412
+ className: "szenen-bildwahl__zurueck",
10413
+ onClick: () => setOffenesWerk(null),
10414
+ "data-testid": "bildwahl-zurueck",
10415
+ children: "Zurueck zur Auswahl"
10416
+ }
10417
+ ),
10418
+ /* @__PURE__ */ jsxs17("span", { className: "szenen-bildwahl__werktitel", "data-testid": "bildwahl-werktitel", children: [
10419
+ werk.title,
10420
+ " \xB7 ",
10421
+ werk.images.length,
10422
+ " Bilder"
10423
+ ] })
10424
+ ] }) : /* @__PURE__ */ jsxs17("label", { className: "szenen-field", children: [
10352
10425
  /* @__PURE__ */ jsx17("span", { children: "Bild aus dem Bestand" }),
10353
10426
  /* @__PURE__ */ jsx17(
10354
10427
  "input",
@@ -10356,31 +10429,70 @@ var BildWaehler = ({ port, gewaehlt, onWaehlen, onEntfernen }) => {
10356
10429
  type: "search",
10357
10430
  value: suche,
10358
10431
  onChange: (e) => setSuche(e.target.value),
10432
+ onKeyDown: (e) => {
10433
+ if (e.key === "Enter") e.preventDefault();
10434
+ },
10359
10435
  placeholder: "Suchen \u2026",
10360
10436
  "data-testid": "bild-suche"
10361
10437
  }
10362
10438
  )
10363
10439
  ] }),
10364
- bilder.status === "loading" && /* @__PURE__ */ jsx17("p", { children: "Bilder werden geladen \u2026" }),
10365
- bilder.status === "error" && /* @__PURE__ */ jsxs17("p", { className: "szenen-error", role: "alert", children: [
10440
+ items.status === "loading" && /* @__PURE__ */ jsx17("p", { children: "Bilder werden geladen \u2026" }),
10441
+ items.status === "error" && /* @__PURE__ */ jsxs17("p", { className: "szenen-error", role: "alert", children: [
10366
10442
  "Der Bildbestand ist nicht lesbar: ",
10367
- bilder.message
10443
+ items.message
10368
10444
  ] }),
10369
- bilder.status === "ready" && bilder.value.length === 0 && /* @__PURE__ */ jsx17("p", { className: "szenen-empty", "data-testid": "bildwahl-leer", children: "Zu dieser Suche gibt es kein Bild. Ohne Treffer bleibt der Upload." }),
10370
- bilder.status === "ready" && bilder.value.length > 0 && /* @__PURE__ */ jsx17("ul", { className: "szenen-bildwahl__liste", children: bilder.value.map((bild) => /* @__PURE__ */ jsx17("li", { children: /* @__PURE__ */ jsxs17(
10445
+ items.status === "ready" && items.value.length === 0 && /* @__PURE__ */ jsx17("p", { className: "szenen-empty", "data-testid": "bildwahl-leer", children: "Zu dieser Suche gibt es kein Bild. Ohne Treffer bleibt der Upload." }),
10446
+ werk && /* @__PURE__ */ jsx17("ul", { className: "szenen-bildwahl__raster", "data-testid": "bildwahl-galerie", children: werk.images.map((bild, position) => /* @__PURE__ */ jsx17("li", { children: /* @__PURE__ */ jsxs17(
10371
10447
  "button",
10372
10448
  {
10373
10449
  type: "button",
10374
- onClick: () => onWaehlen(bild),
10450
+ onClick: () => {
10451
+ onWaehlen(bild);
10452
+ setOffenesWerk(null);
10453
+ },
10375
10454
  "data-testid": `bild-waehlen-${bild.mediaRef}`,
10455
+ title: bild.title,
10376
10456
  children: [
10377
- bild.thumbUrl && /* @__PURE__ */ jsx17("img", { src: bild.thumbUrl, alt: "" }),
10378
- /* @__PURE__ */ jsx17("span", { children: bild.title })
10457
+ /* @__PURE__ */ jsx17(Kachel, { quelle: quelleVon(bild), alt: bild.title }),
10458
+ /* @__PURE__ */ jsxs17("span", { className: "szenen-bildwahl__nummer", children: [
10459
+ "#",
10460
+ position + 1
10461
+ ] })
10379
10462
  ]
10380
10463
  }
10381
10464
  ) }, bild.mediaRef)) }),
10465
+ !werk && items.status === "ready" && items.value.length > 0 && /* @__PURE__ */ jsx17("ul", { className: "szenen-bildwahl__raster", "data-testid": "bildwahl-werke", children: items.value.map((item) => {
10466
+ const deckbild = item.images[0];
10467
+ if (!deckbild) return null;
10468
+ return /* @__PURE__ */ jsx17("li", { children: /* @__PURE__ */ jsxs17(
10469
+ "button",
10470
+ {
10471
+ type: "button",
10472
+ onClick: () => item.images.length === 1 ? onWaehlen(deckbild) : setOffenesWerk(item.itemRef),
10473
+ "data-testid": `item-waehlen-${item.itemRef}`,
10474
+ title: item.title,
10475
+ children: [
10476
+ /* @__PURE__ */ jsx17(Kachel, { quelle: quelleVon(deckbild), alt: item.title }),
10477
+ item.images.length > 1 && /* @__PURE__ */ jsxs17(
10478
+ "span",
10479
+ {
10480
+ className: "szenen-bildwahl__anzahl",
10481
+ "data-testid": `item-anzahl-${item.itemRef}`,
10482
+ children: [
10483
+ item.images.length,
10484
+ "x"
10485
+ ]
10486
+ }
10487
+ ),
10488
+ /* @__PURE__ */ jsx17("span", { className: "szenen-bildwahl__titel", children: item.title })
10489
+ ]
10490
+ }
10491
+ ) }, item.itemRef);
10492
+ }) }),
10382
10493
  gewaehlt.length > 0 && /* @__PURE__ */ jsx17("ul", { className: "szenen-bildwahl__gewaehlt", "data-testid": "bilder-gewaehlt", children: gewaehlt.map((bild) => /* @__PURE__ */ jsxs17("li", { children: [
10383
- bild.title,
10494
+ /* @__PURE__ */ jsx17(Kachel, { quelle: quelleVon(bild), alt: bild.title }),
10495
+ /* @__PURE__ */ jsx17("span", { className: "szenen-bildwahl__titel", children: bild.title }),
10384
10496
  /* @__PURE__ */ jsx17(
10385
10497
  "button",
10386
10498
  {
@@ -10419,7 +10531,10 @@ var DeriveArea = ({ port, contextId }) => {
10419
10531
  );
10420
10532
  const gewaehlt = regeln.status === "ready" ? regeln.value.find((r) => r.versionId === policyVersionId) ?? null : null;
10421
10533
  async function starten(folgt) {
10422
- if (!gewaehlt) return;
10534
+ if (!gewaehlt) {
10535
+ setMeldung("Bitte zuerst eine Rekonstruktionsregel waehlen \u2014 ohne sie ist kein Lauf reproduzierbar (D-03).");
10536
+ return;
10537
+ }
10423
10538
  setLaeuft(true);
10424
10539
  setMeldung(null);
10425
10540
  setLauf(null);
@@ -10796,8 +10911,8 @@ var SzenenView = ({
10796
10911
  initialArea,
10797
10912
  onAreaChange
10798
10913
  }) => {
10799
- const bereiche = useMemo3(() => areasFor(port), [port]);
10800
- const faehig = useMemo3(() => capabilitiesOf(port), [port]);
10914
+ const bereiche = useMemo4(() => areasFor(port), [port]);
10915
+ const faehig = useMemo4(() => capabilitiesOf(port), [port]);
10801
10916
  const [aktiv, setAktiv] = useState16(() => resolveArea(port, initialArea));
10802
10917
  const wechsle = (id) => {
10803
10918
  setAktiv(id);
@@ -10853,6 +10968,17 @@ var SzenenView = ({
10853
10968
  };
10854
10969
 
10855
10970
  // src/lib/szenen/flowTextGenerationPort.ts
10971
+ function alsFlowTextZugang(sdk) {
10972
+ return async (prompt, options) => {
10973
+ const antwort = await sdk(prompt, options);
10974
+ if (typeof antwort?.text !== "string") {
10975
+ throw new Error(
10976
+ `Flow.generate.text lieferte kein { text: string }, sondern ${antwort === null || antwort === void 0 ? String(antwort) : typeof antwort}: ${JSON.stringify(antwort)?.slice(0, 200)}`
10977
+ );
10978
+ }
10979
+ return antwort.text;
10980
+ };
10981
+ }
10856
10982
  function createFlowTextGenerationPort(generateText, options = {}) {
10857
10983
  const provider = options.provider ?? "flow";
10858
10984
  const modelId = options.modelId ?? "flow.generate.text";
@@ -13962,6 +14088,7 @@ function createHfImageStore(options) {
13962
14088
  const basisMs = options.leseBasisMs ?? 400;
13963
14089
  const schlafen = options.schlafen ?? warten;
13964
14090
  const abgelegt = /* @__PURE__ */ new Map();
14091
+ const vorschauen = /* @__PURE__ */ new Map();
13965
14092
  const bekanntePfade = /* @__PURE__ */ new Set();
13966
14093
  let gefalteterBestand = null;
13967
14094
  let laufenderAbgleich = null;
@@ -13985,7 +14112,7 @@ function createHfImageStore(options) {
13985
14112
  }
13986
14113
  return laufenderAbgleich;
13987
14114
  }
13988
- return {
14115
+ const speicher = {
13989
14116
  bestand: bestandAbgleichen,
13990
14117
  async putWithId(id, base64, mimeType, titel) {
13991
14118
  const echterTyp = typAusBytes(base64, mimeType);
@@ -14004,6 +14131,38 @@ function createHfImageStore(options) {
14004
14131
  }, []);
14005
14132
  abgelegt.set(id, { data: base64, mimeType: echterTyp });
14006
14133
  },
14134
+ async preview(id) {
14135
+ const bekannt = vorschauen.get(id);
14136
+ if (bekannt) return bekannt;
14137
+ const eben = abgelegt.get(id);
14138
+ if (eben) {
14139
+ const quelle2 = `data:${eben.mimeType};base64,${eben.data}`;
14140
+ vorschauen.set(id, quelle2);
14141
+ return quelle2;
14142
+ }
14143
+ const zustand = await bestandAbgleichen();
14144
+ const eintrag = zustand.metadata.find((e) => e.id === id);
14145
+ if (eintrag?.hasThumb && eintrag.filename) {
14146
+ const klein = await hfLoadImageAsBase64(
14147
+ id,
14148
+ token,
14149
+ void 0,
14150
+ eintrag.filename,
14151
+ void 0,
14152
+ eintrag.mimeType,
14153
+ true
14154
+ );
14155
+ if (klein) {
14156
+ const quelle2 = `data:${eintrag.mimeType || "image/jpeg"};base64,${klein}`;
14157
+ vorschauen.set(id, quelle2);
14158
+ return quelle2;
14159
+ }
14160
+ }
14161
+ const voll = await speicher.resolve(id);
14162
+ const quelle = `data:${voll.mimeType};base64,${voll.data}`;
14163
+ vorschauen.set(id, quelle);
14164
+ return quelle;
14165
+ },
14007
14166
  async resolve(id, mimeType) {
14008
14167
  const eben = abgelegt.get(id);
14009
14168
  if (eben) return eben;
@@ -14041,6 +14200,47 @@ function createHfImageStore(options) {
14041
14200
  );
14042
14201
  }
14043
14202
  };
14203
+ return speicher;
14204
+ }
14205
+
14206
+ // src/lib/szenen/libraryItems.ts
14207
+ var LOCATOR = /^(.+)-(\d+)$/;
14208
+ function locatorTeile(mediaRef) {
14209
+ const treffer = LOCATOR.exec(mediaRef);
14210
+ if (!treffer) return { stamm: mediaRef, position: null };
14211
+ return { stamm: treffer[1], position: Number(treffer[2]) };
14212
+ }
14213
+ function gruppiereZuItems(bilder) {
14214
+ const gruppen = /* @__PURE__ */ new Map();
14215
+ for (const bild of bilder) {
14216
+ const { stamm } = locatorTeile(bild.mediaRef);
14217
+ const vorhanden = gruppen.get(stamm);
14218
+ if (vorhanden) vorhanden.push(bild);
14219
+ else gruppen.set(stamm, [bild]);
14220
+ }
14221
+ const items = [...gruppen.entries()].map(([stamm, mitglieder]) => {
14222
+ const sortiert = [...mitglieder].sort((a, b) => {
14223
+ const pa = locatorTeile(a.mediaRef).position ?? 0;
14224
+ const pb = locatorTeile(b.mediaRef).position ?? 0;
14225
+ return pa - pb;
14226
+ });
14227
+ const erstes = sortiert[0];
14228
+ const itemRef = sortiert.length === 1 ? erstes.mediaRef : stamm;
14229
+ const juengstes = sortiert.reduce(
14230
+ (max, b) => Math.max(max, b.timestamp ?? 0),
14231
+ 0
14232
+ );
14233
+ return {
14234
+ item: {
14235
+ itemRef,
14236
+ title: erstes.itemTitle?.trim() || erstes.title || itemRef,
14237
+ images: sortiert.map(({ timestamp: _t, itemTitle: _i, ...bild }) => bild)
14238
+ },
14239
+ juengstes
14240
+ };
14241
+ });
14242
+ items.sort((a, b) => b.juengstes - a.juengstes);
14243
+ return items.map((e) => e.item);
14044
14244
  }
14045
14245
 
14046
14246
  // src/lib/szenen/hfImageLibrary.ts
@@ -14048,13 +14248,22 @@ function fehler2(nachricht, retryable = false) {
14048
14248
  return { kind: "error", message: nachricht, retryable };
14049
14249
  }
14050
14250
  function alsBild(eintrag) {
14251
+ const { position } = locatorTeile(eintrag.id);
14252
+ const werk = eintrag.prompt?.trim() || "";
14051
14253
  return {
14052
14254
  mediaRef: eintrag.id,
14053
- // Der Prompt ist der einzige menschenlesbare Text, den ein Bild dort trägt.
14054
- // Fehlt er, ist die Kennung ehrlicher als ein erfundener Name.
14055
- title: eintrag.prompt?.trim() || eintrag.id,
14255
+ // Innerhalb eines mehrbildigen Werkes tragen alle Einträge denselben
14256
+ // Prompt — der Abgleich schreibt ihn je Bild aus derselben Library-Zeile.
14257
+ // Deshalb bekommt die Kachel dort die Position dazu, sonst stünde
14258
+ // vierzehnmal derselbe Satz.
14259
+ title: position === null ? werk || eintrag.id : `${werk || eintrag.id} \xB7 Bild ${position + 1}`,
14056
14260
  mimeType: eintrag.mimeType || "image/jpeg",
14057
- thumbUrl: null
14261
+ // Kein `thumbUrl`: Die Datei liegt auf HF hinter einem Token, und ein
14262
+ // `<img src>` käme dort nicht durch. Die Quelle entsteht über
14263
+ // `loadPreview()` — und nur für die Kacheln, die wirklich gezeigt werden.
14264
+ thumbUrl: null,
14265
+ itemTitle: werk || null,
14266
+ ...typeof eintrag.timestamp === "number" ? { timestamp: eintrag.timestamp } : {}
14058
14267
  };
14059
14268
  }
14060
14269
  function createHfImageLibrary(options) {
@@ -14065,15 +14274,14 @@ function createHfImageLibrary(options) {
14065
14274
  ...options.now ? { now: options.now } : {}
14066
14275
  });
14067
14276
  return {
14068
- async listImages(query) {
14277
+ async listItems(query) {
14069
14278
  try {
14070
14279
  const zustand = await store.bestand();
14071
14280
  const eintraege = zustand?.metadata ?? [];
14281
+ const items = gruppiereZuItems(eintraege.map(alsBild));
14072
14282
  const gesucht = query?.search?.trim().toLowerCase();
14073
- const gefiltert = gesucht ? eintraege.filter((e) => (e.prompt ?? "").toLowerCase().includes(gesucht) || e.id.toLowerCase().includes(gesucht)) : eintraege;
14074
- const sortiert = [...gefiltert].sort((a, b) => (b.timestamp ?? 0) - (a.timestamp ?? 0));
14075
- const begrenzt = query?.limit ? sortiert.slice(0, query.limit) : sortiert;
14076
- return { kind: "ok", value: begrenzt.map(alsBild) };
14283
+ const gefiltert = gesucht ? items.filter((i) => i.title.toLowerCase().includes(gesucht) || i.itemRef.toLowerCase().includes(gesucht)) : items;
14284
+ return { kind: "ok", value: query?.limit ? gefiltert.slice(0, query.limit) : gefiltert };
14077
14285
  } catch (error) {
14078
14286
  return fehler2(
14079
14287
  `Der Bildbestand konnte nicht gelesen werden: ${error instanceof Error ? error.message : String(error)}`,
@@ -14081,6 +14289,16 @@ function createHfImageLibrary(options) {
14081
14289
  );
14082
14290
  }
14083
14291
  },
14292
+ async loadPreview(mediaRef) {
14293
+ try {
14294
+ return { kind: "ok", value: await store.preview(mediaRef) };
14295
+ } catch (error) {
14296
+ return fehler2(
14297
+ `Die Vorschau von ${mediaRef} ist nicht ladbar: ${error instanceof Error ? error.message : String(error)}`,
14298
+ true
14299
+ );
14300
+ }
14301
+ },
14084
14302
  async resolveImage(mediaRef, mimeTypeHinweis) {
14085
14303
  try {
14086
14304
  const bild = await store.resolve(mediaRef, mimeTypeHinweis);
@@ -14093,10 +14311,13 @@ function createHfImageLibrary(options) {
14093
14311
  const id = newImageId();
14094
14312
  try {
14095
14313
  await store.putWithId(id, input.data, input.mime_type, input.title);
14096
- return {
14097
- kind: "ok",
14098
- value: { mediaRef: id, title: input.title, mimeType: input.mime_type, thumbUrl: null }
14314
+ const abgelegt = {
14315
+ mediaRef: id,
14316
+ title: input.title,
14317
+ mimeType: input.mime_type,
14318
+ thumbUrl: null
14099
14319
  };
14320
+ return { kind: "ok", value: abgelegt };
14100
14321
  } catch (error) {
14101
14322
  return fehler2(
14102
14323
  `Das Bild konnte nicht abgelegt werden: ${error instanceof Error ? error.message : String(error)}`,
@@ -14824,6 +15045,7 @@ export {
14824
15045
  preferredHeadRevisionOf,
14825
15046
  collectPromptRuns,
14826
15047
  findPromptRun,
15048
+ ladeVorschauen,
14827
15049
  simulatedAnswerFor,
14828
15050
  SIMULATION_PROVIDER,
14829
15051
  createSimulationTextGenerationPort,
@@ -14844,6 +15066,7 @@ export {
14844
15066
  createSimulationSceneDerivationPort,
14845
15067
  runSceneDerivation,
14846
15068
  SzenenView,
15069
+ alsFlowTextZugang,
14847
15070
  createFlowTextGenerationPort,
14848
15071
  CATALOGUE_TYPES,
14849
15072
  publishedHeadsOf,
@@ -14896,6 +15119,8 @@ export {
14896
15119
  bildPfad,
14897
15120
  typAusBytes,
14898
15121
  createHfImageStore,
15122
+ locatorTeile,
15123
+ gruppiereZuItems,
14899
15124
  createHfImageLibrary,
14900
15125
  FLOW_EXECUTION_PATH,
14901
15126
  createFlowImageProvider,
package/dist/index.d.mts CHANGED
@@ -6,7 +6,7 @@ import { Node, Edge } from '@xyflow/react';
6
6
  import * as zustand_vanilla from 'zustand/vanilla';
7
7
  import { F as FeatureSliceId, b as SliceContract, a as PersistenceDescriptor, W as WorkspacePersistence, P as PersistedSlice, L as LoadResult, f as WriteResult, e as WorkspaceTabId, C as CommandResult, R as RequestContext, Q as QueryResult } from './contracts-DdYOMBl9.mjs';
8
8
 
9
- var version = "4.0.0";
9
+ var version = "5.0.0";
10
10
 
11
11
  declare function useOnClickOutside(ref: RefObject<HTMLElement | null>, handler: (e: MouseEvent | TouchEvent) => void): void;
12
12
 
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ import { Node, Edge } from '@xyflow/react';
6
6
  import * as zustand_vanilla from 'zustand/vanilla';
7
7
  import { F as FeatureSliceId, b as SliceContract, a as PersistenceDescriptor, W as WorkspacePersistence, P as PersistedSlice, L as LoadResult, f as WriteResult, e as WorkspaceTabId, C as CommandResult, R as RequestContext, Q as QueryResult } from './contracts-DdYOMBl9.js';
8
8
 
9
- var version = "4.0.0";
9
+ var version = "5.0.0";
10
10
 
11
11
  declare function useOnClickOutside(ref: RefObject<HTMLElement | null>, handler: (e: MouseEvent | TouchEvent) => void): void;
12
12