sa2kit 1.6.69 → 1.6.70

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.
Files changed (39) hide show
  1. package/dist/festivalCard/core/index.d.mts +1 -1
  2. package/dist/festivalCard/core/index.d.ts +1 -1
  3. package/dist/festivalCard/index.d.mts +3 -3
  4. package/dist/festivalCard/index.d.ts +3 -3
  5. package/dist/festivalCard/index.js +161 -0
  6. package/dist/festivalCard/index.js.map +1 -1
  7. package/dist/festivalCard/index.mjs +160 -1
  8. package/dist/festivalCard/index.mjs.map +1 -1
  9. package/dist/festivalCard/miniapp/index.d.mts +3 -3
  10. package/dist/festivalCard/miniapp/index.d.ts +3 -3
  11. package/dist/festivalCard/miniapp/index.js +30 -0
  12. package/dist/festivalCard/miniapp/index.js.map +1 -1
  13. package/dist/festivalCard/miniapp/index.mjs +30 -0
  14. package/dist/festivalCard/miniapp/index.mjs.map +1 -1
  15. package/dist/festivalCard/routes/index.d.mts +44 -0
  16. package/dist/festivalCard/routes/index.d.ts +44 -0
  17. package/dist/festivalCard/routes/index.js +266 -0
  18. package/dist/festivalCard/routes/index.js.map +1 -0
  19. package/dist/festivalCard/routes/index.mjs +261 -0
  20. package/dist/festivalCard/routes/index.mjs.map +1 -0
  21. package/dist/festivalCard/server/index.d.mts +1 -1
  22. package/dist/festivalCard/server/index.d.ts +1 -1
  23. package/dist/festivalCard/web/index.d.mts +18 -4
  24. package/dist/festivalCard/web/index.d.ts +18 -4
  25. package/dist/festivalCard/web/index.js +161 -0
  26. package/dist/festivalCard/web/index.js.map +1 -1
  27. package/dist/festivalCard/web/index.mjs +160 -1
  28. package/dist/festivalCard/web/index.mjs.map +1 -1
  29. package/dist/{festivalCardService-uSg0oNuD.d.mts → festivalCardService-CgNBOjjO.d.mts} +3 -1
  30. package/dist/{festivalCardService-C0fhTezx.d.ts → festivalCardService-ClJiAP6P.d.ts} +3 -1
  31. package/dist/index.d.mts +3 -3
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.js +161 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.mjs +160 -1
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/{types-B-tjQTGi.d.mts → types-COyg0XDw.d.mts} +7 -1
  38. package/dist/{types-B-tjQTGi.d.ts → types-COyg0XDw.d.ts} +7 -1
  39. package/package.json +6 -1
package/dist/index.mjs CHANGED
@@ -7641,6 +7641,8 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
7641
7641
  }
7642
7642
  ))))) : null);
7643
7643
  };
7644
+
7645
+ // src/festivalCard/components/FestivalCardStudio.tsx
7644
7646
  var FestivalCardStudio = ({ initialConfig, fetchConfig, onSave }) => {
7645
7647
  const { config, setConfig, loading, save, saving } = useFestivalCardConfig({
7646
7648
  initialConfig: normalizeFestivalCardConfig(initialConfig),
@@ -7660,6 +7662,133 @@ var FestivalCardStudio = ({ initialConfig, fetchConfig, onSave }) => {
7660
7662
  ) : null));
7661
7663
  };
7662
7664
 
