@flowdrop/flowdrop 1.0.1 → 1.1.0

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 (386) hide show
  1. package/README.md +50 -50
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +25 -25
  4. package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
  5. package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
  6. package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
  7. package/dist/adapters/agentspec/agentAdapter.js +10 -10
  8. package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
  9. package/dist/adapters/agentspec/autoLayout.js +2 -2
  10. package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
  11. package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
  12. package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
  13. package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
  14. package/dist/adapters/agentspec/index.d.ts +10 -10
  15. package/dist/adapters/agentspec/index.js +6 -6
  16. package/dist/adapters/agentspec/validator.d.ts +2 -2
  17. package/dist/adapters/agentspec/validator.js +22 -20
  18. package/dist/api/enhanced-client.d.ts +3 -3
  19. package/dist/api/enhanced-client.js +73 -72
  20. package/dist/components/App.svelte +1081 -961
  21. package/dist/components/App.svelte.d.ts +9 -6
  22. package/dist/components/CanvasBanner.stories.svelte +23 -20
  23. package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
  24. package/dist/components/CanvasBanner.svelte +46 -46
  25. package/dist/components/ConfigForm.svelte +1164 -1065
  26. package/dist/components/ConfigForm.svelte.d.ts +2 -2
  27. package/dist/components/ConfigModal.svelte +180 -180
  28. package/dist/components/ConfigModal.svelte.d.ts +1 -1
  29. package/dist/components/ConfigPanel.stories.svelte +35 -35
  30. package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
  31. package/dist/components/ConfigPanel.svelte +178 -167
  32. package/dist/components/ConfigPanel.svelte.d.ts +1 -1
  33. package/dist/components/ConnectionLine.svelte +25 -25
  34. package/dist/components/EdgeRefresher.svelte +26 -26
  35. package/dist/components/FlowDropEdge.stories.svelte +179 -143
  36. package/dist/components/FlowDropEdge.svelte +147 -147
  37. package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
  38. package/dist/components/FlowDropZone.svelte +63 -60
  39. package/dist/components/FlowDropZone.svelte.d.ts +1 -1
  40. package/dist/components/LoadingSpinner.stories.svelte +19 -19
  41. package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
  42. package/dist/components/LoadingSpinner.svelte +21 -21
  43. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  44. package/dist/components/Logo.stories.svelte +13 -13
  45. package/dist/components/Logo.stories.svelte.d.ts +1 -1
  46. package/dist/components/Logo.svelte +101 -95
  47. package/dist/components/LogsSidebar.svelte +553 -546
  48. package/dist/components/LogsSidebar.svelte.d.ts +1 -1
  49. package/dist/components/MarkdownDisplay.stories.svelte +29 -23
  50. package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
  51. package/dist/components/MarkdownDisplay.svelte +16 -14
  52. package/dist/components/Navbar.stories.svelte +43 -38
  53. package/dist/components/Navbar.stories.svelte.d.ts +1 -1
  54. package/dist/components/Navbar.svelte +760 -706
  55. package/dist/components/Navbar.svelte.d.ts +1 -1
  56. package/dist/components/NodeSidebar.svelte +900 -746
  57. package/dist/components/NodeSidebar.svelte.d.ts +3 -1
  58. package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
  59. package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
  60. package/dist/components/NodeStatusOverlay.svelte +295 -280
  61. package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
  62. package/dist/components/PipelineStatus.svelte +326 -300
  63. package/dist/components/PipelineStatus.svelte.d.ts +4 -4
  64. package/dist/components/PortCoordinateTracker.svelte +49 -47
  65. package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
  66. package/dist/components/ReadOnlyDetails.svelte +156 -156
  67. package/dist/components/SchemaForm.stories.svelte +106 -98
  68. package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
  69. package/dist/components/SchemaForm.svelte +490 -463
  70. package/dist/components/SchemaForm.svelte.d.ts +2 -2
  71. package/dist/components/SettingsModal.svelte +226 -223
  72. package/dist/components/SettingsModal.svelte.d.ts +1 -1
  73. package/dist/components/SettingsPanel.svelte +637 -601
  74. package/dist/components/SettingsPanel.svelte.d.ts +1 -1
  75. package/dist/components/StatusIcon.stories.svelte +62 -49
  76. package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
  77. package/dist/components/StatusIcon.svelte +87 -87
  78. package/dist/components/StatusIcon.svelte.d.ts +2 -2
  79. package/dist/components/StatusLabel.stories.svelte +12 -12
  80. package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
  81. package/dist/components/StatusLabel.svelte +19 -19
  82. package/dist/components/ThemeToggle.stories.svelte +16 -16
  83. package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
  84. package/dist/components/ThemeToggle.svelte +180 -169
  85. package/dist/components/ThemeToggle.svelte.d.ts +1 -1
  86. package/dist/components/UniversalNode.svelte +150 -138
  87. package/dist/components/UniversalNode.svelte.d.ts +3 -3
  88. package/dist/components/WorkflowEditor.svelte +1069 -1014
  89. package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
  90. package/dist/components/form/FormArray.svelte +1034 -973
  91. package/dist/components/form/FormArray.svelte.d.ts +1 -1
  92. package/dist/components/form/FormAutocomplete.svelte +1021 -978
  93. package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
  94. package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
  95. package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
  96. package/dist/components/form/FormCheckboxGroup.svelte +136 -136
  97. package/dist/components/form/FormCodeEditor.svelte +452 -434
  98. package/dist/components/form/FormField.svelte +366 -355
  99. package/dist/components/form/FormField.svelte.d.ts +2 -2
  100. package/dist/components/form/FormFieldLight.svelte +400 -384
  101. package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
  102. package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
  103. package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
  104. package/dist/components/form/FormFieldWrapper.svelte +100 -93
  105. package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
  106. package/dist/components/form/FormFieldset.svelte +108 -108
  107. package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
  108. package/dist/components/form/FormMarkdownEditor.svelte +758 -725
  109. package/dist/components/form/FormNumberField.stories.svelte +25 -25
  110. package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
  111. package/dist/components/form/FormNumberField.svelte +88 -88
  112. package/dist/components/form/FormRangeField.stories.svelte +20 -20
  113. package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
  114. package/dist/components/form/FormRangeField.svelte +234 -226
  115. package/dist/components/form/FormSelect.stories.svelte +38 -38
  116. package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
  117. package/dist/components/form/FormSelect.svelte +101 -101
  118. package/dist/components/form/FormSelect.svelte.d.ts +1 -1
  119. package/dist/components/form/FormTemplateEditor.svelte +847 -798
  120. package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
  121. package/dist/components/form/FormTextField.stories.svelte +29 -23
  122. package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
  123. package/dist/components/form/FormTextField.svelte +68 -68
  124. package/dist/components/form/FormTextarea.stories.svelte +28 -25
  125. package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
  126. package/dist/components/form/FormTextarea.svelte +74 -74
  127. package/dist/components/form/FormToggle.stories.svelte +23 -20
  128. package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
  129. package/dist/components/form/FormToggle.svelte +98 -98
  130. package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
  131. package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
  132. package/dist/components/form/index.d.ts +19 -19
  133. package/dist/components/form/index.js +18 -18
  134. package/dist/components/form/templateAutocomplete.d.ts +2 -2
  135. package/dist/components/form/templateAutocomplete.js +64 -55
  136. package/dist/components/form/types.d.ts +6 -6
  137. package/dist/components/form/types.js +9 -4
  138. package/dist/components/icons/AlertCircleIcon.svelte +11 -0
  139. package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
  140. package/dist/components/icons/CogIcon.svelte +11 -0
  141. package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
  142. package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
  143. package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
  144. package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
  145. package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
  146. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
  147. package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
  148. package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
  149. package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
  150. package/dist/components/interrupt/FormPrompt.svelte +223 -218
  151. package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
  152. package/dist/components/interrupt/InterruptBubble.svelte +617 -583
  153. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
  154. package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
  155. package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
  156. package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
  157. package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
  158. package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
  159. package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
  160. package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
  161. package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
  162. package/dist/components/interrupt/index.d.ts +5 -5
  163. package/dist/components/interrupt/index.js +5 -5
  164. package/dist/components/layouts/MainLayout.svelte +724 -691
  165. package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
  166. package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
  167. package/dist/components/nodes/GatewayNode.svelte +605 -571
  168. package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
  169. package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
  170. package/dist/components/nodes/IdeaNode.svelte +451 -437
  171. package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
  172. package/dist/components/nodes/NotesNode.stories.svelte +65 -64
  173. package/dist/components/nodes/NotesNode.svelte +380 -369
  174. package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
  175. package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
  176. package/dist/components/nodes/SimpleNode.svelte +486 -424
  177. package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
  178. package/dist/components/nodes/SquareNode.stories.svelte +73 -73
  179. package/dist/components/nodes/SquareNode.svelte +439 -380
  180. package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
  181. package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
  182. package/dist/components/nodes/TerminalNode.svelte +709 -670
  183. package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
  184. package/dist/components/nodes/ToolNode.stories.svelte +181 -180
  185. package/dist/components/nodes/ToolNode.svelte +505 -447
  186. package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
  187. package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
  188. package/dist/components/nodes/WorkflowNode.svelte +621 -551
  189. package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
  190. package/dist/components/playground/ChatPanel.svelte +945 -889
  191. package/dist/components/playground/ExecutionLogs.svelte +495 -472
  192. package/dist/components/playground/InputCollector.svelte +449 -428
  193. package/dist/components/playground/MessageBubble.stories.svelte +47 -47
  194. package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
  195. package/dist/components/playground/MessageBubble.svelte +626 -610
  196. package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
  197. package/dist/components/playground/Playground.svelte +1088 -1057
  198. package/dist/components/playground/Playground.svelte.d.ts +3 -3
  199. package/dist/components/playground/PlaygroundModal.svelte +208 -204
  200. package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
  201. package/dist/components/playground/SessionManager.svelte +527 -521
  202. package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
  203. package/dist/config/agentSpecEndpoints.d.ts +1 -1
  204. package/dist/config/agentSpecEndpoints.js +20 -20
  205. package/dist/config/constants.js +2 -2
  206. package/dist/config/defaultCategories.d.ts +1 -1
  207. package/dist/config/defaultCategories.js +86 -86
  208. package/dist/config/defaultPortConfig.d.ts +1 -1
  209. package/dist/config/defaultPortConfig.js +144 -144
  210. package/dist/config/endpoints.d.ts +4 -4
  211. package/dist/config/endpoints.js +65 -65
  212. package/dist/config/runtimeConfig.d.ts +2 -2
  213. package/dist/config/runtimeConfig.js +8 -8
  214. package/dist/core/index.d.ts +63 -59
  215. package/dist/core/index.js +35 -33
  216. package/dist/display/index.d.ts +2 -2
  217. package/dist/display/index.js +2 -2
  218. package/dist/editor/index.d.ts +62 -62
  219. package/dist/editor/index.js +53 -53
  220. package/dist/form/code.d.ts +5 -5
  221. package/dist/form/code.js +14 -14
  222. package/dist/form/fieldRegistry.d.ts +3 -3
  223. package/dist/form/fieldRegistry.js +11 -9
  224. package/dist/form/full.d.ts +8 -8
  225. package/dist/form/full.js +9 -9
  226. package/dist/form/index.d.ts +18 -18
  227. package/dist/form/index.js +16 -16
  228. package/dist/form/markdown.d.ts +4 -4
  229. package/dist/form/markdown.js +8 -8
  230. package/dist/helpers/proximityConnect.d.ts +3 -3
  231. package/dist/helpers/proximityConnect.js +34 -32
  232. package/dist/helpers/workflowEditorHelper.d.ts +5 -5
  233. package/dist/helpers/workflowEditorHelper.js +108 -96
  234. package/dist/index.d.ts +6 -6
  235. package/dist/index.js +6 -6
  236. package/dist/mocks/app-environment.js +2 -2
  237. package/dist/mocks/app-forms.js +9 -9
  238. package/dist/mocks/app-navigation.js +11 -11
  239. package/dist/mocks/app-stores.js +8 -8
  240. package/dist/playground/index.d.ts +19 -19
  241. package/dist/playground/index.js +16 -16
  242. package/dist/playground/mount.d.ts +3 -3
  243. package/dist/playground/mount.js +24 -24
  244. package/dist/registry/builtinFormats.js +13 -13
  245. package/dist/registry/builtinNodes.d.ts +2 -2
  246. package/dist/registry/builtinNodes.js +77 -77
  247. package/dist/registry/index.d.ts +4 -4
  248. package/dist/registry/index.js +4 -4
  249. package/dist/registry/nodeComponentRegistry.d.ts +8 -8
  250. package/dist/registry/nodeComponentRegistry.js +11 -9
  251. package/dist/registry/plugin.d.ts +2 -2
  252. package/dist/registry/plugin.js +11 -11
  253. package/dist/registry/workflowFormatRegistry.d.ts +3 -3
  254. package/dist/registry/workflowFormatRegistry.js +2 -2
  255. package/dist/schema/index.d.ts +1 -1
  256. package/dist/schema/index.js +2 -2
  257. package/dist/schemas/v1/workflow.schema.json +22 -107
  258. package/dist/services/agentSpecExecutionService.d.ts +3 -3
  259. package/dist/services/agentSpecExecutionService.js +59 -55
  260. package/dist/services/api.d.ts +2 -2
  261. package/dist/services/api.js +37 -37
  262. package/dist/services/apiVariableService.d.ts +1 -1
  263. package/dist/services/apiVariableService.js +41 -34
  264. package/dist/services/autoSaveService.js +8 -8
  265. package/dist/services/categoriesApi.d.ts +2 -2
  266. package/dist/services/categoriesApi.js +8 -8
  267. package/dist/services/draftStorage.d.ts +1 -1
  268. package/dist/services/draftStorage.js +11 -11
  269. package/dist/services/dynamicSchemaService.d.ts +1 -1
  270. package/dist/services/dynamicSchemaService.js +41 -39
  271. package/dist/services/globalSave.d.ts +2 -2
  272. package/dist/services/globalSave.js +41 -38
  273. package/dist/services/historyService.d.ts +1 -1
  274. package/dist/services/historyService.js +8 -8
  275. package/dist/services/interruptService.d.ts +1 -1
  276. package/dist/services/interruptService.js +35 -29
  277. package/dist/services/nodeExecutionService.d.ts +1 -1
  278. package/dist/services/nodeExecutionService.js +45 -44
  279. package/dist/services/playgroundService.d.ts +1 -1
  280. package/dist/services/playgroundService.js +29 -29
  281. package/dist/services/portConfigApi.d.ts +2 -2
  282. package/dist/services/portConfigApi.js +8 -8
  283. package/dist/services/settingsService.d.ts +2 -2
  284. package/dist/services/settingsService.js +25 -19
  285. package/dist/services/toastService.d.ts +4 -4
  286. package/dist/services/toastService.js +33 -33
  287. package/dist/services/variableService.d.ts +1 -1
  288. package/dist/services/variableService.js +36 -36
  289. package/dist/services/workflowStorage.d.ts +2 -2
  290. package/dist/services/workflowStorage.js +13 -13
  291. package/dist/settings/index.d.ts +7 -7
  292. package/dist/settings/index.js +6 -6
  293. package/dist/skins/default.d.ts +2 -0
  294. package/dist/skins/default.js +1 -0
  295. package/dist/skins/index.d.ts +13 -0
  296. package/dist/skins/index.js +30 -0
  297. package/dist/skins/slate.d.ts +2 -0
  298. package/dist/skins/slate.js +78 -0
  299. package/dist/stores/categoriesStore.svelte.d.ts +1 -1
  300. package/dist/stores/categoriesStore.svelte.js +5 -5
  301. package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
  302. package/dist/stores/editorStateMachine.svelte.js +65 -33
  303. package/dist/stores/historyStore.svelte.d.ts +4 -4
  304. package/dist/stores/historyStore.svelte.js +4 -4
  305. package/dist/stores/interruptStore.svelte.d.ts +3 -3
  306. package/dist/stores/interruptStore.svelte.js +21 -21
  307. package/dist/stores/playgroundStore.svelte.d.ts +2 -2
  308. package/dist/stores/playgroundStore.svelte.js +25 -18
  309. package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
  310. package/dist/stores/portCoordinateStore.svelte.js +15 -8
  311. package/dist/stores/settingsStore.svelte.d.ts +2 -2
  312. package/dist/stores/settingsStore.svelte.js +62 -57
  313. package/dist/stores/workflowStore.svelte.d.ts +3 -3
  314. package/dist/stores/workflowStore.svelte.js +50 -47
  315. package/dist/stories/CanvasDecorator.svelte +35 -32
  316. package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
  317. package/dist/stories/EdgeDecorator.svelte +102 -99
  318. package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
  319. package/dist/stories/NodeDecorator.svelte +59 -53
  320. package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
  321. package/dist/stories/utils.d.ts +2 -2
  322. package/dist/stories/utils.js +105 -67
  323. package/dist/styles/base.css +599 -595
  324. package/dist/styles/toast.css +14 -14
  325. package/dist/styles/tokens.css +409 -378
  326. package/dist/svelte-app.d.ts +9 -9
  327. package/dist/svelte-app.js +39 -39
  328. package/dist/themes/default.d.ts +2 -0
  329. package/dist/themes/default.js +9 -0
  330. package/dist/themes/index.d.ts +13 -0
  331. package/dist/themes/index.js +44 -0
  332. package/dist/themes/minimal.d.ts +2 -0
  333. package/dist/themes/minimal.js +11 -0
  334. package/dist/types/agentspec.d.ts +18 -18
  335. package/dist/types/agentspec.js +2 -2
  336. package/dist/types/auth.d.ts +1 -1
  337. package/dist/types/auth.js +6 -6
  338. package/dist/types/config.d.ts +6 -6
  339. package/dist/types/events.d.ts +2 -2
  340. package/dist/types/events.js +2 -2
  341. package/dist/types/index.d.ts +32 -32
  342. package/dist/types/index.js +6 -6
  343. package/dist/types/interrupt.d.ts +6 -6
  344. package/dist/types/interrupt.js +21 -21
  345. package/dist/types/interruptState.d.ts +12 -12
  346. package/dist/types/interruptState.js +66 -66
  347. package/dist/types/playground.d.ts +7 -7
  348. package/dist/types/playground.js +14 -14
  349. package/dist/types/settings.d.ts +5 -3
  350. package/dist/types/settings.js +25 -18
  351. package/dist/types/skin.d.ts +31 -0
  352. package/dist/types/skin.js +1 -0
  353. package/dist/types/theme.d.ts +35 -0
  354. package/dist/types/theme.js +1 -0
  355. package/dist/types/uischema.d.ts +4 -4
  356. package/dist/types/uischema.js +3 -3
  357. package/dist/utils/colors.d.ts +1 -1
  358. package/dist/utils/colors.js +97 -95
  359. package/dist/utils/config.d.ts +2 -2
  360. package/dist/utils/config.js +48 -48
  361. package/dist/utils/connections.d.ts +2 -2
  362. package/dist/utils/connections.js +15 -15
  363. package/dist/utils/errors.js +3 -3
  364. package/dist/utils/fetchWithAuth.d.ts +1 -1
  365. package/dist/utils/fetchWithAuth.js +2 -2
  366. package/dist/utils/handleIds.d.ts +2 -2
  367. package/dist/utils/handleIds.js +8 -8
  368. package/dist/utils/handlePositioning.d.ts +1 -1
  369. package/dist/utils/handlePositioning.js +2 -2
  370. package/dist/utils/icons.d.ts +1 -1
  371. package/dist/utils/icons.js +74 -74
  372. package/dist/utils/logger.d.ts +1 -1
  373. package/dist/utils/logger.js +7 -7
  374. package/dist/utils/nodeStatus.d.ts +1 -1
  375. package/dist/utils/nodeStatus.js +48 -48
  376. package/dist/utils/nodeTypes.d.ts +1 -1
  377. package/dist/utils/nodeTypes.js +21 -20
  378. package/dist/utils/nodeWrapper.d.ts +7 -7
  379. package/dist/utils/nodeWrapper.js +21 -19
  380. package/dist/utils/performanceUtils.d.ts +1 -1
  381. package/dist/utils/performanceUtils.js +2 -1
  382. package/dist/utils/sanitize.js +1 -1
  383. package/dist/utils/uischema.d.ts +2 -2
  384. package/dist/utils/uischema.js +8 -8
  385. package/dist/utils/validation.js +20 -8
  386. package/package.json +1 -1
