@veltra/sheet 2.3.4 → 2.5.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.
Files changed (129) hide show
  1. package/dist/index.d.ts +2 -17
  2. package/dist/index.js +2 -13
  3. package/dist/types/index.d.ts +1 -3
  4. package/package.json +5 -6
  5. package/src/index.ts +1 -27
  6. package/src/types/index.ts +0 -2
  7. package/dist/components/report/binding-badge.js +0 -112
  8. package/dist/components/report/designer/cell-coords.js +0 -46
  9. package/dist/components/report/designer/col-widths.js +0 -29
  10. package/dist/components/report/designer/conditional-rules/helpers.js +0 -139
  11. package/dist/components/report/designer/drop-highlight-overlay.js +0 -76
  12. package/dist/components/report/designer/float-panel.js +0 -422
  13. package/dist/components/report/designer/role.js +0 -17
  14. package/dist/components/report/designer/rule-preview.js +0 -33
  15. package/dist/components/report/designer/rule-row.js +0 -253
  16. package/dist/components/report/designer/rules-dialog.js +0 -118
  17. package/dist/components/report/designer/topology-overlay.js +0 -122
  18. package/dist/components/report/designer/topology.js +0 -64
  19. package/dist/components/report/designer/use-grid-overlay.js +0 -75
  20. package/dist/components/report/designer-hub.js +0 -177
  21. package/dist/components/report/field-panel-helpers.js +0 -33
  22. package/dist/components/report/field-panel.js +0 -132
  23. package/dist/components/report/filter-bar.js +0 -74
  24. package/dist/components/report/hub-connection-form.js +0 -145
  25. package/dist/components/report/hub-dataset-editor.js +0 -409
  26. package/dist/components/report/preview-grid-size.js +0 -32
  27. package/dist/components/report/report-designer.js +0 -393
  28. package/dist/components/report/report-viewer.js +0 -124
  29. package/dist/components/report/style.d.ts +0 -17
  30. package/dist/components/report/style.js +0 -18
  31. package/dist/components/report/style2.css +0 -874
  32. package/dist/components/report/use-report-designer.js +0 -386
  33. package/dist/components/report/use-report-viewer.js +0 -55
  34. package/dist/report/binding.d.ts +0 -83
  35. package/dist/report/binding.js +0 -334
  36. package/dist/report/connector.d.ts +0 -66
  37. package/dist/report/connector.js +0 -159
  38. package/dist/report/export-xlsx.d.ts +0 -13
  39. package/dist/report/export-xlsx.js +0 -13
  40. package/dist/report/filter-bar.d.ts +0 -10
  41. package/dist/report/filter-bar.js +0 -31
  42. package/dist/report/index.d.ts +0 -12
  43. package/dist/report/params.d.ts +0 -13
  44. package/dist/report/params.js +0 -61
  45. package/dist/report/render/aggregate.js +0 -169
  46. package/dist/report/render/builder.d.ts +0 -12
  47. package/dist/report/render/builder.js +0 -139
  48. package/dist/report/render/coordinate.d.ts +0 -25
  49. package/dist/report/render/coordinate.js +0 -733
  50. package/dist/report/render/index.d.ts +0 -14
  51. package/dist/report/render/index.js +0 -21
  52. package/dist/report/render/style-resolver.js +0 -50
  53. package/dist/report/render/template-index.d.ts +0 -24
  54. package/dist/report/render/template-index.js +0 -137
  55. package/dist/report/rules/evaluate.d.ts +0 -25
  56. package/dist/report/rules/evaluate.js +0 -82
  57. package/dist/report/rules/index.d.ts +0 -2
  58. package/dist/report/template.d.ts +0 -63
  59. package/dist/report/template.js +0 -83
  60. package/dist/report/types.d.ts +0 -85
  61. package/dist/types/report-designer.d.ts +0 -38
  62. package/dist/types/report-viewer.d.ts +0 -38
  63. package/src/components/report/__test__/binding-badge.test.ts +0 -92
  64. package/src/components/report/__test__/conditional-rules-helpers.test.ts +0 -88
  65. package/src/components/report/__test__/field-panel-helpers.test.ts +0 -65
  66. package/src/components/report/__test__/float-panel-position.test.ts +0 -45
  67. package/src/components/report/__test__/preview-grid-size.test.ts +0 -63
  68. package/src/components/report/__test__/report-designer.test.ts +0 -464
  69. package/src/components/report/__test__/report-viewer.test.ts +0 -357
  70. package/src/components/report/__test__/topology.test.ts +0 -143
  71. package/src/components/report/__test__/use-report-designer.test.ts +0 -697
  72. package/src/components/report/binding-badge.ts +0 -117
  73. package/src/components/report/designer/cell-coords.ts +0 -95
  74. package/src/components/report/designer/col-widths.ts +0 -56
  75. package/src/components/report/designer/conditional-rules/helpers.ts +0 -189
  76. package/src/components/report/designer/drop-highlight-overlay.vue +0 -75
  77. package/src/components/report/designer/float-panel.vue +0 -432
  78. package/src/components/report/designer/role.ts +0 -32
  79. package/src/components/report/designer/rule-preview.vue +0 -40
  80. package/src/components/report/designer/rule-row.vue +0 -252
  81. package/src/components/report/designer/rules-dialog.vue +0 -110
  82. package/src/components/report/designer/topology-overlay.vue +0 -128
  83. package/src/components/report/designer/topology.ts +0 -124
  84. package/src/components/report/designer/use-grid-overlay.ts +0 -114
  85. package/src/components/report/designer-hub.vue +0 -198
  86. package/src/components/report/field-panel-helpers.ts +0 -44
  87. package/src/components/report/field-panel.vue +0 -136
  88. package/src/components/report/filter-bar.vue +0 -77
  89. package/src/components/report/hub-connection-form.vue +0 -124
  90. package/src/components/report/hub-dataset-editor.vue +0 -387
  91. package/src/components/report/index.ts +0 -2
  92. package/src/components/report/preview-grid-size.ts +0 -33
  93. package/src/components/report/report-designer.vue +0 -421
  94. package/src/components/report/report-viewer.vue +0 -136
  95. package/src/components/report/style-designer.scss +0 -587
  96. package/src/components/report/style-hub.scss +0 -292
  97. package/src/components/report/style-viewer.scss +0 -104
  98. package/src/components/report/style.scss +0 -3
  99. package/src/components/report/style.ts +0 -20
  100. package/src/components/report/use-report-designer.ts +0 -602
  101. package/src/components/report/use-report-viewer.ts +0 -88
  102. package/src/report/__test__/binding.test.ts +0 -320
  103. package/src/report/__test__/connector.test.ts +0 -239
  104. package/src/report/__test__/export-xlsx.test.ts +0 -96
  105. package/src/report/__test__/filter-bar.test.ts +0 -58
  106. package/src/report/__test__/params.test.ts +0 -156
  107. package/src/report/__test__/render.test.ts +0 -856
  108. package/src/report/__test__/rules.test.ts +0 -131
  109. package/src/report/__test__/template.test.ts +0 -366
  110. package/src/report/binding.ts +0 -474
  111. package/src/report/connector.ts +0 -206
  112. package/src/report/export-xlsx.ts +0 -15
  113. package/src/report/filter-bar.ts +0 -36
  114. package/src/report/index.ts +0 -13
  115. package/src/report/params.ts +0 -96
  116. package/src/report/render/__test__/aggregate.test.ts +0 -16
  117. package/src/report/render/__test__/coordinate.test.ts +0 -405
  118. package/src/report/render/aggregate.ts +0 -261
  119. package/src/report/render/builder.ts +0 -211
  120. package/src/report/render/coordinate.ts +0 -1239
  121. package/src/report/render/index.ts +0 -30
  122. package/src/report/render/style-resolver.ts +0 -68
  123. package/src/report/render/template-index.ts +0 -200
  124. package/src/report/rules/evaluate.ts +0 -113
  125. package/src/report/rules/index.ts +0 -7
  126. package/src/report/template.ts +0 -145
  127. package/src/report/types.ts +0 -96
  128. package/src/types/report-designer.ts +0 -38
  129. package/src/types/report-viewer.ts +0 -37
