@d34dman/flowdrop 0.0.42 → 0.0.44

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 (97) hide show
  1. package/README.md +8 -8
  2. package/dist/api/enhanced-client.d.ts +3 -1
  3. package/dist/api/enhanced-client.js +35 -5
  4. package/dist/components/App.svelte +68 -34
  5. package/dist/components/ConfigForm.svelte +169 -142
  6. package/dist/components/ConfigForm.svelte.d.ts +4 -2
  7. package/dist/components/ConfigPanel.svelte +42 -15
  8. package/dist/components/LogsSidebar.svelte +20 -19
  9. package/dist/components/Navbar.svelte +150 -80
  10. package/dist/components/Navbar.svelte.d.ts +8 -0
  11. package/dist/components/NodeSidebar.svelte +330 -217
  12. package/dist/components/PipelineStatus.svelte +6 -1
  13. package/dist/components/ReadOnlyDetails.svelte +14 -14
  14. package/dist/components/SchemaForm.svelte +49 -30
  15. package/dist/components/SchemaForm.svelte.d.ts +11 -1
  16. package/dist/components/SettingsModal.svelte +279 -0
  17. package/dist/components/SettingsModal.svelte.d.ts +23 -0
  18. package/dist/components/SettingsPanel.svelte +615 -0
  19. package/dist/components/SettingsPanel.svelte.d.ts +21 -0
  20. package/dist/components/ThemeToggle.svelte +186 -0
  21. package/dist/components/ThemeToggle.svelte.d.ts +14 -0
  22. package/dist/components/WorkflowEditor.svelte +110 -36
  23. package/dist/components/form/FormArray.svelte +81 -81
  24. package/dist/components/form/FormAutocomplete.svelte +1014 -0
  25. package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
  26. package/dist/components/form/FormCheckboxGroup.svelte +16 -16
  27. package/dist/components/form/FormCodeEditor.svelte +26 -26
  28. package/dist/components/form/FormField.svelte +52 -21
  29. package/dist/components/form/FormFieldLight.svelte +19 -19
  30. package/dist/components/form/FormFieldWrapper.svelte +4 -4
  31. package/dist/components/form/FormMarkdownEditor.svelte +124 -57
  32. package/dist/components/form/FormNumberField.svelte +13 -13
  33. package/dist/components/form/FormRangeField.svelte +16 -16
  34. package/dist/components/form/FormSelect.svelte +15 -15
  35. package/dist/components/form/FormTemplateEditor.svelte +34 -34
  36. package/dist/components/form/FormTextField.svelte +13 -13
  37. package/dist/components/form/FormTextarea.svelte +13 -13
  38. package/dist/components/form/FormToggle.svelte +8 -8
  39. package/dist/components/form/index.d.ts +1 -0
  40. package/dist/components/form/index.js +1 -0
  41. package/dist/components/form/types.d.ts +133 -8
  42. package/dist/components/form/types.js +50 -1
  43. package/dist/components/interrupt/ChoicePrompt.svelte +45 -38
  44. package/dist/components/interrupt/ConfirmationPrompt.svelte +35 -35
  45. package/dist/components/interrupt/FormPrompt.svelte +27 -20
  46. package/dist/components/interrupt/InterruptBubble.svelte +50 -50
  47. package/dist/components/interrupt/TextInputPrompt.svelte +39 -32
  48. package/dist/components/layouts/MainLayout.svelte +233 -34
  49. package/dist/components/layouts/MainLayout.svelte.d.ts +12 -0
  50. package/dist/components/nodes/GatewayNode.svelte +102 -73
  51. package/dist/components/nodes/IdeaNode.svelte +53 -52
  52. package/dist/components/nodes/NotesNode.svelte +120 -88
  53. package/dist/components/nodes/SimpleNode.svelte +67 -47
  54. package/dist/components/nodes/SquareNode.svelte +86 -49
  55. package/dist/components/nodes/TerminalNode.svelte +122 -72
  56. package/dist/components/nodes/ToolNode.svelte +96 -65
  57. package/dist/components/nodes/WorkflowNode.svelte +91 -67
  58. package/dist/components/playground/ChatPanel.svelte +76 -76
  59. package/dist/components/playground/ExecutionLogs.svelte +71 -69
  60. package/dist/components/playground/InputCollector.svelte +59 -59
  61. package/dist/components/playground/MessageBubble.svelte +111 -112
  62. package/dist/components/playground/Playground.svelte +184 -138
  63. package/dist/components/playground/PlaygroundModal.svelte +18 -19
  64. package/dist/components/playground/SessionManager.svelte +68 -67
  65. package/dist/config/defaultPortConfig.js +22 -22
  66. package/dist/core/index.d.ts +2 -0
  67. package/dist/core/index.js +1 -0
  68. package/dist/form/fieldRegistry.d.ts +17 -1
  69. package/dist/form/fieldRegistry.js +18 -2
  70. package/dist/form/index.d.ts +20 -2
  71. package/dist/form/index.js +19 -1
  72. package/dist/helpers/workflowEditorHelper.js +23 -11
  73. package/dist/index.d.ts +5 -0
  74. package/dist/index.js +13 -0
  75. package/dist/services/autoSaveService.d.ts +112 -0
  76. package/dist/services/autoSaveService.js +223 -0
  77. package/dist/services/settingsService.d.ts +92 -0
  78. package/dist/services/settingsService.js +202 -0
  79. package/dist/services/toastService.d.ts +9 -0
  80. package/dist/services/toastService.js +30 -1
  81. package/dist/stores/settingsStore.d.ts +128 -0
  82. package/dist/stores/settingsStore.js +488 -0
  83. package/dist/stores/themeStore.d.ts +68 -0
  84. package/dist/stores/themeStore.js +215 -0
  85. package/dist/styles/base.css +298 -621
  86. package/dist/styles/toast.css +33 -0
  87. package/dist/styles/tokens.css +366 -0
  88. package/dist/types/index.d.ts +78 -0
  89. package/dist/types/index.js +2 -0
  90. package/dist/types/interrupt.d.ts +2 -0
  91. package/dist/types/interrupt.js +8 -2
  92. package/dist/types/playground.d.ts +12 -0
  93. package/dist/types/settings.d.ts +185 -0
  94. package/dist/types/settings.js +101 -0
  95. package/dist/utils/colors.d.ts +100 -7
  96. package/dist/utils/colors.js +228 -67
  97. package/package.json +3 -3