@@ -7,720 +7,774 @@
7
7
  -->
8
8
 
9
9
  <script lang="ts">
10
- import Icon from '@iconify/svelte';
11
- import Logo from './Logo.svelte';
12
- import SettingsModal from './SettingsModal.svelte';
13
-
14
- interface NavbarAction {
15
- label: string;
16
- href: string;
17
- icon?: string;
18
- variant?: 'primary' | 'secondary' | 'outline';
19
- onclick?: (event: Event) => void;
20
- /** If true, opens link in new tab with proper security attributes */
21
- external?: boolean;
22
- }
23
-
24
- interface BreadcrumbItem {
25
- label: string;
26
- href?: string;
27
- icon?: string;
28
- }
29
-
30
- interface Props {
31
- /** Primary action buttons */
32
- primaryActions?: NavbarAction[];
33
- /** Show connection status indicator */
34
- showStatus?: boolean;
35
- /** Page title */
36
- title?: string;
37
- /** Breadcrumb navigation items */
38
- breadcrumbs?: BreadcrumbItem[];
39
- /** Show settings gear icon */
40
- showSettings?: boolean;
41
- }
42
-
43
- let {
44
- primaryActions = [],
45
- showStatus = true,
46
- title,
47
- breadcrumbs = [],
48
- showSettings = true
49
- }: Props = $props();
50
-
51
- // Dropdown state
52
- let isDropdownOpen = $state(false);
53
-
54
- // Settings modal state
55
- let isSettingsOpen = $state(false);
56
-
57
- // Close dropdown when clicking outside
58
- function handleClickOutside(event: MouseEvent) {
59
- const target = event.target as HTMLElement;
60
- if (!target.closest('.flowdrop-navbar__dropdown')) {
61
- isDropdownOpen = false;
62
- }
63
- }
64
-
65
- // Add event listener for click outside with proper cleanup
66
- $effect(() => {
67
- document.addEventListener('click', handleClickOutside);
68
- return () => {
69
- document.removeEventListener('click', handleClickOutside);
70
- };
71
- });
10
+ import Icon from "@iconify/svelte";
11
+ import Logo from "./Logo.svelte";
12
+ import SettingsModal from "./SettingsModal.svelte";
13
+
14
+ interface NavbarAction {
15
+ label: string;
16
+ href: string;
17
+ icon?: string;
18
+ variant?: "primary" | "secondary" | "outline";
19
+ onclick?: (event: Event) => void;
20
+ /** If true, opens link in new tab with proper security attributes */
21
+ external?: boolean;
22
+ }
23
+
24
+ interface BreadcrumbItem {
25
+ label: string;
26
+ href?: string;
27
+ icon?: string;
28
+ }
29
+
30
+ interface Props {
31
+ /** Primary action buttons */
32
+ primaryActions?: NavbarAction[];
33
+ /** Show connection status indicator */
34
+ showStatus?: boolean;
35
+ /** Page title */
36
+ title?: string;
37
+ /** Breadcrumb navigation items */
38
+ breadcrumbs?: BreadcrumbItem[];
39
+ /** Show settings gear icon */
40
+ showSettings?: boolean;
41
+ }
42
+
43
+ let {
44
+ primaryActions = [],
45
+ showStatus = true,
46
+ title,
47
+ breadcrumbs = [],
48
+ showSettings = true,
49
+ }: Props = $props();
50
+
51
+ // Dropdown state
52
+ let isDropdownOpen = $state(false);
53
+
54
+ // Settings modal state
55
+ let isSettingsOpen = $state(false);
56
+
57
+ // Close dropdown when clicking outside
58
+ function handleClickOutside(event: MouseEvent) {
59
+ const target = event.target as HTMLElement;
60
+ if (!target.closest(".flowdrop-navbar__dropdown")) {
61
+ isDropdownOpen = false;
62
+ }
63
+ }
64
+
65
+ // Add event listener for click outside with proper cleanup
66
+ $effect(() => {
67
+ document.addEventListener("click", handleClickOutside);
68
+ return () => {
69
+ document.removeEventListener("click", handleClickOutside);
70
+ };
71
+ });
72
72
  </script>
