@finos/legend-application-repl 0.0.31 → 0.0.32

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 (170) hide show
  1. package/lib/components/LegendREPLFrameworkProvider.js +1 -1
  2. package/lib/components/LegendREPLFrameworkProvider.js.map +1 -1
  3. package/lib/components/REPLStoreProvider.d.ts +1 -1
  4. package/lib/components/REPLStoreProvider.d.ts.map +1 -1
  5. package/lib/components/REPLStoreProvider.js +1 -1
  6. package/lib/components/REPLStoreProvider.js.map +1 -1
  7. package/lib/components/REPLWindow.d.ts +33 -0
  8. package/lib/components/REPLWindow.d.ts.map +1 -0
  9. package/lib/components/REPLWindow.js +117 -0
  10. package/lib/components/REPLWindow.js.map +1 -0
  11. package/lib/components/dataCube/DataCube.js +1 -1
  12. package/lib/components/dataCube/DataCube.js.map +1 -1
  13. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  14. package/lib/components/dataCube/editor/DataCubeEditor.js +12 -91
  15. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  16. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts.map +1 -1
  17. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js +3 -2
  18. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js.map +1 -1
  19. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
  20. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +161 -87
  21. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
  22. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +1 -1
  23. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
  24. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
  25. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +0 -1
  26. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
  27. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts.map +1 -1
  28. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js +3 -2
  29. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js.map +1 -1
  30. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +1 -1
  31. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +3 -2
  32. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +1 -1
  33. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts.map +1 -1
  34. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js +3 -2
  35. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js.map +1 -1
  36. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -1
  37. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +96 -55
  38. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -1
  39. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.d.ts.map +1 -1
  40. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js +3 -2
  41. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js.map +1 -1
  42. package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts +1 -0
  43. package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts.map +1 -1
  44. package/lib/components/dataCube/editor/DataCubeEditorShared.js +44 -27
  45. package/lib/components/dataCube/editor/DataCubeEditorShared.js.map +1 -1
  46. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +1 -1
  47. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -1
  48. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.d.ts.map +1 -1
  49. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js +3 -2
  50. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js.map +1 -1
  51. package/lib/components/dataCube/grid/DataCubeGrid.d.ts +3 -0
  52. package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
  53. package/lib/components/dataCube/grid/DataCubeGrid.js +186 -75
  54. package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
  55. package/lib/components/dataCube/grid/DataCubeGridShared.d.ts +1 -1
  56. package/lib/components/dataCube/grid/DataCubeGridShared.d.ts.map +1 -1
  57. package/lib/components/dataCube/grid/DataCubeGridShared.js +1 -1
  58. package/lib/components/dataCube/grid/DataCubeGridShared.js.map +1 -1
  59. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts.map +1 -1
  60. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js +60 -29
  61. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js.map +1 -1
  62. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts.map +1 -1
  63. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js +10 -10
  64. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js.map +1 -1
  65. package/lib/index.css +2 -2
  66. package/lib/index.css.map +1 -1
  67. package/lib/package.json +14 -14
  68. package/lib/stores/{dataCube/REPLStore.d.ts → REPLStore.d.ts} +5 -3
  69. package/lib/stores/REPLStore.d.ts.map +1 -0
  70. package/lib/stores/{dataCube/REPLStore.js → REPLStore.js} +5 -2
  71. package/lib/stores/REPLStore.js.map +1 -0
  72. package/lib/stores/dataCube/{core/DataCubeEngine.d.ts → DataCubeInfrastructure.d.ts} +20 -4
  73. package/lib/stores/dataCube/DataCubeInfrastructure.d.ts.map +1 -0
  74. package/lib/stores/dataCube/{core/DataCubeEngine.js → DataCubeInfrastructure.js} +31 -3
  75. package/lib/stores/dataCube/DataCubeInfrastructure.js.map +1 -0
  76. package/lib/stores/dataCube/DataCubeState.d.ts +4 -4
  77. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  78. package/lib/stores/dataCube/DataCubeState.js +7 -8
  79. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  80. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts +42 -38
  81. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts.map +1 -1
  82. package/lib/stores/dataCube/core/DataCubeConfiguration.js +84 -78
  83. package/lib/stores/dataCube/core/DataCubeConfiguration.js.map +1 -1
  84. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts.map +1 -1
  85. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js +2 -1
  86. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js.map +1 -1
  87. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts +1 -1
  88. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts.map +1 -1
  89. package/lib/stores/dataCube/core/DataCubeCoreState.js +1 -1
  90. package/lib/stores/dataCube/core/DataCubeCoreState.js.map +1 -1
  91. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +6 -6
  92. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  93. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +46 -29
  94. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
  95. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +68 -50
  96. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
  97. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
  98. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +5 -5
  99. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
  100. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts +1 -3
  101. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts.map +1 -1
  102. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js +2 -3
  103. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js.map +1 -1
  104. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +3 -0
  105. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -1
  106. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +9 -0
  107. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
  108. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +8 -7
  109. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  110. package/lib/stores/dataCube/editor/DataCubeEditorState.js +21 -17
  111. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  112. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +43 -38
  113. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -1
  114. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +209 -128
  115. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -1
  116. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts +32 -0
  117. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  118. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +34 -1
  119. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  120. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts +4 -1
  121. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
  122. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +327 -36
  123. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
  124. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +16 -2
  125. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
  126. package/lib/stores/dataCube/grid/DataCubeGridState.js +51 -21
  127. package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
  128. package/package.json +20 -20
  129. package/src/components/LegendREPLFrameworkProvider.tsx +1 -1
  130. package/src/components/REPLStoreProvider.tsx +1 -1
  131. package/src/components/REPLWindow.tsx +179 -0
  132. package/src/components/dataCube/DataCube.tsx +1 -1
  133. package/src/components/dataCube/editor/DataCubeEditor.tsx +79 -190
  134. package/src/components/dataCube/editor/DataCubeEditorCodePanel.tsx +3 -1
  135. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +480 -279
  136. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +1 -1
  137. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +0 -1
  138. package/src/components/dataCube/editor/DataCubeEditorDeveloperPanel.tsx +3 -1
  139. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +3 -1
  140. package/src/components/dataCube/editor/DataCubeEditorFilterPanel.tsx +3 -1
  141. package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +235 -174
  142. package/src/components/dataCube/editor/DataCubeEditorHPivotsPanel.tsx +3 -1
  143. package/src/components/dataCube/editor/DataCubeEditorShared.tsx +69 -33
  144. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +1 -1
  145. package/src/components/dataCube/editor/DataCubeEditorVPivotsPanel.tsx +3 -1
  146. package/src/components/dataCube/grid/DataCubeGrid.tsx +310 -149
  147. package/src/components/dataCube/grid/DataCubeGridShared.tsx +5 -1
  148. package/src/components/dataCube/grid/menu/DataCubeGridMenu.tsx +76 -29
  149. package/src/components/dataCube/grid/menu/DataCubeGridSortsMenu.tsx +10 -11
  150. package/src/stores/{dataCube/REPLStore.ts → REPLStore.ts} +6 -3
  151. package/src/stores/dataCube/{core/DataCubeEngine.ts → DataCubeInfrastructure.ts} +40 -3
  152. package/src/stores/dataCube/DataCubeState.ts +9 -9
  153. package/src/stores/dataCube/core/DataCubeConfiguration.ts +106 -86
  154. package/src/stores/dataCube/core/DataCubeConfigurationBuilder.ts +5 -1
  155. package/src/stores/dataCube/core/DataCubeCoreState.ts +4 -1
  156. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +11 -11
  157. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +70 -49
  158. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +6 -7
  159. package/src/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.ts +6 -5
  160. package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +14 -0
  161. package/src/stores/dataCube/editor/DataCubeEditorState.ts +26 -19
  162. package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +247 -139
  163. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +55 -1
  164. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.tsx +491 -43
  165. package/src/stores/dataCube/grid/DataCubeGridState.ts +73 -20
  166. package/tsconfig.json +3 -2
  167. package/lib/stores/dataCube/REPLStore.d.ts.map +0 -1
  168. package/lib/stores/dataCube/REPLStore.js.map +0 -1
  169. package/lib/stores/dataCube/core/DataCubeEngine.d.ts.map +0 -1
  170. package/lib/stores/dataCube/core/DataCubeEngine.js.map +0 -1
