@rslsp1/fa-app-tools 10.1.3 → 10.3.2
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/dist/StageEngine-3MOBM2WX.mjs +590 -0
- package/dist/StageEngine-5VR3KEZB.js +590 -0
- package/dist/chunk-ACB2543O.js +218 -0
- package/dist/chunk-FTLEDU6C.js +157 -0
- package/dist/chunk-HFX6D53W.js +25729 -0
- package/dist/{chunk-5SYVLULG.mjs → chunk-JP7LIWDR.mjs} +17934 -13288
- package/dist/chunk-QERFD7BY.js +1418 -0
- package/dist/{chunk-C5CGSPP3.mjs → chunk-RFTANBQ5.mjs} +80 -0
- package/dist/chunk-TFWIMFNF.mjs +218 -0
- package/dist/{contracts-DdYOMBl9.d.mts → contracts-B3AbzYQ4.d.mts} +1 -1
- package/dist/{contracts-DdYOMBl9.d.ts → contracts-B3AbzYQ4.d.ts} +1 -1
- package/dist/{hfEventTypes-BUztJySs.d.mts → hfEventTypes-DQPjEP4T.d.mts} +12 -1
- package/dist/{hfEventTypes-fAdA-0A9.d.ts → hfEventTypes-DharkVsi.d.ts} +12 -1
- package/dist/index.d.mts +27 -6
- package/dist/index.d.ts +27 -6
- package/dist/index.js +1744 -22342
- package/dist/index.mjs +55 -33
- package/dist/{storeContract-CJi0fpCA.d.mts → storeContract-C-em5E61.d.ts} +140 -14
- package/dist/{storeContract-gc2dxews.d.ts → storeContract-Cc8tFavd.d.mts} +140 -14
- package/dist/szenen-contract.d.mts +2 -2
- package/dist/szenen-contract.d.ts +2 -2
- package/dist/szenen-contract.js +12 -1474
- package/dist/szenen-contract.mjs +1 -1
- package/dist/szenen.d.mts +1060 -706
- package/dist/szenen.d.ts +1060 -706
- package/dist/szenen.js +1357 -23667
- package/dist/szenen.mjs +95 -128
- package/package.json +4 -2
|
@@ -117,6 +117,7 @@ async function seedSceneSetupUmgebung(store) {
|
|
|
117
117
|
camera_rig: {
|
|
118
118
|
cameras: cameraIds.map((camera_id) => ({
|
|
119
119
|
camera_id,
|
|
120
|
+
aspect_ratio: "4:3",
|
|
120
121
|
preset_ref: {
|
|
121
122
|
element_id: presetElement.element_id,
|
|
122
123
|
version_id: preset.version_id
|
|
@@ -885,6 +886,32 @@ function elementStoreContractChecks() {
|
|
|
885
886
|
});
|
|
886
887
|
kindIs(result, "error", "writeDraft auf unbekanntes Element");
|
|
887
888
|
});
|
|
889
|
+
check("Veroeffentlichen", "verlangt ein explizites Kameraformat bei neuen oder geaenderten Kameras (#569)", async (store) => {
|
|
890
|
+
const setup = await seedSceneSetupUmgebung(store);
|
|
891
|
+
const missing = setup.payloadMit(["cam_a"]);
|
|
892
|
+
delete missing.camera_rig.cameras[0].aspect_ratio;
|
|
893
|
+
const rejected = await store.publishVersion({
|
|
894
|
+
elementId: setup.elementId,
|
|
895
|
+
payload: missing,
|
|
896
|
+
schemaVersion: "1.0.0",
|
|
897
|
+
publishedBy: "vertrag"
|
|
898
|
+
});
|
|
899
|
+
kindIs(rejected, "rejected", "neue Kamera ohne Format");
|
|
900
|
+
if (rejected.kind === "rejected") {
|
|
901
|
+
isTrue(rejected.errors.some((e) => e.instancePath === "/camera_rig/cameras/0/aspect_ratio"), "Ablehnung nennt Kameraformat");
|
|
902
|
+
}
|
|
903
|
+
hasLength((await snapshotOf(store, setup.elementId)).versions, 0, "kein Publish bei fehlendem Kameraformat");
|
|
904
|
+
const version = await seedVersion(store, setup.elementId, setup.payloadMit(["cam_a"]));
|
|
905
|
+
const result = await store.publishVersion({
|
|
906
|
+
elementId: setup.elementId,
|
|
907
|
+
payload: missing,
|
|
908
|
+
schemaVersion: "1.0.0",
|
|
909
|
+
publishedBy: "vertrag",
|
|
910
|
+
parents: [{ parent_version_id: version.version_id, relation: "derived_from" }]
|
|
911
|
+
});
|
|
912
|
+
kindIs(result, "rejected", "geaenderte Kamera verliert Format");
|
|
913
|
+
hasLength((await snapshotOf(store, setup.elementId)).versions, 1, "kein Publish beim Entfernen des Kameraformats");
|
|
914
|
+
});
|
|
888
915
|
check("Veroeffentlichen", "veroeffentlicht eine gueltige Payload", async (store) => {
|
|
889
916
|
const elementId = await seedElement(store);
|
|
890
917
|
const version = await seedVersion(store, elementId);
|
|
@@ -1247,6 +1274,59 @@ function elementStoreContractChecks() {
|
|
|
1247
1274
|
},
|
|
1248
1275
|
"reviseMetadata"
|
|
1249
1276
|
);
|
|
1277
|
+
check(
|
|
1278
|
+
"Elementmetadaten D-35",
|
|
1279
|
+
"setzt, behaelt und loescht das Titelbild (P6)",
|
|
1280
|
+
async (store) => {
|
|
1281
|
+
const element = ok(
|
|
1282
|
+
await store.createElement({ type: "scene", title: "A" }),
|
|
1283
|
+
"createElement"
|
|
1284
|
+
);
|
|
1285
|
+
equal(
|
|
1286
|
+
(await snapshotOf(store, element.element_id)).metadata?.cover_media_ref ?? null,
|
|
1287
|
+
null,
|
|
1288
|
+
"Titelbild nach Anlage"
|
|
1289
|
+
);
|
|
1290
|
+
ok(
|
|
1291
|
+
await store.reviseMetadata({
|
|
1292
|
+
elementId: element.element_id,
|
|
1293
|
+
title: "A",
|
|
1294
|
+
cover_media_ref: "bild-7",
|
|
1295
|
+
expectedRevision: 1
|
|
1296
|
+
}),
|
|
1297
|
+
"reviseMetadata mit cover_media_ref"
|
|
1298
|
+
);
|
|
1299
|
+
equal(
|
|
1300
|
+
(await snapshotOf(store, element.element_id)).metadata?.cover_media_ref,
|
|
1301
|
+
"bild-7",
|
|
1302
|
+
"Titelbild gesetzt"
|
|
1303
|
+
);
|
|
1304
|
+
ok(
|
|
1305
|
+
await store.reviseMetadata({ elementId: element.element_id, title: "B", expectedRevision: 2 }),
|
|
1306
|
+
"reviseMetadata ohne cover_media_ref"
|
|
1307
|
+
);
|
|
1308
|
+
equal(
|
|
1309
|
+
(await snapshotOf(store, element.element_id)).metadata?.cover_media_ref,
|
|
1310
|
+
"bild-7",
|
|
1311
|
+
"Titelbild behalten"
|
|
1312
|
+
);
|
|
1313
|
+
ok(
|
|
1314
|
+
await store.reviseMetadata({
|
|
1315
|
+
elementId: element.element_id,
|
|
1316
|
+
title: "B",
|
|
1317
|
+
cover_media_ref: null,
|
|
1318
|
+
expectedRevision: 3
|
|
1319
|
+
}),
|
|
1320
|
+
"reviseMetadata mit cover_media_ref null"
|
|
1321
|
+
);
|
|
1322
|
+
equal(
|
|
1323
|
+
(await snapshotOf(store, element.element_id)).metadata?.cover_media_ref ?? null,
|
|
1324
|
+
null,
|
|
1325
|
+
"Titelbild automatisch"
|
|
1326
|
+
);
|
|
1327
|
+
},
|
|
1328
|
+
"reviseMetadata"
|
|
1329
|
+
);
|
|
1250
1330
|
check(
|
|
1251
1331
|
"Elementmetadaten D-35",
|
|
1252
1332
|
"lehnt eine veraltete Revision ab",
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// src/lib/szenen/cameraContract.ts
|
|
2
|
+
var CAMERA_ASPECT_RATIOS = ["1:1", "4:3", "3:4", "16:9", "9:16"];
|
|
3
|
+
var object = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
4
|
+
function cameraAspectRatioValue(aspectRatio) {
|
|
5
|
+
if (!/^[1-9][0-9]*(\.[0-9]+)?:[1-9][0-9]*(\.[0-9]+)?$/.test(aspectRatio)) {
|
|
6
|
+
throw new Error(`Ung\xFCltiges Kamera-Seitenverh\xE4ltnis \u201E${aspectRatio}\u201C.`);
|
|
7
|
+
}
|
|
8
|
+
const [width, height] = aspectRatio.split(":").map(Number);
|
|
9
|
+
const ratio = width / height;
|
|
10
|
+
if (!Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(ratio) || ratio <= 0) {
|
|
11
|
+
throw new Error(`Kamera-Seitenverh\xE4ltnis \u201E${aspectRatio}\u201C ist nicht darstellbar.`);
|
|
12
|
+
}
|
|
13
|
+
return ratio;
|
|
14
|
+
}
|
|
15
|
+
function canonical(value) {
|
|
16
|
+
if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
|
|
17
|
+
const record = object(value);
|
|
18
|
+
if (record) return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonical(record[key])}`).join(",")}}`;
|
|
19
|
+
return JSON.stringify(value) ?? "undefined";
|
|
20
|
+
}
|
|
21
|
+
function camerasOf(payload) {
|
|
22
|
+
const cameras = object(object(payload)?.camera_rig)?.cameras;
|
|
23
|
+
return Array.isArray(cameras) ? cameras : [];
|
|
24
|
+
}
|
|
25
|
+
function checkCameraAspectRatioChanges(type, payload, previousPayloads = []) {
|
|
26
|
+
if (type !== "scene_setup") return [];
|
|
27
|
+
const previous = previousPayloads.flatMap(camerasOf);
|
|
28
|
+
return camerasOf(payload).flatMap((value, index) => {
|
|
29
|
+
const camera = object(value);
|
|
30
|
+
if (!camera) return [];
|
|
31
|
+
if (typeof camera.aspect_ratio === "string") {
|
|
32
|
+
try {
|
|
33
|
+
cameraAspectRatioValue(camera.aspect_ratio);
|
|
34
|
+
return [];
|
|
35
|
+
} catch (error) {
|
|
36
|
+
return [{ instancePath: `/camera_rig/cameras/${index}/aspect_ratio`, keyword: "aspect_ratio", message: error.message }];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (camera.aspect_ratio === void 0 && previous.some((old) => canonical(old) === canonical(camera))) return [];
|
|
40
|
+
return [{
|
|
41
|
+
instancePath: `/camera_rig/cameras/${index}/aspect_ratio`,
|
|
42
|
+
keyword: "required",
|
|
43
|
+
message: `Kamera \u201E${String(camera.camera_id ?? index)}\u201C wurde neu angelegt oder ge\xE4ndert. Bitte ihr Seitenverh\xE4ltnis ausdr\xFCcklich speichern.`
|
|
44
|
+
}];
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function cameraPerspective(camera) {
|
|
48
|
+
if (!camera.aspect_ratio) throw new Error(`Kamera \u201E${camera.camera_id}\u201C hat kein gespeichertes Seitenverh\xE4ltnis.`);
|
|
49
|
+
const lens = object(object(camera.preset)?.lens);
|
|
50
|
+
const focal = lens?.focal_length_mm;
|
|
51
|
+
const sensor = lens?.sensor_width_mm;
|
|
52
|
+
if (typeof focal !== "number" || !Number.isFinite(focal) || focal <= 0 || typeof sensor !== "number" || !Number.isFinite(sensor) || sensor <= 0) {
|
|
53
|
+
throw new Error(`Kamera \u201E${camera.camera_id}\u201C hat kein aufgel\xF6stes Objektiv mit Brennweite und Sensorbreite.`);
|
|
54
|
+
}
|
|
55
|
+
if (object(camera.preset)?.projection !== "perspective") {
|
|
56
|
+
throw new Error(`Kamera \u201E${camera.camera_id}\u201C verwendet keine perspektivische Projektion.`);
|
|
57
|
+
}
|
|
58
|
+
const aspect = cameraAspectRatioValue(camera.aspect_ratio);
|
|
59
|
+
return {
|
|
60
|
+
aspect_ratio: camera.aspect_ratio,
|
|
61
|
+
aspect,
|
|
62
|
+
focal_length_mm: focal,
|
|
63
|
+
sensor_width_mm: sensor,
|
|
64
|
+
vertical_fov_deg: 2 * Math.atan(sensor / (2 * focal * aspect)) * 180 / Math.PI
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function frozenCameraAspectRatio(input) {
|
|
68
|
+
const aspect = object(object(input)?.camera)?.aspect_ratio;
|
|
69
|
+
if (aspect === void 0) return void 0;
|
|
70
|
+
if (typeof aspect !== "string") throw new Error("Das eingefrorene Kamera-Seitenverh\xE4ltnis ist kein Text.");
|
|
71
|
+
cameraAspectRatioValue(aspect);
|
|
72
|
+
return aspect;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/lib/szenen/stage3d.ts
|
|
76
|
+
var STAGE_CATALOGUE = [
|
|
77
|
+
{ label: "Mensch", type: "subject", dimensions: [0.55, 0.35, 1.75] },
|
|
78
|
+
{ label: "Stuhl", type: "object", dimensions: [0.5, 0.5, 0.9] },
|
|
79
|
+
{ label: "Tisch", type: "surface", dimensions: [1.2, 0.7, 0.75] },
|
|
80
|
+
{ label: "Lampe", type: "light", dimensions: [0.35, 0.35, 1.5] }
|
|
81
|
+
];
|
|
82
|
+
var stageColor = (type) => ({ subject: "#df995f", light: "#ffe084", surface: "#65aabc", object: "#b998d9" })[type] ?? "#9bafbc";
|
|
83
|
+
function stageColors(nodes) {
|
|
84
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
85
|
+
const used = /* @__PURE__ */ new Set();
|
|
86
|
+
const names = { subject: "orange", light: "yellow", surface: "cyan", object: "purple" };
|
|
87
|
+
let next = 0;
|
|
88
|
+
for (const node of [...nodes].sort((a, b) => a.node_id.localeCompare(b.node_id))) {
|
|
89
|
+
let hex = stageColor(node.type), name = names[node.type] ?? "blue grey";
|
|
90
|
+
while (used.has(hex)) {
|
|
91
|
+
const hue = (next++ * 137.508 + 25) % 360;
|
|
92
|
+
const channel = (n) => {
|
|
93
|
+
const k = (n + hue / 30) % 12;
|
|
94
|
+
return Math.round(255 * (0.62 - 0.29 * Math.max(-1, Math.min(k - 3, 9 - k, 1)))).toString(16).padStart(2, "0");
|
|
95
|
+
};
|
|
96
|
+
hex = `#${channel(0)}${channel(8)}${channel(4)}`;
|
|
97
|
+
name = `${["red", "orange", "yellow", "green", "cyan", "blue", "purple", "pink"][Math.round(hue / 45) % 8]} (${hex})`;
|
|
98
|
+
}
|
|
99
|
+
used.add(hex);
|
|
100
|
+
result[node.node_id] = { hex, name };
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
var stageTypeLabel = (type) => ({ subject: "Person", light: "Licht", surface: "Fl\xE4che", object: "Objekt" })[type] ?? type;
|
|
105
|
+
function vector3(value, label) {
|
|
106
|
+
if (!Array.isArray(value) || value.length !== 3 || value.some((n) => typeof n !== "number" || !Number.isFinite(n))) {
|
|
107
|
+
throw new Error(`${label}: drei endliche Koordinaten erforderlich.`);
|
|
108
|
+
}
|
|
109
|
+
return [...value];
|
|
110
|
+
}
|
|
111
|
+
function dragPosition(position, point, plane) {
|
|
112
|
+
const p = vector3(position, "Position");
|
|
113
|
+
const q = vector3(point, "Drag");
|
|
114
|
+
return plane === "top" ? [q[0], q[1], p[2]] : plane === "side" ? [q[0], p[1], q[2]] : p;
|
|
115
|
+
}
|
|
116
|
+
function stageNode(node) {
|
|
117
|
+
if (!node.placement) throw new Error(`\u201E${node.node_id}\u201C hat keine Weltplatzierung.`);
|
|
118
|
+
if (!node.proxy_3d) throw new Error(`\u201E${node.node_id}\u201C hat keine Proxy-Geometrie. Bitte Ma\xDFe festlegen.`);
|
|
119
|
+
const dimensions = vector3(node.proxy_3d.dimensions, `Ma\xDFe von ${node.node_id}`);
|
|
120
|
+
if (dimensions.some((d) => d <= 0)) throw new Error(`\u201E${node.node_id}\u201C braucht positive Proxy-Ma\xDFe.`);
|
|
121
|
+
return {
|
|
122
|
+
node_id: node.node_id,
|
|
123
|
+
type: node.type,
|
|
124
|
+
primitive: node.proxy_3d.primitive,
|
|
125
|
+
dimensions,
|
|
126
|
+
position: vector3(node.placement.position, `Position von ${node.node_id}`),
|
|
127
|
+
rotation: vector3(node.placement.rotation_euler_deg ?? [0, 0, 0], "Rotation"),
|
|
128
|
+
scale: vector3(node.placement.scale ?? [1, 1, 1], "Skalierung"),
|
|
129
|
+
anchors: node.anchors
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function stageFrame(input) {
|
|
133
|
+
if (input.capabilities.can_place !== "yes") throw new Error("Die Szene ben\xF6tigt Meterma\xDFe und ein Scene Setup in Z-up-Koordinaten.");
|
|
134
|
+
const visible = input.scene.nodes.filter((n) => !n.hidden);
|
|
135
|
+
const colors = stageColors(visible);
|
|
136
|
+
const nodes = visible.map((n) => ({ ...stageNode(n), preview_color: colors[n.node_id] }));
|
|
137
|
+
if (!input.camera) throw new Error("Bitte eine Kamera ausw\xE4hlen.");
|
|
138
|
+
const optical = cameraPerspective(input.camera);
|
|
139
|
+
const placement = input.camera.placement;
|
|
140
|
+
if (placement?.mode !== "absolute") throw new Error("Diese Kamera verwendet eine Pattern-Platzierung. F\xFCr den MVP bitte eine explizite Weltposition speichern.");
|
|
141
|
+
const position = vector3(placement.position, "Kameraposition");
|
|
142
|
+
const orientation = input.camera.orientation;
|
|
143
|
+
if (orientation?.mode !== "explicit" && orientation?.mode !== "look_at") throw new Error("Bitte eine explizite Kameraausrichtung oder ein Blickziel festlegen.");
|
|
144
|
+
if (orientation.mode === "explicit") vector3(orientation.rotation_euler_deg, "Kameraausrichtung");
|
|
145
|
+
return { nodes, camera: { ...input.camera, ...optical, position, orientation } };
|
|
146
|
+
}
|
|
147
|
+
function planeAxes(plane) {
|
|
148
|
+
return plane === "top" ? [0, 1] : [0, 2];
|
|
149
|
+
}
|
|
150
|
+
function snapPosition(position, plane, step) {
|
|
151
|
+
const p = vector3(position, "Position");
|
|
152
|
+
for (const axis of planeAxes(plane)) p[axis] = Math.round(p[axis] / step) * step;
|
|
153
|
+
return p.map((v) => Number(v.toFixed(6)));
|
|
154
|
+
}
|
|
155
|
+
function nudgePosition(position, plane, right, up) {
|
|
156
|
+
const p = vector3(position, "Position");
|
|
157
|
+
const [u, v] = planeAxes(plane);
|
|
158
|
+
p[u] = Number((p[u] + right).toFixed(6));
|
|
159
|
+
p[v] = Number((p[v] + up).toFixed(6));
|
|
160
|
+
return p;
|
|
161
|
+
}
|
|
162
|
+
function fitPlaneView(points, plane, width, height) {
|
|
163
|
+
if (!points.length || width <= 0 || height <= 0) return { center: [0, 0], zoom: 60 };
|
|
164
|
+
const [u, v] = planeAxes(plane);
|
|
165
|
+
const us = points.map((p) => p[u]), vs = points.map((p) => p[v]);
|
|
166
|
+
const [minU, maxU, minV, maxV] = [Math.min(...us), Math.max(...us), Math.min(...vs), Math.max(...vs)];
|
|
167
|
+
const spanU = Math.max(maxU - minU, 2), spanV = Math.max(maxV - minV, 2);
|
|
168
|
+
const zoom = Math.min(width / (spanU * 1.25), height / (spanV * 1.25));
|
|
169
|
+
return { center: [(minU + maxU) / 2, (minV + maxV) / 2], zoom: clampZoom(zoom) };
|
|
170
|
+
}
|
|
171
|
+
var clampZoom = (zoom) => Math.min(800, Math.max(8, zoom));
|
|
172
|
+
function screenToPlane(view, dx, dy) {
|
|
173
|
+
return [view.center[0] + dx / view.zoom, view.center[1] - dy / view.zoom];
|
|
174
|
+
}
|
|
175
|
+
function zoomPlaneView(view, factor, dx, dy) {
|
|
176
|
+
const zoom = clampZoom(view.zoom * factor);
|
|
177
|
+
const [u, v] = screenToPlane(view, dx, dy);
|
|
178
|
+
return { zoom, center: [u - dx / zoom, v + dy / zoom] };
|
|
179
|
+
}
|
|
180
|
+
function gridStep(zoom, minPx = 14) {
|
|
181
|
+
return [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50].find((step) => step * zoom >= minPx) ?? 100;
|
|
182
|
+
}
|
|
183
|
+
function withStagePositions(input, nodes, camera) {
|
|
184
|
+
if (!nodes.size && !camera) return input;
|
|
185
|
+
const next = {
|
|
186
|
+
...input,
|
|
187
|
+
scene: { ...input.scene, nodes: input.scene.nodes.map((n) => nodes.has(n.node_id) && n.placement ? { ...n, placement: { ...n.placement, position: nodes.get(n.node_id) } } : n) }
|
|
188
|
+
};
|
|
189
|
+
if (camera && input.camera) next.camera = { ...input.camera, placement: { ...input.camera.placement, position: camera } };
|
|
190
|
+
return next;
|
|
191
|
+
}
|
|
192
|
+
var roundMeters = (value) => Math.round(value * 1e3) / 1e3;
|
|
193
|
+
|
|
194
|
+
export {
|
|
195
|
+
CAMERA_ASPECT_RATIOS,
|
|
196
|
+
cameraAspectRatioValue,
|
|
197
|
+
checkCameraAspectRatioChanges,
|
|
198
|
+
cameraPerspective,
|
|
199
|
+
frozenCameraAspectRatio,
|
|
200
|
+
STAGE_CATALOGUE,
|
|
201
|
+
stageColor,
|
|
202
|
+
stageColors,
|
|
203
|
+
stageTypeLabel,
|
|
204
|
+
vector3,
|
|
205
|
+
dragPosition,
|
|
206
|
+
stageNode,
|
|
207
|
+
stageFrame,
|
|
208
|
+
planeAxes,
|
|
209
|
+
snapPosition,
|
|
210
|
+
nudgePosition,
|
|
211
|
+
fitPlaneView,
|
|
212
|
+
clampZoom,
|
|
213
|
+
screenToPlane,
|
|
214
|
+
zoomPlaneView,
|
|
215
|
+
gridStep,
|
|
216
|
+
withStagePositions,
|
|
217
|
+
roundMeters
|
|
218
|
+
};
|
|
@@ -163,4 +163,4 @@ type CommandResult<T> = {
|
|
|
163
163
|
retryable: boolean;
|
|
164
164
|
};
|
|
165
165
|
|
|
166
|
-
export { type CommandResult as C, type FeatureSliceId as F, type LoadResult as L, type PersistedSlice as P, type QueryResult as Q, type RequestContext as R, SIMULATION_PROVIDER as S, type
|
|
166
|
+
export { type CommandResult as C, type FeatureSliceId as F, type LoadResult as L, type PersistedSlice as P, type QueryResult as Q, type RequestContext as R, SIMULATION_PROVIDER as S, type TextGenerationImage as T, type WorkspacePersistence as W, type PersistenceDescriptor as a, type SliceContract as b, type TextGenerationPort as c, type TextGenerationRequest as d, type TextGenerationResult as e, type WorkspaceTabId as f, type WriteResult as g, createFakeTextGenerationPort as h, createSimulationTextGenerationPort as i, simulatedAnswerFor as s };
|
|
@@ -163,4 +163,4 @@ type CommandResult<T> = {
|
|
|
163
163
|
retryable: boolean;
|
|
164
164
|
};
|
|
165
165
|
|
|
166
|
-
export { type CommandResult as C, type FeatureSliceId as F, type LoadResult as L, type PersistedSlice as P, type QueryResult as Q, type RequestContext as R, SIMULATION_PROVIDER as S, type
|
|
166
|
+
export { type CommandResult as C, type FeatureSliceId as F, type LoadResult as L, type PersistedSlice as P, type QueryResult as Q, type RequestContext as R, SIMULATION_PROVIDER as S, type TextGenerationImage as T, type WorkspacePersistence as W, type PersistenceDescriptor as a, type SliceContract as b, type TextGenerationPort as c, type TextGenerationRequest as d, type TextGenerationResult as e, type WorkspaceTabId as f, type WriteResult as g, createFakeTextGenerationPort as h, createSimulationTextGenerationPort as i, simulatedAnswerFor as s };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as TextGenerationPort } from './contracts-B3AbzYQ4.mjs';
|
|
2
2
|
|
|
3
3
|
interface TagOption {
|
|
4
4
|
label: string;
|
|
@@ -100,6 +100,17 @@ interface HFMetadataEntry {
|
|
|
100
100
|
filename?: string;
|
|
101
101
|
hasThumb?: boolean;
|
|
102
102
|
titleTs?: number;
|
|
103
|
+
/** Display metadata, independent of prompt identity. */
|
|
104
|
+
title?: string;
|
|
105
|
+
/** Upload origin; only server is excluded by the Library sync (#511). */
|
|
106
|
+
source?: 'server' | 'flow' | 'external';
|
|
107
|
+
flow_provenance?: {
|
|
108
|
+
kind: 'szenen';
|
|
109
|
+
prompt_run_id: string;
|
|
110
|
+
generation_batch_id: string;
|
|
111
|
+
position: number;
|
|
112
|
+
source_kind: 'generated_in_app' | 'external_import';
|
|
113
|
+
};
|
|
103
114
|
}
|
|
104
115
|
|
|
105
116
|
declare function buildGenerationPrompt(hierarchyText: string, mode?: 'literal' | 'creative'): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as TextGenerationPort } from './contracts-B3AbzYQ4.js';
|
|
2
2
|
|
|
3
3
|
interface TagOption {
|
|
4
4
|
label: string;
|
|
@@ -100,6 +100,17 @@ interface HFMetadataEntry {
|
|
|
100
100
|
filename?: string;
|
|
101
101
|
hasThumb?: boolean;
|
|
102
102
|
titleTs?: number;
|
|
103
|
+
/** Display metadata, independent of prompt identity. */
|
|
104
|
+
title?: string;
|
|
105
|
+
/** Upload origin; only server is excluded by the Library sync (#511). */
|
|
106
|
+
source?: 'server' | 'flow' | 'external';
|
|
107
|
+
flow_provenance?: {
|
|
108
|
+
kind: 'szenen';
|
|
109
|
+
prompt_run_id: string;
|
|
110
|
+
generation_batch_id: string;
|
|
111
|
+
position: number;
|
|
112
|
+
source_kind: 'generated_in_app' | 'external_import';
|
|
113
|
+
};
|
|
103
114
|
}
|
|
104
115
|
|
|
105
116
|
declare function buildGenerationPrompt(hierarchyText: string, mode?: 'literal' | 'creative'): string;
|
package/dist/index.d.mts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { RefObject, ReactNode } from 'react';
|
|
3
|
-
import { G as Generation, W as WorkspaceTags, F as FlowGenerateText, b as FlowTextGenerationOptions, j as SelectedTag, T as TagOption, i as LabServices, h as LabItem, L as LabFrame, S as SelectedLabImage, H as HFEvent, g as HFStateSnapshot } from './hfEventTypes-
|
|
4
|
-
export { a as FlowSdk, c as HFEventVersion, d as HFFileInfo, e as HFMetadataEntry, f as HFStateMeta, I as ImageAddedPayload, M as MetadataUpdatedPayload, P as ProjectSettings, k as TagUpsertedPayload, l as buildFallbackPrompt, m as buildGenerationPrompt, n as buildImageGenerationOptions, o as buildPromptTabPayload, p as cleanAiResponse, q as createFlowServices, s as interpretSdkError, t as parsePromptResponse } from './hfEventTypes-
|
|
3
|
+
import { G as Generation, W as WorkspaceTags, F as FlowGenerateText, b as FlowTextGenerationOptions, j as SelectedTag, T as TagOption, i as LabServices, h as LabItem, L as LabFrame, S as SelectedLabImage, H as HFEvent, g as HFStateSnapshot } from './hfEventTypes-DQPjEP4T.mjs';
|
|
4
|
+
export { a as FlowSdk, c as HFEventVersion, d as HFFileInfo, e as HFMetadataEntry, f as HFStateMeta, I as ImageAddedPayload, M as MetadataUpdatedPayload, P as ProjectSettings, k as TagUpsertedPayload, l as buildFallbackPrompt, m as buildGenerationPrompt, n as buildImageGenerationOptions, o as buildPromptTabPayload, p as cleanAiResponse, q as createFlowServices, s as interpretSdkError, t as parsePromptResponse } from './hfEventTypes-DQPjEP4T.mjs';
|
|
5
5
|
import { Node, Edge } from '@xyflow/react';
|
|
6
6
|
import * as zustand_vanilla from 'zustand/vanilla';
|
|
7
|
-
import { F as FeatureSliceId, b as SliceContract, a as PersistenceDescriptor, W as WorkspacePersistence, P as PersistedSlice, L as LoadResult,
|
|
7
|
+
import { F as FeatureSliceId, b as SliceContract, a as PersistenceDescriptor, W as WorkspacePersistence, P as PersistedSlice, L as LoadResult, g as WriteResult, f as WorkspaceTabId, C as CommandResult, R as RequestContext, Q as QueryResult } from './contracts-B3AbzYQ4.mjs';
|
|
8
8
|
|
|
9
|
-
var version = "10.
|
|
9
|
+
var version = "10.3.2";
|
|
10
10
|
|
|
11
11
|
declare function useOnClickOutside(ref: RefObject<HTMLElement | null>, handler: (e: MouseEvent | TouchEvent) => void): void;
|
|
12
12
|
|
|
@@ -580,6 +580,8 @@ interface LibraryViewProps {
|
|
|
580
580
|
layout?: 'list' | 'grid';
|
|
581
581
|
emptyText?: string;
|
|
582
582
|
/** Host-gerenderte Zusatzaktionen je Item (z.B. Flow-Referenzgenerierung). */
|
|
583
|
+
/** Inline child rows below a list card, e.g. expandable related items. */
|
|
584
|
+
renderItemChildren?: (item: LibraryViewItem) => React__default.ReactNode;
|
|
583
585
|
renderItemExtras?: (item: LibraryViewItem) => React__default.ReactNode;
|
|
584
586
|
/** Host-Datenversion: Änderung erzwingt Re-Query (z.B. nach Reload/Import). */
|
|
585
587
|
dataVersion?: number;
|
|
@@ -617,12 +619,22 @@ interface Zugehoerigkeit {
|
|
|
617
619
|
*/
|
|
618
620
|
hinweis: string | null;
|
|
619
621
|
}
|
|
620
|
-
/**
|
|
622
|
+
/**
|
|
623
|
+
* Das Item, soweit die Zuordnung es überhaupt anschaut.
|
|
624
|
+
*
|
|
625
|
+
* Seit Issue #503 (E7) ist ein Item ein Prompt und kann **mehrere** Runs
|
|
626
|
+
* führen: `szenen.prompt_run_id` bleibt der Primärlauf (der erste), alle Runs
|
|
627
|
+
* stehen in `szenen.runs[]`; `szenen_run_links` löst sie der Reihe nach auf.
|
|
628
|
+
*/
|
|
621
629
|
interface ZugehoerigkeitEingabe {
|
|
622
630
|
szenen?: {
|
|
623
631
|
prompt_run_id?: string | null;
|
|
632
|
+
runs?: ReadonlyArray<{
|
|
633
|
+
prompt_run_id?: string | null;
|
|
634
|
+
}> | null;
|
|
624
635
|
} | null;
|
|
625
636
|
szenen_links?: SzenenLinks | null;
|
|
637
|
+
szenen_run_links?: ReadonlyArray<SzenenLinks> | null;
|
|
626
638
|
}
|
|
627
639
|
/**
|
|
628
640
|
* Ob die Zugehörigkeit ein **anklickbares** Ziel hergibt.
|
|
@@ -642,6 +654,15 @@ declare function hatNavigationsziele(zugehoerigkeit: Zugehoerigkeit | null | und
|
|
|
642
654
|
* Oberfläche zeigt dann gar nichts an.
|
|
643
655
|
*/
|
|
644
656
|
declare function zugehoerigkeitOf(item: ZugehoerigkeitEingabe | null | undefined): Zugehoerigkeit | null;
|
|
657
|
+
/**
|
|
658
|
+
* Die Zugehörigkeiten **aller** Runs eines Items, in Reihenfolge des
|
|
659
|
+
* Hinzukommens (Primärlauf zuerst). Ein Item mit einem Run liefert genau die
|
|
660
|
+
* Zugehörigkeit von `zugehoerigkeitOf`; ein Item ohne Run eine leere Liste.
|
|
661
|
+
*
|
|
662
|
+
* Additiv zu `zugehoerigkeitOf` (dessen Vertrag unverändert bleibt): Wer nur den
|
|
663
|
+
* Primärlauf zeigt, ruft weiter diese Funktion.
|
|
664
|
+
*/
|
|
665
|
+
declare function zugehoerigkeitenOf(item: ZugehoerigkeitEingabe | null | undefined): Zugehoerigkeit[];
|
|
645
666
|
|
|
646
667
|
interface ZugehoerigkeitLinksProps {
|
|
647
668
|
zugehoerigkeit: Zugehoerigkeit | null;
|
|
@@ -974,4 +995,4 @@ interface UseTagBaseResult {
|
|
|
974
995
|
}
|
|
975
996
|
declare function useTagBase(token: string, namespace: string): UseTagBaseResult;
|
|
976
997
|
|
|
977
|
-
export { AvatarArchitectApp, type AvatarArchitectAppProps, CURRENT_TAG_EVENT_VERSION, CollapsibleCard, CommandResult, CompactDropdown, type CreateFaStoreOptions, type CreatePersistenceCoordinatorOptions, type ExtractedCharacter, FaApp, type FaAppProps, type FaStore, type FaStoreState, FaToolsBadge, FeatureSliceId, FlowTextGenerationOptions, FlowWorkspacePicker, type FlowWorkspacePickerProps, GLOBAL_STYLES, Generation, HFEvent, type HFStateResult, HFStateSnapshot, HfMediaSyncTab, HistoryPanel, type InMemoryWorkspacePersistence, InspectPanel, LIBRARY_CUTOVER_MARKER, LIBRARY_SLICE_SCHEMA_VERSION, version as LIB_VERSION, LabBlend, LabCompare, LabFrame, LabFrameExtractor, type LabFrameExtractorProps, LabImagePicker, LabItem, LabLoop, LabRemix, LabServices, type LabSlotId, LabsTab, type LegacyMigrationOptions, type LegacyMigrationResult, type LegacyRecentTagRef, type LegacySourceResult, type LibraryCommandName, type LibraryCommands, type LibraryDataSource, type LibraryLegacySource, type LibraryListQuery, type LibraryPage, LibraryView, type LibraryViewItem, type LibraryViewProps, type LibraryViewTag, type LibraryWorkspaceState, ListView, LoadResult, type MediaItem, MediaLibrary, PersistedSlice, type PersistenceCoordinator, PersistenceDescriptor, PillButton, PromptTab, QueryResult, RequestContext, type RunLibraryLegacyImportOptions, type RunTagsLegacyImportOptions, SCOPE_MAP, type SaveState, SectionLabel, SelectedLabImage, SelectedTag, type SelectionValidation, ServerTab, SetupPanel, SliceContract, type SliceMeta, type SzenenLinks, TAGS_CUTOVER_MARKER, TAGS_SLICE_SCHEMA_VERSION, type TagBase, type TagBaseContext, type TagBaseEvent, type TagBaseMeta, TagBaseSection, type TagBaseSectionProps, type TagBaseTagEntry, type TagBaseTagOption, type TagBaseUser, type TagBaseWorkspaceTags, type TagCommandName, type TagCommands, type TagCreatedEvent, type TagCreatedPayload, type TagEntry, type TagEntryInput, TagManager, TagManagerPanel, type TagManagerProps, type TagManagerSelection, TagOption, type TagQueries, type TagUpdateDelta, type TagUpdatedDelta, type TagUpdatedEvent, type TagUpdatedPayload, type TagViewCategory, type TagViewModel, type TagViewOption, type TagViewScope, type TagsWorkspaceState, type UseTagBaseResult, WorkspacePersistence, WorkspaceTabId, WorkspaceTags, WriteResult, type Zugehoerigkeit, type ZugehoerigkeitEingabe, ZugehoerigkeitLinks, type ZugehoerigkeitLinksProps, type ZugehoerigkeitZiel, autoLabel, buildBlendInstruction, buildCompareInstruction, buildLoopInstruction, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, createFaStore, createInMemoryLibraryDataSource, createInMemoryWorkspacePersistence, createLibraryDefault, createPersistenceCoordinator, createTagCreatedEvent, createTagUpdatedEvent, createTagsDefault, deriveTagBaseWorkspaceTags, deriveTagViewModel, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, getSessionClientId, groupGenerationsToLabItems, hatNavigationsziele, hfBatchArchive, hfBootstrapFromLegacy, hfListDir, hfLoadImageAsBase64, hfUploadImage, hfUploadSmallFile, injectXMPMetadata, libraryContract, libraryReactDescriptor, listCategories, loadHFState, loadPendingEvents, loadTagBase, parseLegacyLibraryFilters, parseLegacyRecentTags, parsePromptFile, runLegacyMigration, runLibraryLegacyImport, runTagsLegacyImport, setHFToken, tagsContract, tagsReactDescriptor, tsFromEventPath, useFaSlice, useFaSliceMeta, useHFState, useKeyboardNavigation, useOnClickOutside, useTagBase, validateTagBaseSelection, writeHFEvent, writeTagEvent, zugehoerigkeitOf };
|
|
998
|
+
export { AvatarArchitectApp, type AvatarArchitectAppProps, CURRENT_TAG_EVENT_VERSION, CollapsibleCard, CommandResult, CompactDropdown, type CreateFaStoreOptions, type CreatePersistenceCoordinatorOptions, type ExtractedCharacter, FaApp, type FaAppProps, type FaStore, type FaStoreState, FaToolsBadge, FeatureSliceId, FlowTextGenerationOptions, FlowWorkspacePicker, type FlowWorkspacePickerProps, GLOBAL_STYLES, Generation, HFEvent, type HFStateResult, HFStateSnapshot, HfMediaSyncTab, HistoryPanel, type InMemoryWorkspacePersistence, InspectPanel, LIBRARY_CUTOVER_MARKER, LIBRARY_SLICE_SCHEMA_VERSION, version as LIB_VERSION, LabBlend, LabCompare, LabFrame, LabFrameExtractor, type LabFrameExtractorProps, LabImagePicker, LabItem, LabLoop, LabRemix, LabServices, type LabSlotId, LabsTab, type LegacyMigrationOptions, type LegacyMigrationResult, type LegacyRecentTagRef, type LegacySourceResult, type LibraryCommandName, type LibraryCommands, type LibraryDataSource, type LibraryLegacySource, type LibraryListQuery, type LibraryPage, LibraryView, type LibraryViewItem, type LibraryViewProps, type LibraryViewTag, type LibraryWorkspaceState, ListView, LoadResult, type MediaItem, MediaLibrary, PersistedSlice, type PersistenceCoordinator, PersistenceDescriptor, PillButton, PromptTab, QueryResult, RequestContext, type RunLibraryLegacyImportOptions, type RunTagsLegacyImportOptions, SCOPE_MAP, type SaveState, SectionLabel, SelectedLabImage, SelectedTag, type SelectionValidation, ServerTab, SetupPanel, SliceContract, type SliceMeta, type SzenenLinks, TAGS_CUTOVER_MARKER, TAGS_SLICE_SCHEMA_VERSION, type TagBase, type TagBaseContext, type TagBaseEvent, type TagBaseMeta, TagBaseSection, type TagBaseSectionProps, type TagBaseTagEntry, type TagBaseTagOption, type TagBaseUser, type TagBaseWorkspaceTags, type TagCommandName, type TagCommands, type TagCreatedEvent, type TagCreatedPayload, type TagEntry, type TagEntryInput, TagManager, TagManagerPanel, type TagManagerProps, type TagManagerSelection, TagOption, type TagQueries, type TagUpdateDelta, type TagUpdatedDelta, type TagUpdatedEvent, type TagUpdatedPayload, type TagViewCategory, type TagViewModel, type TagViewOption, type TagViewScope, type TagsWorkspaceState, type UseTagBaseResult, WorkspacePersistence, WorkspaceTabId, WorkspaceTags, WriteResult, type Zugehoerigkeit, type ZugehoerigkeitEingabe, ZugehoerigkeitLinks, type ZugehoerigkeitLinksProps, type ZugehoerigkeitZiel, autoLabel, buildBlendInstruction, buildCompareInstruction, buildLoopInstruction, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, createFaStore, createInMemoryLibraryDataSource, createInMemoryWorkspacePersistence, createLibraryDefault, createPersistenceCoordinator, createTagCreatedEvent, createTagUpdatedEvent, createTagsDefault, deriveTagBaseWorkspaceTags, deriveTagViewModel, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, getSessionClientId, groupGenerationsToLabItems, hatNavigationsziele, hfBatchArchive, hfBootstrapFromLegacy, hfListDir, hfLoadImageAsBase64, hfUploadImage, hfUploadSmallFile, injectXMPMetadata, libraryContract, libraryReactDescriptor, listCategories, loadHFState, loadPendingEvents, loadTagBase, parseLegacyLibraryFilters, parseLegacyRecentTags, parsePromptFile, runLegacyMigration, runLibraryLegacyImport, runTagsLegacyImport, setHFToken, tagsContract, tagsReactDescriptor, tsFromEventPath, useFaSlice, useFaSliceMeta, useHFState, useKeyboardNavigation, useOnClickOutside, useTagBase, validateTagBaseSelection, writeHFEvent, writeTagEvent, zugehoerigkeitOf, zugehoerigkeitenOf };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { RefObject, ReactNode } from 'react';
|
|
3
|
-
import { G as Generation, W as WorkspaceTags, F as FlowGenerateText, b as FlowTextGenerationOptions, j as SelectedTag, T as TagOption, i as LabServices, h as LabItem, L as LabFrame, S as SelectedLabImage, H as HFEvent, g as HFStateSnapshot } from './hfEventTypes-
|
|
4
|
-
export { a as FlowSdk, c as HFEventVersion, d as HFFileInfo, e as HFMetadataEntry, f as HFStateMeta, I as ImageAddedPayload, M as MetadataUpdatedPayload, P as ProjectSettings, k as TagUpsertedPayload, l as buildFallbackPrompt, m as buildGenerationPrompt, n as buildImageGenerationOptions, o as buildPromptTabPayload, p as cleanAiResponse, q as createFlowServices, s as interpretSdkError, t as parsePromptResponse } from './hfEventTypes-
|
|
3
|
+
import { G as Generation, W as WorkspaceTags, F as FlowGenerateText, b as FlowTextGenerationOptions, j as SelectedTag, T as TagOption, i as LabServices, h as LabItem, L as LabFrame, S as SelectedLabImage, H as HFEvent, g as HFStateSnapshot } from './hfEventTypes-DharkVsi.js';
|
|
4
|
+
export { a as FlowSdk, c as HFEventVersion, d as HFFileInfo, e as HFMetadataEntry, f as HFStateMeta, I as ImageAddedPayload, M as MetadataUpdatedPayload, P as ProjectSettings, k as TagUpsertedPayload, l as buildFallbackPrompt, m as buildGenerationPrompt, n as buildImageGenerationOptions, o as buildPromptTabPayload, p as cleanAiResponse, q as createFlowServices, s as interpretSdkError, t as parsePromptResponse } from './hfEventTypes-DharkVsi.js';
|
|
5
5
|
import { Node, Edge } from '@xyflow/react';
|
|
6
6
|
import * as zustand_vanilla from 'zustand/vanilla';
|
|
7
|
-
import { F as FeatureSliceId, b as SliceContract, a as PersistenceDescriptor, W as WorkspacePersistence, P as PersistedSlice, L as LoadResult,
|
|
7
|
+
import { F as FeatureSliceId, b as SliceContract, a as PersistenceDescriptor, W as WorkspacePersistence, P as PersistedSlice, L as LoadResult, g as WriteResult, f as WorkspaceTabId, C as CommandResult, R as RequestContext, Q as QueryResult } from './contracts-B3AbzYQ4.js';
|
|
8
8
|
|
|
9
|
-
var version = "10.
|
|
9
|
+
var version = "10.3.2";
|
|
10
10
|
|
|
11
11
|
declare function useOnClickOutside(ref: RefObject<HTMLElement | null>, handler: (e: MouseEvent | TouchEvent) => void): void;
|
|
12
12
|
|
|
@@ -580,6 +580,8 @@ interface LibraryViewProps {
|
|
|
580
580
|
layout?: 'list' | 'grid';
|
|
581
581
|
emptyText?: string;
|
|
582
582
|
/** Host-gerenderte Zusatzaktionen je Item (z.B. Flow-Referenzgenerierung). */
|
|
583
|
+
/** Inline child rows below a list card, e.g. expandable related items. */
|
|
584
|
+
renderItemChildren?: (item: LibraryViewItem) => React__default.ReactNode;
|
|
583
585
|
renderItemExtras?: (item: LibraryViewItem) => React__default.ReactNode;
|
|
584
586
|
/** Host-Datenversion: Änderung erzwingt Re-Query (z.B. nach Reload/Import). */
|
|
585
587
|
dataVersion?: number;
|
|
@@ -617,12 +619,22 @@ interface Zugehoerigkeit {
|
|
|
617
619
|
*/
|
|
618
620
|
hinweis: string | null;
|
|
619
621
|
}
|
|
620
|
-
/**
|
|
622
|
+
/**
|
|
623
|
+
* Das Item, soweit die Zuordnung es überhaupt anschaut.
|
|
624
|
+
*
|
|
625
|
+
* Seit Issue #503 (E7) ist ein Item ein Prompt und kann **mehrere** Runs
|
|
626
|
+
* führen: `szenen.prompt_run_id` bleibt der Primärlauf (der erste), alle Runs
|
|
627
|
+
* stehen in `szenen.runs[]`; `szenen_run_links` löst sie der Reihe nach auf.
|
|
628
|
+
*/
|
|
621
629
|
interface ZugehoerigkeitEingabe {
|
|
622
630
|
szenen?: {
|
|
623
631
|
prompt_run_id?: string | null;
|
|
632
|
+
runs?: ReadonlyArray<{
|
|
633
|
+
prompt_run_id?: string | null;
|
|
634
|
+
}> | null;
|
|
624
635
|
} | null;
|
|
625
636
|
szenen_links?: SzenenLinks | null;
|
|
637
|
+
szenen_run_links?: ReadonlyArray<SzenenLinks> | null;
|
|
626
638
|
}
|
|
627
639
|
/**
|
|
628
640
|
* Ob die Zugehörigkeit ein **anklickbares** Ziel hergibt.
|
|
@@ -642,6 +654,15 @@ declare function hatNavigationsziele(zugehoerigkeit: Zugehoerigkeit | null | und
|
|
|
642
654
|
* Oberfläche zeigt dann gar nichts an.
|
|
643
655
|
*/
|
|
644
656
|
declare function zugehoerigkeitOf(item: ZugehoerigkeitEingabe | null | undefined): Zugehoerigkeit | null;
|
|
657
|
+
/**
|
|
658
|
+
* Die Zugehörigkeiten **aller** Runs eines Items, in Reihenfolge des
|
|
659
|
+
* Hinzukommens (Primärlauf zuerst). Ein Item mit einem Run liefert genau die
|
|
660
|
+
* Zugehörigkeit von `zugehoerigkeitOf`; ein Item ohne Run eine leere Liste.
|
|
661
|
+
*
|
|
662
|
+
* Additiv zu `zugehoerigkeitOf` (dessen Vertrag unverändert bleibt): Wer nur den
|
|
663
|
+
* Primärlauf zeigt, ruft weiter diese Funktion.
|
|
664
|
+
*/
|
|
665
|
+
declare function zugehoerigkeitenOf(item: ZugehoerigkeitEingabe | null | undefined): Zugehoerigkeit[];
|
|
645
666
|
|
|
646
667
|
interface ZugehoerigkeitLinksProps {
|
|
647
668
|
zugehoerigkeit: Zugehoerigkeit | null;
|
|
@@ -974,4 +995,4 @@ interface UseTagBaseResult {
|
|
|
974
995
|
}
|
|
975
996
|
declare function useTagBase(token: string, namespace: string): UseTagBaseResult;
|
|
976
997
|
|
|
977
|
-
export { AvatarArchitectApp, type AvatarArchitectAppProps, CURRENT_TAG_EVENT_VERSION, CollapsibleCard, CommandResult, CompactDropdown, type CreateFaStoreOptions, type CreatePersistenceCoordinatorOptions, type ExtractedCharacter, FaApp, type FaAppProps, type FaStore, type FaStoreState, FaToolsBadge, FeatureSliceId, FlowTextGenerationOptions, FlowWorkspacePicker, type FlowWorkspacePickerProps, GLOBAL_STYLES, Generation, HFEvent, type HFStateResult, HFStateSnapshot, HfMediaSyncTab, HistoryPanel, type InMemoryWorkspacePersistence, InspectPanel, LIBRARY_CUTOVER_MARKER, LIBRARY_SLICE_SCHEMA_VERSION, version as LIB_VERSION, LabBlend, LabCompare, LabFrame, LabFrameExtractor, type LabFrameExtractorProps, LabImagePicker, LabItem, LabLoop, LabRemix, LabServices, type LabSlotId, LabsTab, type LegacyMigrationOptions, type LegacyMigrationResult, type LegacyRecentTagRef, type LegacySourceResult, type LibraryCommandName, type LibraryCommands, type LibraryDataSource, type LibraryLegacySource, type LibraryListQuery, type LibraryPage, LibraryView, type LibraryViewItem, type LibraryViewProps, type LibraryViewTag, type LibraryWorkspaceState, ListView, LoadResult, type MediaItem, MediaLibrary, PersistedSlice, type PersistenceCoordinator, PersistenceDescriptor, PillButton, PromptTab, QueryResult, RequestContext, type RunLibraryLegacyImportOptions, type RunTagsLegacyImportOptions, SCOPE_MAP, type SaveState, SectionLabel, SelectedLabImage, SelectedTag, type SelectionValidation, ServerTab, SetupPanel, SliceContract, type SliceMeta, type SzenenLinks, TAGS_CUTOVER_MARKER, TAGS_SLICE_SCHEMA_VERSION, type TagBase, type TagBaseContext, type TagBaseEvent, type TagBaseMeta, TagBaseSection, type TagBaseSectionProps, type TagBaseTagEntry, type TagBaseTagOption, type TagBaseUser, type TagBaseWorkspaceTags, type TagCommandName, type TagCommands, type TagCreatedEvent, type TagCreatedPayload, type TagEntry, type TagEntryInput, TagManager, TagManagerPanel, type TagManagerProps, type TagManagerSelection, TagOption, type TagQueries, type TagUpdateDelta, type TagUpdatedDelta, type TagUpdatedEvent, type TagUpdatedPayload, type TagViewCategory, type TagViewModel, type TagViewOption, type TagViewScope, type TagsWorkspaceState, type UseTagBaseResult, WorkspacePersistence, WorkspaceTabId, WorkspaceTags, WriteResult, type Zugehoerigkeit, type ZugehoerigkeitEingabe, ZugehoerigkeitLinks, type ZugehoerigkeitLinksProps, type ZugehoerigkeitZiel, autoLabel, buildBlendInstruction, buildCompareInstruction, buildLoopInstruction, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, createFaStore, createInMemoryLibraryDataSource, createInMemoryWorkspacePersistence, createLibraryDefault, createPersistenceCoordinator, createTagCreatedEvent, createTagUpdatedEvent, createTagsDefault, deriveTagBaseWorkspaceTags, deriveTagViewModel, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, getSessionClientId, groupGenerationsToLabItems, hatNavigationsziele, hfBatchArchive, hfBootstrapFromLegacy, hfListDir, hfLoadImageAsBase64, hfUploadImage, hfUploadSmallFile, injectXMPMetadata, libraryContract, libraryReactDescriptor, listCategories, loadHFState, loadPendingEvents, loadTagBase, parseLegacyLibraryFilters, parseLegacyRecentTags, parsePromptFile, runLegacyMigration, runLibraryLegacyImport, runTagsLegacyImport, setHFToken, tagsContract, tagsReactDescriptor, tsFromEventPath, useFaSlice, useFaSliceMeta, useHFState, useKeyboardNavigation, useOnClickOutside, useTagBase, validateTagBaseSelection, writeHFEvent, writeTagEvent, zugehoerigkeitOf };
|
|
998
|
+
export { AvatarArchitectApp, type AvatarArchitectAppProps, CURRENT_TAG_EVENT_VERSION, CollapsibleCard, CommandResult, CompactDropdown, type CreateFaStoreOptions, type CreatePersistenceCoordinatorOptions, type ExtractedCharacter, FaApp, type FaAppProps, type FaStore, type FaStoreState, FaToolsBadge, FeatureSliceId, FlowTextGenerationOptions, FlowWorkspacePicker, type FlowWorkspacePickerProps, GLOBAL_STYLES, Generation, HFEvent, type HFStateResult, HFStateSnapshot, HfMediaSyncTab, HistoryPanel, type InMemoryWorkspacePersistence, InspectPanel, LIBRARY_CUTOVER_MARKER, LIBRARY_SLICE_SCHEMA_VERSION, version as LIB_VERSION, LabBlend, LabCompare, LabFrame, LabFrameExtractor, type LabFrameExtractorProps, LabImagePicker, LabItem, LabLoop, LabRemix, LabServices, type LabSlotId, LabsTab, type LegacyMigrationOptions, type LegacyMigrationResult, type LegacyRecentTagRef, type LegacySourceResult, type LibraryCommandName, type LibraryCommands, type LibraryDataSource, type LibraryLegacySource, type LibraryListQuery, type LibraryPage, LibraryView, type LibraryViewItem, type LibraryViewProps, type LibraryViewTag, type LibraryWorkspaceState, ListView, LoadResult, type MediaItem, MediaLibrary, PersistedSlice, type PersistenceCoordinator, PersistenceDescriptor, PillButton, PromptTab, QueryResult, RequestContext, type RunLibraryLegacyImportOptions, type RunTagsLegacyImportOptions, SCOPE_MAP, type SaveState, SectionLabel, SelectedLabImage, SelectedTag, type SelectionValidation, ServerTab, SetupPanel, SliceContract, type SliceMeta, type SzenenLinks, TAGS_CUTOVER_MARKER, TAGS_SLICE_SCHEMA_VERSION, type TagBase, type TagBaseContext, type TagBaseEvent, type TagBaseMeta, TagBaseSection, type TagBaseSectionProps, type TagBaseTagEntry, type TagBaseTagOption, type TagBaseUser, type TagBaseWorkspaceTags, type TagCommandName, type TagCommands, type TagCreatedEvent, type TagCreatedPayload, type TagEntry, type TagEntryInput, TagManager, TagManagerPanel, type TagManagerProps, type TagManagerSelection, TagOption, type TagQueries, type TagUpdateDelta, type TagUpdatedDelta, type TagUpdatedEvent, type TagUpdatedPayload, type TagViewCategory, type TagViewModel, type TagViewOption, type TagViewScope, type TagsWorkspaceState, type UseTagBaseResult, WorkspacePersistence, WorkspaceTabId, WorkspaceTags, WriteResult, type Zugehoerigkeit, type ZugehoerigkeitEingabe, ZugehoerigkeitLinks, type ZugehoerigkeitLinksProps, type ZugehoerigkeitZiel, autoLabel, buildBlendInstruction, buildCompareInstruction, buildLoopInstruction, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, createFaStore, createInMemoryLibraryDataSource, createInMemoryWorkspacePersistence, createLibraryDefault, createPersistenceCoordinator, createTagCreatedEvent, createTagUpdatedEvent, createTagsDefault, deriveTagBaseWorkspaceTags, deriveTagViewModel, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, getSessionClientId, groupGenerationsToLabItems, hatNavigationsziele, hfBatchArchive, hfBootstrapFromLegacy, hfListDir, hfLoadImageAsBase64, hfUploadImage, hfUploadSmallFile, injectXMPMetadata, libraryContract, libraryReactDescriptor, listCategories, loadHFState, loadPendingEvents, loadTagBase, parseLegacyLibraryFilters, parseLegacyRecentTags, parsePromptFile, runLegacyMigration, runLibraryLegacyImport, runTagsLegacyImport, setHFToken, tagsContract, tagsReactDescriptor, tsFromEventPath, useFaSlice, useFaSliceMeta, useHFState, useKeyboardNavigation, useOnClickOutside, useTagBase, validateTagBaseSelection, writeHFEvent, writeTagEvent, zugehoerigkeitOf, zugehoerigkeitenOf };
|