package/dist/index.d.ts CHANGED
@@ -1,21 +1,6 @@
1
- import _sfc_main$2 from "./components/sheet/sheet.js";
2
- import _sfc_main$1 from "./components/report/report-viewer.js";
3
- import _sfc_main from "./components/report/report-designer.js";
1
+ import _sfc_main from "./components/sheet/sheet.js";
4
2
  import { SheetContext, createSheetContext } from "./tools/context.js";
5
3
  import { SheetTool, SheetToolGroup, SheetToolPopupType, defaultToolRegistry, registerTool, unregisterTool } from "./tools/registry.js";
6
4
  import { SheetEmits, SheetExposed, SheetProps, _SheetExposed } from "./types/sheet.js";
7
- import { ConditionalOperator, ConditionalRule, DatasetCatalogItem, DatasetField, DatasetRecords, ParamValues, QueryParamDef, QueryParamOption, QueryParamType, ReportAggregate, ReportBinding, ReportExpand, ReportPreset, ReportSort } from "./report/types.js";
8
- import { InferParentOptions, ListParentCandidateOptions, REPORT_META_NAMESPACE, applyReportPreset, createReportBinding, formatBindingPlaceholder, formatBindingPlaceholderParts, formatCellAddress, formatParentCandidateLabel, inferColParentCandidate, inferDropPreset, inferParentsForPreset, inferReportPreset, inferRowParentCandidate, isColGroupBinding, isExpansionBandCol, isExpansionBandRow, isHorizontalExpandBinding, isReductionAggregate, isRowGroupBinding, isVerticalExpandBinding, listColParentCandidates, listRowParentCandidates, parseCellAddress, prefersGroupParent, presetBindingPatch, presetStillApplies, setBindingCatalog } from "./report/binding.js";
9
- import { ConditionalEvalContext, evaluateCondition, evaluateConditionalStyle, resolveRuleCompareValue, toComparableNumber } from "./report/rules/evaluate.js";
10
- import { buildParamDefs, extractParamIds, resolveBoundDatasetParams } from "./report/params.js";
11
- import { ReportColWidthEntry, exportFilledReportXlsx } from "./report/export-xlsx.js";
12
- import { mapFilledColWidths } from "./report/render/builder.js";
13
- import { renderReport, resolveFilledColWidths } from "./report/render/index.js";
14
- import { ConnectionType, ConnectorError, CreateHttpConnectorOptions, DEFAULT_CONNECTION_PORTS, DataConnection, DataConnector, QueryResult, Result, createHttpConnector, resolvePortOnTypeChange } from "./report/connector.js";
15
- import { IncompatibleTemplateVersionError, REPORT_TEMPLATE_VERSION, ReportDatasetDef, ReportTemplate, assertCompatibleTemplateVersion, createReportTemplate, fetchTemplateRecords, getBoundDatasetIds, getTemplateDatasets, resolveParamDefaults, resolveTemplateParams } from "./report/template.js";
16
- import { parseDateRangeValue, patchParamValues, resolveNumberParamValue } from "./report/filter-bar.js";
17
- import "./report/index.js";
18
- import { ReportViewerExposed, ReportViewerProps, _ReportViewerExposed } from "./types/report-viewer.js";
19
- import { ReportDesignerEmits, ReportDesignerExposed, ReportDesignerProps, _ReportDesignerExposed } from "./types/report-designer.js";
20
5
  import "./types/index.js";
