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.
Files changed (156) hide show
  1. package/dist/.release-verified.json +6 -0
  2. package/dist/ai.js +24 -0
  3. package/dist/components/Card/Metric2.js +11 -11
  4. package/dist/components/Card/Metric2.js.map +1 -1
  5. package/dist/components/Card/Ticket.d.ts +52 -0
  6. package/dist/components/Card/Ticket2.js +218 -0
  7. package/dist/components/Card/Ticket2.js.map +1 -0
  8. package/dist/components/Card/index.d.ts +32 -0
  9. package/dist/components/Card/index.js +211 -203
  10. package/dist/components/Card/index.js.map +1 -1
  11. package/dist/components/GroupButton/index.js +4 -4
  12. package/dist/components/GroupButton/index.js.map +1 -1
  13. package/dist/components/GroupedTable/index.js +10 -10
  14. package/dist/components/GroupedTable/index.js.map +1 -1
  15. package/dist/components/NavigationList/index.js +9 -9
  16. package/dist/components/NavigationList/index.js.map +1 -1
  17. package/dist/components/Section/index.js +11 -11
  18. package/dist/components/Section/index.js.map +1 -1
  19. package/dist/components/Skeleton/index.js +1 -1
  20. package/dist/components/Skeleton/index.js.map +1 -1
  21. package/dist/components/Table/index.js +6 -6
  22. package/dist/components/Table/index.js.map +1 -1
  23. package/dist/components/ai/AgentChat/index.d.ts +54 -0
  24. package/dist/components/ai/AgentChat/index.js +176 -0
  25. package/dist/components/ai/AgentChat/index.js.map +1 -0
  26. package/dist/components/ai/AgentRunCard/index.d.ts +38 -0
  27. package/dist/components/ai/AgentRunCard/index.js +100 -0
  28. package/dist/components/ai/AgentRunCard/index.js.map +1 -0
  29. package/dist/components/ai/AgentScreen/index.d.ts +50 -0
  30. package/dist/components/ai/AgentScreen/index.js +233 -0
  31. package/dist/components/ai/AgentScreen/index.js.map +1 -0
  32. package/dist/components/ai/ApprovalCard/index.d.ts +26 -0
  33. package/dist/components/ai/ApprovalCard/index.js +89 -0
  34. package/dist/components/ai/ApprovalCard/index.js.map +1 -0
  35. package/dist/components/ai/CodeView/index.d.ts +30 -0
  36. package/dist/components/ai/CodeView/index.js +149 -0
  37. package/dist/components/ai/CodeView/index.js.map +1 -0
  38. package/dist/components/ai/CommandSearch/index.d.ts +39 -0
  39. package/dist/components/ai/CommandSearch/index.js +217 -0
  40. package/dist/components/ai/CommandSearch/index.js.map +1 -0
  41. package/dist/components/ai/ContextCards/index.d.ts +42 -0
  42. package/dist/components/ai/ContextCards/index.js +106 -0
  43. package/dist/components/ai/ContextCards/index.js.map +1 -0
  44. package/dist/components/ai/DiffTable/index.d.ts +70 -0
  45. package/dist/components/ai/DiffTable/index.js +235 -0
  46. package/dist/components/ai/DiffTable/index.js.map +1 -0
  47. package/dist/components/ai/FilterTable/index.d.ts +35 -0
  48. package/dist/components/ai/FilterTable/index.js +86 -0
  49. package/dist/components/ai/FilterTable/index.js.map +1 -0
  50. package/dist/components/ai/FineTuneCard/index.d.ts +24 -0
  51. package/dist/components/ai/FineTuneCard/index.js +75 -0
  52. package/dist/components/ai/FineTuneCard/index.js.map +1 -0
  53. package/dist/components/ai/InsightCards/index.d.ts +23 -0
  54. package/dist/components/ai/InsightCards/index.js +64 -0
  55. package/dist/components/ai/InsightCards/index.js.map +1 -0
  56. package/dist/components/ai/IssueCard/index.d.ts +39 -0
  57. package/dist/components/ai/IssueCard/index.js +78 -0
  58. package/dist/components/ai/IssueCard/index.js.map +1 -0
  59. package/dist/components/ai/LoadingState/index.d.ts +22 -0
  60. package/dist/components/ai/LoadingState/index.js +80 -0
  61. package/dist/components/ai/LoadingState/index.js.map +1 -0
  62. package/dist/components/ai/PromptBar/index.d.ts +26 -0
  63. package/dist/components/ai/PromptBar/index.js +117 -0
  64. package/dist/components/ai/PromptBar/index.js.map +1 -0
  65. package/dist/components/ai/RecommendationCard/index.d.ts +44 -0
  66. package/dist/components/ai/RecommendationCard/index.js +142 -0
  67. package/dist/components/ai/RecommendationCard/index.js.map +1 -0
  68. package/dist/components/ai/RecordsTable/index.d.ts +65 -0
  69. package/dist/components/ai/RecordsTable/index.js +334 -0
  70. package/dist/components/ai/RecordsTable/index.js.map +1 -0
  71. package/dist/components/ai/SelectionActions/index.d.ts +19 -0
  72. package/dist/components/ai/SelectionActions/index.js +40 -0
  73. package/dist/components/ai/SelectionActions/index.js.map +1 -0
  74. package/dist/components/ai/StateFlow/index.d.ts +24 -0
  75. package/dist/components/ai/StateFlow/index.js +50 -0
  76. package/dist/components/ai/StateFlow/index.js.map +1 -0
  77. package/dist/components/ai/StreamingText/index.d.ts +44 -0
  78. package/dist/components/ai/StreamingText/index.js +211 -0
  79. package/dist/components/ai/StreamingText/index.js.map +1 -0
  80. package/dist/components/ai/TaskRows/index.d.ts +53 -0
  81. package/dist/components/ai/TaskRows/index.js +186 -0
  82. package/dist/components/ai/TaskRows/index.js.map +1 -0
  83. package/dist/components/ai/Thinking/index.d.ts +47 -0
  84. package/dist/components/ai/Thinking/index.js +197 -0
  85. package/dist/components/ai/Thinking/index.js.map +1 -0
  86. package/dist/components/ai/ToolChips/index.d.ts +21 -0
  87. package/dist/components/ai/ToolChips/index.js +63 -0
  88. package/dist/components/ai/ToolChips/index.js.map +1 -0
  89. package/dist/components/ai/index.d.ts +54 -0
  90. package/dist/components/ai/shared.d.ts +13 -0
  91. package/dist/components/ai/shared.js +25 -0
  92. package/dist/components/ai/shared.js.map +1 -0
  93. package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
  94. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  95. package/dist/components/pro/Flow/constants.js +3 -3
  96. package/dist/components/pro/Flow/constants.js.map +1 -1
  97. package/dist/components/pro/Flow/nodes/shapes.js +3 -3
  98. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  99. package/dist/components/pro/Flow/utils/themeColor.d.ts +2 -2
  100. package/dist/components/pro/Flow/utils/themeColor.js +2 -2
  101. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  102. package/dist/components/pro/Kanban/Kanban.d.ts +3 -0
  103. package/dist/components/pro/Kanban/Kanban.js +339 -0
  104. package/dist/components/pro/Kanban/Kanban.js.map +1 -0
  105. package/dist/components/pro/Kanban/Swimlanes.d.ts +3 -0
  106. package/dist/components/pro/Kanban/Swimlanes.js +60 -0
  107. package/dist/components/pro/Kanban/Swimlanes.js.map +1 -0
  108. package/dist/components/pro/Kanban/index.d.ts +5 -0
  109. package/dist/components/pro/Kanban/types.d.ts +103 -0
  110. package/dist/components/pro/Kanban/useKanbanDrag.d.ts +17 -0
  111. package/dist/components/pro/Kanban/useKanbanDrag.js +69 -0
  112. package/dist/components/pro/Kanban/useKanbanDrag.js.map +1 -0
  113. package/dist/components/pro/Kanban/utils.d.ts +13 -0
  114. package/dist/components/pro/Kanban/utils.js +48 -0
  115. package/dist/components/pro/Kanban/utils.js.map +1 -0
  116. package/dist/components/pro/RichTextEditor/AIRewrite.js +158 -127
  117. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  118. package/dist/components/pro/RichTextEditor/BlockHandle.d.ts +2 -0
  119. package/dist/components/pro/RichTextEditor/BlockHandle.js +156 -115
  120. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  121. package/dist/components/pro/RichTextEditor/RichTextEditor.js +136 -159
  122. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  123. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -41
  124. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  125. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +59 -53
  126. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  127. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +48 -44
  128. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  129. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +67 -63
  130. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  131. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.d.ts +1 -0
  132. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +182 -129
  133. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  134. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.d.ts +1 -0
  135. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +3 -3
  136. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  137. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.d.ts +3 -0
  138. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js +31 -0
  139. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js.map +1 -0
  140. package/dist/components/pro/RichTextEditor/index.d.ts +1 -1
  141. package/dist/components/pro/RichTextEditor/types.d.ts +78 -11
  142. package/dist/components/pro/RichTextEditor/types.js +11 -0
  143. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  144. package/dist/dishui.css +1 -1
  145. package/dist/index-nostyled.d.ts +1 -1
  146. package/dist/index.d.ts +6 -3
  147. package/dist/index.js +134 -107
  148. package/dist/kanban.js +5 -0
  149. package/dist/layouts/Sidebar.d.ts +16 -0
  150. package/dist/layouts/Sidebar.js +85 -52
  151. package/dist/layouts/Sidebar.js.map +1 -1
  152. package/dist/utils/i18n.js +20 -0
  153. package/dist/utils/i18n.js.map +1 -1
  154. package/dist/utils/menu.js +1 -1
  155. package/dist/utils/menu.js.map +1 -1
  156. package/package.json +14 -3
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": "0.0.101",
3
+ "full": false,
4
+ "node": "v22.13.1",
5
+ "verifiedAt": "2026-09-23T16:41:18.570Z"
6
+ }
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("blade-card-metric", d),
8
+ className: e("dishui-card-metric", d),
9
9
  "aria-busy": u || void 0,