7665
+ // src/festivalCard/components/FestivalCardConfigPage.tsx
7666
+ var FestivalCardConfigPage = ({
7667
+ apiBase = "/api/festivalCard",
7668
+ cardId,
7669
+ mainPagePath = "/festivalCard"
7670
+ }) => {
7671
+ const [list, setList] = useState([]);
7672
+ const [selectedId, setSelectedId] = useState(cardId || "default-festival-card");
7673
+ const parseListResponse2 = (data) => {
7674
+ if (!data || typeof data !== "object") return [];
7675
+ const payload = data.data;
7676
+ if (!Array.isArray(payload)) return [];
7677
+ return payload.filter((item) => Boolean(item && typeof item === "object" && typeof item.id === "string")).map((item) => ({ id: item.id, name: item.name }));
7678
+ };
7679
+ const parseConfigResponse2 = (data) => {
7680
+ if (!data || typeof data !== "object") return normalizeFestivalCardConfig();
7681
+ const payload = data.data;
7682
+ if (!payload || typeof payload !== "object") return normalizeFestivalCardConfig();
7683
+ return normalizeFestivalCardConfig(payload);
7684
+ };
7685
+ const reloadList = useCallback(async () => {
7686
+ const response = await fetch(apiBase, { cache: "no-store" });
7687
+ const data = await response.json();
7688
+ setList(parseListResponse2(data));
7689
+ }, [apiBase]);
7690
+ useEffect(() => {
7691
+ void reloadList();
7692
+ }, [reloadList]);
7693
+ const fetchConfig = async () => {
7694
+ const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, { cache: "no-store" });
7695
+ const data = await response.json();
7696
+ return parseConfigResponse2(data);
7697
+ };
7698
+ const saveConfig = async (config) => {
7699
+ await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, {
7700
+ method: "PUT",
7701
+ headers: { "Content-Type": "application/json" },
7702
+ body: JSON.stringify({ config })
7703
+ });
7704
+ await reloadList();
7705
+ };
7706
+ const createNew = async () => {
7707
+ const name = window.prompt("\u8BF7\u8F93\u5165\u65B0\u5361\u7247\u540D\u79F0");
7708
+ if (!name) return;
7709
+ const id = `festival-${Date.now()}`;
7710
+ const config = normalizeFestivalCardConfig({
7711
+ id,
7712
+ name
7713
+ });
7714
+ await fetch(`${apiBase}/${encodeURIComponent(id)}`, {
7715
+ method: "PUT",
7716
+ headers: { "Content-Type": "application/json" },
7717
+ body: JSON.stringify({ config })
7718
+ });
7719
+ setSelectedId(id);
7720
+ await reloadList();
7721
+ };
7722
+ const mainLink = useMemo(() => `${mainPagePath}?cardId=${encodeURIComponent(selectedId)}`, [mainPagePath, selectedId]);
7723
+ return /* @__PURE__ */ React42__default.createElement("div", { style: { display: "grid", gap: 12 } }, /* @__PURE__ */ React42__default.createElement("div", { style: { display: "flex", gap: 10, alignItems: "center" } }, /* @__PURE__ */ React42__default.createElement("select", { value: selectedId, onChange: (event) => setSelectedId(event.target.value) }, list.map((item) => /* @__PURE__ */ React42__default.createElement("option", { key: item.id, value: item.id }, item.name || item.id))), /* @__PURE__ */ React42__default.createElement("button", { type: "button", onClick: () => void createNew() }, "\u65B0\u5EFA\u5361\u7247"), /* @__PURE__ */ React42__default.createElement("a", { href: mainLink, style: { color: "#2563eb", fontSize: 14 } }, "\u6253\u5F00\u4E3B\u9875\u9762")), /* @__PURE__ */ React42__default.createElement(FestivalCardStudio, { fetchConfig, onSave: saveConfig }));
7724
+ };
7725
+ var isSummary = (value) => {
7726
+ if (!value || typeof value !== "object") return false;
7727
+ return typeof value.id === "string";
7728
+ };
7729
+ var parseListResponse = (data) => {
7730
+ if (!data || typeof data !== "object") return [];
7731
+ const payload = data.data;
7732
+ if (!Array.isArray(payload)) return [];
7733
+ return payload.filter(isSummary).map((item) => ({ id: item.id, name: item.name }));
7734
+ };
7735
+ var parseConfigResponse = (data) => {
7736
+ if (!data || typeof data !== "object") return null;
7737
+ const payload = data.data;
7738
+ if (!payload || typeof payload !== "object") return null;
7739
+ if (!Array.isArray(payload.pages)) return null;
7740
+ return payload;
7741
+ };
7742
+ var FestivalCardManagedPage = ({
7743
+ apiBase = "/api/festivalCard",
7744
+ cardId,
7745
+ configPagePath = "/festivalCard/config"
7746
+ }) => {
7747
+ const [list, setList] = useState([]);
7748
+ const [currentCardId, setCurrentCardId] = useState(cardId || "");
7749
+ const [config, setConfig] = useState(null);
7750
+ const [loading, setLoading] = useState(true);
7751
+ useEffect(() => {
7752
+ const fetchList = async () => {
7753
+ const response = await fetch(apiBase, { cache: "no-store" });
7754
+ const data = await response.json();
7755
+ const items = parseListResponse(data);
7756
+ setList(items);
7757
+ const first = items[0];
7758
+ if (!currentCardId && first) {
7759
+ setCurrentCardId(first.id);
7760
+ }
7761
+ };
7762
+ void fetchList();
7763
+ }, [apiBase, currentCardId]);
7764
+ useEffect(() => {
7765
+ if (!currentCardId) return;
7766
+ setLoading(true);
7767
+ void fetch(`${apiBase}/${encodeURIComponent(currentCardId)}`, { cache: "no-store" }).then((res) => res.json()).then((data) => setConfig(parseConfigResponse(data))).finally(() => setLoading(false));
7768
+ }, [apiBase, currentCardId]);
7769
+ const configLink = useMemo(() => {
7770
+ if (!currentCardId) return configPagePath;
7771
+ return `${configPagePath}?cardId=${encodeURIComponent(currentCardId)}`;
7772
+ }, [configPagePath, currentCardId]);
7773
+ return /* @__PURE__ */ React42__default.createElement("div", { style: { display: "grid", gridTemplateColumns: "240px 1fr", gap: 14 } }, /* @__PURE__ */ React42__default.createElement("aside", { style: { borderRadius: 16, padding: 12, background: "#0f172a", color: "#e2e8f0" } }, /* @__PURE__ */ React42__default.createElement("div", { style: { fontSize: 14, marginBottom: 8 } }, "\u5361\u7247\u5217\u8868"), /* @__PURE__ */ React42__default.createElement("div", { style: { display: "grid", gap: 8 } }, list.map((item) => /* @__PURE__ */ React42__default.createElement(
7774
+ "button",
7775
+ {
7776
+ key: item.id,
7777
+ type: "button",
7778
+ onClick: () => setCurrentCardId(item.id),
7779
+ style: {
7780
+ borderRadius: 8,
7781
+ border: "1px solid #334155",
7782
+ padding: "8px 10px",
7783
+ textAlign: "left",
7784
+ background: currentCardId === item.id ? "#1e293b" : "#0b1220",
7785
+ color: "#e2e8f0"
7786
+ }
7787
+ },
7788
+ item.name || item.id
7789
+ ))), /* @__PURE__ */ React42__default.createElement("a", { href: configLink, style: { display: "inline-block", marginTop: 12, color: "#93c5fd", fontSize: 13 } }, "\u8FDB\u5165\u914D\u7F6E\u9875")), /* @__PURE__ */ React42__default.createElement("div", null, loading || !config ? /* @__PURE__ */ React42__default.createElement("div", null, "\u52A0\u8F7D\u4E2D...") : /* @__PURE__ */ React42__default.createElement(FestivalCardBook3D, { config })));
7790
+ };
7791
+
7663
7792
  // src/festivalCard/server/db.ts