@@ -34,42 +34,27 @@
34
34
  const noteTypes = {
35
35
  info: {
36
36
  name: 'Info',
37
- bgColor: 'bg-blue-50',
38
- borderColor: 'border-blue-200',
39
- textColor: 'text-blue-800',
40
- iconColor: 'text-blue-500',
37
+ typeClass: 'flowdrop-notes-node--info',
41
38
  icon: 'mdi:information'
42
39
  },
43
40
  warning: {
44
41
  name: 'Warning',
45
- bgColor: 'bg-yellow-50',
46
- borderColor: 'border-yellow-200',
47
- textColor: 'text-yellow-800',
48
- iconColor: 'text-yellow-500',
42
+ typeClass: 'flowdrop-notes-node--warning',
49
43
  icon: 'mdi:alert'
50
44
  },
51
45
  success: {
52
46
  name: 'Success',
53
- bgColor: 'bg-green-50',
54
- borderColor: 'border-green-200',
55
- textColor: 'text-green-800',
56
- iconColor: 'text-green-500',
47
+ typeClass: 'flowdrop-notes-node--success',
57
48
  icon: 'mdi:check-circle'
58
49
  },
59
50
  error: {
60
51
  name: 'Error',
61
- bgColor: 'bg-red-50',
62
- borderColor: 'border-red-200',
63
- textColor: 'text-red-800',
64
- iconColor: 'text-red-500',
52
+ typeClass: 'flowdrop-notes-node--error',
65
53
  icon: 'mdi:close-circle'
66
54
  },
67
55
  note: {
68
56
  name: 'Note',
69
- bgColor: 'bg-gray-50',
70
- borderColor: 'border-gray-200',
71
- textColor: 'text-gray-800',
72
- iconColor: 'text-gray-500',
57
+ typeClass: 'flowdrop-notes-node--note',
73
58
  icon: 'mdi:note-text'
74
59
  }
75
60
  };