@@ -18,6 +18,7 @@ import { cn, DataCubeIcon, useDropdownMenu } from '@finos/legend-art';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import { useREPLStore } from '../../REPLStoreProvider.js';
20
20
  import {
21
+ Advanced_Badge,
21
22
  DataCubeEditorCheckbox,
22
23
  DataCubeEditorColorPickerButton,
23
24
  DataCubeEditorDropdownMenu,
@@ -31,28 +32,29 @@ import {
31
32
  import {
32
33
  DataCubeAggregateFunction,
33
34
  DataCubeColumnDataType,
35
+ DataCubeColumnKind,
34
36
  DataCubeColumnPinPlacement,
35
37
  DataCubeFont,
36
- DataCubeFontFormatUnderlinedVariant,
38
+ DataCubeFontCase,
39
+ DataCubeFontFormatUnderlineVariant,
37
40
  DataCubeFontTextAlignment,
38
41
  DataCubeNumberScale,
39
- DEFAULT_BACKGROUND_COLOR,
40
42
  DEFAULT_COLUMN_MAX_WIDTH,
41
43
  DEFAULT_COLUMN_MIN_WIDTH,
42
44
  DEFAULT_COLUMN_WIDTH,
43
- DEFAULT_ERROR_FOREGROUND_COLOR,
44
- DEFAULT_FOREGROUND_COLOR,
45
- DEFAULT_NEGATIVE_FOREGROUND_COLOR,
46
- DEFAULT_ZERO_FOREGROUND_COLOR,
45
+ DEFAULT_URL_LABEL_QUERY_PARAM,
47
46
  } from '../../../stores/dataCube/core/DataCubeQueryEngine.js';
48
47
 
49
48
  export const DataCubeEditorColumnPropertiesPanel = observer(() => {
50
49
  const replStore = useREPLStore();
51
50
  const dataCube = replStore.dataCube;
52
- const panel = dataCube.editor.columnPropertiesPanel;
51
+ const panel = dataCube.editor.columnProperties;
52
+ const gridConfiguration = dataCube.editor.generalProperties.configuration;
53
53
  const selectedColumn = panel.selectedColumn;
54
54
  const [openColumnsDropdown, closeColumnsDropdown, columnsDropdownProps] =
55
55
  useDropdownMenu();
56
+ const [openKindDropdown, closeKindDropdown, kindDropdownProps] =
57
+ useDropdownMenu();
56
58
  const [
57
59
  openAggregationTypeDropdown,
58
60
  closeAggregationTypeDropdown,
@@ -74,25 +76,39 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
74
76
  openFontSizeDropdownProps,
75
77
  ] = useDropdownMenu();
76
78
  const [
77
- openFontFormatUnderlinedVariantDropdown,
78
- closeFontFormatUnderlinedVariantDropdown,
79
- fontFormatUnderlinedVariantDropdownProps,
79
+ openFontFormatUnderlineVariantDropdown,
80
+ closeFontFormatUnderlineVariantDropdown,
81
+ fontFormatUnderlineVariantDropdownProps,
80
82
  ] = useDropdownMenu();
81
83
  const [
82
84
  openColumnPinDropdown,
83
85
  closeColumnPinDropdown,
84
86
  columnPinDropdownProps,
85
87
  ] = useDropdownMenu();
88
+ const [openFontCaseDropdown, closeFontCaseDropdown, fontCaseDropdownProps] =
89
+ useDropdownMenu();
86
90
 
87
91
  return (
88
92
  <div className="h-full w-full select-none p-2">
89
- <div className="flex h-6">
90
- <div className="relative flex h-6 items-center text-xl font-medium">
91
- <DataCubeIcon.TableColumn />
92
- <DataCubeIcon.TableColumnOptions__Settings className="absolute bottom-1 right-0 bg-white text-xs" />
93
+ <div className="flex h-6 justify-between">
94
+ <div className="flex h-full">
95
+ <div className="relative flex h-6 items-center text-xl font-medium">
96
+ <DataCubeIcon.TableColumn />
97
+ <DataCubeIcon.TableColumnOptions__Settings className="absolute bottom-1 right-0 bg-white text-xs" />
98
+ </div>
99
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
100
+ Column Properties
101
+ </div>
93
102
  </div>
94
- <div className="ml-1 flex h-6 items-center text-xl font-medium">
95
- Column Properties
103
+ <div className="flex h-full items-center pr-2">
104
+ <DataCubeEditorCheckbox
105
+ label="Show advanced settings"
106
+ checked={panel.showAdvancedSettings}
107
+ onChange={() =>
108
+ panel.setShowAdvancedSettings(!panel.showAdvancedSettings)
109
+ }
110
+ />
111
+ <Advanced_Badge />
96
112
  </div>
97
113
  </div>
98
114
  <div className="flex h-[calc(100%_-_24px)] w-full">
@@ -105,7 +121,16 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
105
121
  className="w-80"
106
122
  onClick={openColumnsDropdown}
107
123
  >
108
- {selectedColumn?.name ?? '(None)'}
124
+ <div className="flex h-full w-full items-center">
125
+ <div className="overflow-hidden overflow-ellipsis whitespace-nowrap">
126
+ {selectedColumn?.name ?? '(None)'}
127
+ </div>
128
+ {selectedColumn && (
129
+ <div className="ml-1.5 mr-0.5 flex h-3.5 w-12 flex-shrink-0 items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-xs font-medium uppercase text-neutral-600">
130
+ {selectedColumn.dataType}
131
+ </div>
132
+ )}
133
+ </div>
109
134
  </DataCubeEditorDropdownMenuTrigger>
110
135
  <DataCubeEditorDropdownMenu
111
136
  className="w-80"
@@ -119,23 +144,50 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
119
144
  closeColumnsDropdown();
120
145
  }}
121
146
  >
122
- {column.name}
147
+ <div className="overflow-hidden overflow-ellipsis whitespace-nowrap">
148
+ {column.name}
149
+ </div>
150
+ <div className="ml-1.5 mr-0.5 flex h-3.5 w-12 flex-shrink-0 items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-xs font-medium uppercase text-neutral-600">
151
+ {column.dataType}
152
+ </div>
123
153
  </DataCubeEditorDropdownMenuItem>
124
154
  ))}