10
10
  children: [/* @__PURE__ */ n("div", {
11
- className: "blade-card-metric__body",
11
+ className: "dishui-card-metric__body",
12
12
  children: [
13
13
  (a != null || o != null) && /* @__PURE__ */ n("div", {
14
- className: "blade-card-metric__meta",
14
+ className: "dishui-card-metric__meta",
15
15
  children: [/* @__PURE__ */ t("span", { children: a }), /* @__PURE__ */ t("span", {
16
- className: "blade-card-metric__period",
16
+ className: "dishui-card-metric__period",
17
17
  children: o
18
18
  })]
19
19
  }),
20
20
  /* @__PURE__ */ t("h3", {
21
- className: "blade-card-metric__title",
21
+ className: "dishui-card-metric__title",
22
22
  children: i
23
23
  }),
24
24
  /* @__PURE__ */ t("div", {
25
- className: "blade-card-metric__value",
25
+ className: "dishui-card-metric__value",
26
26
  children: u ? /* @__PURE__ */ t("span", {
27
- className: "blade-card-metric__skeleton",
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: "blade-card-metric__description",
32
+ className: "dishui-card-metric__description",
33
33
  children: c
34
34
  })
35
35
  ]
36
36
  }), l.length > 0 && /* @__PURE__ */ t("dl", {
37
- className: "blade-card-metric__footer",
37
+ className: "dishui-card-metric__footer",
38
38
  children: l.map((e, r) => /* @__PURE__ */ n("div", {
39
- className: "blade-card-metric__item",
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: "blade-card-metric__skeleton",
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('blade-card-metric', className)} aria-busy={loading || undefined}>\n <div className=\"blade-card-metric__body\">\n {((meta !== null && meta !== undefined) || (period !== null && period !== undefined)) && (\n <div className=\"blade-card-metric__meta\">\n <span>{meta}</span>\n <span className=\"blade-card-metric__period\">{period}</span>\n </div>\n )}\n <h3 className=\"blade-card-metric__title\">{title}</h3>\n <div className=\"blade-card-metric__value\">\n {loading ? <span className=\"blade-card-metric__skeleton\" aria-hidden=\"true\" /> : value}\n </div>\n {description !== null && description !== undefined && <div className=\"blade-card-metric__description\">{description}</div>}\n </div>\n {items.length > 0 && (\n <dl className=\"blade-card-metric__footer\">\n {items.map((item, index) => (\n <div className=\"blade-card-metric__item\" key={item.key ?? index}>\n <dt>{item.label}</dt>\n <dd>{loading ? <span className=\"blade-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,qBAAqB,CAAS;CAAG,aAAW,KAAW,KAAA;CAAxF,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;KAA6B,UAAA;IAAa,CAAA,CACvD;;GAEP,kBAAC,MAAD;IAAI,WAAU;IAA4B,UAAA;GAAU,CAAA;GACpD,kBAAC,OAAD;IAAK,WAAU;IACZ,UAAA,IAAU,kBAAC,QAAD;KAAM,WAAU;KAA8B,eAAY;IAAQ,CAAA,IAAI;GAC9E,CAAA;GACJ,KAAgB,QAAqC,kBAAC,OAAD;IAAK,WAAU;IAAkC,UAAA;GAAiB,CAAA;EACrH;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;IAA8B,eAAY;GAAQ,CAAA,IAAI,EAAK,MAAU,CAAA,CACjG;EAHyC,GAAA,EAAK,OAAO,CAGrD,CACN;CACC,CAAA,CAEC"}
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":"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"}
@@ -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;