* feat: universal styled markdown code blocks with copy button and subtle scrollbar
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(sessions): use the shared DraggableTabs for the preview tab strip
The session preview tabs were bespoke markup; converge them onto the same
DraggableTabs component the raw-app editor uses, gaining drag-reorder and
keyboard nav. The active tab keeps its breadcrumb/router picker via a new
tabAccessory snippet, and tabs persist their new order.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(sessions): keep the new-tab + button right after the last tab
Add an afterTabs snippet to DraggableTabs that renders inside the scroll row
after the tabs (unlike trailing, which stays pinned outside it), and move the
session preview "+" there so it sits next to the last tab.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(tabs): use the subtle ScrollableX scrollbar for Tabs/TabsV2 headers
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* style(sessions): use bg-surface for the preview tab strip
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* style(tabs): add subtle shadow-sm to the selected DraggableTabs tab
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* style(tabs): drop selected-tab shadow; session strip bg-surface-secondary/50
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* style(sessions): drop persistent bg on preview bar buttons, hover-only
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(scrollbar): share a .scrollbar-subtle utility across tabs and chat
Extract ScrollableX's hover-revealed scrollbar styling into a global
.scrollbar-subtle utility (both axes, size via --wm-scrollbar-size), have
ScrollableX consume it, and apply it to the AI chat message list so the chat
scrollbar matches the tabs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: address review — scope HighlightCode copy button, plaintext unknown fences, Tailwind ScrollableX
- HighlightCode: keep the subtle CopyButton + surface chip behind buttonsOnHover
so the ~20 non-markdown callers keep the original light copy Button.
- MarkdownCodeBlock: unlabeled/unknown fences render as plaintext instead of
being mis-colored as TypeScript; added common language aliases (ts/js/py/...)
so real languages still highlight.
- ScrollableX: replace the custom <style> block with Tailwind overflow classes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* style: make chat and session-sidebar typing dots slightly smaller
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: address auto-review — powershell fence to plaintext + reorder tests
- MarkdownCodeBlock: drop 'powershell' from the sql group so it renders
plaintext instead of SQL-colored (no powershell highlighter in the map).
- sessionPreviewTabs.test.ts: cover reorder (reorders+persists, ignores
unknown ids / keeps omitted at end, no-op when unchanged).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: keep scrollbar-hidden on Tabs row as TroubleshootFlowTutorial selector hook
codex-review: removing scrollbar-hidden broke the tutorial's '.border-b.flex
.flex-row.whitespace-nowrap.scrollbar-hidden.mx-auto' selector. The class is
inert on the non-scrolling row (ScrollableX owns the scroll) but is kept as the
tutorial's stable hook.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: preserve raw <pre> content in MarkdownCodeBlock (codex-review)
As the universal pre renderer, MarkdownCodeBlock also handles sanitized raw
HTML <pre>text</pre> from rehypeRaw, where the text is a direct child of <pre>
(no <code>). Fall back to that text child so raw pre content isn't dropped to
an empty block. Kitchen-sink sample gains a raw <pre> case.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat: add fuzzy search to instance settings sidebar
Adds a search input at the top of the superadmin settings sidebar that
uses uFuzzy for fuzzy matching against all setting labels, descriptions,
and categories. Selecting a result navigates to the correct tab and
scrolls to the specific setting card with a brief highlight.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: improve settings search display and description matching
- Extract only the label portion from uFuzzy highlighted text for
cleaner dropdown display
- Show description only when the match is in the description and NOT
in the label
- Truncate descriptions to 80 chars in searchable items
- Add maxHeight prop to SelectDropdown for configurable height
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: fix search description truncation and handle undefined marked values
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: remove description from settings search dropdown
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add smooth outline transition for setting highlight animation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: highlight first search result by default for enter-to-select
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* nit
* clean code
* fix: address review feedback - sanitize html, remove max-w-40, document description field
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: constrain search dropdown width to prevent long title overflow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* perf: add 150ms debounce to settings search filter
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: clean up timeouts on destroy and re-invocation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: extract settings search into reusable SettingsSearchInput component
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: use twMerge for class prop in SettingsSearchInput
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: wrap debounced state write in untrack to prevent re-triggering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* data tables settings ui
* install runed
* zod 4 fixes
* use new toJSONSchema
* Migrate ducklake catalogs to more generic custom instance databases
* fix compilation
* Safety conversion for old duckdb ffi
* data tables settings
* ts client basis
* inline run works
* datatables work
* Revert "datatables work"
This reverts commit 6e1588d59e.
* datatables work (without leaking pg credentials)
* println
* separate sqlUtils.ts
* nit
* Separate custom instance db Select and Wizard components
* nit
* nit wording
* add tags to custom instance dbs
* error when trying to use ducklake as datatable or opposite
* show status in dropdown
* data table instance setup works
* sqk function for ducklake
* factorize logic
* fix temp reactivity
* Data table assetexplore
* Migrate S3 permissions to modal
* Revert "Migrate S3 permissions to modal"
This reverts commit 0631d03cb0.
* nit query -> fetch
* Custom instance setup new look
* run_language_executor separate fn
* run_inline param
* nit wording
* Better typed client
* Data tables display as assets in frontend
* asset db icon
* nit
* cleaner errors
* nit
* Fix sed calls in mac
* run_inline_script_preview in python client
* basic python datatable client
* datatable and datalake parser in python
* ducklake client python
* nit fix
* Fix migration producing NULL instead of {} when no custom databases
* merge conflict fail
* python ducklake client arg fix
* parse or infer sql types in ts client
* ts asset parser, detect datatable & ducklake R/W
* fix sql repl for other read ops than select
* export type SqlTemplateFunction
* rename list_custom_instance_pg_databases
* typecheck datatable and ducklake name in Typescript
* Fix typecheck datatable and ducklake in TS
* declare module overriding instead of extending
* infer_sql_type in python client
* SqlQuery object in python
* fix merge conflicts
* update const_format
* CI fix
* factor out to var_identifiers
* sqlx prepare
* unnecessary security (admin is required)
* clearer comment
* ee repo ref
* nit snake case
* claude step 1: detect var declarations
* move detect_sql_access_type to common mod
* claude step 2: detect when saved vars are queried
* Revert "claude step 2: detect when saved vars are queried"
This reverts commit 1e1f930568.
* Revert "claude step 1: detect var declarations"
This reverts commit f866f4819d.
* remove ducklake/datatable and default
* detect data table assigns in var_identifiers
* Python parser successfully infers R/W/RW from ducklake / datatable
* still register ducklake/datatable if not used as unknown R/W
* Go to settings button in Assets Dropdown on not found
* nit
* sqlx prepare fail
* manual fix, somehow sqlx prepare won't do it
* fix frontend ci
* ee repo ref
* ducklake_user doesnt exist in unit tests
* nit fix
* ui nit
* nit
* nit missing clone
* fork ducklakes and datatables
* fix surface hover bug
* stupid mistake
* better deeply reactive mutable derived
* Ducklake picker
* Editor bar data tables
* DuckDB supports datatables
* datatable in duckdb asset parser
* duckdb asset parser var_identifiers
* Revert "duckdb asset parser var_identifiers"
This reverts commit 88068b1a77.
* sqlx prepare
* Box pin in test_workflow_as_code to fix stack overflow
* stash
* sql asset parser parses most s3 literals
* nit
* Detect attach + handle returning RW
* detect assets used with dot notation
* detect implicit access with USE dl; syntax
* Add assets as unknown if var was never used
* Support default ducklake/datatable main in parser
* ignore asset parsing errors in frontend (avoid flow layout shift)
* super weird duplication (merge conflict ?)
* nits
* fix duckdb parser detecting too much as asset when RW ctx is unknown
* fix transparent assets btn
* missing arg
* nit styling
* asset parser specific table parsing
* fix resource specific table parsing
* More concise asset display in flows + better icons
* fix assets page filtering out resources with added table
* Fix frontend to support specific table assets
* Open DB Manager to specific table
* Specific table parser in Python and TS + unit tests
* Fix UPDATE setting access to None
* fix flow edge rendering on top of output picker
* python parser fix var override bug
* add ts test
* fix compilation
* sqlx prepare
* update parsers version
* fix missing schema key onDelete
* Add note component
* save note size and position
* move add note button up
* nit
* Add markdown support
* wip
* fix add sticky note button
* fix text update
* Add sticky note to saved flow data
* add note color picker
* Introduce node multiselect
* Add group notes
* Adapt layout to group node
* create a note manager class
* clean reactivity
* clean
* improve adaptive layout to group note
* modify layout based on cached text height
* fined grained graph rendering for notes
* separate noteManager into editor and render
* separate noteManager into editor and render
* create a note change observer
* render note node from context
* simplify note state managment
* show note in flow viewer
* clean dirty changes
* clean selection manager
* fix layout check
* improve bg surface select
* Handle z-index for stacked group notes
* clean selection manager
* exclude notes from rect select
* Allow switch between selection modes with keyboard keys
* improve selection box styling
* prevent dragging note when editing
* nit
* Simplify selection using svelte flow built in feature
* handle note selection separately
* Add min size for notes
* improve selection toggle
* improve mode switch
* make size and position optional for group notes
* Improve initial viewport position
* Add context menu for the canevas
* nit
* Add node context menu
* improve note select
* use clickoutside for note deselect
* use pointerdown outside to close context menu
* nit
* fix selection issues
* make edges non selectable
* improve color palette
* fix backend
* fix backend check
* cargo lock restore
* Add toggle to display notes
* fix note selection
* nit
* account for css offset in for loop
* fix multiple selection pannel styling
* clear flow selection when creating note
* Improve placeholder and note default text
* Escape note edit mode when pressing Esc
* Allow note edition in local dev
* clean
* Handle subflow selection
* prevent group note resizing
* nit
* allow notes in flow expand
* Improve multi select panel
* Allow context menu in note mode
* Add event listenner to fix pane click deselect
* prevent zoom in text area in notes
* improve bounding box styling
* Use control for box selection for non mac users
* nit
* clean notes groups
* nit
* use portal for note actions
* handle assets node when computing note layout
* Simplify layout compute for notes
* use smart color choice for notes
* Switch display note when adding a new note
* clean code
* improve group note bound size calculation
* simplify AI tool nodes and asset handling
* nit
* nit
* improve flow centering
* create group note button
* Improve selection of nodes
* Revert "Improve selection of nodes"
This reverts commit d2c40d82b1.
* refert backend changes
* nit
* improve graph selection
* clean
* make backend work except job runs
* fix notSelectable
---------
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
* feat(frontend): wip
* feat(frontend): wip
* feat(frontend): wip
* feat(frontend): move component inside containers
* feat(frontend): done
* feat(frontend): done
* fix(frontend): wip
* fix(frontend): wip
* fix(frontend): done
* fix(frontend): done
* fix(frontend): fix anchored
* fix(frontend): restore event
* feat(frontend): support dropping on the top level + hide the shadow when leaving the grid
* feat(frontend): drop in the correct subgrid when there are multiple
* feat(frontend): wip
* feat(frontend): fix hide shadow
* feat(frontend): remove dead code
* feat(frontend): wip
* feat(frontend): fix overflow
* feat(frontend): wip
* feat(frontend): done
* feat(frontend): fix z-index
* feat(frontend): wip
* feat(frontend): fix shadow
* feat(frontend): fix resize + drop position
* feat(frontend): fix dropped when no movement
* feat(frontend): hide the fake shadow if the move mode is set
* feat(frontend): add small timeout when we leave the insert mode
* feat(frontend): render the shadow where the component will drop
* feat(frontend): done
* feat(frontend): done
* feat(frontend): improve perf
* feat(frontend): done
* feat(frontend): remove console.log
* feat(frontend): fix move toplevel
* feat(frontend): Components positions are restored when the mode changes
* feat(frontend): Components positions are restored when the mode changes
* feat(frontend): Components positions are restored when the mode changes
* feat(frontend): fix edges cases + improve perf
* feat(frontend): fix drop position
* feat(frontend): fix final drop position
* feat(frontend): fix final drop position
* feat(frontend): fix insert from component bar
* feat(frontend): Fix disapearing components
* feat(frontend): add indicator when a component is locked
* feat(frontend): add indicator when a component is locked
* feat(frontend): improve interactivity
* feat(frontend): fix how the lock overlay renders
* feat(frontend): use builin detection
* feat(frontend): fix zIndex
* feat(frontend): update the shadow when dragged over a locked component