125
155
  </DataCubeEditorDropdownMenu>
126
- {selectedColumn && (
127
- // TODO: if this is an extended column, show the info and link it
128
- // e.g. `Extended Column (Leaf)`, `Extended Column (Group)`
129
- // with arrow button to go to the extended column editor
156
+ {panel.showAdvancedSettings && selectedColumn && (
130
157
  <>
131
- <div className="ml-2 h-[1px] w-4 bg-neutral-400" />
132
- <div className="ml-2 flex h-4 items-center justify-center rounded-sm border border-neutral-500 px-2 font-mono text-sm font-medium text-neutral-500">
133
- <div className="mr-1.5 flex h-full items-center uppercase">
134
- {selectedColumn.dataType}
158
+ <div className="mx-2 h-[1px] w-4 flex-shrink-0 bg-neutral-400" />
159
+ <div className="flex h-6 items-center">
160
+ <div className="flex h-full flex-shrink-0 items-center text-sm">
161
+ Kind:
135
162
  </div>
136
- <div className="flex h-full items-center border-l border-l-neutral-500 pl-1.5 uppercase">
163
+ <DataCubeEditorDropdownMenuTrigger
164
+ className="ml-1 w-20"
165
+ onClick={openKindDropdown}
166
+ disabled={true}
167
+ >
137
168
  {selectedColumn.kind}
138
- </div>
169
+ </DataCubeEditorDropdownMenuTrigger>
170
+ <DataCubeEditorDropdownMenu
171
+ className="w-20"
172
+ {...kindDropdownProps}
173
+ >
174
+ {[
175
+ DataCubeColumnKind.DIMENSION,
176
+ DataCubeColumnKind.MEASURE,
177
+ ].map((kind) => (
178
+ <DataCubeEditorDropdownMenuItem
179
+ key={kind}
180
+ onClick={() => {
181
+ selectedColumn.setKind(kind);
182
+ closeKindDropdown();
183
+ }}
184
+ >
185
+ {kind}
186
+ </DataCubeEditorDropdownMenuItem>
187
+ ))}
188
+ </DataCubeEditorDropdownMenu>
189
+ <Advanced_Badge />
190
+ <WIP_Badge />
139
191
  </div>
140
192
  </>
141
193
  )}
@@ -145,7 +197,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
145
197
 
146
198
  {selectedColumn && (
147
199
  <>
148
- <div className="mt-3 flex h-6 w-full items-center">
200
+ <div className="mt-2 flex h-5 w-full items-center">
149
201
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
150
202
  Display Name:
151
203
  </div>
@@ -163,7 +215,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
163
215
 
164
216
  {selectedColumn.dataType === DataCubeColumnDataType.NUMBER && (
165
217
  <>
166
- <div className="mt-2 flex h-6 w-full items-center">
218
+ <div className="mt-2 flex h-5 w-full items-center">
167
219
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
168
220
  Number Format:
169
221
  </div>
@@ -201,7 +253,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
201
253
  />
202
254
  </div>
203
255
 
204
- <div className="mt-2 flex h-6 w-full items-center">
256
+ <div className="mt-2 flex h-5 w-full items-center">
205
257
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
206
258
  Number Scale:
207
259
  </div>
@@ -222,6 +274,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
222
274
  DataCubeNumberScale.THOUSANDS,
223
275
  DataCubeNumberScale.MILLIONS,
224
276
  DataCubeNumberScale.BILLIONS,
277
+ DataCubeNumberScale.TRILLIONS,
225
278
  DataCubeNumberScale.AUTO,
226
279
  ].map((scale) => (
227
280
  <DataCubeEditorDropdownMenuItem
@@ -237,7 +290,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
237
290
  </DataCubeEditorDropdownMenu>
238
291
  </div>
239
292
 
240
- <div className="mt-2 flex h-6 w-full items-center">
293
+ <div className="mt-2 flex h-5 w-full items-center">
241
294
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
242
295
  Aggregation Type:
243
296
  </div>
@@ -271,20 +324,9 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
271
324
  ))}
272
325
  </DataCubeEditorDropdownMenu>
273
326
  <WIP_Badge />
274
- <div className="ml-2 h-[1px] w-4 bg-neutral-400" />
275
- <div className="mx-2 flex h-full flex-shrink-0 items-center text-sm">
276
- Weight Column:
277
- </div>
278
- <DataCubeEditorDropdownMenuTrigger
279
- className="w-32"
280
- disabled={true}
281
- >
282
- {selectedColumn.weightColumn ?? '(None)'}
283
- </DataCubeEditorDropdownMenuTrigger>
284
- <WIP_Badge />
285
327
  </div>
286
328
 
287
- <div className="mt-2 flex h-4 w-full items-center">
329
+ <div className="mt-2 flex h-5 w-full items-center">
288
330
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
289
331
  Exclude from HPivot?
290
332
  </div>
@@ -304,7 +346,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
304
346
 
305
347
  {selectedColumn.dataType === DataCubeColumnDataType.TEXT && (
306
348
  <>
307
- <div className="mt-2 flex h-4 w-full items-center">
349
+ <div className="mt-2 flex h-5 w-full items-center">
308
350
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
309
351
  Dislay as Link?
310
352
  </div>
@@ -316,13 +358,194 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
316
358
  )
317
359
  }
318
360
  />
361
+ <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
362
+ <div className="ml-2 mr-1.5 flex h-full flex-shrink-0 items-center text-sm">
363
+ Use Parameter in Link as Label:
364
+ </div>
365
+ <DataCubeEditorTextInput
366
+ className="w-48"
367
+ placeholder={DEFAULT_URL_LABEL_QUERY_PARAM}
368
+ value={selectedColumn.linkLabelParameter ?? ''}
369
+ onChange={(event) => {
370
+ const value = event.target.value.trim();
371
+ selectedColumn.setLinkLabelParameter(
372
+ value !== '' ? value : undefined,
373
+ );
374
+ }}
375
+ />
319
376
  </div>
320
377
  </>
321
378
  )}
322
379
 
380
+ <div className="mt-2 flex h-5 w-full items-center">
381
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
382
+ Visibility:
383
+ </div>
384
+ <DataCubeEditorCheckbox
385
+ label="Blur content"
386
+ checked={selectedColumn.blur}
387
+ onChange={() => selectedColumn.setBlur(!selectedColumn.blur)}
388
+ disabled={selectedColumn.hideFromView}
389
+ />
390
+ <DataCubeEditorCheckbox
391
+ className="ml-3"
392
+ label="Hide from view"
393
+ checked={selectedColumn.hideFromView}
394
+ onChange={() =>
395
+ selectedColumn.setHideFromView(!selectedColumn.hideFromView)
396
+ }
397
+ disabled={true}
398
+ />
399
+ <WIP_Badge />
400
+ </div>
401
+
402
+ <div className="mt-2 flex h-5 w-full items-center">
403
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
404
+ Pin:
405
+ </div>
406
+ <DataCubeEditorDropdownMenuTrigger
407
+ className="w-14"
408
+ onClick={openColumnPinDropdown}
409
+ >
410
+ {selectedColumn.pinned ?? '(None)'}
411
+ </DataCubeEditorDropdownMenuTrigger>
412
+ <DataCubeEditorDropdownMenu
413
+ className="w-14"
414
+ {...columnPinDropdownProps}
415
+ >
416
+ {[
417
+ undefined,
418
+ DataCubeColumnPinPlacement.LEFT,
419
+ DataCubeColumnPinPlacement.RIGHT,
420
+ ].map((placement) => (
421
+ <DataCubeEditorDropdownMenuItem
422
+ key={placement ?? ''}
423
+ onClick={() => {
424
+ selectedColumn.setPinned(placement);
425
+ closeColumnPinDropdown();
426
+ }}
427
+ >
428
+ {placement ?? '(None)'}
429
+ </DataCubeEditorDropdownMenuItem>
430
+ ))}
431
+ </DataCubeEditorDropdownMenu>
432
+ </div>
433
+
434
+ <div className="mt-1.5 flex h-6 w-full items-center">
435
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
436
+ Width:
437
+ </div>
438
+ <DataCubeEditorCheckbox
439
+ label="(Any)"
440
+ checked={
441
+ selectedColumn.fixedWidth === undefined &&
442
+ selectedColumn.minWidth === undefined &&
443
+ selectedColumn.maxWidth === undefined
444
+ }
445
+ onChange={() => {
446
+ if (
447
+ selectedColumn.fixedWidth === undefined &&
448
+ selectedColumn.minWidth === undefined &&
449
+ selectedColumn.maxWidth === undefined
450
+ ) {
451
+ selectedColumn.setFixedWidth(DEFAULT_COLUMN_WIDTH);
452
+ selectedColumn.setMinWidth(undefined);
453
+ selectedColumn.setMaxWidth(undefined);
454
+ } else {
455
+ selectedColumn.setFixedWidth(undefined);
456
+ selectedColumn.setMinWidth(undefined);
457
+ selectedColumn.setMaxWidth(undefined);
458
+ }
459
+ }}
460
+ />
461
+
462
+ <DataCubeEditorCheckbox
463
+ className="ml-3"
464
+ label="Fixed"
465
+ checked={selectedColumn.fixedWidth !== undefined}
466
+ onChange={() => {
467
+ selectedColumn.setFixedWidth(
468
+ selectedColumn.fixedWidth !== undefined
469
+ ? undefined
470
+ : DEFAULT_COLUMN_WIDTH,
471
+ );
472
+ selectedColumn.setMinWidth(undefined);
473
+ selectedColumn.setMaxWidth(undefined);
474
+ }}
475
+ />
476
+ <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
477
+ <DataCubeEditorNumberInput
478
+ className="ml-1 w-16 text-sm"
479
+ min={0}
480
+ step={50}
481
+ defaultValue={undefined}
482
+ isValid={(value) => value !== undefined && value > 0}
483
+ value={selectedColumn.fixedWidth}
484
+ setValue={(value) => {
485
+ selectedColumn.setFixedWidth(value);
486
+ }}
487
+ disabled={
488
+ selectedColumn.minWidth !== undefined ||
489
+ selectedColumn.maxWidth !== undefined
490
+ }
491
+ />
492
+
493
+ <DataCubeEditorCheckbox
494
+ className="ml-3"
495
+ label="In range"
496
+ checked={
497
+ selectedColumn.minWidth !== undefined ||
498
+ selectedColumn.maxWidth !== undefined
499
+ }
500
+ onChange={() => {
501
+ if (
502
+ selectedColumn.minWidth === undefined &&
503
+ selectedColumn.maxWidth === undefined
504
+ ) {
505
+ selectedColumn.setMinWidth(DEFAULT_COLUMN_MIN_WIDTH);
506
+ selectedColumn.setMaxWidth(DEFAULT_COLUMN_MAX_WIDTH);
507
+ selectedColumn.setFixedWidth(undefined);
508
+ } else {
509
+ selectedColumn.setMinWidth(undefined);
510
+ selectedColumn.setMaxWidth(undefined);
511
+ selectedColumn.setFixedWidth(undefined);
512
+ }
513
+ }}
514
+ />
515
+ <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
516
+ <DataCubeEditorNumberInput
517
+ className="ml-1 w-16 text-sm"
518
+ min={0}
519
+ step={50}
520
+ defaultValue={undefined}
521
+ isValid={(value) => value !== undefined && value > 0}
522
+ value={selectedColumn.minWidth}
523
+ setValue={(value) => {
524
+ selectedColumn.setMinWidth(value);
525
+ }}
526
+ disabled={selectedColumn.fixedWidth !== undefined}
527
+ />
528
+ <div className="ml-1 h-[1px] w-1 flex-shrink-0 bg-neutral-400" />
529
+ <DataCubeEditorNumberInput
530
+ className="ml-1 w-16 text-sm"
531
+ min={selectedColumn.minWidth ?? 0}
532
+ step={50}
533
+ defaultValue={undefined}
534
+ isValid={(value) =>
535
+ value !== undefined &&
536
+ value >= (selectedColumn.minWidth ?? 0)
537
+ }
538
+ value={selectedColumn.maxWidth}
539
+ setValue={(value) => {
540
+ selectedColumn.setMaxWidth(value);
541
+ }}
542
+ disabled={selectedColumn.fixedWidth !== undefined}
543
+ />
544
+ </div>
545
+
323
546
  <div className="my-2 h-[1px] w-full bg-neutral-200" />
324
547
 
325
- <div className="mt-3 flex h-6 w-full items-center">
548
+ <div className="mt-2 flex h-5 w-full items-center">
326
549
  <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
327
550
  Font:
328
551
  </div>
@@ -330,7 +553,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
330
553
  className="w-28"
331
554
  onClick={openFontFamilyDropdown}
332
555
  >
333
- {selectedColumn.fontFamily}
556
+ {selectedColumn.fontFamily ?? gridConfiguration.fontFamily}
334
557
  </DataCubeEditorDropdownMenuTrigger>
335
558
  <DataCubeEditorDropdownMenu
336
559
  className="w-28"
@@ -389,7 +612,7 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
389
612
  className="ml-1 w-10"
390
613
  onClick={openFontSizeDropdown}
391
614
  >
392
- {selectedColumn.fontSize}
615
+ {selectedColumn.fontSize ?? gridConfiguration.fontSize}
393
616
  </DataCubeEditorDropdownMenuTrigger>
394
617
  <DataCubeEditorDropdownMenu
395
618
  className="w-10"
@@ -417,11 +640,16 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
417
640
  className={cn(
418
641
  '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]',
419
642
  {
420
- 'bg-neutral-200': selectedColumn.fontBold,
643
+ 'bg-neutral-200':
644
+ selectedColumn.fontBold ?? gridConfiguration.fontBold,
421
645
  },
422
646
  )}
423
647
  onClick={() =>
424
- selectedColumn.setFontBold(!selectedColumn.fontBold)
648
+ selectedColumn.setFontBold(
649
+ !(
650
+ selectedColumn.fontBold ?? gridConfiguration.fontBold
651
+ ),
652
+ )
425
653
  }
426
654
  >
427
655
  <DataCubeIcon.FontBold />
@@ -431,57 +659,79 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
431
659
  className={cn(
432
660
  '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]',
433
661
  {
434
- 'bg-neutral-200': selectedColumn.fontItalic,
662
+ 'bg-neutral-200':
663
+ selectedColumn.fontItalic ??
664
+ gridConfiguration.fontItalic,
435
665
  },
436
666
  )}
437
667
  onClick={() =>
438
- selectedColumn.setFontItalic(!selectedColumn.fontItalic)
668
+ selectedColumn.setFontItalic(
669
+ !(
670
+ selectedColumn.fontItalic ??
671
+ gridConfiguration.fontItalic
672
+ ),
673
+ )
439
674
  }
440
675
  >
441
676
  <DataCubeIcon.FontItalic />
442
677
  </button>
443
678
  <button
444
- title={`Underline${selectedColumn.fontUnderlined ? ` (${selectedColumn.fontUnderlined})` : ''}`}
679
+ title={`Underline${selectedColumn.fontUnderline ?? gridConfiguration.fontUnderline ? ` (${selectedColumn.fontUnderline ?? gridConfiguration.fontUnderline})` : ''}`}
445
680
  className={cn(
446
681
  '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]',
447
682
  {
448
683
  'bg-neutral-200':
449
- selectedColumn.fontUnderlined !== undefined,
684
+ (selectedColumn.fontUnderline ??
685
+ gridConfiguration.fontUnderline) !== undefined,
450
686
  },
451
687
  )}
452
- onClick={() =>
453
- selectedColumn.setFontUnderlined(
454
- selectedColumn.fontUnderlined === undefined
455
- ? DataCubeFontFormatUnderlinedVariant.SOLID
456
- : undefined,
457
- )
458
- }
688
+ onClick={() => {
689
+ if (
690
+ (selectedColumn.fontUnderline ??
691
+ gridConfiguration.fontUnderline) === undefined
692
+ ) {
693
+ selectedColumn.setFontUnderline(
694
+ DataCubeFontFormatUnderlineVariant.SOLID,
695
+ );
696
+ selectedColumn.setFontStrikethrough(false);
697
+ } else {
698
+ selectedColumn.setFontUnderline(undefined);
699
+ }
700
+ }}
459
701
  >
460
- <DataCubeIcon.FontUnderlined />
702
+ <DataCubeIcon.FontUnderline />
461
703
  </button>
462
704
  <button
463
- 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]"
464
- onClick={openFontFormatUnderlinedVariantDropdown}
705
+ className="text-2xs relative -ml-[1px] flex h-5 w-2.5 items-center justify-center border border-l-0 border-neutral-400 bg-neutral-50 p-0 text-neutral-600 focus-visible:z-[1]"
706
+ onClick={openFontFormatUnderlineVariantDropdown}
465
707
  >
708
+ <div
709
+ className={cn('h-4 w-[0.5px] bg-neutral-200', {
710
+ 'opacity-0':
711
+ (selectedColumn.fontUnderline ??
712
+ gridConfiguration.fontUnderline) !== undefined,
713
+ })}
714
+ />
466
715
  <DataCubeIcon.CaretDown />
467
716
  </button>
468
717
  <DataCubeEditorDropdownMenu
469
718
  className="w-14"
470
- {...fontFormatUnderlinedVariantDropdownProps}
719
+ {...fontFormatUnderlineVariantDropdownProps}
471
720
  >
472
721
  {[
473
- DataCubeFontFormatUnderlinedVariant.SOLID,
474
- DataCubeFontFormatUnderlinedVariant.DASHED,
475
- DataCubeFontFormatUnderlinedVariant.DOTTED,
476
- DataCubeFontFormatUnderlinedVariant.DOUBLE,
477
- DataCubeFontFormatUnderlinedVariant.WAVY,
722
+ DataCubeFontFormatUnderlineVariant.SOLID,
723
+ DataCubeFontFormatUnderlineVariant.DASHED,
724
+ DataCubeFontFormatUnderlineVariant.DOTTED,
725
+ DataCubeFontFormatUnderlineVariant.DOUBLE,
726
+ DataCubeFontFormatUnderlineVariant.WAVY,
478
727
  ].map((variant) => (
479
728
  <DataCubeEditorDropdownMenuItem
480
729
  className="relative"
481
730
  key={variant}
482
731
  onClick={() => {
483
- selectedColumn.setFontUnderlined(variant);
484
- closeFontFormatUnderlinedVariantDropdown();
732
+ selectedColumn.setFontUnderline(variant);
733
+ selectedColumn.setFontStrikethrough(false);
734
+ closeFontFormatUnderlineVariantDropdown();
485
735
  }}
486
736
  >
487
737
  <div
@@ -490,21 +740,23 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
490
740
  {
491
741
  '!hover:decoration-solid !decoration-solid':
492
742
  variant ===
493
- DataCubeFontFormatUnderlinedVariant.SOLID,
743
+ DataCubeFontFormatUnderlineVariant.SOLID,
494
744
  '!hover:decoration-dashed !decoration-dashed':
495
745
  variant ===
496
- DataCubeFontFormatUnderlinedVariant.DASHED,
746
+ DataCubeFontFormatUnderlineVariant.DASHED,
497
747
  '!hover:decoration-dotted !decoration-dotted':
498
748
  variant ===
499
- DataCubeFontFormatUnderlinedVariant.DOTTED,
749
+ DataCubeFontFormatUnderlineVariant.DOTTED,
500
750
  '!hover:decoration-double !decoration-double':
501
751
  variant ===
502
- DataCubeFontFormatUnderlinedVariant.DOUBLE,
752
+ DataCubeFontFormatUnderlineVariant.DOUBLE,
503
753
  '!hover:decoration-wavy !decoration-wavy':
504
754
  variant ===
505
- DataCubeFontFormatUnderlinedVariant.WAVY,
755
+ DataCubeFontFormatUnderlineVariant.WAVY,
506
756
  'text-sky-600':
507
- variant === selectedColumn.fontUnderlined,
757
+ variant ===
758
+ (selectedColumn.fontUnderline ??
759
+ gridConfiguration.fontUnderline),
508
760
  },
509
761
  )}
510
762
  >
@@ -516,19 +768,97 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
516
768
  <button
517
769
  title="Strikethrough"
518
770
  className={cn(
519
- '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]',
771
+ '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]',
520
772
  {
521
- 'bg-neutral-200': selectedColumn.fontStrikethrough,
773
+ 'bg-neutral-200':
774
+ selectedColumn.fontStrikethrough ??
775
+ gridConfiguration.fontStrikethrough,
522
776
  },
523
777
  )}
524
- onClick={() =>
525
- selectedColumn.setFontStrikethrough(
526
- !selectedColumn.fontStrikethrough,
527
- )
528
- }
778
+ onClick={() => {
779
+ if (
780
+ selectedColumn.fontStrikethrough ??
781
+ gridConfiguration.fontStrikethrough
782
+ ) {
783
+ selectedColumn.setFontStrikethrough(false);
784
+ } else {
785
+ selectedColumn.setFontStrikethrough(true);
786
+ selectedColumn.setFontUnderline(undefined);
787
+ }
788
+ }}
529
789
  >
530
790
  <DataCubeIcon.FontStrikethrough />
531
791
  </button>
792
+ <button
793
+ title={`Case${selectedColumn.fontCase ?? gridConfiguration.fontCase ? ` (${selectedColumn.fontCase ?? gridConfiguration.fontCase})` : ''}`}
794
+ className={cn(
795
+ '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]',
796
+ {
797
+ 'bg-neutral-200':
798
+ (selectedColumn.fontCase ??
799
+ gridConfiguration.fontCase) !== undefined,
800
+ },
801
+ )}
802
+ onClick={() => {
803
+ if (
804
+ (selectedColumn.fontCase ??
805
+ gridConfiguration.fontCase) === undefined
806
+ ) {
807
+ selectedColumn.setFontCase(DataCubeFontCase.UPPERCASE);
808
+ } else {
809
+ selectedColumn.setFontCase(undefined);
810
+ }
811
+ }}
812
+ >
813
+ <DataCubeIcon.FontCase className="stroke-[0.5px]" />
814
+ </button>
815
+ <button
816
+ className="text-2xs relative -ml-[1px] flex h-5 w-2.5 items-center justify-center rounded-br-sm rounded-tr-sm border border-l-0 border-neutral-400 bg-neutral-50 p-0 text-neutral-600 focus-visible:z-[1]"
817
+ onClick={openFontCaseDropdown}
818
+ >
819
+ <div
820
+ className={cn('h-4 w-[0.5px] bg-neutral-200', {
821
+ 'opacity-0':
822
+ (selectedColumn.fontCase ??
823
+ gridConfiguration.fontCase) !== undefined,
824
+ })}
825
+ />
826
+ <DataCubeIcon.CaretDown />
827
+ </button>
828
+ <DataCubeEditorDropdownMenu
829
+ className="w-20"
830
+ {...fontCaseDropdownProps}
831
+ >
832
+ {[
833
+ DataCubeFontCase.LOWERCASE,
834
+ DataCubeFontCase.UPPERCASE,
835
+ DataCubeFontCase.CAPITALIZE,
836
+ ].map((fontCase) => (
837
+ <DataCubeEditorDropdownMenuItem
838
+ className="relative"
839
+ key={fontCase}
840
+ onClick={() => {
841
+ selectedColumn.setFontCase(fontCase);
842
+ closeFontCaseDropdown();
843
+ }}
844
+ >
845
+ <div
846
+ className={cn({
847
+ lowercase: fontCase === DataCubeFontCase.LOWERCASE,
848
+ uppercase: fontCase === DataCubeFontCase.UPPERCASE,
849
+ capitalize:
850
+ fontCase === DataCubeFontCase.CAPITALIZE,
851
+ 'text-sky-600':
852
+ fontCase ===
853
+ (selectedColumn.fontCase ??
854
+ gridConfiguration.fontCase),
855
+ })}
856
+ >
857
+ {fontCase}
858
+ </div>
859
+ </DataCubeEditorDropdownMenuItem>
860
+ ))}
861
+ </DataCubeEditorDropdownMenu>
532
862
  </div>
533
863
 
534
864
  <div className="relative ml-2 flex h-5">
@@ -538,7 +868,8 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
538
868
  '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]',
539
869
  {
540
870
  'bg-neutral-200':
541
- selectedColumn.textAlign ===
871
+ (selectedColumn.textAlign ??
872
+ gridConfiguration.textAlign) ===
542
873
  DataCubeFontTextAlignment.LEFT,
543
874
  },
544
875
  )}
