@veltra/sheet 2.4.0 → 2.5.1

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 (147) hide show
  1. package/dist/components/sheet/formula-bar.js +50 -7
  2. package/dist/components/sheet/style2.css +2 -2
  3. package/dist/index.d.ts +2 -19
  4. package/dist/index.js +2 -15
  5. package/dist/types/index.d.ts +1 -3
  6. package/package.json +5 -6
  7. package/src/components/sheet/__test__/formula-bar.test.ts +29 -0
  8. package/src/components/sheet/formula-bar.vue +67 -6
  9. package/src/components/sheet/style.scss +1 -1
  10. package/src/index.ts +1 -27
  11. package/src/types/index.ts +0 -2
  12. package/dist/components/report/binding-badge.js +0 -118
  13. package/dist/components/report/designer/cell-coords.js +0 -46
  14. package/dist/components/report/designer/col-widths.js +0 -29
  15. package/dist/components/report/designer/conditional-rules/helpers.js +0 -139
  16. package/dist/components/report/designer/drill-dialog.js +0 -258
  17. package/dist/components/report/designer/drop-highlight-overlay.js +0 -76
  18. package/dist/components/report/designer/float-panel.js +0 -434
  19. package/dist/components/report/designer/role.js +0 -17
  20. package/dist/components/report/designer/rule-preview.js +0 -33
  21. package/dist/components/report/designer/rule-row.js +0 -253
  22. package/dist/components/report/designer/rules-dialog.js +0 -118
  23. package/dist/components/report/designer/topology-overlay.js +0 -122
  24. package/dist/components/report/designer/topology.js +0 -64
  25. package/dist/components/report/designer/use-grid-overlay.js +0 -75
  26. package/dist/components/report/designer-hub.js +0 -177
  27. package/dist/components/report/field-panel-helpers.js +0 -33
  28. package/dist/components/report/field-panel.js +0 -132
  29. package/dist/components/report/filter-bar.js +0 -74
  30. package/dist/components/report/hub-connection-form.js +0 -145
  31. package/dist/components/report/hub-dataset-editor.js +0 -409
  32. package/dist/components/report/preview-grid-size.js +0 -32
  33. package/dist/components/report/print.js +0 -39
  34. package/dist/components/report/report-designer.js +0 -428
  35. package/dist/components/report/report-viewer.js +0 -253
  36. package/dist/components/report/style.d.ts +0 -17
  37. package/dist/components/report/style.js +0 -18
  38. package/dist/components/report/style2.css +0 -965
  39. package/dist/components/report/use-report-designer.js +0 -387
  40. package/dist/components/report/use-report-viewer.js +0 -140
  41. package/dist/report/binding.d.ts +0 -83
  42. package/dist/report/binding.js +0 -334
  43. package/dist/report/connector.d.ts +0 -66
  44. package/dist/report/connector.js +0 -159
  45. package/dist/report/drill.d.ts +0 -48
  46. package/dist/report/drill.js +0 -78
  47. package/dist/report/export-xlsx.d.ts +0 -13
  48. package/dist/report/export-xlsx.js +0 -13
  49. package/dist/report/filter-bar.d.ts +0 -10
  50. package/dist/report/filter-bar.js +0 -31
  51. package/dist/report/index.d.ts +0 -14
  52. package/dist/report/params.d.ts +0 -13
  53. package/dist/report/params.js +0 -61
  54. package/dist/report/print.d.ts +0 -23
  55. package/dist/report/print.js +0 -197
  56. package/dist/report/render/aggregate.js +0 -193
  57. package/dist/report/render/builder.d.ts +0 -12
  58. package/dist/report/render/builder.js +0 -139
  59. package/dist/report/render/coordinate.d.ts +0 -25
  60. package/dist/report/render/coordinate.js +0 -733
  61. package/dist/report/render/index.d.ts +0 -14
  62. package/dist/report/render/index.js +0 -21
  63. package/dist/report/render/style-resolver.js +0 -50
  64. package/dist/report/render/template-index.d.ts +0 -24
  65. package/dist/report/render/template-index.js +0 -137
  66. package/dist/report/rules/evaluate.d.ts +0 -25
  67. package/dist/report/rules/evaluate.js +0 -82
  68. package/dist/report/rules/index.d.ts +0 -2
  69. package/dist/report/template.d.ts +0 -63
  70. package/dist/report/template.js +0 -83
  71. package/dist/report/types.d.ts +0 -103
  72. package/dist/types/report-designer.d.ts +0 -51
  73. package/dist/types/report-viewer.d.ts +0 -57
  74. package/src/components/report/__test__/binding-badge.test.ts +0 -92
  75. package/src/components/report/__test__/conditional-rules-helpers.test.ts +0 -88
  76. package/src/components/report/__test__/field-panel-helpers.test.ts +0 -65
  77. package/src/components/report/__test__/float-panel-position.test.ts +0 -45
  78. package/src/components/report/__test__/preview-grid-size.test.ts +0 -63
  79. package/src/components/report/__test__/report-designer.test.ts +0 -559
  80. package/src/components/report/__test__/report-drill.test.ts +0 -692
  81. package/src/components/report/__test__/report-viewer.test.ts +0 -400
  82. package/src/components/report/__test__/topology.test.ts +0 -143
  83. package/src/components/report/__test__/use-report-designer.test.ts +0 -804
  84. package/src/components/report/binding-badge.ts +0 -122
  85. package/src/components/report/designer/cell-coords.ts +0 -95
  86. package/src/components/report/designer/col-widths.ts +0 -56
  87. package/src/components/report/designer/conditional-rules/helpers.ts +0 -189
  88. package/src/components/report/designer/drill-dialog.vue +0 -245
  89. package/src/components/report/designer/drop-highlight-overlay.vue +0 -75
  90. package/src/components/report/designer/float-panel.vue +0 -444
  91. package/src/components/report/designer/role.ts +0 -32
  92. package/src/components/report/designer/rule-preview.vue +0 -40
  93. package/src/components/report/designer/rule-row.vue +0 -252
  94. package/src/components/report/designer/rules-dialog.vue +0 -110
  95. package/src/components/report/designer/topology-overlay.vue +0 -128
  96. package/src/components/report/designer/topology.ts +0 -124
  97. package/src/components/report/designer/use-grid-overlay.ts +0 -114
  98. package/src/components/report/designer-hub.vue +0 -198
  99. package/src/components/report/field-panel-helpers.ts +0 -44
  100. package/src/components/report/field-panel.vue +0 -136
  101. package/src/components/report/filter-bar.vue +0 -77
  102. package/src/components/report/hub-connection-form.vue +0 -124
  103. package/src/components/report/hub-dataset-editor.vue +0 -387
  104. package/src/components/report/index.ts +0 -2
  105. package/src/components/report/preview-grid-size.ts +0 -33
  106. package/src/components/report/print.ts +0 -44
  107. package/src/components/report/report-designer.vue +0 -454
  108. package/src/components/report/report-viewer.vue +0 -289
  109. package/src/components/report/style-designer.scss +0 -653
  110. package/src/components/report/style-hub.scss +0 -292
  111. package/src/components/report/style-viewer.scss +0 -144
  112. package/src/components/report/style.scss +0 -3
  113. package/src/components/report/style.ts +0 -20
  114. package/src/components/report/use-report-designer.ts +0 -603
  115. package/src/components/report/use-report-viewer.ts +0 -227
  116. package/src/report/__test__/binding.test.ts +0 -320
  117. package/src/report/__test__/connector.test.ts +0 -239
  118. package/src/report/__test__/drill.test.ts +0 -194
  119. package/src/report/__test__/export-xlsx.test.ts +0 -96
  120. package/src/report/__test__/filter-bar.test.ts +0 -58
  121. package/src/report/__test__/params.test.ts +0 -156
  122. package/src/report/__test__/print.test.ts +0 -170
  123. package/src/report/__test__/render.test.ts +0 -856
  124. package/src/report/__test__/rules.test.ts +0 -131
  125. package/src/report/__test__/template.test.ts +0 -366
  126. package/src/report/binding.ts +0 -474
  127. package/src/report/connector.ts +0 -206
  128. package/src/report/drill.ts +0 -112
  129. package/src/report/export-xlsx.ts +0 -15
  130. package/src/report/filter-bar.ts +0 -36
  131. package/src/report/index.ts +0 -16
  132. package/src/report/params.ts +0 -96
  133. package/src/report/print.ts +0 -234
  134. package/src/report/render/__test__/aggregate.test.ts +0 -16
  135. package/src/report/render/__test__/coordinate.test.ts +0 -405
  136. package/src/report/render/aggregate.ts +0 -289
  137. package/src/report/render/builder.ts +0 -211
  138. package/src/report/render/coordinate.ts +0 -1239
  139. package/src/report/render/index.ts +0 -30
  140. package/src/report/render/style-resolver.ts +0 -68
  141. package/src/report/render/template-index.ts +0 -200
  142. package/src/report/rules/evaluate.ts +0 -113
  143. package/src/report/rules/index.ts +0 -7
  144. package/src/report/template.ts +0 -145
  145. package/src/report/types.ts +0 -116
  146. package/src/types/report-designer.ts +0 -55
  147. package/src/types/report-viewer.ts +0 -54
