@rslsp1/fa-app-tools 1.3.8 → 1.3.10

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 CHANGED
@@ -479,6 +479,6 @@ declare function hfLoadMetadata(token: string): Promise<any[]>;
479
479
  declare function hfUploadImage(base64: string, id: string, token: string, mimeType?: string): Promise<void>;
480
480
  declare function hfLoadImageAsBase64(id: string, token: string): Promise<string | null>;
481
481
 
482
- declare const LIB_VERSION = "1.3.8";
482
+ declare const LIB_VERSION = "1.3.10";
483
483
 
484
484
  export { AvatarArchitectApp, type AvatarArchitectAppProps, CollapsibleCard, CompactDropdown, type ExtractedCharacter, FaToolsBadge, type FlowSdk, GLOBAL_STYLES, type Generation, type HFMetadataEntry, HistoryPanel, InspectPanel, LIB_VERSION, LabBlend, LabCompare, type LabFrame, LabImagePicker, type LabItem, LabLoop, LabRemix, type LabServices, LabsTab, ListView, type MediaItem, MediaLibrary, PillButton, type ProjectMeta, type ProjectSettings, ProjectSyncTab, PromptTab, SectionLabel, type SelectedLabImage, type SelectedTag, SetupPanel, type SyncDiff, TagManagerPanel, type TagOption, type WorkspaceTags, autoLabel, buildBlendInstruction, buildCompareInstruction, buildFallbackPrompt, buildGenerationPrompt, buildImageGenerationOptions, buildLoopInstruction, buildPromptTabPayload, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, cleanAiResponse, createFlowServices, exportProjectToZip, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, groupGenerationsToLabItems, hfDeleteProject, hfDownloadProject, hfListProjects, hfLoadImageAsBase64, hfLoadMetadata, hfLoadTags, hfSaveMetadata, hfSaveTags, hfUploadImage, hfUploadProjectForm, importProjectFromZip, injectXMPMetadata, interpretSdkError, parsePromptFile, parsePromptResponse, setHFToken, useKeyboardNavigation, useOnClickOutside };
package/dist/index.d.ts CHANGED
@@ -479,6 +479,6 @@ declare function hfLoadMetadata(token: string): Promise<any[]>;
479
479
  declare function hfUploadImage(base64: string, id: string, token: string, mimeType?: string): Promise<void>;
480
480
  declare function hfLoadImageAsBase64(id: string, token: string): Promise<string | null>;
481
481
 
482
- declare const LIB_VERSION = "1.3.8";
482
+ declare const LIB_VERSION = "1.3.10";
483
483
 
484
484
  export { AvatarArchitectApp, type AvatarArchitectAppProps, CollapsibleCard, CompactDropdown, type ExtractedCharacter, FaToolsBadge, type FlowSdk, GLOBAL_STYLES, type Generation, type HFMetadataEntry, HistoryPanel, InspectPanel, LIB_VERSION, LabBlend, LabCompare, type LabFrame, LabImagePicker, type LabItem, LabLoop, LabRemix, type LabServices, LabsTab, ListView, type MediaItem, MediaLibrary, PillButton, type ProjectMeta, type ProjectSettings, ProjectSyncTab, PromptTab, SectionLabel, type SelectedLabImage, type SelectedTag, SetupPanel, type SyncDiff, TagManagerPanel, type TagOption, type WorkspaceTags, autoLabel, buildBlendInstruction, buildCompareInstruction, buildFallbackPrompt, buildGenerationPrompt, buildImageGenerationOptions, buildLoopInstruction, buildPromptTabPayload, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, cleanAiResponse, createFlowServices, exportProjectToZip, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, groupGenerationsToLabItems, hfDeleteProject, hfDownloadProject, hfListProjects, hfLoadImageAsBase64, hfLoadMetadata, hfLoadTags, hfSaveMetadata, hfSaveTags, hfUploadImage, hfUploadProjectForm, importProjectFromZip, injectXMPMetadata, interpretSdkError, parsePromptFile, parsePromptResponse, setHFToken, useKeyboardNavigation, useOnClickOutside };
package/dist/index.js CHANGED
@@ -3747,11 +3747,15 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3747
3747
  };
3748
3748
  hfUploadImage(base64, genId, hfToken).catch(() => {
3749
3749
  });