@@ -556,7 +887,8 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
556
887
  '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]',
557
888
  {
558
889
  'bg-neutral-200':
559
- selectedColumn.textAlign ===
890
+ (selectedColumn.textAlign ??
891
+ gridConfiguration.textAlign) ===
560
892
  DataCubeFontTextAlignment.CENTER,
561
893
  },
562
894
  )}
@@ -574,7 +906,8 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
574
906
  '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]',
575
907
  {
576
908
  'bg-neutral-200':
577
- selectedColumn.textAlign ===
909
+ (selectedColumn.textAlign ??
910
+ gridConfiguration.textAlign) ===
578
911
  DataCubeFontTextAlignment.RIGHT,
579
912
  },
580
913
  )}
@@ -615,37 +948,49 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
615
948
  </div>
616
949
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
617
950
  <DataCubeEditorColorPickerButton
618
- color={selectedColumn.foregroundColor}
619
- defaultColor={DEFAULT_FOREGROUND_COLOR}
951
+ color={
952
+ selectedColumn.normalForegroundColor ??
953
+ gridConfiguration.normalForegroundColor
954
+ }
955
+ defaultColor={gridConfiguration.normalForegroundColor}
620
956
  onChange={(value) =>
621
- selectedColumn.setForegroundColor(value)
957
+ selectedColumn.setNormalForegroundColor(value)
622
958
  }
