@veltra/sheet 2.1.1 → 2.2.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 (202) hide show
  1. package/dist/components/report/binding-badge.js +76 -0
  2. package/dist/components/report/designer/cell-coords.js +46 -0
  3. package/dist/components/report/designer/col-widths.js +15 -0
  4. package/dist/components/report/designer/conditional-rules/helpers.js +139 -0
  5. package/dist/components/report/designer/drop-highlight-overlay.js +76 -0
  6. package/dist/components/report/designer/float-panel.js +385 -0
  7. package/dist/components/report/designer/role.js +17 -0
  8. package/dist/components/report/designer/rule-preview.js +33 -0
  9. package/dist/components/report/designer/rule-row.js +269 -0
  10. package/dist/components/report/designer/rules-dialog.js +135 -0
  11. package/dist/components/report/designer/topology-overlay.js +122 -0
  12. package/dist/components/report/designer/topology.js +64 -0
  13. package/dist/components/report/designer/use-grid-overlay.js +75 -0
  14. package/dist/components/report/designer-hub.js +177 -0
  15. package/dist/components/report/field-panel-helpers.js +33 -0
  16. package/dist/components/report/field-panel.js +132 -0
  17. package/dist/components/report/filter-bar.js +74 -0
  18. package/dist/components/report/hub-connection-form.js +145 -0
  19. package/dist/components/report/hub-dataset-editor.js +394 -0
  20. package/dist/components/report/report-designer.js +343 -0
  21. package/dist/components/report/report-viewer.js +111 -0
  22. package/dist/components/report/style.d.ts +17 -0
  23. package/dist/components/report/style.js +18 -0
  24. package/dist/components/report/style2.css +869 -0
  25. package/dist/components/report/use-report-designer.js +360 -0
  26. package/dist/components/report/use-report-viewer.js +50 -0
  27. package/dist/{vue → components/sheet}/formula-bar.js +1 -1
  28. package/dist/{vue → components/sheet}/formula-suggest-list.js +1 -1
  29. package/dist/{vue → components/sheet}/import-file.js +1 -1
  30. package/dist/{vue → components/sheet}/insert-count-menu-item.js +1 -1
  31. package/dist/{vue → components/sheet}/insert-image.js +1 -1
  32. package/dist/{vue → components/sheet}/popup-helpers.js +1 -1
  33. package/dist/{vue → components/sheet}/popups/border-popup.js +1 -1
  34. package/dist/{vue → components/sheet}/popups/border-preset-glyph.js +1 -1
  35. package/dist/{vue → components/sheet}/popups/export-popup.js +2 -2
  36. package/dist/{vue → components/sheet}/popups/fill-color-popup.js +1 -1
  37. package/dist/{vue → components/sheet}/popups/find-popup.js +1 -1
  38. package/dist/{vue → components/sheet}/popups/font-color-popup.js +1 -1
  39. package/dist/{vue → components/sheet}/popups/font-size-popup.js +1 -1
  40. package/dist/{vue → components/sheet}/popups/import.worker.d.ts +1 -1
  41. package/dist/{vue → components/sheet}/popups/import.worker.js +1 -1
  42. package/dist/{vue → components/sheet}/popups/insert-image-popup.js +1 -1
  43. package/dist/{vue → components/sheet}/sheet-context-menu.js +1 -1
  44. package/dist/{vue → components/sheet}/sheet-tabs.js +1 -1
  45. package/dist/{vue → components/sheet}/sheet-toolbar.js +1 -1
  46. package/dist/{vue → components/sheet}/sheet.js +8 -1
  47. package/dist/{vue → components/sheet}/use-find-replace.js +1 -1
  48. package/dist/{vue → components/sheet}/use-formula-ref-select.js +1 -1
  49. package/dist/{vue → components/sheet}/use-sheet-grid.js +10 -2
  50. package/dist/{vue → components/sheet}/use-sheet-state.js +3 -3
  51. package/dist/{vue → components/sheet}/use-sheet-tabs-bar.js +1 -1
  52. package/dist/{vue → components/sheet}/use-tool-groups.js +2 -2
  53. package/dist/{vue → components/sheet}/use-tool-popup.js +2 -2
  54. package/dist/{vue → components/sheet}/use-toolbar-scroll.js +1 -1
  55. package/dist/index.d.ts +17 -3
  56. package/dist/index.js +13 -3
  57. package/dist/report/binding.d.ts +45 -0
  58. package/dist/report/binding.js +175 -0
  59. package/dist/report/connector.d.ts +66 -0
  60. package/dist/report/connector.js +159 -0
  61. package/dist/report/export-xlsx.d.ts +19 -0
  62. package/dist/report/export-xlsx.js +95 -0
  63. package/dist/report/filter-bar.d.ts +10 -0
  64. package/dist/report/filter-bar.js +31 -0
  65. package/dist/report/index.d.ts +12 -0
  66. package/dist/report/params.d.ts +13 -0
  67. package/dist/report/params.js +61 -0
  68. package/dist/report/render/aggregate.js +157 -0
  69. package/dist/report/render/builder.d.ts +12 -0
  70. package/dist/report/render/builder.js +139 -0
  71. package/dist/report/render/coordinate.d.ts +25 -0
  72. package/dist/report/render/coordinate.js +733 -0
  73. package/dist/report/render/index.d.ts +14 -0
  74. package/dist/report/render/index.js +21 -0
  75. package/dist/report/render/style-resolver.js +50 -0
  76. package/dist/report/render/template-index.d.ts +24 -0
  77. package/dist/report/render/template-index.js +137 -0
  78. package/dist/report/rules/evaluate.d.ts +25 -0
  79. package/dist/report/rules/evaluate.js +82 -0
  80. package/dist/report/rules/index.d.ts +2 -0
  81. package/dist/report/template.d.ts +59 -0
  82. package/dist/report/template.js +80 -0
  83. package/dist/report/types.d.ts +85 -0
  84. package/dist/tools/context.d.ts +1 -1
  85. package/dist/types/index.d.ts +3 -2
  86. package/dist/types/report-designer.d.ts +36 -0
  87. package/dist/types/report-viewer.d.ts +38 -0
  88. package/dist/types/sheet.d.ts +17 -1
  89. package/package.json +3 -5
  90. package/src/components/report/__test__/conditional-rules-helpers.test.ts +87 -0
  91. package/src/components/report/__test__/field-panel-helpers.test.ts +65 -0
  92. package/src/components/report/__test__/float-panel-position.test.ts +45 -0
  93. package/src/components/report/__test__/report-designer.test.ts +388 -0
  94. package/src/components/report/__test__/report-viewer.test.ts +334 -0
  95. package/src/components/report/__test__/topology.test.ts +143 -0
  96. package/src/components/report/__test__/use-report-designer.test.ts +565 -0
  97. package/src/components/report/binding-badge.ts +73 -0
  98. package/src/components/report/designer/cell-coords.ts +94 -0
  99. package/src/components/report/designer/col-widths.ts +33 -0
  100. package/src/components/report/designer/conditional-rules/helpers.ts +186 -0
  101. package/src/components/report/designer/drop-highlight-overlay.vue +74 -0
  102. package/src/components/report/designer/float-panel.vue +387 -0
  103. package/src/components/report/designer/role.ts +32 -0
  104. package/src/components/report/designer/rule-preview.vue +40 -0
  105. package/src/components/report/designer/rule-row.vue +252 -0
  106. package/src/components/report/designer/rules-dialog.vue +126 -0
  107. package/src/components/report/designer/topology-overlay.vue +127 -0
  108. package/src/components/report/designer/topology.ts +124 -0
  109. package/src/components/report/designer/use-grid-overlay.ts +113 -0
  110. package/src/components/report/designer-hub.vue +198 -0
  111. package/src/components/report/field-panel-helpers.ts +44 -0
  112. package/src/components/report/field-panel.vue +136 -0
  113. package/src/components/report/filter-bar.vue +77 -0
  114. package/src/components/report/hub-connection-form.vue +124 -0
  115. package/src/components/report/hub-dataset-editor.vue +369 -0
  116. package/src/components/report/index.ts +2 -0
  117. package/src/components/report/report-designer.vue +356 -0
  118. package/src/components/report/report-viewer.vue +128 -0
  119. package/src/components/report/style-designer.scss +583 -0
  120. package/src/components/report/style-hub.scss +292 -0
  121. package/src/components/report/style-viewer.scss +104 -0
  122. package/src/components/report/style.scss +3 -0
  123. package/src/components/report/style.ts +20 -0
  124. package/src/components/report/use-report-designer.ts +547 -0
  125. package/src/components/report/use-report-viewer.ts +79 -0
  126. package/src/{vue → components/sheet}/__test__/formula-bar.test.ts +37 -18
  127. package/src/{vue → components/sheet}/__test__/insert-image-popup.test.ts +1 -1
  128. package/src/{vue → components/sheet}/__test__/insert-image.test.ts +1 -1
  129. package/src/{vue → components/sheet}/__test__/sheet-component.test.ts +40 -3
  130. package/src/{vue → components/sheet}/__test__/sheet-context-menu.test.ts +1 -1
  131. package/src/{vue → components/sheet}/formula-bar.vue +1 -1
  132. package/src/{vue → components/sheet}/insert-image.ts +1 -1
  133. package/src/{vue → components/sheet}/popup-helpers.ts +1 -1
  134. package/src/{vue → components/sheet}/popups/border-popup.vue +1 -1
  135. package/src/{vue → components/sheet}/popups/export-popup.vue +2 -2
  136. package/src/{vue → components/sheet}/popups/fill-color-popup.vue +1 -1
  137. package/src/{vue → components/sheet}/popups/find-popup.vue +1 -1
  138. package/src/{vue → components/sheet}/popups/font-color-popup.vue +1 -1
  139. package/src/{vue → components/sheet}/popups/font-size-popup.vue +1 -1
  140. package/src/{vue → components/sheet}/popups/insert-image-popup.vue +1 -1
  141. package/src/{vue → components/sheet}/sheet-context-menu.ts +2 -2
  142. package/src/{vue → components/sheet}/sheet-toolbar.vue +2 -2
  143. package/src/{vue → components/sheet}/sheet.vue +4 -3
  144. package/src/{vue → components/sheet}/use-find-replace.ts +1 -1
  145. package/src/{vue → components/sheet}/use-sheet-grid.ts +7 -3
  146. package/src/{vue → components/sheet}/use-sheet-state.ts +3 -3
  147. package/src/{vue → components/sheet}/use-tool-groups.ts +2 -2
  148. package/src/{vue → components/sheet}/use-tool-popup.ts +2 -2
  149. package/src/index.ts +24 -188
  150. package/src/report/__test__/binding.test.ts +218 -0
  151. package/src/report/__test__/connector.test.ts +218 -0
  152. package/src/report/__test__/export-xlsx.test.ts +118 -0
  153. package/src/report/__test__/filter-bar.test.ts +58 -0
  154. package/src/report/__test__/params.test.ts +156 -0
  155. package/src/report/__test__/render.test.ts +728 -0
  156. package/src/report/__test__/rules.test.ts +131 -0
  157. package/src/report/__test__/template.test.ts +355 -0
  158. package/src/report/binding.ts +243 -0
  159. package/src/report/connector.ts +205 -0
  160. package/src/report/export-xlsx.ts +118 -0
  161. package/src/report/filter-bar.ts +36 -0
  162. package/src/report/index.ts +13 -0
  163. package/src/report/params.ts +96 -0
  164. package/src/report/render/__test__/aggregate.test.ts +16 -0
  165. package/src/report/render/__test__/coordinate.test.ts +405 -0
  166. package/src/report/render/aggregate.ts +240 -0
  167. package/src/report/render/builder.ts +211 -0
  168. package/src/report/render/coordinate.ts +1239 -0
  169. package/src/report/render/index.ts +30 -0
  170. package/src/report/render/style-resolver.ts +68 -0
  171. package/src/report/render/template-index.ts +200 -0
  172. package/src/report/rules/evaluate.ts +113 -0
  173. package/src/report/rules/index.ts +7 -0
  174. package/src/report/template.ts +141 -0
  175. package/src/report/types.ts +96 -0
  176. package/src/tools/builtin.ts +2 -2
  177. package/src/types/index.ts +2 -6
  178. package/src/types/report-designer.ts +36 -0
  179. package/src/types/report-viewer.ts +37 -0
  180. package/src/types/sheet.ts +22 -1
  181. /package/dist/{vue → components/sheet}/style.d.ts +0 -0
  182. /package/dist/{vue → components/sheet}/style.js +0 -0
  183. /package/dist/{vue → components/sheet}/style2.css +0 -0
  184. /package/dist/{vue → components/sheet}/use-formula-suggest.js +0 -0
  185. /package/src/{vue → components/sheet}/__test__/import-file.test.ts +0 -0
  186. /package/src/{vue → components/sheet}/__test__/insert-count-menu-item.test.ts +0 -0
  187. /package/src/{vue → components/sheet}/__test__/use-formula-ref-select.test.ts +0 -0
  188. /package/src/{vue → components/sheet}/__test__/use-formula-suggest.test.ts +0 -0
  189. /package/src/{vue → components/sheet}/formula-suggest-list.vue +0 -0
  190. /package/src/{vue → components/sheet}/import-file.ts +0 -0
  191. /package/src/{vue → components/sheet}/index.ts +0 -0
  192. /package/src/{vue → components/sheet}/insert-count-menu-item.vue +0 -0
  193. /package/src/{vue → components/sheet}/parsing.ts +0 -0
  194. /package/src/{vue → components/sheet}/popups/border-preset-glyph.vue +0 -0
  195. /package/src/{vue → components/sheet}/popups/import.worker.ts +0 -0
  196. /package/src/{vue → components/sheet}/sheet-tabs.vue +0 -0
  197. /package/src/{vue → components/sheet}/style.scss +0 -0
  198. /package/src/{vue → components/sheet}/style.ts +0 -0
  199. /package/src/{vue → components/sheet}/use-formula-ref-select.ts +0 -0
  200. /package/src/{vue → components/sheet}/use-formula-suggest.ts +0 -0
  201. /package/src/{vue → components/sheet}/use-sheet-tabs-bar.ts +0 -0
  202. /package/src/{vue → components/sheet}/use-toolbar-scroll.ts +0 -0
