@genfeedai/workflow-ui 0.2.3 → 0.2.4

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 (45) hide show
  1. package/dist/canvas.d.ts +22 -22
  2. package/dist/canvas.mjs +16 -16
  3. package/dist/{chunk-XPZAHIWY.mjs → chunk-2FUPL67V.mjs} +1592 -1044
  4. package/dist/{chunk-HWVTD2LC.mjs → chunk-53XDE62A.mjs} +818 -623
  5. package/dist/{chunk-PCIWWD37.mjs → chunk-7LV4UAUS.mjs} +19 -19
  6. package/dist/{chunk-7SKSRSS7.mjs → chunk-B4EAAKYF.mjs} +16 -16
  7. package/dist/{chunk-ZJD5WMR3.mjs → chunk-C6MQBJFC.mjs} +45 -13
  8. package/dist/{chunk-7H3WJJYS.mjs → chunk-ESVULCFY.mjs} +12 -6
  9. package/dist/{chunk-GWBGK3KL.mjs → chunk-FWJIAW2E.mjs} +82 -47
  10. package/dist/{chunk-R727OFBR.mjs → chunk-GPYIIWD5.mjs} +404 -350
  11. package/dist/{chunk-OQREHJXK.mjs → chunk-IYFWAJBB.mjs} +208 -203
  12. package/dist/{chunk-N5NJZTK4.mjs → chunk-MGLAKMDP.mjs} +23 -21
  13. package/dist/{chunk-LT3ZJJL6.mjs → chunk-OJWVEEMM.mjs} +497 -399
  14. package/dist/{chunk-ZD2BADZO.mjs → chunk-ORVDYXDP.mjs} +221 -175
  15. package/dist/{chunk-CV4M7CNU.mjs → chunk-QQVHGJ2G.mjs} +149 -142
  16. package/dist/{chunk-6PSJTBNV.mjs → chunk-U4QPE4CY.mjs} +387 -347
  17. package/dist/{chunk-EFXQT23N.mjs → chunk-VVQ4CH77.mjs} +5 -5
  18. package/dist/{chunk-VRN3UWE5.mjs → chunk-XRC3O5GK.mjs} +73 -73
  19. package/dist/{chunk-FT33LFII.mjs → chunk-YUIK4AHM.mjs} +1 -1
  20. package/dist/{chunk-FMJPFB6W.mjs → chunk-ZSITTZ4S.mjs} +630 -569
  21. package/dist/hooks.d.ts +37 -37
  22. package/dist/hooks.mjs +10 -10
  23. package/dist/index.d.ts +26 -11
  24. package/dist/index.mjs +99 -19
  25. package/dist/lib.d.ts +203 -203
  26. package/dist/lib.mjs +228 -198
  27. package/dist/nodes.d.ts +2 -2
  28. package/dist/nodes.mjs +12 -12
  29. package/dist/panels.d.ts +2 -3
  30. package/dist/panels.mjs +3 -3
  31. package/dist/provider.d.ts +2 -2
  32. package/dist/provider.mjs +2 -2
  33. package/dist/stores.d.ts +5 -5
  34. package/dist/stores.mjs +5 -5
  35. package/dist/toolbar.d.ts +42 -24
  36. package/dist/toolbar.mjs +4 -4
  37. package/dist/ui.d.ts +2 -2
  38. package/dist/ui.mjs +2 -2
  39. package/dist/{useCommentNavigation-BakbiiIc.d.ts → useRequiredInputs-ByoIS-fT.d.ts} +160 -160
  40. package/dist/{promptLibraryStore-Dl3Q3cP6.d.ts → workflowStore-Bsz0nd5c.d.ts} +368 -368
  41. package/dist/workflowStore-N2F7WIG3.mjs +2 -0
  42. package/package.json +77 -75
  43. package/src/styles/workflow-ui.css +56 -19
  44. package/dist/workflowStore-UAAKOOIK.mjs +0 -2
  45. package/dist/{types-IEKYuYhu.d.ts → types-CRXJnajq.d.ts} +1 -1