@@ -111,21 +96,23 @@
111
96
  </script>
112
97
 
113
98
  <div
114
- class="flowdrop-notes-node {currentType.bgColor}"
99
+ class="flowdrop-notes-node {currentType.typeClass}"
115
100
  class:flowdrop-notes-node--selected={props.selected}
116
101
  class:flowdrop-notes-node--processing={props.isProcessing}
117
- class:flowdrop-notes-node--error={props.isError}
102
+ class:flowdrop-notes-node--has-error={props.isError}
118
103
  ondblclick={handleDoubleClick}
119
104
  onkeydown={handleKeydown}
120
105
  role="button"
121
106
  tabindex="0"
122
107
  >
123
108
  <!-- Display Mode -->
124
- <div class="flowdrop-notes-node__content {currentType.borderColor} {currentType.textColor}">
109
+ <div class="flowdrop-notes-node__content">
125
110
  <!-- Header with icon and type -->
126
111
  <div class="flowdrop-notes-node__header">
127
112
  <div class="flowdrop-notes-node__header-left">
128
- <Icon icon={currentType.icon} class="flowdrop-notes-node__icon {currentType.iconColor}" />
113
+ <div class="flowdrop-notes-node__icon-wrapper">
114
+ <Icon icon={currentType.icon} class="flowdrop-notes-node__icon" />
115
+ </div>
129
116
  <span class="flowdrop-notes-node__type">{currentType.name}</span>
130
117
  </div>
131
118
  </div>
@@ -145,7 +132,7 @@
145
132
 
146
133
  <!-- Error indicator -->