7664
7793
  var dbAdapter = null;
7665
7794
  var getFestivalCardDb = () => dbAdapter;
@@ -7669,6 +7798,16 @@ var FestivalCardService = class {
7669
7798
  constructor(options) {
7670
7799
  this.db = options?.db || getFestivalCardDb();
7671
7800
  }
7801
+ async listConfigs() {
7802
+ if (!this.db) {
7803
+ return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
7804
+ }
7805
+ if (this.db.listConfigs) {
7806
+ const list = await this.db.listConfigs();
7807
+ return list.length > 0 ? list : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
7808
+ }
7809
+ return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
7810
+ }
7672
7811
  async getConfig(cardId = "default-festival-card") {
7673
7812
  if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;
7674
7813
  const config = await this.db.getConfig(cardId);
@@ -7680,15 +7819,35 @@ var FestivalCardService = class {
7680
7819
  await this.db.saveConfig(cardId, normalized);
7681
7820
  return normalized;
7682
7821
  }
7822
+ async deleteConfig(cardId) {
7823
+ if (!this.db?.deleteConfig) return;
7824
+ await this.db.deleteConfig(cardId);
7825
+ }
7683
7826
  };
7684
7827
  var memoryStore = /* @__PURE__ */ new Map();
7828
+ var defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card";
7829
+ if (!memoryStore.has(defaultId)) {
7830
+ memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);
7831
+ }
7685
7832
  var createInMemoryFestivalCardDb = () => ({
7833
+ listConfigs() {
7834
+ return Promise.resolve(
7835
+ Array.from(memoryStore.entries()).map(([id, config]) => ({
7836
+ id,
7837
+ name: config.name || id
7838
+ }))
7839
+ );
7840
+ },
7686
7841
  getConfig(id) {
7687
7842
  return Promise.resolve(memoryStore.get(id) || null);
7688
7843
  },
7689
7844
  saveConfig(id, config) {
7690
7845
  memoryStore.set(id, config);
7691
7846
  return Promise.resolve();
7847
+ },
7848
+ deleteConfig(id) {
7849
+ memoryStore.delete(id);
7850
+ return Promise.resolve();
7692
7851
  }
7693
7852
  });