@@ -78,8 +78,8 @@ function getImageDimensions(src) {
78
78
  return new Promise((resolve) => {
79
79
  const img = new window.Image();
80
80
  img.crossOrigin = "anonymous";
81
- img.onload = () => resolve({ width: img.width, height: img.height });
82
- img.onerror = () => resolve({ width: 0, height: 0 });
81
+ img.onload = () => resolve({ height: img.height, width: img.width });
82
+ img.onerror = () => resolve({ height: 0, width: 0 });
83
83
  img.src = src;
84
84
  });
85
85
  }
@@ -88,10 +88,10 @@ function getVideoMetadata(src) {
88
88
  const video = document.createElement("video");
89
89
  video.crossOrigin = "anonymous";
90
90
  video.onloadedmetadata = () => resolve({
91
- duration: video.duration,
92
- dimensions: { width: video.videoWidth, height: video.videoHeight }
91
+ dimensions: { height: video.videoHeight, width: video.videoWidth },
92
+ duration: video.duration
93
93
  });
94
- video.onerror = () => resolve({ duration: 0, dimensions: { width: 0, height: 0 } });
94
+ video.onerror = () => resolve({ dimensions: { height: 0, width: 0 }, duration: 0 });
95
95
  video.src = src;
96
96
  });
97
97
  }
@@ -5,87 +5,22 @@ function configurePromptLibrary(api) {
5
5
  _promptApi = api;
6
6
  }