147
134
  {#if props.isError}
148
- <div class="flowdrop-notes-node__error">
135
+ <div class="flowdrop-notes-node__error-indicator">
149
136
  <Icon icon="mdi:alert-circle" class="flowdrop-notes-node__error-icon" />
150
137
  <span>Error occurred</span>
151
138
  </div>
@@ -164,67 +151,87 @@
164
151
 
165
152
  <style>
166
153
  .flowdrop-notes-node {
167
- min-width: var(--notes-node-min-width);
168
- max-width: var(--notes-node-max-width);
169
- width: var(--notes-node-width);
170
- border-radius: var(--notes-node-border-radius);
171
- border: 1px solid;
172
- background: var(--notes-node-background);
173
- backdrop-filter: var(--notes-node-backdrop-filter);
174
- box-shadow: var(--notes-node-box-shadow);
175
- transition: var(--notes-node-transition);
154
+ min-width: var(--fd-notes-node-min-width);
155
+ max-width: var(--fd-notes-node-max-width);
156
+ width: var(--fd-notes-node-width);
157
+ border-radius: var(--fd-radius-xl);
158
+ border: 1.5px solid var(--fd-node-border);
159
+ background: var(--fd-card);
160
+ backdrop-filter: var(--fd-notes-node-backdrop-filter);
161
+ box-shadow: var(--fd-shadow-md);
162
+ color: var(--fd-foreground);
163
+ transition: all var(--fd-transition-fast);
176
164
  overflow: hidden;
177
165
  z-index: 5;
178
166
  }
179
167
 
180
- /* Background color overrides for different note types */
181
- .flowdrop-notes-node.bg-blue-50 {
182
- background-color: var(--notes-node-info-bg);
183
- border-color: var(--notes-node-info-border);
168
+ /* Note type: Info (blue) - subtle background tint, neutral border */
169
+ .flowdrop-notes-node--info {
170
+ background-color: var(--fd-info-muted);
171
+ --_notes-icon: var(--fd-primary);
184
172
  }
185
173
 
186
- .flowdrop-notes-node.bg-yellow-50 {
187
- background-color: var(--notes-node-warning-bg);
188
- border-color: var(--notes-node-warning-border);
174
+ /* Note type: Warning (yellow/amber) - subtle background tint */
175
+ .flowdrop-notes-node--warning {
176
+ background-color: var(--fd-warning-muted);
177
+ --_notes-icon: var(--fd-warning);
189
178
  }
190
179
 
191
- .flowdrop-notes-node.bg-green-50 {
192
- background-color: var(--notes-node-success-bg);
193
- border-color: var(--notes-node-success-border);
180
+ /* Note type: Success (green) - subtle background tint */
181
+ .flowdrop-notes-node--success {
182
+ background-color: var(--fd-success-muted);
183
+ --_notes-icon: var(--fd-success);
194
184
  }
195
185
 
196
- .flowdrop-notes-node.bg-red-50 {
197
- background-color: var(--notes-node-error-bg);
198
- border-color: var(--notes-node-error-border);
186
+ /* Note type: Error (red) - subtle background tint */
187
+ .flowdrop-notes-node--error {
188
+ background-color: var(--fd-error-muted);
189
+ --_notes-icon: var(--fd-error);
199
190
  }
200
191
 
201
- .flowdrop-notes-node.bg-gray-50 {
202
- background-color: var(--notes-node-note-bg);
203
- border-color: var(--notes-node-note-border);
192
+ /* Note type: Note (gray/neutral) - subtle background tint */
193
+ .flowdrop-notes-node--note {
194
+ background-color: var(--fd-muted);
195
+ --_notes-icon: var(--fd-muted-foreground);
204
196
  }
205
197
 
206
198
  .flowdrop-notes-node:hover {
207
- box-shadow: var(--notes-node-hover-box-shadow);
208
- transform: translateY(-1px);
199
+ box-shadow: var(--fd-shadow-lg);
200
+ border-color: var(--fd-node-border-hover);
209
201
  }
210
202
 
203
+ /* Selected state - matches other node components */
211
204
  .flowdrop-notes-node--selected {
212
- box-shadow: var(--notes-node-selected-box-shadow);
205
+ box-shadow:
206
+ 0 0 0 2px var(--fd-primary-muted),
207
+ var(--fd-shadow-lg);
208
+ border-color: var(--fd-primary);
209
+ }
210
+
211
+ .flowdrop-notes-node--selected:hover {
212
+ box-shadow:
213
+ 0 0 0 2px var(--fd-primary-muted),
214
+ var(--fd-shadow-lg);
215
+ border-color: var(--fd-primary);
216
+ }
217
+
218
+ .flowdrop-notes-node:focus-visible {
219
+ outline: 2px solid var(--fd-ring);
220
+ outline-offset: 2px;
213
221
  }
214
222
 
215
223
  .flowdrop-notes-node--processing {
216
224
  opacity: 0.7;
217
225
  }
218
226
 
219
- .flowdrop-notes-node--error {
220
- border-color: #ef4444 !important;
227
+ .flowdrop-notes-node--has-error {
228
+ border-color: var(--fd-error) !important;
229
+ background-color: var(--fd-error-muted) !important;
221
230
  }
222
231
 
223
232
  /* Display Mode Styles */
224
233
  .flowdrop-notes-node__content {
225
- padding: var(--notes-node-padding);
226
- border-radius: var(--notes-node-border-radius);
227
- border: 1px solid;
234
+ padding: var(--fd-space-4);
228
235
  height: 100%;
229
236
  display: flex;
230
237
  flex-direction: column;
@@ -241,52 +248,77 @@
241
248
  .flowdrop-notes-node__header-left {
242
249
  display: flex;
243
250
  align-items: center;
244
- gap: 0.5rem;
251
+ gap: var(--fd-space-3);
245
252
  }
246
253
 
247
- .flowdrop-notes-node__icon {
248
- width: 1.75rem;
249
- height: 1.75rem;
254
+ /* Squircle icon wrapper - Apple-style rounded square background */
255
+ .flowdrop-notes-node__icon-wrapper {
256
+ display: flex;
257
+ align-items: center;
258
+ justify-content: center;
259
+ width: 2.25rem;
260
+ height: 2.25rem;
261
+ border-radius: 0.5rem;
262
+ background: color-mix(in srgb, var(--_notes-icon) 15%, transparent);
250
263
  flex-shrink: 0;
264
+ transition: all var(--fd-transition-normal);
265
+ }
266
+
267
+ .flowdrop-notes-node:hover .flowdrop-notes-node__icon-wrapper {
268
+ background: color-mix(in srgb, var(--_notes-icon) 22%, transparent);
269
+ transform: scale(1.05);
270
+ }
271
+
272
+ .flowdrop-notes-node__icon-wrapper :global(.flowdrop-notes-node__icon) {
273
+ width: 1.25rem;
274
+ height: 1.25rem;
275
+ color: var(--fd-node-icon);
251
276
  }
252
277
 
253
278
  .flowdrop-notes-node__type {
254
- font-size: 0.875rem;
255
- font-weight: 600;
279
+ font-size: var(--fd-text-sm);
280
+ font-weight: 500;
281
+ color: var(--fd-foreground);
256
282
  }
257
283
 
258
284
  .flowdrop-notes-node__body {
259
- margin-bottom: 0.5rem;
285
+ margin-bottom: var(--fd-space-2);
260
286
  flex: 1;
261
287
  overflow-y: auto;
288
+ color: var(--fd-muted-foreground);
289
+ }
290
+
291
+ /* Markdown content inherits foreground color for better readability */
292
+ .flowdrop-notes-node__body :global(.flowdrop-notes-node__markdown) {
293
+ color: var(--fd-foreground);
262
294
  }
263
295
 
264
296
  .flowdrop-notes-node__processing {
265
297
  display: flex;
266
298
  align-items: center;
267
- gap: 0.5rem;
268
- font-size: 0.75rem;
269
- opacity: 0.7;
299
+ gap: var(--fd-space-2);
300
+ font-size: var(--fd-text-xs);
301
+ color: var(--fd-muted-foreground);
270
302
  }
271
303
 
272
304
  .flowdrop-notes-node__spinner {
273
305
  width: 0.75rem;
274
306
  height: 0.75rem;
275
- border: 1px solid currentColor;
276
- border-top-color: transparent;
307
+ border: 1px solid color-mix(in srgb, var(--fd-foreground) 30%, transparent);
308
+ border-top-color: var(--fd-foreground);
277
309
  border-radius: 50%;
278
310
  animation: spin 1s linear infinite;
279
311
  }
280
312
 
281
- .flowdrop-notes-node__error {
313
+ .flowdrop-notes-node__error-indicator {
282
314
  display: flex;
283
315
  align-items: center;
284
- gap: 0.5rem;
285
- font-size: 0.75rem;
286
- color: #ef4444;
316
+ gap: var(--fd-space-2);
317
+ font-size: var(--fd-text-xs);
318
+ color: var(--fd-error);
287
319
  }
288
320
 
289
- .flowdrop-notes-node__error-icon {
321
+ :global(.flowdrop-notes-node__error-icon) {
290
322
  width: 0.75rem;
291
323
  height: 0.75rem;
292
324
  }
@@ -299,23 +331,23 @@
299
331
 
300
332
  .flowdrop-notes-node__config-btn {
301
333
  position: absolute;
302
- top: 0.5rem;
303
- right: 0.5rem;
334
+ top: var(--fd-space-2);
335
+ right: var(--fd-space-2);
304
336
  width: 1.5rem;
305
337
  height: 1.5rem;
306
- background-color: rgba(255, 255, 255, 0.9);
307
- border: 1px solid #e5e7eb;
308
- border-radius: 0.25rem;
309
- color: #6b7280;
338
+ background-color: var(--fd-backdrop);
339
+ border: 1px solid var(--fd-border);
340
+ border-radius: var(--fd-radius-sm);
341
+ color: var(--fd-muted-foreground);
310
342
  cursor: pointer;
311
343
  display: flex;
312
344
  align-items: center;
313
345
  justify-content: center;
314
346
  opacity: 0;
315
- transition: all 0.2s ease-in-out;
316
- backdrop-filter: blur(4px);
347
+ transition: all var(--fd-transition-normal);
348
+ backdrop-filter: var(--fd-backdrop-blur);
317
349
  z-index: 15;
318
- font-size: 0.875rem;
350
+ font-size: var(--fd-text-sm);
319
351
  }
320
352
 
321
353
  .flowdrop-notes-node:hover .flowdrop-notes-node__config-btn {
@@ -323,9 +355,9 @@
323
355
  }
324
356
 
325
357
  .flowdrop-notes-node__config-btn:hover {
326
- background-color: #f9fafb;
327
- border-color: #d1d5db;
328
- color: #374151;
358
+ background-color: var(--fd-muted);
359
+ border-color: var(--fd-border-strong);
360
+ color: var(--fd-foreground);
329
361
  }
330
362
 
331
363
  /* Responsive design */
@@ -336,7 +368,7 @@
336
368
  }
337
369
 
338
370
  .flowdrop-notes-node__content {
339
- padding: 0.75rem;
371
+ padding: var(--fd-space-3);
340
372
  }
341
373
  }
342
374
  </style>
@@ -186,7 +186,7 @@
186
186
  position={Position.Left}
187
187
  style="background-color: {getDataTypeColor(
188
188
  port.dataType
189
- )}; border-color: '#ffffff'; top: {inputPorts.length > 1
189
+ )}; border-color: var(--fd-handle-border); top: {inputPorts.length > 1
190
190
  ? index === 0
191
191
  ? '25%'
192
192
  : '75%'
@@ -209,8 +209,8 @@
209
209
  >
210
210
  <div class="flowdrop-simple-node__header">
211
211
  <div class="flowdrop-simple-node__header-content">
212
- <!-- Node Icon -->
213
- <div class="flowdrop-simple-node__icon-container" style="background-color: {nodeColor}">
212
+ <!-- Node Icon with Squircle Background -->
213
+ <div class="flowdrop-simple-node__icon-wrapper" style="--_icon-color: {nodeColor}">
214
214
  <Icon icon={nodeIcon} class="flowdrop-simple-node__icon" />
215
215
  </div>
216
216
 
@@ -258,7 +258,7 @@
258
258
  position={Position.Right}
259
259
  style="background-color: {getDataTypeColor(
260
260
  port.dataType
261
- )}; border-color: '#ffffff'; top: {outputPorts.length > 1
261
+ )}; border-color: var(--fd-handle-border); top: {outputPorts.length > 1
262
262
  ? index === 0
263
263
  ? '25%'
264
264
  : '75%'
@@ -272,16 +272,17 @@
272
272
  <style>
273
273
  .flowdrop-simple-node {
274
274
  position: relative;
275
- background-color: #ffffff;
276
- border: 2px solid #e5e7eb;
277
- border-radius: 0.75rem;
275
+ background-color: var(--fd-card);
276
+ border: 1.5px solid var(--fd-node-border);
277
+ border-radius: var(--fd-radius-xl);
278
278
  display: flex;
279
279
  flex-direction: column;
280
280
  cursor: pointer;
281
- transition: all 0.2s ease-in-out;
282
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
281
+ transition: all var(--fd-transition-fast);
282
+ box-shadow: var(--fd-shadow-md);
283
283
  overflow: visible; /* Changed from hidden to visible to allow handles to be properly accessible */
284
284
  z-index: 10;
285
+ color: var(--fd-foreground);
285
286
  }
286
287
 
287
288
  /* Normal layout (default) */
@@ -290,12 +291,23 @@
290
291
  }
291
292
 
292
293
  .flowdrop-simple-node:hover {
293
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
294
+ box-shadow: var(--fd-shadow-lg);
295
+ border-color: var(--fd-node-border-hover);
294
296
  }
295
297
 
296
298
  .flowdrop-simple-node--selected {
297
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
298
- border: 2px solid #3b82f6;
299
+ box-shadow: 0 0 0 2px var(--fd-primary-muted), var(--fd-shadow-lg);
300
+ border-color: var(--fd-primary);
301
+ }
302
+
303
+ .flowdrop-simple-node--selected:hover {
304
+ box-shadow: 0 0 0 2px var(--fd-primary-muted), var(--fd-shadow-lg);
305
+ border-color: var(--fd-primary);
306
+ }
307
+
308
+ .flowdrop-simple-node:focus-visible {
309
+ outline: 2px solid var(--fd-ring);
310
+ outline-offset: 2px;
299
311
  }
300
312
 
301
313
  .flowdrop-simple-node--processing {
@@ -303,36 +315,44 @@
303
315
  }
304
316
 
305
317
  .flowdrop-simple-node--error {
306
- border-color: #ef4444 !important;
307
- background-color: #fef2f2 !important;
318
+ border-color: var(--fd-error) !important;
319
+ background-color: var(--fd-error-muted) !important;
308
320
  }
309
321
 
310
322
  .flowdrop-simple-node__header {
311
- padding: 1rem;
312
- background-color: #f9fafb;
313
- border-radius: 0.75rem;
323
+ padding: var(--fd-space-4);
324
+ background: var(--fd-header);
325
+ border-radius: var(--fd-radius-xl);
314
326
  }
315
327
 
316
328
  .flowdrop-simple-node__header-content {
317
329
  display: flex;
318
330
  align-items: center;
319
- gap: 0.75rem;
331
+ gap: var(--fd-space-3);
320
332
  }
321
333
 
322
- .flowdrop-simple-node__icon-container {
334
+ /* Squircle icon wrapper - Apple-style rounded square background */
335
+ .flowdrop-simple-node__icon-wrapper {
323
336
  display: flex;
324
337
  align-items: center;
325
338
  justify-content: center;
326
- width: 2rem;
327
- height: 2rem;
328
- border-radius: 0.375rem;
339
+ width: 2.25rem;
340
+ height: 2.25rem;
341
+ border-radius: 0.5rem;
342
+ background: color-mix(in srgb, var(--_icon-color) 15%, transparent);
329
343
  flex-shrink: 0;
344
+ transition: all var(--fd-transition-normal);
345
+ }
346
+
347
+ .flowdrop-simple-node:hover .flowdrop-simple-node__icon-wrapper {
348
+ background: color-mix(in srgb, var(--_icon-color) 22%, transparent);
349
+ transform: scale(1.05);
330
350
  }
331
351
 
332
352
  .flowdrop-simple-node__title {
333
- font-size: 0.875rem;
353
+ font-size: var(--fd-text-sm);
334
354
  font-weight: 500;
335
- color: #1f2937;
355
+ color: var(--fd-foreground);
336
356
  margin: 0;
337
357
  flex: 1;
338
358
  min-width: 0;
@@ -340,16 +360,16 @@
340
360
  }
341
361
 
342
362
  .flowdrop-simple-node__description {
343
- font-size: 0.75rem;
344
- color: #6b7280;
345
- margin: 0.25rem 0 0 0;
363
+ font-size: var(--fd-text-xs);
364
+ color: var(--fd-muted-foreground);
365
+ margin: var(--fd-space-1) 0 0 0;
346
366
  line-height: 1.3;
347
367
  }
348
368
 
349
- :global(.flowdrop-simple-node__icon) {
350
- color: white;
351
- font-size: 1rem;
352
- filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
369
+ .flowdrop-simple-node__icon-wrapper :global(.flowdrop-simple-node__icon) {
370
+ width: 1.25rem;
371
+ height: 1.25rem;
372
+ color: var(--fd-node-icon);
353
373
  }
354
374
 
355
375
  /* Label styling removed - now using header title */
@@ -363,8 +383,8 @@
363
383
  .flowdrop-simple-node__spinner {
364
384
  width: 12px;
365
385
  height: 12px;
366
- border: 1px solid rgba(255, 255, 255, 0.3);
367
- border-top: 1px solid white;
386
+ border: 1px solid color-mix(in srgb, var(--fd-foreground) 30%, transparent);
387
+ border-top: 1px solid var(--fd-foreground);
368
388
  border-radius: 50%;
369
389
  animation: spin 1s linear infinite;
370
390
  }
@@ -373,7 +393,7 @@
373
393
  position: absolute;
374
394
  top: 4px;
375
395
  right: 4px;
376
- color: #ef4444;
396
+ color: var(--fd-error);
377
397
  }
378
398
 
379
399
  :global(.flowdrop-simple-node__error-icon) {
@@ -383,23 +403,23 @@
383
403
 
384
404
  .flowdrop-simple-node__config-btn {
385
405
  position: absolute;
386
- top: 0.5rem;
387
- right: 0.5rem;
406
+ top: var(--fd-space-2);
407
+ right: var(--fd-space-2);
388
408
  width: 1.5rem;
389
409
  height: 1.5rem;
390
- background-color: rgba(255, 255, 255, 0.9);
391
- border: 1px solid #e5e7eb;
392
- border-radius: 0.25rem;
393
- color: #6b7280;
410
+ background-color: var(--fd-backdrop);
411
+ border: 1px solid var(--fd-border);
412
+ border-radius: var(--fd-radius-sm);
413
+ color: var(--fd-muted-foreground);
394
414
  cursor: pointer;
395
415
  display: flex;
396
416
  align-items: center;
397
417
  justify-content: center;
398
418
  opacity: 0;
399
- transition: all 0.2s ease-in-out;
419
+ transition: all var(--fd-transition-normal);
400
420
  backdrop-filter: blur(4px);
401
421
  z-index: 15;
402
- font-size: 0.875rem;
422
+ font-size: var(--fd-text-sm);
403
423
  }
404
424
 
405
425
  .flowdrop-simple-node:hover .flowdrop-simple-node__config-btn {
@@ -407,9 +427,9 @@
407
427
  }
408
428
 
409
429
  .flowdrop-simple-node__config-btn:hover {
410
- background-color: #f9fafb;
411
- border-color: #d1d5db;
412
- color: #374151;
430
+ background-color: var(--fd-muted);
431
+ border-color: var(--fd-border-strong);
432
+ color: var(--fd-foreground);
413
433
  }
414
434
 
415
435
  @keyframes spin {
@@ -423,7 +443,7 @@
423
443
  width: 18px !important;
424
444
  height: 18px !important;
425
445
  border-radius: 50% !important;
426
- transition: all 0.2s ease-in-out !important;
446
+ transition: all var(--fd-transition-normal) !important;
427
447
  cursor: pointer !important;
428
448
  z-index: 20 !important;
429
449
  pointer-events: auto !important;
@@ -438,7 +458,7 @@
438
458
  }
439
459
 
440
460
  :global(.svelte-flow__node-simple .svelte-flow__handle:focus) {
441
- outline: 2px solid #3b82f6 !important;
461
+ outline: 2px solid var(--fd-ring) !important;
442
462
  outline-offset: 2px !important;
443
463
  }
444
464
  </style>