21
- export { type ConditionalEvalContext, ConditionalOperator, ConditionalRule, ConnectionType, ConnectorError, CreateHttpConnectorOptions, DEFAULT_CONNECTION_PORTS, DataConnection, DataConnector, DatasetCatalogItem, DatasetField, DatasetRecords, IncompatibleTemplateVersionError, InferParentOptions, ListParentCandidateOptions, ParamValues, QueryParamDef, QueryParamOption, QueryParamType, QueryResult, REPORT_META_NAMESPACE, REPORT_TEMPLATE_VERSION, ReportAggregate, ReportBinding, ReportColWidthEntry, ReportDatasetDef, type ReportDesignerEmits, type ReportDesignerExposed, type ReportDesignerProps, ReportExpand, ReportPreset, ReportSort, ReportTemplate, type ReportViewerExposed, type ReportViewerProps, Result, type SheetContext, type SheetEmits, type SheetExposed, type SheetProps, type SheetTool, type SheetToolGroup, type SheetToolPopupType, _sfc_main as UReportDesigner, _sfc_main$1 as UReportViewer, _sfc_main$2 as USheet, type _ReportDesignerExposed, type _ReportViewerExposed, type _SheetExposed, applyReportPreset, assertCompatibleTemplateVersion, buildParamDefs, createHttpConnector, createReportBinding, createReportTemplate, createSheetContext, defaultToolRegistry, evaluateCondition, evaluateConditionalStyle, exportFilledReportXlsx, extractParamIds, fetchTemplateRecords, formatBindingPlaceholder, formatBindingPlaceholderParts, formatCellAddress, formatParentCandidateLabel, getBoundDatasetIds, getTemplateDatasets, inferColParentCandidate, inferDropPreset, inferParentsForPreset, inferReportPreset, inferRowParentCandidate, isColGroupBinding, isExpansionBandCol, isExpansionBandRow, isHorizontalExpandBinding, isReductionAggregate, isRowGroupBinding, isVerticalExpandBinding, listColParentCandidates, listRowParentCandidates, mapFilledColWidths, parseCellAddress, parseDateRangeValue, patchParamValues, prefersGroupParent, presetBindingPatch, presetStillApplies, registerTool, renderReport, resolveBoundDatasetParams, resolveFilledColWidths, resolveNumberParamValue, resolveParamDefaults, resolvePortOnTypeChange, resolveRuleCompareValue, resolveTemplateParams, setBindingCatalog, toComparableNumber, unregisterTool };
6
+ export { type SheetContext, type SheetEmits, type SheetExposed, type SheetProps, type SheetTool, type SheetToolGroup, type SheetToolPopupType, _sfc_main as USheet, type _SheetExposed, createSheetContext, defaultToolRegistry, registerTool, unregisterTool };
package/dist/index.js CHANGED
@@ -1,16 +1,5 @@
1
1
  import { defaultToolRegistry, registerTool, unregisterTool } from "./tools/registry.js";
2
2
  import "./tools/builtin.js";
3
3
  import { createSheetContext } from "./tools/context.js";