7
7
  var usePromptLibraryStore = create((set, get) => ({
8
- // Initial state
9
- items: [],
10
- featuredItems: [],
11
- selectedItem: null,
12
- isLoading: false,
13
- error: null,
14
- searchQuery: "",
15
8
  categoryFilter: null,
16
- isPickerOpen: false,
17
- isCreateModalOpen: false,
18
- editingItem: null,
19
- // UI Actions
20
- setSearchQuery: (query) => set({ searchQuery: query }),
21
- setCategoryFilter: (category) => set({ categoryFilter: category }),
22
- setSelectedItem: (item) => set({ selectedItem: item }),
23
- openPicker: () => set({ isPickerOpen: true }),
24
- closePicker: () => set({ isPickerOpen: false }),
25
- openCreateModal: (editItem) => set({
26
- isCreateModalOpen: true,
27
- editingItem: editItem ?? null
28
- }),
29
9
  closeCreateModal: () => set({
30
- isCreateModalOpen: false,
31
- editingItem: null
10
+ editingItem: null,
11
+ isCreateModalOpen: false
32
12
  }),
33
- // API Actions all no-op if _promptApi is not configured
34
- loadItems: async (query, signal) => {
35
- if (!_promptApi) return;
36
- set({ isLoading: true, error: null });
37
- try {
38
- const { searchQuery, categoryFilter } = get();
39
- const finalQuery = {
40
- ...query,
41
- search: query?.search ?? (searchQuery || void 0),
42
- category: query?.category ?? categoryFilter ?? void 0
43
- };
44
- const items = await _promptApi.getAll(finalQuery, signal);
45
- set({ items, isLoading: false });
46
- } catch (error) {
47
- if (error.name !== "AbortError") {
48
- set({ error: error.message, isLoading: false });
49
- }
50
- }
51
- },
52
- loadFeatured: async (signal) => {
53
- if (!_promptApi) return;
54
- try {
55
- const featuredItems = await _promptApi.getFeatured(10, signal);
56
- set({ featuredItems });
57
- } catch (error) {
58
- if (error.name !== "AbortError") ;
59
- }
60
- },
13
+ closePicker: () => set({ isPickerOpen: false }),
61
14
  createItem: async (data, signal) => {
62
15
  if (!_promptApi) throw new Error("Prompt library not configured");
63
- set({ isLoading: true, error: null });
16
+ set({ error: null, isLoading: true });
64
17
  try {
65
18
  const item = await _promptApi.create(data, signal);
66
19
  set((state) => ({
67
- items: [item, ...state.items],
68
- isLoading: false,
20
+ editingItem: null,
69
21
  isCreateModalOpen: false,
70
- editingItem: null
71
- }));
72
- return item;
73
- } catch (error) {
74
- set({ error: error.message, isLoading: false });
75
- throw error;
76
- }
77
- },
78
- updateItem: async (id, data, signal) => {
79
- if (!_promptApi) throw new Error("Prompt library not configured");
80
- set({ isLoading: true, error: null });
81
- try {
82
- const item = await _promptApi.update(id, data, signal);
83
- set((state) => ({
84
- items: state.items.map((i) => i._id === id ? item : i),
85
- selectedItem: state.selectedItem?._id === id ? item : state.selectedItem,
86
22
  isLoading: false,
87
- isCreateModalOpen: false,
88
- editingItem: null
23
+ items: [item, ...state.items]
89
24
  }));
90
25
  return item;
91
26
  } catch (error) {
@@ -119,19 +54,84 @@ var usePromptLibraryStore = create((set, get) => ({
119
54
  throw error;
120
55
  }
121
56
  },
57
+ editingItem: null,
58
+ error: null,
59
+ featuredItems: [],
60
+ isCreateModalOpen: false,
61
+ isLoading: false,
62
+ isPickerOpen: false,
63
+ // Initial state
64
+ items: [],
65
+ loadFeatured: async (signal) => {
66
+ if (!_promptApi) return;
67
+ try {
68
+ const featuredItems = await _promptApi.getFeatured(10, signal);
69
+ set({ featuredItems });
70
+ } catch (error) {
71
+ if (error.name !== "AbortError") ;
72
+ }
73
+ },
74
+ // API Actions — all no-op if _promptApi is not configured
75
+ loadItems: async (query, signal) => {
76
+ if (!_promptApi) return;
77
+ set({ error: null, isLoading: true });
78
+ try {
79
+ const { searchQuery, categoryFilter } = get();
80
+ const finalQuery = {
81
+ ...query,
82
+ category: query?.category ?? categoryFilter ?? void 0,
83
+ search: query?.search ?? (searchQuery || void 0)
84
+ };
85
+ const items = await _promptApi.getAll(finalQuery, signal);
86
+ set({ isLoading: false, items });
87
+ } catch (error) {
88
+ if (error.name !== "AbortError") {
89
+ set({ error: error.message, isLoading: false });
90
+ }
91
+ }
92
+ },
93
+ openCreateModal: (editItem) => set({
94
+ editingItem: editItem ?? null,
95
+ isCreateModalOpen: true
96
+ }),
97
+ openPicker: () => set({ isPickerOpen: true }),
122
98
  recordItemUsage: async (id, signal) => {
123
99
  if (!_promptApi) throw new Error("Prompt library not configured");
124
100
  try {
125
101
  const item = await _promptApi.use(id, signal);
126
102
  set((state) => ({
127
- items: state.items.map((i) => i._id === id ? item : i),
128
- isPickerOpen: false
103
+ isPickerOpen: false,
104
+ items: state.items.map((i) => i._id === id ? item : i)
129
105
  }));
130
106
  return item;
131
107
  } catch (error) {
132
108
  set({ error: error.message });
133
109
  throw error;
134
110
  }
111
+ },
112
+ searchQuery: "",
113
+ selectedItem: null,
114
+ setCategoryFilter: (category) => set({ categoryFilter: category }),
115
+ // UI Actions
116
+ setSearchQuery: (query) => set({ searchQuery: query }),
117
+ setSelectedItem: (item) => set({ selectedItem: item }),
118
+ updateItem: async (id, data, signal) => {
119
+ if (!_promptApi) throw new Error("Prompt library not configured");
120
+ set({ error: null, isLoading: true });
121
+ try {
122
+ const item = await _promptApi.update(id, data, signal);
123
+ set((state) => ({
124
+ editingItem: null,
125
+ isCreateModalOpen: false,
126
+ isLoading: false,
127
+ items: state.items.map((i) => i._id === id ? item : i),
128
+ selectedItem: state.selectedItem?._id === id ? item : state.selectedItem
129
+ }));
130
+ return item;
131
+ } catch (error) {
132
+ set({ error: error.message, isLoading: false });
133
+ throw error;
134
+ }
135
135
  }
136
136
  }));
137
137
 
@@ -1,4 +1,4 @@
1
- import { configurePromptLibrary } from './chunk-VRN3UWE5.mjs';
1
+ import { configurePromptLibrary } from './chunk-XRC3O5GK.mjs';
2
2
  import { createContext, useEffect, useContext } from 'react';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4