arthub-table 0.0.3
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/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/README.md +257 -0
- package/dist/arthub-table.common.js +2 -0
- package/dist/arthub-table.common.js.map +1 -0
- package/dist/arthub-table.css +1 -0
- package/dist/arthub-table.umd.js +2 -0
- package/dist/arthub-table.umd.js.map +1 -0
- package/dist/arthub-table.umd.min.js +2 -0
- package/dist/arthub-table.umd.min.js.map +1 -0
- package/dist/demo.html +1 -0
- package/dist/img/ah-icon_audio_pause.55c06fbf.svg +3 -0
- package/dist/img/ah-icon_closeshape.82e52181.svg +3 -0
- package/dist/img/icon_attachment.724d33ba.svg +3 -0
- package/dist/img/icon_default.9ef1a394.svg +5 -0
- package/dist/img/icon_edit.9966e699.svg +3 -0
- package/dist/img/icon_error_dark.2a057cdd.svg +17 -0
- package/dist/img/icon_error_light.ac6763e9.svg +17 -0
- package/dist/img/icon_failure_dark.f68723a7.svg +25 -0
- package/dist/img/icon_failure_light.489a7167.svg +25 -0
- package/dist/img/icon_folder.ea3efcce.svg +11 -0
- package/dist/img/icon_netdisc.d8bbe2e0.svg +4 -0
- package/dist/img/icon_singlearrowright.6adcd336.svg +4 -0
- package/dist/img/icon_totalNum.23a86d16.svg +3 -0
- package/dist/img/icon_transform_dark.033764ea.svg +26 -0
- package/dist/img/icon_transform_light.fa9fbcbd.svg +26 -0
- package/dist/img/img_3d.39b27128.svg +14 -0
- package/dist/img/img_aep.a898e3e7.svg +8 -0
- package/dist/img/img_ai.61f08a0a.svg +8 -0
- package/dist/img/img_audio.e4ada65c.svg +5 -0
- package/dist/img/img_enf.ad88f95d.svg +28 -0
- package/dist/img/img_excel.56663d85.svg +30 -0
- package/dist/img/img_exe.5e3fc198.svg +27 -0
- package/dist/img/img_img.ac2e0d0c.svg +8 -0
- package/dist/img/img_mcp.393ef169.svg +28 -0
- package/dist/img/img_pdf.f4da9922.svg +7 -0
- package/dist/img/img_ppt.d172780f.svg +26 -0
- package/dist/img/img_pxcook.7e9fce57.svg +18 -0
- package/dist/img/img_rarzip7z.e3b1de82.svg +28 -0
- package/dist/img/img_sketch.d49a9bd4.svg +32 -0
- package/dist/img/img_video.b6ac6198.svg +7 -0
- package/dist/img/img_word.0c1d3c88.svg +31 -0
- package/dist/img/img_x2d.6acc94f6.svg +28 -0
- package/dist/img/img_xd.cc23d09a.svg +28 -0
- package/dist/img/matrix-icon_finish.617f5d3e.svg +3 -0
- package/dist/img/matrix-icon_inprogress.3781156a.svg +3 -0
- package/dist/img/matrix-icon_supervise.edae43f0.svg +3 -0
- package/dist/types/assets/icon/iconBase64.d.ts +3 -0
- package/dist/types/components/Icon/index.d.ts +2 -0
- package/dist/types/components/clickoutside.d.ts +3 -0
- package/dist/types/core/Body.d.ts +142 -0
- package/dist/types/core/Cell.d.ts +94 -0
- package/dist/types/core/Clipboard.d.ts +16 -0
- package/dist/types/core/ColumnHeader.d.ts +24 -0
- package/dist/types/core/Context.d.ts +24 -0
- package/dist/types/core/DataGrid.d.ts +749 -0
- package/dist/types/core/EdgeScroller.d.ts +75 -0
- package/dist/types/core/Editor.d.ts +33 -0
- package/dist/types/core/Events.d.ts +25 -0
- package/dist/types/core/Footer.d.ts +37 -0
- package/dist/types/core/GifAnimationManager.d.ts +69 -0
- package/dist/types/core/GifOverlay.d.ts +33 -0
- package/dist/types/core/GroupRow.d.ts +80 -0
- package/dist/types/core/Header.d.ts +40 -0
- package/dist/types/core/History.d.ts +27 -0
- package/dist/types/core/ImageManager.d.ts +94 -0
- package/dist/types/core/NestedGrid.d.ts +177 -0
- package/dist/types/core/Paint.d.ts +101 -0
- package/dist/types/core/PerformanceMonitor.d.ts +96 -0
- package/dist/types/core/Row.d.ts +31 -0
- package/dist/types/core/RowHeader.d.ts +22 -0
- package/dist/types/core/Scroller.d.ts +33 -0
- package/dist/types/core/Selector.d.ts +9 -0
- package/dist/types/core/StyleManager.d.ts +108 -0
- package/dist/types/core/Tooltip.d.ts +28 -0
- package/dist/types/core/Validator.d.ts +26 -0
- package/dist/types/core/config.d.ts +5 -0
- package/dist/types/core/constants.d.ts +39 -0
- package/dist/types/core/element.d.ts +36 -0
- package/dist/types/core/extension-type-mapping.d.ts +5 -0
- package/dist/types/core/footer/utils.d.ts +7 -0
- package/dist/types/core/types.d.ts +399 -0
- package/dist/types/core/util.d.ts +17 -0
- package/dist/types/core/viewers/BooleanViewer.d.ts +46 -0
- package/dist/types/core/viewers/DatetimeViewer.d.ts +33 -0
- package/dist/types/core/viewers/DeliverableReviewViewer.d.ts +87 -0
- package/dist/types/core/viewers/FileStorageSpecViewer.d.ts +37 -0
- package/dist/types/core/viewers/FileViewer.d.ts +118 -0
- package/dist/types/core/viewers/GroupHeaderViewer.d.ts +73 -0
- package/dist/types/core/viewers/HyperlinkTextViewer.d.ts +80 -0
- package/dist/types/core/viewers/ImageViewer.d.ts +31 -0
- package/dist/types/core/viewers/ItfsPathViewer.d.ts +58 -0
- package/dist/types/core/viewers/ModuleViewer.d.ts +53 -0
- package/dist/types/core/viewers/NestedGridViewer.d.ts +47 -0
- package/dist/types/core/viewers/PersonViewer.d.ts +61 -0
- package/dist/types/core/viewers/PivotViewer.d.ts +43 -0
- package/dist/types/core/viewers/PriorityTextViewer.d.ts +35 -0
- package/dist/types/core/viewers/ProgressViewer.d.ts +68 -0
- package/dist/types/core/viewers/PunchTimingViewer.d.ts +42 -0
- package/dist/types/core/viewers/PunchViewer.d.ts +116 -0
- package/dist/types/core/viewers/RichTextViewer.d.ts +83 -0
- package/dist/types/core/viewers/SelectViewer.d.ts +57 -0
- package/dist/types/core/viewers/SeparatorRowViewer.d.ts +25 -0
- package/dist/types/core/viewers/StatusTextViewer.d.ts +40 -0
- package/dist/types/core/viewers/StatusViewer.d.ts +53 -0
- package/dist/types/core/viewers/TableActionButtonViewer.d.ts +77 -0
- package/dist/types/core/viewers/TaskNodeViewer.d.ts +106 -0
- package/dist/types/core/viewers/TextViewer.d.ts +37 -0
- package/dist/types/core/viewers/TextViewerWithSwitcher.d.ts +112 -0
- package/dist/types/core/viewers/ThemeViewer.d.ts +36 -0
- package/dist/types/core/viewers/TreeDropdownViewer.d.ts +55 -0
- package/dist/types/core/viewers/UpstreamViewer.d.ts +79 -0
- package/dist/types/core/viewers/ViewerRegistry.d.ts +76 -0
- package/dist/types/core/viewers/WfStateViewer.d.ts +76 -0
- package/dist/types/core/viewers/WorkflowViewer.d.ts +37 -0
- package/dist/types/core/viewers/index.d.ts +114 -0
- package/dist/types/core/viewers/types.d.ts +1097 -0
- package/dist/types/index.d.ts +37 -0
- package/dist/types/testing/SnapshotManager.d.ts +55 -0
- package/dist/types/testing/TestHooks.d.ts +275 -0
- package/dist/types/testing/index.d.ts +3 -0
- package/dist/types/testing/installTestHooks.d.ts +16 -0
- package/package.json +126 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TextViewerWithSwitcher - Tree-structured text viewer with expand/collapse
|
|
3
|
+
* Displays task names with tree hierarchy, expand/collapse buttons,
|
|
4
|
+
* task icons, child count badges, and error/warning indicators
|
|
5
|
+
*/
|
|
6
|
+
import type { CellViewer, ViewerRenderContext, TextViewerWithSwitcherData } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* TextViewerWithSwitcher renders task names with tree hierarchy
|
|
9
|
+
* Supports expand/collapse, task icons, child count, error indicators
|
|
10
|
+
*/
|
|
11
|
+
declare class TextViewerWithSwitcher implements CellViewer<TextViewerWithSwitcherData> {
|
|
12
|
+
readonly type = "text-with-switcher";
|
|
13
|
+
private imageManager;
|
|
14
|
+
private arrowImage;
|
|
15
|
+
private totalNumImage;
|
|
16
|
+
private loadingAngle;
|
|
17
|
+
private lastLayoutBounds;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Preload SVG icons
|
|
21
|
+
*/
|
|
22
|
+
private preloadIcons;
|
|
23
|
+
/**
|
|
24
|
+
* Main draw method
|
|
25
|
+
*/
|
|
26
|
+
draw(context: ViewerRenderContext, data: TextViewerWithSwitcherData): void;
|
|
27
|
+
/**
|
|
28
|
+
* Draw tree indent lines
|
|
29
|
+
* Only draws vertical dashed lines for each indent level (no horizontal connectors).
|
|
30
|
+
* - isLastLeafArr[i] === true: ancestor at level i still has siblings -> full height line
|
|
31
|
+
* - isLastLeafArr[i] === false: ancestor at level i is the last child -> half height line (top to middle)
|
|
32
|
+
* @returns New X position
|
|
33
|
+
*/
|
|
34
|
+
private drawIndentLines;
|
|
35
|
+
/**
|
|
36
|
+
* Draw expand/collapse arrow or loading indicator
|
|
37
|
+
* @returns New X position
|
|
38
|
+
*/
|
|
39
|
+
private drawExpandArrow;
|
|
40
|
+
/**
|
|
41
|
+
* Draw loading spinner animation
|
|
42
|
+
*/
|
|
43
|
+
private drawLoadingSpinner;
|
|
44
|
+
/**
|
|
45
|
+
* Draw vertical dashed line below the expand icon (when node is expanded)
|
|
46
|
+
* This connects the expand arrow to its child nodes below.
|
|
47
|
+
* Mirrors DOM's .switch-icon-down-expand-line behavior.
|
|
48
|
+
*/
|
|
49
|
+
private drawExpandDownLine;
|
|
50
|
+
/**
|
|
51
|
+
* Draw fallback triangle arrow (when SVG fails to load)
|
|
52
|
+
*/
|
|
53
|
+
private drawFallbackArrow;
|
|
54
|
+
/**
|
|
55
|
+
* Draw task icon and optional link icon
|
|
56
|
+
* @returns New X position
|
|
57
|
+
*/
|
|
58
|
+
private drawIcon;
|
|
59
|
+
/**
|
|
60
|
+
* Draw task name text with truncation, strikethrough, weaken, and markdown link support
|
|
61
|
+
* @returns New X position after text
|
|
62
|
+
*/
|
|
63
|
+
private drawText;
|
|
64
|
+
/**
|
|
65
|
+
* Calculate right reserved width for totalNum, downstream, and error icons
|
|
66
|
+
*/
|
|
67
|
+
private calcRightReservedWidth;
|
|
68
|
+
/**
|
|
69
|
+
* Draw right area: totalNum icon, downstream indicator, error/warning icon
|
|
70
|
+
*/
|
|
71
|
+
private drawRightArea;
|
|
72
|
+
/**
|
|
73
|
+
* Draw totalNum icon and count
|
|
74
|
+
* @returns New right X position (moving leftward)
|
|
75
|
+
*/
|
|
76
|
+
private drawTotalNum;
|
|
77
|
+
/**
|
|
78
|
+
* Draw downstream node indicator
|
|
79
|
+
* @returns New right X position (moving leftward)
|
|
80
|
+
*/
|
|
81
|
+
private drawDownstreamIcon;
|
|
82
|
+
/**
|
|
83
|
+
* Draw error or warning icon
|
|
84
|
+
* @returns New right X position (moving leftward)
|
|
85
|
+
*/
|
|
86
|
+
private drawErrorIcon;
|
|
87
|
+
/**
|
|
88
|
+
* Get display text from data
|
|
89
|
+
*/
|
|
90
|
+
private getDisplayText;
|
|
91
|
+
/**
|
|
92
|
+
* Extract plain text from HTML/rich text
|
|
93
|
+
*/
|
|
94
|
+
private extractPlainText;
|
|
95
|
+
/**
|
|
96
|
+
* Truncate text with ellipsis if exceeds max width
|
|
97
|
+
*/
|
|
98
|
+
private truncateText;
|
|
99
|
+
/**
|
|
100
|
+
* Calculate layout bounds for a given data set (used by onClick/getInteractiveCursor)
|
|
101
|
+
*/
|
|
102
|
+
private calcLayoutBounds;
|
|
103
|
+
/**
|
|
104
|
+
* Handle click events on the cell
|
|
105
|
+
*/
|
|
106
|
+
onClick(context: ViewerRenderContext, data: TextViewerWithSwitcherData, localX: number, _localY: number): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Get interactive cursor for hover areas
|
|
109
|
+
*/
|
|
110
|
+
getInteractiveCursor(context: ViewerRenderContext, data: TextViewerWithSwitcherData, localX: number, _localY: number): string | null;
|
|
111
|
+
}
|
|
112
|
+
export default TextViewerWithSwitcher;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThemeViewer - 主题文本渲染 viewer
|
|
3
|
+
* 用于展示主题标签(图标 + 主题名称 + 后缀),如 [🎨] 主题A 等2个
|
|
4
|
+
* 参考 AssetMatrix/src/views/components/ProgressPanel/ProgressPropsViewer/themeViewer.ts
|
|
5
|
+
*/
|
|
6
|
+
import type { CellViewer, ViewerRenderContext, ThemeViewerData } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* ThemeViewer 在单元格中渲染主题标签
|
|
9
|
+
* 展示形如 [图标] 主题名称 等N个 的内容
|
|
10
|
+
*/
|
|
11
|
+
declare class ThemeViewer implements CellViewer<ThemeViewerData> {
|
|
12
|
+
readonly type = "theme";
|
|
13
|
+
/** 空值占位符 */
|
|
14
|
+
private readonly emptyValue;
|
|
15
|
+
/**
|
|
16
|
+
* 绘制主题内容
|
|
17
|
+
*/
|
|
18
|
+
draw(context: ViewerRenderContext, data: ThemeViewerData): void;
|
|
19
|
+
/**
|
|
20
|
+
* 绘制主题内容(图标 + 名称 + 后缀)
|
|
21
|
+
*/
|
|
22
|
+
private drawThemeContent;
|
|
23
|
+
/**
|
|
24
|
+
* 绘制主题图标(皮肤/调色板图标)
|
|
25
|
+
*/
|
|
26
|
+
private drawThemeIcon;
|
|
27
|
+
/**
|
|
28
|
+
* 绘制空值占位文本
|
|
29
|
+
*/
|
|
30
|
+
private drawEmptyText;
|
|
31
|
+
/**
|
|
32
|
+
* 截断文本并添加省略号
|
|
33
|
+
*/
|
|
34
|
+
private truncateText;
|
|
35
|
+
}
|
|
36
|
+
export default ThemeViewer;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TreeDropdownViewer - 树形下拉选择渲染 Viewer
|
|
3
|
+
* 将树形选中的路径值渲染为面包屑风格的标签
|
|
4
|
+
* 超出单元格宽度时文本截断打点显示
|
|
5
|
+
*/
|
|
6
|
+
import type { CellViewer, ViewerRenderContext, TreeDropdownViewerData } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* TreeDropdownViewer 渲染树形下拉选择结果
|
|
9
|
+
* 支持多选路径标签展示,如 "第二层"、"第二层/1"、"第二层/1/2"
|
|
10
|
+
* 超出单元格宽度时标签文本截断打点
|
|
11
|
+
*/
|
|
12
|
+
declare class TreeDropdownViewer implements CellViewer<TreeDropdownViewerData> {
|
|
13
|
+
readonly type = "tree-dropdown";
|
|
14
|
+
/**
|
|
15
|
+
* Draw tree dropdown content in the cell
|
|
16
|
+
*/
|
|
17
|
+
draw(context: ViewerRenderContext, data: TreeDropdownViewerData): void;
|
|
18
|
+
/**
|
|
19
|
+
* 根据 data 解析出需要展示的路径标签列表
|
|
20
|
+
*/
|
|
21
|
+
private getPathLabels;
|
|
22
|
+
/**
|
|
23
|
+
* 获取路径的最后一段
|
|
24
|
+
*/
|
|
25
|
+
private getLastSegment;
|
|
26
|
+
/**
|
|
27
|
+
* 绘制空状态
|
|
28
|
+
*/
|
|
29
|
+
private drawEmptyState;
|
|
30
|
+
/**
|
|
31
|
+
* 绘制路径标签列表(标签紧凑左对齐,空间不足时等比缩小并截断打点)
|
|
32
|
+
*/
|
|
33
|
+
private drawPathTags;
|
|
34
|
+
/**
|
|
35
|
+
* 计算标签宽度
|
|
36
|
+
*/
|
|
37
|
+
private calculateTagWidth;
|
|
38
|
+
/**
|
|
39
|
+
* 绘制单个路径标签
|
|
40
|
+
*/
|
|
41
|
+
private drawPathTag;
|
|
42
|
+
/**
|
|
43
|
+
* 绘制圆角矩形(填充)
|
|
44
|
+
*/
|
|
45
|
+
private drawRoundedRect;
|
|
46
|
+
/**
|
|
47
|
+
* 绘制圆角矩形边框
|
|
48
|
+
*/
|
|
49
|
+
private drawRoundedRectBorder;
|
|
50
|
+
/**
|
|
51
|
+
* 文本截断,超出宽度显示省略号,至少保留一个可见字符
|
|
52
|
+
*/
|
|
53
|
+
private truncateText;
|
|
54
|
+
}
|
|
55
|
+
export default TreeDropdownViewer;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UpstreamViewer - Upstream dependency status rendering viewer
|
|
3
|
+
* Displays upstream field view items with module tags, completion status,
|
|
4
|
+
* resource preview thumbnails, and reminder indicators.
|
|
5
|
+
*
|
|
6
|
+
* Layout per item: [ModuleTag] [DoneIcon + StatusText] [PreviewImages...]
|
|
7
|
+
* [ModuleTag] [ReminderTag]
|
|
8
|
+
* Empty state: "-"
|
|
9
|
+
*/
|
|
10
|
+
import type { CellViewer, ViewerRenderContext, UpstreamViewerData } from './types';
|
|
11
|
+
declare class UpstreamViewer implements CellViewer<UpstreamViewerData> {
|
|
12
|
+
readonly type = "upstream";
|
|
13
|
+
private imageManager;
|
|
14
|
+
private failedImages;
|
|
15
|
+
private pendingLoads;
|
|
16
|
+
constructor();
|
|
17
|
+
/**
|
|
18
|
+
* Draw upstream cell content
|
|
19
|
+
*/
|
|
20
|
+
draw(context: ViewerRenderContext, data: UpstreamViewerData): void;
|
|
21
|
+
/**
|
|
22
|
+
* Handle click events — detect clicks on preview images
|
|
23
|
+
*/
|
|
24
|
+
onClick(context: ViewerRenderContext, data: UpstreamViewerData, localX: number, localY: number): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get interactive cursor for preview images
|
|
27
|
+
*/
|
|
28
|
+
getInteractiveCursor(context: ViewerRenderContext, data: UpstreamViewerData, localX: number, localY: number): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Draw empty state placeholder
|
|
31
|
+
*/
|
|
32
|
+
private drawEmpty;
|
|
33
|
+
/**
|
|
34
|
+
* Draw module tag with background color
|
|
35
|
+
* @returns tag width drawn
|
|
36
|
+
*/
|
|
37
|
+
private drawModuleTag;
|
|
38
|
+
/**
|
|
39
|
+
* Draw reminder tag for incomplete items
|
|
40
|
+
* @returns tag width drawn
|
|
41
|
+
*/
|
|
42
|
+
private drawReminderTag;
|
|
43
|
+
/**
|
|
44
|
+
* Draw done status: checkmark icon + status text + preview images
|
|
45
|
+
* @returns new currentX after drawing
|
|
46
|
+
*/
|
|
47
|
+
private drawDoneStatus;
|
|
48
|
+
/**
|
|
49
|
+
* Draw preview images for sync properties
|
|
50
|
+
* @returns new currentX after drawing
|
|
51
|
+
*/
|
|
52
|
+
private drawPreviewImages;
|
|
53
|
+
/**
|
|
54
|
+
* Draw a single preview image with rounded corners
|
|
55
|
+
*/
|
|
56
|
+
private drawPreviewImage;
|
|
57
|
+
/**
|
|
58
|
+
* Draw an SVG icon (for fallback / file type icons)
|
|
59
|
+
*/
|
|
60
|
+
private drawSvgIcon;
|
|
61
|
+
/**
|
|
62
|
+
* Draw a checkmark icon
|
|
63
|
+
*/
|
|
64
|
+
private drawCheckmark;
|
|
65
|
+
/**
|
|
66
|
+
* Calculate clickable areas for preview images
|
|
67
|
+
* Returns array of {x, y, width, height, imageUrl, assetId, index} in cell-local coords
|
|
68
|
+
*/
|
|
69
|
+
private calculateClickAreas;
|
|
70
|
+
/**
|
|
71
|
+
* Draw a rounded rectangle
|
|
72
|
+
*/
|
|
73
|
+
private drawRoundRect;
|
|
74
|
+
/**
|
|
75
|
+
* Clip to rounded rectangle path
|
|
76
|
+
*/
|
|
77
|
+
private clipRoundRect;
|
|
78
|
+
}
|
|
79
|
+
export default UpstreamViewer;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewerRegistry - Central registry for cell viewers
|
|
3
|
+
* Manages viewer registration and retrieval with fallback support
|
|
4
|
+
*/
|
|
5
|
+
import type { CellViewer, CellViewerData, ViewerConstructor, ViewerFactory } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Central registry for cell viewers
|
|
8
|
+
* Uses singleton pattern to ensure consistent viewer management
|
|
9
|
+
*/
|
|
10
|
+
declare class ViewerRegistry {
|
|
11
|
+
private static instance;
|
|
12
|
+
/** Map of viewer type to viewer instance */
|
|
13
|
+
private viewers;
|
|
14
|
+
/** Default viewer type for fallback */
|
|
15
|
+
private defaultViewerType;
|
|
16
|
+
/** Whether the registry has been initialized */
|
|
17
|
+
private initialized;
|
|
18
|
+
/** Track warned types to avoid repeated console.warn */
|
|
19
|
+
private warnedTypes;
|
|
20
|
+
private constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Get the singleton instance of ViewerRegistry
|
|
23
|
+
*/
|
|
24
|
+
static getInstance(): ViewerRegistry;
|
|
25
|
+
/**
|
|
26
|
+
* Register a viewer for a specific type
|
|
27
|
+
* @param type Viewer type identifier
|
|
28
|
+
* @param viewer Viewer instance, constructor, or factory function
|
|
29
|
+
*/
|
|
30
|
+
register<T extends CellViewerData>(type: string, viewer: CellViewer<T> | ViewerConstructor<T> | ViewerFactory<T>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Register multiple viewers at once
|
|
33
|
+
* @param viewers Object mapping types to viewers
|
|
34
|
+
*/
|
|
35
|
+
registerAll(viewers: Record<string, CellViewer<any> | ViewerConstructor<any> | ViewerFactory<any>>): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get a viewer by type
|
|
38
|
+
* Falls back to default viewer if type is not found
|
|
39
|
+
* @param type Viewer type identifier
|
|
40
|
+
* @returns Viewer instance
|
|
41
|
+
*/
|
|
42
|
+
get<T extends CellViewerData = CellViewerData>(type: string): CellViewer<T> | null;
|
|
43
|
+
/**
|
|
44
|
+
* Check if a viewer type is registered
|
|
45
|
+
* @param type Viewer type identifier
|
|
46
|
+
*/
|
|
47
|
+
has(type: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get all registered viewer types
|
|
50
|
+
*/
|
|
51
|
+
getRegisteredTypes(): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Set the default viewer type for fallback
|
|
54
|
+
* @param type Viewer type identifier
|
|
55
|
+
*/
|
|
56
|
+
setDefaultViewerType(type: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* Get the default viewer type
|
|
59
|
+
*/
|
|
60
|
+
getDefaultViewerType(): string;
|
|
61
|
+
/**
|
|
62
|
+
* Unregister a viewer
|
|
63
|
+
* @param type Viewer type identifier
|
|
64
|
+
*/
|
|
65
|
+
unregister(type: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Clear all registered viewers
|
|
68
|
+
*/
|
|
69
|
+
clear(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Get viewer count
|
|
72
|
+
*/
|
|
73
|
+
get size(): number;
|
|
74
|
+
}
|
|
75
|
+
export declare const getViewerRegistry: () => ViewerRegistry;
|
|
76
|
+
export default ViewerRegistry;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WfStateViewer - 工作流状态 Viewer
|
|
3
|
+
* 在 canvas 单元格中渲染工作流状态图标、名称文字、以及右上角的角标
|
|
4
|
+
*/
|
|
5
|
+
import type { CellViewer, ViewerRenderContext, WfStateViewerData } from './types';
|
|
6
|
+
declare class WfStateViewer implements CellViewer<WfStateViewerData> {
|
|
7
|
+
readonly type = "wf-state";
|
|
8
|
+
private imageManager;
|
|
9
|
+
/** 记录加载失败的图标 URL,避免反复重试 */
|
|
10
|
+
private failedIcons;
|
|
11
|
+
constructor();
|
|
12
|
+
/**
|
|
13
|
+
* 绘制单元格内容
|
|
14
|
+
*/
|
|
15
|
+
draw(context: ViewerRenderContext, data: WfStateViewerData): void;
|
|
16
|
+
/**
|
|
17
|
+
* 处理点击事件
|
|
18
|
+
*/
|
|
19
|
+
onClick(context: ViewerRenderContext, data: WfStateViewerData, localX: number, localY: number): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 获取交互光标
|
|
22
|
+
*/
|
|
23
|
+
getInteractiveCursor(context: ViewerRenderContext, data: WfStateViewerData, localX: number, localY: number): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* 从 value 中提取状态类型
|
|
26
|
+
*/
|
|
27
|
+
private parseValue;
|
|
28
|
+
/**
|
|
29
|
+
* 根据图标名称绘制对应 SVG 图标
|
|
30
|
+
* icon 值为 stateIcon 目录下的文件名(不含 .svg 后缀),未找到则兜底使用 ah-icon_supervise
|
|
31
|
+
*/
|
|
32
|
+
private drawIcon;
|
|
33
|
+
/**
|
|
34
|
+
* 通用 SVG 图标绘制方法
|
|
35
|
+
* 通过 ImageManager 加载 SVG 图片并绘制到 Canvas 上
|
|
36
|
+
*/
|
|
37
|
+
private drawSvgIcon;
|
|
38
|
+
/**
|
|
39
|
+
* 使用离屏 Canvas 对图片进行着色绘制
|
|
40
|
+
* 原理:先在离屏 Canvas 上绘制原图,再用 'source-in' 合成模式覆盖指定颜色
|
|
41
|
+
*/
|
|
42
|
+
private drawTintedImage;
|
|
43
|
+
/**
|
|
44
|
+
* 绘制文字,支持截断省略
|
|
45
|
+
*/
|
|
46
|
+
private drawText;
|
|
47
|
+
/**
|
|
48
|
+
* 绘制占位符文本
|
|
49
|
+
*/
|
|
50
|
+
private drawPlaceholder;
|
|
51
|
+
/**
|
|
52
|
+
* 绘制角标(右上角三角形)
|
|
53
|
+
*/
|
|
54
|
+
private drawCorner;
|
|
55
|
+
/**
|
|
56
|
+
* 判断是否应该显示角标
|
|
57
|
+
*/
|
|
58
|
+
private hasValidCorner;
|
|
59
|
+
/**
|
|
60
|
+
* 检查坐标是否在角标区域内
|
|
61
|
+
*/
|
|
62
|
+
private isInCornerArea;
|
|
63
|
+
/**
|
|
64
|
+
* 从 context 中判断鼠标是否在角标区域(用于 hover 检测)
|
|
65
|
+
*/
|
|
66
|
+
private isInCornerAreaFromContext;
|
|
67
|
+
/**
|
|
68
|
+
* 截断文字并添加省略号
|
|
69
|
+
*/
|
|
70
|
+
private truncateText;
|
|
71
|
+
/**
|
|
72
|
+
* 估算文字宽度(用于交互区域判断,不依赖 ctx)
|
|
73
|
+
*/
|
|
74
|
+
private estimateTextWidth;
|
|
75
|
+
}
|
|
76
|
+
export default WfStateViewer;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowViewer - 工作流 Viewer
|
|
3
|
+
* 在 canvas 单元格中渲染工作流名称列表,支持悬停下划线和点击交互
|
|
4
|
+
*/
|
|
5
|
+
import type { CellViewer, ViewerRenderContext, WorkflowViewerData } from './types';
|
|
6
|
+
declare class WorkflowViewer implements CellViewer<WorkflowViewerData> {
|
|
7
|
+
readonly type = "workflow";
|
|
8
|
+
/**
|
|
9
|
+
* 解析 value,返回过滤后的 string[]
|
|
10
|
+
*/
|
|
11
|
+
private parseValue;
|
|
12
|
+
/**
|
|
13
|
+
* 绘制单元格内容
|
|
14
|
+
*/
|
|
15
|
+
draw(context: ViewerRenderContext, data: WorkflowViewerData): void;
|
|
16
|
+
/**
|
|
17
|
+
* 处理点击事件
|
|
18
|
+
*/
|
|
19
|
+
onClick(context: ViewerRenderContext, data: WorkflowViewerData, localX: number, localY: number): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 获取交互光标
|
|
22
|
+
*/
|
|
23
|
+
getInteractiveCursor(context: ViewerRenderContext, data: WorkflowViewerData, localX: number, localY: number): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* 绘制占位符文本
|
|
26
|
+
*/
|
|
27
|
+
private drawPlaceholder;
|
|
28
|
+
/**
|
|
29
|
+
* 截断文字并添加省略号
|
|
30
|
+
*/
|
|
31
|
+
private truncateText;
|
|
32
|
+
/**
|
|
33
|
+
* 估算文字宽度(用于交互区域判断,不依赖 ctx)
|
|
34
|
+
*/
|
|
35
|
+
private estimateTextWidth;
|
|
36
|
+
}
|
|
37
|
+
export default WorkflowViewer;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas-Table Viewers
|
|
3
|
+
* Central export for all viewer types and utilities
|
|
4
|
+
*/
|
|
5
|
+
export * from './types';
|
|
6
|
+
export { default as ViewerRegistry, getViewerRegistry } from './ViewerRegistry';
|
|
7
|
+
export { default as TextViewer } from './TextViewer';
|
|
8
|
+
export { default as SelectViewer } from './SelectViewer';
|
|
9
|
+
export { default as ImageViewer } from './ImageViewer';
|
|
10
|
+
export { default as PersonViewer } from './PersonViewer';
|
|
11
|
+
export { default as ProgressViewer } from './ProgressViewer';
|
|
12
|
+
export { default as DatetimeViewer } from './DatetimeViewer';
|
|
13
|
+
export { default as BooleanViewer } from './BooleanViewer';
|
|
14
|
+
export { default as StatusViewer } from './StatusViewer';
|
|
15
|
+
export { default as GroupHeaderViewer } from './GroupHeaderViewer';
|
|
16
|
+
export { default as SeparatorRowViewer } from './SeparatorRowViewer';
|
|
17
|
+
export { default as NestedGridViewer } from './NestedGridViewer';
|
|
18
|
+
export { default as TreeDropdownViewer } from './TreeDropdownViewer';
|
|
19
|
+
export { default as PunchViewer } from './PunchViewer';
|
|
20
|
+
export { default as HyperlinkTextViewer } from './HyperlinkTextViewer';
|
|
21
|
+
export { default as FileViewer } from './FileViewer';
|
|
22
|
+
export { default as TaskNodeViewer } from './TaskNodeViewer';
|
|
23
|
+
export { default as WfStateViewer } from './WfStateViewer';
|
|
24
|
+
export { default as WorkflowViewer } from './WorkflowViewer';
|
|
25
|
+
export { default as FileStorageSpecViewer } from './FileStorageSpecViewer';
|
|
26
|
+
export { default as PivotViewer } from './PivotViewer';
|
|
27
|
+
export { default as ModuleViewer } from './ModuleViewer';
|
|
28
|
+
export { default as TextViewerWithSwitcher } from './TextViewerWithSwitcher';
|
|
29
|
+
export { default as UpstreamViewer } from './UpstreamViewer';
|
|
30
|
+
export { default as PunchTimingViewer } from './PunchTimingViewer';
|
|
31
|
+
export { TableActionButtonViewer } from './TableActionButtonViewer';
|
|
32
|
+
export { default as PriorityTextViewer } from './PriorityTextViewer';
|
|
33
|
+
export { default as StatusTextViewer } from './StatusTextViewer';
|
|
34
|
+
export { default as ThemeViewer } from './ThemeViewer';
|
|
35
|
+
export { default as ItfsPathViewer } from './ItfsPathViewer';
|
|
36
|
+
export { default as DeliverableReviewViewer } from './DeliverableReviewViewer';
|
|
37
|
+
export { default as RichTextViewer } from './RichTextViewer';
|
|
38
|
+
import TextViewer from './TextViewer';
|
|
39
|
+
import SelectViewer from './SelectViewer';
|
|
40
|
+
import ImageViewer from './ImageViewer';
|
|
41
|
+
import PersonViewer from './PersonViewer';
|
|
42
|
+
import ProgressViewer from './ProgressViewer';
|
|
43
|
+
import DatetimeViewer from './DatetimeViewer';
|
|
44
|
+
import BooleanViewer from './BooleanViewer';
|
|
45
|
+
import StatusViewer from './StatusViewer';
|
|
46
|
+
import GroupHeaderViewer from './GroupHeaderViewer';
|
|
47
|
+
import SeparatorRowViewer from './SeparatorRowViewer';
|
|
48
|
+
import NestedGridViewer from './NestedGridViewer';
|
|
49
|
+
import TreeDropdownViewer from './TreeDropdownViewer';
|
|
50
|
+
import PunchViewer from './PunchViewer';
|
|
51
|
+
import HyperlinkTextViewer from './HyperlinkTextViewer';
|
|
52
|
+
import FileViewer from './FileViewer';
|
|
53
|
+
import TaskNodeViewer from './TaskNodeViewer';
|
|
54
|
+
import WfStateViewer from './WfStateViewer';
|
|
55
|
+
import WorkflowViewer from './WorkflowViewer';
|
|
56
|
+
import FileStorageSpecViewer from './FileStorageSpecViewer';
|
|
57
|
+
import PivotViewer from './PivotViewer';
|
|
58
|
+
import ModuleViewer from './ModuleViewer';
|
|
59
|
+
import TextViewerWithSwitcher from './TextViewerWithSwitcher';
|
|
60
|
+
import UpstreamViewer from './UpstreamViewer';
|
|
61
|
+
import PunchTimingViewer from './PunchTimingViewer';
|
|
62
|
+
import { TableActionButtonViewer } from './TableActionButtonViewer';
|
|
63
|
+
import PriorityTextViewer from './PriorityTextViewer';
|
|
64
|
+
import StatusTextViewer from './StatusTextViewer';
|
|
65
|
+
import ThemeViewer from './ThemeViewer';
|
|
66
|
+
import ItfsPathViewer from './ItfsPathViewer';
|
|
67
|
+
import DeliverableReviewViewer from './DeliverableReviewViewer';
|
|
68
|
+
import RichTextViewer from './RichTextViewer';
|
|
69
|
+
/**
|
|
70
|
+
* Register all default viewers
|
|
71
|
+
* Call this function once during application initialization
|
|
72
|
+
*/
|
|
73
|
+
export declare function registerDefaultViewers(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Default viewer map for quick access
|
|
76
|
+
*/
|
|
77
|
+
export declare const defaultViewers: {
|
|
78
|
+
text: typeof TextViewer;
|
|
79
|
+
number: typeof TextViewer;
|
|
80
|
+
select: typeof SelectViewer;
|
|
81
|
+
image: typeof ImageViewer;
|
|
82
|
+
person: typeof PersonViewer;
|
|
83
|
+
progress: typeof ProgressViewer;
|
|
84
|
+
datetime: typeof DatetimeViewer;
|
|
85
|
+
date: typeof DatetimeViewer;
|
|
86
|
+
time: typeof DatetimeViewer;
|
|
87
|
+
month: typeof DatetimeViewer;
|
|
88
|
+
boolean: typeof BooleanViewer;
|
|
89
|
+
checkbox: typeof BooleanViewer;
|
|
90
|
+
status: typeof StatusViewer;
|
|
91
|
+
'group-header': typeof GroupHeaderViewer;
|
|
92
|
+
'separator-row': typeof SeparatorRowViewer;
|
|
93
|
+
nested: typeof NestedGridViewer;
|
|
94
|
+
'tree-dropdown': typeof TreeDropdownViewer;
|
|
95
|
+
punch: typeof PunchViewer;
|
|
96
|
+
hyperlink: typeof HyperlinkTextViewer;
|
|
97
|
+
file: typeof FileViewer;
|
|
98
|
+
'task-node': typeof TaskNodeViewer;
|
|
99
|
+
'wf-state': typeof WfStateViewer;
|
|
100
|
+
workflow: typeof WorkflowViewer;
|
|
101
|
+
'file-storage-spec': typeof FileStorageSpecViewer;
|
|
102
|
+
pivot: typeof PivotViewer;
|
|
103
|
+
module: typeof ModuleViewer;
|
|
104
|
+
'text-with-switcher': typeof TextViewerWithSwitcher;
|
|
105
|
+
upstream: typeof UpstreamViewer;
|
|
106
|
+
'punch-timing': typeof PunchTimingViewer;
|
|
107
|
+
'table-action-button': typeof TableActionButtonViewer;
|
|
108
|
+
'priority-text': typeof PriorityTextViewer;
|
|
109
|
+
'status-text': typeof StatusTextViewer;
|
|
110
|
+
theme: typeof ThemeViewer;
|
|
111
|
+
'itfs-path': typeof ItfsPathViewer;
|
|
112
|
+
'deliverable-review': typeof DeliverableReviewViewer;
|
|
113
|
+
'rich-text': typeof RichTextViewer;
|
|
114
|
+
};
|