@finos/legend-application-repl 0.0.30 → 0.0.31

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 (189) hide show
  1. package/lib/components/dataCube/DataCube.d.ts.map +1 -1
  2. package/lib/components/dataCube/DataCube.js +13 -9
  3. package/lib/components/dataCube/DataCube.js.map +1 -1
  4. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  5. package/lib/components/dataCube/editor/DataCubeEditor.js +4 -2
  6. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  7. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js +2 -2
  8. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js.map +1 -1
  9. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
  10. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +163 -6
  11. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
  12. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +2 -2
  13. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
  14. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +5 -0
  15. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
  16. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +130 -47
  17. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
  18. package/lib/{stores/dataCube/DataCubeDefaultConfig.d.ts → components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts} +4 -2
  19. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts.map +1 -0
  20. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js +27 -0
  21. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js.map +1 -0
  22. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +2 -2
  23. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +1 -1
  24. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js +2 -2
  25. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js.map +1 -1
  26. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -1
  27. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +104 -5
  28. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -1
  29. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js +2 -2
  30. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js.map +1 -1
  31. package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts +46 -0
  32. package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts.map +1 -0
  33. package/lib/components/dataCube/editor/DataCubeEditorShared.js +171 -0
  34. package/lib/components/dataCube/editor/DataCubeEditorShared.js.map +1 -0
  35. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts.map +1 -1
  36. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +36 -3
  37. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -1
  38. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js +2 -2
  39. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js.map +1 -1
  40. package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
  41. package/lib/components/dataCube/grid/DataCubeGrid.js +42 -26
  42. package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
  43. package/{src/stores/dataCube/DataCubeDefaultConfig.ts → lib/components/dataCube/grid/DataCubeGridShared.d.ts} +3 -2
  44. package/lib/components/dataCube/grid/DataCubeGridShared.d.ts.map +1 -0
  45. package/lib/components/dataCube/grid/DataCubeGridShared.js +25 -0
  46. package/lib/components/dataCube/grid/DataCubeGridShared.js.map +1 -0
  47. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts +23 -0
  48. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts.map +1 -0
  49. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js +382 -0
  50. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js.map +1 -0
  51. package/lib/{stores/dataCube/DataCubeDefaultConfig.js → components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts} +4 -2
  52. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts.map +1 -0
  53. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js +83 -0
  54. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js.map +1 -0
  55. package/lib/index.css +2 -2
  56. package/lib/index.css.map +1 -1
  57. package/lib/package.json +4 -2
  58. package/lib/server/models/DataCubeQuery.d.ts +3 -5
  59. package/lib/server/models/DataCubeQuery.d.ts.map +1 -1
  60. package/lib/server/models/DataCubeQuery.js +0 -2
  61. package/lib/server/models/DataCubeQuery.js.map +1 -1
  62. package/lib/stores/dataCube/DataCubeState.d.ts +11 -2
  63. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  64. package/lib/stores/dataCube/DataCubeState.js +34 -5
  65. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  66. package/lib/stores/dataCube/REPLStore.d.ts +1 -1
  67. package/lib/stores/dataCube/REPLStore.d.ts.map +1 -1
  68. package/lib/stores/dataCube/REPLStore.js +3 -3
  69. package/lib/stores/dataCube/REPLStore.js.map +1 -1
  70. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts +89 -0
  71. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts.map +1 -0
  72. package/lib/stores/dataCube/core/DataCubeConfiguration.js +161 -0
  73. package/lib/stores/dataCube/core/DataCubeConfiguration.js.map +1 -0
  74. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts +25 -0
  75. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts.map +1 -0
  76. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js +44 -0
  77. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js.map +1 -0
  78. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts.map +1 -1
  79. package/lib/stores/dataCube/core/DataCubeCoreState.js +3 -3
  80. package/lib/stores/dataCube/core/DataCubeCoreState.js.map +1 -1
  81. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +8 -8
  82. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  83. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +82 -4
  84. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
  85. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +131 -3
  86. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
  87. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +19 -5
  88. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  89. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +36 -6
  90. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  91. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
  92. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +37 -18
  93. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
  94. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts.map +1 -1
  95. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js +6 -2
  96. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js.map +1 -1
  97. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts +3 -1
  98. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts.map +1 -1
  99. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js +4 -2
  100. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js.map +1 -1
  101. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +33 -0
  102. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -0
  103. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +57 -0
  104. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -0
  105. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +3 -0
  106. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -1
  107. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +10 -0
  108. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -1
  109. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts +8 -3
  110. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts.map +1 -1
  111. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js +20 -24
  112. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js.map +1 -1
  113. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.d.ts +27 -0
  114. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.d.ts.map +1 -0
  115. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.js +30 -0
  116. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.js.map +1 -0
  117. package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts +1 -1
  118. package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts.map +1 -1
  119. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts +13 -6
  120. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
  121. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +64 -19
  122. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
  123. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +4 -1
  124. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  125. package/lib/stores/dataCube/editor/DataCubeEditorState.js +15 -10
  126. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  127. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +95 -0
  128. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -0
  129. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +369 -0
  130. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -0
  131. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts +7 -2
  132. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  133. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +29 -2
  134. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  135. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
  136. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +0 -9
  137. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
  138. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
  139. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +4 -3
  140. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
  141. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
  142. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +16 -28
  143. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
  144. package/package.json +10 -8
  145. package/src/components/dataCube/DataCube.tsx +44 -23
  146. package/src/components/dataCube/editor/DataCubeEditor.tsx +6 -1
  147. package/src/components/dataCube/editor/DataCubeEditorCodePanel.tsx +2 -2
  148. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +837 -7
  149. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +2 -2
  150. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +264 -50
  151. package/src/components/dataCube/editor/DataCubeEditorDeveloperPanel.tsx +41 -0
  152. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +2 -2
  153. package/src/components/dataCube/editor/DataCubeEditorFilterPanel.tsx +2 -2
  154. package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +682 -13
  155. package/src/components/dataCube/editor/DataCubeEditorHPivotsPanel.tsx +2 -2
  156. package/src/components/dataCube/editor/DataCubeEditorShared.tsx +448 -0
  157. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +103 -4
  158. package/src/components/dataCube/editor/DataCubeEditorVPivotsPanel.tsx +2 -2
  159. package/src/components/dataCube/grid/DataCubeGrid.tsx +65 -32
  160. package/src/components/dataCube/grid/DataCubeGridShared.tsx +41 -0
  161. package/src/components/dataCube/grid/menu/DataCubeGridMenu.tsx +394 -0
  162. package/src/components/dataCube/grid/menu/DataCubeGridSortsMenu.tsx +120 -0
  163. package/src/server/models/DataCubeQuery.ts +2 -6
  164. package/src/stores/dataCube/DataCubeState.ts +39 -5
  165. package/src/stores/dataCube/REPLStore.ts +3 -3
  166. package/src/stores/dataCube/core/DataCubeConfiguration.ts +200 -0
  167. package/src/stores/dataCube/core/DataCubeConfigurationBuilder.ts +56 -0
  168. package/src/stores/dataCube/core/DataCubeCoreState.ts +3 -3
  169. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +13 -13
  170. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +136 -4
  171. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +43 -6
  172. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +45 -24
  173. package/src/stores/dataCube/core/DataCubeQuerySnapshotManager.ts +9 -2
  174. package/src/stores/dataCube/editor/DataCubeEditorCodePanelState.ts +5 -2
  175. package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +82 -0
  176. package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +12 -0
  177. package/src/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.ts +31 -28
  178. package/src/stores/dataCube/editor/DataCubeEditorHPivotPanelState.ts +43 -0
  179. package/src/stores/dataCube/editor/DataCubeEditorPanelState.ts +1 -1
  180. package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +92 -25
  181. package/src/stores/dataCube/editor/DataCubeEditorState.ts +17 -10
  182. package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +533 -0
  183. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +33 -2
  184. package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +0 -10
  185. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.tsx +4 -3
  186. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +16 -36
  187. package/tsconfig.json +10 -1
  188. package/lib/stores/dataCube/DataCubeDefaultConfig.d.ts.map +0 -1
  189. package/lib/stores/dataCube/DataCubeDefaultConfig.js.map +0 -1
