@pstdio/ui 0.3.0 → 0.4.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.
- package/dist/chat-ui.js +12 -11
- package/dist/chat-ui.js.map +1 -1
- package/dist/components/attached-panel.d.ts +9 -0
- package/dist/components/attached-panel.utils.d.ts +6 -0
- package/dist/components/bubble-button.d.ts +10 -0
- package/dist/components/bubble-panel.d.ts +18 -0
- package/dist/components/chat-ui/components/chat-panel-sticky-user-message.d.ts +1 -1
- package/dist/components/diff-card.d.ts +3 -0
- package/dist/components/diff-drawer.d.ts +1 -0
- package/dist/components/layout.d.ts +1 -2
- package/dist/components/layout.stories.d.ts +3 -3
- package/dist/components/panel-header.constants.d.ts +1 -0
- package/dist/components/rich-text/markdown-editor/markdown-editor.d.ts +1 -0
- package/dist/components/rich-text/shared/components/content-editable.d.ts +2 -1
- package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.d.ts +17 -0
- package/dist/components/rich-text/shared/transformers/markdown-transformers.d.ts +1 -0
- package/dist/components/searchable-menu.d.ts +35 -2
- package/dist/components/searchable-menu.stories.d.ts +2 -0
- package/dist/components/session-indicator.d.ts +2 -2
- package/dist/components/session-indicator.stories.d.ts +1 -0
- package/dist/components/sidebar/sidebar-footer.d.ts +6 -0
- package/dist/components/sidebar/sidebar-header.d.ts +7 -0
- package/dist/components/sidebar/sidebar-project-menu.d.ts +10 -0
- package/dist/components/sidebar/sidebar.d.ts +2 -0
- package/dist/components/sidebar/sidebar.store.d.ts +47 -0
- package/dist/components/{sidebar-next/sidebar-next.stories.d.ts → sidebar/sidebar.stories.d.ts} +4 -3
- package/dist/components/{sidebar-next/sidebar-next.types.d.ts → sidebar/sidebar.types.d.ts} +3 -2
- package/dist/components/sidebar-tree/sidebar-node-content.d.ts +9 -0
- package/dist/components/sidebar-tree/sidebar-tree.d.ts +1 -1
- package/dist/components/sidebar-tree/sidebar-tree.types.d.ts +10 -2
- package/dist/components/style-guide.stories.d.ts +7 -12
- package/dist/components/tickets/ticket-card.d.ts +2 -7
- package/dist/components/workspace-badge.d.ts +22 -0
- package/dist/components/workspace-badge.stories.d.ts +13 -0
- package/dist/get-file-type-icon-CirIyuE8.js +92 -0
- package/dist/get-file-type-icon-CirIyuE8.js.map +1 -0
- package/dist/index.d.ts +18 -19
- package/dist/index.js +1849 -1743
- package/dist/index.js.map +1 -1
- package/dist/{rich-message-ZT2CEiwt.js → rich-message-Bad4GxH2.js} +520 -503
- package/dist/rich-message-Bad4GxH2.js.map +1 -0
- package/dist/rich-text.js +276 -272
- package/dist/rich-text.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/test-utils/local-storage.d.ts +1 -0
- package/dist/theme/global.d.ts +3 -0
- package/dist/theme/primitives/colors.d.ts +116 -0
- package/dist/theme/recipes/button.d.ts +13 -13
- package/dist/theme/recipes/dialog.d.ts +1 -1
- package/dist/theme/recipes/drawer.d.ts +1 -1
- package/dist/theme/recipes/menu.d.ts +1 -1
- package/dist/theme/recipes/popover.d.ts +1 -1
- package/dist/theme/recipes/tooltip.d.ts +1 -1
- package/dist/theme/tokens/colors.d.ts +162 -8
- package/dist/{theme-BFV2Q048.js → theme-D0VvFB1Y.js} +292 -154
- package/dist/theme-D0VvFB1Y.js.map +1 -0
- package/dist/theme.js +1 -1
- package/package.json +2 -2
- package/dist/components/documentation/docs-changelog.d.ts +0 -20
- package/dist/components/documentation/docs-changelog.stories.d.ts +0 -15
- package/dist/components/documentation/docs-outline.d.ts +0 -13
- package/dist/components/documentation/docs-outline.stories.d.ts +0 -16
- package/dist/components/documentation/docs-pagination.d.ts +0 -10
- package/dist/components/documentation/docs-pagination.stories.d.ts +0 -14
- package/dist/components/documentation/docs-sidebar.d.ts +0 -14
- package/dist/components/documentation/docs-sidebar.stories.d.ts +0 -7
- package/dist/components/panel-menu.d.ts +0 -9
- package/dist/components/panel-menu.stories.d.ts +0 -8
- package/dist/components/sidebar-next/sidebar-next-footer.d.ts +0 -6
- package/dist/components/sidebar-next/sidebar-next-header.d.ts +0 -7
- package/dist/components/sidebar-next/sidebar-next.d.ts +0 -2
- package/dist/components/sidebar-next/sidebar-next.store.d.ts +0 -47
- package/dist/components/sidebar-next/sidebar-next.store.test.d.ts +0 -1
- package/dist/rich-message-ZT2CEiwt.js.map +0 -1
- package/dist/theme-BFV2Q048.js.map +0 -1
- package/dist/tooltip-Dze4WXVl.js +0 -86
- package/dist/tooltip-Dze4WXVl.js.map +0 -1
- /package/dist/components/{chat-ui/components/ai-conversation.test.d.ts → attached-panel.utils.test.d.ts} +0 -0
- /package/dist/components/{chat-ui/components/chat-panel.sticky-user-message.test.d.ts → rich-text/shared/transformers/markdown-transformers.test.d.ts} +0 -0
- /package/dist/components/{searchable-menu.test.d.ts → sidebar/sidebar.store.test.d.ts} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FlexProps } from '@chakra-ui/react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
interface AttachedPanelProps extends Omit<FlexProps, "children"> {
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
header?: ReactNode;
|
|
6
|
+
resizable?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const AttachedPanel: (props: AttachedPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { HTMLChakraProps, IconButtonProps } from '@chakra-ui/react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
type BubbleButtonStyleProps = "boxShadow" | "transition" | "_hover" | "_active" | "borderColor" | "borderWidth";
|
|
4
|
+
export interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {
|
|
5
|
+
containerProps?: HTMLChakraProps<"div">;
|
|
6
|
+
isOpen?: boolean;
|
|
7
|
+
tooltip?: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare const BubbleButton: import('react').ForwardRefExoticComponent<BubbleButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { HTMLChakraProps } from '@chakra-ui/react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export interface BubblePanelProps {
|
|
4
|
+
isOpen?: boolean;
|
|
5
|
+
title?: string;
|
|
6
|
+
menu?: ReactNode;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
closeLabel?: string;
|
|
9
|
+
onPopOut?: (() => void) | null;
|
|
10
|
+
popOutLabel?: string;
|
|
11
|
+
width?: string;
|
|
12
|
+
height?: string;
|
|
13
|
+
containerProps?: HTMLChakraProps<"section">;
|
|
14
|
+
testId?: string;
|
|
15
|
+
"aria-label"?: string;
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare const BubblePanel: import('react').ForwardRefExoticComponent<BubblePanelProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { SessionMessage } from './message-types';
|
|
2
2
|
export declare const STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD = 360;
|
|
3
|
-
export declare const STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT = "min(
|
|
3
|
+
export declare const STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT = "min(10vh, 4rem)";
|
|
4
4
|
export declare const isStickyUserMessageCollapsible: (message: SessionMessage) => boolean;
|
|
@@ -9,6 +9,9 @@ export interface Diff {
|
|
|
9
9
|
}
|
|
10
10
|
interface DiffCardProps {
|
|
11
11
|
diff: Diff;
|
|
12
|
+
isSelected?: boolean;
|
|
13
|
+
isExpanded?: boolean;
|
|
14
|
+
onToggleExpanded?: () => void;
|
|
12
15
|
}
|
|
13
16
|
export declare const DiffCard: (props: DiffCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
17
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StoryObj } from '@storybook/react-vite';
|
|
1
2
|
import { ReactNode } from 'react';
|
|
2
3
|
type StoryFn = () => ReactNode;
|
|
3
4
|
declare const meta: {
|
|
@@ -6,6 +7,5 @@ declare const meta: {
|
|
|
6
7
|
decorators: ((Story: StoryFn) => import("react/jsx-runtime").JSX.Element)[];
|
|
7
8
|
};
|
|
8
9
|
export default meta;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
10
|
+
type Story = StoryObj<typeof meta>;
|
|
11
|
+
export declare const AppShell: Story;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PANEL_HEADER_HEIGHT = "2.5625rem";
|
|
@@ -4,6 +4,7 @@ export interface MarkdownEditorProps {
|
|
|
4
4
|
defaultState: string;
|
|
5
5
|
isEditable?: boolean;
|
|
6
6
|
placeholder?: string;
|
|
7
|
+
scrollable?: boolean;
|
|
7
8
|
onChange?: (value: string) => void;
|
|
8
9
|
}
|
|
9
10
|
export declare function MarkdownEditor(props: MarkdownEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,6 +3,7 @@ interface ContentEditableProps {
|
|
|
3
3
|
fullWidth?: boolean;
|
|
4
4
|
padding?: string;
|
|
5
5
|
isRichMessage?: boolean;
|
|
6
|
+
scrollable?: boolean;
|
|
6
7
|
}
|
|
7
|
-
export declare function ContentEditable({ onRef, fullWidth, padding, isRichMessage }: ContentEditableProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function ContentEditable({ onRef, fullWidth, padding, isRichMessage, scrollable, }: ContentEditableProps): import("react/jsx-runtime").JSX.Element;
|
|
8
9
|
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LexicalNode } from 'lexical';
|
|
2
|
+
export declare const blockTypeToBlockName: {
|
|
3
|
+
bullet: string;
|
|
4
|
+
check: string;
|
|
5
|
+
code: string;
|
|
6
|
+
h1: string;
|
|
7
|
+
h2: string;
|
|
8
|
+
h3: string;
|
|
9
|
+
h4: string;
|
|
10
|
+
h5: string;
|
|
11
|
+
h6: string;
|
|
12
|
+
number: string;
|
|
13
|
+
paragraph: string;
|
|
14
|
+
quote: string;
|
|
15
|
+
};
|
|
16
|
+
export type BlockType = keyof typeof blockTypeToBlockName;
|
|
17
|
+
export declare const resolveBlockTypeFromAnchor: (anchorNode: LexicalNode) => "number" | "code" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "bullet" | "check" | "paragraph" | "quote" | null;
|
|
@@ -3,6 +3,7 @@ import { TextNode } from 'lexical';
|
|
|
3
3
|
export declare const TABLE: ElementTransformer;
|
|
4
4
|
export declare const UNDERLINE_INS_TAG: TextMatchTransformer;
|
|
5
5
|
export declare const UNDERLINE_U_TAG: TextMatchTransformer;
|
|
6
|
+
export declare const BARE_URL: TextMatchTransformer;
|
|
6
7
|
export declare const TRANSFORMERS_EXTENDED: (Readonly<{
|
|
7
8
|
dependencies: Array<import('lexical').Klass<import('lexical').LexicalNode>>;
|
|
8
9
|
export?: (node: import('lexical').LexicalNode, exportChildren: (node: import('lexical').ElementNode) => string, exportFormat: (node: TextNode, textContent: string) => string) => string | null;
|
|
@@ -1,19 +1,49 @@
|
|
|
1
1
|
import { Menu } from '@chakra-ui/react';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
2
|
+
import { ElementType, ReactNode } from 'react';
|
|
3
3
|
type MenuRootProps = React.ComponentProps<typeof Menu.Root>;
|
|
4
4
|
type MenuContentProps = React.ComponentProps<typeof Menu.Content>;
|
|
5
5
|
export interface SearchableMenuItem {
|
|
6
6
|
id: string;
|
|
7
7
|
label: string;
|
|
8
8
|
searchText?: string;
|
|
9
|
+
secondaryLabel?: string;
|
|
10
|
+
tooltipLabel?: ReactNode;
|
|
11
|
+
icon?: ElementType;
|
|
12
|
+
variant?: "default" | "compact";
|
|
13
|
+
isDisabled?: boolean;
|
|
14
|
+
isSelected?: boolean;
|
|
15
|
+
onSelect?: () => void;
|
|
16
|
+
}
|
|
17
|
+
export interface SearchableMenuParentList<T extends SearchableMenuItem> {
|
|
18
|
+
items: T[];
|
|
19
|
+
selectedLabel: string;
|
|
20
|
+
selectedIcon?: ElementType;
|
|
21
|
+
ariaLabel?: string;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
emptyState?: ReactNode;
|
|
24
|
+
filterItems?: (items: T[], query: string) => T[];
|
|
25
|
+
searchPlaceholder?: string;
|
|
26
|
+
showSearch?: boolean;
|
|
27
|
+
contentTestId?: string;
|
|
28
|
+
onSelect?: (item: T) => void;
|
|
29
|
+
}
|
|
30
|
+
interface ListConfig<T extends SearchableMenuItem> {
|
|
31
|
+
items: T[];
|
|
32
|
+
filterItems: (items: T[], query: string) => T[];
|
|
33
|
+
showSearch: boolean;
|
|
34
|
+
searchPlaceholder: string;
|
|
35
|
+
emptyState: ReactNode;
|
|
36
|
+
contentTestId?: string;
|
|
37
|
+
closeOnSelect: boolean;
|
|
38
|
+
listId: string;
|
|
9
39
|
}
|
|
10
40
|
interface SearchableMenuProps<T extends SearchableMenuItem> {
|
|
11
41
|
trigger: ReactNode;
|
|
12
42
|
items: T[];
|
|
13
43
|
searchPlaceholder: string;
|
|
14
44
|
emptyState: ReactNode;
|
|
15
|
-
renderItem: (item: T) => ReactNode;
|
|
16
45
|
filterItems?: (items: T[], query: string) => T[];
|
|
46
|
+
listId?: string;
|
|
17
47
|
header?: ReactNode;
|
|
18
48
|
width?: MenuContentProps["width"];
|
|
19
49
|
maxListHeight?: string;
|
|
@@ -26,7 +56,10 @@ interface SearchableMenuProps<T extends SearchableMenuItem> {
|
|
|
26
56
|
onFocusOutside?: MenuRootProps["onFocusOutside"];
|
|
27
57
|
contentTestId?: string;
|
|
28
58
|
portalled?: boolean;
|
|
59
|
+
parentList?: SearchableMenuParentList<T>;
|
|
29
60
|
}
|
|
30
61
|
export declare const filterSearchableMenuItems: <T extends SearchableMenuItem>(items: T[], query: string) => T[];
|
|
62
|
+
export declare const shouldResetSearchableMenuQuery: (currentListId?: string, nextListId?: string) => boolean;
|
|
63
|
+
export declare const resolveActiveListConfig: <T extends SearchableMenuItem>(isShowingParent: boolean, parentList: SearchableMenuParentList<T> | undefined, childConfig: ListConfig<T>) => ListConfig<T>;
|
|
31
64
|
export declare const SearchableMenu: <T extends SearchableMenuItem>(props: SearchableMenuProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
32
65
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Icon } from '@chakra-ui/react';
|
|
2
2
|
import { ComponentProps } from 'react';
|
|
3
|
-
export type SessionCompletionStatus = "in_progress" | "awaiting_input" | "completed" | "failed";
|
|
3
|
+
export type SessionCompletionStatus = "in_progress" | "awaiting_input" | "completed" | "failed" | "disconnected";
|
|
4
4
|
export declare const resolveSessionIndicatorIcon: (status: SessionCompletionStatus | undefined) => import('react').ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & import('react').RefAttributes<SVGSVGElement>>;
|
|
5
|
-
export declare const resolveSessionIndicatorColor: (status: SessionCompletionStatus | undefined) => "fg.muted" | "fg.error" | "fg.success";
|
|
5
|
+
export declare const resolveSessionIndicatorColor: (status: SessionCompletionStatus | undefined) => "fg.muted" | "fg.error" | "fg.warning" | "fg.success";
|
|
6
6
|
interface SessionIndicatorProps {
|
|
7
7
|
status?: SessionCompletionStatus;
|
|
8
8
|
boxSize?: ComponentProps<typeof Icon>["boxSize"];
|
|
@@ -7,5 +7,6 @@ export declare const InProgress: Story;
|
|
|
7
7
|
export declare const AwaitingInput: Story;
|
|
8
8
|
export declare const Completed: Story;
|
|
9
9
|
export declare const Failed: Story;
|
|
10
|
+
export declare const Disconnected: Story;
|
|
10
11
|
export declare const Undefined: Story;
|
|
11
12
|
export declare const AllStatuses: Story;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface SidebarProjectMenuProps {
|
|
2
|
+
name: string;
|
|
3
|
+
projectsLabel: string;
|
|
4
|
+
themeModeLabel: string;
|
|
5
|
+
isDarkMode: boolean;
|
|
6
|
+
onSelectProjects: () => void;
|
|
7
|
+
onToggleThemePreference: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const SidebarProjectMenu: (props: SidebarProjectMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
interface SidebarSnapshot {
|
|
2
|
+
open: boolean;
|
|
3
|
+
expandedSections: string[];
|
|
4
|
+
expandedNodes: string[];
|
|
5
|
+
}
|
|
6
|
+
interface SidebarState extends SidebarSnapshot {
|
|
7
|
+
openSidebar: () => void;
|
|
8
|
+
closeSidebar: () => void;
|
|
9
|
+
toggleSidebar: () => void;
|
|
10
|
+
toggleSection: (sectionId: string) => void;
|
|
11
|
+
toggleNode: (nodeId: string) => void;
|
|
12
|
+
setSectionExpanded: (sectionId: string, expanded: boolean) => void;
|
|
13
|
+
setNodeExpanded: (nodeId: string, expanded: boolean) => void;
|
|
14
|
+
reset: () => void;
|
|
15
|
+
}
|
|
16
|
+
interface CreateSidebarStoreOptions {
|
|
17
|
+
storageKey: string;
|
|
18
|
+
initialState?: Partial<SidebarSnapshot>;
|
|
19
|
+
}
|
|
20
|
+
export declare const createSidebarStore: (options: CreateSidebarStoreOptions) => Omit<import('zustand').StoreApi<SidebarState>, "setState" | "persist"> & {
|
|
21
|
+
setState(partial: SidebarState | Partial<SidebarState> | ((state: SidebarState) => SidebarState | Partial<SidebarState>), replace?: false | undefined): unknown;
|
|
22
|
+
setState(state: SidebarState | ((state: SidebarState) => SidebarState), replace: true): unknown;
|
|
23
|
+
persist: {
|
|
24
|
+
setOptions: (options: Partial<import('zustand/middleware').PersistOptions<SidebarState, unknown, unknown>>) => void;
|
|
25
|
+
clearStorage: () => void;
|
|
26
|
+
rehydrate: () => Promise<void> | void;
|
|
27
|
+
hasHydrated: () => boolean;
|
|
28
|
+
onHydrate: (fn: (state: SidebarState) => void) => () => void;
|
|
29
|
+
onFinishHydration: (fn: (state: SidebarState) => void) => () => void;
|
|
30
|
+
getOptions: () => Partial<import('zustand/middleware').PersistOptions<SidebarState, unknown, unknown>>;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export declare const getSidebarStore: (storageKey: string, initialState?: Partial<SidebarSnapshot>) => Omit<import('zustand').StoreApi<SidebarState>, "setState" | "persist"> & {
|
|
34
|
+
setState(partial: SidebarState | Partial<SidebarState> | ((state: SidebarState) => SidebarState | Partial<SidebarState>), replace?: false | undefined): unknown;
|
|
35
|
+
setState(state: SidebarState | ((state: SidebarState) => SidebarState), replace: true): unknown;
|
|
36
|
+
persist: {
|
|
37
|
+
setOptions: (options: Partial<import('zustand/middleware').PersistOptions<SidebarState, unknown, unknown>>) => void;
|
|
38
|
+
clearStorage: () => void;
|
|
39
|
+
rehydrate: () => Promise<void> | void;
|
|
40
|
+
hasHydrated: () => boolean;
|
|
41
|
+
onHydrate: (fn: (state: SidebarState) => void) => () => void;
|
|
42
|
+
onFinishHydration: (fn: (state: SidebarState) => void) => () => void;
|
|
43
|
+
getOptions: () => Partial<import('zustand/middleware').PersistOptions<SidebarState, unknown, unknown>>;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export declare const useSidebarStore: <T>(storageKey: string, selector: (state: SidebarState) => T, initialState?: Partial<SidebarSnapshot>) => T;
|
|
47
|
+
export {};
|
package/dist/components/{sidebar-next/sidebar-next.stories.d.ts → sidebar/sidebar.stories.d.ts}
RENAMED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import {
|
|
3
|
-
declare const meta: Meta<typeof
|
|
2
|
+
import { Sidebar } from './sidebar';
|
|
3
|
+
declare const meta: Meta<typeof Sidebar>;
|
|
4
4
|
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof
|
|
5
|
+
type Story = StoryObj<typeof Sidebar>;
|
|
6
6
|
export declare const DefaultDocsTree: Story;
|
|
7
7
|
export declare const HeaderAndFooterLayout: Story;
|
|
8
8
|
export declare const HiddenWithExternalReopen: Story;
|
|
9
9
|
export declare const PersistenceRestore: Story;
|
|
10
10
|
export declare const NamespaceIsolation: Story;
|
|
11
|
+
export declare const ColoredSessionIcons: Story;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { SidebarLinkComponent, SidebarNavigateEvent, SidebarSection } from '../sidebar-tree/sidebar-tree.types';
|
|
3
|
-
export interface
|
|
3
|
+
export interface SidebarProps {
|
|
4
4
|
storageKey: string;
|
|
5
5
|
sections: SidebarSection[];
|
|
6
|
-
activeNodeId?: string | null;
|
|
6
|
+
activeNodeId?: string | string[] | null;
|
|
7
7
|
header?: ReactNode;
|
|
8
8
|
footer?: ReactNode;
|
|
9
9
|
width?: string | number;
|
|
10
10
|
emptyLabel?: string;
|
|
11
|
+
defaultExpandedSections?: string[];
|
|
11
12
|
linkComponent?: SidebarLinkComponent;
|
|
12
13
|
onNavigate?: (event: SidebarNavigateEvent) => void;
|
|
13
14
|
closable?: boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SidebarNode } from './sidebar-tree.types';
|
|
2
|
+
interface SidebarNodeContentProps {
|
|
3
|
+
node: SidebarNode;
|
|
4
|
+
expanded: boolean;
|
|
5
|
+
hasChildren: boolean;
|
|
6
|
+
isDisabled: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const SidebarNodeContent: (props: SidebarNodeContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -3,7 +3,7 @@ interface SidebarTreeProps {
|
|
|
3
3
|
sections: SidebarSection[];
|
|
4
4
|
expandedSections: string[];
|
|
5
5
|
expandedNodes: string[];
|
|
6
|
-
activeNodeId?: string | null;
|
|
6
|
+
activeNodeId?: string | string[] | null;
|
|
7
7
|
linkComponent?: SidebarLinkComponent;
|
|
8
8
|
onNavigate?: (event: SidebarNavigateEvent) => void;
|
|
9
9
|
onToggleSection: (sectionId: string) => void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IconProps } from '@chakra-ui/react';
|
|
1
2
|
import { ComponentType, ReactNode } from 'react';
|
|
2
3
|
export interface SidebarNavigationIntent {
|
|
3
4
|
id?: string;
|
|
@@ -25,9 +26,15 @@ export interface SidebarAction {
|
|
|
25
26
|
}
|
|
26
27
|
export interface SidebarNode {
|
|
27
28
|
id: string;
|
|
28
|
-
label:
|
|
29
|
-
description?:
|
|
29
|
+
label: ReactNode;
|
|
30
|
+
description?: ReactNode;
|
|
30
31
|
icon?: ReactNode;
|
|
32
|
+
iconColor?: IconProps["color"];
|
|
33
|
+
indicator?: {
|
|
34
|
+
icon: ReactNode;
|
|
35
|
+
color?: IconProps["color"];
|
|
36
|
+
tooltip?: string | null;
|
|
37
|
+
};
|
|
31
38
|
disabled?: boolean;
|
|
32
39
|
isNavigable?: boolean;
|
|
33
40
|
/** URL for the node. When provided with a linkComponent, the row renders as an anchor for cmd+click support. */
|
|
@@ -39,6 +46,7 @@ export interface SidebarNode {
|
|
|
39
46
|
export interface SidebarSection {
|
|
40
47
|
id: string;
|
|
41
48
|
label?: string;
|
|
49
|
+
collapsible?: boolean;
|
|
42
50
|
actions?: SidebarAction[];
|
|
43
51
|
emptyState?: ReactNode;
|
|
44
52
|
nodes: SidebarNode[];
|
|
@@ -8,21 +8,16 @@ export default meta;
|
|
|
8
8
|
export declare const Overview: {
|
|
9
9
|
render: () => import("react/jsx-runtime").JSX.Element;
|
|
10
10
|
};
|
|
11
|
-
export declare const
|
|
11
|
+
export declare const SurfaceCompositions: {
|
|
12
12
|
name: string;
|
|
13
13
|
render: () => import("react/jsx-runtime").JSX.Element;
|
|
14
14
|
};
|
|
15
|
-
export declare const
|
|
15
|
+
export declare const DarkModeTextSelection: {
|
|
16
16
|
name: string;
|
|
17
17
|
render: () => import("react/jsx-runtime").JSX.Element;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
name: string;
|
|
24
|
-
render: () => import("react/jsx-runtime").JSX.Element;
|
|
25
|
-
play: ({ canvasElement }: {
|
|
26
|
-
canvasElement: HTMLElement;
|
|
27
|
-
}) => Promise<void>;
|
|
18
|
+
parameters: {
|
|
19
|
+
themes: {
|
|
20
|
+
themeOverride: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
28
23
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DragEventHandler } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { WorkspaceBadgeProps } from '../workspace-badge';
|
|
3
3
|
export interface TicketCardBadge {
|
|
4
4
|
label: string;
|
|
5
5
|
color?: string;
|
|
@@ -7,19 +7,14 @@ export interface TicketCardBadge {
|
|
|
7
7
|
interface TicketCardProps {
|
|
8
8
|
ticketId: string;
|
|
9
9
|
parentPath?: string[];
|
|
10
|
-
sessionIndicatorLabel?: string;
|
|
11
|
-
sessionIndicatorStatus?: SessionCompletionStatus;
|
|
12
10
|
title: string;
|
|
13
11
|
badges?: TicketCardBadge[];
|
|
14
|
-
|
|
15
|
-
diffDeletions?: number;
|
|
12
|
+
workspaceBadge?: WorkspaceBadgeProps;
|
|
16
13
|
isSelected?: boolean;
|
|
17
14
|
draggable?: boolean;
|
|
18
15
|
onDragStart?: DragEventHandler<HTMLDivElement>;
|
|
19
16
|
onDragEnd?: DragEventHandler<HTMLDivElement>;
|
|
20
17
|
onClick?: () => void;
|
|
21
|
-
onDiffBadgeClick?: () => void;
|
|
22
|
-
onSessionIndicatorClick?: () => void;
|
|
23
18
|
}
|
|
24
19
|
export declare const TicketCard: (props: TicketCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
20
|
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SessionCompletionStatus } from './session-indicator';
|
|
2
|
+
interface WorkspaceAttemptStatus {
|
|
3
|
+
name: string;
|
|
4
|
+
color: string;
|
|
5
|
+
description?: string | null;
|
|
6
|
+
}
|
|
7
|
+
export interface WorkspaceBadgeProps {
|
|
8
|
+
workspaceType: "worktree" | "current_branch";
|
|
9
|
+
initializing?: boolean;
|
|
10
|
+
shorthand?: string;
|
|
11
|
+
attemptStatus?: WorkspaceAttemptStatus;
|
|
12
|
+
sessionStatus?: SessionCompletionStatus;
|
|
13
|
+
showLeadingSessionIndicator?: boolean;
|
|
14
|
+
diffAdditions?: number;
|
|
15
|
+
diffDeletions?: number;
|
|
16
|
+
hasMultipleWorkspaces?: boolean;
|
|
17
|
+
onClick?: () => void;
|
|
18
|
+
onDropdownClick?: () => void;
|
|
19
|
+
onSessionIndicatorClick?: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare const WorkspaceBadge: (props: WorkspaceBadgeProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { WorkspaceBadge } from './workspace-badge';
|
|
3
|
+
declare const meta: Meta<typeof WorkspaceBadge>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof WorkspaceBadge>;
|
|
6
|
+
export declare const Initializing: Story;
|
|
7
|
+
export declare const SingleWorkspaceNoShorthand: Story;
|
|
8
|
+
export declare const MultiWorkspaceWithShorthandAndDropdown: Story;
|
|
9
|
+
export declare const WithDiffs: Story;
|
|
10
|
+
export declare const WithoutDiffs: Story;
|
|
11
|
+
export declare const WithAttemptStatus: Story;
|
|
12
|
+
export declare const FallbackSessionStatus: Story;
|
|
13
|
+
export declare const StateMatrix: Story;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx as g, jsxs as A } from "react/jsx-runtime";
|
|
2
|
+
import { c as z } from "react/compiler-runtime";
|
|
3
|
+
import { Tooltip as j, Portal as P, ScrollArea as F } from "@chakra-ui/react";
|
|
4
|
+
import * as T from "react";
|
|
5
|
+
import { FileSpreadsheet as $, FileCode as V, FileChartLine as q, FileJson as D, FileText as E, FileCog as H, FileImage as I, FileArchive as L, File as _ } from "lucide-react";
|
|
6
|
+
const N = T.forwardRef(function(t, b) {
|
|
7
|
+
const e = z(26);
|
|
8
|
+
let r, l, o, u, i, a, f, d;
|
|
9
|
+
e[0] !== t ? ({
|
|
10
|
+
showArrow: f,
|
|
11
|
+
children: r,
|
|
12
|
+
disabled: u,
|
|
13
|
+
portalled: d,
|
|
14
|
+
content: l,
|
|
15
|
+
contentProps: o,
|
|
16
|
+
portalRef: i,
|
|
17
|
+
...a
|
|
18
|
+
} = t, e[0] = t, e[1] = r, e[2] = l, e[3] = o, e[4] = u, e[5] = i, e[6] = a, e[7] = f, e[8] = d) : (r = e[1], l = e[2], o = e[3], u = e[4], i = e[5], a = e[6], f = e[7], d = e[8]);
|
|
19
|
+
const w = d === void 0 ? !0 : d;
|
|
20
|
+
if (u || J(l))
|
|
21
|
+
return r;
|
|
22
|
+
let n;
|
|
23
|
+
e[9] !== r ? (n = /* @__PURE__ */ g(j.Trigger, { asChild: !0, children: r }), e[9] = r, e[10] = n) : n = e[10];
|
|
24
|
+
const v = !w;
|
|
25
|
+
let p;
|
|
26
|
+
e[11] !== f ? (p = f && /* @__PURE__ */ g(j.Arrow, { children: /* @__PURE__ */ g(j.ArrowTip, {}) }), e[11] = f, e[12] = p) : p = e[12];
|
|
27
|
+
let m;
|
|
28
|
+
e[13] !== l || e[14] !== o || e[15] !== b || e[16] !== p ? (m = /* @__PURE__ */ g(j.Positioner, { children: /* @__PURE__ */ A(j.Content, { ref: b, ...o, children: [
|
|
29
|
+
p,
|
|
30
|
+
l
|
|
31
|
+
] }) }), e[13] = l, e[14] = o, e[15] = b, e[16] = p, e[17] = m) : m = e[17];
|
|
32
|
+
let s;
|
|
33
|
+
e[18] !== i || e[19] !== v || e[20] !== m ? (s = /* @__PURE__ */ g(P, { disabled: v, container: i, children: m }), e[18] = i, e[19] = v, e[20] = m, e[21] = s) : s = e[21];
|
|
34
|
+
let h;
|
|
35
|
+
return e[22] !== a || e[23] !== n || e[24] !== s ? (h = /* @__PURE__ */ A(j.Root, { openDelay: 100, closeDelay: 100, ...a, children: [
|
|
36
|
+
n,
|
|
37
|
+
s
|
|
38
|
+
] }), e[22] = a, e[23] = n, e[24] = s, e[25] = h) : h = e[25], h;
|
|
39
|
+
});
|
|
40
|
+
function k(c) {
|
|
41
|
+
return typeof c == "string" ? c.trim().length === 0 : !1;
|
|
42
|
+
}
|
|
43
|
+
function J(c) {
|
|
44
|
+
if (c == null || c === !1)
|
|
45
|
+
return !0;
|
|
46
|
+
const t = T.Children.toArray(c);
|
|
47
|
+
return t.length === 0 ? !0 : t.every(k);
|
|
48
|
+
}
|
|
49
|
+
const O = T.forwardRef(function(t, b) {
|
|
50
|
+
const e = z(35);
|
|
51
|
+
let r, l, o, u, i, a, f, d, w, x, n;
|
|
52
|
+
e[0] !== t ? ({
|
|
53
|
+
children: r,
|
|
54
|
+
viewportRef: n,
|
|
55
|
+
contentRef: o,
|
|
56
|
+
viewportProps: x,
|
|
57
|
+
contentProps: l,
|
|
58
|
+
verticalScrollbarProps: w,
|
|
59
|
+
horizontalScrollbarProps: u,
|
|
60
|
+
showVerticalScrollbar: a,
|
|
61
|
+
showHorizontalScrollbar: f,
|
|
62
|
+
showCorner: d,
|
|
63
|
+
...i
|
|
64
|
+
} = t, e[0] = t, e[1] = r, e[2] = l, e[3] = o, e[4] = u, e[5] = i, e[6] = a, e[7] = f, e[8] = d, e[9] = w, e[10] = x, e[11] = n) : (r = e[1], l = e[2], o = e[3], u = e[4], i = e[5], a = e[6], f = e[7], d = e[8], w = e[9], x = e[10], n = e[11]);
|
|
65
|
+
const v = a === void 0 ? !0 : a, p = f === void 0 ? !1 : f, m = d === void 0 ? v && p : d;
|
|
66
|
+
let s;
|
|
67
|
+
e[12] !== r || e[13] !== l || e[14] !== o ? (s = /* @__PURE__ */ g(F.Content, { ...l, ref: o, children: r }), e[12] = r, e[13] = l, e[14] = o, e[15] = s) : s = e[15];
|
|
68
|
+
let h;
|
|
69
|
+
e[16] !== s || e[17] !== x || e[18] !== n ? (h = /* @__PURE__ */ g(F.Viewport, { ...x, ref: n, children: s }), e[16] = s, e[17] = x, e[18] = n, e[19] = h) : h = e[19];
|
|
70
|
+
let S;
|
|
71
|
+
e[20] !== v || e[21] !== w ? (S = v ? /* @__PURE__ */ g(F.Scrollbar, { ...w, borderRadius: "xs" }) : null, e[20] = v, e[21] = w, e[22] = S) : S = e[22];
|
|
72
|
+
let C;
|
|
73
|
+
e[23] !== u || e[24] !== p ? (C = p ? /* @__PURE__ */ g(F.Scrollbar, { orientation: "horizontal", ...u, borderRadius: "xs" }) : null, e[23] = u, e[24] = p, e[25] = C) : C = e[25];
|
|
74
|
+
let y;
|
|
75
|
+
e[26] !== m ? (y = m ? /* @__PURE__ */ g(F.Corner, {}) : null, e[26] = m, e[27] = y) : y = e[27];
|
|
76
|
+
let R;
|
|
77
|
+
return e[28] !== b || e[29] !== i || e[30] !== h || e[31] !== S || e[32] !== C || e[33] !== y ? (R = /* @__PURE__ */ A(F.Root, { ref: b, ...i, children: [
|
|
78
|
+
h,
|
|
79
|
+
S,
|
|
80
|
+
C,
|
|
81
|
+
y
|
|
82
|
+
] }), e[28] = b, e[29] = i, e[30] = h, e[31] = S, e[32] = C, e[33] = y, e[34] = R) : R = e[34], R;
|
|
83
|
+
}), Q = (c) => {
|
|
84
|
+
const t = c.split(".").pop()?.toLowerCase() ?? "";
|
|
85
|
+
return ["csv", "tsv", "xlsx", "xls", "parquet"].includes(t) ? $ : ["sql", "py", "js", "ts", "jsx", "tsx", "java", "cpp", "c", "h", "css", "scss", "sass", "php", "rb", "go", "rs", "kt", "swift"].includes(t) ? V : ["json", "jsonl", "ndjson"].includes(t) ? c.includes("/visualizations/") ? q : D : ["md", "txt", "rst", "org", "pdf", "doc", "docx", "rtf"].includes(t) ? E : ["yaml", "yml", "toml", "ini", "conf", "config"].includes(t) ? H : ["png", "jpg", "jpeg", "gif", "svg", "webp", "ico"].includes(t) ? I : ["zip", "tar", "gz", "rar", "7z"].includes(t) ? L : _;
|
|
86
|
+
};
|
|
87
|
+
export {
|
|
88
|
+
O as S,
|
|
89
|
+
N as T,
|
|
90
|
+
Q as g
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=get-file-type-icon-CirIyuE8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-file-type-icon-CirIyuE8.js","sources":["../src/components/tooltip.tsx","../src/components/scroll-area.tsx","../src/utils/get-file-type-icon.ts"],"sourcesContent":["import { Tooltip as ChakraTooltip, Portal } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface TooltipProps extends ChakraTooltip.RootProps {\n children?: React.ReactElement;\n showArrow?: boolean;\n portalled?: boolean;\n portalRef?: React.RefObject<HTMLElement>;\n content: React.ReactNode;\n contentProps?: ChakraTooltip.ContentProps;\n disabled?: boolean;\n}\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(props, ref) {\n const { showArrow, children, disabled, portalled = true, content, contentProps, portalRef, ...rest } = props;\n\n const isEmptyContent = (node: React.ReactNode): boolean => {\n if (node === null || node === undefined || node === false) return true;\n const arr = React.Children.toArray(node);\n if (arr.length === 0) return true;\n return arr.every((child) => (typeof child === \"string\" ? child.trim().length === 0 : false));\n };\n\n if (disabled || isEmptyContent(content)) return children;\n\n return (\n <ChakraTooltip.Root openDelay={100} closeDelay={100} {...rest}>\n <ChakraTooltip.Trigger asChild>{children}</ChakraTooltip.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraTooltip.Positioner>\n <ChakraTooltip.Content ref={ref} {...contentProps}>\n {showArrow && (\n <ChakraTooltip.Arrow>\n <ChakraTooltip.ArrowTip />\n </ChakraTooltip.Arrow>\n )}\n {content}\n </ChakraTooltip.Content>\n </ChakraTooltip.Positioner>\n </Portal>\n </ChakraTooltip.Root>\n );\n});\n","import { ScrollArea as ChakraScrollArea } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\ntype VerticalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\ntype HorizontalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\n\nexport interface ScrollAreaProps extends ChakraScrollArea.RootProps {\n viewportRef?: React.Ref<HTMLDivElement>;\n contentRef?: React.Ref<HTMLDivElement>;\n viewportProps?: ChakraScrollArea.ViewportProps;\n contentProps?: ChakraScrollArea.ContentProps;\n verticalScrollbarProps?: VerticalScrollbarProps;\n horizontalScrollbarProps?: HorizontalScrollbarProps;\n showVerticalScrollbar?: boolean;\n showHorizontalScrollbar?: boolean;\n showCorner?: boolean;\n}\n\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(props, ref) {\n const {\n children,\n viewportRef,\n contentRef,\n viewportProps,\n contentProps,\n verticalScrollbarProps,\n horizontalScrollbarProps,\n showVerticalScrollbar = true,\n showHorizontalScrollbar = false,\n showCorner = showVerticalScrollbar && showHorizontalScrollbar,\n ...rest\n } = props;\n\n return (\n <ChakraScrollArea.Root ref={ref} {...rest}>\n <ChakraScrollArea.Viewport {...viewportProps} ref={viewportRef}>\n <ChakraScrollArea.Content {...contentProps} ref={contentRef}>\n {children}\n </ChakraScrollArea.Content>\n </ChakraScrollArea.Viewport>\n {showVerticalScrollbar ? <ChakraScrollArea.Scrollbar {...verticalScrollbarProps} borderRadius={\"xs\"} /> : null}\n {showHorizontalScrollbar ? (\n <ChakraScrollArea.Scrollbar orientation=\"horizontal\" {...horizontalScrollbarProps} borderRadius={\"xs\"} />\n ) : null}\n {showCorner ? <ChakraScrollArea.Corner /> : null}\n </ChakraScrollArea.Root>\n );\n});\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n File,\n FileArchive,\n FileChartLine,\n FileCode,\n FileCog,\n FileImage,\n FileJson,\n FileSpreadsheet,\n FileText,\n} from \"lucide-react\";\n\nexport const getFileTypeIcon = (filename: string): LucideIcon => {\n const extension = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n if ([\"csv\", \"tsv\", \"xlsx\", \"xls\", \"parquet\"].includes(extension)) return FileSpreadsheet;\n if (\n [\n \"sql\",\n \"py\",\n \"js\",\n \"ts\",\n \"jsx\",\n \"tsx\",\n \"java\",\n \"cpp\",\n \"c\",\n \"h\",\n \"css\",\n \"scss\",\n \"sass\",\n \"php\",\n \"rb\",\n \"go\",\n \"rs\",\n \"kt\",\n \"swift\",\n ].includes(extension)\n ) {\n return FileCode;\n }\n if ([\"json\", \"jsonl\", \"ndjson\"].includes(extension)) {\n if (filename.includes(\"/visualizations/\")) return FileChartLine;\n return FileJson;\n }\n if ([\"md\", \"txt\", \"rst\", \"org\", \"pdf\", \"doc\", \"docx\", \"rtf\"].includes(extension)) return FileText;\n if ([\"yaml\", \"yml\", \"toml\", \"ini\", \"conf\", \"config\"].includes(extension)) return FileCog;\n if ([\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\", \"ico\"].includes(extension)) return FileImage;\n if ([\"zip\", \"tar\", \"gz\", \"rar\", \"7z\"].includes(extension)) return FileArchive;\n return File;\n};\n"],"names":["Tooltip","React","forwardRef","props","ref","$","_c","children","content","contentProps","disabled","portalRef","rest","showArrow","t0","portalled","undefined","_temp2","t1","ChakraTooltip","t2","t3","jsx","t4","jsxs","t5","Portal","t6","_temp","child","trim","length","node","arr","Children","toArray","every","ScrollArea","contentRef","horizontalScrollbarProps","verticalScrollbarProps","viewportProps","viewportRef","showVerticalScrollbar","showHorizontalScrollbar","showCorner","ChakraScrollArea","t7","t8","getFileTypeIcon","filename","extension","split","pop","toLowerCase","includes","FileSpreadsheet","FileCode","FileChartLine","FileJson","FileText","FileCog","FileImage","FileArchive","File"],"mappings":"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"}
|