@veltra/sheet 2.4.0 → 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 (142) hide show
  1. package/dist/index.d.ts +2 -19
  2. package/dist/index.js +2 -15
  3. package/dist/types/index.d.ts +1 -3
  4. package/package.json +2 -3
  5. package/src/index.ts +1 -27
  6. package/src/types/index.ts +0 -2
  7. package/dist/components/report/binding-badge.js +0 -118
  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/drill-dialog.js +0 -258
  12. package/dist/components/report/designer/drop-highlight-overlay.js +0 -76
  13. package/dist/components/report/designer/float-panel.js +0 -434
  14. package/dist/components/report/designer/role.js +0 -17
  15. package/dist/components/report/designer/rule-preview.js +0 -33
  16. package/dist/components/report/designer/rule-row.js +0 -253
  17. package/dist/components/report/designer/rules-dialog.js +0 -118
  18. package/dist/components/report/designer/topology-overlay.js +0 -122
  19. package/dist/components/report/designer/topology.js +0 -64
  20. package/dist/components/report/designer/use-grid-overlay.js +0 -75
  21. package/dist/components/report/designer-hub.js +0 -177
  22. package/dist/components/report/field-panel-helpers.js +0 -33
  23. package/dist/components/report/field-panel.js +0 -132
  24. package/dist/components/report/filter-bar.js +0 -74
  25. package/dist/components/report/hub-connection-form.js +0 -145
  26. package/dist/components/report/hub-dataset-editor.js +0 -409
  27. package/dist/components/report/preview-grid-size.js +0 -32
  28. package/dist/components/report/print.js +0 -39
  29. package/dist/components/report/report-designer.js +0 -428
  30. package/dist/components/report/report-viewer.js +0 -253
  31. package/dist/components/report/style.d.ts +0 -17
  32. package/dist/components/report/style.js +0 -18
  33. package/dist/components/report/style2.css +0 -965
  34. package/dist/components/report/use-report-designer.js +0 -387
  35. package/dist/components/report/use-report-viewer.js +0 -140
  36. package/dist/report/binding.d.ts +0 -83
  37. package/dist/report/binding.js +0 -334
  38. package/dist/report/connector.d.ts +0 -66
  39. package/dist/report/connector.js +0 -159
  40. package/dist/report/drill.d.ts +0 -48
  41. package/dist/report/drill.js +0 -78
  42. package/dist/report/export-xlsx.d.ts +0 -13
  43. package/dist/report/export-xlsx.js +0 -13
  44. package/dist/report/filter-bar.d.ts +0 -10
  45. package/dist/report/filter-bar.js +0 -31
  46. package/dist/report/index.d.ts +0 -14
  47. package/dist/report/params.d.ts +0 -13
  48. package/dist/report/params.js +0 -61
  49. package/dist/report/print.d.ts +0 -23
  50. package/dist/report/print.js +0 -197
  51. package/dist/report/render/aggregate.js +0 -193
  52. package/dist/report/render/builder.d.ts +0 -12
  53. package/dist/report/render/builder.js +0 -139
  54. package/dist/report/render/coordinate.d.ts +0 -25
  55. package/dist/report/render/coordinate.js +0 -733
  56. package/dist/report/render/index.d.ts +0 -14
  57. package/dist/report/render/index.js +0 -21
  58. package/dist/report/render/style-resolver.js +0 -50
  59. package/dist/report/render/template-index.d.ts +0 -24
  60. package/dist/report/render/template-index.js +0 -137
  61. package/dist/report/rules/evaluate.d.ts +0 -25
  62. package/dist/report/rules/evaluate.js +0 -82
  63. package/dist/report/rules/index.d.ts +0 -2
  64. package/dist/report/template.d.ts +0 -63
  65. package/dist/report/template.js +0 -83
  66. package/dist/report/types.d.ts +0 -103
  67. package/dist/types/report-designer.d.ts +0 -51
  68. package/dist/types/report-viewer.d.ts +0 -57
  69. package/src/components/report/__test__/binding-badge.test.ts +0 -92
  70. package/src/components/report/__test__/conditional-rules-helpers.test.ts +0 -88
  71. package/src/components/report/__test__/field-panel-helpers.test.ts +0 -65
  72. package/src/components/report/__test__/float-panel-position.test.ts +0 -45
  73. package/src/components/report/__test__/preview-grid-size.test.ts +0 -63
  74. package/src/components/report/__test__/report-designer.test.ts +0 -559
  75. package/src/components/report/__test__/report-drill.test.ts +0 -692
  76. package/src/components/report/__test__/report-viewer.test.ts +0 -400
  77. package/src/components/report/__test__/topology.test.ts +0 -143
  78. package/src/components/report/__test__/use-report-designer.test.ts +0 -804
  79. package/src/components/report/binding-badge.ts +0 -122
  80. package/src/components/report/designer/cell-coords.ts +0 -95
  81. package/src/components/report/designer/col-widths.ts +0 -56
  82. package/src/components/report/designer/conditional-rules/helpers.ts +0 -189
  83. package/src/components/report/designer/drill-dialog.vue +0 -245
  84. package/src/components/report/designer/drop-highlight-overlay.vue +0 -75
  85. package/src/components/report/designer/float-panel.vue +0 -444
  86. package/src/components/report/designer/role.ts +0 -32
  87. package/src/components/report/designer/rule-preview.vue +0 -40
  88. package/src/components/report/designer/rule-row.vue +0 -252
  89. package/src/components/report/designer/rules-dialog.vue +0 -110
  90. package/src/components/report/designer/topology-overlay.vue +0 -128
  91. package/src/components/report/designer/topology.ts +0 -124
  92. package/src/components/report/designer/use-grid-overlay.ts +0 -114
  93. package/src/components/report/designer-hub.vue +0 -198
  94. package/src/components/report/field-panel-helpers.ts +0 -44
  95. package/src/components/report/field-panel.vue +0 -136
  96. package/src/components/report/filter-bar.vue +0 -77
  97. package/src/components/report/hub-connection-form.vue +0 -124
  98. package/src/components/report/hub-dataset-editor.vue +0 -387
  99. package/src/components/report/index.ts +0 -2
  100. package/src/components/report/preview-grid-size.ts +0 -33
  101. package/src/components/report/print.ts +0 -44
  102. package/src/components/report/report-designer.vue +0 -454
  103. package/src/components/report/report-viewer.vue +0 -289
  104. package/src/components/report/style-designer.scss +0 -653
  105. package/src/components/report/style-hub.scss +0 -292
  106. package/src/components/report/style-viewer.scss +0 -144
  107. package/src/components/report/style.scss +0 -3
  108. package/src/components/report/style.ts +0 -20
  109. package/src/components/report/use-report-designer.ts +0 -603
  110. package/src/components/report/use-report-viewer.ts +0 -227
  111. package/src/report/__test__/binding.test.ts +0 -320
  112. package/src/report/__test__/connector.test.ts +0 -239
  113. package/src/report/__test__/drill.test.ts +0 -194
  114. package/src/report/__test__/export-xlsx.test.ts +0 -96
  115. package/src/report/__test__/filter-bar.test.ts +0 -58
  116. package/src/report/__test__/params.test.ts +0 -156
  117. package/src/report/__test__/print.test.ts +0 -170
  118. package/src/report/__test__/render.test.ts +0 -856
  119. package/src/report/__test__/rules.test.ts +0 -131
  120. package/src/report/__test__/template.test.ts +0 -366
  121. package/src/report/binding.ts +0 -474
  122. package/src/report/connector.ts +0 -206
  123. package/src/report/drill.ts +0 -112
  124. package/src/report/export-xlsx.ts +0 -15
  125. package/src/report/filter-bar.ts +0 -36
  126. package/src/report/index.ts +0 -16
  127. package/src/report/params.ts +0 -96
  128. package/src/report/print.ts +0 -234
  129. package/src/report/render/__test__/aggregate.test.ts +0 -16
  130. package/src/report/render/__test__/coordinate.test.ts +0 -405
  131. package/src/report/render/aggregate.ts +0 -289
  132. package/src/report/render/builder.ts +0 -211
  133. package/src/report/render/coordinate.ts +0 -1239
  134. package/src/report/render/index.ts +0 -30
  135. package/src/report/render/style-resolver.ts +0 -68
  136. package/src/report/render/template-index.ts +0 -200
  137. package/src/report/rules/evaluate.ts +0 -113
  138. package/src/report/rules/index.ts +0 -7
  139. package/src/report/template.ts +0 -145
  140. package/src/report/types.ts +0 -116
  141. package/src/types/report-designer.ts +0 -55
  142. package/src/types/report-viewer.ts +0 -54
