@rslsp1/fa-app-tools 0.1.6 → 0.1.8
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/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -30
- package/dist/index.mjs +6 -14
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -95,7 +95,7 @@ declare const SetupPanel: React.FC<SetupPanelProps>;
|
|
|
95
95
|
|
|
96
96
|
interface MediaLibraryProps {
|
|
97
97
|
items: Generation[];
|
|
98
|
-
onImport: (
|
|
98
|
+
onImport: () => void;
|
|
99
99
|
onDelete: (id: string) => void;
|
|
100
100
|
onSelect: (item: Generation) => void;
|
|
101
101
|
onToggleSelection: (id: string) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -95,7 +95,7 @@ declare const SetupPanel: React.FC<SetupPanelProps>;
|
|
|
95
95
|
|
|
96
96
|
interface MediaLibraryProps {
|
|
97
97
|
items: Generation[];
|
|
98
|
-
onImport: (
|
|
98
|
+
onImport: () => void;
|
|
99
99
|
onDelete: (id: string) => void;
|
|
100
100
|
onSelect: (item: Generation) => void;
|
|
101
101
|
onToggleSelection: (id: string) => void;
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/index.ts
|
|
@@ -304,12 +294,10 @@ var SetupPanel = ({ onWorkspaceImport, onProjectExport, onProjectImport, project
|
|
|
304
294
|
};
|
|
305
295
|
|
|
306
296
|
// src/components/MediaLibrary.tsx
|
|
307
|
-
var import_react7 =
|
|
308
|
-
var import_react8 = require("motion/react");
|
|
297
|
+
var import_react7 = require("motion/react");
|
|
309
298
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
310
299
|
var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, onBatchDownload }) => {
|
|
311
300
|
const selectedCount = items.filter((i) => i.selectedForExport).length;
|
|
312
|
-
const fileInputRef = import_react7.default.useRef(null);
|
|
313
301
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-col h-full overflow-hidden", children: [
|
|
314
302
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-col p-4 border-b border-white/5 gap-3 bg-black/20", children: [
|
|
315
303
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
@@ -320,18 +308,12 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
320
308
|
" Assets geladen"
|
|
321
309
|
] })
|
|
322
310
|
] }),
|
|
323
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("button", { onClick: () =>
|
|
311
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("button", { type: "button", onClick: () => onImport?.(), className: "flex items-center gap-1.5 px-3 py-1.5 bg-blue-500 hover:bg-blue-400 text-white rounded-lg text-[10px] font-bold uppercase transition-all shadow-[0_0_15px_rgba(59,130,246,0.3)]", children: [
|
|
324
312
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined text-[16px]", children: "add_photo_alternate" }),
|
|
325
313
|
"Laden"
|
|
326
|
-
] })
|
|
327
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("input", { ref: fileInputRef, type: "file", accept: "image/*", multiple: true, className: "hidden", onChange: (e) => {
|
|
328
|
-
if (e.target.files?.length) {
|
|
329
|
-
onImport(e.target.files);
|
|
330
|
-
e.target.value = "";
|
|
331
|
-
}
|
|
332
|
-
} })
|
|
314
|
+
] })
|
|
333
315
|
] }),
|
|
334
|
-
selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
316
|
+
selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react7.motion.div, { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, className: "flex items-center justify-between bg-blue-500/10 border border-blue-500/20 p-2 rounded-xl", children: [
|
|
335
317
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "text-[9px] font-bold uppercase text-blue-400 ml-1", children: [
|
|
336
318
|
selectedCount,
|
|
337
319
|
" ausgew\xE4hlt"
|
|
@@ -348,17 +330,17 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
348
330
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-[12px] font-bold uppercase tracking-widest", children: "Keine Medien" }),
|
|
349
331
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-[10px] italic", children: "Importiere Assets aus deinem Projekt." })
|
|
350
332
|
] })
|
|
351
|
-
] }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "grid grid-cols-2 gap-3 pb-10", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
333
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "grid grid-cols-2 gap-3 pb-10", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react7.motion.div, { initial: { opacity: 0, scale: 0.9 }, animate: { opacity: 1, scale: 1 }, className: `relative aspect-square group/item rounded-xl overflow-hidden border transition-all bg-white/5 cursor-pointer shadow-lg ${item.selectedForExport ? "border-blue-500 shadow-[0_0_15px_rgba(59,130,246,0.2)]" : "border-white/10 opacity-70 hover:opacity-100"}`, onClick: () => onSelect?.(item), children: [
|
|
352
334
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("img", { src: item.base64?.startsWith("data:") ? item.base64 : `data:image/png;base64,${item.base64}`, className: "w-full h-full object-cover transition-transform duration-500 group-hover/item:scale-110", alt: item.prompt }),
|
|
353
335
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { type: "button", className: `absolute top-2 left-2 w-5 h-5 rounded-md border flex items-center justify-center transition-all z-30 pointer-events-auto ${item.selectedForExport ? "bg-blue-500 border-blue-400" : "bg-black/60 border-white/20"}`, onClick: (e) => {
|
|
354
336
|
e.stopPropagation();
|
|
355
|
-
onToggleSelection(item.id);
|
|
337
|
+
onToggleSelection?.(item.id);
|
|
356
338
|
}, children: item.selectedForExport && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined text-[14px] text-white", children: "check" }) }),
|
|
357
339
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover/item:opacity-100 transition-opacity flex flex-col justify-end p-2 gap-2 pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
358
340
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "text-[8px] font-bold text-white/80 truncate max-w-[80px] uppercase tracking-tighter", children: item.prompt || "Importiert" }),
|
|
359
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { onClick: (e) => {
|
|
341
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { type: "button", onClick: (e) => {
|
|
360
342
|
e.stopPropagation();
|
|
361
|
-
onDelete(item.id);
|
|
343
|
+
onDelete?.(item.id);
|
|
362
344
|
}, className: "w-6 h-6 flex items-center justify-center bg-red-500/20 text-red-400 hover:bg-red-500 rounded-md transition-all hover:text-white pointer-events-auto", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined text-[14px]", children: "delete" }) })
|
|
363
345
|
] }) }),
|
|
364
346
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "absolute top-1 right-1 px-1.5 py-0.5 bg-black/60 backdrop-blur-md rounded text-[7px] font-bold text-white/60 uppercase tracking-tight", children: item.type === "import" ? "Library" : "Gen" })
|
|
@@ -367,10 +349,10 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
367
349
|
};
|
|
368
350
|
|
|
369
351
|
// src/components/ListView.tsx
|
|
370
|
-
var
|
|
352
|
+
var import_react8 = require("react");
|
|
371
353
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
372
354
|
var ListNode = ({ node, depth, onNodeChange, onAddChild, onDeleteNode, onMoveNode, onIndentNode, onOutdentNode, onAddSibling, isActive, isInPath, onFocus, onGenerate, onGenerateBranch, onGenerateSubtree, isGenerating, isCollapsed, toggleCollapse, renderNode, children }) => {
|
|
373
|
-
const inputRef = (0,
|
|
355
|
+
const inputRef = (0, import_react8.useRef)(null);
|
|
374
356
|
const hasChildren = children && children.length > 0;
|
|
375
357
|
const handleKeyDown = (e) => {
|
|
376
358
|
if (e.key === "Tab") {
|
|
@@ -398,7 +380,7 @@ var ListNode = ({ node, depth, onNodeChange, onAddChild, onDeleteNode, onMoveNod
|
|
|
398
380
|
onMoveNode(node.id, "down");
|
|
399
381
|
}
|
|
400
382
|
};
|
|
401
|
-
(0,
|
|
383
|
+
(0, import_react8.useEffect)(() => {
|
|
402
384
|
if (isActive && inputRef.current) inputRef.current.focus();
|
|
403
385
|
}, [isActive]);
|
|
404
386
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col w-full", children: [
|
|
@@ -432,7 +414,7 @@ var ListNode = ({ node, depth, onNodeChange, onAddChild, onDeleteNode, onMoveNod
|
|
|
432
414
|
] });
|
|
433
415
|
};
|
|
434
416
|
function ListView({ nodes, edges, onNodeChange, onAddChild, onDeleteNode, onMoveNode, onIndentNode, onOutdentNode, onAddSibling, focusedNodeId, onFocus, activePath, onGenerate, onGenerateBranch, onGenerateSubtree, isGeneratingNodeId }) {
|
|
435
|
-
const [collapsed, setCollapsed] = (0,
|
|
417
|
+
const [collapsed, setCollapsed] = (0, import_react8.useState)(/* @__PURE__ */ new Set());
|
|
436
418
|
const toggleCollapse = (id) => {
|
|
437
419
|
setCollapsed((prev) => {
|
|
438
420
|
const next = new Set(prev);
|
package/dist/index.mjs
CHANGED
|
@@ -259,12 +259,10 @@ var SetupPanel = ({ onWorkspaceImport, onProjectExport, onProjectImport, project
|
|
|
259
259
|
};
|
|
260
260
|
|
|
261
261
|
// src/components/MediaLibrary.tsx
|
|
262
|
-
import React3 from "react";
|
|
263
262
|
import { motion as motion4 } from "motion/react";
|
|
264
263
|
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
265
264
|
var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, onBatchDownload }) => {
|
|
266
265
|
const selectedCount = items.filter((i) => i.selectedForExport).length;
|
|
267
|
-
const fileInputRef = React3.useRef(null);
|
|
268
266
|
return /* @__PURE__ */ jsxs6("div", { className: "flex flex-col h-full overflow-hidden", children: [
|
|
269
267
|
/* @__PURE__ */ jsxs6("div", { className: "flex flex-col p-4 border-b border-white/5 gap-3 bg-black/20", children: [
|
|
270
268
|
/* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-between", children: [
|
|
@@ -275,16 +273,10 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
275
273
|
" Assets geladen"
|
|
276
274
|
] })
|
|
277
275
|
] }),
|
|
278
|
-
/* @__PURE__ */ jsxs6("button", { onClick: () =>
|
|
276
|
+
/* @__PURE__ */ jsxs6("button", { type: "button", onClick: () => onImport?.(), className: "flex items-center gap-1.5 px-3 py-1.5 bg-blue-500 hover:bg-blue-400 text-white rounded-lg text-[10px] font-bold uppercase transition-all shadow-[0_0_15px_rgba(59,130,246,0.3)]", children: [
|
|
279
277
|
/* @__PURE__ */ jsx8("span", { className: "material-symbols-outlined text-[16px]", children: "add_photo_alternate" }),
|
|
280
278
|
"Laden"
|
|
281
|
-
] })
|
|
282
|
-
/* @__PURE__ */ jsx8("input", { ref: fileInputRef, type: "file", accept: "image/*", multiple: true, className: "hidden", onChange: (e) => {
|
|
283
|
-
if (e.target.files?.length) {
|
|
284
|
-
onImport(e.target.files);
|
|
285
|
-
e.target.value = "";
|
|
286
|
-
}
|
|
287
|
-
} })
|
|
279
|
+
] })
|
|
288
280
|
] }),
|
|
289
281
|
selectedCount > 0 && /* @__PURE__ */ jsxs6(motion4.div, { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, className: "flex items-center justify-between bg-blue-500/10 border border-blue-500/20 p-2 rounded-xl", children: [
|
|
290
282
|
/* @__PURE__ */ jsxs6("span", { className: "text-[9px] font-bold uppercase text-blue-400 ml-1", children: [
|
|
@@ -303,17 +295,17 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
303
295
|
/* @__PURE__ */ jsx8("p", { className: "text-[12px] font-bold uppercase tracking-widest", children: "Keine Medien" }),
|
|
304
296
|
/* @__PURE__ */ jsx8("p", { className: "text-[10px] italic", children: "Importiere Assets aus deinem Projekt." })
|
|
305
297
|
] })
|
|
306
|
-
] }) : /* @__PURE__ */ jsx8("div", { className: "grid grid-cols-2 gap-3 pb-10", children: items.map((item) => /* @__PURE__ */ jsxs6(motion4.div, { initial: { opacity: 0, scale: 0.9 }, animate: { opacity: 1, scale: 1 }, className: `relative aspect-square group/item rounded-xl overflow-hidden border transition-all bg-white/5 cursor-pointer shadow-lg ${item.selectedForExport ? "border-blue-500 shadow-[0_0_15px_rgba(59,130,246,0.2)]" : "border-white/10 opacity-70 hover:opacity-100"}`, onClick: () => onSelect(item), children: [
|
|
298
|
+
] }) : /* @__PURE__ */ jsx8("div", { className: "grid grid-cols-2 gap-3 pb-10", children: items.map((item) => /* @__PURE__ */ jsxs6(motion4.div, { initial: { opacity: 0, scale: 0.9 }, animate: { opacity: 1, scale: 1 }, className: `relative aspect-square group/item rounded-xl overflow-hidden border transition-all bg-white/5 cursor-pointer shadow-lg ${item.selectedForExport ? "border-blue-500 shadow-[0_0_15px_rgba(59,130,246,0.2)]" : "border-white/10 opacity-70 hover:opacity-100"}`, onClick: () => onSelect?.(item), children: [
|
|
307
299
|
/* @__PURE__ */ jsx8("img", { src: item.base64?.startsWith("data:") ? item.base64 : `data:image/png;base64,${item.base64}`, className: "w-full h-full object-cover transition-transform duration-500 group-hover/item:scale-110", alt: item.prompt }),
|
|
308
300
|
/* @__PURE__ */ jsx8("button", { type: "button", className: `absolute top-2 left-2 w-5 h-5 rounded-md border flex items-center justify-center transition-all z-30 pointer-events-auto ${item.selectedForExport ? "bg-blue-500 border-blue-400" : "bg-black/60 border-white/20"}`, onClick: (e) => {
|
|
309
301
|
e.stopPropagation();
|
|
310
|
-
onToggleSelection(item.id);
|
|
302
|
+
onToggleSelection?.(item.id);
|
|
311
303
|
}, children: item.selectedForExport && /* @__PURE__ */ jsx8("span", { className: "material-symbols-outlined text-[14px] text-white", children: "check" }) }),
|
|
312
304
|
/* @__PURE__ */ jsx8("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover/item:opacity-100 transition-opacity flex flex-col justify-end p-2 gap-2 pointer-events-none", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-between", children: [
|
|
313
305
|
/* @__PURE__ */ jsx8("span", { className: "text-[8px] font-bold text-white/80 truncate max-w-[80px] uppercase tracking-tighter", children: item.prompt || "Importiert" }),
|
|
314
|
-
/* @__PURE__ */ jsx8("button", { onClick: (e) => {
|
|
306
|
+
/* @__PURE__ */ jsx8("button", { type: "button", onClick: (e) => {
|
|
315
307
|
e.stopPropagation();
|
|
316
|
-
onDelete(item.id);
|
|
308
|
+
onDelete?.(item.id);
|
|
317
309
|
}, className: "w-6 h-6 flex items-center justify-center bg-red-500/20 text-red-400 hover:bg-red-500 rounded-md transition-all hover:text-white pointer-events-auto", children: /* @__PURE__ */ jsx8("span", { className: "material-symbols-outlined text-[14px]", children: "delete" }) })
|
|
318
310
|
] }) }),
|
|
319
311
|
/* @__PURE__ */ jsx8("div", { className: "absolute top-1 right-1 px-1.5 py-0.5 bg-black/60 backdrop-blur-md rounded text-[7px] font-bold text-white/60 uppercase tracking-tight", children: item.type === "import" ? "Library" : "Gen" })
|