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