4
- import _sfc_main$2 from "./components/sheet/sheet.js";
5
- import { exportFilledReportXlsx } from "./report/export-xlsx.js";
6
- import { parseDateRangeValue, patchParamValues, resolveNumberParamValue } from "./report/filter-bar.js";
7
- import { REPORT_META_NAMESPACE, applyReportPreset, createReportBinding, formatBindingPlaceholder, formatBindingPlaceholderParts, formatCellAddress, formatParentCandidateLabel, inferColParentCandidate, inferDropPreset, inferParentsForPreset, inferReportPreset, inferRowParentCandidate, isColGroupBinding, isExpansionBandCol, isExpansionBandRow, isHorizontalExpandBinding, isReductionAggregate, isRowGroupBinding, isVerticalExpandBinding, listColParentCandidates, listRowParentCandidates, parseCellAddress, prefersGroupParent, presetBindingPatch, presetStillApplies, setBindingCatalog } from "./report/binding.js";
8
- import { evaluateCondition, evaluateConditionalStyle, resolveRuleCompareValue, toComparableNumber } from "./report/rules/evaluate.js";
9
- import { mapFilledColWidths } from "./report/render/builder.js";
10
- import { renderReport, resolveFilledColWidths } from "./report/render/index.js";
11
- import { buildParamDefs, extractParamIds, resolveBoundDatasetParams } from "./report/params.js";
12
- import { IncompatibleTemplateVersionError, REPORT_TEMPLATE_VERSION, assertCompatibleTemplateVersion, createReportTemplate, fetchTemplateRecords, getBoundDatasetIds, getTemplateDatasets, resolveParamDefaults, resolveTemplateParams } from "./report/template.js";
13
- import _sfc_main$1 from "./components/report/report-viewer.js";
14
- import { DEFAULT_CONNECTION_PORTS, createHttpConnector, resolvePortOnTypeChange } from "./report/connector.js";
15
- import _sfc_main from "./components/report/report-designer.js";
16
- export { DEFAULT_CONNECTION_PORTS, IncompatibleTemplateVersionError, REPORT_META_NAMESPACE, REPORT_TEMPLATE_VERSION, _sfc_main as UReportDesigner, _sfc_main$1 as UReportViewer, _sfc_main$2 as USheet, applyReportPreset, assertCompatibleTemplateVersion, buildParamDefs, createHttpConnector, createReportBinding, createReportTemplate, createSheetContext, defaultToolRegistry, evaluateCondition, evaluateConditionalStyle, exportFilledReportXlsx, extractParamIds, fetchTemplateRecords, formatBindingPlaceholder, formatBindingPlaceholderParts, formatCellAddress, formatParentCandidateLabel, getBoundDatasetIds, getTemplateDatasets, inferColParentCandidate, inferDropPreset, inferParentsForPreset, inferReportPreset, inferRowParentCandidate, isColGroupBinding, isExpansionBandCol, isExpansionBandRow, isHorizontalExpandBinding, isReductionAggregate, isRowGroupBinding, isVerticalExpandBinding, listColParentCandidates, listRowParentCandidates, mapFilledColWidths, parseCellAddress, parseDateRangeValue, patchParamValues, prefersGroupParent, presetBindingPatch, presetStillApplies, registerTool, renderReport, resolveBoundDatasetParams, resolveFilledColWidths, resolveNumberParamValue, resolveParamDefaults, resolvePortOnTypeChange, resolveRuleCompareValue, resolveTemplateParams, setBindingCatalog, toComparableNumber, unregisterTool };
4
+ import _sfc_main from "./components/sheet/sheet.js";
5
+ export { _sfc_main as USheet, createSheetContext, defaultToolRegistry, registerTool, unregisterTool };
@@ -1,4 +1,2 @@
1
1
  import { SheetEmits, SheetExposed, SheetProps, _SheetExposed } from "./sheet.js";
2
- import { ReportViewerExposed, ReportViewerProps, _ReportViewerExposed } from "./report-viewer.js";
3
- import { ReportDesignerEmits, ReportDesignerExposed, ReportDesignerProps, _ReportDesignerExposed } from "./report-designer.js";
4
- export { ReportDesignerEmits, ReportDesignerExposed, ReportDesignerProps, ReportViewerExposed, ReportViewerProps, SheetEmits, SheetExposed, SheetProps, _ReportDesignerExposed, _ReportViewerExposed, _SheetExposed };
2
+ export { SheetEmits, SheetExposed, SheetProps, _SheetExposed };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veltra/sheet",
3
- "version": "2.3.4",
3
+ "version": "2.5.0",
4
4
  "homepage": "https://github.com/cabinet-fe/ultra-ui#readme",
