dishui 0.0.91 → 0.0.101
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/.release-verified.json +6 -0
- package/dist/ai.js +24 -0
- package/dist/components/Card/Metric2.js +11 -11
- package/dist/components/Card/Metric2.js.map +1 -1
- package/dist/components/Card/Ticket.d.ts +52 -0
- package/dist/components/Card/Ticket2.js +218 -0
- package/dist/components/Card/Ticket2.js.map +1 -0
- package/dist/components/Card/index.d.ts +32 -0
- package/dist/components/Card/index.js +211 -203
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/GroupButton/index.js +4 -4
- package/dist/components/GroupButton/index.js.map +1 -1
- package/dist/components/GroupedTable/index.js +10 -10
- package/dist/components/GroupedTable/index.js.map +1 -1
- package/dist/components/NavigationList/index.js +9 -9
- package/dist/components/NavigationList/index.js.map +1 -1
- package/dist/components/Section/index.js +11 -11
- package/dist/components/Section/index.js.map +1 -1
- package/dist/components/Skeleton/index.js +1 -1
- package/dist/components/Skeleton/index.js.map +1 -1
- package/dist/components/Table/index.js +6 -6
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/ai/AgentChat/index.d.ts +54 -0
- package/dist/components/ai/AgentChat/index.js +176 -0
- package/dist/components/ai/AgentChat/index.js.map +1 -0
- package/dist/components/ai/AgentRunCard/index.d.ts +38 -0
- package/dist/components/ai/AgentRunCard/index.js +100 -0
- package/dist/components/ai/AgentRunCard/index.js.map +1 -0
- package/dist/components/ai/AgentScreen/index.d.ts +50 -0
- package/dist/components/ai/AgentScreen/index.js +233 -0
- package/dist/components/ai/AgentScreen/index.js.map +1 -0
- package/dist/components/ai/ApprovalCard/index.d.ts +26 -0
- package/dist/components/ai/ApprovalCard/index.js +89 -0
- package/dist/components/ai/ApprovalCard/index.js.map +1 -0
- package/dist/components/ai/CodeView/index.d.ts +30 -0
- package/dist/components/ai/CodeView/index.js +149 -0
- package/dist/components/ai/CodeView/index.js.map +1 -0
- package/dist/components/ai/CommandSearch/index.d.ts +39 -0
- package/dist/components/ai/CommandSearch/index.js +217 -0
- package/dist/components/ai/CommandSearch/index.js.map +1 -0
- package/dist/components/ai/ContextCards/index.d.ts +42 -0
- package/dist/components/ai/ContextCards/index.js +106 -0
- package/dist/components/ai/ContextCards/index.js.map +1 -0
- package/dist/components/ai/DiffTable/index.d.ts +70 -0
- package/dist/components/ai/DiffTable/index.js +235 -0
- package/dist/components/ai/DiffTable/index.js.map +1 -0
- package/dist/components/ai/FilterTable/index.d.ts +35 -0
- package/dist/components/ai/FilterTable/index.js +86 -0
- package/dist/components/ai/FilterTable/index.js.map +1 -0
- package/dist/components/ai/FineTuneCard/index.d.ts +24 -0
- package/dist/components/ai/FineTuneCard/index.js +75 -0
- package/dist/components/ai/FineTuneCard/index.js.map +1 -0
- package/dist/components/ai/InsightCards/index.d.ts +23 -0
- package/dist/components/ai/InsightCards/index.js +64 -0
- package/dist/components/ai/InsightCards/index.js.map +1 -0
- package/dist/components/ai/IssueCard/index.d.ts +39 -0
- package/dist/components/ai/IssueCard/index.js +78 -0
- package/dist/components/ai/IssueCard/index.js.map +1 -0
- package/dist/components/ai/LoadingState/index.d.ts +22 -0
- package/dist/components/ai/LoadingState/index.js +80 -0
- package/dist/components/ai/LoadingState/index.js.map +1 -0
- package/dist/components/ai/PromptBar/index.d.ts +26 -0
- package/dist/components/ai/PromptBar/index.js +117 -0
- package/dist/components/ai/PromptBar/index.js.map +1 -0
- package/dist/components/ai/RecommendationCard/index.d.ts +44 -0
- package/dist/components/ai/RecommendationCard/index.js +142 -0
- package/dist/components/ai/RecommendationCard/index.js.map +1 -0
- package/dist/components/ai/RecordsTable/index.d.ts +65 -0
- package/dist/components/ai/RecordsTable/index.js +334 -0
- package/dist/components/ai/RecordsTable/index.js.map +1 -0
- package/dist/components/ai/SelectionActions/index.d.ts +19 -0
- package/dist/components/ai/SelectionActions/index.js +40 -0
- package/dist/components/ai/SelectionActions/index.js.map +1 -0
- package/dist/components/ai/StateFlow/index.d.ts +24 -0
- package/dist/components/ai/StateFlow/index.js +50 -0
- package/dist/components/ai/StateFlow/index.js.map +1 -0
- package/dist/components/ai/StreamingText/index.d.ts +44 -0
- package/dist/components/ai/StreamingText/index.js +211 -0
- package/dist/components/ai/StreamingText/index.js.map +1 -0
- package/dist/components/ai/TaskRows/index.d.ts +53 -0
- package/dist/components/ai/TaskRows/index.js +186 -0
- package/dist/components/ai/TaskRows/index.js.map +1 -0
- package/dist/components/ai/Thinking/index.d.ts +47 -0
- package/dist/components/ai/Thinking/index.js +197 -0
- package/dist/components/ai/Thinking/index.js.map +1 -0
- package/dist/components/ai/ToolChips/index.d.ts +21 -0
- package/dist/components/ai/ToolChips/index.js +63 -0
- package/dist/components/ai/ToolChips/index.js.map +1 -0
- package/dist/components/ai/index.d.ts +54 -0
- package/dist/components/ai/shared.d.ts +13 -0
- package/dist/components/ai/shared.js +25 -0
- package/dist/components/ai/shared.js.map +1 -0
- package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/Flow/constants.js +3 -3
- package/dist/components/pro/Flow/constants.js.map +1 -1
- package/dist/components/pro/Flow/nodes/shapes.js +3 -3
- package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
- package/dist/components/pro/Flow/utils/themeColor.d.ts +2 -2
- package/dist/components/pro/Flow/utils/themeColor.js +2 -2
- package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
- package/dist/components/pro/Kanban/Kanban.d.ts +3 -0
- package/dist/components/pro/Kanban/Kanban.js +339 -0
- package/dist/components/pro/Kanban/Kanban.js.map +1 -0
- package/dist/components/pro/Kanban/Swimlanes.d.ts +3 -0
- package/dist/components/pro/Kanban/Swimlanes.js +60 -0
- package/dist/components/pro/Kanban/Swimlanes.js.map +1 -0
- package/dist/components/pro/Kanban/index.d.ts +5 -0
- package/dist/components/pro/Kanban/types.d.ts +103 -0
- package/dist/components/pro/Kanban/useKanbanDrag.d.ts +17 -0
- package/dist/components/pro/Kanban/useKanbanDrag.js +69 -0
- package/dist/components/pro/Kanban/useKanbanDrag.js.map +1 -0
- package/dist/components/pro/Kanban/utils.d.ts +13 -0
- package/dist/components/pro/Kanban/utils.js +48 -0
- package/dist/components/pro/Kanban/utils.js.map +1 -0
- package/dist/components/pro/RichTextEditor/AIRewrite.js +158 -127
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.d.ts +2 -0
- package/dist/components/pro/RichTextEditor/BlockHandle.js +156 -115
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js +136 -159
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -41
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +59 -53
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +48 -44
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +67 -63
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.d.ts +1 -0
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +182 -129
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.d.ts +1 -0
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +3 -3
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.d.ts +3 -0
- package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js +31 -0
- package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js.map +1 -0
- package/dist/components/pro/RichTextEditor/index.d.ts +1 -1
- package/dist/components/pro/RichTextEditor/types.d.ts +78 -11
- package/dist/components/pro/RichTextEditor/types.js +11 -0
- package/dist/components/pro/RichTextEditor/types.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/index-nostyled.d.ts +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +134 -107
- package/dist/kanban.js +5 -0
- package/dist/layouts/Sidebar.d.ts +16 -0
- package/dist/layouts/Sidebar.js +85 -52
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/utils/i18n.js +20 -0
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js +1 -1
- package/dist/utils/menu.js.map +1 -1
- package/package.json +14 -3
package/dist/ai.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import e from "./components/ai/ApprovalCard/index.js";
|
|
2
|
+
import { AGENT_STATUS_LABEL as t, formatDuration as n, formatElapsed as r } from "./components/ai/shared.js";
|
|
3
|
+
import i, { confidenceLevel as a } from "./components/ai/RecommendationCard/index.js";
|
|
4
|
+
import o from "./components/ai/ContextCards/index.js";
|
|
5
|
+
import s from "./components/ai/InsightCards/index.js";
|
|
6
|
+
import c from "./components/ai/FineTuneCard/index.js";
|
|
7
|
+
import l from "./components/ai/IssueCard/index.js";
|
|
8
|
+
import u from "./components/ai/AgentRunCard/index.js";
|
|
9
|
+
import d from "./components/ai/StreamingText/index.js";
|
|
10
|
+
import f from "./components/ai/LoadingState/index.js";
|
|
11
|
+
import p from "./components/ai/Thinking/index.js";
|
|
12
|
+
import m from "./components/ai/ToolChips/index.js";
|
|
13
|
+
import h from "./components/ai/TaskRows/index.js";
|
|
14
|
+
import g from "./components/ai/AgentChat/index.js";
|
|
15
|
+
import _ from "./components/ai/PromptBar/index.js";
|
|
16
|
+
import v, { diffRowChange as y, isDiffCellChange as b } from "./components/ai/DiffTable/index.js";
|
|
17
|
+
import x, { STRENGTH_LABEL as S, formatRelativeTime as C, strengthPercent as w } from "./components/ai/RecordsTable/index.js";
|
|
18
|
+
import T from "./components/ai/FilterTable/index.js";
|
|
19
|
+
import E from "./components/ai/CommandSearch/index.js";
|
|
20
|
+
import D from "./components/ai/StateFlow/index.js";
|
|
21
|
+
import O from "./components/ai/CodeView/index.js";
|
|
22
|
+
import k from "./components/ai/SelectionActions/index.js";
|
|
23
|
+
import A from "./components/ai/AgentScreen/index.js";
|
|
24
|
+
export { t as AGENT_STATUS_LABEL, g as AgentChat, u as AgentRunCard, A as AgentScreen, e as ApprovalCard, O as CodeView, E as CommandSearch, o as ContextCards, v as DiffTable, T as FilterTable, c as FineTuneCard, s as InsightCards, l as IssueCard, f as LoadingState, _ as PromptBar, i as RecommendationCard, x as RecordsTable, S as STRENGTH_LABEL, k as SelectionActions, D as StateFlow, d as StreamingText, h as TaskRows, p as Thinking, m as ToolChips, a as confidenceLevel, y as diffRowChange, n as formatDuration, r as formatElapsed, C as formatRelativeTime, b as isDiffCellChange, w as strengthPercent };
|
|
@@ -5,40 +5,40 @@ import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
|
5
5
|
//#region src/components/Card/Metric.tsx
|
|
6
6
|
var r = [], i = ({ title: i, meta: a, period: o, value: s, description: c, items: l = r, loading: u = !1, className: d, ...f }) => /* @__PURE__ */ n("article", {
|
|
7
7
|
...f,
|
|
8
|
-
className: e("
|
|
8
|
+
className: e("dishui-card-metric", d),
|
|
9
9
|
"aria-busy": u || void 0,
|
|
10
10
|
children: [/* @__PURE__ */ n("div", {
|
|
11
|
-
className: "
|
|
11
|
+
className: "dishui-card-metric__body",
|
|
12
12
|
children: [
|
|
13
13
|
(a != null || o != null) && /* @__PURE__ */ n("div", {
|
|
14
|
-
className: "
|
|
14
|
+
className: "dishui-card-metric__meta",
|
|
15
15
|
children: [/* @__PURE__ */ t("span", { children: a }), /* @__PURE__ */ t("span", {
|
|
16
|
-
className: "
|
|
16
|
+
className: "dishui-card-metric__period",
|
|
17
17
|
children: o
|
|
18
18
|
})]
|
|
19
19
|
}),
|
|
20
20
|
/* @__PURE__ */ t("h3", {
|
|
21
|
-
className: "
|
|
21
|
+
className: "dishui-card-metric__title",
|
|
22
22
|
children: i
|
|
23
23
|
}),
|
|
24
24
|
/* @__PURE__ */ t("div", {
|
|
25
|
-
className: "
|
|
25
|
+
className: "dishui-card-metric__value",
|
|
26
26
|
children: u ? /* @__PURE__ */ t("span", {
|
|
27
|
-
className: "
|
|
27
|
+
className: "dishui-card-metric__skeleton",
|
|
28
28
|
"aria-hidden": "true"
|
|
29
29
|
}) : s
|
|
30
30
|
}),
|
|
31
31
|
c != null && /* @__PURE__ */ t("div", {
|
|
32
|
-
className: "
|
|
32
|
+
className: "dishui-card-metric__description",
|
|
33
33
|
children: c
|
|
34
34
|
})
|
|
35
35
|
]
|
|
36
36
|
}), l.length > 0 && /* @__PURE__ */ t("dl", {
|
|
37
|
-
className: "
|
|
37
|
+
className: "dishui-card-metric__footer",
|
|
38
38
|
children: l.map((e, r) => /* @__PURE__ */ n("div", {
|
|
39
|
-
className: "
|
|
39
|
+
className: "dishui-card-metric__item",
|
|
40
40
|
children: [/* @__PURE__ */ t("dt", { children: e.label }), /* @__PURE__ */ t("dd", { children: u ? /* @__PURE__ */ t("span", {
|
|
41
|
-
className: "
|
|
41
|
+
className: "dishui-card-metric__skeleton",
|
|
42
42
|
"aria-hidden": "true"
|
|
43
43
|
}) : e.value })]
|
|
44
44
|
}, e.key ?? r))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Metric2.js","names":[],"sources":["../../../src/components/Card/Metric.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport './Metric.css';\n\nexport type CardMetricItem = {\n /** Stable identity for items that may be reordered. */\n key?: React.Key;\n label: React.ReactNode;\n value: React.ReactNode;\n};\n\nexport type CardMetricProps = Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'children'> & {\n title: React.ReactNode;\n meta?: React.ReactNode;\n period?: React.ReactNode;\n value: React.ReactNode;\n description?: React.ReactNode;\n items?: CardMetricItem[];\n loading?: boolean;\n};\n\nconst EMPTY_ITEMS: CardMetricItem[] = [];\n\nexport const CardMetric = ({\n title, meta, period, value, description, items = EMPTY_ITEMS, loading = false,\n className, ...rest\n}: CardMetricProps) => (\n <article {...rest} className={cn('
|
|
1
|
+
{"version":3,"file":"Metric2.js","names":[],"sources":["../../../src/components/Card/Metric.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport './Metric.css';\n\nexport type CardMetricItem = {\n /** Stable identity for items that may be reordered. */\n key?: React.Key;\n label: React.ReactNode;\n value: React.ReactNode;\n};\n\nexport type CardMetricProps = Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'children'> & {\n title: React.ReactNode;\n meta?: React.ReactNode;\n period?: React.ReactNode;\n value: React.ReactNode;\n description?: React.ReactNode;\n items?: CardMetricItem[];\n loading?: boolean;\n};\n\nconst EMPTY_ITEMS: CardMetricItem[] = [];\n\nexport const CardMetric = ({\n title, meta, period, value, description, items = EMPTY_ITEMS, loading = false,\n className, ...rest\n}: CardMetricProps) => (\n <article {...rest} className={cn('dishui-card-metric', className)} aria-busy={loading || undefined}>\n <div className=\"dishui-card-metric__body\">\n {((meta !== null && meta !== undefined) || (period !== null && period !== undefined)) && (\n <div className=\"dishui-card-metric__meta\">\n <span>{meta}</span>\n <span className=\"dishui-card-metric__period\">{period}</span>\n </div>\n )}\n <h3 className=\"dishui-card-metric__title\">{title}</h3>\n <div className=\"dishui-card-metric__value\">\n {loading ? <span className=\"dishui-card-metric__skeleton\" aria-hidden=\"true\" /> : value}\n </div>\n {description !== null && description !== undefined && <div className=\"dishui-card-metric__description\">{description}</div>}\n </div>\n {items.length > 0 && (\n <dl className=\"dishui-card-metric__footer\">\n {items.map((item, index) => (\n <div className=\"dishui-card-metric__item\" key={item.key ?? index}>\n <dt>{item.label}</dt>\n <dd>{loading ? <span className=\"dishui-card-metric__skeleton\" aria-hidden=\"true\" /> : item.value}</dd>\n </div>\n ))}\n </dl>\n )}\n </article>\n);\n"],"mappings":";;;;;AAqBA,IAAM,IAAgC,CAAC,GAE1B,KAAc,EACzB,UAAO,SAAM,WAAQ,UAAO,gBAAa,WAAQ,GAAa,aAAU,IACxE,cAAW,GAAG,QAEd,kBAAC,WAAD;CAAS,GAAI;CAAM,WAAW,EAAG,sBAAsB,CAAS;CAAG,aAAW,KAAW,KAAA;CAAzF,UAAA,CACE,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;IACK,KAAS,QAAgC,KAAW,SACrD,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,QAAD,EAAA,UAAO,EAAW,CAAA,GAClB,kBAAC,QAAD;KAAM,WAAU;KAA8B,UAAA;IAAa,CAAA,CACxD;;GAEP,kBAAC,MAAD;IAAI,WAAU;IAA6B,UAAA;GAAU,CAAA;GACrD,kBAAC,OAAD;IAAK,WAAU;IACZ,UAAA,IAAU,kBAAC,QAAD;KAAM,WAAU;KAA+B,eAAY;IAAQ,CAAA,IAAI;GAC/E,CAAA;GACJ,KAAgB,QAAqC,kBAAC,OAAD;IAAK,WAAU;IAAmC,UAAA;GAAiB,CAAA;EACtH;CACJ,CAAA,GAAA,EAAM,SAAS,KACd,kBAAC,MAAD;EAAI,WAAU;EACX,UAAA,EAAM,KAAK,GAAM,MAChB,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAAC,MAAD,EAAA,UAAK,EAAK,MAAU,CAAA,GACpB,kBAAC,MAAD,EAAA,UAAK,IAAU,kBAAC,QAAD;IAAM,WAAU;IAA+B,eAAY;GAAQ,CAAA,IAAI,EAAK,MAAU,CAAA,CAClG;EAH0C,GAAA,EAAK,OAAO,CAGtD,CACN;CACC,CAAA,CAEC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type CardTicketTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
3
|
+
export type CardTicketPriorityLevel = 'none' | 'lowest' | 'low' | 'medium' | 'high' | 'highest';
|
|
4
|
+
export type CardTicketStatus = {
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
tone?: CardTicketTone;
|
|
7
|
+
};
|
|
8
|
+
export type CardTicketIssueType = {
|
|
9
|
+
label: React.ReactNode;
|
|
10
|
+
icon?: React.ReactNode;
|
|
11
|
+
tone?: CardTicketTone;
|
|
12
|
+
};
|
|
13
|
+
export type CardTicketAssignee = {
|
|
14
|
+
id?: React.Key;
|
|
15
|
+
name: string;
|
|
16
|
+
avatarUrl?: string;
|
|
17
|
+
avatarAlt?: string;
|
|
18
|
+
};
|
|
19
|
+
export type CardTicketPriority = {
|
|
20
|
+
level: CardTicketPriorityLevel;
|
|
21
|
+
label?: React.ReactNode;
|
|
22
|
+
};
|
|
23
|
+
export type CardTicketLabel = {
|
|
24
|
+
id?: React.Key;
|
|
25
|
+
label: React.ReactNode;
|
|
26
|
+
};
|
|
27
|
+
export type CardTicketSubtaskProgress = {
|
|
28
|
+
completed: number;
|
|
29
|
+
total: number;
|
|
30
|
+
label?: React.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
export type CardTicketProps = Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'id' | 'onClick'> & {
|
|
33
|
+
/** DOM id for linking the ticket to other UI. Use React's reserved `key` separately in lists. */
|
|
34
|
+
id?: string;
|
|
35
|
+
/** Human-facing issue key, for example `WEB-142`. */
|
|
36
|
+
issueKey?: React.ReactNode;
|
|
37
|
+
title: React.ReactNode;
|
|
38
|
+
description?: React.ReactNode;
|
|
39
|
+
status?: CardTicketStatus | React.ReactNode;
|
|
40
|
+
issueType?: CardTicketIssueType | React.ReactNode;
|
|
41
|
+
assignees?: CardTicketAssignee[];
|
|
42
|
+
priority?: CardTicketPriority | CardTicketPriorityLevel;
|
|
43
|
+
labels?: Array<CardTicketLabel | React.ReactNode>;
|
|
44
|
+
dueDate?: React.ReactNode;
|
|
45
|
+
estimate?: React.ReactNode;
|
|
46
|
+
subtaskProgress?: CardTicketSubtaskProgress;
|
|
47
|
+
selected?: boolean;
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
onClick?: React.MouseEventHandler<HTMLElement>;
|
|
50
|
+
className?: string;
|
|
51
|
+
};
|
|
52
|
+
export declare const CardTicket: ({ id, issueKey, title, description, status, issueType, assignees, priority, labels, dueDate, estimate, subtaskProgress, selected, disabled, onClick, className, ...rest }: CardTicketProps) => React.JSX.Element;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { cn as e } from "../../utils/cn.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t, { useState as n } from "react";
|
|
4
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/Card/Ticket.tsx
|
|
6
|
+
var a = [], o = [], s = {
|
|
7
|
+
none: "No priority",
|
|
8
|
+
lowest: "Lowest priority",
|
|
9
|
+
low: "Low priority",
|
|
10
|
+
medium: "Medium priority",
|
|
11
|
+
high: "High priority",
|
|
12
|
+
highest: "Highest priority"
|
|
13
|
+
}, c = (e) => {
|
|
14
|
+
let t = e.trim().split(/\s+/).filter(Boolean);
|
|
15
|
+
return t.length === 0 ? "?" : t.slice(0, 2).map((e) => Array.from(e)[0]).join("").toUpperCase();
|
|
16
|
+
}, l = () => /* @__PURE__ */ i("svg", {
|
|
17
|
+
viewBox: "0 0 16 16",
|
|
18
|
+
fill: "none",
|
|
19
|
+
"aria-hidden": "true",
|
|
20
|
+
children: [/* @__PURE__ */ r("rect", {
|
|
21
|
+
x: "2.5",
|
|
22
|
+
y: "2.5",
|
|
23
|
+
width: "11",
|
|
24
|
+
height: "11",
|
|
25
|
+
rx: "2",
|
|
26
|
+
stroke: "currentColor"
|
|
27
|
+
}), /* @__PURE__ */ r("path", {
|
|
28
|
+
d: "M5 6h6M5 8.5h4.5",
|
|
29
|
+
stroke: "currentColor",
|
|
30
|
+
strokeLinecap: "round"
|
|
31
|
+
})]
|
|
32
|
+
}), u = ({ type: e }) => e === "calendar" ? /* @__PURE__ */ i("svg", {
|
|
33
|
+
viewBox: "0 0 16 16",
|
|
34
|
+
fill: "none",
|
|
35
|
+
"aria-hidden": "true",
|
|
36
|
+
children: [/* @__PURE__ */ r("rect", {
|
|
37
|
+
x: "2.5",
|
|
38
|
+
y: "3.5",
|
|
39
|
+
width: "11",
|
|
40
|
+
height: "10",
|
|
41
|
+
rx: "2",
|
|
42
|
+
stroke: "currentColor"
|
|
43
|
+
}), /* @__PURE__ */ r("path", {
|
|
44
|
+
d: "M5 2v3M11 2v3M3 6.5h10",
|
|
45
|
+
stroke: "currentColor"
|
|
46
|
+
})]
|
|
47
|
+
}) : e === "estimate" ? /* @__PURE__ */ i("svg", {
|
|
48
|
+
viewBox: "0 0 16 16",
|
|
49
|
+
fill: "none",
|
|
50
|
+
"aria-hidden": "true",
|
|
51
|
+
children: [/* @__PURE__ */ r("circle", {
|
|
52
|
+
cx: "8",
|
|
53
|
+
cy: "8",
|
|
54
|
+
r: "5.5",
|
|
55
|
+
stroke: "currentColor"
|
|
56
|
+
}), /* @__PURE__ */ r("path", {
|
|
57
|
+
d: "M8 5v3.5l2 1",
|
|
58
|
+
stroke: "currentColor",
|
|
59
|
+
strokeLinecap: "round",
|
|
60
|
+
strokeLinejoin: "round"
|
|
61
|
+
})]
|
|
62
|
+
}) : /* @__PURE__ */ i("svg", {
|
|
63
|
+
viewBox: "0 0 16 16",
|
|
64
|
+
fill: "none",
|
|
65
|
+
"aria-hidden": "true",
|
|
66
|
+
children: [/* @__PURE__ */ r("rect", {
|
|
67
|
+
x: "2.5",
|
|
68
|
+
y: "2.5",
|
|
69
|
+
width: "11",
|
|
70
|
+
height: "11",
|
|
71
|
+
rx: "2",
|
|
72
|
+
stroke: "currentColor"
|
|
73
|
+
}), /* @__PURE__ */ r("path", {
|
|
74
|
+
d: "m5 8 2 2 4-4",
|
|
75
|
+
stroke: "currentColor",
|
|
76
|
+
strokeLinecap: "round",
|
|
77
|
+
strokeLinejoin: "round"
|
|
78
|
+
})]
|
|
79
|
+
}), d = ({ assignee: e }) => {
|
|
80
|
+
let [t, i] = n(!1), a = !!e.avatarUrl && !t;
|
|
81
|
+
return /* @__PURE__ */ r("span", {
|
|
82
|
+
className: "dishui-card-ticket__avatar",
|
|
83
|
+
title: e.name,
|
|
84
|
+
"aria-label": e.name,
|
|
85
|
+
children: a ? /* @__PURE__ */ r("img", {
|
|
86
|
+
src: e.avatarUrl,
|
|
87
|
+
alt: e.avatarAlt ?? "",
|
|
88
|
+
onError: () => i(!0)
|
|
89
|
+
}) : /* @__PURE__ */ r("span", {
|
|
90
|
+
"aria-hidden": "true",
|
|
91
|
+
children: c(e.name)
|
|
92
|
+
})
|
|
93
|
+
});
|
|
94
|
+
}, f = (e) => {
|
|
95
|
+
if (e != null) return typeof e == "object" && !t.isValidElement(e) && "label" in e ? e : {
|
|
96
|
+
label: e,
|
|
97
|
+
tone: "neutral"
|
|
98
|
+
};
|
|
99
|
+
}, p = (e) => {
|
|
100
|
+
if (e != null) return typeof e == "object" && !t.isValidElement(e) && "label" in e ? e : {
|
|
101
|
+
label: e,
|
|
102
|
+
tone: "neutral"
|
|
103
|
+
};
|
|
104
|
+
}, m = ({ id: n, issueKey: c, title: m, description: h, status: g, issueType: _, assignees: v = a, priority: y = "none", labels: b = o, dueDate: x, estimate: S, subtaskProgress: C, selected: w = !1, disabled: T = !1, onClick: E, className: D, ...O }) => {
|
|
105
|
+
let k = !!E, A = f(g), j = p(_), M = typeof y == "string" ? { level: y } : y, N = M.label ?? s[M.level], P = Math.max(0, C?.completed ?? 0), F = Math.max(0, C?.total ?? 0), I = F > 0 ? Math.min(100, P / F * 100) : 0;
|
|
106
|
+
return /* @__PURE__ */ i("article", {
|
|
107
|
+
...O,
|
|
108
|
+
id: n,
|
|
109
|
+
className: e("dishui-card-ticket", k && !T && "dishui-card-ticket--interactive", w && "dishui-card-ticket--selected", T && "dishui-card-ticket--disabled", D),
|
|
110
|
+
role: k ? "button" : void 0,
|
|
111
|
+
tabIndex: k && !T ? 0 : void 0,
|
|
112
|
+
"aria-pressed": k ? w : void 0,
|
|
113
|
+
"aria-disabled": T || void 0,
|
|
114
|
+
onClick: k && !T ? E : void 0,
|
|
115
|
+
onKeyDown: k && !T ? (e) => {
|
|
116
|
+
e.target === e.currentTarget && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), e.repeat || e.currentTarget.click());
|
|
117
|
+
} : void 0,
|
|
118
|
+
children: [
|
|
119
|
+
/* @__PURE__ */ i("div", {
|
|
120
|
+
className: "dishui-card-ticket__header",
|
|
121
|
+
children: [
|
|
122
|
+
j && /* @__PURE__ */ i("span", {
|
|
123
|
+
className: e("dishui-card-ticket__type", `dishui-card-ticket__type--${j.tone ?? "neutral"}`),
|
|
124
|
+
title: typeof j.label == "string" ? j.label : void 0,
|
|
125
|
+
children: [/* @__PURE__ */ r("span", {
|
|
126
|
+
className: "dishui-card-ticket__type-icon",
|
|
127
|
+
"aria-hidden": "true",
|
|
128
|
+
children: j.icon ?? /* @__PURE__ */ r(l, {})
|
|
129
|
+
}), /* @__PURE__ */ r("span", {
|
|
130
|
+
className: "dishui-card-ticket__type-label",
|
|
131
|
+
children: j.label
|
|
132
|
+
})]
|
|
133
|
+
}),
|
|
134
|
+
c != null && /* @__PURE__ */ r("span", {
|
|
135
|
+
className: "dishui-card-ticket__key",
|
|
136
|
+
children: c
|
|
137
|
+
}),
|
|
138
|
+
A && /* @__PURE__ */ r("span", {
|
|
139
|
+
className: e("dishui-card-ticket__status", `dishui-card-ticket__status--${A.tone ?? "neutral"}`),
|
|
140
|
+
children: A.label
|
|
141
|
+
})
|
|
142
|
+
]
|
|
143
|
+
}),
|
|
144
|
+
/* @__PURE__ */ r("h3", {
|
|
145
|
+
className: "dishui-card-ticket__title",
|
|
146
|
+
children: m
|
|
147
|
+
}),
|
|
148
|
+
h != null && /* @__PURE__ */ r("div", {
|
|
149
|
+
className: "dishui-card-ticket__description",
|
|
150
|
+
children: h
|
|
151
|
+
}),
|
|
152
|
+
b.length > 0 && /* @__PURE__ */ r("div", {
|
|
153
|
+
className: "dishui-card-ticket__labels",
|
|
154
|
+
"aria-label": "Labels",
|
|
155
|
+
children: b.map((e, n) => {
|
|
156
|
+
let i = typeof e == "object" && e && !t.isValidElement(e) && "label" in e ? e : { label: e };
|
|
157
|
+
return /* @__PURE__ */ r("span", {
|
|
158
|
+
className: "dishui-card-ticket__label",
|
|
159
|
+
children: i.label
|
|
160
|
+
}, i.id ?? n);
|
|
161
|
+
})
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ i("div", {
|
|
164
|
+
className: "dishui-card-ticket__footer",
|
|
165
|
+
children: [
|
|
166
|
+
/* @__PURE__ */ i("span", {
|
|
167
|
+
className: e("dishui-card-ticket__priority", `dishui-card-ticket__priority--${M.level}`),
|
|
168
|
+
title: typeof N == "string" ? N : void 0,
|
|
169
|
+
children: [/* @__PURE__ */ i("span", {
|
|
170
|
+
className: "dishui-card-ticket__priority-bars",
|
|
171
|
+
"aria-hidden": "true",
|
|
172
|
+
children: [
|
|
173
|
+
/* @__PURE__ */ r("i", {}),
|
|
174
|
+
/* @__PURE__ */ r("i", {}),
|
|
175
|
+
/* @__PURE__ */ r("i", {})
|
|
176
|
+
]
|
|
177
|
+
}), /* @__PURE__ */ r("span", { children: N })]
|
|
178
|
+
}),
|
|
179
|
+
/* @__PURE__ */ i("div", {
|
|
180
|
+
className: "dishui-card-ticket__metadata",
|
|
181
|
+
children: [
|
|
182
|
+
x != null && /* @__PURE__ */ i("span", {
|
|
183
|
+
className: "dishui-card-ticket__meta",
|
|
184
|
+
children: [/* @__PURE__ */ r(u, { type: "calendar" }), /* @__PURE__ */ r("span", { children: x })]
|
|
185
|
+
}),
|
|
186
|
+
S != null && /* @__PURE__ */ i("span", {
|
|
187
|
+
className: "dishui-card-ticket__meta",
|
|
188
|
+
children: [/* @__PURE__ */ r(u, { type: "estimate" }), /* @__PURE__ */ r("span", { children: S })]
|
|
189
|
+
}),
|
|
190
|
+
C && /* @__PURE__ */ i("span", {
|
|
191
|
+
className: "dishui-card-ticket__meta dishui-card-ticket__subtasks",
|
|
192
|
+
"aria-label": typeof C.label == "string" ? C.label : `${P} of ${F} subtasks complete`,
|
|
193
|
+
children: [
|
|
194
|
+
/* @__PURE__ */ r(u, { type: "subtask" }),
|
|
195
|
+
/* @__PURE__ */ r("span", { children: C.label ?? `${P}/${F}` }),
|
|
196
|
+
/* @__PURE__ */ r("span", {
|
|
197
|
+
className: "dishui-card-ticket__progress",
|
|
198
|
+
"aria-hidden": "true",
|
|
199
|
+
children: /* @__PURE__ */ r("span", { style: { width: `${I}%` } })
|
|
200
|
+
})
|
|
201
|
+
]
|
|
202
|
+
})
|
|
203
|
+
]
|
|
204
|
+
}),
|
|
205
|
+
v.length > 0 && /* @__PURE__ */ r("div", {
|
|
206
|
+
className: "dishui-card-ticket__assignees",
|
|
207
|
+
"aria-label": "Assignees",
|
|
208
|
+
children: v.map((e, t) => /* @__PURE__ */ r(d, { assignee: e }, e.id ?? `${e.name}-${t}`))
|
|
209
|
+
})
|
|
210
|
+
]
|
|
211
|
+
})
|
|
212
|
+
]
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
//#endregion
|
|
216
|
+
export { m as CardTicket };
|
|
217
|
+
|
|
218
|
+
//# sourceMappingURL=Ticket2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ticket2.js","names":[],"sources":["../../../src/components/Card/Ticket.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { cn } from '../../utils/cn';\nimport './Ticket.css';\n\nexport type CardTicketTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\nexport type CardTicketPriorityLevel = 'none' | 'lowest' | 'low' | 'medium' | 'high' | 'highest';\n\nexport type CardTicketStatus = {\n label: React.ReactNode;\n tone?: CardTicketTone;\n};\n\nexport type CardTicketIssueType = {\n label: React.ReactNode;\n icon?: React.ReactNode;\n tone?: CardTicketTone;\n};\n\nexport type CardTicketAssignee = {\n id?: React.Key;\n name: string;\n avatarUrl?: string;\n avatarAlt?: string;\n};\n\nexport type CardTicketPriority = {\n level: CardTicketPriorityLevel;\n label?: React.ReactNode;\n};\n\nexport type CardTicketLabel = {\n id?: React.Key;\n label: React.ReactNode;\n};\n\nexport type CardTicketSubtaskProgress = {\n completed: number;\n total: number;\n label?: React.ReactNode;\n};\n\nexport type CardTicketProps = Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'id' | 'onClick'> & {\n /** DOM id for linking the ticket to other UI. Use React's reserved `key` separately in lists. */\n id?: string;\n /** Human-facing issue key, for example `WEB-142`. */\n issueKey?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n status?: CardTicketStatus | React.ReactNode;\n issueType?: CardTicketIssueType | React.ReactNode;\n assignees?: CardTicketAssignee[];\n priority?: CardTicketPriority | CardTicketPriorityLevel;\n labels?: Array<CardTicketLabel | React.ReactNode>;\n dueDate?: React.ReactNode;\n estimate?: React.ReactNode;\n subtaskProgress?: CardTicketSubtaskProgress;\n selected?: boolean;\n disabled?: boolean;\n onClick?: React.MouseEventHandler<HTMLElement>;\n className?: string;\n};\n\nconst EMPTY_ASSIGNEES: CardTicketAssignee[] = [];\nconst EMPTY_LABELS: Array<CardTicketLabel | React.ReactNode> = [];\n\nconst PRIORITY_LABELS: Record<CardTicketPriorityLevel, string> = {\n none: 'No priority',\n lowest: 'Lowest priority',\n low: 'Low priority',\n medium: 'Medium priority',\n high: 'High priority',\n highest: 'Highest priority',\n};\n\nconst getInitials = (name: string) => {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n return parts.slice(0, 2).map(part => Array.from(part)[0]).join('').toUpperCase();\n};\n\nconst DefaultIssueIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"2\" stroke=\"currentColor\" />\n <path d=\"M5 6h6M5 8.5h4.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </svg>\n);\n\nconst MetaIcon = ({ type }: { type: 'calendar' | 'estimate' | 'subtask' }) => {\n if (type === 'calendar') return <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"2\" stroke=\"currentColor\" /><path d=\"M5 2v3M11 2v3M3 6.5h10\" stroke=\"currentColor\" /></svg>;\n if (type === 'estimate') return <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"5.5\" stroke=\"currentColor\" /><path d=\"M8 5v3.5l2 1\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>;\n return <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"2\" stroke=\"currentColor\" /><path d=\"m5 8 2 2 4-4\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>;\n};\n\nconst TicketAvatar = ({ assignee }: { assignee: CardTicketAssignee }) => {\n const [failed, setFailed] = useState(false);\n const showImage = !!assignee.avatarUrl && !failed;\n\n return (\n <span className=\"dishui-card-ticket__avatar\" title={assignee.name} aria-label={assignee.name}>\n {showImage ? (\n <img\n src={assignee.avatarUrl}\n alt={assignee.avatarAlt ?? ''}\n onError={() => setFailed(true)}\n />\n ) : (\n <span aria-hidden=\"true\">{getInitials(assignee.name)}</span>\n )}\n </span>\n );\n};\n\nconst normalizeStatus = (status: CardTicketProps['status']): CardTicketStatus | undefined => {\n if (status === null || status === undefined) return undefined;\n if (typeof status === 'object' && !React.isValidElement(status) && 'label' in status) return status as CardTicketStatus;\n return { label: status, tone: 'neutral' };\n};\n\nconst normalizeIssueType = (issueType: CardTicketProps['issueType']): CardTicketIssueType | undefined => {\n if (issueType === null || issueType === undefined) return undefined;\n if (typeof issueType === 'object' && !React.isValidElement(issueType) && 'label' in issueType) return issueType as CardTicketIssueType;\n return { label: issueType, tone: 'neutral' };\n};\n\nexport const CardTicket = ({\n id,\n issueKey,\n title,\n description,\n status,\n issueType,\n assignees = EMPTY_ASSIGNEES,\n priority = 'none',\n labels = EMPTY_LABELS,\n dueDate,\n estimate,\n subtaskProgress,\n selected = false,\n disabled = false,\n onClick,\n className,\n ...rest\n}: CardTicketProps) => {\n const interactive = !!onClick;\n const statusValue = normalizeStatus(status);\n const issueTypeValue = normalizeIssueType(issueType);\n const priorityValue = typeof priority === 'string' ? { level: priority } : priority;\n const priorityLabel = priorityValue.label ?? PRIORITY_LABELS[priorityValue.level];\n const completed = Math.max(0, subtaskProgress?.completed ?? 0);\n const total = Math.max(0, subtaskProgress?.total ?? 0);\n const progress = total > 0 ? Math.min(100, (completed / total) * 100) : 0;\n\n return (\n <article\n {...rest}\n id={id}\n className={cn(\n 'dishui-card-ticket',\n interactive && !disabled && 'dishui-card-ticket--interactive',\n selected && 'dishui-card-ticket--selected',\n disabled && 'dishui-card-ticket--disabled',\n className,\n )}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive && !disabled ? 0 : undefined}\n aria-pressed={interactive ? selected : undefined}\n aria-disabled={disabled || undefined}\n onClick={interactive && !disabled ? onClick : undefined}\n onKeyDown={interactive && !disabled ? event => {\n if (event.target !== event.currentTarget) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!event.repeat) event.currentTarget.click();\n }\n } : undefined}\n >\n <div className=\"dishui-card-ticket__header\">\n {issueTypeValue && (\n <span\n className={cn('dishui-card-ticket__type', `dishui-card-ticket__type--${issueTypeValue.tone ?? 'neutral'}`)}\n title={typeof issueTypeValue.label === 'string' ? issueTypeValue.label : undefined}\n >\n <span className=\"dishui-card-ticket__type-icon\" aria-hidden=\"true\">{issueTypeValue.icon ?? <DefaultIssueIcon />}</span>\n <span className=\"dishui-card-ticket__type-label\">{issueTypeValue.label}</span>\n </span>\n )}\n {issueKey !== null && issueKey !== undefined && <span className=\"dishui-card-ticket__key\">{issueKey}</span>}\n {statusValue && (\n <span className={cn('dishui-card-ticket__status', `dishui-card-ticket__status--${statusValue.tone ?? 'neutral'}`)}>\n {statusValue.label}\n </span>\n )}\n </div>\n\n <h3 className=\"dishui-card-ticket__title\">{title}</h3>\n {description !== null && description !== undefined && <div className=\"dishui-card-ticket__description\">{description}</div>}\n\n {labels.length > 0 && (\n <div className=\"dishui-card-ticket__labels\" aria-label=\"Labels\">\n {labels.map((item, index) => {\n const value = typeof item === 'object' && item !== null && !React.isValidElement(item) && 'label' in item\n ? item as CardTicketLabel\n : { label: item };\n return <span className=\"dishui-card-ticket__label\" key={value.id ?? index}>{value.label}</span>;\n })}\n </div>\n )}\n\n <div className=\"dishui-card-ticket__footer\">\n <span\n className={cn('dishui-card-ticket__priority', `dishui-card-ticket__priority--${priorityValue.level}`)}\n title={typeof priorityLabel === 'string' ? priorityLabel : undefined}\n >\n <span className=\"dishui-card-ticket__priority-bars\" aria-hidden=\"true\"><i /><i /><i /></span>\n <span>{priorityLabel}</span>\n </span>\n\n <div className=\"dishui-card-ticket__metadata\">\n {dueDate !== null && dueDate !== undefined && <span className=\"dishui-card-ticket__meta\"><MetaIcon type=\"calendar\" /><span>{dueDate}</span></span>}\n {estimate !== null && estimate !== undefined && <span className=\"dishui-card-ticket__meta\"><MetaIcon type=\"estimate\" /><span>{estimate}</span></span>}\n {subtaskProgress && (\n <span className=\"dishui-card-ticket__meta dishui-card-ticket__subtasks\" aria-label={typeof subtaskProgress.label === 'string' ? subtaskProgress.label : `${completed} of ${total} subtasks complete`}>\n <MetaIcon type=\"subtask\" />\n <span>{subtaskProgress.label ?? `${completed}/${total}`}</span>\n <span className=\"dishui-card-ticket__progress\" aria-hidden=\"true\"><span style={{ width: `${progress}%` }} /></span>\n </span>\n )}\n </div>\n\n {assignees.length > 0 && (\n <div className=\"dishui-card-ticket__assignees\" aria-label=\"Assignees\">\n {assignees.map((assignee, index) => <TicketAvatar key={assignee.id ?? `${assignee.name}-${index}`} assignee={assignee} />)}\n </div>\n )}\n </div>\n </article>\n );\n};\n"],"mappings":";;;;;AA8DA,IAAM,IAAwC,CAAC,GACzC,IAAyD,CAAC,GAE1D,IAA2D;CAC/D,MAAM;CACN,QAAQ;CACR,KAAK;CACL,QAAQ;CACR,MAAM;CACN,SAAS;AACX,GAEM,KAAe,MAAiB;CACpC,IAAM,IAAQ,EAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CAErD,OADI,EAAM,WAAW,IAAU,MACxB,EAAM,MAAM,GAAG,CAAC,CAAC,CAAC,KAAI,MAAQ,MAAM,KAAK,CAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY;AACjF,GAEM,UACJ,kBAAC,OAAD;CAAK,SAAQ;CAAY,MAAK;CAAO,eAAY;CAAjD,UAAA,CACE,kBAAC,QAAD;EAAM,GAAE;EAAM,GAAE;EAAM,OAAM;EAAK,QAAO;EAAK,IAAG;EAAI,QAAO;CAAgB,CAAA,GAC3E,kBAAC,QAAD;EAAM,GAAE;EAAmB,QAAO;EAAe,eAAc;CAAS,CAAA,CACrE;IAGD,KAAY,EAAE,cACd,MAAS,aAAmB,kBAAC,OAAD;CAAK,SAAQ;CAAY,MAAK;CAAO,eAAY;CAAjD,UAAA,CAAwD,kBAAC,QAAD;EAAM,GAAE;EAAM,GAAE;EAAM,OAAM;EAAK,QAAO;EAAK,IAAG;EAAI,QAAO;CAAgB,CAAA,GAAC,kBAAC,QAAD;EAAM,GAAE;EAAyB,QAAO;CAAgB,CAAA,CAAM;KAC9N,MAAS,aAAmB,kBAAC,OAAD;CAAK,SAAQ;CAAY,MAAK;CAAO,eAAY;CAAjD,UAAA,CAAwD,kBAAC,UAAD;EAAQ,IAAG;EAAI,IAAG;EAAI,GAAE;EAAM,QAAO;CAAgB,CAAA,GAAC,kBAAC,QAAD;EAAM,GAAE;EAAe,QAAO;EAAe,eAAc;EAAQ,gBAAe;CAAS,CAAA,CAAM;KACxO,kBAAC,OAAD;CAAK,SAAQ;CAAY,MAAK;CAAO,eAAY;CAAjD,UAAA,CAAwD,kBAAC,QAAD;EAAM,GAAE;EAAM,GAAE;EAAM,OAAM;EAAK,QAAO;EAAK,IAAG;EAAI,QAAO;CAAgB,CAAA,GAAC,kBAAC,QAAD;EAAM,GAAE;EAAe,QAAO;EAAe,eAAc;EAAQ,gBAAe;CAAS,CAAA,CAAM;IAGxO,KAAgB,EAAE,kBAAiD;CACvE,IAAM,CAAC,GAAQ,KAAa,EAAS,EAAK,GACpC,IAAY,CAAC,CAAC,EAAS,aAAa,CAAC;CAE3C,OACE,kBAAC,QAAD;EAAM,WAAU;EAA6B,OAAO,EAAS;EAAM,cAAY,EAAS;EACrF,UAAA,IACC,kBAAC,OAAD;GACE,KAAK,EAAS;GACd,KAAK,EAAS,aAAa;GAC3B,eAAe,EAAU,EAAI;EAC9B,CAAA,IAED,kBAAC,QAAD;GAAM,eAAY;GAAQ,UAAA,EAAY,EAAS,IAAI;EAAQ,CAAA;CAEzD,CAAA;AAEV,GAEM,KAAmB,MAAoE;CACvF,SAAW,MAEf,OADI,OAAO,KAAW,YAAY,CAAC,EAAM,eAAe,CAAM,KAAK,WAAW,IAAe,IACtF;EAAE,OAAO;EAAQ,MAAM;CAAU;AAC1C,GAEM,KAAsB,MAA6E;CACnG,SAAc,MAElB,OADI,OAAO,KAAc,YAAY,CAAC,EAAM,eAAe,CAAS,KAAK,WAAW,IAAkB,IAC/F;EAAE,OAAO;EAAW,MAAM;CAAU;AAC7C,GAEa,KAAc,EACzB,OACA,aACA,UACA,gBACA,WACA,cACA,eAAY,GACZ,cAAW,QACX,YAAS,GACT,YACA,aACA,oBACA,cAAW,IACX,cAAW,IACX,YACA,cACA,GAAG,QACkB;CACrB,IAAM,IAAc,CAAC,CAAC,GAChB,IAAc,EAAgB,CAAM,GACpC,IAAiB,EAAmB,CAAS,GAC7C,IAAgB,OAAO,KAAa,WAAW,EAAE,OAAO,EAAS,IAAI,GACrE,IAAgB,EAAc,SAAS,EAAgB,EAAc,QACrE,IAAY,KAAK,IAAI,GAAG,GAAiB,aAAa,CAAC,GACvD,IAAQ,KAAK,IAAI,GAAG,GAAiB,SAAS,CAAC,GAC/C,IAAW,IAAQ,IAAI,KAAK,IAAI,KAAM,IAAY,IAAS,GAAG,IAAI;CAExE,OACE,kBAAC,WAAD;EACE,GAAI;EACA;EACJ,WAAW,EACT,sBACA,KAAe,CAAC,KAAY,mCAC5B,KAAY,gCACZ,KAAY,gCACZ,CACF;EACA,MAAM,IAAc,WAAW,KAAA;EAC/B,UAAU,KAAe,CAAC,IAAW,IAAI,KAAA;EACzC,gBAAc,IAAc,IAAW,KAAA;EACvC,iBAAe,KAAY,KAAA;EAC3B,SAAS,KAAe,CAAC,IAAW,IAAU,KAAA;EAC9C,WAAW,KAAe,CAAC,KAAW,MAAS;GACzC,EAAM,WAAW,EAAM,kBACvB,EAAM,QAAQ,WAAW,EAAM,QAAQ,SACzC,EAAM,eAAe,GAChB,EAAM,UAAQ,EAAM,cAAc,MAAM;EAEjD,IAAI,KAAA;EArBN,UAAA;GAuBE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,KACC,kBAAC,QAAD;MACE,WAAW,EAAG,4BAA4B,6BAA6B,EAAe,QAAQ,WAAW;MACzG,OAAO,OAAO,EAAe,SAAU,WAAW,EAAe,QAAQ,KAAA;MAF3E,UAAA,CAIE,kBAAC,QAAD;OAAM,WAAU;OAAgC,eAAY;OAAQ,UAAA,EAAe,QAAQ,kBAAC,GAAD,CAAmB,CAAA;MAAQ,CAAA,GACtH,kBAAC,QAAD;OAAM,WAAU;OAAkC,UAAA,EAAe;MAAY,CAAA,CACzE;;KAEP,KAAa,QAAkC,kBAAC,QAAD;MAAM,WAAU;MAA2B,UAAA;KAAe,CAAA;KACzG,KACC,kBAAC,QAAD;MAAM,WAAW,EAAG,8BAA8B,+BAA+B,EAAY,QAAQ,WAAW;MAC7G,UAAA,EAAY;KACT,CAAA;IAEL;;GAEL,kBAAC,MAAD;IAAI,WAAU;IAA6B,UAAA;GAAU,CAAA;GACpD,KAAgB,QAAqC,kBAAC,OAAD;IAAK,WAAU;IAAmC,UAAA;GAAiB,CAAA;GAExH,EAAO,SAAS,KACf,kBAAC,OAAD;IAAK,WAAU;IAA6B,cAAW;IACpD,UAAA,EAAO,KAAK,GAAM,MAAU;KAC3B,IAAM,IAAQ,OAAO,KAAS,YAAY,KAAiB,CAAC,EAAM,eAAe,CAAI,KAAK,WAAW,IACjG,IACA,EAAE,OAAO,EAAK;KAClB,OAAO,kBAAC,QAAD;MAAM,WAAU;MAAqD,UAAA,EAAM;KAAY,GAAtC,EAAM,MAAM,CAA0B;IAChG,CAAC;GACE,CAAA;GAGP,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,kBAAC,QAAD;MACE,WAAW,EAAG,gCAAgC,iCAAiC,EAAc,OAAO;MACpG,OAAO,OAAO,KAAkB,WAAW,IAAgB,KAAA;MAF7D,UAAA,CAIE,kBAAC,QAAD;OAAM,WAAU;OAAoC,eAAY;OAAhE,UAAA;QAAuE,kBAAC,KAAD,CAAI,CAAA;QAAC,kBAAC,KAAD,CAAI,CAAA;QAAC,kBAAC,KAAD,CAAI,CAAA;OAAO;MAC5F,CAAA,GAAA,kBAAC,QAAD,EAAA,UAAO,EAAoB,CAAA,CACvB;;KAEN,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACG,KAAY,QAAiC,kBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAA2C,kBAAC,GAAD,EAAU,MAAK,WAAY,CAAA,GAAC,kBAAC,QAAD,EAAA,UAAO,EAAc,CAAA,CAAO;;OAChJ,KAAa,QAAkC,kBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAA2C,kBAAC,GAAD,EAAU,MAAK,WAAY,CAAA,GAAC,kBAAC,QAAD,EAAA,UAAO,EAAe,CAAA,CAAO;;OACnJ,KACC,kBAAC,QAAD;QAAM,WAAU;QAAwD,cAAY,OAAO,EAAgB,SAAU,WAAW,EAAgB,QAAQ,GAAG,EAAU,MAAM,EAAM;QAAjL,UAAA;SACE,kBAAC,GAAD,EAAU,MAAK,UAAW,CAAA;SAC1B,kBAAC,QAAD,EAAA,UAAO,EAAgB,SAAS,GAAG,EAAU,GAAG,IAAc,CAAA;SAC9D,kBAAC,QAAD;UAAM,WAAU;UAA+B,eAAY;UAAO,UAAA,kBAAC,QAAD,EAAM,OAAO,EAAE,OAAO,GAAG,EAAS,GAAG,EAAI,CAAA;SAAO,CAAA;QAC9G;;MAEL;;KAEJ,EAAU,SAAS,KAClB,kBAAC,OAAD;MAAK,WAAU;MAAgC,cAAW;MACvD,UAAA,EAAU,KAAK,GAAU,MAAU,kBAAC,GAAD,EAAyE,YAAW,GAAjE,EAAS,MAAM,GAAG,EAAS,KAAK,GAAG,GAA8B,CAAC;KACtH,CAAA;IAEJ;;EACE;;AAEb"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type CardMetricProps } from './Metric';
|
|
3
|
+
import { type CardTicketProps } from './Ticket';
|
|
4
|
+
import { type ApprovalCardProps } from '../ai/ApprovalCard';
|
|
5
|
+
import { type RecommendationCardProps } from '../ai/RecommendationCard';
|
|
6
|
+
import { type ContextCardsProps } from '../ai/ContextCards';
|
|
7
|
+
import { type InsightCardsProps } from '../ai/InsightCards';
|
|
8
|
+
import { type FineTuneCardProps } from '../ai/FineTuneCard';
|
|
9
|
+
import { type IssueCardProps } from '../ai/IssueCard';
|
|
10
|
+
import { type AgentRunCardProps } from '../ai/AgentRunCard';
|
|
3
11
|
export type { CardMetricProps, CardMetricItem } from './Metric';
|
|
12
|
+
export type { CardTicketProps, CardTicketTone, CardTicketPriorityLevel, CardTicketStatus, CardTicketIssueType, CardTicketAssignee, CardTicketPriority, CardTicketLabel, CardTicketSubtaskProgress, } from './Ticket';
|
|
13
|
+
export type { ApprovalCardProps, ApprovalOption } from '../ai/ApprovalCard';
|
|
14
|
+
export type { RecommendationCardProps, Recommendation, RecommendationAlternative, RecommendationCardLabels, ConfidenceLevel } from '../ai/RecommendationCard';
|
|
15
|
+
export type { ContextCardsProps, ContextChunk, ContextSource, ContextSourceKind, ContextCardsLabels } from '../ai/ContextCards';
|
|
16
|
+
export type { InsightCardsProps, InsightCardItem } from '../ai/InsightCards';
|
|
17
|
+
export type { FineTuneCardProps, FineTuneMetric } from '../ai/FineTuneCard';
|
|
18
|
+
export type { IssueCardProps, IssueLabel, IssuePriority, IssueAccent } from '../ai/IssueCard';
|
|
19
|
+
export type { AgentRunCardProps, AgentRunStatus, AgentRunMeta } from '../ai/AgentRunCard';
|
|
4
20
|
export type CardProps = {
|
|
5
21
|
children: React.ReactNode;
|
|
6
22
|
variant?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
|
|
@@ -187,6 +203,8 @@ export type CardStatProps = {
|
|
|
187
203
|
};
|
|
188
204
|
interface CardCompound extends React.FC<CardProps> {
|
|
189
205
|
Metric: React.FC<CardMetricProps>;
|
|
206
|
+
/** Jira 风格工单卡:状态、类型、负责人、优先级、日期、估算与子任务进度。 */
|
|
207
|
+
Ticket: React.FC<CardTicketProps>;
|
|
190
208
|
Title: React.FC<CardTitleProps>;
|
|
191
209
|
Body: React.FC<CardBodyProps>;
|
|
192
210
|
Actions: React.FC<CardActionsProps>;
|
|
@@ -201,6 +219,20 @@ interface CardCompound extends React.FC<CardProps> {
|
|
|
201
219
|
Info: React.FC<CardInfoProps>;
|
|
202
220
|
/** 统计面板:Grafana 风格超大数值 + 迷你折线 / 面积 / 柱状图 / 角标 / 填充色 */
|
|
203
221
|
Stat: React.FC<CardStatProps>;
|
|
222
|
+
/** AI 审批卡片:明确展示待批准操作及可选方案。 */
|
|
223
|
+
Approval: React.FC<ApprovalCardProps>;
|
|
224
|
+
/** AI 推荐卡片:首选建议、置信度与替代方案。 */
|
|
225
|
+
Recommendation: React.FC<RecommendationCardProps>;
|
|
226
|
+
/** AI 上下文卡片集合:检索片段与来源。 */
|
|
227
|
+
Context: React.FC<ContextCardsProps>;
|
|
228
|
+
/** AI 洞察指标卡片集合。 */
|
|
229
|
+
Insights: React.FC<InsightCardsProps>;
|
|
230
|
+
/** AI 微调任务状态卡片。 */
|
|
231
|
+
FineTune: React.FC<FineTuneCardProps>;
|
|
232
|
+
/** Linear 风格的工单卡片:标题、标签、类型图标、编号、优先级点、估点与负责人。 */
|
|
233
|
+
Issue: React.FC<IssueCardProps>;
|
|
234
|
+
/** Agent 运行卡片:头像 + 名称 + 模型、状态徽章、任务、当前动作、进度条、元信息与分支页脚。 */
|
|
235
|
+
Run: React.FC<AgentRunCardProps>;
|
|
204
236
|
}
|
|
205
237
|
declare const CardWithCompounds: CardCompound;
|
|
206
238
|
export default CardWithCompounds;
|