@@ -16,14 +16,69 @@
16
16
 
17
17
  import { observer } from 'mobx-react-lite';
18
18
  import { useREPLStore } from '../../REPLStoreProvider.js';
19
- import { DataCubeIcon } from '@finos/legend-art';
19
+ import { cn, DataCubeIcon, useDropdownMenu } from '@finos/legend-art';
20
+ import {
21
+ DataCubeFont,
22
+ DataCubeFontFormatUnderlinedVariant,
23
+ DataCubeFontTextAlignment,
24
+ DataCubeNumberScale,
25
+ DataCubeSelectionStat,
26
+ DEFAULT_BACKGROUND_COLOR,
27
+ DEFAULT_ERROR_FOREGROUND_COLOR,
28
+ DEFAULT_FOREGROUND_COLOR,
29
+ DEFAULT_NEGATIVE_FOREGROUND_COLOR,
30
+ DEFAULT_ROW_HIGHLIGHT_BACKGROUND_COLOR,
31
+ DEFAULT_ZERO_FOREGROUND_COLOR,
32
+ } from '../../../stores/dataCube/core/DataCubeQueryEngine.js';
33
+ import {
34
+ DataCubeEditorCheckbox,
35
+ DataCubeEditorColorPickerButton,
36
+ DataCubeEditorDropdownMenu,
37
+ DataCubeEditorDropdownMenuItem,
38
+ DataCubeEditorDropdownMenuItemSeparator,
39
+ DataCubeEditorDropdownMenuTrigger,
40
+ DataCubeEditorTextInput,
41
+ DataCubeEditorNumberInput,
42
+ WIP_Badge,
43
+ } from './DataCubeEditorShared.js';
20
44
 