5
5
  "bugs": {
6
6
  "url": "https://github.com/cabinet-fe/ultra-ui/issues"
@@ -36,12 +36,11 @@
36
36
  "peerDependencies": {
37
37
  "@cat-kit/core": ">=1.1.8",
38
38
  "@cat-kit/fe": ">=1.1.8",
39
- "@veltra/compositions": "^1.6.4",
40
- "@veltra/desktop": "^1.6.4",
39
+ "@veltra/desktop": "^1.6.5",
41
40
  "@veltra/icons": "^1.5.0",
42
- "@veltra/sheet-core": "^2.3.4",
43
- "@veltra/styles": "^1.6.4",
44
- "@veltra/utils": "^1.6.4",
41
+ "@veltra/sheet-core": "^2.5.0",
42
+ "@veltra/styles": "^1.6.5",
43
+ "@veltra/utils": "^1.6.5",
45
44
  "vue": ">=3.5.41"
46
45
  }
47
46
  }
package/src/index.ts CHANGED
@@ -1,13 +1,5 @@
1
- // 内置工具注册(undo/redo/合并/取消合并):随包入口完成,
2
- // 与 sheet-core command 的 default-registry 同构;深导入 sheet-core 子路径的
3
- // 无头场景不涉及
4
1
  import './tools/builtin'
5
2
 
6
- // 数据模型 / 渲染内核在 @veltra/sheet-core(独立发包)。本包**不做** re-export:
7
- // core API(Workbook / Sheet / 公式 / IO 等)一律 `from '@veltra/sheet-core'` 直导;
8
- // SheetGrid 走 `@veltra/sheet-core/grid`;白名单外符号深导入其子路径。
9
- // 本入口只导出 sheet 自有能力:组件、tools、组件类型。
10
-
11
3
  export { createSheetContext, type SheetContext } from './tools/context'
12
4
 
