@rslsp1/fa-app-tools 0.1.5 → 0.1.7
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 +31 -13
- package/dist/index.mjs +15 -7
- 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: () => void;
|
|
98
|
+
onImport: (files: FileList) => 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: () => void;
|
|
98
|
+
onImport: (files: FileList) => 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,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
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
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/index.ts
|
|
@@ -294,10 +304,12 @@ var SetupPanel = ({ onWorkspaceImport, onProjectExport, onProjectImport, project
|
|
|
294
304
|
};
|
|
295
305
|
|
|
296
306
|
// src/components/MediaLibrary.tsx
|
|
297
|
-
var import_react7 = require("
|
|
307
|
+
var import_react7 = __toESM(require("react"));
|
|
308
|
+
var import_react8 = require("motion/react");
|
|
298
309
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
299
310
|
var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, onBatchDownload }) => {
|
|
300
311
|
const selectedCount = items.filter((i) => i.selectedForExport).length;
|
|
312
|
+
const fileInputRef = import_react7.default.useRef(null);
|
|
301
313
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-col h-full overflow-hidden", children: [
|
|
302
314
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-col p-4 border-b border-white/5 gap-3 bg-black/20", children: [
|
|
303
315
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
@@ -308,12 +320,18 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
308
320
|
" Assets geladen"
|
|
309
321
|
] })
|
|
310
322
|
] }),
|
|
311
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("button", { onClick:
|
|
323
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("button", { onClick: () => fileInputRef.current?.click(), 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)]", type: "button", children: [
|
|
312
324
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined text-[16px]", children: "add_photo_alternate" }),
|
|
313
325
|
"Laden"
|
|
314
|
-
] })
|
|
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
|
+
} })
|
|
315
333
|
] }),
|
|
316
|
-
selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
334
|
+
selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react8.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: [
|
|
317
335
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "text-[9px] font-bold uppercase text-blue-400 ml-1", children: [
|
|
318
336
|
selectedCount,
|
|
319
337
|
" ausgew\xE4hlt"
|
|
@@ -330,17 +348,17 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
330
348
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-[12px] font-bold uppercase tracking-widest", children: "Keine Medien" }),
|
|
331
349
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-[10px] italic", children: "Importiere Assets aus deinem Projekt." })
|
|
332
350
|
] })
|
|
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)(
|
|
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)(import_react8.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: [
|
|
334
352
|
/* @__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 }),
|
|
335
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("
|
|
353
|
+
/* @__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) => {
|
|
336
354
|
e.stopPropagation();
|
|
337
|
-
onToggleSelection(item.id);
|
|
355
|
+
onToggleSelection?.(item.id);
|
|
338
356
|
}, children: item.selectedForExport && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined text-[14px] text-white", children: "check" }) }),
|
|
339
357
|
/* @__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: [
|
|
340
358
|
/* @__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" }),
|
|
341
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { onClick: (e) => {
|
|
359
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { type: "button", onClick: (e) => {
|
|
342
360
|
e.stopPropagation();
|
|
343
|
-
onDelete(item.id);
|
|
361
|
+
onDelete?.(item.id);
|
|
344
362
|
}, 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" }) })
|
|
345
363
|
] }) }),
|
|
346
364
|
/* @__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" })
|
|
@@ -349,10 +367,10 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
349
367
|
};
|
|
350
368
|
|
|
351
369
|
// src/components/ListView.tsx
|
|
352
|
-
var
|
|
370
|
+
var import_react9 = require("react");
|
|
353
371
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
354
372
|
var ListNode = ({ node, depth, onNodeChange, onAddChild, onDeleteNode, onMoveNode, onIndentNode, onOutdentNode, onAddSibling, isActive, isInPath, onFocus, onGenerate, onGenerateBranch, onGenerateSubtree, isGenerating, isCollapsed, toggleCollapse, renderNode, children }) => {
|
|
355
|
-
const inputRef = (0,
|
|
373
|
+
const inputRef = (0, import_react9.useRef)(null);
|
|
356
374
|
const hasChildren = children && children.length > 0;
|
|
357
375
|
const handleKeyDown = (e) => {
|
|
358
376
|
if (e.key === "Tab") {
|
|
@@ -380,7 +398,7 @@ var ListNode = ({ node, depth, onNodeChange, onAddChild, onDeleteNode, onMoveNod
|
|
|
380
398
|
onMoveNode(node.id, "down");
|
|
381
399
|
}
|
|
382
400
|
};
|
|
383
|
-
(0,
|
|
401
|
+
(0, import_react9.useEffect)(() => {
|
|
384
402
|
if (isActive && inputRef.current) inputRef.current.focus();
|
|
385
403
|
}, [isActive]);
|
|
386
404
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col w-full", children: [
|
|
@@ -414,7 +432,7 @@ var ListNode = ({ node, depth, onNodeChange, onAddChild, onDeleteNode, onMoveNod
|
|
|
414
432
|
] });
|
|
415
433
|
};
|
|
416
434
|
function ListView({ nodes, edges, onNodeChange, onAddChild, onDeleteNode, onMoveNode, onIndentNode, onOutdentNode, onAddSibling, focusedNodeId, onFocus, activePath, onGenerate, onGenerateBranch, onGenerateSubtree, isGeneratingNodeId }) {
|
|
417
|
-
const [collapsed, setCollapsed] = (0,
|
|
435
|
+
const [collapsed, setCollapsed] = (0, import_react9.useState)(/* @__PURE__ */ new Set());
|
|
418
436
|
const toggleCollapse = (id) => {
|
|
419
437
|
setCollapsed((prev) => {
|
|
420
438
|
const next = new Set(prev);
|
package/dist/index.mjs
CHANGED
|
@@ -259,10 +259,12 @@ var SetupPanel = ({ onWorkspaceImport, onProjectExport, onProjectImport, project
|
|
|
259
259
|
};
|
|
260
260
|
|
|
261
261
|
// src/components/MediaLibrary.tsx
|
|
262
|
+
import React3 from "react";
|
|
262
263
|
import { motion as motion4 } from "motion/react";
|
|
263
264
|
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
264
265
|
var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, onBatchDownload }) => {
|
|
265
266
|
const selectedCount = items.filter((i) => i.selectedForExport).length;
|
|
267
|
+
const fileInputRef = React3.useRef(null);
|
|
266
268
|
return /* @__PURE__ */ jsxs6("div", { className: "flex flex-col h-full overflow-hidden", children: [
|
|
267
269
|
/* @__PURE__ */ jsxs6("div", { className: "flex flex-col p-4 border-b border-white/5 gap-3 bg-black/20", children: [
|
|
268
270
|
/* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-between", children: [
|
|
@@ -273,10 +275,16 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
273
275
|
" Assets geladen"
|
|
274
276
|
] })
|
|
275
277
|
] }),
|
|
276
|
-
/* @__PURE__ */ jsxs6("button", { onClick:
|
|
278
|
+
/* @__PURE__ */ jsxs6("button", { onClick: () => fileInputRef.current?.click(), 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)]", type: "button", children: [
|
|
277
279
|
/* @__PURE__ */ jsx8("span", { className: "material-symbols-outlined text-[16px]", children: "add_photo_alternate" }),
|
|
278
280
|
"Laden"
|
|
279
|
-
] })
|
|
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
|
+
} })
|
|
280
288
|
] }),
|
|
281
289
|
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: [
|
|
282
290
|
/* @__PURE__ */ jsxs6("span", { className: "text-[9px] font-bold uppercase text-blue-400 ml-1", children: [
|
|
@@ -295,17 +303,17 @@ var MediaLibrary = ({ items, onImport, onDelete, onSelect, onToggleSelection, on
|
|
|
295
303
|
/* @__PURE__ */ jsx8("p", { className: "text-[12px] font-bold uppercase tracking-widest", children: "Keine Medien" }),
|
|
296
304
|
/* @__PURE__ */ jsx8("p", { className: "text-[10px] italic", children: "Importiere Assets aus deinem Projekt." })
|
|
297
305
|
] })
|
|
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: [
|
|
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: [
|
|
299
307
|
/* @__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 }),
|
|
300
|
-
/* @__PURE__ */ jsx8("
|
|
308
|
+
/* @__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) => {
|
|
301
309
|
e.stopPropagation();
|
|
302
|
-
onToggleSelection(item.id);
|
|
310
|
+
onToggleSelection?.(item.id);
|
|
303
311
|
}, children: item.selectedForExport && /* @__PURE__ */ jsx8("span", { className: "material-symbols-outlined text-[14px] text-white", children: "check" }) }),
|
|
304
312
|
/* @__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: [
|
|
305
313
|
/* @__PURE__ */ jsx8("span", { className: "text-[8px] font-bold text-white/80 truncate max-w-[80px] uppercase tracking-tighter", children: item.prompt || "Importiert" }),
|
|
306
|
-
/* @__PURE__ */ jsx8("button", { onClick: (e) => {
|
|
314
|
+
/* @__PURE__ */ jsx8("button", { type: "button", onClick: (e) => {
|
|
307
315
|
e.stopPropagation();
|
|
308
|
-
onDelete(item.id);
|
|
316
|
+
onDelete?.(item.id);
|
|
309
317
|
}, 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" }) })
|
|
310
318
|
] }) }),
|
|
311
319
|
/* @__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" })
|