@invect/ui 0.0.7 → 0.0.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.
Files changed (39) hide show
  1. package/dist/{Invect-BndIqK9R.js → Invect-CA2xJoX7.js} +29117 -28964
  2. package/dist/api/client.d.ts +5 -0
  3. package/dist/api/node-data.api.d.ts +1 -1
  4. package/dist/assets/provider-icons/index.d.ts +3 -4
  5. package/dist/demo.js +28 -28
  6. package/dist/index.css +1 -1
  7. package/dist/index.js +194 -194
  8. package/dist/stores/uiStore.d.ts +4 -0
  9. package/dist/svg-raw.d.ts +4 -0
  10. package/package.json +3 -3
  11. package/src/api/client.ts +11 -5
  12. package/src/api/use-flow-run-stream.ts +1 -5
  13. package/src/assets/provider-icons/cloudwatch.svg +14 -0
  14. package/src/assets/provider-icons/dropbox.svg +10 -0
  15. package/src/assets/provider-icons/facebook.svg +8 -0
  16. package/src/assets/provider-icons/google_analytics.svg +7 -0
  17. package/src/assets/provider-icons/index.ts +46 -43
  18. package/src/assets/provider-icons/jira.svg +18 -0
  19. package/src/assets/provider-icons/microsoft_teams.svg +27 -0
  20. package/src/assets/provider-icons/salesforce.svg +16 -0
  21. package/src/assets/provider-icons/shopify.svg +8 -0
  22. package/src/assets/provider-icons/trello.svg +16 -0
  23. package/src/assets/provider-icons/twitter.svg +7 -0
  24. package/src/components/chat/ChatMessageList.tsx +3 -27
  25. package/src/components/chat/ChatPanel.tsx +3 -3
  26. package/src/components/chat/InlineCredentialSetup.tsx +32 -19
  27. package/src/components/chat/use-chat.ts +1 -0
  28. package/src/components/credentials/CreateCredentialModal.tsx +89 -2
  29. package/src/components/credentials/EditCredentialModal.tsx +82 -2
  30. package/src/components/flow-editor/FlowHeader.tsx +1 -22
  31. package/src/components/flow-editor/FlowLayout.tsx +6 -27
  32. package/src/components/flow-editor/NodeSidebar.tsx +5 -12
  33. package/src/components/flow-editor/RunControls.tsx +12 -12
  34. package/src/components/flow-editor/node-config-panel/ConfigFieldWithTemplate.tsx +1 -2
  35. package/src/components/flow-editor/node-config-panel/panels/ConfigurationPanel.tsx +1 -12
  36. package/src/components/graph/LayoutSelector.tsx +2 -2
  37. package/src/components/shared/ProviderIcon.tsx +35 -1
  38. package/src/stores/uiStore.ts +23 -0
  39. package/src/svg-raw.d.ts +4 -0