13
5
  export {
@@ -19,24 +11,6 @@ export {
19
11
  type SheetToolGroup
20
12
  } from './tools/registry'
21
13
 
22
- export {
23
- type SheetProps,
24
- type SheetEmits,
25
- type _SheetExposed,
26
- type SheetExposed,
27
- type ReportViewerProps,
28
- type _ReportViewerExposed,
29
- type ReportViewerExposed,
30
- type ReportDesignerProps,
31
- type ReportDesignerEmits,
32
- type _ReportDesignerExposed,
33
- type ReportDesignerExposed
34
- } from './types'
14
+ export { type SheetProps, type SheetEmits, type _SheetExposed, type SheetExposed } from './types'
35
15
 
36
16
  export { USheet } from './components/sheet'
37
-
38
- export { UReportViewer, UReportDesigner } from './components/report'
39
-
40
- // 报表纯 TS 内核:renderReport / binding / rules / params / DataConnector / Report Template /
41
- // Filter Bar 值规范化(结构见 packages/sheet/AGENTS.md)
42
- export * from './report'
@@ -1,3 +1 @@
1
1
  export * from './sheet'
2
- export * from './report-viewer'
3
- export * from './report-designer'
@@ -1,112 +0,0 @@
1
- import { formatBindingPlaceholderParts, inferReportPreset } from "../../report/binding.js";
2
- import { CustomLayout } from "@veltra/sheet-core/grid";
3
- //#region src/components/report/binding-badge.ts
4
- const REPORT_PRESET_BADGE_COLORS = {
5
- groupHeader: {
6
- cell: "#eef4ff",
7
- fg: "#2f54eb"
8
- },
9
- detail: {
10
- cell: "#effaf3",
11
- fg: "#1f9254"
12
- },
13
- subtotal: {
14
- cell: "#fff7e6",
15
- fg: "#d46b08"
16
- },
17
- grandTotal: {
18
- cell: "#fff1f0",
19
- fg: "#cf1322"
20
- },
21
- cross: {
22
- cell: "#f8f5ff",
23
- fg: "#5f3dc4"
24
- }
25
- };
26
- const CUSTOM_PRESET_BADGE_COLOR = {
27
- cell: "#f7f8fa",
28
- fg: "#495057"
29
- };
30
- /** 徽章字段标签文字色(中性深灰,与强调色形成层次) */
31
- const BADGE_LABEL_COLOR = "#343a40";
32
- function resolveBadgeColor(binding) {
33
- const preset = inferReportPreset(binding);
34
- return preset ? REPORT_PRESET_BADGE_COLORS[preset] : CUSTOM_PRESET_BADGE_COLOR;
35
- }
36
- /** 绑定格角色底色(走 resolveCellStyle,保留 VTable 默认边框绘制) */
37
- function createBindingBadgeStyleResolver(getBindingAt) {
38
- return (addr, base) => {
39
- const binding = getBindingAt(addr);
40
- if (!binding) return base;
41
- const { cell } = resolveBadgeColor(binding);
42
- return {
43
- ...base,
44
- fill: { color: cell }
45
- };
46
- };
47
- }
48
- /**
49
- * 单元格对齐 → 徽章容器 flex 布局映射(纯函数,便于单测):
50
- * `horizontal` left / 缺省 → 主轴起点;`vertical` middle / 缺省 → 交叉轴居中。
51
- */
52
- function badgeLayoutProps(align) {
53
- return {
54
- justifyContent: align?.horizontal === "center" ? "center" : align?.horizontal === "right" ? "flex-end" : "flex-start",
55
- alignItems: align?.vertical === "top" ? "flex-start" : align?.vertical === "bottom" ? "flex-end" : "center"
56
- };
57
- }
58
- /**
59
- * 绑定格富渲染徽章(ADR-0004 `resolveCellRenderer` 首个消费者):
60
- * 绑定单元格渲染为徽章布局(强调色聚合标签 + 中性色字段标签),
61
- * 布局跟随单元格水平 / 垂直对齐(经 `resolveAlign` 读有效样式);
62
- * 未绑定格返回 `undefined` 回落默认渲染。
63
- */
64
- function createBindingBadgeRenderer(getBindingAt, resolveLabel, resolveAlign) {
65
- return (addr) => {
66
- const binding = getBindingAt(addr);
67
- if (!binding) return void 0;
68
- const { fg } = resolveBadgeColor(binding);
69
- const { tag, label } = formatBindingPlaceholderParts(binding, resolveLabel);
70
- const { justifyContent, alignItems } = badgeLayoutProps(resolveAlign?.(addr));
71
- const rootContainer = new CustomLayout.Container({
72
- display: "flex",
73
- flexDirection: "row",
74
- justifyContent,
75
- alignItems
76
- });
77
- const tagEl = new CustomLayout.Tag({
78
- text: tag,
79
- textStyle: {
80
- fontSize: 10,
81
- fontWeight: 600,
82
- fill: "#ffffff"
83
- },
84
- panel: {
85
- visible: true,
86
- fill: fg,
87
- cornerRadius: 3
88
- },
89
- padding: [
90
- 1,
91
- 4,
92
- 1,
93
- 4
94
- ],
95
- marginLeft: 6,
96
- marginRight: 5
97
- });
98
- rootContainer.add(tagEl);
99
- rootContainer.add(new CustomLayout.Text({
100
- text: label,
101
- fontSize: 11,
102
- fontWeight: 500,
103
- fill: BADGE_LABEL_COLOR
104
- }));
105
- return {
106
- rootContainer,
107
- renderDefault: false
108
- };
109
- };
110
- }
111
- //#endregion
112
- export { REPORT_PRESET_BADGE_COLORS, badgeLayoutProps, createBindingBadgeRenderer, createBindingBadgeStyleResolver };
@@ -1,46 +0,0 @@
1
- function resolveGridOverlayLayout(host) {
2
- const gridEl = host.querySelector(".u-sheet__grid-instance");
3
- if (!gridEl) return null;
4
- const hostBox = host.getBoundingClientRect();
5
- const gridBox = gridEl.getBoundingClientRect();
6
- return {
7
- gridEl,
8
- layout: {
9
- offsetX: gridBox.left - hostBox.left,
10
- offsetY: gridBox.top - hostBox.top,
11
- viewW: gridEl.clientWidth,
12
- viewH: gridEl.clientHeight
13
- }
14
- };
15
- }
16
- /** 将屏幕坐标换算为网格落点地址(用于字段拖拽 bind) */
17
- function resolveGridDropAddress(grid, gridEl, clientX, clientY) {
18
- const rect = gridEl.getBoundingClientRect();
19
- return grid.hitTestSheetAddr(clientX - rect.left, clientY - rect.top) ?? null;
20
- }
21
- function getCellOverlayRect(grid, cell, layout) {
22
- const table = grid.getTable();
23
- let cellRect;
24
- try {
25
- cellRect = table.getCellRelativeRect(cell.col + 1, cell.row + 1);
26
- } catch {
27
- return null;
28
- }
29
- const left = layout.offsetX + cellRect.left;
30
- const top = layout.offsetY + cellRect.top;
31
- const right = layout.offsetX + cellRect.right;
32
- const bottom = layout.offsetY + cellRect.bottom;
33
- if (cellRect.bottom < 0 || cellRect.right < 0 || cellRect.top > layout.viewH || cellRect.left > layout.viewW) return null;
34
- return {
35
- left,
36
- top,
37
- right,
38
- bottom,
39
- width: right - left,
40
- height: bottom - top,
41
- centerX: (left + right) / 2,
42
- centerY: (top + bottom) / 2
43
- };
44
- }
45
- //#endregion
46
- export { getCellOverlayRect, resolveGridDropAddress, resolveGridOverlayLayout };
@@ -1,29 +0,0 @@
1
- //#region src/components/report/designer/col-widths.ts
2
- /** 行号列数(隐藏行头时为 0;与 GridCoords 探测一致) */
3
- function seriesNumberColCount(table) {
4
- const rowOffset = table.columnHeaderLevelCount;
5
- let col = 0;
6
- while (col < table.colCount && table.isSeriesNumber(col, rowOffset)) col++;
7
- return col;
8
- }
9
- /** 将模型列宽写入 VTable(模型 → grid 同步辅助) */
10
- function applyGridColWidths(grid, widths) {
11
- if (!grid) return;
12
- const table = grid.getTable();
13
- const colOffset = seriesNumberColCount(table);
14
- for (const [sheetCol, width] of widths) table.setColWidth(sheetCol + colOffset, width);
15
- }
16
- /** 把列宽条目写入 Sheet 模型(不进 undo,对称 setColWidth) */
17
- function applySheetColWidths(sheet, widths) {
18
- if (!sheet) return;
19
- for (const [col, width] of widths) sheet.setColWidth(col, width);
20
- }
21
- /** 从当前网格读取指定模型列宽度;网格未就绪时返回 null */
22
- function readGridColWidths(grid, cols) {
23
- if (!grid) return null;
24
- const table = grid.getTable();
25
- const colOffset = seriesNumberColCount(table);
26
- return cols.map((sheetCol) => [sheetCol, table.getColWidth(sheetCol + colOffset)]);
27
- }
28
- //#endregion
29
- export { applyGridColWidths, applySheetColWidths, readGridColWidths };
@@ -1,139 +0,0 @@
1
- //#region src/components/report/designer/conditional-rules/helpers.ts
2
- const OPERATOR_LABELS = {
3
- gt: "大于",
4
- gte: "大于等于",
5
- lt: "小于",
6
- lte: "小于等于",
7
- eq: "等于",
8
- between: "介于",
9
- contains: "包含"
10
- };
11
- const RULE_SCOPE_OPTIONS = [{
12
- value: "cell",
13
- label: "本格"
14
- }, {
15
- value: "row",
16
- label: "整行"
17
- }];
18
- /** 求值字段下拉:缺省项表示本格绑定字段 */
19
- function ruleEvalFieldOptions(bindingField, datasetFields) {
20
- return [{
21
- value: "",
22
- label: "本格字段"
23
- }, ...datasetFields.filter((field) => field.name !== bindingField).map((field) => ({
24
- value: field.name,
25
- label: field.label || field.name
26
- }))];
27
- }
28
- /** 按规则所选求值字段解析字段类型(运算符映射用) */
29
- function resolveEvalFieldType(rule, bindingField, datasetFields) {
30
- const fieldName = rule.field ?? bindingField;
31
- return datasetFields.find((field) => field.name === fieldName)?.type ?? "number";
32
- }
33
- const NUMERIC_OPERATORS = [
34
- "gt",
35
- "gte",
36
- "lt",
37
- "lte",
38
- "eq",
39
- "between"
40
- ];
41
- const STRING_OPERATORS = ["eq", "contains"];
42
- let draftIdSeq = 0;
43
- function nextDraftId() {
44
- draftIdSeq += 1;
45
- return `rule-${draftIdSeq}`;
46
- }
47
- /** 按字段类型返回可用运算符 */
48
- function operatorsForFieldType(fieldType) {
49
- return (fieldType === "string" ? STRING_OPERATORS : NUMERIC_OPERATORS).map((value) => ({
50
- value,
51
- label: OPERATOR_LABELS[value]
52
- }));
53
- }
54
- function isNumericFieldType(fieldType) {
55
- return fieldType === "number" || fieldType === "date";
56
- }
57
- function defaultRuleValue(operator, fieldType) {
58
- if (operator === "between") return isNumericFieldType(fieldType) ? [0, 100] : ["", ""];
59
- if (operator === "contains" || operator === "eq" && fieldType === "string") return "";
60
- return 0;
61
- }
62
- function defaultRuleStyle() {
63
- return {
64
- fill: { color: "#FEF3C7" },
65
- font: { color: "#B45309" }
66
- };
67
- }
68
- function createDraftItem(rule, fieldType = "number", _bindingField) {
69
- if (rule) return {
70
- id: nextDraftId(),
71
- rule: cloneRule(rule)
72
- };
73
- const operator = operatorsForFieldType(fieldType)[0]?.value ?? "eq";
74
- return {
75
- id: nextDraftId(),
76
- rule: {
77
- operator,
78
- value: defaultRuleValue(operator, fieldType),
79
- style: defaultRuleStyle()
80
- }
81
- };
82
- }
83
- function initDraftFromRules(rules, fieldType, bindingField) {
84
- if (rules.length === 0) return [];
85
- return rules.map((rule) => createDraftItem(rule, fieldType, bindingField));
86
- }
87
- function cloneRule(rule) {
88
- return {
89
- operator: rule.operator,
90
- value: cloneRuleValue(rule.value),
91
- field: rule.field,
92
- scope: rule.scope,
93
- style: {
94
- ...rule.style,
95
- fill: rule.style.fill ? { ...rule.style.fill } : void 0,
96
- font: rule.style.font ? { ...rule.style.font } : void 0
97
- }
98
- };
99
- }
100
- function cloneRuleValue(value) {
101
- if (Array.isArray(value)) return [...value];
102
- return value;
103
- }
104
- function cloneRulesFromDraft(items) {
105
- return items.map((item) => cloneRule(item.rule));
106
- }
107
- /** 运算符切换时重置比较值为合理缺省 */
108
- function coerceValueForOperator(operator, fieldType, current) {
109
- if (operator === "between") {
110
- if (Array.isArray(current) && current.length === 2) return [...current];
111
- return defaultRuleValue("between", fieldType);
112
- }
113
- if (operator === "contains") return typeof current === "string" ? current : "";
114
- if (isNumericFieldType(fieldType)) {
115
- const n = typeof current === "number" && Number.isFinite(current) ? current : Number(current);
116
- return Number.isFinite(n) ? n : 0;
117
- }
118
- return typeof current === "string" ? current : "";
119
- }
120
- function toDisplayString(value) {
121
- if (typeof value === "string") return value;
122
- if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") return String(value);
123
- return "";
124
- }
125
- function readBetweenValue(value, index, fieldType) {
126
- const raw = (Array.isArray(value) && value.length === 2 ? value : defaultRuleValue("between", fieldType))[index];
127
- if (isNumericFieldType(fieldType)) {
128
- const n = typeof raw === "number" ? raw : Number(raw);
129
- return Number.isFinite(n) ? n : 0;
130
- }
131
- return typeof raw === "string" ? raw : toDisplayString(raw);
132
- }
133
- function writeBetweenValue(value, index, next, fieldType) {
134
- const pair = [readBetweenValue(value, 0, fieldType), readBetweenValue(value, 1, fieldType)];
135
- pair[index] = next;
136
- return pair;
137
- }
138
- //#endregion
139
- export { OPERATOR_LABELS, RULE_SCOPE_OPTIONS, cloneRule, cloneRulesFromDraft, coerceValueForOperator, createDraftItem, defaultRuleStyle, defaultRuleValue, initDraftFromRules, isNumericFieldType, operatorsForFieldType, readBetweenValue, resolveEvalFieldType, ruleEvalFieldOptions, writeBetweenValue };
@@ -1,76 +0,0 @@
1
- import { readCellOverlayRect, useGridOverlaySync } from "./use-grid-overlay.js";
2
- import { computed, createCommentVNode, createElementBlock, defineComponent, normalizeClass, normalizeStyle, openBlock, ref, toDisplayString, toRef, unref } from "vue";
3
- import { bem } from "@veltra/utils";
4
- //#region src/components/report/designer/drop-highlight-overlay.vue
5
- const _sfc_main = /*@__PURE__*/ defineComponent({
6
- name: "UReportDropHighlightOverlay",
7
- __name: "drop-highlight-overlay",
8
- props: {
9
- cell: {},
10
- hostEl: {},
11
- getGrid: { type: Function },
12
- dragging: { type: Boolean },
13
- fallbackLabel: {}
14
- },
15
- setup(__props) {
16
- const props = __props;
17
- const cls = bem("report-drop-highlight");
18
- const hostEl = toRef(props, "hostEl");
19
- const rectLeft = ref(0);
20
- const rectTop = ref(0);
21
- const rectWidth = ref(0);
22
- const rectHeight = ref(0);
23
- const inView = ref(false);
24
- const visible = computed(() => !!props.cell && inView.value);
25
- const showFallback = computed(() => props.dragging && !props.cell);
26
- const highlightStyle = computed(() => ({
27
- left: `${rectLeft.value}px`,
28
- top: `${rectTop.value}px`,
29
- width: `${rectWidth.value}px`,
30
- height: `${rectHeight.value}px`
31
- }));
32
- function updateHighlight() {
33
- const cell = props.cell;
34
- const host = props.hostEl;
35
- if (!cell || !host) {
36
- inView.value = false;
37
- return;
38
- }
39
- const rect = readCellOverlayRect(cell, host, props.getGrid);
40
- if (!rect) {
41
- inView.value = false;
42
- return;
43
- }
44
- inView.value = true;
45
- rectLeft.value = Math.round(rect.left);
46
- rectTop.value = Math.round(rect.top);
47
- rectWidth.value = Math.round(rect.width);
48
- rectHeight.value = Math.round(rect.height);
49
- }
50
- useGridOverlaySync({
51
- hostEl,
52
- getGrid: () => props.getGrid(),
53
- watchSources: () => [
54
- props.cell?.row,
55
- props.cell?.col,
56
- props.hostEl,
57
- props.dragging
58
- ],
59
- update: updateHighlight
60
- });
61
- return (_ctx, _cache) => {
62
- return __props.cell && visible.value ? (openBlock(), createElementBlock("div", {
63
- key: 0,
64
- class: normalizeClass(unref(cls).b),
65
- style: normalizeStyle(highlightStyle.value),
66
- "aria-hidden": "true"
67
- }, null, 6)) : showFallback.value ? (openBlock(), createElementBlock("div", {
68
- key: 1,
69
- class: normalizeClass(unref(cls).e("fallback")),
70
- role: "status"
71
- }, " 松开将绑定到当前选区 " + toDisplayString(__props.fallbackLabel), 3)) : createCommentVNode("v-if", true);
72
- };
73
- }
74
- });
75
- //#endregion
76
- export { _sfc_main as default };