@pstdio/ui 0.2.3 → 0.2.4

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.
@@ -11,6 +11,7 @@ interface ChatInputProps {
11
11
  onChange?: (text: string) => void;
12
12
  attachmentList?: ReactNode;
13
13
  actions?: ReactNode;
14
+ attachedToTop?: boolean;
14
15
  }
15
16
  export declare const ChatInput: (props: ChatInputProps) => import("react/jsx-runtime").JSX.Element;
16
17
  export {};
@@ -5,6 +5,8 @@ interface ChatPanelProps {
5
5
  streaming?: boolean;
6
6
  emptyStateTitle: string;
7
7
  emptyStateDescription: string;
8
+ emptyStateContent?: ReactNode;
9
+ loadingContent?: ReactNode;
8
10
  chatInputPlaceholder: string;
9
11
  chatInputDefaultValue?: string;
10
12
  onSubmitMessage?: (text: string, attachments: string[]) => void;
@@ -15,6 +17,7 @@ interface ChatPanelProps {
15
17
  onClearAttachments?: () => void;
16
18
  attachmentList?: ReactNode;
17
19
  approvalPrompt?: ReactNode;
20
+ workspaceHub?: ReactNode;
18
21
  }
19
22
  export declare const ChatPanel: (props: ChatPanelProps) => import("react/jsx-runtime").JSX.Element;
20
23
  export {};
@@ -7,3 +7,4 @@ export declare const Empty: Story;
7
7
  export declare const Conversation: Story;
8
8
  export declare const Streaming: Story;
9
9
  export declare const LongStickyUserPrompt: Story;
10
+ export declare const ConversationWithWorkspaceHub: Story;
@@ -0,0 +1 @@
1
+ export declare const ChatSkeleton: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ interface ChatWorkspaceHubProps {
3
+ changesLabel: string;
4
+ additions: number;
5
+ deletions: number;
6
+ action?: ReactNode;
7
+ }
8
+ export declare const ChatWorkspaceHub: (props: ChatWorkspaceHubProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { ChatWorkspaceHub } from './workspace-hub';
3
+ declare const meta: Meta<typeof ChatWorkspaceHub>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof ChatWorkspaceHub>;
6
+ export declare const Default: Story;
@@ -7,7 +7,9 @@ export type { AutoScrollProps } from './components/auto-scroll';
7
7
  export { AutoScroll } from './components/auto-scroll';
8
8
  export { ChatInput } from './components/chat-input';
9
9
  export { ChatPanel } from './components/chat-panel';
10
+ export { ChatSkeleton } from './components/chat-skeleton';
10
11
  export type { SessionMessage, SessionMessagePart } from './components/message-types';
11
12
  export type { SendButtonProps } from './components/send-button';
12
13
  export { SendButton } from './components/send-button';
14
+ export { ChatWorkspaceHub } from './components/workspace-hub';
13
15
  export { createSerializedPromptState } from './utils/editor-state';
@@ -2,6 +2,8 @@ interface DiffEditorProps {
2
2
  original: string;
3
3
  modified: string;
4
4
  language?: string;
5
+ oldPath?: string;
6
+ newPath?: string;
5
7
  sideBySide?: boolean;
6
8
  disableScroll?: boolean;
7
9
  }
@@ -0,0 +1,14 @@
1
+ import { DiffViewProps } from '@git-diff-view/react';
2
+ interface ResolveDiffLanguageInput {
3
+ language?: string;
4
+ oldPath?: string;
5
+ newPath?: string;
6
+ }
7
+ interface BuildDiffViewDataInput extends ResolveDiffLanguageInput {
8
+ original: string;
9
+ modified: string;
10
+ }
11
+ type DiffViewData = NonNullable<DiffViewProps<unknown>["data"]>;
12
+ export declare const resolveDiffLanguage: ({ language, oldPath, newPath }: ResolveDiffLanguageInput) => string;
13
+ export declare const buildDiffViewData: ({ original, modified, language, oldPath, newPath, }: BuildDiffViewDataInput) => DiffViewData;
14
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,9 @@
1
1
  export type ViewMode = "board" | "list";
2
- export type GroupingField = "status" | "complexity" | "assignee" | "priority" | "none";
3
- export type OrderingField = "manual" | "updated" | "title" | "complexity" | "priority" | "ticketId";
2
+ export type GroupingField = "status" | "assignee" | "none";
3
+ export type OrderingField = "manual" | "updated" | "title" | "ticketId";
4
4
  export type SortDirection = "asc" | "desc";
5
- export type DisplayProperty = "id" | "status" | "assignee" | "priority" | "complexity" | "labels" | "updated";
6
- export type FilterCategory = "status" | "assignee" | "priority" | "complexity" | "labels";
5
+ export type DisplayProperty = "id" | "status" | "assignee" | "labels" | "updated";
6
+ export type FilterCategory = "status" | "assignee" | "labels";
7
7
  export interface WorkspaceOrdering {
8
8
  field: OrderingField;
9
9
  direction: SortDirection;
@@ -36,8 +36,6 @@ export interface WorkspaceTicket {
36
36
  status?: string | null;
37
37
  statusColor?: string;
38
38
  assignee?: string | null;
39
- priority?: string | null;
40
- complexity?: string | null;
41
39
  labels?: string[];
42
40
  updatedAt?: string | null;
43
41
  parentPath?: string[];
@@ -0,0 +1,160 @@
1
+ import { jsx as p, jsxs as F } from "react/jsx-runtime";
2
+ import { c as E } from "react/compiler-runtime";
3
+ import { Span as D, Box as N, EmptyState as w, VStack as V } from "@chakra-ui/react";
4
+ import { DiffModeEnum as j, DiffView as A } from "@git-diff-view/react";
5
+ import "@git-diff-view/react/styles/diff-view.css";
6
+ import { generateDiffFile as B } from "@git-diff-view/file";
7
+ import * as T from "react";
8
+ const Y = (a) => {
9
+ const e = E(18), {
10
+ fileName: i,
11
+ additions: t,
12
+ deletions: r,
13
+ label: o,
14
+ variant: n,
15
+ size: l,
16
+ onClick: s,
17
+ onClickFileLink: c
18
+ } = a, d = n === void 0 ? "outline" : n, m = (l === void 0 ? "default" : l) === "small", x = d === "outline" ? "1px solid" : "none", b = d === "outline" ? m ? "3xs" : "2xs" : "2px", h = m ? "label/S/regular" : void 0, u = s ? "pointer" : "default";
19
+ let g;
20
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (g = {
21
+ background: "bg.muted"
22
+ }, e[0] = g) : g = e[0];
23
+ let y;
24
+ e[1] !== i || e[2] !== c ? (y = i && /* @__PURE__ */ p(D, { display: "inline-block", maxW: "24ch", truncate: !0, mr: "xs", title: i, onClick: (C) => {
25
+ C.stopPropagation(), c?.();
26
+ }, cursor: c ? "pointer" : "default", _hover: {
27
+ textDecoration: c ? "underline" : "none",
28
+ color: c ? "fg.blue-dark" : "fg.muted"
29
+ }, children: i }), e[1] = i, e[2] = c, e[3] = y) : y = e[3];
30
+ const k = `+${t}`;
31
+ let S;
32
+ e[4] !== k ? (S = /* @__PURE__ */ p(D, { color: "fg.success", children: k }), e[4] = k, e[5] = S) : S = e[5];
33
+ const _ = `-${r}`;
34
+ let v;
35
+ e[6] !== _ ? (v = /* @__PURE__ */ p(D, { color: "fg.error", children: _ }), e[6] = _, e[7] = v) : v = e[7];
36
+ let L;
37
+ return e[8] !== o || e[9] !== s || e[10] !== v || e[11] !== x || e[12] !== b || e[13] !== h || e[14] !== u || e[15] !== y || e[16] !== S ? (L = /* @__PURE__ */ F(D, { display: "inline-flex", alignItems: "center", gap: "2xs", border: x, borderColor: "border.muted", color: "fg.muted", paddingX: b, paddingY: "1px", borderRadius: "xs", textStyle: h, cursor: u, onClick: s, _hover: g, children: [
38
+ o,
39
+ y,
40
+ S,
41
+ v
42
+ ] }), e[8] = o, e[9] = s, e[10] = v, e[11] = x, e[12] = b, e[13] = h, e[14] = u, e[15] = y, e[16] = S, e[17] = L) : L = e[17], L;
43
+ }, $ = "before.txt", z = "after.txt", R = {
44
+ ts: "typescript",
45
+ tsx: "typescript",
46
+ js: "javascript",
47
+ jsx: "javascript",
48
+ json: "json",
49
+ md: "markdown",
50
+ py: "python",
51
+ go: "go",
52
+ rs: "rust",
53
+ css: "css",
54
+ html: "html",
55
+ sh: "shell",
56
+ yml: "yaml",
57
+ yaml: "yaml"
58
+ }, W = (a) => (a.split(/[\\/]/).pop() ?? a).split(".").pop()?.toLowerCase(), H = ({
59
+ language: a,
60
+ oldPath: e,
61
+ newPath: i
62
+ }) => {
63
+ if (a)
64
+ return a;
65
+ const t = W(i ?? e ?? "");
66
+ return t ? R[t] ?? "plaintext" : "plaintext";
67
+ }, I = ({
68
+ original: a,
69
+ modified: e,
70
+ language: i,
71
+ oldPath: t,
72
+ newPath: r
73
+ }) => {
74
+ const o = t ?? r ?? $, n = r ?? t ?? z, l = H({
75
+ language: i,
76
+ oldPath: t,
77
+ newPath: r
78
+ }), s = B(o, a, n, e, l, l, {
79
+ context: 3
80
+ }, "pstdio-diff-view");
81
+ return {
82
+ oldFile: {
83
+ fileName: o,
84
+ fileLang: l,
85
+ content: a
86
+ },
87
+ newFile: {
88
+ fileName: n,
89
+ fileLang: l,
90
+ content: e
91
+ },
92
+ hunks: s._diffList
93
+ };
94
+ };
95
+ function q(a) {
96
+ const e = E(13), {
97
+ original: i,
98
+ modified: t,
99
+ language: r,
100
+ oldPath: o,
101
+ newPath: n,
102
+ sideBySide: l,
103
+ disableScroll: s
104
+ } = a, c = l === void 0 ? !1 : l, d = s === void 0 ? !0 : s;
105
+ let f;
106
+ e[0] !== r || e[1] !== t || e[2] !== n || e[3] !== o || e[4] !== i ? (f = I({
107
+ original: i,
108
+ modified: t,
109
+ language: r,
110
+ oldPath: o,
111
+ newPath: n
112
+ }), e[0] = r, e[1] = t, e[2] = n, e[3] = o, e[4] = i, e[5] = f) : f = e[5];
113
+ const m = f, x = c ? j.Split : j.Unified, b = d ? "hidden" : "auto";
114
+ let h;
115
+ e[6] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (h = {
116
+ "& .gdv-root": {
117
+ border: "none",
118
+ borderRadius: "0"
119
+ },
120
+ "& .gdv-line-number": {
121
+ fontSize: "11px"
122
+ }
123
+ }, e[6] = h) : h = e[6];
124
+ let u;
125
+ e[7] !== m || e[8] !== x ? (u = /* @__PURE__ */ p(A, { data: m, diffViewMode: x, diffViewTheme: "dark", diffViewHighlight: !0, diffViewWrap: !0, diffViewFontSize: 11 }), e[7] = m, e[8] = x, e[9] = u) : u = e[9];
126
+ let g;
127
+ return e[10] !== b || e[11] !== u ? (g = /* @__PURE__ */ p(N, { height: "100%", width: "100%", overflow: b, css: h, children: u }), e[10] = b, e[11] = u, e[12] = g) : g = e[12], g;
128
+ }
129
+ const G = T.forwardRef(function(e, i) {
130
+ const t = E(19);
131
+ let r, o, n, l, s;
132
+ t[0] !== e ? ({
133
+ title: s,
134
+ description: o,
135
+ icon: n,
136
+ children: r,
137
+ ...l
138
+ } = e, t[0] = e, t[1] = r, t[2] = o, t[3] = n, t[4] = l, t[5] = s) : (r = t[1], o = t[2], n = t[3], l = t[4], s = t[5]);
139
+ let c;
140
+ t[6] !== n ? (c = n && /* @__PURE__ */ p(w.Indicator, { children: n }), t[6] = n, t[7] = c) : c = t[7];
141
+ let d;
142
+ t[8] !== o || t[9] !== s ? (d = o ? /* @__PURE__ */ F(V, { textAlign: "center", children: [
143
+ /* @__PURE__ */ p(w.Title, { fontWeight: "normal", children: s }),
144
+ /* @__PURE__ */ p(w.Description, { children: o })
145
+ ] }) : /* @__PURE__ */ p(w.Title, { fontWeight: "normal", children: s }), t[8] = o, t[9] = s, t[10] = d) : d = t[10];
146
+ let f;
147
+ t[11] !== r || t[12] !== c || t[13] !== d ? (f = /* @__PURE__ */ F(w.Content, { children: [
148
+ c,
149
+ d,
150
+ r
151
+ ] }), t[11] = r, t[12] = c, t[13] = d, t[14] = f) : f = t[14];
152
+ let m;
153
+ return t[15] !== i || t[16] !== l || t[17] !== f ? (m = /* @__PURE__ */ p(w.Root, { ref: i, ...l, children: f }), t[15] = i, t[16] = l, t[17] = f, t[18] = m) : m = t[18], m;
154
+ });
155
+ export {
156
+ q as D,
157
+ G as E,
158
+ Y as a
159
+ };
160
+ //# sourceMappingURL=empty-state-DHSKuwia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state-DHSKuwia.js","sources":["../src/components/diff-bubble.tsx","../src/components/diff-view-adapter.ts","../src/components/diff-editor.tsx","../src/components/empty-state.tsx"],"sourcesContent":["import { Span } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { ComponentProps, MouseEvent } from \"react\";\n\ninterface DiffBubbleProps extends Omit<ComponentProps<typeof Span>, \"onClick\"> {\n fileName?: string;\n additions: number;\n deletions: number;\n label?: React.ReactNode;\n variant?: \"outline\" | \"ghost\";\n size?: \"default\" | \"small\";\n onClick?: (event: MouseEvent<HTMLSpanElement>) => void;\n onClickFileLink?: () => void;\n}\n\nexport const DiffBubble = (props: DiffBubbleProps) => {\n const {\n fileName,\n additions,\n deletions,\n label,\n variant = \"outline\",\n size = \"default\",\n onClick,\n onClickFileLink,\n } = props;\n\n const isSmall = size === \"small\";\n\n return (\n <Span\n display=\"inline-flex\"\n alignItems=\"center\"\n gap={\"2xs\"}\n border={variant === \"outline\" ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n color=\"fg.muted\"\n paddingX={variant === \"outline\" ? (isSmall ? \"3xs\" : \"2xs\") : \"2px\"}\n paddingY=\"1px\"\n borderRadius=\"xs\"\n textStyle={isSmall ? \"label/S/regular\" : undefined}\n cursor={onClick ? \"pointer\" : \"default\"}\n onClick={onClick}\n _hover={{\n background: \"bg.muted\",\n }}\n >\n {label}\n {fileName && (\n <Span\n display=\"inline-block\"\n maxW=\"24ch\"\n truncate\n mr=\"xs\"\n title={fileName}\n onClick={(e) => {\n e.stopPropagation();\n onClickFileLink?.();\n }}\n cursor={onClickFileLink ? \"pointer\" : \"default\"}\n _hover={{\n textDecoration: onClickFileLink ? \"underline\" : \"none\",\n color: onClickFileLink ? \"fg.blue-dark\" : \"fg.muted\",\n }}\n >\n {fileName}\n </Span>\n )}\n <Span color=\"fg.success\">{`+${additions}`}</Span>\n <Span color=\"fg.error\">{`-${deletions}`}</Span>\n </Span>\n );\n};\n","import { generateDiffFile } from \"@git-diff-view/file\";\nimport type { DiffViewProps } from \"@git-diff-view/react\";\n\nconst FALLBACK_OLD_PATH = \"before.txt\";\nconst FALLBACK_NEW_PATH = \"after.txt\";\n\ninterface ResolveDiffLanguageInput {\n language?: string;\n oldPath?: string;\n newPath?: string;\n}\n\ninterface BuildDiffViewDataInput extends ResolveDiffLanguageInput {\n original: string;\n modified: string;\n}\n\ntype DiffViewData = NonNullable<DiffViewProps<unknown>[\"data\"]>;\n\nconst extToLanguage: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n json: \"json\",\n md: \"markdown\",\n py: \"python\",\n go: \"go\",\n rs: \"rust\",\n css: \"css\",\n html: \"html\",\n sh: \"shell\",\n yml: \"yaml\",\n yaml: \"yaml\",\n};\n\nconst getExtension = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n const ext = fileName.split(\".\").pop();\n\n return ext?.toLowerCase();\n};\n\nexport const resolveDiffLanguage = ({ language, oldPath, newPath }: ResolveDiffLanguageInput) => {\n if (language) {\n return language;\n }\n\n const extension = getExtension(newPath ?? oldPath ?? \"\");\n\n if (!extension) {\n return \"plaintext\";\n }\n\n return extToLanguage[extension] ?? \"plaintext\";\n};\n\nexport const buildDiffViewData = ({\n original,\n modified,\n language,\n oldPath,\n newPath,\n}: BuildDiffViewDataInput): DiffViewData => {\n const oldFileName = oldPath ?? newPath ?? FALLBACK_OLD_PATH;\n const newFileName = newPath ?? oldPath ?? FALLBACK_NEW_PATH;\n const fileLanguage = resolveDiffLanguage({ language, oldPath, newPath });\n\n const diffFile = generateDiffFile(\n oldFileName,\n original,\n newFileName,\n modified,\n fileLanguage,\n fileLanguage,\n { context: 3 },\n \"pstdio-diff-view\",\n );\n\n return {\n oldFile: {\n fileName: oldFileName,\n fileLang: fileLanguage,\n content: original,\n },\n newFile: {\n fileName: newFileName,\n fileLang: fileLanguage,\n content: modified,\n },\n hunks: diffFile._diffList,\n };\n};\n","import { DiffModeEnum, DiffView } from \"@git-diff-view/react\";\nimport \"@git-diff-view/react/styles/diff-view.css\";\nimport { Box } from \"@chakra-ui/react\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\n\ninterface DiffEditorProps {\n original: string;\n modified: string;\n language?: string;\n oldPath?: string;\n newPath?: string;\n sideBySide?: boolean;\n disableScroll?: boolean;\n}\n\nexport function DiffEditor(props: DiffEditorProps) {\n const { original, modified, language, oldPath, newPath, sideBySide = false, disableScroll = true } = props;\n\n const data = buildDiffViewData({\n original,\n modified,\n language,\n oldPath,\n newPath,\n });\n\n const mode = sideBySide ? DiffModeEnum.Split : DiffModeEnum.Unified;\n\n return (\n <Box\n height=\"100%\"\n width=\"100%\"\n overflow={disableScroll ? \"hidden\" : \"auto\"}\n css={{\n \"& .gdv-root\": {\n border: \"none\",\n borderRadius: \"0\",\n },\n \"& .gdv-line-number\": {\n fontSize: \"11px\",\n },\n }}\n >\n <DiffView\n data={data}\n diffViewMode={mode}\n diffViewTheme=\"dark\"\n diffViewHighlight={true}\n diffViewWrap={true}\n diffViewFontSize={11}\n />\n </Box>\n );\n}\n","import { EmptyState as ChakraEmptyState, VStack } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface EmptyStateProps extends ChakraEmptyState.RootProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(props, ref) {\n const { title, description, icon, children, ...rest } = props;\n return (\n <ChakraEmptyState.Root ref={ref} {...rest}>\n <ChakraEmptyState.Content>\n {icon && <ChakraEmptyState.Indicator>{icon}</ChakraEmptyState.Indicator>}\n {description ? (\n <VStack textAlign=\"center\">\n <ChakraEmptyState.Title fontWeight=\"normal\">{title}</ChakraEmptyState.Title>\n <ChakraEmptyState.Description>{description}</ChakraEmptyState.Description>\n </VStack>\n ) : (\n <ChakraEmptyState.Title fontWeight=\"normal\">{title}</ChakraEmptyState.Title>\n )}\n {children}\n </ChakraEmptyState.Content>\n </ChakraEmptyState.Root>\n );\n});\n"],"names":["DiffBubble","props","$","_c","fileName","additions","deletions","label","variant","t0","size","t1","onClick","onClickFileLink","undefined","isSmall","t2","t3","t4","t5","t6","Symbol","for","background","t7","jsx","Span","e","stopPropagation","textDecoration","color","t8","t9","t10","t11","t12","FALLBACK_OLD_PATH","FALLBACK_NEW_PATH","extToLanguage","ts","tsx","js","json","md","py","go","rs","css","html","sh","yml","yaml","getExtension","path","split","pop","toLowerCase","resolveDiffLanguage","language","oldPath","newPath","extension","buildDiffViewData","original","modified","oldFileName","newFileName","fileLanguage","diffFile","generateDiffFile","context","oldFile","fileLang","content","newFile","hunks","_diffList","DiffEditor","sideBySide","disableScroll","data","mode","DiffModeEnum","Split","Unified","border","borderRadius","fontSize","DiffView","Box","EmptyState","React","forwardRef","ref","children","description","icon","rest","title","ChakraEmptyState","jsxs","VStack"],"mappings":"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"}