@@ -1,211 +0,0 @@
1
- import type {
2
- CellRange,
3
- CellSnapshotItem,
4
- CellType,
5
- CellValue,
6
- SheetSnapshot
7
- } from '@veltra/sheet-core'
8
- import { cellKey } from '@veltra/sheet-core'
9
-
10
- import type { ReportColWidthEntry } from '../export-xlsx'
11
- import type { ConditionalEvalContext } from '../rules'
12
- import type { DatasetRecords } from '../types'
13
- import { AggregateIndex, resolvePlacementRecord, resolvePlacementValue } from './aggregate'
14
- import type { ExpansionLayout, PhysicalPlacement } from './coordinate'
15
- import { physicalColSpan, physicalRowSpan } from './coordinate'
16
- import { StyleResolver } from './style-resolver'
17
- import type { TemplateIndex } from './template-index'
18
-
19
- function toCellValue(value: unknown): { v: CellValue; t?: CellType } {
20
- if (value === null || value === undefined) return { v: '' }
21
- if (typeof value === 'number' && !Number.isNaN(value)) return { v: value, t: 'n' }
22
- if (typeof value === 'boolean') return { v: value, t: 'b' }
23
- if (typeof value === 'string') return { v: value, t: 's' }
24
- if (value instanceof Date) return { v: value.toISOString().slice(0, 10), t: 's' }
25
- return { v: JSON.stringify(value), t: 's' }
26
- }
27
-
28
- function rangeCells(range: CellRange): Array<{ row: number; col: number }> {
29
- const cells: Array<{ row: number; col: number }> = []
30
- for (let row = range.start.row; row <= range.end.row; row++) {
31
- for (let col = range.start.col; col <= range.end.col; col++) {
32
- cells.push({ row, col })
33
- }
34
- }
35
- return cells
36
- }
37
-
38
- function placementSourceValue(
39
- placement: PhysicalPlacement,
40
- template: SheetSnapshot,
41
- index: TemplateIndex,
42
- data: DatasetRecords,
43
- aggregateIndex: AggregateIndex
44
- ): unknown {
45
- if (placement.binding) {
46
- return resolvePlacementValue(placement, index, data, aggregateIndex)
47
- }
48
- const staticCell = index.cellAt(placement.logical)
49
- return staticCell?.v
50
- }
51
-
52
- function colWidthSourceLogicalCol(placement: PhysicalPlacement): number {
53
- const binding = placement.binding
54
- if (binding?.colParent) {
55
- return binding.colParent.col
56
- }
57
- return placement.logical.col
58
- }
59
-
60
- /**
61
- * 将模板列宽映射到填充报表物理列:横向展开列继承列方向父格所在模板列宽。
62
- */
63
- export function mapFilledColWidths(
64
- templateColWidths: ReadonlyArray<ReportColWidthEntry>,
65
- layout: ExpansionLayout,
66
- _index: TemplateIndex
67
- ): ReportColWidthEntry[] {
68
- if (templateColWidths.length === 0 || layout.colCount === 0) return []
69
-
70
- const widthByTemplateCol = new Map<number, number>()
71
- for (const [col, width] of templateColWidths) {
72
- widthByTemplateCol.set(col, width)
73
- }
74
-
75
- const physicalWidths = new Map<number, number>()
76
- for (const placement of layout.placements) {
77
- const sourceCol = colWidthSourceLogicalCol(placement)
78
- const width = widthByTemplateCol.get(sourceCol)
79
- if (width === undefined) continue
80
-
81
- const startCol = placement.physical.start.col
82
- const endCol = placement.physical.end.col
83
- for (let col = startCol; col <= endCol; col++) {
84
- physicalWidths.set(col, width)
85
- }
86
- }
87
-
88
- return [...physicalWidths.entries()].sort((a, b) => a[0] - b[0])
89
- }
90
-
91
- function placementEvalContext(
92
- placement: PhysicalPlacement,
93
- value: unknown,
94
- template: SheetSnapshot,
95
- index: TemplateIndex,
96
- data: DatasetRecords,
97
- aggregateIndex: AggregateIndex
98
- ): ConditionalEvalContext {
99
- const binding = placement.binding
100
- return {
101
- cellValue: value,
102
- bindingField: binding?.field ?? '',
103
- record: binding ? resolvePlacementRecord(placement, index, data, aggregateIndex) : undefined
104
- }
105
- }
106
-
107
- function collectRowConditionalStyles(
108
- layout: ExpansionLayout,
109
- template: SheetSnapshot,
110
- index: TemplateIndex,
111
- data: DatasetRecords,
112
- styles: StyleResolver
113
- ): void {
114
- const aggregateIndex = new AggregateIndex(data)
115
-
116
- for (const placement of layout.placements) {
117
- const binding = placement.binding
118
- if (!binding?.conditionalRules?.some((rule) => rule.scope === 'row')) continue
119
-
120
- const value = placementSourceValue(placement, template, index, data, aggregateIndex)
121
- const ctx = placementEvalContext(placement, value, template, index, data, aggregateIndex)
122
-
123
- for (let row = placement.physical.start.row; row <= placement.physical.end.row; row++) {
124
- styles.collectRowStyle(row, ctx, binding.conditionalRules)
125
- }
126
- }
127
- }
128
-
129
- /** 由扩展坐标布局组装 Filled Report 快照 */
130
- export function buildFilledReport(
131
- template: SheetSnapshot,
132
- index: TemplateIndex,
133
- layout: ExpansionLayout,
134
- data: DatasetRecords
135
- ): SheetSnapshot {
136
- const styles = new StyleResolver(template)
137
- collectRowConditionalStyles(layout, template, index, data, styles)
138
-
139
- const aggregateIndex = new AggregateIndex(data)
140
- const cells: CellSnapshotItem[] = []
141
- const merges: CellRange[] = [...layout.mappedMerges]
142
- const mergeKeys = new Set(merges.map((m) => cellKey(m.start)))
143
-
144
- const pushMerge = (range: CellRange): void => {
145
- const key = cellKey(range.start)
146
- if (mergeKeys.has(key)) return
147
- mergeKeys.add(key)
148
- merges.push(range)
149
- }
150
-
151
- const resolveStyleId = (
152
- placement: PhysicalPlacement,
153
- templateRow: number,
154
- templateCol: number,
155
- value: unknown,
156
- physicalRow: number
157
- ): number | undefined => {
158
- const binding = placement.binding
159
- const ctx = placementEvalContext(placement, value, template, index, data, aggregateIndex)
160
- const baseStyleId = binding
161
- ? styles.resolveCell(templateRow, templateCol, ctx, binding.conditionalRules)
162
- : styles.resolveStatic(templateRow, templateCol)
163
- return styles.mergeRowStyle(baseStyleId, physicalRow)
164
- }
165
-
166
- for (const placement of layout.placements) {
167
- const value = placementSourceValue(placement, template, index, data, aggregateIndex)
168
- const { row: templateRow, col: templateCol } = placement.logical
169
-
170
- const rowSpan = physicalRowSpan(placement)
171
- const colSpan = physicalColSpan(placement)
172
- const shouldMerge = placement.mergeSpan && (rowSpan > 1 || colSpan > 1)
173
-
174
- if (shouldMerge) {
175
- const item: CellSnapshotItem = {
176
- row: placement.physical.start.row,
177
- col: placement.physical.start.col,
178
- ...toCellValue(value)
179
- }
180
- const styleId = resolveStyleId(
181
- placement,
182
- templateRow,
183
- templateCol,
184
- value,
185
- placement.physical.start.row
186
- )
187
- if (styleId !== undefined) item.s = styleId
188
- cells.push(item)
189
- if (rowSpan > 1 || colSpan > 1) {
190
- pushMerge(placement.physical)
191
- }
192
- continue
193
- }
194
-
195
- for (const pos of rangeCells(placement.physical)) {
196
- const item: CellSnapshotItem = { row: pos.row, col: pos.col, ...toCellValue(value) }
197
- const styleId = resolveStyleId(placement, templateRow, templateCol, value, pos.row)
198
- if (styleId !== undefined) item.s = styleId
199
- cells.push(item)
200
- }
201
- }
202
-
203
- return {
204
- cells,
205
- styles: styles.snapshot(),
206
- merges,
207
- frozen: template.frozen,
208
- rows: layout.rowCount,
209
- cols: Math.max(layout.colCount, template.cols)
210
- }
211
- }