623
959
  />
624
960
  </div>
625
961
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
626
962
  <DataCubeEditorColorPickerButton
627
- color={selectedColumn.foregroundNegativeColor}
628
- defaultColor={DEFAULT_NEGATIVE_FOREGROUND_COLOR}
963
+ color={
964
+ selectedColumn.negativeForegroundColor ??
965
+ gridConfiguration.negativeForegroundColor
966
+ }
967
+ defaultColor={gridConfiguration.negativeForegroundColor}
629
968
  onChange={(value) =>
630
- selectedColumn.setForegroundNegativeColor(value)
969
+ selectedColumn.setNegativeForegroundColor(value)
631
970
  }
632
971
  />
633
972
  </div>
634
973
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
635
974
  <DataCubeEditorColorPickerButton
636
- color={selectedColumn.foregroundZeroColor}
637
- defaultColor={DEFAULT_ZERO_FOREGROUND_COLOR}
975
+ color={
976
+ selectedColumn.zeroForegroundColor ??
977
+ gridConfiguration.zeroForegroundColor
978
+ }
979
+ defaultColor={gridConfiguration.zeroForegroundColor}
638
980
  onChange={(value) =>
639
- selectedColumn.setForegroundZeroColor(value)
981
+ selectedColumn.setZeroForegroundColor(value)
640
982
  }