73
73
 
74
74
  <div class="flowdrop-navbar">
75
- <div class="flowdrop-navbar__start">
76
- <!-- Logo and Title -->
77
- <div class="flowdrop-logo--container">
78
- <div class="flowdrop-flex flowdrop-gap--3">
79
- <div class="flowdrop-logo--header">
80
- <Logo />
81
- </div>
82
- <div>
83
- <h1 class="flowdrop-text--logo flowdrop-font--bold">FlowDrop</h1>
84
- <p class="flowdrop-text--tagline flowdrop-text--gray">Visual Workflow Manager</p>
85
- </div>
86
- </div>
87
- </div>
88
- </div>
89
-
90
- <div class="flowdrop-navbar__center">
91
- <div class="flowdrop-navbar__center-content">
92
- <!-- Status Indicator on top -->
93
- {#if showStatus}
94
- <div class="flowdrop-navbar__status-container">
95
- <div class="flowdrop-navbar__status">
96
- <div class="flowdrop-navbar__status-indicator"></div>
97
- <span class="flowdrop-navbar__status-text">Connected</span>
98
- </div>
99
- </div>
100
- {/if}
101
-
102
- <!-- Title or Breadcrumbs on bottom -->
103
- {#if breadcrumbs.length > 0}
104
- <div class="flowdrop-navbar__breadcrumb-container">
105
- <nav class="flowdrop-navbar__breadcrumb" aria-label="Breadcrumb">
106
- <ol class="flowdrop-navbar__breadcrumb-list">
107
- {#each breadcrumbs as breadcrumb, index (index)}
108
- <li class="flowdrop-navbar__breadcrumb-item">
109
- {#if breadcrumb.href && index < breadcrumbs.length - 1}
110
- <a href={breadcrumb.href} class="flowdrop-navbar__breadcrumb-link">
111
- {#if breadcrumb.icon}
112
- <Icon icon={breadcrumb.icon} class="flowdrop-navbar__breadcrumb-icon" />
113
- {/if}
114
- <span class="flowdrop-navbar__breadcrumb-text">{breadcrumb.label}</span>
115
- </a>
116
- {:else}
117
- <span class="flowdrop-navbar__breadcrumb-current">
118
- {#if breadcrumb.icon}
119
- <Icon icon={breadcrumb.icon} class="flowdrop-navbar__breadcrumb-icon" />
120
- {/if}
121
- <span class="flowdrop-navbar__breadcrumb-text">{breadcrumb.label}</span>
122
- </span>
123
- {/if}
124
- </li>
125
- {#if index < breadcrumbs.length - 1}
126
- <li class="flowdrop-navbar__breadcrumb-separator">
127
- <Icon icon="mdi:chevron-right" class="flowdrop-navbar__breadcrumb-chevron" />
128
- </li>
129
- {/if}
130
- {/each}
131
- </ol>
132
- </nav>
133
- </div>
134
- {:else if title}
135
- <div class="flowdrop-navbar__title-container">
136
- <div class="flowdrop-navbar__title">
137
- <h2 class="flowdrop-navbar__title-text">{title}</h2>
138
- </div>
139
- </div>
140
- {/if}
141
- </div>
142
- </div>
143
-
144
- <div class="flowdrop-navbar__actions">
145
- {#if primaryActions.length > 0}
146
- <!-- Primary Action Button -->
147
- {#if primaryActions[0]}
148
- {@const primaryAction = primaryActions[0]}
149
- <a
150
- href={primaryAction.href}
151
- class="flowdrop-navbar__primary-action flowdrop-navbar__action--{primaryAction.variant ||
152
- 'primary'}"
153
- onclick={primaryAction.onclick}
154
- target={primaryAction.external ? '_blank' : undefined}
155
- rel={primaryAction.external ? 'noopener noreferrer' : undefined}
156
- >
157
- {#if primaryAction.icon}
158
- <span class="flowdrop-navbar__action-icon">
159
- <Icon icon={primaryAction.icon} class="w-4 h-4" />
160
- </span>
161
- {/if}
162
- <span class="flowdrop-navbar__action-label">{primaryAction.label}</span>
163
- </a>
164
- {/if}
165
-
166
- <!-- Dropdown for Additional Actions -->
167
- {#if primaryActions.length > 1}
168
- <div class="flowdrop-navbar__dropdown">
169
- <button
170
- class="flowdrop-navbar__dropdown-trigger"
171
- onclick={() => (isDropdownOpen = !isDropdownOpen)}
172
- aria-expanded={isDropdownOpen}
173
- aria-haspopup="true"
174
- >
175
- <Icon icon="heroicons:chevron-down" class="w-4 h-4" />
176
- </button>
177
-
178
- {#if isDropdownOpen}
179
- <div class="flowdrop-navbar__dropdown-menu">
180
- {#each primaryActions.slice(1) as action (action.label)}
181
- <a
182
- href={action.href}
183
- class="flowdrop-navbar__dropdown-item"
184
- onclick={(e) => {
185
- action.onclick?.(e);
186
- isDropdownOpen = false;
187
- }}
188
- target={action.external ? '_blank' : undefined}
189
- rel={action.external ? 'noopener noreferrer' : undefined}
190
- >
191
- {#if action.icon}
192
- <Icon icon={action.icon} class="w-4 h-4" />
193
- {/if}
194
- <span>{action.label}</span>
195
- {#if action.external}
196
- <Icon icon="mdi:open-in-new" class="w-3 h-3" />
197
- {/if}
198
- </a>
199
- {/each}
200
- </div>
201
- {/if}
202
- </div>
203
- {/if}
204
- {/if}
205
- </div>
206
-
207
- <div class="flowdrop-navbar__end">
208
- {#if showSettings}
209
- <button
210
- class="flowdrop-navbar__settings-btn"
211
- onclick={() => (isSettingsOpen = true)}
212
- title="Settings"
213
- aria-label="Open settings"
214
- >
215
- <Icon icon="mdi:cog" />
216
- </button>
217
- {/if}
218
- </div>
75
+ <div class="flowdrop-navbar__start">
76
+ <!-- Logo and Title -->
77
+ <div class="flowdrop-logo--container">
78
+ <div class="flowdrop-flex flowdrop-gap--3">
79
+ <div class="flowdrop-logo--header">
80
+ <Logo />
81
+ </div>
82
+ <div>
83
+ <h1 class="flowdrop-text--logo flowdrop-font--bold">FlowDrop</h1>
84
+ <p class="flowdrop-text--tagline flowdrop-text--gray">
85
+ Visual Workflow Manager
86
+ </p>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </div>
91
+
92
+ <div class="flowdrop-navbar__center">
93
+ <div class="flowdrop-navbar__center-content">
94
+ <!-- Status Indicator on top -->
95
+ {#if showStatus}
96
+ <div class="flowdrop-navbar__status-container">
97
+ <div class="flowdrop-navbar__status">
98
+ <div class="flowdrop-navbar__status-indicator"></div>
99
+ <span class="flowdrop-navbar__status-text">Connected</span>
100
+ </div>
101
+ </div>
102
+ {/if}
103
+
104
+ <!-- Title or Breadcrumbs on bottom -->
105
+ {#if breadcrumbs.length > 0}
106
+ <div class="flowdrop-navbar__breadcrumb-container">
107
+ <nav class="flowdrop-navbar__breadcrumb" aria-label="Breadcrumb">
108
+ <ol class="flowdrop-navbar__breadcrumb-list">
109
+ {#each breadcrumbs as breadcrumb, index (index)}
110
+ <li class="flowdrop-navbar__breadcrumb-item">
111
+ {#if breadcrumb.href && index < breadcrumbs.length - 1}
112
+ <a
113
+ href={breadcrumb.href}
114
+ class="flowdrop-navbar__breadcrumb-link"
115
+ >
116
+ {#if breadcrumb.icon}
117
+ <Icon
118
+ icon={breadcrumb.icon}
119
+ class="flowdrop-navbar__breadcrumb-icon"
120
+ />
121
+ {/if}
122
+ <span class="flowdrop-navbar__breadcrumb-text"
123
+ >{breadcrumb.label}</span
124
+ >
125
+ </a>
126
+ {:else}
127
+ <span class="flowdrop-navbar__breadcrumb-current">
128
+ {#if breadcrumb.icon}
129
+ <Icon
130
+ icon={breadcrumb.icon}
131
+ class="flowdrop-navbar__breadcrumb-icon"
132
+ />
133
+ {/if}
134
+ <span class="flowdrop-navbar__breadcrumb-text"
135
+ >{breadcrumb.label}</span
136
+ >
137
+ </span>
138
+ {/if}
139
+ </li>
140
+ {#if index < breadcrumbs.length - 1}
141
+ <li class="flowdrop-navbar__breadcrumb-separator">
142
+ <Icon
143
+ icon="mdi:chevron-right"
144
+ class="flowdrop-navbar__breadcrumb-chevron"
145
+ />
146
+ </li>
147
+ {/if}
148
+ {/each}
149
+ </ol>
150
+ </nav>
151
+ </div>
152
+ {:else if title}
153
+ <div class="flowdrop-navbar__title-container">
154
+ <div class="flowdrop-navbar__title">
155
+ <h2 class="flowdrop-navbar__title-text">{title}</h2>
156
+ </div>
157
+ </div>
158
+ {/if}
159
+ </div>
160
+ </div>
161
+
162
+ <div class="flowdrop-navbar__actions">
163
+ {#if primaryActions.length > 0}
164
+ <!-- Split mode: all actions as individual side-by-side buttons -->
165
+ <div class="flowdrop-navbar__split-actions">
166
+ {#each primaryActions as action (action.label)}
167
+ <a
168
+ href={action.href}
169
+ class="flowdrop-navbar__action flowdrop-navbar__action--{action.variant ||
170
+ 'primary'}"
171
+ onclick={action.onclick}
172
+ target={action.external ? "_blank" : undefined}
173
+ rel={action.external ? "noopener noreferrer" : undefined}
174
+ >
175
+ {#if action.icon}
176
+ <span class="flowdrop-navbar__action-icon">
177
+ <Icon icon={action.icon} class="w-4 h-4" />
178
+ </span>
179
+ {/if}
180
+ <span class="flowdrop-navbar__action-label">{action.label}</span>
181
+ </a>
182
+ {/each}
183
+ </div>
184
+
185
+ <!-- Dropdown mode: first action + chevron dropdown for rest -->
186
+ <div class="flowdrop-navbar__dropdown-mode">
187
+ {#if primaryActions[0]}
188
+ {@const primaryAction = primaryActions[0]}
189
+ <a
190
+ href={primaryAction.href}
191
+ class="flowdrop-navbar__primary-action flowdrop-navbar__action--{primaryAction.variant ||
192
+ 'primary'}"
193
+ onclick={primaryAction.onclick}
194
+ target={primaryAction.external ? "_blank" : undefined}
195
+ rel={primaryAction.external ? "noopener noreferrer" : undefined}
196
+ >
197
+ {#if primaryAction.icon}
198
+ <span class="flowdrop-navbar__action-icon">
199
+ <Icon icon={primaryAction.icon} class="w-4 h-4" />
200
+ </span>
201
+ {/if}
202
+ <span class="flowdrop-navbar__action-label"
203
+ >{primaryAction.label}</span
204
+ >
205
+ </a>
206
+ {/if}
207
+
208
+ <!-- Dropdown for Additional Actions -->
209
+ {#if primaryActions.length > 1}
210
+ <div class="flowdrop-navbar__dropdown">
211
+ <button
212
+ class="flowdrop-navbar__dropdown-trigger"
213
+ onclick={() => (isDropdownOpen = !isDropdownOpen)}
214
+ aria-expanded={isDropdownOpen}
215
+ aria-haspopup="true"
216
+ >
217
+ <Icon icon="heroicons:chevron-down" class="w-4 h-4" />
218
+ </button>
219
+
220
+ {#if isDropdownOpen}
221
+ <div class="flowdrop-navbar__dropdown-menu">
222
+ {#each primaryActions.slice(1) as action (action.label)}
223
+ <a
224
+ href={action.href}
225
+ class="flowdrop-navbar__dropdown-item"
226
+ onclick={(e) => {
227
+ action.onclick?.(e);
228
+ isDropdownOpen = false;
229
+ }}
230
+ target={action.external ? "_blank" : undefined}
231
+ rel={action.external ? "noopener noreferrer" : undefined}
232
+ >
233
+ {#if action.icon}
234
+ <Icon icon={action.icon} class="w-4 h-4" />
235
+ {/if}
236
+ <span>{action.label}</span>
237
+ {#if action.external}
238
+ <Icon icon="mdi:open-in-new" class="w-3 h-3" />
239
+ {/if}
240
+ </a>
241
+ {/each}
242
+ </div>
243
+ {/if}
244
+ </div>
245
+ {/if}
246
+ </div>
247
+ {/if}
248
+ </div>
249
+
250
+ <div class="flowdrop-navbar__end">
251
+ {#if showSettings}
252
+ <button
253
+ class="flowdrop-navbar__settings-btn"
254
+ onclick={() => (isSettingsOpen = true)}
255
+ title="Settings"
256
+ aria-label="Open settings"
257
+ >
258
+ <Icon icon="mdi:cog" />
259
+ </button>
260
+ {/if}
261
+ </div>
219
262
  </div>
220
263
 
221
264
  <!-- Settings Modal -->
222
265
  {#if showSettings}
223
- <SettingsModal bind:open={isSettingsOpen} />
266
+ <SettingsModal bind:open={isSettingsOpen} />
224
267
  {/if}
225
268
 
226
269
  <style>
227
- .flowdrop-navbar {
228
- height: var(--fd-navbar-height);
229
- width: 100%;
230
- max-width: 100%;
231
- display: flex;
232
- align-items: center;
233
- justify-content: space-between;
234
- padding: 0 1rem;
235
- background-color: var(--fd-background);
236
- border-bottom: 1px solid var(--fd-border);
237
- z-index: 10;
238
- }
239
-
240
- .flowdrop-navbar__start {
241
- display: flex;
242
- align-items: center;
243
- width: 320px;
244
- min-width: 320px;
245
- flex-shrink: 0;
246
- }
247
-
248
- .flowdrop-logo--container {
249
- color: var(--fd-foreground);
250
- }
251
-
252
- .flowdrop-logo--header {
253
- width: 40px;
254
- height: 40px;
255
- font-size: 1.25rem;
256
- padding: 2px;
257
- }
258
-
259
- .flowdrop-navbar__center {
260
- flex: 1;
261
- display: flex;
262
- justify-content: flex-start;
263
- align-items: center;
264
- padding-left: 1rem;
265
- }
266
-
267
- .flowdrop-navbar__center-content {
268
- display: flex;
269
- flex-direction: column;
270
- align-items: flex-start;
271
- justify-content: center;
272
- gap: 0.25rem;
273
- }
274
-
275
- .flowdrop-navbar__title-container {
276
- display: flex;
277
- justify-content: flex-start;
278
- align-items: center;
279
- }
280
-
281
- .flowdrop-navbar__title {
282
- display: flex;
283
- flex-direction: column;
284
- align-items: flex-start;
285
- justify-content: center;
286
- }
287
-
288
- .flowdrop-navbar__title-text {
289
- margin: 0;
290
- font-size: 1rem;
291
- font-weight: 600;
292
- color: var(--fd-foreground);
293
- white-space: nowrap;
294
- overflow: hidden;
295
- text-overflow: ellipsis;
296
- max-width: 500px;
297
- text-align: left;
298
- line-height: 1.2;
299
- }
300
-
301
- /* Breadcrumb Styles */
302
- .flowdrop-navbar__breadcrumb-container {
303
- display: flex;
304
- justify-content: flex-start;
305
- align-items: center;
306
- }
307
-
308
- .flowdrop-navbar__breadcrumb {
309
- display: flex;
310
- align-items: center;
311
- }
312
-
313
- .flowdrop-navbar__breadcrumb-list {
314
- display: flex;
315
- align-items: center;
316
- list-style: none;
317
- margin: 0;
318
- padding: 0;
319
- gap: 0.25rem;
320
- }
321
-
322
- .flowdrop-navbar__breadcrumb-item {
323
- display: flex;
324
- align-items: center;
325
- }
326
-
327
- .flowdrop-navbar__breadcrumb-link {
328
- display: flex;
329
- align-items: center;
330
- gap: 0.25rem;
331
- padding: 0.25rem 0.5rem;
332
- border-radius: var(--fd-radius-md);
333
- text-decoration: none;
334
- color: var(--fd-muted-foreground);
335
- font-size: var(--fd-text-sm);
336
- font-weight: 500;
337
- transition: all var(--fd-transition-normal);
338
- }
339
-
340
- .flowdrop-navbar__breadcrumb-link:hover {
341
- color: var(--fd-foreground);
342
- background-color: var(--fd-muted);
343
- }
344
-
345
- .flowdrop-navbar__breadcrumb-current {
346
- display: flex;
347
- align-items: center;
348
- gap: 0.25rem;
349
- padding: 0.25rem 0.5rem;
350
- color: var(--fd-foreground);
351
- font-size: var(--fd-text-sm);
352
- font-weight: 600;
353
- }
354
-
355
- .flowdrop-navbar__breadcrumb-icon {
356
- width: 1rem;
357
- height: 1rem;
358
- flex-shrink: 0;
359
- }
360
-
361
- .flowdrop-navbar__breadcrumb-text {
362
- white-space: nowrap;
363
- }
364
-
365
- .flowdrop-navbar__breadcrumb-separator {
366
- display: flex;
367
- align-items: center;
368
- color: var(--fd-muted-foreground);
369
- }
370
-
371
- .flowdrop-navbar__breadcrumb-chevron {
372
- width: 0.875rem;
373
- height: 0.875rem;
374
- }
375
-
376
- .flowdrop-navbar__status-container {
377
- display: flex;
378
- justify-content: flex-start;
379
- align-items: center;
380
- }
381
-
382
- .flowdrop-navbar__status {
383
- display: inline-flex;
384
- align-items: center;
385
- gap: 0.375rem;
386
- padding: var(--fd-space-3xs) var(--fd-space-xs);
387
- background-color: var(--fd-success-muted);
388
- border-radius: var(--fd-radius-md);
389
- font-size: var(--fd-text-xs);
390
- font-weight: 500;
391
- }
392
-
393
- .flowdrop-navbar__status-indicator {
394
- width: 0.375rem;
395
- height: 0.375rem;
396
- background-color: var(--fd-success-hover);
397
- border-radius: 50%;
398
- animation: pulse 2s infinite;
399
- }
400
-
401
- .flowdrop-navbar__status-text {
402
- color: var(--fd-success-hover);
403
- font-size: var(--fd-text-xs);
404
- font-weight: 500;
405
- }
406
-
407
- @keyframes pulse {
408
- 0%,
409
- 100% {
410
- opacity: 1;
411
- }
412
- 50% {
413
- opacity: 0.5;
414
- }
415
- }
416
-
417
- .flowdrop-navbar__actions {
418
- display: flex;
419
- align-items: center;
420
- gap: 0;
421
- margin-left: auto;
422
- position: relative;
423
- }
424
-
425
- .flowdrop-navbar__primary-action {
426
- display: flex;
427
- align-items: center;
428
- gap: 0.5rem;
429
- padding: 0.5rem 1rem;
430
- text-decoration: none;
431
- border: 1px solid var(--fd-border-strong);
432
- border-radius: var(--fd-radius-md) 0 0 var(--fd-radius-md);
433
- transition: all var(--fd-transition-normal);
434
- font-weight: 500;
435
- font-size: var(--fd-text-sm);
436
- height: 2.5rem;
437
- box-sizing: border-box;
438
- background-color: var(--fd-background);
439
- color: var(--fd-foreground);
440
- border-right: none;
441
- }
442
-
443
- .flowdrop-navbar__primary-action:hover {
444
- background-color: var(--fd-muted);
445
- color: var(--fd-foreground);
446
- }
447
-
448
- .flowdrop-navbar__dropdown {
449
- position: relative;
450
- display: flex;
451
- align-items: center;
452
- height: 2.5rem;
453
- }
454
-
455
- .flowdrop-navbar__dropdown-trigger {
456
- display: flex;
457
- align-items: center;
458
- justify-content: center;
459
- width: 2rem;
460
- height: 2.5rem;
461
- border: 1px solid var(--fd-border-strong);
462
- border-left: none;
463
- border-radius: 0 var(--fd-radius-md) var(--fd-radius-md) 0;
464
- background-color: var(--fd-background);
465
- color: var(--fd-foreground);
466
- cursor: pointer;
467
- transition: all var(--fd-transition-normal);
468
- box-sizing: border-box;
469
- }
470
-
471
- .flowdrop-navbar__dropdown-trigger:hover {
472
- background-color: var(--fd-muted);
473
- color: var(--fd-foreground);
474
- }
475
-
476
- .flowdrop-navbar__dropdown-trigger[aria-expanded='true'] {
477
- background-color: var(--fd-subtle);
478
- color: var(--fd-foreground);
479
- }
480
-
481
- .flowdrop-navbar__dropdown-menu {
482
- position: absolute;
483
- top: 100%;
484
- right: 0;
485
- z-index: 50;
486
- margin-top: 0.25rem;
487
- min-width: 12rem;
488
- background-color: var(--fd-card);
489
- border: 1px solid var(--fd-border);
490
- border-radius: var(--fd-radius-lg);
491
- box-shadow: var(--fd-shadow-lg);
492
- overflow: hidden;
493
- }
494
-
495
- .flowdrop-navbar__dropdown-item {
496
- display: flex;
497
- align-items: center;
498
- gap: 0.75rem;
499
- padding: 0.75rem 1rem;
500
- text-decoration: none;
501
- color: var(--fd-foreground);
502
- font-size: var(--fd-text-sm);
503
- font-weight: 500;
504
- transition: background-color var(--fd-transition-normal);
505
- border: none;
506
- width: 100%;
507
- text-align: left;
508
- background-color: transparent;
509
- }
510
-
511
- .flowdrop-navbar__dropdown-item:hover {
512
- background-color: var(--fd-muted);
513
- color: var(--fd-foreground);
514
- }
515
-
516
- .flowdrop-navbar__dropdown-item:first-child {
517
- border-top: none;
518
- }
519
-
520
- .flowdrop-navbar__dropdown-item:last-child {
521
- border-bottom: none;
522
- }
523
-
524
- .flowdrop-navbar__action {
525
- display: flex;
526
- align-items: center;
527
- gap: 0.5rem;
528
- padding: 0.5rem 1rem;
529
- text-decoration: none;
530
- border-radius: var(--fd-radius-md);
531
- transition: all var(--fd-transition-normal);
532
- font-weight: 500;
533
- font-size: var(--fd-text-sm);
534
- border: 1px solid transparent;
535
- }
536
-
537
- .flowdrop-navbar__action--primary {
538
- background-color: var(--fd-primary);
539
- color: var(--fd-primary-foreground);
540
- border-color: var(--fd-primary);
541
- }
542
-
543
- .flowdrop-navbar__action--primary:hover {
544
- background-color: var(--fd-primary-hover);
545
- border-color: var(--fd-primary-hover);
546
- color: var(--fd-primary-foreground);
547
- }
548
-
549
- .flowdrop-navbar__action--secondary {
550
- background-color: var(--fd-secondary);
551
- color: var(--fd-secondary-foreground);
552
- border-color: var(--fd-border-strong);
553
- }
554
-
555
- .flowdrop-navbar__action--secondary:hover {
556
- background-color: var(--fd-secondary-hover);
557
- color: var(--fd-foreground);
558
- }
559
-
560
- .flowdrop-navbar__action--outline {
561
- background-color: transparent;
562
- color: var(--fd-foreground);
563
- border-color: var(--fd-border-strong);
564
- }
565
-
566
- .flowdrop-navbar__action--outline:hover {
567
- background-color: var(--fd-muted);
568
- color: var(--fd-foreground);
569
- border-color: var(--fd-muted-foreground);
570
- }
571
-
572
- .flowdrop-navbar__action--active {
573
- background-color: var(--fd-primary-muted);
574
- color: var(--fd-primary);
575
- border-color: var(--fd-primary);
576
- }
577
-
578
- .flowdrop-navbar__action-icon {
579
- display: flex;
580
- align-items: center;
581
- }
582
-
583
- .flowdrop-navbar__action-icon :global(svg) {
584
- width: 1rem;
585
- height: 1rem;
586
- }
587
-
588
- .flowdrop-navbar__action-label {
589
- font-weight: 500;
590
- }
591
-
592
- .flowdrop-navbar__end {
593
- display: flex;
594
- align-items: center;
595
- gap: var(--fd-space-xs);
596
- margin-left: var(--fd-space-md);
597
- }
598
-
599
- .flowdrop-navbar__settings-btn {
600
- display: flex;
601
- align-items: center;
602
- justify-content: center;
603
- width: 36px;
604
- height: 36px;
605
- border: 1px solid var(--fd-border);
606
- border-radius: var(--fd-radius-md);
607
- background-color: var(--fd-background);
608
- color: var(--fd-muted-foreground);
609
- font-size: 1.25rem;
610
- cursor: pointer;
611
- transition: all var(--fd-transition-fast);
612
- }
613
-
614
- .flowdrop-navbar__settings-btn:hover {
615
- background-color: var(--fd-muted);
616
- color: var(--fd-foreground);
617
- border-color: var(--fd-border-strong);
618
- }
619
-
620
- .flowdrop-navbar__settings-btn:focus {
621
- outline: none;
622
- box-shadow: 0 0 0 2px var(--fd-ring);
623
- }
624
-
625
- .flowdrop-navbar__settings-btn:active {
626
- transform: scale(0.95);
627
- }
628
-
629
- .flowdrop-api-status {
630
- display: flex;
631
- align-items: center;
632
- gap: 0.5rem;
633
- padding: 0.25rem 0.5rem;
634
- border-radius: var(--fd-radius-md);
635
- background-color: var(--fd-muted);
636
- }
637
-
638
- .flowdrop-api-status__indicator {
639
- width: 0.5rem;
640
- height: 0.5rem;
641
- border-radius: 50%;
642
- transition: background-color var(--fd-transition-normal);
643
- }
644
-
645
- .flowdrop-api-status__indicator--connected {
646
- background-color: var(--fd-success);
647
- }
648
-
649
- /* Utility classes */
650
- .flowdrop-flex {
651
- display: flex;
652
- }
653
-
654
- .flowdrop-gap--3 {
655
- gap: 0.75rem;
656
- }
657
-
658
- .flowdrop-text--logo {
659
- font-size: 1.125rem;
660
- line-height: 0;
661
- }
662
-
663
- .flowdrop-text--tagline {
664
- font-size: var(--fd-text-xs);
665
- line-height: 0.5rem;
666
- }
667
-
668
- .flowdrop-text--xs {
669
- font-size: var(--fd-text-xs);
670
- line-height: 1rem;
671
- }
672
-
673
- .flowdrop-text--gray {
674
- color: var(--fd-muted-foreground);
675
- }
676
-
677
- .flowdrop-font--bold {
678
- font-weight: 700;
679
- }
680
-
681
- /* Responsive design */
682
- @media (max-width: 768px) {
683
- .flowdrop-navbar {
684
- padding: 0 0.5rem;
685
- }
686
-
687
- .flowdrop-navbar__start {
688
- width: 280px;
689
- min-width: 280px;
690
- }
691
-
692
- .flowdrop-navbar__actions {
693
- display: none;
694
- }
695
-
696
- .flowdrop-text--logo {
697
- font-size: 1rem;
698
- }
699
-
700
- .flowdrop-text--tagline {
701
- display: none;
702
- }
703
-
704
- .flowdrop-navbar__title-text {
705
- font-size: 0.875rem;
706
- max-width: 300px;
707
- }
708
-
709
- .flowdrop-navbar__status {
710
- font-size: var(--fd-text-xs);
711
- padding: var(--fd-space-3xs) var(--fd-space-xs);
712
- }
713
- }
714
-
715
- @media (max-width: 480px) {
716
- .flowdrop-navbar__start {
717
- width: 240px;
718
- min-width: 240px;
719
- }
720
-
721
- .flowdrop-navbar__title-text {
722
- font-size: 0.75rem;
723
- max-width: 200px;
724
- }
725
- }
270
+ .flowdrop-navbar {
271
+ height: var(--fd-navbar-height);
272
+ width: 100%;
273
+ max-width: 100%;
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: space-between;
277
+ padding: 0 1rem;
278
+ background-color: var(--fd-background);
279
+ border-bottom: 1px solid var(--fd-border);
280
+ z-index: 10;
281
+ }
282
+
283
+ .flowdrop-navbar__start {
284
+ display: flex;
285
+ align-items: center;
286
+ width: 320px;
287
+ min-width: 320px;
288
+ flex-shrink: 0;
289
+ }
290
+
291
+ .flowdrop-logo--container {
292
+ color: var(--fd-foreground);
293
+ }
294
+
295
+ .flowdrop-logo--header {
296
+ width: 40px;
297
+ height: 40px;
298
+ font-size: 1.25rem;
299
+ padding: 2px;
300
+ }
301
+
302
+ .flowdrop-navbar__center {
303
+ flex: 1;
304
+ display: flex;
305
+ justify-content: flex-start;
306
+ align-items: center;
307
+ padding-left: 1rem;
308
+ }
309
+
310
+ .flowdrop-navbar__center-content {
311
+ display: flex;
312
+ flex-direction: column;
313
+ align-items: flex-start;
314
+ justify-content: center;
315
+ gap: 0.25rem;
316
+ }
317
+
318
+ .flowdrop-navbar__title-container {
319
+ display: flex;
320
+ justify-content: flex-start;
321
+ align-items: center;
322
+ }
323
+
324
+ .flowdrop-navbar__title {
325
+ display: flex;
326
+ flex-direction: column;
327
+ align-items: flex-start;
328
+ justify-content: center;
329
+ }
330
+
331
+ .flowdrop-navbar__title-text {
332
+ margin: 0;
333
+ font-size: 1rem;
334
+ font-weight: 600;
335
+ color: var(--fd-foreground);
336
+ white-space: nowrap;
337
+ overflow: hidden;
338
+ text-overflow: ellipsis;
339
+ max-width: 500px;
340
+ text-align: left;
341
+ line-height: 1.2;
342
+ }
343
+
344
+ /* Breadcrumb Styles */
345
+ .flowdrop-navbar__breadcrumb-container {
346
+ display: flex;
347
+ justify-content: flex-start;
348
+ align-items: center;
349
+ }
350
+
351
+ .flowdrop-navbar__breadcrumb {
352
+ display: flex;
353
+ align-items: center;
354
+ }
355
+
356
+ .flowdrop-navbar__breadcrumb-list {
357
+ display: flex;
358
+ align-items: center;
359
+ list-style: none;
360
+ margin: 0;
361
+ padding: 0;
362
+ gap: 0.25rem;
363
+ }
364
+
365
+ .flowdrop-navbar__breadcrumb-item {
366
+ display: flex;
367
+ align-items: center;
368
+ }
369
+
370
+ .flowdrop-navbar__breadcrumb-link {
371
+ display: flex;
372
+ align-items: center;
373
+ gap: 0.25rem;
374
+ padding: 0.25rem 0.5rem;
375
+ border-radius: var(--fd-radius-md);
376
+ text-decoration: none;
377
+ color: var(--fd-muted-foreground);
378
+ font-size: var(--fd-text-sm);
379
+ font-weight: 500;
380
+ transition: all var(--fd-transition-normal);
381
+ }
382
+
383
+ .flowdrop-navbar__breadcrumb-link:hover {
384
+ color: var(--fd-foreground);
385
+ background-color: var(--fd-muted);
386
+ }
387
+
388
+ .flowdrop-navbar__breadcrumb-current {
389
+ display: flex;
390
+ align-items: center;
391
+ gap: 0.25rem;
392
+ padding: 0.25rem 0.5rem;
393
+ color: var(--fd-foreground);
394
+ font-size: var(--fd-text-sm);
395
+ font-weight: 600;
396
+ }
397
+
398
+ .flowdrop-navbar__breadcrumb-icon {
399
+ width: 1rem;
400
+ height: 1rem;
401
+ flex-shrink: 0;
402
+ }
403
+
404
+ .flowdrop-navbar__breadcrumb-text {
405
+ white-space: nowrap;
406
+ }
407
+
408
+ .flowdrop-navbar__breadcrumb-separator {
409
+ display: flex;
410
+ align-items: center;
411
+ color: var(--fd-muted-foreground);
412
+ }
413
+
414
+ .flowdrop-navbar__breadcrumb-chevron {
415
+ width: 0.875rem;
416
+ height: 0.875rem;
417
+ }
418
+
419
+ .flowdrop-navbar__status-container {
420
+ display: flex;
421
+ justify-content: flex-start;
422
+ align-items: center;
423
+ }
424
+
425
+ .flowdrop-navbar__status {
426
+ display: inline-flex;
427
+ align-items: center;
428
+ gap: 0.375rem;
429
+ padding: var(--fd-space-3xs) var(--fd-space-xs);
430
+ background-color: var(--fd-success-muted);
431
+ border-radius: var(--fd-radius-md);
432
+ font-size: var(--fd-text-xs);
433
+ font-weight: 500;
434
+ }
435
+
436
+ .flowdrop-navbar__status-indicator {
437
+ width: 0.375rem;
438
+ height: 0.375rem;
439
+ background-color: var(--fd-success-hover);
440
+ border-radius: 50%;
441
+ animation: pulse 2s infinite;
442
+ }
443
+
444
+ .flowdrop-navbar__status-text {
445
+ color: var(--fd-success-hover);
446
+ font-size: var(--fd-text-xs);
447
+ font-weight: 500;
448
+ }
449
+
450
+ @keyframes pulse {
451
+ 0%,
452
+ 100% {
453
+ opacity: 1;
454
+ }
455
+ 50% {
456
+ opacity: 0.5;
457
+ }
458
+ }
459
+
460
+ .flowdrop-navbar__actions {
461
+ display: flex;
462
+ align-items: center;
463
+ gap: 0;
464
+ margin-left: auto;
465
+ position: relative;
466
+ }
467
+
468
+ .flowdrop-navbar__split-actions {
469
+ display: var(--fd-navbar-split-display, none);
470
+ align-items: center;
471
+ gap: 0.5rem;
472
+ }
473
+
474
+ .flowdrop-navbar__dropdown-mode {
475
+ display: var(--fd-navbar-dropdown-display, flex);
476
+ align-items: center;
477
+ }
478
+
479
+ .flowdrop-navbar__primary-action {
480
+ display: flex;
481
+ align-items: center;
482
+ gap: 0.5rem;
483
+ padding: 0.5rem 1rem;
484
+ text-decoration: none;
485
+ border: 1px solid var(--fd-border-strong);
486
+ border-radius: var(--fd-radius-md) 0 0 var(--fd-radius-md);
487
+ transition: all var(--fd-transition-normal);
488
+ font-weight: 500;
489
+ font-size: var(--fd-text-sm);
490
+ height: 2.5rem;
491
+ box-sizing: border-box;
492
+ background-color: var(--fd-background);
493
+ color: var(--fd-foreground);
494
+ border-right: none;
495
+ }
496
+
497
+ .flowdrop-navbar__primary-action:hover {
498
+ background-color: var(--fd-muted);
499
+ color: var(--fd-foreground);
500
+ }
501
+
502
+ .flowdrop-navbar__dropdown {
503
+ position: relative;
504
+ display: flex;
505
+ align-items: center;
506
+ height: 2.5rem;
507
+ }
508
+
509
+ .flowdrop-navbar__dropdown-trigger {
510
+ display: flex;
511
+ align-items: center;
512
+ justify-content: center;
513
+ width: 2rem;
514
+ height: 2.5rem;
515
+ border: 1px solid var(--fd-border-strong);
516
+ border-left: none;
517
+ border-radius: 0 var(--fd-radius-md) var(--fd-radius-md) 0;
518
+ background-color: var(--fd-background);
519
+ color: var(--fd-foreground);
520
+ cursor: pointer;
521
+ transition: all var(--fd-transition-normal);
522
+ box-sizing: border-box;
523
+ }
524
+
525
+ .flowdrop-navbar__dropdown-trigger:hover {
526
+ background-color: var(--fd-muted);
527
+ color: var(--fd-foreground);
528
+ }
529
+
530
+ .flowdrop-navbar__dropdown-trigger[aria-expanded="true"] {
531
+ background-color: var(--fd-subtle);
532
+ color: var(--fd-foreground);
533
+ }
534
+
535
+ .flowdrop-navbar__dropdown-menu {
536
+ position: absolute;
537
+ top: 100%;
538
+ right: 0;
539
+ z-index: 50;
540
+ margin-top: 0.25rem;
541
+ min-width: 12rem;
542
+ background-color: var(--fd-card);
543
+ border: 1px solid var(--fd-border);
544
+ border-radius: var(--fd-radius-lg);
545
+ box-shadow: var(--fd-shadow-lg);
546
+ overflow: hidden;
547
+ }
548
+
549
+ .flowdrop-navbar__dropdown-item {
550
+ display: flex;
551
+ align-items: center;
552
+ gap: 0.75rem;
553
+ padding: 0.75rem 1rem;
554
+ text-decoration: none;
555
+ color: var(--fd-foreground);
556
+ font-size: var(--fd-text-sm);
557
+ font-weight: 500;
558
+ transition: background-color var(--fd-transition-normal);
559
+ border: none;
560
+ width: 100%;
561
+ text-align: left;
562
+ background-color: transparent;
563
+ }
564
+
565
+ .flowdrop-navbar__dropdown-item:hover {
566
+ background-color: var(--fd-muted);
567
+ color: var(--fd-foreground);
568
+ }
569
+
570
+ .flowdrop-navbar__dropdown-item:first-child {
571
+ border-top: none;
572
+ }
573
+
574
+ .flowdrop-navbar__dropdown-item:last-child {
575
+ border-bottom: none;
576
+ }
577
+
578
+ .flowdrop-navbar__action {
579
+ display: flex;
580
+ align-items: center;
581
+ gap: 0.5rem;
582
+ padding: 0.5rem 1rem;
583
+ text-decoration: none;
584
+ border-radius: var(--fd-radius-md);
585
+ transition: all var(--fd-transition-normal);
586
+ font-weight: 500;
587
+ font-size: var(--fd-text-sm);
588
+ border: 1px solid transparent;
589
+ }
590
+
591
+ .flowdrop-navbar__action--primary {
592
+ background-color: var(--fd-primary);
593
+ color: var(--fd-primary-foreground);
594
+ border-color: var(--fd-primary);
595
+ }
596
+
597
+ .flowdrop-navbar__action--primary:hover {
598
+ background-color: var(--fd-primary-hover);
599
+ border-color: var(--fd-primary-hover);
600
+ color: var(--fd-primary-foreground);
601
+ }
602
+
603
+ .flowdrop-navbar__action--secondary {
604
+ background-color: var(--fd-secondary);
605
+ color: var(--fd-secondary-foreground);
606
+ border-color: var(--fd-border-strong);
607
+ }
608
+
609
+ .flowdrop-navbar__action--secondary:hover {
610
+ background-color: var(--fd-secondary-hover);
611
+ color: var(--fd-foreground);
612
+ }
613
+
614
+ .flowdrop-navbar__action--outline {
615
+ background-color: transparent;
616
+ color: var(--fd-foreground);
617
+ border-color: var(--fd-border-strong);
618
+ }
619
+
620
+ .flowdrop-navbar__action--outline:hover {
621
+ background-color: var(--fd-muted);
622
+ color: var(--fd-foreground);
623
+ border-color: var(--fd-muted-foreground);
624
+ }
625
+
626
+ .flowdrop-navbar__action--active {
627
+ background-color: var(--fd-primary-muted);
628
+ color: var(--fd-primary);
629
+ border-color: var(--fd-primary);
630
+ }
631
+
632
+ .flowdrop-navbar__action-icon {
633
+ display: flex;
634
+ align-items: center;
635
+ }
636
+
637
+ .flowdrop-navbar__action-icon :global(svg) {
638
+ width: 1rem;
639
+ height: 1rem;
640
+ }
641
+
642
+ .flowdrop-navbar__action-label {
643
+ font-weight: 500;
644
+ }
645
+
646
+ .flowdrop-navbar__end {
647
+ display: flex;
648
+ align-items: center;
649
+ gap: var(--fd-space-xs);
650
+ margin-left: var(--fd-space-md);
651
+ }
652
+
653
+ .flowdrop-navbar__settings-btn {
654
+ display: flex;
655
+ align-items: center;
656
+ justify-content: center;
657
+ width: 36px;
658
+ height: 36px;
659
+ border: 1px solid var(--fd-border);
660
+ border-radius: var(--fd-radius-md);
661
+ background-color: var(--fd-background);
662
+ color: var(--fd-muted-foreground);
663
+ font-size: 1.25rem;
664
+ cursor: pointer;
665
+ transition: all var(--fd-transition-fast);
666
+ }
667
+
668
+ .flowdrop-navbar__settings-btn:hover {
669
+ background-color: var(--fd-muted);
670
+ color: var(--fd-foreground);
671
+ border-color: var(--fd-border-strong);
672
+ }
673
+
674
+ .flowdrop-navbar__settings-btn:focus {
675
+ outline: none;
676
+ box-shadow: 0 0 0 2px var(--fd-ring);
677
+ }
678
+
679
+ .flowdrop-navbar__settings-btn:active {
680
+ transform: scale(0.95);
681
+ }
682
+
683
+ .flowdrop-api-status {
684
+ display: flex;
685
+ align-items: center;
686
+ gap: 0.5rem;
687
+ padding: 0.25rem 0.5rem;
688
+ border-radius: var(--fd-radius-md);
689
+ background-color: var(--fd-muted);
690
+ }
691
+
692
+ .flowdrop-api-status__indicator {
693
+ width: 0.5rem;
694
+ height: 0.5rem;
695
+ border-radius: 50%;
696
+ transition: background-color var(--fd-transition-normal);
697
+ }
698
+
699
+ .flowdrop-api-status__indicator--connected {
700
+ background-color: var(--fd-success);
701
+ }
702
+
703
+ /* Utility classes */
704
+ .flowdrop-flex {
705
+ display: flex;
706
+ }
707
+
708
+ .flowdrop-gap--3 {
709
+ gap: 0.75rem;
710
+ }
711
+
712
+ .flowdrop-text--logo {
713
+ font-size: 1.125rem;
714
+ line-height: 0;
715
+ }
716
+
717
+ .flowdrop-text--tagline {
718
+ font-size: var(--fd-text-xs);
719
+ line-height: 0.5rem;
720
+ }
721
+
722
+ .flowdrop-text--xs {
723
+ font-size: var(--fd-text-xs);
724
+ line-height: 1rem;
725
+ }
726
+
727
+ .flowdrop-text--gray {
728
+ color: var(--fd-muted-foreground);
729
+ }
730
+
731
+ .flowdrop-font--bold {
732
+ font-weight: 700;
733
+ }
734
+
735
+ /* Responsive design */
736
+ @media (max-width: 768px) {
737
+ .flowdrop-navbar {
738
+ padding: 0 0.5rem;
739
+ }
740
+
741
+ .flowdrop-navbar__start {
742
+ width: 280px;
743
+ min-width: 280px;
744
+ }
745
+
746
+ .flowdrop-navbar__actions {
747
+ display: none;
748
+ }
749
+
750
+ .flowdrop-text--logo {
751
+ font-size: 1rem;
752
+ }
753
+
754
+ .flowdrop-text--tagline {
755
+ display: none;
756
+ }
757
+
758
+ .flowdrop-navbar__title-text {
759
+ font-size: 0.875rem;
760
+ max-width: 300px;
761
+ }
762
+
763
+ .flowdrop-navbar__status {
764
+ font-size: var(--fd-text-xs);
765
+ padding: var(--fd-space-3xs) var(--fd-space-xs);
766
+ }
767
+ }
768
+
769
+ @media (max-width: 480px) {
770
+ .flowdrop-navbar__start {
771
+ width: 240px;
772
+ min-width: 240px;
773
+ }
774
+
775
+ .flowdrop-navbar__title-text {
776
+ font-size: 0.75rem;
777
+ max-width: 200px;
778
+ }
779
+ }
726
780
  </style>