alpha
Login
or
Join now
eagraf.dev
/
textile
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
A local-first note taking app
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
textile
/
src
/
workspaces
/
tiling
/
at
markdown-live-preview-node-types
11 files
Ethan Graf
Move split controls to the title bar + title-bar/sidebar polish
4w ago
aa77d352
TileStartView.tsx
Move split controls to the title bar + title-bar/sidebar polish - Split Right / Split Down move from the bottom bar to the top bar as icon buttons (SplitRightIcon / SplitDownIcon) with hover tooltips, left of the workspace selector, shown only in tiling mode. Wired through the tiling handle (App.handleSplitRight/Down). - Title bar: compact fixed-height buttons (size-5) with header padding so hover highlights no longer reach the screen edge; tooltip + pointer cursor on the sidebar toggle, split buttons, and workspace menu. - Sidebar: fix asymmetric collapse animation — the open state now also transitions width, so re-opening animates instead of snapping. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
TileTabStrip.css
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
TileTabStrip.tsx
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tabDnd.test.ts
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tabDnd.ts
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tabsModel.test.ts
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tabsModel.ts
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tiling.tsx
Move split controls to the title bar + title-bar/sidebar polish - Split Right / Split Down move from the bottom bar to the top bar as icon buttons (SplitRightIcon / SplitDownIcon) with hover tooltips, left of the workspace selector, shown only in tiling mode. Wired through the tiling handle (App.handleSplitRight/Down). - Title bar: compact fixed-height buttons (size-5) with header padding so hover highlights no longer reach the screen edge; tooltip + pointer cursor on the sidebar toggle, split buttons, and workspace menu. - Sidebar: fix asymmetric collapse animation — the open state now also transitions width, so re-opening animates instead of snapping. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tilingPersistence.test.ts
Tabs per tile (phase 5c): persist layout + selection to localStorage Each vault's tile layout and tabs now survive an app restart, along with the selected vault and (pre-existing) workspace kind. - tilingPersistence: serializeLayout / buildInitialTileTabs / maxIdSuffix (pure + tested) and load/save to localStorage under textile.tiling.<vaultId>. Persists the split tree, active tile, and each tile's documents + active index; not handles or load state. - useTilingDocumentSlots: accept initialTiles, seed the tab map with loading tabs, and re-open the documents in a mount-only effect (cancelled on unmount). Exposes tileTabs for serialization. - TilingWorkspace: lazy-init tree/activeTile/id-counter from the persisted layout (keyed by instanceKey = vault provider id) and write on change (skipping no-op rewrites). - App: persist + restore selectedProviderId (textile.selectedVault); the registry loads vaults synchronously so the restored vault survives the auto-select effects. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
tilingPersistence.ts
Tabs per tile (phase 5c): persist layout + selection to localStorage Each vault's tile layout and tabs now survive an app restart, along with the selected vault and (pre-existing) workspace kind. - tilingPersistence: serializeLayout / buildInitialTileTabs / maxIdSuffix (pure + tested) and load/save to localStorage under textile.tiling.<vaultId>. Persists the split tree, active tile, and each tile's documents + active index; not handles or load state. - useTilingDocumentSlots: accept initialTiles, seed the tab map with loading tabs, and re-open the documents in a mount-only effect (cancelled on unmount). Exposes tileTabs for serialization. - TilingWorkspace: lazy-init tree/activeTile/id-counter from the persisted layout (keyed by instanceKey = vault provider id) and write on change (skipping no-op rewrites). - App: persist + restore selectedProviderId (textile.selectedVault); the registry loads vaults synchronously so the restored vault survives the auto-select effects. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago
useTilingDocumentSlots.ts
Tabs per tile (phase 5b): drag-and-drop tabs + drop-zone splits Drag tab chips to reorder, move between tiles, or split. - tabsModel.moveTab: reorder within / move across tiles (pure + tested); creates the destination tile if absent and reports sourceEmptied. - tabDnd: shared drag payload + computeDropZone (5 zones; pure + tested). - model.splitLeaf gains `before` so a drop on a left/top edge puts the new tile first. - tiling.tsx: TilingTile shows a translucent zone overlay (raised via a capture overlay so the editor can't swallow drag events); dropping on an edge splits the tile and moves the tab; center moves it in. - TileTabStrip: draggable chips with an insertion marker, cleared on dragleave/dragend; an independent off-screen clone is used as the drag image so the clipped live chip can't corrupt it. Thin, non-overlay tab scrollbar (TileTabStrip.css). Fixes found while testing: - White-screen crash: read currentTarget synchronously, not inside a setState updater (React nulls it after the handler). - Tiles overlapped: split panes now flex-grow to share the space the fixed splitter leaves, so panes + divider sum to 100% with no hardcoded splitter width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 weeks ago