3750
- setHfMetadata((prev) => {
3751
- const next = [...prev, entry];
3752
- hfSaveMetadata(next, hfToken).catch(() => {
3753
- });
3754
- return next;
3750
+ hfLoadMetadata(hfToken).then((existing) => {
3751
+ const ids = new Set((existing || []).map((e) => e.id));
3752
+ if (!ids.has(genId)) {
3753
+ const next = [...existing || [], entry];
3754
+ hfSaveMetadata(next, hfToken).catch(() => {
3755
+ });
3756
+ setHfMetadata(next);
3757
+ }
3758
+ }).catch(() => {
3755
3759
  });
3756
3760
  }
3757
3761
  } catch (err) {
@@ -3972,7 +3976,7 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3972
3976
  done++;
3973
3977
  onProgress(done, total);
3974
3978
  }
3975
- const metaEntries = gens.map((g) => ({
3979
+ const localEntries = gens.map((g) => ({
3976
3980
  id: g.id,
3977
3981
  prompt: g.prompt || void 0,
3978
3982
  seed: g.seed,
@@ -3981,8 +3985,12 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3981
3985
  timestamp: g.timestamp,
3982
3986
  mimeType: g.base64.startsWith("data:image/png") ? "image/png" : "image/jpeg"
3983
3987
  }));
3984
- await hfSaveMetadata(metaEntries, hfToken);
3985
- setHfMetadata(metaEntries);
3988
+ const existingMeta = await hfLoadMetadata(hfToken);
3989
+ const existingIds = new Set((existingMeta || []).map((e) => e.id));
3990
+ const newEntries = localEntries.filter((e) => !existingIds.has(e.id));
3991
+ const mergedMeta = [...existingMeta || [], ...newEntries];
3992
+ await hfSaveMetadata(mergedMeta, hfToken);
3993
+ setHfMetadata(mergedMeta);
3986
3994
  if (workspaceTags) await hfSaveTags(workspaceTags, hfToken);
3987
3995
  };
3988
3996
  const handleComputeSyncDiff = async () => {
@@ -4024,13 +4032,15 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4024
4032
  (0, import_react21.useEffect)(() => {
4025
4033
  if (activeTab === "setup" || activeTab === "sync") fetchServerProjects();
4026
4034
  }, [activeTab]);
4027
- (0, import_react21.useEffect)(() => {
4028
- if (!hfToken) return;
4029
- hfLoadTags(hfToken).then((tags) => {
4030
- if (tags?.by_category) setWorkspaceTags(tags);
4031
- }).catch(() => {
4032
- });
4033
- hfLoadMetadata(hfToken).then(async (entries) => {
4035
+ const [isHfRefreshing, setIsHfRefreshing] = (0, import_react21.useState)(false);
4036
+ const loadFromHF = (0, import_react21.useCallback)(async (token) => {
4037
+ setIsHfRefreshing(true);
4038
+ try {
4039
+ hfLoadTags(token).then((tags) => {
4040
+ if (tags?.by_category) setWorkspaceTags(tags);
4041
+ }).catch(() => {
4042
+ });
4043
+ const entries = await hfLoadMetadata(token);
4034
4044
  if (!Array.isArray(entries) || entries.length === 0) return;
4035
4045
  setHfMetadata(entries);
4036
4046
  const skeletons = entries.map((e) => ({
@@ -4047,20 +4057,20 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4047
4057
  setHistory(skeletons);
4048
4058
  if (skeletons.length > 0) setCurrentResult(skeletons[0]);
4049
4059
  for (const entry of entries) {
4050
- hfLoadImageAsBase64(entry.id, hfToken).then((b64) => {
4060
+ hfLoadImageAsBase64(entry.id, token).then((b64) => {
4051
4061
  if (!b64) return;
4052
4062
  const prefix = `data:${entry.mimeType || "image/jpeg"};base64,`;
4053
- setGalleryItems((prev) => prev.map(
4054
- (g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g
4055
- ));
4056
- setHistory((prev) => prev.map(
4057
- (g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g
4058
- ));
4063
+ setGalleryItems((prev) => prev.map((g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g));
4064
+ setHistory((prev) => prev.map((g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g));
4059
4065
  }).catch(() => {
4060
4066
  });
4061
4067
  }
4062
- }).catch(() => {
4063
- });
4068
+ } finally {
4069
+ setIsHfRefreshing(false);
4070
+ }
4071
+ }, []);
4072
+ (0, import_react21.useEffect)(() => {
4073
+ if (hfToken) loadFromHF(hfToken);
4064
4074
  }, [hfToken]);
4065
4075
  (0, import_react21.useEffect)(() => {
4066
4076
  if (!hfToken || !workspaceTags) return;
@@ -4411,7 +4421,10 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4411
4421
  ] })
4412
4422
  ] }),
4413
4423
  mobileTab === "browse" && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex flex-col flex-1 min-h-0", children: [
4414
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex border-b border-white/5 shrink-0", style: { height: 52 }, children: ["history", "gallery", "inspect"].map((tab) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { onClick: () => setActiveTab(tab), className: `flex-1 flex items-center justify-center gap-1.5 transition-colors text-[11px] font-bold uppercase tracking-wide ${activeTab === tab ? "text-white border-b-2 border-white" : "text-white/30"}`, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "material-symbols-outlined text-[20px]", children: tab === "history" ? "history" : tab === "gallery" ? "photo_library" : "info" }) }, tab)) }),
4424
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex border-b border-white/5 shrink-0", style: { height: 52 }, children: [
4425
+ ["history", "gallery", "inspect"].map((tab) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { onClick: () => setActiveTab(tab), className: `flex-1 flex items-center justify-center gap-1.5 transition-colors text-[11px] font-bold uppercase tracking-wide ${activeTab === tab ? "text-white border-b-2 border-white" : "text-white/30"}`, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "material-symbols-outlined text-[20px]", children: tab === "history" ? "history" : tab === "gallery" ? "photo_library" : "info" }) }, tab)),
4426
+ hfToken && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { onClick: () => loadFromHF(hfToken), disabled: isHfRefreshing, className: "w-12 flex items-center justify-center text-white/20 active:text-white transition-colors disabled:opacity-30", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: `material-symbols-outlined text-[20px]${isHfRefreshing ? " animate-spin" : ""}`, children: "sync" }) })
4427
+ ] }),
4415
4428
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex-1 overflow-hidden relative", children: [
4416
4429
  activeTab === "history" && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(HistoryPanel, { history, currentResultId: currentResult?.id || null, onSelect: (g) => {
4417
4430
  setCurrentResult(g);
@@ -4800,6 +4813,7 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4800
4813
  setActiveTab(tab);
4801
4814
  setIsRightCollapsed(false);
4802
4815
  }, className: `flex-1 flex items-center justify-center relative transition-colors ${activeTab === tab ? "text-white" : "text-white/20"}`, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "material-symbols-outlined text-[20px]", children: tab === "history" ? "history" : tab === "gallery" ? "photo_library" : tab === "inspect" ? "info" : tab === "setup" ? "settings" : tab === "sync" ? "cloud_sync" : "label" }) }, tab)) }),