641
983
  />
642
984
  </div>
643
985
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
644
986
  <DataCubeEditorColorPickerButton
645
- color={selectedColumn.foregroundErrorColor}
646
- defaultColor={DEFAULT_ERROR_FOREGROUND_COLOR}
987
+ color={
988
+ selectedColumn.errorForegroundColor ??
989
+ gridConfiguration.errorForegroundColor
990
+ }
991
+ defaultColor={gridConfiguration.errorForegroundColor}
647
992
  onChange={(value) =>
648
- selectedColumn.setForegroundErrorColor(value)
993
+ selectedColumn.setErrorForegroundColor(value)
649
994
  }
650
995
  />
651
996
  </div>
@@ -656,37 +1001,49 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
656
1001
  </div>
657
1002
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
658
1003
  <DataCubeEditorColorPickerButton
659
- color={selectedColumn.backgroundColor}
660
- defaultColor={DEFAULT_BACKGROUND_COLOR}
1004
+ color={
1005
+ selectedColumn.normalBackgroundColor ??
1006
+ gridConfiguration.normalBackgroundColor
1007
+ }
1008
+ defaultColor={gridConfiguration.normalBackgroundColor}
661
1009
  onChange={(value) =>
662
- selectedColumn.setBackgroundColor(value)
1010
+ selectedColumn.setNormalBackgroundColor(value)
663
1011
  }
