sync: multiple features from private repo
- quick-add-loading: fire-and-forget with loading placeholders, auto-open feed, SSE events, QuickAddInput redesign - database-table-pane: TablePane + DatabaseTableView, countNodes(), event_date sort - ui-polish-fixes: focus tab order, dim name editing, tab title sync, cost chip removal, custom sort drag-reorder, refresh button, dimension filter removal (~2,200 lines) - node-creation-quality: description service prompt rewrite, title sanitization, extraction tool AI prompt rewrites - feed-pane-ux: stripped kanban/grid/saved views, sort dropdown, AND dimension filtering, description preview Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
9954792b1d
commit
2f6518207d
@@ -0,0 +1,39 @@
|
||||
"use client";
|
||||
|
||||
import PaneHeader from './PaneHeader';
|
||||
import DatabaseTableView from '../views/DatabaseTableView';
|
||||
import type { BasePaneProps } from './types';
|
||||
|
||||
export interface TablePaneProps extends BasePaneProps {
|
||||
onNodeClick: (nodeId: number) => void;
|
||||
refreshToken?: number;
|
||||
}
|
||||
|
||||
export default function TablePane({
|
||||
slot,
|
||||
isActive,
|
||||
onPaneAction,
|
||||
onCollapse,
|
||||
onSwapPanes,
|
||||
tabBar,
|
||||
onNodeClick,
|
||||
refreshToken
|
||||
}: TablePaneProps) {
|
||||
return (
|
||||
<div style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
height: '100%',
|
||||
background: 'transparent',
|
||||
overflow: 'hidden'
|
||||
}}>
|
||||
<PaneHeader slot={slot} onCollapse={onCollapse} onSwapPanes={onSwapPanes} tabBar={tabBar} />
|
||||
<div style={{ flex: 1, overflow: 'hidden' }}>
|
||||
<DatabaseTableView
|
||||
onNodeClick={onNodeClick}
|
||||
refreshToken={refreshToken}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -3,11 +3,14 @@
|
||||
import PaneHeader from './PaneHeader';
|
||||
import ViewsOverlay from '../views/ViewsOverlay';
|
||||
import type { BasePaneProps, PaneAction, PaneType } from './types';
|
||||
import type { PendingNode } from '../layout/ThreePanelLayout';
|
||||
|
||||
export interface ViewsPaneProps extends BasePaneProps {
|
||||
onNodeClick: (nodeId: number) => void;
|
||||
onNodeOpenInOtherPane?: (nodeId: number) => void;
|
||||
refreshToken?: number;
|
||||
pendingNodes?: PendingNode[];
|
||||
onDismissPending?: (id: string) => void;
|
||||
}
|
||||
|
||||
export default function ViewsPane({
|
||||
@@ -18,7 +21,9 @@ export default function ViewsPane({
|
||||
onSwapPanes,
|
||||
onNodeClick,
|
||||
onNodeOpenInOtherPane,
|
||||
refreshToken
|
||||
refreshToken,
|
||||
pendingNodes,
|
||||
onDismissPending,
|
||||
}: ViewsPaneProps) {
|
||||
const handleTypeChange = (type: PaneType) => {
|
||||
onPaneAction?.({ type: 'switch-pane-type', paneType: type });
|
||||
@@ -38,6 +43,8 @@ export default function ViewsPane({
|
||||
onNodeClick={onNodeClick}
|
||||
onNodeOpenInOtherPane={onNodeOpenInOtherPane}
|
||||
refreshToken={refreshToken}
|
||||
pendingNodes={pendingNodes}
|
||||
onDismissPending={onDismissPending}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,5 +2,6 @@ export { default as NodePane } from './NodePane';
|
||||
export { default as DimensionsPane } from './DimensionsPane';
|
||||
export { default as MapPane } from './MapPane';
|
||||
export { default as ViewsPane } from './ViewsPane';
|
||||
export { default as TablePane } from './TablePane';
|
||||
export { default as PaneHeader } from './PaneHeader';
|
||||
export * from './types';
|
||||
|
||||
@@ -15,7 +15,7 @@ export type AgentDelegation = {
|
||||
};
|
||||
|
||||
// The four pane types (chat removed in rah-light, guides moved to settings)
|
||||
export type PaneType = 'node' | 'dimensions' | 'map' | 'views';
|
||||
export type PaneType = 'node' | 'dimensions' | 'map' | 'views' | 'table';
|
||||
|
||||
// State for each slot
|
||||
export interface SlotState {
|
||||
@@ -89,6 +89,12 @@ export interface ViewsPaneProps extends BasePaneProps {
|
||||
refreshToken?: number;
|
||||
}
|
||||
|
||||
// TablePane specific props
|
||||
export interface TablePaneProps extends BasePaneProps {
|
||||
onNodeClick: (nodeId: number) => void;
|
||||
refreshToken?: number;
|
||||
}
|
||||
|
||||
// Pane header props
|
||||
export interface PaneHeaderProps {
|
||||
slot?: 'A' | 'B';
|
||||
@@ -104,6 +110,7 @@ export const PANE_LABELS: Record<PaneType, string> = {
|
||||
dimensions: 'Dimensions',
|
||||
map: 'Map',
|
||||
views: 'Feed',
|
||||
table: 'Table',
|
||||
};
|
||||
|
||||
// Default slot states
|
||||
|
||||
Reference in New Issue
Block a user