@flowdrop/flowdrop 2.0.0-beta.2 → 2.0.0-beta.3
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.
- package/CHANGELOG.md +34 -0
- package/MIGRATION-2.0.md +13 -0
- package/dist/components/App.svelte +21 -45
- package/dist/components/App.svelte.d.ts +2 -7
- package/dist/components/CanvasIconButton.svelte +76 -0
- package/dist/components/CanvasIconButton.svelte.d.ts +18 -0
- package/dist/components/ConfigForm.svelte +0 -19
- package/dist/components/ConfigPanel.svelte +4 -3
- package/dist/components/LogoWordmark.svelte +113 -0
- package/dist/components/LogoWordmark.svelte.d.ts +26 -0
- package/dist/components/Navbar.svelte +8 -59
- package/dist/components/NodeSidebar.svelte +4 -11
- package/dist/components/NodeSwapPicker.svelte +0 -2
- package/dist/components/PortMappingRow.svelte +0 -2
- package/dist/components/SchemaForm.svelte +0 -12
- package/dist/components/SettingsModal.svelte +0 -5
- package/dist/components/SettingsPanel.svelte +2 -6
- package/dist/components/ThemeToggle.svelte +0 -5
- package/dist/components/UniversalNode.svelte +32 -1
- package/dist/components/WorkflowEditor.svelte +62 -51
- package/dist/components/WorkflowEditor.svelte.d.ts +18 -0
- package/dist/components/chat/AIChatPanel.svelte +1 -1
- package/dist/components/console/ConsoleAutocomplete.svelte +1 -1
- package/dist/components/console/ConsoleOutput.svelte +2 -2
- package/dist/components/form/FormArray.svelte +0 -16
- package/dist/components/form/FormAutocomplete.svelte +10 -6
- package/dist/components/form/FormCheckboxGroup.svelte +0 -4
- package/dist/components/form/FormCodeEditor.svelte +9 -7
- package/dist/components/form/FormFieldLight.svelte +3 -3
- package/dist/components/form/FormMarkdownEditor.svelte +8 -5
- package/dist/components/form/FormNumberField.svelte +0 -4
- package/dist/components/form/FormRangeField.svelte +1 -20
- package/dist/components/form/FormSelect.svelte +10 -6
- package/dist/components/form/FormTemplateEditor.svelte +6 -4
- package/dist/components/form/FormTextField.svelte +10 -6
- package/dist/components/form/FormTextarea.svelte +10 -6
- package/dist/components/form/FormToggle.svelte +0 -4
- package/dist/components/icons/CommandLineIcon.svelte +15 -0
- package/dist/components/icons/CommandLineIcon.svelte.d.ts +26 -0
- package/dist/components/icons/MenuIcon.svelte +4 -0
- package/dist/components/icons/MenuIcon.svelte.d.ts +26 -0
- package/dist/components/icons/MenuOpenIcon.svelte +6 -0
- package/dist/components/icons/MenuOpenIcon.svelte.d.ts +26 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +0 -10
- package/dist/components/interrupt/ConfirmationPrompt.svelte +0 -5
- package/dist/components/interrupt/InterruptBubble.svelte +0 -10
- package/dist/components/interrupt/ReviewPrompt.svelte +0 -20
- package/dist/components/interrupt/TextInputPrompt.svelte +0 -6
- package/dist/components/layouts/MainLayout.svelte +4 -5
- package/dist/components/nodes/AtomNode.svelte +46 -34
- package/dist/components/nodes/GatewayNode.svelte +91 -99
- package/dist/components/nodes/IdeaNode.svelte +62 -90
- package/dist/components/nodes/NodeConfigButton.svelte +86 -0
- package/dist/components/nodes/NodeConfigButton.svelte.d.ts +15 -0
- package/dist/components/nodes/NotesNode.svelte +70 -81
- package/dist/components/nodes/SimpleNode.svelte +28 -78
- package/dist/components/nodes/SquareNode.svelte +79 -109
- package/dist/components/nodes/TerminalNode.svelte +28 -86
- package/dist/components/nodes/ToolNode.svelte +82 -95
- package/dist/components/nodes/WorkflowNode.svelte +91 -100
- package/dist/components/playground/ChatInput.svelte +0 -1
- package/dist/components/playground/InputCollector.svelte +0 -2
- package/dist/components/playground/PlaygroundApp.svelte +1 -1
- package/dist/components/playground/PlaygroundStudio.svelte +0 -5
- package/dist/playground/mount.d.ts +9 -5
- package/dist/playground/mount.js +9 -5
- package/dist/skins/drafter.d.ts +30 -0
- package/dist/skins/drafter.js +185 -0
- package/dist/skins/index.d.ts +2 -1
- package/dist/skins/index.js +4 -2
- package/dist/styles/base.css +38 -9
- package/dist/styles/tokens.css +54 -2
- package/dist/svelte-app.d.ts +6 -0
- package/dist/svelte-app.js +3 -2
- package/dist/themes/drafter.d.ts +2 -0
- package/dist/themes/drafter.js +15 -0
- package/dist/themes/index.d.ts +2 -1
- package/dist/themes/index.js +8 -2
- package/dist/types/events.d.ts +18 -0
- package/dist/types/events.js +2 -1
- package/dist/types/settings.d.ts +1 -1
- package/dist/types/settings.js +1 -1
- package/dist/types/skin.d.ts +1 -1
- package/dist/types/theme.d.ts +16 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.0.0-beta.3] - 2026-06-12
|
|
11
|
+
|
|
12
|
+
Third 2.0 beta, published under the npm `beta` dist-tag (`npm install @flowdrop/flowdrop@beta`). `latest` remains 1.15.0 until 2.0.0 GA. This release finishes the navbar/theme defaults pass started in beta.2 (navbar opt-in everywhere, light as the default theme, the FlowDrop wordmark in the header), adds the **Drafter** blueprint theme with per-theme canvas grids, and lands a keyboard-navigation and focus-ring overhaul alongside the 20px node-grid alignment.
|
|
13
|
+
|
|
14
|
+
### Breaking Changes
|
|
15
|
+
|
|
16
|
+
- **`mountPlaygroundApp` / `<PlaygroundApp>` no longer render the navbar by default.** `showNavbar` now defaults to `false`, matching `mountFlowDropApp` / `<App>` — so every mount path is navbar-off by default and embedding FlowDrop into a page that already has its own header never double-stacks a header. Pass `showNavbar: true` to opt back into the FlowDrop navbar (logo, branding, settings modal) when FlowDrop owns the whole page.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **Drafter blueprint theme.** A third built-in editor theme (`'drafter'`), shipping light + dark variants: a blueprint aesthetic with a soft mint canvas, a subtle emerald line grid, and translucent green-tinted flat nodes. Data-type port colors and category icon colors are left untouched so they keep popping against the muted draft surface. Selectable from the Settings → UI Theme picker; the `FlowDropSkinName` / theme / skin name unions gain `'drafter'`.
|
|
21
|
+
- **Per-theme canvas grid.** A new `FlowDropGridVariant` type (`'dots' | 'lines' | 'cross'`) and `themeConfig.canvas.grid` config let any theme drive the editor's background grid (previously hardcoded to dots). The grid pattern color is the `--fd-grid-pattern-color` token, whose default matches xyflow's dot color, so the default/minimal themes render unchanged. `resolveTheme` now merges `config.canvas` alongside `config.sidebar`.
|
|
22
|
+
- **`features.builtinEditors` opt-out.** The built-in markdown/code/template editors are batteries-included in the full editor by default. Pass `features: { builtinEditors: false }` to `mountFlowDropApp` (or `builtinEditors: false` to `mountWorkflowEditor` / `<WorkflowEditor>`) to skip registering them — keeping the textarea fallback or leaving room to register your own field components via `instance.fields.register(...)`. The corrected fallback hint now points at the registry-scoped API (`registerMarkdownEditorField(instance.fields)`).
|
|
23
|
+
- **FlowDrop wordmark logo in the navbar.** The header now renders the FlowDrop wordmark in place of the plain text title.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **The default theme preference is now `'light'` (was `'dark'`).** `DEFAULT_THEME_SETTINGS.preference` was hardcoded to `'dark'`, so any embed with no persisted theme choice rendered dark. Embeds now default to light; hosts that want dark by default should set the preference explicitly.
|
|
28
|
+
- **Editor / node / chrome surface tokens are scoped per surface,** refining how themes (including Drafter) tint the canvas, nodes, and surrounding chrome independently.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **Nodes are a single tab stop again.** The node config (gear) button sat in the tab order, so leaving a node required a second `Tab` press. The gear button is removed from the tab order (it stays mouse/Enter-activatable), and node focus defers to xyflow's own node focus — Tab now moves one node per press. `nodesFocusable` redundancy was removed to eliminate the duplicate stop.
|
|
33
|
+
- **The full editor renders markdown/code/config editors out of the box again.** The beta.2 light-entry split made the heavy form editors opt-in everywhere, which inadvertently left `<WorkflowEditor>` / `<App>` / the playground showing the "Editor component not registered" textarea fallback for node config fields with `format: 'markdown' | 'code' | 'template'`. The full editor now registers the built-in editors on its own instance's field registry on mount. Registration uses a dynamic `import()`, so the chunks stay code-split (loaded lazily) and the light `/editor` static bundle is unaffected — the bundle guard still passes. The standalone `@flowdrop/flowdrop/form` primitive is unchanged and remains opt-in.
|
|
34
|
+
- **`<App navbarActions>` accepts the full `NavbarAction` shape.** The component prop was typed with an inline subset that silently dropped `external` and `group`, even though the underlying `<Navbar>` (and the `mountFlowDropApp` option) already supported them. It now uses the canonical `NavbarAction` type, so external-link and grouped actions type-check through the component as they always did through the mount API.
|
|
35
|
+
- **The node header no longer shows a top-accent line.**
|
|
36
|
+
|
|
37
|
+
### Changed (internal — no API change)
|
|
38
|
+
|
|
39
|
+
- **One centralized focus ring across the whole component library.** New `--fd-ring-width` / `--fd-ring-offset` tokens and a single `.flowdrop-root :focus-visible` rule in `base.css` replace ~200 lines of component-local focus CSS (mismatched outlines, hardcoded `rgba(59,130,246)` box-shadow glows, `color-mix` rings) removed across 41 files. CodeMirror editors in `overflow:hidden` containers use a `:focus-within` ring (outline paints outside the box and would clip); range-input thumbs ring on the parent.
|
|
40
|
+
- **Extracted shared `NodeConfigButton` and `CanvasIconButton` components,** replacing per-node config-button and per-canvas floating-button duplication (including an inline-SVG cog) with one keyboard-correct implementation each.
|
|
41
|
+
- **Node geometry converted from `rem` to `px` and snapped to a 20px grid** across all eight node types — header, port rows (fixed 60px), icon sizes, paddings, gaps, and font sizes — so nodes stay aligned to the canvas coordinate grid regardless of the host's root font-size.
|
|
42
|
+
- **The code / markdown / template editors now rest on the shared input surface** instead of carrying their own background.
|
|
43
|
+
|
|
10
44
|
## [2.0.0-beta.2] - 2026-06-09
|
|
11
45
|
|
|
12
46
|
Second 2.0 beta, published under the npm `beta` dist-tag (`npm install @flowdrop/flowdrop@beta`). This release tightens the 2.0 package boundaries, finishes `AuthProvider` propagation across the editor and playground runtime surfaces, and adds a regression guard for light-entry bundle size.
|
package/MIGRATION-2.0.md
CHANGED
|
@@ -295,6 +295,19 @@ import { getInstance } from '@flowdrop/flowdrop/editor';
|
|
|
295
295
|
registerCodeEditorField(getInstance().fields);
|
|
296
296
|
```
|
|
297
297
|
|
|
298
|
+
**You only need this for the standalone `@flowdrop/flowdrop/form` primitive.**
|
|
299
|
+
The full editor is batteries-included: `<WorkflowEditor>` / `<App>` and the
|
|
300
|
+
playground register the built-in markdown, code, and template editors on their
|
|
301
|
+
own instance's `fields` registry on mount, so node config fields with
|
|
302
|
+
`format: 'markdown' | 'code' | 'template'` render real editors out of the box —
|
|
303
|
+
no host call required. Registration is a dynamic `import()`, so the CodeMirror /
|
|
304
|
+
`marked` chunks stay code-split (the light `/editor` static bundle is
|
|
305
|
+
unaffected) and load lazily on first use. To strip them, pass
|
|
306
|
+
`features: { builtinEditors: false }` to `mountFlowDropApp` (or
|
|
307
|
+
`builtinEditors: false` to `mountWorkflowEditor` / `<WorkflowEditor>`) and either
|
|
308
|
+
accept the textarea fallback or register your own field components via
|
|
309
|
+
`instance.fields.register(...)`.
|
|
310
|
+
|
|
298
311
|
Category color/icon helpers likewise take a `CategoriesStore` as an explicit
|
|
299
312
|
parameter — the last global-instance fallback in `utils` is gone.
|
|
300
313
|
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
import MainLayout from './layouts/MainLayout.svelte';
|
|
10
10
|
import WorkflowEditor from './WorkflowEditor.svelte';
|
|
11
11
|
import NodeSidebar from './NodeSidebar.svelte';
|
|
12
|
-
import
|
|
12
|
+
import CanvasIconButton from './CanvasIconButton.svelte';
|
|
13
|
+
import MenuIcon from './icons/MenuIcon.svelte';
|
|
14
|
+
import MenuOpenIcon from './icons/MenuOpenIcon.svelte';
|
|
13
15
|
import ConfigForm from './ConfigForm.svelte';
|
|
14
16
|
import ConfigPanel from './ConfigPanel.svelte';
|
|
15
17
|
import CommandConsole from './console/CommandConsole.svelte';
|
|
@@ -18,6 +20,7 @@
|
|
|
18
20
|
import NodeSwapPicker from './NodeSwapPicker.svelte';
|
|
19
21
|
import SwapMappingEditor from './SwapMappingEditor.svelte';
|
|
20
22
|
import Navbar from './Navbar.svelte';
|
|
23
|
+
import type { NavbarAction } from '../types/navbar.js';
|
|
21
24
|
import type { NodeMetadata, Workflow, WorkflowNode, ConfigSchema } from '../types/index.js';
|
|
22
25
|
import type { InteractiveSwapState, SwapEventContext } from '../utils/nodeSwap.js';
|
|
23
26
|
import {
|
|
@@ -98,13 +101,7 @@
|
|
|
98
101
|
/** Custom navbar title */
|
|
99
102
|
navbarTitle?: string;
|
|
100
103
|
/** Custom navbar actions */
|
|
101
|
-
navbarActions?:
|
|
102
|
-
label: string;
|
|
103
|
-
href: string;
|
|
104
|
-
icon?: string;
|
|
105
|
-
variant?: 'primary' | 'secondary' | 'outline';
|
|
106
|
-
onclick?: (event: Event) => void;
|
|
107
|
-
}>;
|
|
104
|
+
navbarActions?: NavbarAction[];
|
|
108
105
|
/** Show settings gear icon in navbar */
|
|
109
106
|
showSettings?: boolean;
|
|
110
107
|
/** Show the "Connected" status indicator in the navbar (default: true) */
|
|
@@ -1278,18 +1275,22 @@
|
|
|
1278
1275
|
>
|
|
1279
1276
|
<!-- Floating sidebar toggle — always visible on the canvas top-left -->
|
|
1280
1277
|
{#if !disableSidebar}
|
|
1281
|
-
<
|
|
1278
|
+
<CanvasIconButton
|
|
1282
1279
|
class="flowdrop-sidebar-fab"
|
|
1283
|
-
|
|
1284
|
-
aria-label={isSidebarCollapsed
|
|
1285
|
-
? mergedMessages.layout.expandSidebar
|
|
1286
|
-
: mergedMessages.layout.collapseSidebar}
|
|
1287
|
-
title={isSidebarCollapsed
|
|
1280
|
+
label={isSidebarCollapsed
|
|
1288
1281
|
? mergedMessages.layout.expandSidebar
|
|
1289
1282
|
: mergedMessages.layout.collapseSidebar}
|
|
1283
|
+
active={!isSidebarCollapsed}
|
|
1284
|
+
onclick={toggleSidebar}
|
|
1290
1285
|
>
|
|
1291
|
-
|
|
1292
|
-
|
|
1286
|
+
{#snippet icon()}
|
|
1287
|
+
{#if isSidebarCollapsed}
|
|
1288
|
+
<MenuIcon />
|
|
1289
|
+
{:else}
|
|
1290
|
+
<MenuOpenIcon />
|
|
1291
|
+
{/if}
|
|
1292
|
+
{/snippet}
|
|
1293
|
+
</CanvasIconButton>
|
|
1293
1294
|
{/if}
|
|
1294
1295
|
|
|
1295
1296
|
<WorkflowEditor
|
|
@@ -1300,6 +1301,8 @@
|
|
|
1300
1301
|
{mode}
|
|
1301
1302
|
{pipelineId}
|
|
1302
1303
|
{refreshTrigger}
|
|
1304
|
+
builtinEditors={features.builtinEditors}
|
|
1305
|
+
gridVariant={themeConfig?.canvas?.grid ?? 'dots'}
|
|
1303
1306
|
consoleOpen={getUiSettings().consoleOpen}
|
|
1304
1307
|
onToggleConsole={toggleConsole}
|
|
1305
1308
|
/>
|
|
@@ -1412,38 +1415,11 @@
|
|
|
1412
1415
|
font-weight: 500;
|
|
1413
1416
|
}
|
|
1414
1417
|
|
|
1415
|
-
/* Floating sidebar toggle button */
|
|
1416
|
-
.flowdrop-sidebar-fab {
|
|
1417
|
-
position: absolute;
|
|
1418
|
+
/* Floating sidebar toggle button — placement only; visuals live in CanvasIconButton */
|
|
1419
|
+
:global(.flowdrop-sidebar-fab) {
|
|
1418
1420
|
top: 12px;
|
|
1419
1421
|
left: 12px;
|
|
1420
1422
|
z-index: 50;
|
|
1421
|
-
display: flex;
|
|
1422
|
-
align-items: center;
|
|
1423
|
-
justify-content: center;
|
|
1424
|
-
width: 2.25rem;
|
|
1425
|
-
height: 2.25rem;
|
|
1426
|
-
border: 1px solid var(--fd-border);
|
|
1427
|
-
border-radius: var(--fd-radius-md);
|
|
1428
|
-
background-color: var(--fd-background);
|
|
1429
|
-
color: var(--fd-muted-foreground);
|
|
1430
|
-
cursor: pointer;
|
|
1431
|
-
box-shadow: var(--fd-shadow-md);
|
|
1432
|
-
transition:
|
|
1433
|
-
color var(--fd-transition-fast),
|
|
1434
|
-
background-color var(--fd-transition-fast),
|
|
1435
|
-
box-shadow var(--fd-transition-fast);
|
|
1436
|
-
}
|
|
1437
|
-
|
|
1438
|
-
.flowdrop-sidebar-fab:hover {
|
|
1439
|
-
color: var(--fd-foreground);
|
|
1440
|
-
background-color: var(--fd-subtle);
|
|
1441
|
-
box-shadow: var(--fd-shadow-lg);
|
|
1442
|
-
}
|
|
1443
|
-
|
|
1444
|
-
.flowdrop-sidebar-fab:focus {
|
|
1445
|
-
outline: none;
|
|
1446
|
-
box-shadow: 0 0 0 2px var(--fd-ring);
|
|
1447
1423
|
}
|
|
1448
1424
|
|
|
1449
1425
|
/* Main editor area */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { NavbarAction } from '../types/navbar.js';
|
|
1
2
|
import type { NodeMetadata, Workflow, ConfigSchema } from '../types/index.js';
|
|
2
3
|
import type { SwapStrategy } from '../utils/nodeSwap.js';
|
|
3
4
|
import type { EndpointConfig } from '../config/endpoints.js';
|
|
@@ -53,13 +54,7 @@ interface Props {
|
|
|
53
54
|
/** Custom navbar title */
|
|
54
55
|
navbarTitle?: string;
|
|
55
56
|
/** Custom navbar actions */
|
|
56
|
-
navbarActions?:
|
|
57
|
-
label: string;
|
|
58
|
-
href: string;
|
|
59
|
-
icon?: string;
|
|
60
|
-
variant?: 'primary' | 'secondary' | 'outline';
|
|
61
|
-
onclick?: (event: Event) => void;
|
|
62
|
-
}>;
|
|
57
|
+
navbarActions?: NavbarAction[];
|
|
63
58
|
/** Show settings gear icon in navbar */
|
|
64
59
|
showSettings?: boolean;
|
|
65
60
|
/** Show the "Connected" status indicator in the navbar (default: true) */
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
/**
|
|
6
|
+
* The icon to render — an inline-SVG snippet (offline-safe). Pass a local
|
|
7
|
+
* icon component from `$lib/components/icons/`, not a network-fetched one.
|
|
8
|
+
*/
|
|
9
|
+
icon: Snippet;
|
|
10
|
+
/** Accessible label — drives both aria-label and the hover title. */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Renders the active/toggled-on visual state (e.g. the panel it controls is open). */
|
|
13
|
+
active?: boolean;
|
|
14
|
+
onclick: () => void;
|
|
15
|
+
/** Caller-supplied class for positioning (top/left/bottom/z-index). */
|
|
16
|
+
class?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let { icon, label, active = false, onclick, class: klass = '' }: Props = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<button
|
|
23
|
+
class="flowdrop-canvas-btn {klass}"
|
|
24
|
+
class:flowdrop-canvas-btn--active={active}
|
|
25
|
+
{onclick}
|
|
26
|
+
aria-label={label}
|
|
27
|
+
title={label}
|
|
28
|
+
type="button"
|
|
29
|
+
>
|
|
30
|
+
{@render icon()}
|
|
31
|
+
</button>
|
|
32
|
+
|
|
33
|
+
<style>
|
|
34
|
+
.flowdrop-canvas-btn {
|
|
35
|
+
position: absolute;
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
width: 2.25rem;
|
|
40
|
+
height: 2.25rem;
|
|
41
|
+
border: 1px solid var(--fd-border);
|
|
42
|
+
border-radius: var(--fd-radius-md);
|
|
43
|
+
background-color: var(--fd-background);
|
|
44
|
+
color: var(--fd-muted-foreground);
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
box-shadow: var(--fd-shadow-md);
|
|
47
|
+
transition:
|
|
48
|
+
color var(--fd-transition-fast),
|
|
49
|
+
background-color var(--fd-transition-fast),
|
|
50
|
+
box-shadow var(--fd-transition-fast),
|
|
51
|
+
border-color var(--fd-transition-fast);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Size whatever inline SVG the caller renders. */
|
|
55
|
+
.flowdrop-canvas-btn :global(svg) {
|
|
56
|
+
width: 18px;
|
|
57
|
+
height: 18px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.flowdrop-canvas-btn:hover {
|
|
61
|
+
color: var(--fd-foreground);
|
|
62
|
+
background-color: var(--fd-subtle);
|
|
63
|
+
box-shadow: var(--fd-shadow-lg);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.flowdrop-canvas-btn--active {
|
|
67
|
+
color: var(--fd-primary);
|
|
68
|
+
background-color: var(--fd-primary-muted);
|
|
69
|
+
border-color: var(--fd-primary);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.flowdrop-canvas-btn--active:hover {
|
|
73
|
+
color: var(--fd-primary);
|
|
74
|
+
background-color: var(--fd-primary-muted);
|
|
75
|
+
}
|
|
76
|
+
</style>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
/**
|
|
4
|
+
* The icon to render — an inline-SVG snippet (offline-safe). Pass a local
|
|
5
|
+
* icon component from `$lib/components/icons/`, not a network-fetched one.
|
|
6
|
+
*/
|
|
7
|
+
icon: Snippet;
|
|
8
|
+
/** Accessible label — drives both aria-label and the hover title. */
|
|
9
|
+
label: string;
|
|
10
|
+
/** Renders the active/toggled-on visual state (e.g. the panel it controls is open). */
|
|
11
|
+
active?: boolean;
|
|
12
|
+
onclick: () => void;
|
|
13
|
+
/** Caller-supplied class for positioning (top/left/bottom/z-index). */
|
|
14
|
+
class?: string;
|
|
15
|
+
}
|
|
16
|
+
declare const CanvasIconButton: import("svelte").Component<Props, {}, "">;
|
|
17
|
+
type CanvasIconButton = ReturnType<typeof CanvasIconButton>;
|
|
18
|
+
export default CanvasIconButton;
|
|
@@ -1073,11 +1073,6 @@
|
|
|
1073
1073
|
color: var(--fd-foreground);
|
|
1074
1074
|
}
|
|
1075
1075
|
|
|
1076
|
-
.config-form__button--secondary:focus-visible {
|
|
1077
|
-
outline: none;
|
|
1078
|
-
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
1076
|
.config-form__button--primary {
|
|
1082
1077
|
background: linear-gradient(135deg, var(--fd-primary) 0%, var(--fd-primary-hover) 100%);
|
|
1083
1078
|
color: var(--fd-primary-foreground);
|
|
@@ -1098,13 +1093,6 @@
|
|
|
1098
1093
|
transform: translateY(0);
|
|
1099
1094
|
}
|
|
1100
1095
|
|
|
1101
|
-
.config-form__button--primary:focus-visible {
|
|
1102
|
-
outline: none;
|
|
1103
|
-
box-shadow:
|
|
1104
|
-
0 0 0 3px rgba(59, 130, 246, 0.4),
|
|
1105
|
-
0 4px 12px rgba(59, 130, 246, 0.35);
|
|
1106
|
-
}
|
|
1107
|
-
|
|
1108
1096
|
/* ============================================
|
|
1109
1097
|
UI EXTENSIONS SECTION
|
|
1110
1098
|
============================================ */
|
|
@@ -1559,11 +1547,4 @@
|
|
|
1559
1547
|
.config-form__button--external:active {
|
|
1560
1548
|
transform: translateY(0);
|
|
1561
1549
|
}
|
|
1562
|
-
|
|
1563
|
-
.config-form__button--external:focus-visible {
|
|
1564
|
-
outline: none;
|
|
1565
|
-
box-shadow:
|
|
1566
|
-
0 0 0 3px rgba(99, 102, 241, 0.4),
|
|
1567
|
-
0 4px 12px rgba(99, 102, 241, 0.35);
|
|
1568
|
-
}
|
|
1569
1550
|
</style>
|
|
@@ -110,7 +110,8 @@
|
|
|
110
110
|
height: 100%;
|
|
111
111
|
display: flex;
|
|
112
112
|
flex-direction: column;
|
|
113
|
-
background-color: var(--fd-
|
|
113
|
+
background-color: var(--fd-panel-bg);
|
|
114
|
+
backdrop-filter: var(--fd-panel-backdrop-filter);
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
.config-panel__header {
|
|
@@ -119,7 +120,7 @@
|
|
|
119
120
|
align-items: center;
|
|
120
121
|
padding: 0.875rem 1rem;
|
|
121
122
|
border-bottom: 1px solid var(--fd-border);
|
|
122
|
-
background-color: var(--fd-
|
|
123
|
+
background-color: var(--fd-card);
|
|
123
124
|
flex-shrink: 0;
|
|
124
125
|
}
|
|
125
126
|
|
|
@@ -180,7 +181,7 @@
|
|
|
180
181
|
.config-panel__details {
|
|
181
182
|
padding: 0.75rem 1rem;
|
|
182
183
|
border-bottom: 1px solid var(--fd-border-muted);
|
|
183
|
-
background-color: var(--fd-
|
|
184
|
+
background-color: var(--fd-card);
|
|
184
185
|
flex-shrink: 0;
|
|
185
186
|
}
|
|
186
187
|
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
FlowDrop horizontal lockup: rocket mark + "FlowDrop" wordmark.
|
|
3
|
+
Theme-aware via the same --fd-logo-* variables as Logo.svelte, plus
|
|
4
|
+
--fd-logo-text for the wordmark glyphs.
|
|
5
|
+
-->
|
|
6
|
+
<div class="flowdrop-logo-wordmark">
|
|
7
|
+
<svg viewBox="0 0 2500 499.99999" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
8
|
+
<g transform="translate(472.2413,571.30469)">
|
|
9
|
+
<g transform="matrix(1.2053353,0,0,1.2053353,-1246.7763,-599.46548)">
|
|
10
|
+
<path
|
|
11
|
+
style="fill:var(--logo-line-fill);stroke-width:10;stroke-dasharray:none"
|
|
12
|
+
d="M 850,120 V 310 Z"
|
|
13
|
+
/>
|
|
14
|
+
<path
|
|
15
|
+
style="fill:var(--logo-line-fill);stroke:var(--logo-stroke);stroke-width:16.59289328;stroke-dasharray:none;stroke-opacity:1"
|
|
16
|
+
d="M 850,110 V 310"
|
|
17
|
+
/>
|
|
18
|
+
<path
|
|
19
|
+
style="fill:none;stroke:var(--logo-stroke);stroke-width:14.98546028;stroke-dasharray:none;stroke-opacity:1"
|
|
20
|
+
d="m 850,158.973 v 36.70355 8.15635 c 0,0 1.19184,39.5038 -36.01255,65.25076 -29.46481,20.39086 -52.3819,16.31269 -55.65576,65.25076 v 44.8599"
|
|
21
|
+
/>
|
|
22
|
+
<path
|
|
23
|
+
style="fill:none;stroke:var(--logo-stroke);stroke-width:15.05060005;stroke-dasharray:none;stroke-opacity:1"
|
|
24
|
+
d="m 850,158.973 v 37.02335 8.22741 c 0,0 -1.19184,39.84799 36.01255,65.81929 29.46481,20.56853 52.3819,16.45482 55.65576,65.81929 v 45.25076"
|
|
25
|
+
/>
|
|
26
|
+
<path
|
|
27
|
+
d="m 849.41763,64.456369 25.36824,31.087262 c 6.23336,6.364119 10.06921,15.063569 10.06921,24.656839 0,19.50109 -15.85132,35.30988 -35.42373,35.30988 -19.57241,0 -35.43242,-15.80879 -35.43242,-35.30988 0,-9.49405 3.75813,-18.11351 9.87536,-24.458879 z"
|
|
28
|
+
style="fill:var(--logo-drop);stroke:var(--logo-stroke);stroke-width:16.59289932;stroke-dasharray:none;paint-order:fill"
|
|
29
|
+
/>
|
|
30
|
+
<circle
|
|
31
|
+
style="fill:var(--logo-circle);stroke:var(--logo-stroke);stroke-width:16.59289932;stroke-dasharray:none"
|
|
32
|
+
cx="849.427"
|
|
33
|
+
cy="326.5929"
|
|
34
|
+
r="30"
|
|
35
|
+
/>
|
|
36
|
+
<ellipse
|
|
37
|
+
style="fill:var(--logo-left);stroke:var(--logo-stroke);stroke-width:16.59289932;stroke-dasharray:none"
|
|
38
|
+
cx="759.99994"
|
|
39
|
+
cy="369.44669"
|
|
40
|
+
rx="29.999952"
|
|
41
|
+
ry="30.000004"
|
|
42
|
+
/>
|
|
43
|
+
<ellipse
|
|
44
|
+
style="fill:var(--logo-right);stroke:var(--logo-stroke);stroke-width:16.59289932;stroke-dasharray:none"
|
|
45
|
+
cx="939.99963"
|
|
46
|
+
cy="369.44669"
|
|
47
|
+
rx="29.999952"
|
|
48
|
+
ry="30.000004"
|
|
49
|
+
/>
|
|
50
|
+
</g>
|
|
51
|
+
</g>
|
|
52
|
+
<g aria-label="FlowDrop" style="font-size:400.327px;fill:var(--logo-text);stroke-width:10.4252">
|
|
53
|
+
<path
|
|
54
|
+
d="M 710.85926,99.779646 V 116.59025 H 584.38877 v 92.65381 h 91.48097 v 16.81061 H 584.38877 V 358.97574 H 540.79848 V 99.779646 Z"
|
|
55
|
+
style="fill:var(--logo-text)"
|
|
56
|
+
/>
|
|
57
|
+
<path
|
|
58
|
+
d="M 788.07077,358.97574 H 748.19445 V 68.113156 L 776.53791,56.77577 h 11.53286 z"
|
|
59
|
+
style="fill:var(--logo-text)"
|
|
60
|
+
/>
|
|
61
|
+
<path
|
|
62
|
+
d="m 950.50815,363.27613 q -23.06571,0 -42.41746,-8.01436 -19.35174,-8.01436 -33.42574,-21.69741 -14.07399,-13.87853 -22.08835,-32.25291 -7.81889,-18.56986 -7.81889,-39.68085 0,-22.08835 7.81889,-41.4401 8.01436,-19.54722 22.08835,-34.01216 14.074,-14.46494 33.42574,-22.67477 19.35175,-8.4053 42.41746,-8.4053 22.87025,0 42.02652,7.62341 19.35173,7.62342 33.42573,20.91553 14.074,13.2921 21.8929,31.27554 8.0144,17.78797 8.0144,38.31255 0,22.67477 -8.0144,42.8084 -7.8189,19.93816 -21.8929,34.98952 -14.074,14.85588 -33.42573,23.65213 -19.15627,8.60078 -42.02652,8.60078 z m 7.62342,-14.66042 q 11.72833,0 21.50194,-6.05963 9.77361,-6.05964 16.8106,-16.22419 7.03699,-10.36003 10.94649,-23.84761 3.9094,-13.48758 3.9094,-28.53893 0,-21.69741 -3.714,-40.65821 -3.7139,-18.9608 -12.11925,-33.0348 -8.4053,-14.074 -21.89288,-22.08835 -13.48758,-8.20984 -32.83932,-8.20984 -9.96908,0 -19.35175,5.86417 -9.38266,5.66869 -16.61513,15.63777 -7.037,9.96908 -11.33739,23.45666 -4.30039,13.29211 -4.30039,28.34347 0,21.89288 4.49586,41.04915 4.69134,19.15627 13.48758,33.42574 8.99172,14.26947 21.69741,22.67477 12.90117,8.20983 29.32083,8.20983 z"
|
|
63
|
+
style="fill:var(--logo-text)"
|
|
64
|
+
/>
|
|
65
|
+
<path
|
|
66
|
+
d="m 1122.7191,158.81224 63.333,146.21318 62.7465,-146.21318 63.1375,146.21318 55.9051,-146.21318 h 19.1563 l -81.7074,202.31369 h -13.4876 l -55.905,-130.77088 -56.1005,130.77088 h -12.3148 l -87.5715,-202.31369 z"
|
|
67
|
+
style="fill:var(--logo-text)"
|
|
68
|
+
/>
|
|
69
|
+
<path
|
|
70
|
+
d="m 1424.9191,99.779646 h 86.3987 q 39.8763,0 68.6107,7.427944 28.7345,7.42794 47.8907,23.8476 21.8929,18.76533 32.8394,43.00388 11.1419,24.23855 11.1419,52.97296 0,27.3661 -9.9691,51.40918 -9.7736,24.04307 -28.9299,42.02651 -18.9608,17.78797 -47.1088,28.14799 -27.9525,10.36003 -64.1149,10.36003 h -96.7587 z m 43.5903,240.235294 h 46.3269 q 21.8929,0 41.2446,-7.23247 19.3518,-7.23247 33.6213,-21.50194 14.4649,-14.26947 22.6747,-34.98952 8.4053,-20.91552 8.4053,-48.28162 0,-24.04308 -7.8189,-43.98124 -7.8188,-20.13363 -21.8928,-34.59857 -14.074,-14.46494 -33.6213,-22.4793 -19.3517,-8.01436 -42.4174,-8.01436 h -46.5224 z"
|
|
71
|
+
style="fill:var(--logo-text)"
|
|
72
|
+
/>
|
|
73
|
+
<path
|
|
74
|
+
d="m 1758.7855,155.09827 h 6.0597 l 5.2777,40.85368 q 4.6914,-8.99172 11.7283,-16.41966 7.037,-7.42794 15.4424,-12.90116 8.6007,-5.47322 17.9834,-8.40531 9.5781,-3.12755 19.3517,-3.12755 8.7963,0 17.2016,2.34567 8.6008,2.34566 16.0287,7.42794 l -12.5102,33.42574 q -3.9095,-4.30039 -8.2098,-6.84153 -4.3004,-2.73661 -8.7963,-4.10491 -4.4959,-1.56378 -9.1872,-1.95472 -4.6913,-0.39095 -9.3827,-0.39095 -7.4279,0 -14.6604,2.15019 -7.037,2.1502 -13.4875,6.45059 -6.4506,4.10491 -11.9238,10.75097 -5.4733,6.45058 -9.5782,15.24682 v 139.37166 h -39.6808 V 166.04471 Z"
|
|
75
|
+
style="fill:var(--logo-text)"
|
|
76
|
+
/>
|
|
77
|
+
<path
|
|
78
|
+
d="m 1995.6979,363.27613 q -23.0658,0 -42.4175,-8.01436 -19.3518,-8.01436 -33.4257,-21.69741 -14.074,-13.87853 -22.0884,-32.25291 -7.8189,-18.56986 -7.8189,-39.68085 0,-22.08835 7.8189,-41.4401 8.0144,-19.54722 22.0884,-34.01216 14.0739,-14.46494 33.4257,-22.67477 19.3517,-8.4053 42.4175,-8.4053 22.8702,0 42.0265,7.62341 19.3517,7.62342 33.4257,20.91553 14.074,13.2921 21.8929,31.27554 8.0143,17.78797 8.0143,38.31255 0,22.67477 -8.0143,42.8084 -7.8189,19.93816 -21.8929,34.98952 -14.074,14.85588 -33.4257,23.65213 -19.1563,8.60078 -42.0265,8.60078 z m 7.6234,-14.66042 q 11.7283,0 21.5019,-6.05963 9.7736,-6.05964 16.8106,-16.22419 7.037,-10.36003 10.9465,-23.84761 3.9094,-13.48758 3.9094,-28.53893 0,-21.69741 -3.714,-40.65821 -3.7139,-18.9608 -12.1192,-33.0348 -8.4054,-14.074 -21.8929,-22.08835 -13.4876,-8.20984 -32.8394,-8.20984 -9.969,0 -19.3517,5.86417 -9.3827,5.66869 -16.6151,15.63777 -7.037,9.96908 -11.3374,23.45666 -4.3004,13.29211 -4.3004,28.34347 0,21.89288 4.4959,41.04915 4.6913,19.15627 13.4875,33.42574 8.9918,14.26947 21.6974,22.67477 12.9012,8.20983 29.3209,8.20983 z"
|
|
79
|
+
style="fill:var(--logo-text)"
|
|
80
|
+
/>
|
|
81
|
+
<path
|
|
82
|
+
d="m 2186.0877,155.09827 h 11.3374 v 44.9586 q 6.0596,-7.62342 13.2921,-15.63778 7.4279,-8.01435 16.2242,-14.46494 8.9917,-6.64605 19.7427,-10.75097 10.7509,-4.10491 23.4566,-4.10491 17.788,0 32.2529,7.42794 14.465,7.42794 24.6295,20.13363 10.3601,12.7057 15.8333,29.90725 5.6687,17.00607 5.6687,36.35782 0,24.82496 -6.8416,45.93596 -6.8415,20.91552 -19.5472,36.16235 -12.7057,15.24683 -30.8846,23.8476 -18.1789,8.40531 -40.6582,8.40531 -8.2098,0 -15.4423,-0.97736 -7.037,-0.78189 -13.4876,-2.54114 -6.2551,-1.75925 -12.3147,-4.49586 -5.8642,-2.73661 -11.9238,-6.64606 v 94.60853 h -39.8763 V 166.24018 Z m 11.3374,149.92715 q 0,8.99172 3.9094,17.00608 3.9095,7.81889 10.9465,13.87852 7.037,5.86417 16.8106,9.38267 9.7736,3.32302 21.5019,3.32302 11.1419,0 20.9155,-5.66869 9.9691,-5.66869 17.2016,-16.02872 7.4279,-10.55549 11.5328,-25.02043 4.3004,-14.46494 4.3004,-32.05744 0,-22.08835 -3.9094,-38.50802 -3.9095,-16.61513 -10.9465,-27.56157 -6.8415,-10.94644 -16.4196,-16.41966 -9.3827,-5.47322 -20.7201,-5.47322 -8.6007,0 -16.6151,2.73661 -7.8189,2.54113 -14.8559,7.03699 -7.037,4.49586 -13.0966,10.36003 -5.8642,5.86416 -10.5555,12.31475 z"
|
|
83
|
+
style="fill:var(--logo-text)"
|
|
84
|
+
/>
|
|
85
|
+
</g>
|
|
86
|
+
</svg>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<style>
|
|
90
|
+
.flowdrop-logo-wordmark {
|
|
91
|
+
--logo-stroke: var(--fd-logo-stroke, #000000);
|
|
92
|
+
--logo-text: var(--fd-logo-text, #000000);
|
|
93
|
+
--logo-line-fill: var(--fd-logo-line-fill, #000000);
|
|
94
|
+
--logo-drop: var(--fd-logo-drop, #009cde);
|
|
95
|
+
--logo-circle: var(--fd-logo-circle, #f46351);
|
|
96
|
+
--logo-left: var(--fd-logo-left, #ccbaf4);
|
|
97
|
+
--logo-right: var(--fd-logo-right, #ffc423);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:global([data-theme='dark']) .flowdrop-logo-wordmark {
|
|
101
|
+
/* Stroke, wordmark, and the center line go white in dark; the brand-color
|
|
102
|
+
dots (drop/circle/left/right) keep their fills, same as light mode. */
|
|
103
|
+
--logo-stroke: var(--fd-logo-stroke, #ffffff);
|
|
104
|
+
--logo-text: var(--fd-logo-text, #ffffff);
|
|
105
|
+
--logo-line-fill: var(--fd-logo-line-fill, #ffffff);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.flowdrop-logo-wordmark :global(svg) {
|
|
109
|
+
display: block;
|
|
110
|
+
width: 100%;
|
|
111
|
+
height: 100%;
|
|
112
|
+
}
|
|
113
|
+
</style>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default LogoWordmark;
|
|
2
|
+
type LogoWordmark = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const LogoWordmark: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<script lang="ts">
|
|
10
10
|
import Icon from '@iconify/svelte';
|
|
11
|
-
import
|
|
11
|
+
import LogoWordmark from './LogoWordmark.svelte';
|
|
12
12
|
import SettingsModal from './SettingsModal.svelte';
|
|
13
13
|
import type { SettingsCategory } from '../types/settings.js';
|
|
14
14
|
import type { NavbarAction } from '../types/navbar.js';
|
|
@@ -97,16 +97,10 @@
|
|
|
97
97
|
|
|
98
98
|
<div class="flowdrop-navbar">
|
|
99
99
|
<div class="flowdrop-navbar__start">
|
|
100
|
-
<!-- Logo
|
|
100
|
+
<!-- Logo (rocket + FlowDrop wordmark) -->
|
|
101
101
|
<div class="flowdrop-logo--container">
|
|
102
|
-
<div class="flowdrop-
|
|
103
|
-
<
|
|
104
|
-
<Logo />
|
|
105
|
-
</div>
|
|
106
|
-
<div>
|
|
107
|
-
<h1 class="flowdrop-text--logo flowdrop-font--bold">{nav.appName}</h1>
|
|
108
|
-
<p class="flowdrop-text--tagline flowdrop-text--gray">{nav.tagline}</p>
|
|
109
|
-
</div>
|
|
102
|
+
<div class="flowdrop-logo--header">
|
|
103
|
+
<LogoWordmark />
|
|
110
104
|
</div>
|
|
111
105
|
</div>
|
|
112
106
|
</div>
|
|
@@ -331,10 +325,10 @@
|
|
|
331
325
|
}
|
|
332
326
|
|
|
333
327
|
.flowdrop-logo--header {
|
|
334
|
-
|
|
335
|
-
height:
|
|
336
|
-
|
|
337
|
-
padding: 2px;
|
|
328
|
+
/* Wordmark lockup is 5:1; keep it within the start column. */
|
|
329
|
+
height: 32px;
|
|
330
|
+
width: 160px;
|
|
331
|
+
padding: 2px 0;
|
|
338
332
|
}
|
|
339
333
|
|
|
340
334
|
.flowdrop-navbar__center {
|
|
@@ -724,11 +718,6 @@
|
|
|
724
718
|
border-color: var(--fd-border-strong);
|
|
725
719
|
}
|
|
726
720
|
|
|
727
|
-
.flowdrop-navbar__settings-btn:focus {
|
|
728
|
-
outline: none;
|
|
729
|
-
box-shadow: 0 0 0 2px var(--fd-ring);
|
|
730
|
-
}
|
|
731
|
-
|
|
732
721
|
.flowdrop-navbar__settings-btn:active {
|
|
733
722
|
transform: scale(0.95);
|
|
734
723
|
}
|
|
@@ -753,38 +742,6 @@
|
|
|
753
742
|
background-color: var(--fd-success);
|
|
754
743
|
}
|
|
755
744
|
|
|
756
|
-
/* Utility classes */
|
|
757
|
-
.flowdrop-flex {
|
|
758
|
-
display: flex;
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
.flowdrop-gap--3 {
|
|
762
|
-
gap: 0.75rem;
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
.flowdrop-text--logo {
|
|
766
|
-
font-size: 1.125rem;
|
|
767
|
-
line-height: 0;
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
.flowdrop-text--tagline {
|
|
771
|
-
font-size: var(--fd-text-xs);
|
|
772
|
-
line-height: 0.5rem;
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
.flowdrop-text--xs {
|
|
776
|
-
font-size: var(--fd-text-xs);
|
|
777
|
-
line-height: 1rem;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
.flowdrop-text--gray {
|
|
781
|
-
color: var(--fd-muted-foreground);
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
.flowdrop-font--bold {
|
|
785
|
-
font-weight: 700;
|
|
786
|
-
}
|
|
787
|
-
|
|
788
745
|
/* Responsive design */
|
|
789
746
|
@media (max-width: 768px) {
|
|
790
747
|
.flowdrop-navbar {
|
|
@@ -834,14 +791,6 @@
|
|
|
834
791
|
border-radius: var(--fd-radius-md) 0 0 var(--fd-radius-md);
|
|
835
792
|
}
|
|
836
793
|
|
|
837
|
-
.flowdrop-text--logo {
|
|
838
|
-
display: none;
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
.flowdrop-text--tagline {
|
|
842
|
-
display: none;
|
|
843
|
-
}
|
|
844
|
-
|
|
845
794
|
.flowdrop-navbar__title-text {
|
|
846
795
|
font-size: 0.875rem;
|
|
847
796
|
max-width: 300px;
|
|
@@ -408,7 +408,8 @@
|
|
|
408
408
|
/* Components Sidebar - Always Visible */
|
|
409
409
|
.flowdrop-sidebar {
|
|
410
410
|
height: calc(100vh - var(--fd-navbar-height)); /* Account for navbar height */
|
|
411
|
-
background-color: var(--fd-
|
|
411
|
+
background-color: var(--fd-panel-bg);
|
|
412
|
+
backdrop-filter: var(--fd-panel-backdrop-filter);
|
|
412
413
|
border-right: 1px solid var(--fd-border);
|
|
413
414
|
display: flex;
|
|
414
415
|
flex-direction: column;
|
|
@@ -460,7 +461,7 @@
|
|
|
460
461
|
|
|
461
462
|
.flowdrop-sidebar__search {
|
|
462
463
|
padding: 0.75rem 1rem;
|
|
463
|
-
background-color:
|
|
464
|
+
background-color: transparent;
|
|
464
465
|
border-bottom: 1px solid var(--fd-border);
|
|
465
466
|
display: var(--fd-sidebar-search-display, block);
|
|
466
467
|
}
|
|
@@ -485,7 +486,7 @@
|
|
|
485
486
|
|
|
486
487
|
.flowdrop-sidebar__content::-webkit-scrollbar-thumb {
|
|
487
488
|
background: var(--fd-scrollbar-thumb);
|
|
488
|
-
border-radius:
|
|
489
|
+
border-radius: var(--fd-scrollbar-radius);
|
|
489
490
|
min-height: 20px; /* Ensure thumb has minimum height for visibility */
|
|
490
491
|
}
|
|
491
492
|
|
|
@@ -610,9 +611,7 @@
|
|
|
610
611
|
}
|
|
611
612
|
|
|
612
613
|
.flowdrop-input:focus {
|
|
613
|
-
outline: none;
|
|
614
614
|
border-color: var(--fd-ring);
|
|
615
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--fd-ring) 20%, transparent);
|
|
616
615
|
}
|
|
617
616
|
|
|
618
617
|
.flowdrop-input::placeholder {
|
|
@@ -648,11 +647,6 @@
|
|
|
648
647
|
border-color: var(--fd-muted-foreground);
|
|
649
648
|
}
|
|
650
649
|
|
|
651
|
-
.flowdrop-btn:focus {
|
|
652
|
-
outline: none;
|
|
653
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--fd-ring) 20%, transparent);
|
|
654
|
-
}
|
|
655
|
-
|
|
656
650
|
.flowdrop-btn:disabled {
|
|
657
651
|
background-color: var(--fd-muted-foreground);
|
|
658
652
|
border-color: var(--fd-muted-foreground);
|
|
@@ -693,7 +687,6 @@
|
|
|
693
687
|
|
|
694
688
|
.flowdrop-join:focus-within {
|
|
695
689
|
border-color: var(--fd-ring);
|
|
696
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--fd-ring) 20%, transparent);
|
|
697
690
|
}
|
|
698
691
|
|
|
699
692
|
/* Utility classes */
|