664
1012
  />
665
1013
  </div>
666
1014
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
667
1015
  <DataCubeEditorColorPickerButton
668
- color={selectedColumn.backgroundNegativeColor}
669
- defaultColor={DEFAULT_BACKGROUND_COLOR}
1016
+ color={
1017
+ selectedColumn.negativeBackgroundColor ??
1018
+ gridConfiguration.negativeBackgroundColor
1019
+ }
1020
+ defaultColor={gridConfiguration.negativeBackgroundColor}
670
1021
  onChange={(value) =>
671
- selectedColumn.setBackgroundNegativeColor(value)
1022
+ selectedColumn.setNegativeBackgroundColor(value)
672
1023
  }
673
1024
  />
674
1025
  </div>
675
1026
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
676
1027
  <DataCubeEditorColorPickerButton
677
- color={selectedColumn.backgroundZeroColor}
678
- defaultColor={DEFAULT_BACKGROUND_COLOR}
1028
+ color={
1029
+ selectedColumn.zeroBackgroundColor ??
1030
+ gridConfiguration.zeroBackgroundColor
1031
+ }
1032
+ defaultColor={gridConfiguration.zeroBackgroundColor}
679
1033
  onChange={(value) =>
680
- selectedColumn.setBackgroundZeroColor(value)
1034
+ selectedColumn.setZeroBackgroundColor(value)
681
1035
  }
682
1036
  />
683
1037
  </div>
684
1038
  <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
685
1039
  <DataCubeEditorColorPickerButton
686
- color={selectedColumn.backgroundErrorColor}
687
- defaultColor={DEFAULT_BACKGROUND_COLOR}
1040
+ color={
1041
+ selectedColumn.errorBackgroundColor ??
1042
+ gridConfiguration.errorBackgroundColor
1043
+ }
1044
+ defaultColor={gridConfiguration.errorBackgroundColor}
688
1045
  onChange={(value) =>
689
- selectedColumn.setBackgroundErrorColor(value)
1046
+ selectedColumn.setErrorBackgroundColor(value)
690
1047
  }
691
1048
  />
692
1049
  </div>