@@ -0,0 +1,869 @@
1
+ @charset "UTF-8";
2
+ /** flex布局 */
3
+ /**
4
+ * 设置css变量
5
+ * 参数1:变量前缀
6
+ * 参数2: 一个由值组成的列表或者由key, value组成的map
7
+ * css-var(height, (
8
+ * large: 40px
9
+ * default: 32px
10
+ * small: 24px
11
+ * ))
12
+ * 生成的css变量:
13
+ * --u-height-large: 40px;
14
+ * --u-height-default: 32px;
15
+ * --u-height-small: 24px;
16
+ */
17
+ /** 暗色:data-theme 与系统偏好,与 UITheme.injectBuiltInThemes 选择器策略一致 */
18
+ .u-report-viewer {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: var(--u-gap-small);
22
+ min-height: 0;
23
+ }
24
+ .u-report-viewer__body {
25
+ position: relative;
26
+ flex: 1;
27
+ min-width: 0;
28
+ min-height: 0;
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--u-gap-small);
32
+ }
33
+ .u-report-viewer {
34
+ /* USheet 根为 flex 列,grid 区 flex:1;宿主必须给 .u-sheet 明确高度 */
35
+ }
36
+ .u-report-viewer__sheet {
37
+ flex: 1;
38
+ min-height: 0;
39
+ min-width: 0;
40
+ }
41
+ .u-report-viewer__loading {
42
+ position: absolute;
43
+ inset: 0;
44
+ z-index: 20;
45
+ display: flex;
46
+ flex-direction: column;
47
+ align-items: center;
48
+ justify-content: center;
49
+ gap: var(--u-gap-small);
50
+ background: color-mix(in srgb, var(--u-bg-color-top) 72%, transparent);
51
+ font-size: var(--u-font-size-main-small);
52
+ color: var(--u-text-color-second);
53
+ }
54
+ .u-report-viewer__loading-spinner {
55
+ width: 28px;
56
+ height: 28px;
57
+ border: 3px solid var(--u-border-muted-color);
58
+ border-top-color: var(--u-color-primary);
59
+ border-radius: 50%;
60
+ animation: u-report-viewer-spin 0.8s linear infinite;
61
+ }
62
+ .u-report-viewer__error {
63
+ flex-shrink: 0;
64
+ padding: var(--u-gap-small);
65
+ border: 1px solid var(--u-color-danger);
66
+ border-radius: var(--u-radius-default);
67
+ background-color: var(--u-color-danger-light-9);
68
+ color: var(--u-color-danger);
69
+ font-size: var(--u-font-size-main-small);
70
+ }
71
+
72
+ @keyframes u-report-viewer-spin {
73
+ to {
74
+ transform: rotate(360deg);
75
+ }
76
+ }
77
+ .u-report-filter-bar {
78
+ display: flex;
79
+ flex-wrap: wrap;
80
+ align-items: center;
81
+ gap: var(--u-gap-small);
82
+ padding: var(--u-gap-small);
83
+ border: var(--u-border);
84
+ border-radius: var(--u-radius-default);
85
+ background: var(--u-bg-color-top);
86
+ }
87
+ .u-report-filter-bar__label {
88
+ flex-shrink: 0;
89
+ font-size: var(--u-font-size-main-small);
90
+ font-weight: 600;
91
+ color: var(--u-text-color-second);
92
+ }
93
+ .u-report-filter-bar__fields {
94
+ display: flex;
95
+ flex-wrap: wrap;
96
+ gap: var(--u-gap-small);
97
+ flex: 1;
98
+ min-width: 0;
99
+ }
100
+ .u-report-filter-bar__field {
101
+ display: flex;
102
+ align-items: center;
103
+ gap: var(--u-gap-small);
104
+ min-width: 0;
105
+ }
106
+ .u-report-filter-bar__field-label {
107
+ flex-shrink: 0;
108
+ font-size: var(--u-font-size-main-small);
109
+ color: var(--u-text-color-second);
110
+ }
111
+
112
+ .u-report-designer {
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: var(--u-gap-default);
116
+ min-height: 0;
117
+ height: 100%;
118
+ }
119
+ .u-report-designer__toolbar {
120
+ display: flex;
121
+ flex-wrap: wrap;
122
+ align-items: center;
123
+ gap: var(--u-gap-small);
124
+ flex-shrink: 0;
125
+ }
126
+ .u-report-designer__hint {
127
+ font-size: var(--u-font-size-main-small);
128
+ color: var(--u-text-color-second);
129
+ }
130
+ .u-report-designer__body {
131
+ display: flex;
132
+ flex: 1;
133
+ min-height: 0;
134
+ gap: var(--u-gap-default);
135
+ }
136
+ .u-report-designer__mode-toggle {
137
+ display: inline-flex;
138
+ gap: 4px;
139
+ }
140
+ .u-report-designer {
141
+ /* 预览态:内嵌查看器路径(UReportViewer 撑满) */
142
+ }
143
+ .u-report-designer__preview {
144
+ display: flex;
145
+ flex-direction: column;
146
+ flex: 1;
147
+ min-height: 0;
148
+ }
149
+ .u-report-designer__preview .u-report-viewer {
150
+ flex: 1;
151
+ min-height: 0;
152
+ }
153
+ .u-report-designer__grid {
154
+ position: relative;
155
+ flex: 1;
156
+ min-width: 0;
157
+ min-height: 0;
158
+ display: flex;
159
+ flex-direction: column;
160
+ }
161
+ .u-report-designer {
162
+ /* USheet 根为 flex 列,grid 区 flex:1;宿主必须给 .u-sheet 明确高度 */
163
+ }
164
+ .u-report-designer__sheet {
165
+ flex: 1;
166
+ min-height: 0;
167
+ min-width: 0;
168
+ }
169
+ .u-report-designer {
170
+ /* 数据中枢 drawer 面板宽度(class 经 $attrs 落到 .u-drawer 面板;须压过 .u-drawer.is-right 的 320px) */
171
+ }
172
+ .u-report-designer__hub-drawer.u-drawer {
173
+ width: min(960px, 92vw);
174
+ max-width: 92vw;
175
+ }
176
+
177
+ /* 拓扑连线覆层(SVG 弧线,选中绑定格时高亮父子扩展依赖) */
178
+ .u-report-topology {
179
+ position: absolute;
180
+ inset: 0;
181
+ z-index: 12;
182
+ pointer-events: none;
183
+ overflow: visible;
184
+ }
185
+ .u-report-topology__arc {
186
+ fill: none;
187
+ stroke-width: 2;
188
+ stroke-linecap: round;
189
+ opacity: 0.72;
190
+ }
191
+ .u-report-topology__arc__arc--row {
192
+ stroke: var(--u-color-primary);
193
+ }
194
+ .u-report-topology__arc__arc--col {
195
+ stroke: var(--u-color-warning);
196
+ stroke-dasharray: 6 4;
197
+ }
198
+
199
+ /* 字段拖拽落点高亮(虚线框;落空时提示回退当前选区) */
200
+ .u-report-drop-highlight {
201
+ position: absolute;
202
+ z-index: 16;
203
+ box-sizing: border-box;
204
+ border: 2px dashed var(--u-color-primary);
205
+ border-radius: 2px;
206
+ background: color-mix(in srgb, var(--u-color-primary) 10%, transparent);
207
+ pointer-events: none;
208
+ }
209
+ .u-report-drop-highlight__fallback {
210
+ position: absolute;
211
+ left: 50%;
212
+ bottom: var(--u-gap-small);
213
+ z-index: 16;
214
+ transform: translateX(-50%);
215
+ padding: 4px var(--u-gap-small);
216
+ border-radius: var(--u-radius-default);
217
+ background: color-mix(in srgb, var(--u-bg-color-top) 92%, transparent);
218
+ border: 1px dashed var(--u-color-primary);
219
+ font-size: var(--u-font-size-main-small);
220
+ color: var(--u-text-color-second);
221
+ pointer-events: none;
222
+ white-space: nowrap;
223
+ }
224
+
225
+ /* Action Pill:选中绑定格上方的悬浮编辑卡(角色 / 聚合 / 条件样式 / 排序 / 清除绑定) */
226
+ .u-report-float-panel {
227
+ position: absolute;
228
+ z-index: 18;
229
+ display: flex;
230
+ flex-direction: column;
231
+ width: max-content;
232
+ min-width: 400px;
233
+ max-width: min(480px, 100% - 20px);
234
+ border: var(--u-border);
235
+ border-radius: 10px;
236
+ background: var(--u-bg-color-top);
237
+ box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
238
+ pointer-events: auto;
239
+ }
240
+ .u-report-float-panel--above {
241
+ transform: translate(-50%, -100%);
242
+ }
243
+ .u-report-float-panel--below {
244
+ transform: translate(-50%, 0);
245
+ }
246
+ .u-report-float-panel__bar {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 6px;
250
+ padding: 8px 10px;
251
+ }
252
+ .u-report-float-panel__summary {
253
+ font-size: 12px;
254
+ font-weight: 600;
255
+ line-height: 1.35;
256
+ color: var(--u-color-primary);
257
+ white-space: nowrap;
258
+ overflow: hidden;
259
+ text-overflow: ellipsis;
260
+ }
261
+ .u-report-float-panel__toolbar {
262
+ display: flex;
263
+ align-items: center;
264
+ gap: 6px;
265
+ flex-wrap: wrap;
266
+ }
267
+ .u-report-float-panel__select {
268
+ flex: none;
269
+ }
270
+ .u-report-float-panel__select__select--role {
271
+ width: 84px;
272
+ }
273
+ .u-report-float-panel__select__select--aggregate {
274
+ width: 76px;
275
+ }
276
+ .u-report-float-panel__expand {
277
+ flex: none;
278
+ margin-left: auto;
279
+ padding-inline: 6px;
280
+ }
281
+ .u-report-float-panel__body {
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 10px;
285
+ padding: 10px 12px 12px;
286
+ border-top: var(--u-border-muted);
287
+ background: var(--u-bg-color-middle);
288
+ }
289
+ .u-report-float-panel__section {
290
+ display: flex;
291
+ flex-direction: column;
292
+ gap: 6px;
293
+ }
294
+ .u-report-float-panel__section-label {
295
+ font-size: 12px;
296
+ font-weight: 600;
297
+ color: var(--u-text-color-second);
298
+ }
299
+ .u-report-float-panel__hint {
300
+ margin: 0;
301
+ font-size: 12px;
302
+ color: var(--u-text-color-second);
303
+ }
304
+ .u-report-float-panel__parent-actions {
305
+ display: flex;
306
+ align-items: center;
307
+ gap: 6px;
308
+ flex-wrap: wrap;
309
+ }
310
+ .u-report-float-panel__parent-select {
311
+ width: 88px;
312
+ flex: none;
313
+ }
314
+ .u-report-float-panel__select--expand {
315
+ width: 76px;
316
+ }
317
+ .u-report-float-panel__footer {
318
+ display: flex;
319
+ justify-content: flex-end;
320
+ padding-top: 4px;
321
+ margin-top: 2px;
322
+ border-top: var(--u-border-muted);
323
+ }
324
+
325
+ /* 条件样式规则对话框内容 */
326
+ .u-report-rules-dialog {
327
+ display: flex;
328
+ flex-direction: column;
329
+ gap: 12px;
330
+ }
331
+ .u-report-rules-dialog__hint {
332
+ margin: 0;
333
+ font-size: 12px;
334
+ color: var(--u-text-color-second);
335
+ }
336
+ .u-report-rules-dialog__list {
337
+ margin: 0;
338
+ padding: 0;
339
+ list-style: none;
340
+ display: flex;
341
+ flex-direction: column;
342
+ gap: 8px;
343
+ max-height: 420px;
344
+ overflow: auto;
345
+ }
346
+ .u-report-rules-dialog__item {
347
+ margin: 0;
348
+ }
349
+ .u-report-rules-dialog__empty {
350
+ margin: 0;
351
+ font-size: 12px;
352
+ color: var(--u-text-color-second);
353
+ }
354
+
355
+ .u-report-rule-row {
356
+ display: flex;
357
+ align-items: flex-start;
358
+ gap: 8px;
359
+ padding: 10px;
360
+ border: var(--u-border-muted);
361
+ border-radius: 8px;
362
+ background: var(--u-bg-color-top);
363
+ }
364
+ .u-report-rule-row__handle {
365
+ flex: none;
366
+ width: 20px;
367
+ margin-top: 4px;
368
+ color: var(--u-text-color-second);
369
+ font-size: 16px;
370
+ line-height: 1;
371
+ cursor: grab;
372
+ user-select: none;
373
+ text-align: center;
374
+ }
375
+ .u-report-rule-row__handle:active {
376
+ cursor: grabbing;
377
+ }
378
+ .u-report-rule-row__main {
379
+ flex: 1;
380
+ min-width: 0;
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 8px;
384
+ }
385
+ .u-report-rule-row__meta {
386
+ display: flex;
387
+ align-items: center;
388
+ gap: 8px;
389
+ flex-wrap: wrap;
390
+ }
391
+ .u-report-rule-row__field-select {
392
+ width: 120px;
393
+ flex: none;
394
+ }
395
+ .u-report-rule-row__scope-select {
396
+ width: 72px;
397
+ flex: none;
398
+ }
399
+ .u-report-rule-row__condition {
400
+ display: grid;
401
+ grid-template-columns: 72px minmax(0, 1fr) auto;
402
+ align-items: center;
403
+ gap: 8px;
404
+ }
405
+ .u-report-rule-row__operator {
406
+ width: 72px;
407
+ flex: none;
408
+ }
409
+ .u-report-rule-row__value {
410
+ display: flex;
411
+ align-items: center;
412
+ gap: 6px;
413
+ flex: 0 1 auto;
414
+ min-width: 0;
415
+ }
416
+ .u-report-rule-row__scalar-input {
417
+ width: 112px;
418
+ flex: none;
419
+ }
420
+ .u-report-rule-row__between-input {
421
+ width: 96px;
422
+ flex: none;
423
+ }
424
+ .u-report-rule-row__between-sep {
425
+ font-size: 12px;
426
+ color: var(--u-text-color-second);
427
+ }
428
+ .u-report-rule-row__style {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 8px;
432
+ flex-wrap: wrap;
433
+ }
434
+ .u-report-rule-row__style-label {
435
+ font-size: 12px;
436
+ color: var(--u-text-color-second);
437
+ }
438
+ .u-report-rule-row__toggle {
439
+ min-width: 28px;
440
+ padding-inline: 6px;
441
+ }
442
+ .u-report-rule-row__preview {
443
+ flex: none;
444
+ margin-top: 2px;
445
+ }
446
+ .u-report-rule-row__actions {
447
+ flex: none;
448
+ display: flex;
449
+ flex-direction: column;
450
+ gap: 2px;
451
+ }
452
+
453
+ .u-report-rule-preview {
454
+ display: inline-flex;
455
+ align-items: center;
456
+ justify-content: center;
457
+ min-width: 36px;
458
+ height: 28px;
459
+ padding: 0 8px;
460
+ border: var(--u-border);
461
+ border-radius: 4px;
462
+ font-size: 13px;
463
+ line-height: 1;
464
+ box-sizing: border-box;
465
+ }
466
+ .u-report-rule-preview--row {
467
+ min-width: 48px;
468
+ font-size: 11px;
469
+ }
470
+
471
+ .u-report-field-panel {
472
+ width: 220px;
473
+ flex-shrink: 0;
474
+ overflow: auto;
475
+ padding: var(--u-gap-default);
476
+ border: var(--u-border);
477
+ border-radius: var(--u-radius-default);
478
+ background: var(--u-bg-color-top);
479
+ }
480
+ .u-report-field-panel__title {
481
+ margin: 0 0 4px;
482
+ font-size: var(--u-font-size-title-small);
483
+ font-weight: 600;
484
+ }
485
+ .u-report-field-panel__meta {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: var(--u-gap-small);
489
+ margin: 0 0 var(--u-gap-small);
490
+ font-size: var(--u-font-size-main-small);
491
+ color: var(--u-text-color-second);
492
+ }
493
+ .u-report-field-panel__search {
494
+ margin-bottom: var(--u-gap-small);
495
+ }
496
+ .u-report-field-panel__hint {
497
+ margin: 0 0 var(--u-gap-default);
498
+ font-size: var(--u-font-size-assist-small);
499
+ line-height: 1.45;
500
+ color: var(--u-text-color-second);
501
+ }
502
+ .u-report-field-panel__empty {
503
+ margin: var(--u-gap-small) 0 0;
504
+ font-size: var(--u-font-size-main-small);
505
+ color: var(--u-text-color-second);
506
+ }
507
+ .u-report-field-panel__dataset {
508
+ margin-bottom: var(--u-gap-default);
509
+ }
510
+ .u-report-field-panel__dataset-toggle {
511
+ display: flex;
512
+ align-items: center;
513
+ gap: var(--u-gap-small);
514
+ width: 100%;
515
+ margin: 0 0 var(--u-gap-small);
516
+ padding: 0;
517
+ justify-content: flex-start;
518
+ height: auto;
519
+ min-height: 0;
520
+ color: inherit;
521
+ }
522
+ .u-report-field-panel__dataset-chevron {
523
+ display: inline-block;
524
+ font-size: 11px;
525
+ color: var(--u-text-color-second);
526
+ transition: transform 0.15s ease;
527
+ transform: rotate(0deg);
528
+ }
529
+ .u-report-field-panel__dataset-chevron.is-expanded {
530
+ transform: rotate(90deg);
531
+ }
532
+ .u-report-field-panel__dataset-name {
533
+ flex: 1;
534
+ min-width: 0;
535
+ font-size: var(--u-font-size-main-small);
536
+ font-weight: 500;
537
+ overflow: hidden;
538
+ text-overflow: ellipsis;
539
+ white-space: nowrap;
540
+ }
541
+ .u-report-field-panel__dataset-count {
542
+ flex-shrink: 0;
543
+ min-width: 18px;
544
+ padding: 0 6px;
545
+ border-radius: 999px;
546
+ background: var(--u-bg-color-hover);
547
+ font-size: 11px;
548
+ line-height: 18px;
549
+ text-align: center;
550
+ color: var(--u-text-color-second);
551
+ }
552
+ .u-report-field-panel__fields {
553
+ display: flex;
554
+ flex-wrap: wrap;
555
+ gap: var(--u-gap-small);
556
+ }
557
+ .u-report-field-panel__pill {
558
+ display: inline-flex;
559
+ align-items: center;
560
+ gap: 4px;
561
+ flex: 0 0 calc(50% - 3px);
562
+ min-width: 0;
563
+ max-width: calc(50% - 3px);
564
+ height: 24px;
565
+ padding: 0 8px 0 4px;
566
+ border: var(--u-border-muted);
567
+ border-radius: 999px;
568
+ background: var(--u-bg-color-top);
569
+ cursor: grab;
570
+ transition: background 0.15s, border-color 0.15s;
571
+ outline: none;
572
+ }
573
+ .u-report-field-panel__pill:hover {
574
+ background: var(--u-bg-color-hover);
575
+ border-color: var(--u-color-primary);
576
+ }
577
+ .u-report-field-panel__pill:active {
578
+ cursor: grabbing;
579
+ }
580
+ .u-report-field-panel__pill.is-bound {
581
+ border-color: var(--u-color-success);
582
+ }
583
+ .u-report-field-panel__pill-icon {
584
+ flex-shrink: 0;
585
+ display: inline-flex;
586
+ align-items: center;
587
+ justify-content: center;
588
+ width: 16px;
589
+ height: 16px;
590
+ border-radius: 999px;
591
+ font-size: 10px;
592
+ font-weight: 700;
593
+ line-height: 1;
594
+ color: var(--u-color-info);
595
+ background: var(--u-color-info-light-9);
596
+ }
597
+ .u-report-field-panel__pill-icon[data-type=number] {
598
+ color: var(--u-color-success);
599
+ background: var(--u-color-success-light-9);
600
+ }
601
+ .u-report-field-panel__pill-icon[data-type=date] {
602
+ color: var(--u-color-warning);
603
+ background: var(--u-color-warning-light-9);
604
+ }
605
+ .u-report-field-panel__pill-label {
606
+ flex: 1;
607
+ min-width: 0;
608
+ font-size: 11px;
609
+ font-weight: 500;
610
+ overflow: hidden;
611
+ text-overflow: ellipsis;
612
+ white-space: nowrap;
613
+ }
614
+ .u-report-field-panel__pill-bound {
615
+ flex-shrink: 0;
616
+ color: var(--u-color-success);
617
+ font-size: 11px;
618
+ font-weight: 700;
619
+ line-height: 1;
620
+ }
621
+
622
+ .u-report-hub {
623
+ display: flex;
624
+ flex-direction: column;
625
+ gap: var(--u-gap-default);
626
+ height: 100%;
627
+ min-height: 0;
628
+ padding: var(--u-gap-default);
629
+ box-sizing: border-box;
630
+ }
631
+ .u-report-hub__head {
632
+ display: flex;
633
+ align-items: center;
634
+ justify-content: space-between;
635
+ gap: var(--u-gap-default);
636
+ flex-shrink: 0;
637
+ }
638
+ .u-report-hub__title {
639
+ margin: 0;
640
+ font-size: var(--u-font-size-title-default);
641
+ font-weight: 600;
642
+ }
643
+ .u-report-hub__body {
644
+ display: flex;
645
+ gap: var(--u-gap-large);
646
+ flex: 1;
647
+ min-height: 0;
648
+ }
649
+ .u-report-hub__sidebar {
650
+ display: flex;
651
+ flex-direction: column;
652
+ gap: var(--u-gap-default);
653
+ width: 240px;
654
+ flex-shrink: 0;
655
+ min-height: 0;
656
+ padding-right: var(--u-gap-default);
657
+ border-right: var(--u-border);
658
+ }
659
+ .u-report-hub__sidebar-head {
660
+ display: flex;
661
+ align-items: center;
662
+ justify-content: space-between;
663
+ gap: var(--u-gap-small);
664
+ }
665
+ .u-report-hub__sidebar-title {
666
+ font-size: var(--u-font-size-main-small);
667
+ font-weight: 600;
668
+ color: var(--u-text-color-second);
669
+ }
670
+ .u-report-hub__tree {
671
+ flex: 1;
672
+ min-height: 0;
673
+ overflow: auto;
674
+ display: flex;
675
+ flex-direction: column;
676
+ gap: var(--u-gap-default);
677
+ }
678
+ .u-report-hub__conn {
679
+ display: flex;
680
+ align-items: center;
681
+ justify-content: space-between;
682
+ gap: var(--u-gap-small);
683
+ padding: var(--u-gap-small) var(--u-gap-default);
684
+ border-radius: var(--u-radius-small);
685
+ cursor: pointer;
686
+ }
687
+ .u-report-hub__conn:hover {
688
+ background: var(--u-bg-color-hover);
689
+ }
690
+ .u-report-hub__conn.is-active {
691
+ background: var(--u-color-primary-light-9);
692
+ color: var(--u-color-primary);
693
+ }
694
+ .u-report-hub__conn-label {
695
+ font-size: var(--u-font-size-main-small);
696
+ font-weight: 600;
697
+ }
698
+ .u-report-hub__dataset-list {
699
+ margin: 4px 0 0;
700
+ padding: 0 0 0 var(--u-gap-large);
701
+ list-style: none;
702
+ }
703
+ .u-report-hub__dataset-item {
704
+ display: flex;
705
+ flex-direction: column;
706
+ gap: 2px;
707
+ padding: var(--u-gap-small) var(--u-gap-default);
708
+ margin-bottom: 2px;
709
+ border-radius: var(--u-radius-small);
710
+ font-size: var(--u-font-size-main-small);
711
+ cursor: pointer;
712
+ }
713
+ .u-report-hub__dataset-item:hover {
714
+ background: var(--u-bg-color-hover);
715
+ }
716
+ .u-report-hub__dataset-item.is-active {
717
+ background: var(--u-color-primary-light-9);
718
+ color: var(--u-color-primary);
719
+ }
720
+ .u-report-hub__dataset-id {
721
+ font-size: 11px;
722
+ font-family: ui-monospace, monospace;
723
+ color: var(--u-text-color-second);
724
+ }
725
+ .u-report-hub__add-dataset {
726
+ margin-left: var(--u-gap-small);
727
+ }
728
+ .u-report-hub__sidebar-empty {
729
+ margin: var(--u-gap-small) 0 0;
730
+ font-size: var(--u-font-size-main-small);
731
+ line-height: 1.5;
732
+ color: var(--u-text-color-second);
733
+ }
734
+ .u-report-hub__main {
735
+ flex: 1;
736
+ min-width: 0;
737
+ min-height: 0;
738
+ overflow: auto;
739
+ }
740
+ .u-report-hub__empty {
741
+ display: flex;
742
+ align-items: center;
743
+ justify-content: center;
744
+ height: 100%;
745
+ font-size: var(--u-font-size-main-small);
746
+ color: var(--u-text-color-second);
747
+ text-align: center;
748
+ padding: var(--u-gap-large);
749
+ }
750
+
751
+ .u-report-hub-connection-form {
752
+ display: flex;
753
+ flex-direction: column;
754
+ gap: var(--u-gap-default);
755
+ height: 100%;
756
+ }
757
+ .u-report-hub-connection-form__title {
758
+ margin: 0;
759
+ font-size: var(--u-font-size-title-small);
760
+ font-weight: 600;
761
+ }
762
+ .u-report-hub-connection-form__grid {
763
+ display: grid;
764
+ grid-template-columns: repeat(2, minmax(0, 1fr));
765
+ gap: var(--u-gap-default) var(--u-gap-large);
766
+ }
767
+ .u-report-hub-connection-form__field {
768
+ display: flex;
769
+ flex-direction: column;
770
+ gap: 4px;
771
+ }
772
+ .u-report-hub-connection-form__label {
773
+ font-size: var(--u-font-size-main-small);
774
+ color: var(--u-text-color-second);
775
+ }
776
+ .u-report-hub-connection-form__test {
777
+ padding: var(--u-gap-small) var(--u-gap-default);
778
+ border-radius: var(--u-radius-small);
779
+ font-size: var(--u-font-size-main-small);
780
+ background: var(--u-color-danger-light-9);
781
+ color: var(--u-color-danger);
782
+ }
783
+ .u-report-hub-connection-form__test.is-ok {
784
+ background: var(--u-color-success-light-9);
785
+ color: var(--u-color-success);
786
+ }
787
+ .u-report-hub-connection-form__actions {
788
+ display: flex;
789
+ flex-wrap: wrap;
790
+ gap: var(--u-gap-small);
791
+ margin-top: auto;
792
+ }
793
+
794
+ .u-report-hub-dataset-editor {
795
+ display: flex;
796
+ flex-direction: column;
797
+ gap: var(--u-gap-default);
798
+ height: 100%;
799
+ min-height: 0;
800
+ }
801
+ .u-report-hub-dataset-editor__head {
802
+ display: flex;
803
+ align-items: center;
804
+ justify-content: space-between;
805
+ gap: var(--u-gap-default);
806
+ flex-shrink: 0;
807
+ }
808
+ .u-report-hub-dataset-editor__rename {
809
+ display: flex;
810
+ align-items: center;
811
+ gap: var(--u-gap-small);
812
+ flex: 1;
813
+ min-width: 0;
814
+ }
815
+ .u-report-hub-dataset-editor__label {
816
+ margin: 0;
817
+ font-size: var(--u-font-size-main-small);
818
+ color: var(--u-text-color-second);
819
+ flex-shrink: 0;
820
+ }
821
+ .u-report-hub-dataset-editor__section-title {
822
+ margin: 0 0 var(--u-gap-small);
823
+ font-size: var(--u-font-size-main-small);
824
+ font-weight: 600;
825
+ color: var(--u-text-color-second);
826
+ flex-shrink: 0;
827
+ }
828
+ .u-report-hub-dataset-editor__sql {
829
+ flex-shrink: 0;
830
+ }
831
+ .u-report-hub-dataset-editor__sql-error {
832
+ margin: var(--u-gap-small) 0 0;
833
+ font-size: var(--u-font-size-main-small);
834
+ color: var(--u-color-danger);
835
+ }
836
+ .u-report-hub-dataset-editor__preview-error {
837
+ margin: var(--u-gap-small) 0 0;
838
+ font-size: var(--u-font-size-main-small);
839
+ color: var(--u-color-danger);
840
+ }
841
+ .u-report-hub-dataset-editor__params {
842
+ flex-shrink: 0;
843
+ }
844
+ .u-report-hub-dataset-editor__param-table {
845
+ max-height: 180px;
846
+ }
847
+ .u-report-hub-dataset-editor__tabs {
848
+ flex: 1;
849
+ min-height: 0;
850
+ display: flex;
851
+ flex-direction: column;
852
+ }
853
+ .u-report-hub-dataset-editor__schema-table {
854
+ min-height: 220px;
855
+ height: 280px;
856
+ }
857
+ .u-report-hub-dataset-editor__preview-table {
858
+ min-height: 220px;
859
+ height: 280px;
860
+ }
861
+ .u-report-hub-dataset-editor__preview-actions {
862
+ display: flex;
863
+ justify-content: flex-end;
864
+ margin-bottom: var(--u-gap-small);
865
+ }
866
+ .u-report-hub-dataset-editor__muted {
867
+ font-size: var(--u-font-size-main-small);
868
+ color: var(--u-text-color-second);
869
+ }