7694
7853
 
@@ -8045,6 +8204,6 @@ function useElectronStorage(key, defaultValue) {
8045
8204
  return useStorage(electronStorage, key, defaultValue);
8046
8205
  }
8047
8206
 
8048
- export { About_default as About, Dialog as AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, DialogDescription as AlertDialogDescription, DialogFooter as AlertDialogFooter, DialogHeader as AlertDialogHeader, DialogOverlay as AlertDialogOverlay, DialogPortal as AlertDialogPortal, DialogTitle as AlertDialogTitle, DialogTrigger as AlertDialogTrigger, AutoOpenModal, Avatar, AvatarFallback, AvatarImage, BackButton, BackgroundRemover, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryFilter, CollisionBalls, CompletionFilterComponent, ConfirmModal, ConsoleLoggerAdapter, Contact_default as Contact, DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT, DEFAULT_FESTIVAL_CARD_CONFIG, DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES, DEFAULT_OPENAI_BASE_URL, DEFAULT_OPENAI_MODEL, DanmakuPanel, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DraggableExperimentGrid, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EnhancedAvatar, ExperimentCard, ExperimentGrid, ExperimentItemGrid, FIREWORK_KIND_LABELS, FestivalCardBook3D, FestivalCardConfigEditor, FestivalCardPageRenderer, FestivalCardService, FestivalCardStudio, FilterButtonGroup, FireworksCanvas, FireworksControlPanel, FloatingMenu_default as FloatingMenu, FloatingMenuExample_default as FloatingMenuExample, GenericOrderManager, Grid, Home_default as Home, ImageMappingPanel, InMemorySkillRegistry, Input, Label, LocalImageMappingPanel, LogLevel, Logger, MIKU_PALETTE, MikuFireworks3D, Modal, NORMAL_PALETTE, Navigation_default as Navigation, NavigationItem_default as NavigationItem, NavigationToggle_default as NavigationToggle, OCRScanner, PageHeader, PermissionGuard, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProfileButton, ProfileModal, Progress, ProjectCarousel, ScreenReceiverPanel, ScrollArea, ScrollBar, SearchBox, SearchResultHint, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SentimentAnalyzer, Separator, Dialog as Sheet, DialogClose as SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, DialogOverlay as SheetOverlay, DialogPortal as SheetPortal, SheetTitle, DialogTrigger as SheetTrigger, SmartAssistant, SortControl, SortModeToggle, SortableExperimentItem, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Timeline, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserInfoBar, WebSocketTransport, applyPromptTemplate, arrayUtils, badgeVariants, buttonVariants, cn, createAiClient, createChatSession, createInMemoryFestivalCardDb, createLogger, createOpenAICompatibleProvider, createSkillRegistry, debugUtils, errorUtils, fileUtils, filterExperiments, formatTime, getAllTags, getCategoryColor, getCategoryDisplayName, getCompletionFilterDisplayName, getCompletionStatusColor, getCompletionStatusText, getExperimentCounts, japaneseUtils, logger, normalizeFestivalCardConfig, normalizePromptVariables, resizeFestivalCardPages, resolveScreenReceiverSignalUrl, skillToToolDefinition, sortExperiments, stringUtils, useAiChat, useAsyncStorage, useBackgroundRemoval, useDanmakuController, useElectronStorage, useFestivalCardConfig, useFireworksEngine, useFireworksRealtime, useLocalStorage, useOCR, useScreenReceiver, useSentimentAnalysis, useStorage, useTaroStorage, useTextGeneration, validateExperiment, validators };
8207
+ export { About_default as About, Dialog as AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, DialogDescription as AlertDialogDescription, DialogFooter as AlertDialogFooter, DialogHeader as AlertDialogHeader, DialogOverlay as AlertDialogOverlay, DialogPortal as AlertDialogPortal, DialogTitle as AlertDialogTitle, DialogTrigger as AlertDialogTrigger, AutoOpenModal, Avatar, AvatarFallback, AvatarImage, BackButton, BackgroundRemover, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryFilter, CollisionBalls, CompletionFilterComponent, ConfirmModal, ConsoleLoggerAdapter, Contact_default as Contact, DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT, DEFAULT_FESTIVAL_CARD_CONFIG, DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES, DEFAULT_OPENAI_BASE_URL, DEFAULT_OPENAI_MODEL, DanmakuPanel, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DraggableExperimentGrid, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EnhancedAvatar, ExperimentCard, ExperimentGrid, ExperimentItemGrid, FIREWORK_KIND_LABELS, FestivalCardBook3D, FestivalCardConfigEditor, FestivalCardConfigPage, FestivalCardManagedPage, FestivalCardPageRenderer, FestivalCardService, FestivalCardStudio, FilterButtonGroup, FireworksCanvas, FireworksControlPanel, FloatingMenu_default as FloatingMenu, FloatingMenuExample_default as FloatingMenuExample, GenericOrderManager, Grid, Home_default as Home, ImageMappingPanel, InMemorySkillRegistry, Input, Label, LocalImageMappingPanel, LogLevel, Logger, MIKU_PALETTE, MikuFireworks3D, Modal, NORMAL_PALETTE, Navigation_default as Navigation, NavigationItem_default as NavigationItem, NavigationToggle_default as NavigationToggle, OCRScanner, PageHeader, PermissionGuard, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProfileButton, ProfileModal, Progress, ProjectCarousel, ScreenReceiverPanel, ScrollArea, ScrollBar, SearchBox, SearchResultHint, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SentimentAnalyzer, Separator, Dialog as Sheet, DialogClose as SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, DialogOverlay as SheetOverlay, DialogPortal as SheetPortal, SheetTitle, DialogTrigger as SheetTrigger, SmartAssistant, SortControl, SortModeToggle, SortableExperimentItem, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Timeline, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserInfoBar, WebSocketTransport, applyPromptTemplate, arrayUtils, badgeVariants, buttonVariants, cn, createAiClient, createChatSession, createInMemoryFestivalCardDb, createLogger, createOpenAICompatibleProvider, createSkillRegistry, debugUtils, errorUtils, fileUtils, filterExperiments, formatTime, getAllTags, getCategoryColor, getCategoryDisplayName, getCompletionFilterDisplayName, getCompletionStatusColor, getCompletionStatusText, getExperimentCounts, japaneseUtils, logger, normalizeFestivalCardConfig, normalizePromptVariables, resizeFestivalCardPages, resolveScreenReceiverSignalUrl, skillToToolDefinition, sortExperiments, stringUtils, useAiChat, useAsyncStorage, useBackgroundRemoval, useDanmakuController, useElectronStorage, useFestivalCardConfig, useFireworksEngine, useFireworksRealtime, useLocalStorage, useOCR, useScreenReceiver, useSentimentAnalysis, useStorage, useTaroStorage, useTextGeneration, validateExperiment, validators };
8049
8208
  //# sourceMappingURL=index.mjs.map
8050
8209
  //# sourceMappingURL=index.mjs.map