@@ -694,174 +1051,18 @@ export const DataCubeEditorColumnPropertiesPanel = observer(() => {
694
1051
  </div>
695
1052
  </div>
696
1053
 
697
- <div className="mt-2 flex h-4 w-full items-center">
698
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
699
- Hide from View?
700
- </div>
701
- <DataCubeEditorCheckbox
702
- checked={selectedColumn.hideFromView}
703
- onChange={() =>
704
- selectedColumn.setHideFromView(!selectedColumn.hideFromView)
705
- }
706
- disabled={true}
707
- />
708
- <WIP_Badge />
709
- </div>
710
-
711
- <div className="mt-2 flex h-6 w-full items-center">
712
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
713
- Pin:
714
- </div>
715
- <DataCubeEditorDropdownMenuTrigger
716
- className="w-14"
717
- onClick={openColumnPinDropdown}
718
- >
719
- {selectedColumn.pinned ?? '(None)'}
720
- </DataCubeEditorDropdownMenuTrigger>
721
- <DataCubeEditorDropdownMenu
722
- className="w-14"
723
- {...columnPinDropdownProps}
724
- >
725
- {[
726
- undefined,
727
- DataCubeColumnPinPlacement.LEFT,
728
- DataCubeColumnPinPlacement.RIGHT,
729
- ].map((placement) => (
730
- <DataCubeEditorDropdownMenuItem
731
- key={placement ?? ''}
732
- onClick={() => {
733
- selectedColumn.setPinned(placement);
734
- closeColumnPinDropdown();
735
- }}
736
- >
737
- {placement ?? '(None)'}
738
- </DataCubeEditorDropdownMenuItem>
739
- ))}
740
- </DataCubeEditorDropdownMenu>
741
- </div>
742
-
743
- <div className="mt-2 flex h-6 w-full items-center">
744
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
745
- Width:
746
- </div>
747
- <DataCubeEditorCheckbox
748
- label="(Any)"
749
- checked={
750
- selectedColumn.fixedWidth === undefined &&
751
- selectedColumn.minWidth === undefined &&
752
- selectedColumn.maxWidth === undefined
753
- }
754
- onChange={() => {
755
- if (
756
- selectedColumn.fixedWidth === undefined &&
757
- selectedColumn.minWidth === undefined &&
758
- selectedColumn.maxWidth === undefined
759
- ) {
760
- selectedColumn.setFixedWidth(DEFAULT_COLUMN_WIDTH);
761
- selectedColumn.setMinWidth(undefined);
762
- selectedColumn.setMaxWidth(undefined);
763
- } else {
764
- selectedColumn.setFixedWidth(undefined);
765
- selectedColumn.setMinWidth(undefined);
766
- selectedColumn.setMaxWidth(undefined);
767
- }
768
- }}
769
- />
770
-
771
- <DataCubeEditorCheckbox
772
- className="ml-2"
773
- label="Fixed"
774
- checked={selectedColumn.fixedWidth !== undefined}
775
- onChange={() => {
776
- selectedColumn.setFixedWidth(
777
- selectedColumn.fixedWidth !== undefined
778
- ? undefined
779
- : DEFAULT_COLUMN_WIDTH,
780
- );
781
- selectedColumn.setMinWidth(undefined);
782
- selectedColumn.setMaxWidth(undefined);
783
- }}
784
- />
785
- <div className="ml-1 h-[1px] w-2 bg-neutral-400" />
786
- <DataCubeEditorNumberInput
787
- className="ml-1 w-16 text-sm"
788
- min={0}
789
- step={50}
790
- defaultValue={undefined}
791
- isValid={(value) => value !== undefined && value > 0}
792
- value={selectedColumn.fixedWidth}
793
- setValue={(value) => {
794
- selectedColumn.setFixedWidth(value);
795
- }}
796
- disabled={
797
- selectedColumn.minWidth !== undefined ||
798
- selectedColumn.maxWidth !== undefined
799
- }
800
- />
801
-
802
- <DataCubeEditorCheckbox
803
- className="ml-3"
804
- label="In range"
805
- checked={
806
- selectedColumn.minWidth !== undefined ||
807
- selectedColumn.maxWidth !== undefined
808
- }
809
- onChange={() => {
810
- if (
811
- selectedColumn.minWidth === undefined &&
812
- selectedColumn.maxWidth === undefined
813
- ) {
814
- selectedColumn.setMinWidth(DEFAULT_COLUMN_MIN_WIDTH);
815
- selectedColumn.setMaxWidth(DEFAULT_COLUMN_MAX_WIDTH);
816
- selectedColumn.setFixedWidth(undefined);
817
- } else {
818
- selectedColumn.setMinWidth(undefined);
819
- selectedColumn.setMaxWidth(undefined);
820
- selectedColumn.setFixedWidth(undefined);
821
- }
822
- }}
823
- />
824
- <div className="ml-1 h-[1px] w-2 bg-neutral-400" />
825
- <DataCubeEditorNumberInput
826
- className="ml-1 w-16 text-sm"
827
- min={0}
828
- step={50}
829
- defaultValue={undefined}
830
- isValid={(value) => value !== undefined && value > 0}
831
- value={selectedColumn.minWidth}
832
- setValue={(value) => {
833
- selectedColumn.setMinWidth(value);
834
- }}
835
- disabled={selectedColumn.fixedWidth !== undefined}
836
- />
837
- <div className="ml-1 h-[1px] w-1 bg-neutral-400" />
838
- <DataCubeEditorNumberInput
839
- className="ml-1 w-16 text-sm"
840
- min={selectedColumn.minWidth ?? 0}
841
- step={50}
842
- defaultValue={undefined}
843
- isValid={(value) =>
844
- value !== undefined &&
845
- value >= (selectedColumn.minWidth ?? 0)
846
- }
847
- value={selectedColumn.maxWidth}
848
- setValue={(value) => {
849
- selectedColumn.setMaxWidth(value);
850
- }}
851
- disabled={selectedColumn.fixedWidth !== undefined}
852
- />
853
- </div>
854
-
855
- <div className="mt-2 flex h-4 w-full items-center">
856
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
857
- Blur Content?
1054
+ <div className="mt-2 flex w-full">
1055
+ <div className="flex h-6 w-32 flex-shrink-0 items-center text-sm" />
1056
+ <div className="w-80">
1057
+ <div className="mb-2 h-[1px] w-full bg-neutral-200" />
1058
+ <button
1059
+ className="flex h-5 items-center justify-center rounded-sm border border-neutral-400 bg-neutral-200 p-0 px-1 text-sm text-neutral-700 disabled:text-neutral-400"
1060
+ disabled={selectedColumn.isUsingDefaultStyling}
1061
+ onClick={() => selectedColumn.useDefaultStyling()}
1062
+ >
1063
+ Use Default Styling
1064
+ </button>
858
1065
  </div>
859
- <DataCubeEditorCheckbox
860
- checked={selectedColumn.blur}
861
- onChange={() => selectedColumn.setBlur(!selectedColumn.blur)}
862
- disabled={true}
863
- />
864
- <WIP_Badge />
865
1066
  </div>
866
1067
  </>
867
1068
  )}