arthub-table 0.2.7 → 0.2.8-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -793,6 +793,8 @@ declare class DataGrid {
793
793
  edgeScroller: EdgeScroller;
794
794
  rowIdMap: Map<string, number>;
795
795
  selectedRowIds: Set<string>;
796
+ selectedGroupIds: Set<string>;
797
+ _groupSelectedRowIds: Map<string, string[]>;
796
798
  lastSelectedRowIndex: number;
797
799
  /** Footer 行高度(showFooter 为 false 时返回 0) */
798
800
  get footerHeight(): number;
@@ -2276,6 +2278,12 @@ declare class DataGrid {
2276
2278
  */
2277
2279
  private ensureRowIds;
2278
2280
  syncGroupCheckedState(): void;
2281
+ /**
2282
+ * 受控模式下:计算组头应有的 checked 状态,如果与当前不一致则通过回调通知外部修改。
2283
+ * 逻辑与 syncGroupCheckedState 的计算一致,但不直接修改 data.checked 和 selectedGroupIds,
2284
+ * 而是通过 onGroupCheckboxChange 回调让外部决定是否更新。
2285
+ */
2286
+ private _notifyGroupCheckedChanges;
2279
2287
  /**
2280
2288
  * 折叠所有任务(受控模式下触发 onCollapseAll 回调,由外部操作 tableTaskList 后刷新)
2281
2289
  */
@@ -217,6 +217,14 @@ export interface ThemeTokens {
217
217
  loadingColor: string;
218
218
  /** autofill 边框色 */
219
219
  autofillBorder: string;
220
+ /** Boolean checkbox 边框色(未勾选 + 可编辑) */
221
+ checkboxBorder: string;
222
+ /** Boolean checkbox 边框色(未勾选 + 只读) */
223
+ checkboxBorderDisabled: string;
224
+ /** Boolean checkbox 填充色(已勾选 + 可编辑) */
225
+ checkboxChecked: string;
226
+ /** Boolean checkbox 填充色(已勾选 + 只读) */
227
+ checkboxCheckedDisabled: string;
220
228
  /** 固定列阴影 */
221
229
  shadowFixedColumn: string;
222
230
  /** Tooltip 阴影 */
@@ -32,6 +32,13 @@ declare class BooleanViewer implements CellViewer<BooleanViewerData> {
32
32
  draw(context: ViewerRenderContext, data: BooleanViewerData): void;
33
33
  /**
34
34
  * Draw checkbox style
35
+ * Colors are sourced from theme tokens (StyleManager) so the checkbox
36
+ * adapts to light/dark/blue themes consistently.
37
+ * - checkboxChecked : filled bg (editable + checked)
38
+ * - checkboxCheckedDisabled: filled bg (readonly + checked)
39
+ * - checkboxBorder : border (editable + unchecked)
40
+ * - checkboxBorderDisabled : border (readonly + unchecked)
41
+ * `data.checkedColor` may override the editable-checked fill color.
35
42
  */
36
43
  private drawCheckbox;
37
44
  /**
@@ -0,0 +1,59 @@
1
+ /**
2
+ * CpPersonViewer - CP Person (外包人员) rendering viewer
3
+ * Handles avatar and name display for CP users
4
+ *
5
+ * 与 DOM 版 cpPersonViewer.ts 对齐:
6
+ * - value 为 CP 用户 ID 数组(string[])或单个 string
7
+ * - 通过 cpUserResolver 回调将 ID 解析为显示名称(companyName/roleName/nickName)
8
+ * - 未解析的 ID 先显示 ID 占位,异步加载后通过 requestRedraw 刷新
9
+ * - 样式对齐 PersonViewer:头像 + 名称
10
+ */
11
+ import type { CellViewer, ViewerRenderContext, CpPersonViewerData } from './types';
12
+ /**
13
+ * CpPersonViewer renders CP person information in cells
14
+ * Style aligned with PersonViewer (avatar + name)
15
+ */
16
+ declare class CpPersonViewer implements CellViewer<CpPersonViewerData> {
17
+ readonly type = "cp-person";
18
+ private imageManager;
19
+ private _sm;
20
+ private get avatarColors();
21
+ constructor();
22
+ /**
23
+ * Draw CP person content in the cell
24
+ */
25
+ draw(context: ViewerRenderContext, data: CpPersonViewerData): void;
26
+ /**
27
+ * Draw persons list (with background tag style, aligned with PersonViewer showNameBackground mode)
28
+ */
29
+ private drawPersons;
30
+ /**
31
+ * Draw person avatar (circle shape, using default avatar image)
32
+ */
33
+ private drawAvatar;
34
+ /**
35
+ * Draw fallback avatar with initial character
36
+ */
37
+ private drawFallbackAvatar;
38
+ /**
39
+ * Get consistent color index based on person id
40
+ */
41
+ private getColorIndex;
42
+ /**
43
+ * Get initial character from name
44
+ */
45
+ private getInitial;
46
+ /**
47
+ * Truncate text with ellipsis to fit within maxWidth
48
+ */
49
+ private truncateText;
50
+ /**
51
+ * Draw remaining count badge
52
+ */
53
+ private drawRemainingCount;
54
+ /**
55
+ * Draw placeholder for empty state
56
+ */
57
+ private drawPlaceholder;
58
+ }
59
+ export default CpPersonViewer;
@@ -41,6 +41,7 @@ export { default as ChildrenViewer } from './ChildrenViewer';
41
41
  export { default as OnlyShowErrorViewer } from './OnlyShowErrorViewer';
42
42
  export { default as PerspectiveViewer } from './PerspectiveViewer';
43
43
  export { default as RelatedTaskViewer } from './RelatedTaskViewer';
44
+ export { default as CpPersonViewer } from './CpPersonViewer';
44
45
  import TextViewer from './TextViewer';
45
46
  import DropdownViewer from './DropdownViewer';
46
47
  import ImageViewer from './ImageViewer';
@@ -78,6 +79,7 @@ import ChildrenViewer from './ChildrenViewer';
78
79
  import OnlyShowErrorViewer from './OnlyShowErrorViewer';
79
80
  import PerspectiveViewer from './PerspectiveViewer';
80
81
  import RelatedTaskViewer from './RelatedTaskViewer';
82
+ import CpPersonViewer from './CpPersonViewer';
81
83
  /**
82
84
  * Register all default viewers
83
85
  * Call this function once during application initialization
@@ -129,4 +131,5 @@ export declare const defaultViewers: {
129
131
  'only-show-error': typeof OnlyShowErrorViewer;
130
132
  perspective: typeof PerspectiveViewer;
131
133
  'related-task': typeof RelatedTaskViewer;
134
+ 'cp-person': typeof CpPersonViewer;
132
135
  };
@@ -969,6 +969,7 @@ export interface ViewerTypeMap {
969
969
  'itfs-path': ItfsPathViewerData;
970
970
  'deliverable-review': DeliverableReviewViewerData;
971
971
  'rich-text': RichTextViewerData;
972
+ 'cp-person': CpPersonViewerData;
972
973
  }
973
974
  /**
974
975
  * All supported viewer types
@@ -1383,3 +1384,34 @@ export interface RelatedTaskViewerData extends CellViewerData {
1383
1384
  ids: number[];
1384
1385
  }, data: any) => void;
1385
1386
  }
1387
+ /**
1388
+ * CP 人员信息(由 cpUserResolver 返回)
1389
+ */
1390
+ export interface CpPersonInfo {
1391
+ id: string;
1392
+ /** 显示名称,格式如 "公司名/基地/昵称" */
1393
+ showName: string;
1394
+ }
1395
+ /**
1396
+ * CP 人员 Viewer 数据接口
1397
+ * 用于展示外包人员(CP User)信息
1398
+ * 对齐 DOM 版 cpPersonViewer.ts 的渲染逻辑
1399
+ */
1400
+ export interface CpPersonViewerData extends CellViewerData {
1401
+ /** CP 用户 ID 数组或单个 ID 字符串 */
1402
+ value: string[] | string | null;
1403
+ /** 头像大小,默认 16 */
1404
+ avatarSize?: number;
1405
+ /** 最大显示人数,默认 3 */
1406
+ maxDisplay?: number;
1407
+ /** 空值占位符,默认 '-' */
1408
+ placeholder?: string;
1409
+ /**
1410
+ * CP 用户解析回调
1411
+ * 同步返回已缓存的用户信息,对未缓存的 ID 触发异步加载后调用 requestRedraw
1412
+ * @param ids CP 用户 ID 数组
1413
+ * @param requestRedraw 重绘回调,异步加载完成后调用
1414
+ * @returns 已解析的用户信息数组(未解析的以 ID 作为 showName)
1415
+ */
1416
+ cpUserResolver?: (ids: string[], requestRedraw: () => void) => CpPersonInfo[];
1417
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arthub-table",
3
- "version": "0.2.7",
3
+ "version": "0.2.8-next.0",
4
4
  "description": "High-performance canvas-based table/grid component for Vue 3 with TypeScript support, featuring virtual scrolling, cell viewers, grouped rows, and nested grids.",
5
5
  "main": "dist/arthub-table.common.js",
6
6
  "module": "dist/arthub-table.umd.min.js",