package/dist/index.d.ts CHANGED
@@ -1,23 +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, ReportDrillConfig, ReportExpand, ReportPreset, ReportSort, ReportTemplateListItem } 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 { DrillHit, DrillStack, DrillStackLayer, ResolveReportTemplate, buildDrillHitMap, createDrillStack, currentDrillLayer, popDrillLayer, pushDrillLayer, resolveDrillParams } from "./report/drill.js";
18
- import { ReportPrintOptions, buildFilledReportPrintHtml } from "./report/print.js";
19
- import "./report/index.js";
20
- import { ReportViewerExposed, ReportViewerProps, _ReportViewerExposed } from "./types/report-viewer.js";
21
- import { ReportDesignerEmits, ReportDesignerExposed, ReportDesignerProps, _ReportDesignerExposed } from "./types/report-designer.js";
22
5
  import "./types/index.js";
23
- export { type ConditionalEvalContext, ConditionalOperator, ConditionalRule, ConnectionType, ConnectorError, CreateHttpConnectorOptions, DEFAULT_CONNECTION_PORTS, DataConnection, DataConnector, DatasetCatalogItem, DatasetField, DatasetRecords, DrillHit, DrillStack, DrillStackLayer, IncompatibleTemplateVersionError, InferParentOptions, ListParentCandidateOptions, ParamValues, QueryParamDef, QueryParamOption, QueryParamType, QueryResult, REPORT_META_NAMESPACE, REPORT_TEMPLATE_VERSION, ReportAggregate, ReportBinding, ReportColWidthEntry, ReportDatasetDef, type ReportDesignerEmits, type ReportDesignerExposed, type ReportDesignerProps, ReportDrillConfig, ReportExpand, ReportPreset, ReportPrintOptions, ReportSort, ReportTemplate, ReportTemplateListItem, type ReportViewerExposed, type ReportViewerProps, ResolveReportTemplate, 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, buildDrillHitMap, buildFilledReportPrintHtml, buildParamDefs, createDrillStack, createHttpConnector, createReportBinding, createReportTemplate, createSheetContext, currentDrillLayer, 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, popDrillLayer, prefersGroupParent, presetBindingPatch, presetStillApplies, pushDrillLayer, registerTool, renderReport, resolveBoundDatasetParams, resolveDrillParams, 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,18 +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 { buildFilledReportPrintHtml } from "./report/print.js";
7
- import { parseDateRangeValue, patchParamValues, resolveNumberParamValue } from "./report/filter-bar.js";
8
- 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";
9
- import { buildDrillHitMap, createDrillStack, currentDrillLayer, popDrillLayer, pushDrillLayer, resolveDrillParams } from "./report/drill.js";
10
- import { evaluateCondition, evaluateConditionalStyle, resolveRuleCompareValue, toComparableNumber } from "./report/rules/evaluate.js";
11
- import { mapFilledColWidths } from "./report/render/builder.js";
12
- import { renderReport, resolveFilledColWidths } from "./report/render/index.js";
13
- import { buildParamDefs, extractParamIds, resolveBoundDatasetParams } from "./report/params.js";
14
- import { IncompatibleTemplateVersionError, REPORT_TEMPLATE_VERSION, assertCompatibleTemplateVersion, createReportTemplate, fetchTemplateRecords, getBoundDatasetIds, getTemplateDatasets, resolveParamDefaults, resolveTemplateParams } from "./report/template.js";
15
- import _sfc_main$1 from "./components/report/report-viewer.js";
16
- import { DEFAULT_CONNECTION_PORTS, createHttpConnector, resolvePortOnTypeChange } from "./report/connector.js";
17
- import _sfc_main from "./components/report/report-designer.js";
18
- 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, buildDrillHitMap, buildFilledReportPrintHtml, buildParamDefs, createDrillStack, createHttpConnector, createReportBinding, createReportTemplate, createSheetContext, currentDrillLayer, 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, popDrillLayer, prefersGroupParent, presetBindingPatch, presetStillApplies, pushDrillLayer, registerTool, renderReport, resolveBoundDatasetParams, resolveDrillParams, 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.4.0",
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,10 +36,9 @@
36
36
  "peerDependencies": {
37
37
  "@cat-kit/core": ">=1.1.8",
38
38
  "@cat-kit/fe": ">=1.1.8",
39
- "@veltra/compositions": "^1.6.5",
40
39
  "@veltra/desktop": "^1.6.5",
41
40
  "@veltra/icons": "^1.5.0",
42
- "@veltra/sheet-core": "^2.4.0",
41
+ "@veltra/sheet-core": "^2.5.0",
43
42
  "@veltra/styles": "^1.6.5",
44
43
  "@veltra/utils": "^1.6.5",
45
44
  "vue": ">=3.5.41"
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,118 +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
- if (binding.drill) rootContainer.add(new CustomLayout.Text({
106
- text: " ↗",
107
- fontSize: 11,
108
- fontWeight: 700,
109
- fill: fg
110
- }));
111
- return {
112
- rootContainer,
113
- renderDefault: false
114
- };
115
- };
116
- }
117
- //#endregion
118
- 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 };