4816
+ hfToken && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { onClick: () => loadFromHF(hfToken), disabled: isHfRefreshing, className: "w-10 flex items-center justify-center text-white/20 hover:text-white/60 transition-colors disabled:opacity-30", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: `material-symbols-outlined text-[18px]${isHfRefreshing ? " animate-spin" : ""}`, children: "sync" }) }),
4803
4817
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { onClick: () => setIsRightCollapsed(!isRightCollapsed), className: "w-10 flex items-center justify-center text-white/20 hover:text-white", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "material-symbols-outlined text-[18px]", children: isRightCollapsed ? "chevron_left" : "chevron_right" }) })
4804
4818
  ] }),
4805
4819
  !isRightCollapsed && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex-1 overflow-hidden relative", children: [
@@ -4865,7 +4879,7 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4865
4879
 
4866
4880
  // src/index.ts
4867
4881
  init_hfStateService();
4868
- var LIB_VERSION = "1.3.8";
4882
+ var LIB_VERSION = "1.3.10";
4869
4883
  // Annotate the CommonJS export names for ESM import in node:
4870
4884
  0 && (module.exports = {
4871
4885
  AvatarArchitectApp,
package/dist/index.mjs CHANGED
@@ -3190,11 +3190,15 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3190
3190
  };
3191
3191
  hfUploadImage(base64, genId, hfToken).catch(() => {
3192
3192
  });
3193
- setHfMetadata((prev) => {
3194
- const next = [...prev, entry];
3195
- hfSaveMetadata(next, hfToken).catch(() => {
3196
- });
3197
- return next;
3193
+ hfLoadMetadata(hfToken).then((existing) => {
3194
+ const ids = new Set((existing || []).map((e) => e.id));
3195
+ if (!ids.has(genId)) {
3196
+ const next = [...existing || [], entry];
3197
+ hfSaveMetadata(next, hfToken).catch(() => {
3198
+ });
3199
+ setHfMetadata(next);
3200
+ }
3201
+ }).catch(() => {
3198
3202
  });
3199
3203
  }
3200
3204
  } catch (err) {
@@ -3415,7 +3419,7 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3415
3419
  done++;
3416
3420
  onProgress(done, total);
3417
3421
  }
3418
- const metaEntries = gens.map((g) => ({
3422
+ const localEntries = gens.map((g) => ({
3419
3423
  id: g.id,
3420
3424
  prompt: g.prompt || void 0,
3421
3425
  seed: g.seed,
@@ -3424,8 +3428,12 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3424
3428
  timestamp: g.timestamp,
3425
3429
  mimeType: g.base64.startsWith("data:image/png") ? "image/png" : "image/jpeg"
3426
3430
  }));
3427
- await hfSaveMetadata(metaEntries, hfToken);
3428
- setHfMetadata(metaEntries);
3431
+ const existingMeta = await hfLoadMetadata(hfToken);
3432
+ const existingIds = new Set((existingMeta || []).map((e) => e.id));
3433
+ const newEntries = localEntries.filter((e) => !existingIds.has(e.id));
3434
+ const mergedMeta = [...existingMeta || [], ...newEntries];
3435
+ await hfSaveMetadata(mergedMeta, hfToken);
3436
+ setHfMetadata(mergedMeta);
3429
3437
  if (workspaceTags) await hfSaveTags(workspaceTags, hfToken);
3430
3438
  };
3431
3439
  const handleComputeSyncDiff = async () => {
@@ -3467,13 +3475,15 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3467
3475
  useEffect5(() => {
3468
3476
  if (activeTab === "setup" || activeTab === "sync") fetchServerProjects();
3469
3477
  }, [activeTab]);
3470
- useEffect5(() => {
3471
- if (!hfToken) return;
3472
- hfLoadTags(hfToken).then((tags) => {
3473
- if (tags?.by_category) setWorkspaceTags(tags);
3474
- }).catch(() => {
3475
- });
3476
- hfLoadMetadata(hfToken).then(async (entries) => {
3478
+ const [isHfRefreshing, setIsHfRefreshing] = useState14(false);
3479
+ const loadFromHF = useCallback(async (token) => {
3480
+ setIsHfRefreshing(true);
3481
+ try {
3482
+ hfLoadTags(token).then((tags) => {
3483
+ if (tags?.by_category) setWorkspaceTags(tags);
3484
+ }).catch(() => {
3485
+ });
3486
+ const entries = await hfLoadMetadata(token);
3477
3487
  if (!Array.isArray(entries) || entries.length === 0) return;
3478
3488
  setHfMetadata(entries);
3479
3489
  const skeletons = entries.map((e) => ({
@@ -3490,20 +3500,20 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3490
3500
  setHistory(skeletons);
3491
3501
  if (skeletons.length > 0) setCurrentResult(skeletons[0]);
3492
3502
  for (const entry of entries) {
3493
- hfLoadImageAsBase64(entry.id, hfToken).then((b64) => {
3503
+ hfLoadImageAsBase64(entry.id, token).then((b64) => {
3494
3504
  if (!b64) return;
3495
3505
  const prefix = `data:${entry.mimeType || "image/jpeg"};base64,`;
3496
- setGalleryItems((prev) => prev.map(
3497
- (g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g
3498
- ));
3499
- setHistory((prev) => prev.map(
3500
- (g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g
3501
- ));
3506
+ setGalleryItems((prev) => prev.map((g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g));
3507
+ setHistory((prev) => prev.map((g) => g.id === entry.id ? { ...g, base64: prefix + b64 } : g));
3502
3508
  }).catch(() => {
3503
3509
  });
3504
3510
  }
3505
- }).catch(() => {
3506
- });
3511
+ } finally {
3512
+ setIsHfRefreshing(false);
3513
+ }
3514
+ }, []);
3515
+ useEffect5(() => {
3516
+ if (hfToken) loadFromHF(hfToken);
3507
3517
  }, [hfToken]);
3508
3518
  useEffect5(() => {
3509
3519
  if (!hfToken || !workspaceTags) return;
@@ -3854,7 +3864,10 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
3854
3864
  ] })
3855
3865
  ] }),
3856
3866
  mobileTab === "browse" && /* @__PURE__ */ jsxs18("div", { className: "flex flex-col flex-1 min-h-0", children: [
3857
- /* @__PURE__ */ jsx20("div", { className: "flex border-b border-white/5 shrink-0", style: { height: 52 }, children: ["history", "gallery", "inspect"].map((tab) => /* @__PURE__ */ jsx20("button", { onClick: () => setActiveTab(tab), className: `flex-1 flex items-center justify-center gap-1.5 transition-colors text-[11px] font-bold uppercase tracking-wide ${activeTab === tab ? "text-white border-b-2 border-white" : "text-white/30"}`, children: /* @__PURE__ */ jsx20("span", { className: "material-symbols-outlined text-[20px]", children: tab === "history" ? "history" : tab === "gallery" ? "photo_library" : "info" }) }, tab)) }),
3867
+ /* @__PURE__ */ jsxs18("div", { className: "flex border-b border-white/5 shrink-0", style: { height: 52 }, children: [
3868
+ ["history", "gallery", "inspect"].map((tab) => /* @__PURE__ */ jsx20("button", { onClick: () => setActiveTab(tab), className: `flex-1 flex items-center justify-center gap-1.5 transition-colors text-[11px] font-bold uppercase tracking-wide ${activeTab === tab ? "text-white border-b-2 border-white" : "text-white/30"}`, children: /* @__PURE__ */ jsx20("span", { className: "material-symbols-outlined text-[20px]", children: tab === "history" ? "history" : tab === "gallery" ? "photo_library" : "info" }) }, tab)),
3869
+ hfToken && /* @__PURE__ */ jsx20("button", { onClick: () => loadFromHF(hfToken), disabled: isHfRefreshing, className: "w-12 flex items-center justify-center text-white/20 active:text-white transition-colors disabled:opacity-30", children: /* @__PURE__ */ jsx20("span", { className: `material-symbols-outlined text-[20px]${isHfRefreshing ? " animate-spin" : ""}`, children: "sync" }) })
3870
+ ] }),
3858
3871
  /* @__PURE__ */ jsxs18("div", { className: "flex-1 overflow-hidden relative", children: [
3859
3872
  activeTab === "history" && /* @__PURE__ */ jsx20(HistoryPanel, { history, currentResultId: currentResult?.id || null, onSelect: (g) => {
3860
3873
  setCurrentResult(g);
@@ -4243,6 +4256,7 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4243
4256
  setActiveTab(tab);
4244
4257
  setIsRightCollapsed(false);
4245
4258
  }, className: `flex-1 flex items-center justify-center relative transition-colors ${activeTab === tab ? "text-white" : "text-white/20"}`, children: /* @__PURE__ */ jsx20("span", { className: "material-symbols-outlined text-[20px]", children: tab === "history" ? "history" : tab === "gallery" ? "photo_library" : tab === "inspect" ? "info" : tab === "setup" ? "settings" : tab === "sync" ? "cloud_sync" : "label" }) }, tab)) }),
4259
+ hfToken && /* @__PURE__ */ jsx20("button", { onClick: () => loadFromHF(hfToken), disabled: isHfRefreshing, className: "w-10 flex items-center justify-center text-white/20 hover:text-white/60 transition-colors disabled:opacity-30", children: /* @__PURE__ */ jsx20("span", { className: `material-symbols-outlined text-[18px]${isHfRefreshing ? " animate-spin" : ""}`, children: "sync" }) }),
4246
4260
  /* @__PURE__ */ jsx20("button", { onClick: () => setIsRightCollapsed(!isRightCollapsed), className: "w-10 flex items-center justify-center text-white/20 hover:text-white", children: /* @__PURE__ */ jsx20("span", { className: "material-symbols-outlined text-[18px]", children: isRightCollapsed ? "chevron_left" : "chevron_right" }) })
4247
4261
  ] }),
4248
4262
  !isRightCollapsed && /* @__PURE__ */ jsxs18("div", { className: "flex-1 overflow-hidden relative", children: [
@@ -4307,7 +4321,7 @@ function AvatarArchitectApp({ onGenerateImage, onGeneratePrompt, onDownload, onS
4307
4321
  }
4308
4322
 
4309
4323
  // src/index.ts
4310
- var LIB_VERSION = "1.3.8";
4324
+ var LIB_VERSION = "1.3.10";
4311
4325
  export {
4312
4326
  AvatarArchitectApp,
4313
4327
  CollapsibleCard,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rslsp1/fa-app-tools",
3
- "version": "1.3.8",
3
+ "version": "1.3.10",
4
4
  "description": "Shared tools and hooks for Fine Art flow apps",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",