@@ -18,7 +18,9 @@ const PROVIDERS_WITH_SVG_ICON = new Set(
18
18
  * Providers whose dark-fill logo is invisible on dark backgrounds.
19
19
  * For these we ship a `{id}_light` variant and swap via CSS.
20
20
  */
21
- const PROVIDERS_WITH_LIGHT_VARIANT = new Set(['github', 'anthropic']);
21
+ const PROVIDERS_WITH_LIGHT_VARIANT = new Set(['github', 'anthropic', 'core']);
22
+
23
+ const PROVIDERS_WITH_TALL_ASPECT = new Set(['core']);
22
24
 
23
25
  /**
24
26
  * Resolve a Lucide icon component from its name string.
@@ -56,6 +58,8 @@ export const ProviderIcon = memo(function ProviderIcon({
56
58
  svgIcon,
57
59
  className,
58
60
  }: ProviderIconProps) {
61
+ const isTallLogo = providerId ? PROVIDERS_WITH_TALL_ASPECT.has(providerId) : false;
62
+
59
63
  // 1. Bundled inline SVG for known providers
60
64
  if (providerId && PROVIDERS_WITH_SVG_ICON.has(providerId)) {
61
65
  const svgMarkup = PROVIDER_SVG_ICONS[providerId];
@@ -63,6 +67,24 @@ export const ProviderIcon = memo(function ProviderIcon({
63
67
  // Providers with a dark logo that needs a light variant for dark mode
64
68
  if (PROVIDERS_WITH_LIGHT_VARIANT.has(providerId)) {
65
69
  const lightSvgMarkup = PROVIDER_SVG_ICONS[`${providerId}_light`];
70
+
71
+ if (isTallLogo) {
72
+ return (
73
+ <span className={cn('inline-flex items-center justify-center shrink-0', className)}>
74
+ <span
75
+ className="inline-flex items-center justify-center h-full dark:hidden [&>svg]:w-auto [&>svg]:h-full"
76
+ style={{ aspectRatio: '109 / 209' }}
77
+ dangerouslySetInnerHTML={{ __html: svgMarkup }}
78
+ />
79
+ <span
80
+ className="hidden items-center justify-center h-full dark:inline-flex [&>svg]:w-auto [&>svg]:h-full"
81
+ style={{ aspectRatio: '109 / 209' }}
82
+ dangerouslySetInnerHTML={{ __html: lightSvgMarkup }}
83
+ />
84
+ </span>
85
+ );
86
+ }
87
+
66
88
  return (
67
89
  <>
68
90
  <span
@@ -83,6 +105,18 @@ export const ProviderIcon = memo(function ProviderIcon({
83
105
  );
84
106
  }
85
107
 
108
+ if (isTallLogo) {
109
+ return (
110
+ <span className={cn('inline-flex items-center justify-center shrink-0', className)}>
111
+ <span
112
+ className="inline-flex items-center justify-center h-full [&>svg]:w-auto [&>svg]:h-full"
113
+ style={{ aspectRatio: '109 / 209' }}
114
+ dangerouslySetInnerHTML={{ __html: svgMarkup }}
115
+ />
116
+ </span>
117
+ );
118
+ }
119
+
86
120
  return (
87
121
  <span
88
122
  className={cn(
@@ -28,6 +28,7 @@ interface UIState {
28
28
 
29
29
  // Node sidebar (for adding nodes)
30
30
  nodeSidebarOpen: boolean;
31
+ nodeSidebarExpandedGroups: string[];
31
32
 
32
33
  // Bottom toolbar
33
34
  toolbarCollapsed: boolean;
@@ -53,6 +54,8 @@ interface UIActions {
53
54
  // Node sidebar
54
55
  toggleNodeSidebar: () => void;
55
56
  setNodeSidebarOpen: (open: boolean) => void;
57
+ toggleNodeSidebarGroup: (groupId: string) => void;
58
+ setNodeSidebarExpandedGroups: (groups: string[]) => void;
56
59
 
57
60
  // Bottom toolbar
58
61
  toggleToolbarCollapsed: () => void;
@@ -71,6 +74,7 @@ const initialState: UIState = {
71
74
  validationPanelOpen: false,
72
75
  logsPanelOpen: false,
73
76
  nodeSidebarOpen: true,
77
+ nodeSidebarExpandedGroups: ['core'],
74
78
  toolbarCollapsed: false,
75
79
  };
76
80
 
@@ -146,6 +150,23 @@ export const useUIStore: UseBoundStore<StoreApi<UIStore>> = create<UIStore>()(
146
150
  state.nodeSidebarOpen = open;
147
151
  }),
148
152
 
153
+ toggleNodeSidebarGroup: (groupId) =>
154
+ set((state) => {
155
+ if (state.nodeSidebarExpandedGroups.includes(groupId)) {
156
+ state.nodeSidebarExpandedGroups = state.nodeSidebarExpandedGroups.filter(
157
+ (existingGroupId) => existingGroupId !== groupId,
158
+ );
159
+ return;
160
+ }
161
+
162
+ state.nodeSidebarExpandedGroups = [...state.nodeSidebarExpandedGroups, groupId];
163
+ }),
164
+
165
+ setNodeSidebarExpandedGroups: (groups) =>
166
+ set((state) => {
167
+ state.nodeSidebarExpandedGroups = groups;
168
+ }),
169
+
149
170
  // Bottom toolbar
150
171
  toggleToolbarCollapsed: () =>
151
172
  set((state) => {
@@ -162,6 +183,7 @@ export const useUIStore: UseBoundStore<StoreApi<UIStore>> = create<UIStore>()(
162
183
  sidebarCollapsed: state.sidebarCollapsed,
163
184
  activeSidebarTab: state.activeSidebarTab,
164
185
  nodeSidebarOpen: state.nodeSidebarOpen,
186
+ nodeSidebarExpandedGroups: state.nodeSidebarExpandedGroups,
165
187
  toolbarCollapsed: state.toolbarCollapsed,
166
188
  }),
167
189
  },
@@ -178,6 +200,7 @@ export const useModalData = () => useUIStore((s) => s.modalData);
178
200
  export const useValidationPanelOpen = () => useUIStore((s) => s.validationPanelOpen);
179
201
  export const useLogsPanelOpen = () => useUIStore((s) => s.logsPanelOpen);
180
202
  export const useNodeSidebarOpen = () => useUIStore((s) => s.nodeSidebarOpen);
203
+ export const useNodeSidebarExpandedGroups = () => useUIStore((s) => s.nodeSidebarExpandedGroups);
181
204
 
182
205
  // Combined selectors
183
206
  export const useModals = () =>
@@ -0,0 +1,4 @@
1
+ declare module '*.svg?raw' {
2
+ const content: string;
3
+ export default content;
4
+ }