21
45
  export const DataCubeEditorGeneralPropertiesPanel = observer(() => {
22
46
  const replStore = useREPLStore();
23
- const panel = replStore.dataCubeState.editor.generalPropertiesPanel;
47
+ const panel = replStore.dataCube.editor.generalPropertiesPanel;
48
+ const configuration = panel.configuration;
49
+ const [
50
+ openInitialExpandLevelDropdown,
51
+ closeInitialExpandLevelDropdown,
52
+ initialExpandLevelDropdownProps,
53
+ ] = useDropdownMenu();
54
+ const [
55
+ openNumberScaleDropdown,
56
+ closeNumberScaleDropdown,
57
+ numberScaleDropdownProps,
58
+ ] = useDropdownMenu();
59
+ const [
60
+ openSelectionStatDropdown,
61
+ closeSelectionStatDropdown,
62
+ selectionStatDropdownProps,
63
+ ] = useDropdownMenu();
64
+ const [
65
+ openFontFamilyDropdown,
66
+ closeFontFamilyDropdown,
67
+ fontFamilyDropdownProps,
68
+ ] = useDropdownMenu();
69
+ const [
70
+ openFontSizeDropdown,
71
+ closeFontSizeDropdown,
72
+ openFontSizeDropdownProps,
73
+ ] = useDropdownMenu();
74
+ const [
75
+ openFontFormatUnderlinedVariantDropdown,
76
+ closeFontFormatUnderlinedVariantDropdown,
77
+ fontFormatUnderlinedVariantDropdownProps,
78
+ ] = useDropdownMenu();
24
79
 
25
80
  return (
26
- <div className="data-cube-column-selector h-full w-full p-2">
81
+ <div className="h-full w-full select-none p-2">
27
82
  <div className="flex h-6">
28
83
  <div className="flex h-6 items-center text-xl font-medium">
29
84
  <DataCubeIcon.TableOptions />
@@ -32,16 +87,630 @@ export const DataCubeEditorGeneralPropertiesPanel = observer(() => {
32
87
  General Properties
33
88
  </div>
34
89
  </div>
35
- <div className="flex h-[calc(100%_-_24px)] w-full p-4"></div>
36
- <div className="flex h-6 w-full items-center">
37
- <div className="flex h-full w-32 items-center">Report Title:</div>
38
- <input
39
- className="h-full w-full border border-neutral-300 px-2 text-lg font-semibold focus:outline-none"
40
- value={panel.name}
41
- onChange={(event) => {
42
- panel.setName(event.target.value);
43
- }}
44
- />
90
+ <div className="flex h-[calc(100%_-_24px)] w-full">
91
+ <div className="h-full w-full py-2">
92
+ <div className="flex h-6 w-full items-center">
93
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
94
+ Report Title:
95
+ </div>
96
+ <DataCubeEditorTextInput
97
+ className="w-96 text-lg font-semibold"
98
+ value={panel.name}
99
+ onChange={(event) => {
100
+ panel.setName(event.target.value);
101
+ }}
102
+ />
103
+ </div>
104
+
105
+ <div className="mt-2 flex h-6 w-full items-center">
106
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
107
+ Initially Expand to Level:
108
+ </div>
109
+ <DataCubeEditorDropdownMenuTrigger
110
+ className="w-14"
111
+ onClick={openInitialExpandLevelDropdown}
112
+ disabled={true}
113
+ >
114
+ {configuration.initialExpandLevel ?? '(None)'}
115
+ </DataCubeEditorDropdownMenuTrigger>
116
+ <DataCubeEditorDropdownMenu
117
+ className="w-14"
118
+ {...initialExpandLevelDropdownProps}
119
+ >
120
+ {[undefined, 1, 2, 3, 4, 5, 6, 7, 8].map((level) => (
121
+ <DataCubeEditorDropdownMenuItem
122
+ key={level ?? ''}
123
+ onClick={() => {
124
+ configuration.setInitialExpandLevel(level);
125
+ closeInitialExpandLevelDropdown();
126
+ }}
127
+ >
128
+ {level ?? '(None)'}
129
+ </DataCubeEditorDropdownMenuItem>
130
+ ))}
131
+ </DataCubeEditorDropdownMenu>
132
+ <WIP_Badge />
133
+ </div>
134
+
135
+ <div className="mt-2 flex h-4 w-full items-center">
136
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
137
+ Show Root Aggregation?
138
+ </div>
139
+ <DataCubeEditorCheckbox
140
+ checked={configuration.showRootAggregation}
141
+ onChange={() =>
142
+ configuration.setShowRootAggregation(
143
+ !configuration.showRootAggregation,
144
+ )
145
+ }
146
+ disabled={true}
147
+ />
148
+ <WIP_Badge />
149
+ </div>
150
+
151
+ <div className="mt-2 flex h-4 w-full items-center">
152
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
153
+ Show Leaf Count?
154
+ </div>
155
+ <DataCubeEditorCheckbox
156
+ checked={configuration.showLeafCount}
157
+ onChange={() =>
158
+ configuration.setShowLeafCount(!configuration.showLeafCount)
159
+ }
160
+ />
161
+ </div>
162
+
163
+ <div className="mt-2 flex h-4 w-full items-center">
164
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
165
+ Show Lines?
166
+ </div>
167
+ <DataCubeEditorCheckbox
168
+ label="Tree"
169
+ checked={configuration.showTreeLine}
170
+ onChange={() =>
171
+ configuration.setShowTreeLine(!configuration.showTreeLine)
172
+ }
173
+ />
174
+ <DataCubeEditorCheckbox
175
+ className="ml-2"
176
+ label="Horizontal"
177
+ checked={configuration.showHorizontalGridLine}
178
+ onChange={() =>
179
+ configuration.setShowHorizontalGridLine(
180
+ !configuration.showHorizontalGridLine,
181
+ )
182
+ }
183
+ />
184
+ <DataCubeEditorCheckbox
185
+ className="ml-2"
186
+ label="Vertical"
187
+ checked={configuration.showVerticalGridLine}
188
+ onChange={() =>
189
+ configuration.setShowVerticalGridLine(
190
+ !configuration.showVerticalGridLine,
191
+ )
192
+ }
193
+ />
194
+ </div>
195
+
196
+ <div className="mt-2 flex h-6 w-full items-center">
197
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
198
+ Default Number Scale:
199
+ </div>
200
+ <DataCubeEditorDropdownMenuTrigger
201
+ className="w-32"
202
+ onClick={openNumberScaleDropdown}
203
+ >
204
+ {configuration.numberScale ?? '(None)'}
205
+ </DataCubeEditorDropdownMenuTrigger>
206
+ <DataCubeEditorDropdownMenu
207
+ className="w-32"
208
+ {...numberScaleDropdownProps}
209
+ >
210
+ {[
211
+ undefined,
212
+ DataCubeNumberScale.PERCENT,
213
+ DataCubeNumberScale.BASIS_POINT,
214
+ DataCubeNumberScale.THOUSANDS,
215
+ DataCubeNumberScale.MILLIONS,
216
+ DataCubeNumberScale.BILLIONS,
217
+ DataCubeNumberScale.AUTO,
218
+ ].map((scale) => (
219
+ <DataCubeEditorDropdownMenuItem
220
+ key={scale ?? ''}
221
+ onClick={() => {
222
+ configuration.setNumberScale(scale);
223
+ closeNumberScaleDropdown();
224
+ }}
225
+ >
226
+ {scale ?? '(None)'}
227
+ </DataCubeEditorDropdownMenuItem>
228
+ ))}
229
+ </DataCubeEditorDropdownMenu>
230
+ </div>
231
+
232
+ <div className="mt-2 flex h-6 w-full items-center">
233
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
234
+ Show Selection Stats:
235
+ </div>
236
+ <DataCubeEditorDropdownMenuTrigger
237
+ className="w-14"
238
+ onClick={openSelectionStatDropdown}
239
+ disabled={true}
240
+ >
241
+ {'(None)'}
242
+ </DataCubeEditorDropdownMenuTrigger>
243
+ <DataCubeEditorDropdownMenu
244
+ className="w-14"
245
+ {...selectionStatDropdownProps}
246
+ >
247
+ {[
248
+ DataCubeSelectionStat.SUM,
249
+ DataCubeSelectionStat.AVERAGE,
250
+ DataCubeSelectionStat.COUNT,
251
+ DataCubeSelectionStat.MIN,
252
+ DataCubeSelectionStat.MAX,
253
+ ].map((operation) => (
254
+ <DataCubeEditorDropdownMenuItem
255
+ key={operation}
256
+ onClick={() => {
257
+ // TODO
258
+ closeSelectionStatDropdown();
259
+ }}
260
+ ></DataCubeEditorDropdownMenuItem>
261
+ ))}
262
+ </DataCubeEditorDropdownMenu>
263
+ <WIP_Badge />
264
+ </div>
265
+
266
+ <div className="mt-2 flex h-6 w-full items-center">
267
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
268
+ Row Limit:
269
+ </div>
270
+ <DataCubeEditorNumberInput
271
+ className="w-14 text-sm"
272
+ disabled={!configuration.alternateRows}
273
+ value={panel.limit}
274
+ min={-1}
275
+ step={1}
276
+ defaultValue={-1}
277
+ isValid={(value) =>
278
+ value !== undefined && (value === -1 || value > 0)
279
+ }
280
+ setValue={(value) => panel.setLimit(value ?? -1)}
281
+ />
282
+ <div className="flex-shrink-0 pl-1 text-sm italic text-neutral-500">
283
+ Truncate result to this many rows at every level. Use -1 for
284
+ unlimited.
285
+ </div>
286
+ </div>
287
+
288
+ <div className="mt-1 flex h-6 w-full items-center">
289
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm" />
290
+ <DataCubeEditorCheckbox
291
+ label="Display warning when truncated"
292
+ checked={configuration.showWarningForTruncatedResult}
293
+ onChange={() =>
294
+ configuration.setShowWarningForTruncatedResult(
295
+ !configuration.showWarningForTruncatedResult,
296
+ )
297
+ }
298
+ />
299
+ </div>
300
+
301
+ <div className="my-2 h-[1px] w-full bg-neutral-200" />
302
+
303
+ <div className="mt-3 flex h-6 w-full items-center">
304
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
305
+ Default Font:
306
+ </div>
307
+ <DataCubeEditorDropdownMenuTrigger
308
+ className="w-28"
309
+ onClick={openFontFamilyDropdown}
310
+ >
311
+ {configuration.defaultFontFamily}
312
+ </DataCubeEditorDropdownMenuTrigger>
313
+ <DataCubeEditorDropdownMenu
314
+ className="w-28"
315
+ {...fontFamilyDropdownProps}
316
+ >
317
+ {[
318
+ DataCubeFont.ARIAL,
319
+ DataCubeFont.ROBOTO,
320
+ DataCubeFont.ROBOTO_CONDENSED,
321
+ ].map((font) => (
322
+ <DataCubeEditorDropdownMenuItem
323
+ key={font}
324
+ onClick={() => {
325
+ configuration.setDefaultFontFamily(font);
326
+ closeFontFamilyDropdown();
327
+ }}
328
+ >
329
+ {font}
330
+ </DataCubeEditorDropdownMenuItem>
331
+ ))}
332
+ <DataCubeEditorDropdownMenuItemSeparator />
333
+ {[
334
+ DataCubeFont.GEORGIA,
335
+ DataCubeFont.ROBOTO_SERIF,
336
+ DataCubeFont.TIMES_NEW_ROMAN,
337
+ ].map((font) => (
338
+ <DataCubeEditorDropdownMenuItem
339
+ key={font}
340
+ onClick={() => {
341
+ configuration.setDefaultFontFamily(font);
342
+ closeFontFamilyDropdown();
343
+ }}
344
+ >
345
+ {font}
346
+ </DataCubeEditorDropdownMenuItem>
347
+ ))}
348
+ <DataCubeEditorDropdownMenuItemSeparator />
349
+ {[
350
+ DataCubeFont.JERBRAINS_MONO,
351
+ DataCubeFont.ROBOTO_MONO,
352
+ DataCubeFont.UBUNTU_MONO,
353
+ ].map((font) => (
354
+ <DataCubeEditorDropdownMenuItem
355
+ key={font}
356
+ onClick={() => {
357
+ configuration.setDefaultFontFamily(font);
358
+ closeFontFamilyDropdown();
359
+ }}
360
+ >
361
+ {font}
362
+ </DataCubeEditorDropdownMenuItem>
363
+ ))}
364
+ </DataCubeEditorDropdownMenu>
365
+
366
+ <DataCubeEditorDropdownMenuTrigger
367
+ className="ml-1 w-10"
368
+ onClick={openFontSizeDropdown}
369
+ >
370
+ {configuration.defaultFontSize}
371
+ </DataCubeEditorDropdownMenuTrigger>
372
+ <DataCubeEditorDropdownMenu
373
+ className="w-10"
374
+ {...openFontSizeDropdownProps}
375
+ >
376
+ {[
377
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28,
378
+ 32, 36, 48, 72,
379
+ ].map((size) => (
380
+ <DataCubeEditorDropdownMenuItem
381
+ key={size}
382
+ onClick={() => {
383
+ configuration.setDefaultFontSize(size);
384
+ closeFontSizeDropdown();
385
+ }}
386
+ >
387
+ {size}
388
+ </DataCubeEditorDropdownMenuItem>
389
+ ))}
390
+ </DataCubeEditorDropdownMenu>
391
+
392
+ <div className="relative ml-2 flex h-5">
393
+ <button
394
+ title="Bold"
395
+ className={cn(
396
+ 'relative flex h-5 w-5 items-center justify-center rounded-bl-sm rounded-tl-sm border border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
397
+ {
398
+ 'bg-neutral-200': configuration.defaultFontBold,
399
+ },
400
+ )}
401
+ onClick={() =>
402
+ configuration.setDefaultFontBold(
403
+ !configuration.defaultFontBold,
404
+ )
405
+ }
406
+ >
407
+ <DataCubeIcon.FontBold />
408
+ </button>
409
+ <button
410
+ title="Italic"
411
+ className={cn(
412
+ 'relative -ml-[1px] flex h-5 w-5 items-center justify-center border border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
413
+ {
414
+ 'bg-neutral-200': configuration.defaultFontItalic,
415
+ },
416
+ )}
417
+ onClick={() =>
418
+ configuration.setDefaultFontItalic(
419
+ !configuration.defaultFontItalic,
420
+ )
421
+ }
422
+ >
423
+ <DataCubeIcon.FontItalic />
424
+ </button>
425
+ <button
426
+ title={`Underline${configuration.defaultFontUnderlined ? ` (${configuration.defaultFontUnderlined})` : ''}`}
427
+ className={cn(
428
+ 'relative -ml-[1px] flex h-5 w-5 items-center justify-center border border-r-0 border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
429
+ {
430
+ 'bg-neutral-200':
431
+ configuration.defaultFontUnderlined !== undefined,
432
+ },
433
+ )}
434
+ onClick={() =>
435
+ configuration.setDefaultFontUnderlined(
436
+ configuration.defaultFontUnderlined === undefined
437
+ ? DataCubeFontFormatUnderlinedVariant.SOLID
438
+ : undefined,
439
+ )
440
+ }
441
+ >
442
+ <DataCubeIcon.FontUnderlined />
443
+ </button>
444
+ <button
445
+ className="text-2xs relative -ml-[1px] flex h-5 w-2.5 items-center justify-center border border-neutral-400 border-l-neutral-200 bg-neutral-50 p-0 text-neutral-600 focus-visible:z-[1]"
446
+ onClick={openFontFormatUnderlinedVariantDropdown}
447
+ >
448
+ <DataCubeIcon.CaretDown />
449
+ </button>
450
+ <DataCubeEditorDropdownMenu
451
+ className="w-14"
452
+ {...fontFormatUnderlinedVariantDropdownProps}
453
+ >
454
+ {[
455
+ DataCubeFontFormatUnderlinedVariant.SOLID,
456
+ DataCubeFontFormatUnderlinedVariant.DASHED,
457
+ DataCubeFontFormatUnderlinedVariant.DOTTED,
458
+ DataCubeFontFormatUnderlinedVariant.DOUBLE,
459
+ DataCubeFontFormatUnderlinedVariant.WAVY,
460
+ ].map((variant) => (
461
+ <DataCubeEditorDropdownMenuItem
462
+ className="relative"
463
+ key={variant}
464
+ onClick={() => {
465
+ configuration.setDefaultFontUnderlined(variant);
466
+ closeFontFormatUnderlinedVariantDropdown();
467
+ }}
468
+ >
469
+ <div
470
+ className={cn(
471
+ '!hover:underline absolute top-0 !underline',
472
+ {
473
+ '!hover:decoration-solid !decoration-solid':
474
+ variant ===
475
+ DataCubeFontFormatUnderlinedVariant.SOLID,
476
+ '!hover:decoration-dashed !decoration-dashed':
477
+ variant ===
478
+ DataCubeFontFormatUnderlinedVariant.DASHED,
479
+ '!hover:decoration-dotted !decoration-dotted':
480
+ variant ===
481
+ DataCubeFontFormatUnderlinedVariant.DOTTED,
482
+ '!hover:decoration-double !decoration-double':
483
+ variant ===
484
+ DataCubeFontFormatUnderlinedVariant.DOUBLE,
485
+ '!hover:decoration-wavy !decoration-wavy':
486
+ variant ===
487
+ DataCubeFontFormatUnderlinedVariant.WAVY,
488
+ 'text-sky-600':
489
+ variant === configuration.defaultFontUnderlined,
490
+ },
491
+ )}
492
+ >
493
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
494
+ </div>
495
+ </DataCubeEditorDropdownMenuItem>
496
+ ))}
497
+ </DataCubeEditorDropdownMenu>
498
+ <button
499
+ title="Strikethrough"
500
+ className={cn(
501
+ 'relative -ml-[1px] flex h-5 w-5 items-center justify-center rounded-br-sm rounded-tr-sm border border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
502
+ {
503
+ 'bg-neutral-200': configuration.defaultFontStrikethrough,
504
+ },
505
+ )}
506
+ onClick={() =>
507
+ configuration.setDefaultFontStrikethrough(
508
+ !configuration.defaultFontStrikethrough,
509
+ )
510
+ }
511
+ >
512
+ <DataCubeIcon.FontStrikethrough />
513
+ </button>
514
+ </div>
515
+
516
+ <div className="relative ml-2 flex h-5">
517
+ <button
518
+ title="Align Left"
519
+ className={cn(
520
+ 'relative flex h-5 w-5 items-center justify-center rounded-bl-sm rounded-tl-sm border border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
521
+ {
522
+ 'bg-neutral-200':
523
+ configuration.defaultTextAlign ===
524
+ DataCubeFontTextAlignment.LEFT,
525
+ },
526
+ )}
527
+ onClick={() =>
528
+ configuration.setDefaultTextAlign(
529
+ DataCubeFontTextAlignment.LEFT,
530
+ )
531
+ }
532
+ >
533
+ <DataCubeIcon.TextAlignLeft />
534
+ </button>
535
+ <button
536
+ title="Align Center"
537
+ className={cn(
538
+ 'relative -ml-[1px] flex h-5 w-5 items-center justify-center border border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
539
+ {
540
+ 'bg-neutral-200':
541
+ configuration.defaultTextAlign ===
542
+ DataCubeFontTextAlignment.CENTER,
543
+ },
544
+ )}
545
+ onClick={() =>
546
+ configuration.setDefaultTextAlign(
547
+ DataCubeFontTextAlignment.CENTER,
548
+ )
549
+ }
550
+ >
551
+ <DataCubeIcon.TextAlignCenter />
552
+ </button>
553
+ <button
554
+ title="Align Right"
555
+ className={cn(
556
+ 'relative -ml-[1px] flex h-5 w-5 items-center justify-center rounded-br-sm rounded-tr-sm border border-neutral-400 bg-neutral-50 p-0 text-neutral-700 focus-visible:z-[1]',
557
+ {
558
+ 'bg-neutral-200':
559
+ configuration.defaultTextAlign ===
560
+ DataCubeFontTextAlignment.RIGHT,
561
+ },
562
+ )}
563
+ onClick={() =>
564
+ configuration.setDefaultTextAlign(
565
+ DataCubeFontTextAlignment.RIGHT,
566
+ )
567
+ }
568
+ >
569
+ <DataCubeIcon.TextAlignRight />
570
+ </button>
571
+ </div>
572
+ </div>
573
+
574
+ <div className="mt-2 flex w-full">
575
+ <div className="flex h-6 w-32 flex-shrink-0 items-center text-sm">
576
+ Default Colors:
577
+ </div>
578
+ <div className="h-18">
579
+ <div className="flex h-6">
580
+ <div className="w-16 flex-shrink-0" />
581
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
582
+ Normal
583
+ </div>
584
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
585
+ Negative
586
+ </div>
587
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
588
+ Zero
589
+ </div>
590
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
591
+ Error
592
+ </div>
593
+ </div>
594
+ <div className="flex h-6">
595
+ <div className="flex h-full w-16 flex-shrink-0 items-center text-sm">
596
+ Foreground:
597
+ </div>
598
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
599
+ <DataCubeEditorColorPickerButton
600
+ color={configuration.defaultForegroundColor}
601
+ defaultColor={DEFAULT_FOREGROUND_COLOR}
602
+ onChange={(value) =>
603
+ configuration.setDefaultForegroundColor(value)
604
+ }
605
+ />
606
+ </div>
607
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
608
+ <DataCubeEditorColorPickerButton
609
+ color={configuration.defaultForegroundNegativeColor}
610
+ defaultColor={DEFAULT_NEGATIVE_FOREGROUND_COLOR}
611
+ onChange={(value) =>
612
+ configuration.setDefaultForegroundNegativeColor(value)
613
+ }
614
+ />
615
+ </div>
616
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
617
+ <DataCubeEditorColorPickerButton
618
+ color={configuration.defaultForegroundZeroColor}
619
+ defaultColor={DEFAULT_ZERO_FOREGROUND_COLOR}
620
+ onChange={(value) =>
621
+ configuration.setDefaultForegroundZeroColor(value)
622
+ }
623
+ />
624
+ </div>
625
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
626
+ <DataCubeEditorColorPickerButton
627
+ color={configuration.defaultForegroundErrorColor}
628
+ defaultColor={DEFAULT_ERROR_FOREGROUND_COLOR}
629
+ onChange={(value) =>
630
+ configuration.setDefaultForegroundErrorColor(value)
631
+ }
632
+ />
633
+ </div>
634
+ </div>
635
+ <div className="flex h-6">
636
+ <div className="flex h-full w-16 flex-shrink-0 items-center text-sm">
637
+ Background:
638
+ </div>
639
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
640
+ <DataCubeEditorColorPickerButton
641
+ color={configuration.defaultBackgroundColor}
642
+ defaultColor={DEFAULT_BACKGROUND_COLOR}
643
+ onChange={(value) =>
644
+ configuration.setDefaultBackgroundColor(value)
645
+ }
646
+ />
647
+ </div>
648
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
649
+ <DataCubeEditorColorPickerButton
650
+ color={configuration.defaultBackgroundNegativeColor}
651
+ defaultColor={DEFAULT_BACKGROUND_COLOR}
652
+ onChange={(value) =>
653
+ configuration.setDefaultBackgroundNegativeColor(value)
654
+ }
655
+ />
656
+ </div>
657
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
658
+ <DataCubeEditorColorPickerButton
659
+ color={configuration.defaultBackgroundZeroColor}
660
+ defaultColor={DEFAULT_BACKGROUND_COLOR}
661
+ onChange={(value) =>
662
+ configuration.setDefaultBackgroundZeroColor(value)
663
+ }
664
+ />
665
+ </div>
666
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
667
+ <DataCubeEditorColorPickerButton
668
+ color={configuration.defaultBackgroundErrorColor}
669
+ defaultColor={DEFAULT_BACKGROUND_COLOR}
670
+ onChange={(value) =>
671
+ configuration.setDefaultBackgroundErrorColor(value)
672
+ }
673
+ />
674
+ </div>
675
+ </div>
676
+ </div>
677
+ </div>
678
+
679
+ <div className="mt-3 flex h-4 w-full items-center">
680
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
681
+ Hightlight Rows:
682
+ </div>
683
+ <DataCubeEditorCheckbox
684
+ label="Alternate color every"
685
+ checked={configuration.alternateRows}
686
+ onChange={() =>
687
+ configuration.setAlternateRows(!configuration.alternateRows)
688
+ }
689
+ />
690
+ <DataCubeEditorNumberInput
691
+ className="ml-1.5 w-14 text-sm"
692
+ disabled={!configuration.alternateRows}
693
+ min={1}
694
+ step={1}
695
+ defaultValue={1}
696
+ isValid={(value) => value !== undefined && value > 0}
697
+ value={configuration.alternateRowsCount}
698
+ setValue={(value) =>
699
+ configuration.setAlternateRowsCount(value ?? 1)
700
+ }
701
+ />
702
+ <div className="ml-1.5 flex-shrink-0 text-sm">{`row(s)`}</div>
703
+ <DataCubeEditorColorPickerButton
704
+ className="ml-[5px]"
705
+ disabled={!configuration.alternateRows}
706
+ color={configuration.alternateRowsColor}
707
+ defaultColor={DEFAULT_ROW_HIGHLIGHT_BACKGROUND_COLOR}
708
+ onChange={(value) =>
709
+ configuration.setDefaultBackgroundErrorColor(value)
710
+ }
711
+ />
712
+ </div>
713
+ </div>
45
714
  </div>
46
715
  </div>
47
716
  );