@finos/legend-application-repl 0.0.48 → 0.0.49

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 (335) hide show
  1. package/lib/components/dataCube/DataCube.d.ts.map +1 -1
  2. package/lib/components/dataCube/DataCube.js +14 -11
  3. package/lib/components/dataCube/DataCube.js.map +1 -1
  4. package/lib/components/dataCube/editor/DataCubeEditor.d.ts +4 -1
  5. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  6. package/lib/components/dataCube/editor/DataCubeEditor.js +6 -7
  7. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  8. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts +4 -1
  9. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts.map +1 -1
  10. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js +2 -12
  11. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js.map +1 -1
  12. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts +4 -1
  13. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
  14. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +57 -51
  15. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
  16. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts +4 -1
  17. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -1
  18. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +3 -4
  19. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
  20. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +1 -1
  21. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts +4 -1
  22. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +1 -1
  23. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +3 -4
  24. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +1 -1
  25. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts +4 -1
  26. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts.map +1 -1
  27. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js +289 -10
  28. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js.map +1 -1
  29. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts +4 -1
  30. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -1
  31. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +30 -30
  32. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -1
  33. package/lib/components/dataCube/editor/DataCubeEditorHorizontalPivotsPanel.d.ts +4 -1
  34. package/lib/components/dataCube/editor/DataCubeEditorHorizontalPivotsPanel.d.ts.map +1 -1
  35. package/lib/components/dataCube/editor/DataCubeEditorHorizontalPivotsPanel.js +3 -4
  36. package/lib/components/dataCube/editor/DataCubeEditorHorizontalPivotsPanel.js.map +1 -1
  37. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts +4 -1
  38. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts.map +1 -1
  39. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +19 -20
  40. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -1
  41. package/lib/components/dataCube/editor/DataCubeEditorVerticalPivotsPanel.d.ts +4 -1
  42. package/lib/components/dataCube/editor/DataCubeEditorVerticalPivotsPanel.d.ts.map +1 -1
  43. package/lib/components/dataCube/editor/DataCubeEditorVerticalPivotsPanel.js +3 -4
  44. package/lib/components/dataCube/editor/DataCubeEditorVerticalPivotsPanel.js.map +1 -1
  45. package/lib/components/dataCube/grid/DataCubeGrid.d.ts +7 -2
  46. package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
  47. package/lib/components/dataCube/grid/DataCubeGrid.js +53 -54
  48. package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
  49. package/lib/components/repl/Form.d.ts +4 -2
  50. package/lib/components/repl/Form.d.ts.map +1 -1
  51. package/lib/components/repl/Form.js +55 -19
  52. package/lib/components/repl/Form.js.map +1 -1
  53. package/lib/index.css +2 -2
  54. package/lib/index.css.map +1 -1
  55. package/lib/package.json +4 -3
  56. package/lib/stores/dataCube/DataCubeEngine.d.ts +30 -0
  57. package/lib/stores/dataCube/DataCubeEngine.d.ts.map +1 -1
  58. package/lib/stores/dataCube/DataCubeEngine.js +60 -1
  59. package/lib/stores/dataCube/DataCubeEngine.js.map +1 -1
  60. package/lib/stores/dataCube/DataCubeState.d.ts +2 -2
  61. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  62. package/lib/stores/dataCube/DataCubeState.js +11 -5
  63. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  64. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts +0 -1
  65. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts.map +1 -1
  66. package/lib/stores/dataCube/core/DataCubeConfiguration.js +0 -2
  67. package/lib/stores/dataCube/core/DataCubeConfiguration.js.map +1 -1
  68. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts +8 -17
  69. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
  70. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +16 -230
  71. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  72. package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.d.ts +44 -0
  73. package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.d.ts.map +1 -0
  74. package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.js +220 -0
  75. package/lib/stores/dataCube/core/DataCubeQueryBuilderUtils.js.map +1 -0
  76. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +41 -20
  77. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
  78. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +70 -46
  79. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
  80. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +7 -5
  81. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  82. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +1 -1
  83. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  84. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts +4 -4
  85. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
  86. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +18 -135
  87. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
  88. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilderUtils.d.ts +31 -0
  89. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilderUtils.d.ts.map +1 -0
  90. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilderUtils.js +142 -0
  91. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilderUtils.js.map +1 -0
  92. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts +16 -1
  93. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts.map +1 -1
  94. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js +25 -3
  95. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js.map +1 -1
  96. package/lib/stores/dataCube/core/{DataCubeCoreState.d.ts → DataCubeStaticContentDisplayState.d.ts} +3 -4
  97. package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.d.ts.map +1 -0
  98. package/lib/stores/dataCube/core/{DataCubeCoreState.js → DataCubeStaticContentDisplayState.js} +3 -6
  99. package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.js.map +1 -0
  100. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterEditorState.d.ts +36 -0
  101. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterEditorState.d.ts.map +1 -0
  102. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterEditorState.js +151 -0
  103. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterEditorState.js.map +1 -0
  104. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts +32 -0
  105. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts.map +1 -0
  106. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js +64 -0
  107. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js.map +1 -0
  108. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.d.ts +34 -0
  109. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.d.ts.map +1 -0
  110. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js +59 -0
  111. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js.map +1 -0
  112. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts +34 -0
  113. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts.map +1 -0
  114. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js +64 -0
  115. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js.map +1 -0
  116. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts +34 -0
  117. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts.map +1 -0
  118. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js +59 -0
  119. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js.map +1 -0
  120. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts +34 -0
  121. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts.map +1 -0
  122. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js +64 -0
  123. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js.map +1 -0
  124. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.d.ts +34 -0
  125. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.d.ts.map +1 -0
  126. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js +126 -0
  127. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js.map +1 -0
  128. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts +34 -0
  129. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts.map +1 -0
  130. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js +64 -0
  131. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js.map +1 -0
  132. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts +34 -0
  133. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts.map +1 -0
  134. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js +64 -0
  135. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js.map +1 -0
  136. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts +34 -0
  137. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts.map +1 -0
  138. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js +60 -0
  139. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js.map +1 -0
  140. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts +34 -0
  141. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts.map +1 -0
  142. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js +59 -0
  143. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js.map +1 -0
  144. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts +34 -0
  145. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts.map +1 -0
  146. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js +60 -0
  147. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js.map +1 -0
  148. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts +34 -0
  149. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts.map +1 -0
  150. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js +59 -0
  151. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js.map +1 -0
  152. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts +34 -0
  153. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts.map +1 -0
  154. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js +60 -0
  155. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js.map +1 -0
  156. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts +31 -0
  157. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts.map +1 -0
  158. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js +54 -0
  159. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js.map +1 -0
  160. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts +31 -0
  161. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts.map +1 -0
  162. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js +54 -0
  163. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js.map +1 -0
  164. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts +34 -0
  165. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts.map +1 -0
  166. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js +59 -0
  167. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js.map +1 -0
  168. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts +34 -0
  169. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts.map +1 -0
  170. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js +60 -0
  171. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js.map +1 -0
  172. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts +34 -0
  173. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts.map +1 -0
  174. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js +59 -0
  175. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js.map +1 -0
  176. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts +34 -0
  177. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts.map +1 -0
  178. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js +60 -0
  179. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js.map +1 -0
  180. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts +34 -0
  181. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts.map +1 -0
  182. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js +59 -0
  183. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js.map +1 -0
  184. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts +34 -0
  185. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts.map +1 -0
  186. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js +59 -0
  187. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js.map +1 -0
  188. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts +34 -0
  189. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts.map +1 -0
  190. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js +59 -0
  191. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js.map +1 -0
  192. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts +34 -0
  193. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts.map +1 -0
  194. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js +64 -0
  195. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js.map +1 -0
  196. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts +34 -0
  197. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts.map +1 -0
  198. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js +64 -0
  199. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js.map +1 -0
  200. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts +34 -0
  201. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts.map +1 -0
  202. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js +60 -0
  203. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js.map +1 -0
  204. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts +34 -0
  205. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts.map +1 -0
  206. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js +59 -0
  207. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js.map +1 -0
  208. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts +34 -0
  209. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts.map +1 -0
  210. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js +59 -0
  211. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js.map +1 -0
  212. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts +34 -0
  213. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts.map +1 -0
  214. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js +64 -0
  215. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js.map +1 -0
  216. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +2 -2
  217. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
  218. package/lib/stores/dataCube/editor/DataCubeEditorFilterPanelState.d.ts +58 -0
  219. package/lib/stores/dataCube/editor/DataCubeEditorFilterPanelState.d.ts.map +1 -0
  220. package/lib/stores/dataCube/editor/DataCubeEditorFilterPanelState.js +205 -0
  221. package/lib/stores/dataCube/editor/DataCubeEditorFilterPanelState.js.map +1 -0
  222. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts +4 -4
  223. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
  224. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +2 -2
  225. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
  226. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +5 -4
  227. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  228. package/lib/stores/dataCube/editor/DataCubeEditorState.js +9 -7
  229. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  230. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +5 -4
  231. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -1
  232. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +6 -5
  233. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -1
  234. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts +2 -8
  235. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  236. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +3 -10
  237. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  238. package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js +1 -1
  239. package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js.map +1 -1
  240. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
  241. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js +16 -40
  242. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
  243. package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts +17 -7
  244. package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts.map +1 -1
  245. package/lib/stores/dataCube/grid/DataCubeGridControllerState.js +59 -6
  246. package/lib/stores/dataCube/grid/DataCubeGridControllerState.js.map +1 -1
  247. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
  248. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js +157 -53
  249. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js.map +1 -1
  250. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts +2 -1
  251. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
  252. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +7 -7
  253. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
  254. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +4 -4
  255. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
  256. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +2 -3
  257. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
  258. package/lib/stores/dataCube/grid/DataCubeGridState.js +10 -6
  259. package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
  260. package/package.json +10 -9
  261. package/src/components/dataCube/DataCube.tsx +20 -13
  262. package/src/components/dataCube/editor/DataCubeEditor.tsx +15 -15
  263. package/src/components/dataCube/editor/DataCubeEditorCodePanel.tsx +72 -80
  264. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +1020 -950
  265. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +46 -44
  266. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +1 -1
  267. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +20 -18
  268. package/src/components/dataCube/editor/DataCubeEditorFilterPanel.tsx +862 -19
  269. package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +687 -667
  270. package/src/components/dataCube/editor/DataCubeEditorHorizontalPivotsPanel.tsx +20 -18
  271. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +71 -62
  272. package/src/components/dataCube/editor/DataCubeEditorVerticalPivotsPanel.tsx +19 -17
  273. package/src/components/dataCube/grid/DataCubeGrid.tsx +144 -140
  274. package/src/components/repl/Form.tsx +145 -98
  275. package/src/stores/dataCube/DataCubeEngine.ts +69 -1
  276. package/src/stores/dataCube/DataCubeState.ts +13 -9
  277. package/src/stores/dataCube/core/DataCubeConfiguration.ts +1 -3
  278. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +43 -355
  279. package/src/stores/dataCube/core/DataCubeQueryBuilderUtils.ts +353 -0
  280. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +46 -21
  281. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +8 -12
  282. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +25 -194
  283. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilderUtils.ts +211 -0
  284. package/src/stores/dataCube/core/DataCubeQuerySnapshotManager.ts +50 -1
  285. package/src/stores/dataCube/core/{DataCubeCoreState.ts → DataCubeStaticContentDisplayState.ts} +2 -6
  286. package/src/stores/dataCube/core/filter/DataCubeQueryFilterEditorState.ts +227 -0
  287. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation.ts +105 -0
  288. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.tsx +87 -0
  289. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.tsx +93 -0
  290. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.tsx +87 -0
  291. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.tsx +93 -0
  292. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.tsx +159 -0
  293. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.tsx +93 -0
  294. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.tsx +93 -0
  295. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.tsx +89 -0
  296. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.tsx +87 -0
  297. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.tsx +89 -0
  298. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.tsx +87 -0
  299. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.tsx +89 -0
  300. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.tsx +83 -0
  301. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.tsx +80 -0
  302. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.tsx +87 -0
  303. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.tsx +89 -0
  304. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.tsx +87 -0
  305. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.tsx +89 -0
  306. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.tsx +90 -0
  307. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.tsx +90 -0
  308. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.tsx +90 -0
  309. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.tsx +96 -0
  310. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.tsx +96 -0
  311. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.tsx +92 -0
  312. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.tsx +90 -0
  313. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.tsx +87 -0
  314. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.tsx +93 -0
  315. package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +2 -2
  316. package/src/stores/dataCube/editor/DataCubeEditorFilterPanelState.ts +295 -0
  317. package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +5 -9
  318. package/src/stores/dataCube/editor/DataCubeEditorState.tsx +9 -8
  319. package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +10 -10
  320. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +22 -23
  321. package/src/stores/dataCube/grid/DataCubeGridClientExportEngine.ts +1 -1
  322. package/src/stores/dataCube/grid/DataCubeGridConfigurationBuilder.tsx +16 -43
  323. package/src/stores/dataCube/grid/DataCubeGridControllerState.ts +91 -10
  324. package/src/stores/dataCube/grid/DataCubeGridMenuBuilder.tsx +218 -53
  325. package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +66 -61
  326. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +4 -4
  327. package/src/stores/dataCube/grid/DataCubeGridState.ts +10 -6
  328. package/tsconfig.json +33 -2
  329. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts.map +0 -1
  330. package/lib/stores/dataCube/core/DataCubeCoreState.js.map +0 -1
  331. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts +0 -30
  332. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts.map +0 -1
  333. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js +0 -41
  334. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js.map +0 -1
  335. package/src/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.ts +0 -62
@@ -16,7 +16,6 @@
16
16
 
17
17
  import { cn, DataCubeIcon, useDropdownMenu } from '@finos/legend-art';
18
18
  import { observer } from 'mobx-react-lite';
19
- import { useREPLStore } from '../../REPLStoreProvider.js';
20
19
  import {
21
20
  FormBadge_Advanced,
22
21
  FormCheckbox,
@@ -31,7 +30,7 @@ import {
31
30
  FormDocumentation,
32
31
  } from '../../repl/Form.js';
33
32
  import {
34
- DataCubeAggregateOperation,
33
+ DataCubeAggregateOperator,
35
34
  DataCubeColumnDataType,
36
35
  DataCubeColumnKind,
37
36
  DataCubeColumnPinPlacement,
@@ -46,1046 +45,1117 @@ import {
46
45
  DEFAULT_URL_LABEL_QUERY_PARAM,
47
46
  } from '../../../stores/dataCube/core/DataCubeQueryEngine.js';
48
47
  import { DocumentationKey } from '../../../application/LegendREPLDocumentation.js';
48
+ import type { DataCubeState } from '../../../stores/dataCube/DataCubeState.js';
49
49
 
50
- export const DataCubeEditorColumnPropertiesPanel = observer(() => {
51
- const repl = useREPLStore();
52
- const dataCube = repl.dataCube;
53
- const panel = dataCube.editor.columnProperties;
54
- const gridConfiguration = dataCube.editor.generalProperties.configuration;
55
- const selectedColumn = panel.selectedColumn;
56
- const [openColumnsDropdown, closeColumnsDropdown, columnsDropdownProps] =
57
- useDropdownMenu();
58
- const [openKindDropdown, closeKindDropdown, kindDropdownProps] =
59
- useDropdownMenu();
60
- const [
61
- openAggregationTypeDropdown,
62
- closeAggregationTypeDropdown,
63
- aggregationTypeDropdownProps,
64
- ] = useDropdownMenu();
65
- const [
66
- openNumberScaleDropdown,
67
- closeNumberScaleDropdown,
68
- numberScaleDropdownProps,
69
- ] = useDropdownMenu();
70
- const [
71
- openFontFamilyDropdown,
72
- closeFontFamilyDropdown,
73
- fontFamilyDropdownProps,
74
- ] = useDropdownMenu();
75
- const [
76
- openFontSizeDropdown,
77
- closeFontSizeDropdown,
78
- openFontSizeDropdownProps,
79
- ] = useDropdownMenu();
80
- const [
81
- openFontFormatUnderlineVariantDropdown,
82
- closeFontFormatUnderlineVariantDropdown,
83
- fontFormatUnderlineVariantDropdownProps,
84
- ] = useDropdownMenu();
85
- const [
86
- openColumnPinDropdown,
87
- closeColumnPinDropdown,
88
- columnPinDropdownProps,
89
- ] = useDropdownMenu();
90
- const [openFontCaseDropdown, closeFontCaseDropdown, fontCaseDropdownProps] =
91
- useDropdownMenu();
50
+ export const DataCubeEditorColumnPropertiesPanel = observer(
51
+ (props: { dataCube: DataCubeState }) => {
52
+ const { dataCube } = props;
53
+ const panel = dataCube.editor.columnProperties;
54
+ const gridConfiguration = dataCube.editor.generalProperties.configuration;
55
+ const selectedColumn = panel.selectedColumn;
56
+ const [
57
+ openColumnsDropdown,
58
+ closeColumnsDropdown,
59
+ columnsDropdownProps,
60
+ columnsDropPropsOpen,
61
+ ] = useDropdownMenu();
62
+ const [
63
+ openKindDropdown,
64
+ closeKindDropdown,
65
+ kindDropdownProps,
66
+ kindDropdownPropsOpen,
67
+ ] = useDropdownMenu();
68
+ const [
69
+ openAggregationTypeDropdown,
70
+ closeAggregationTypeDropdown,
71
+ aggregationTypeDropdownProps,
72
+ aggregationTypeDropdownPropsOpen,
73
+ ] = useDropdownMenu();
74
+ const [
75
+ openNumberScaleDropdown,
76
+ closeNumberScaleDropdown,
77
+ numberScaleDropdownProps,
78
+ numberScaleDropdownPropsOpen,
79
+ ] = useDropdownMenu();
80
+ const [
81
+ openColumnPinDropdown,
82
+ closeColumnPinDropdown,
83
+ columnPinDropdownProps,
84
+ columnPinDropdownPropsOpen,
85
+ ] = useDropdownMenu();
86
+ const [
87
+ openFontFamilyDropdown,
88
+ closeFontFamilyDropdown,
89
+ fontFamilyDropdownProps,
90
+ fontFamilyDropdownPropsOpen,
91
+ ] = useDropdownMenu();
92
+ const [
93
+ openFontSizeDropdown,
94
+ closeFontSizeDropdown,
95
+ openFontSizeDropdownProps,
96
+ openFontSizeDropdownPropsOpen,
97
+ ] = useDropdownMenu();
98
+ const [
99
+ openFontFormatUnderlineVariantDropdown,
100
+ closeFontFormatUnderlineVariantDropdown,
101
+ fontFormatUnderlineVariantDropdownProps,
102
+ ] = useDropdownMenu();
103
+ const [openFontCaseDropdown, closeFontCaseDropdown, fontCaseDropdownProps] =
104
+ useDropdownMenu();
92
105
 
93
- return (
94
- <div className="h-full w-full select-none p-2">
95
- <div className="flex h-6 justify-between">
96
- <div className="flex h-full">
97
- <div className="relative flex h-6 items-center text-xl font-medium">
98
- <DataCubeIcon.TableColumn />
99
- <DataCubeIcon.TableColumnOptions__Settings className="absolute bottom-1 right-0 bg-white text-xs" />
106
+ return (
107
+ <div className="h-full w-full select-none p-2">
108
+ <div className="flex h-6 justify-between">
109
+ <div className="flex h-full">
110
+ <div className="relative flex h-6 items-center text-xl font-medium">
111
+ <DataCubeIcon.TableColumn />
112
+ <DataCubeIcon.TableColumnOptions__Settings className="absolute bottom-1 right-0 bg-white text-xs" />
113
+ </div>
114
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
115
+ Column Properties
116
+ </div>
100
117
  </div>
101
- <div className="ml-1 flex h-6 items-center text-xl font-medium">
102
- Column Properties
118
+ <div className="flex h-full items-center pr-2">
119
+ <FormCheckbox
120
+ label="Show advanced settings?"
121
+ checked={panel.showAdvancedSettings}
122
+ onChange={() =>
123
+ panel.setShowAdvancedSettings(!panel.showAdvancedSettings)
124
+ }
125
+ />
126
+ <FormBadge_Advanced />
103
127
  </div>
104
128
  </div>
105
- <div className="flex h-full items-center pr-2">
106
- <FormCheckbox
107
- label="Show advanced settings?"
108
- checked={panel.showAdvancedSettings}
109
- onChange={() =>
110
- panel.setShowAdvancedSettings(!panel.showAdvancedSettings)
111
- }
112
- />
113
- <FormBadge_Advanced />
114
- </div>
115
- </div>
116
- <div className="flex h-[calc(100%_-_24px)] w-full">
117
- <div className="h-full w-full py-2">
118
- <div className="flex h-6 w-full items-center">
119
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
120
- Choose Column:
121
- </div>
122
- <FormDropdownMenuTrigger
123
- className="w-80"
124
- onClick={openColumnsDropdown}
125
- >
126
- <div className="flex h-full w-full items-center">
127
- <div className="overflow-hidden overflow-ellipsis whitespace-nowrap">
128
- {selectedColumn?.name ?? '(None)'}
129
- </div>
130
- {selectedColumn && (
131
- <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">
132
- {selectedColumn.dataType}
133
- </div>
134
- )}
129
+ <div className="flex h-[calc(100%_-_24px)] w-full">
130
+ <div className="h-full w-full py-2">
131
+ <div className="flex h-6 w-full items-center">
132
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
133
+ Choose Column:
135
134
  </div>
136
- </FormDropdownMenuTrigger>
137
- <FormDropdownMenu className="w-80" {...columnsDropdownProps}>
138
- {panel.configurableColumns.map((column) => (
139
- <FormDropdownMenuItem
140
- key={column.name}
141
- onClick={() => {
142
- panel.setSelectedColumnName(column.name);
143
- closeColumnsDropdown();
144
- }}
145
- >
135
+ <FormDropdownMenuTrigger
136
+ className="w-80"
137
+ onClick={openColumnsDropdown}
138
+ open={columnsDropPropsOpen}
139
+ >
140
+ <div className="flex h-full w-full items-center">
146
141
  <div className="overflow-hidden overflow-ellipsis whitespace-nowrap">
147
- {column.name}
148
- </div>
149
- <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">
150
- {column.dataType}
142
+ {selectedColumn?.name ?? '(None)'}
151
143
  </div>
152
- </FormDropdownMenuItem>
153
- ))}
154
- </FormDropdownMenu>
155
- {panel.showAdvancedSettings && selectedColumn && (
156
- <>
157
- <div className="mx-2 h-[1px] w-4 flex-shrink-0 bg-neutral-400" />
158
- <div className="flex h-6 items-center">
159
- <div className="flex h-full flex-shrink-0 items-center text-sm">
160
- Kind:
161
- </div>
162
- <FormDropdownMenuTrigger
163
- className="ml-1 w-20"
164
- onClick={openKindDropdown}
165
- disabled={true}
166
- >
167
- {selectedColumn.kind}
168
- </FormDropdownMenuTrigger>
169
- <FormDropdownMenu className="w-20" {...kindDropdownProps}>
170
- {[
171
- DataCubeColumnKind.DIMENSION,
172
- DataCubeColumnKind.MEASURE,
173
- ].map((kind) => (
174
- <FormDropdownMenuItem
175
- key={kind}
176
- onClick={() => {
177
- selectedColumn.setKind(kind);
178
- closeKindDropdown();
179
- }}
180
- >
181
- {kind}
182
- </FormDropdownMenuItem>
183
- ))}
184
- </FormDropdownMenu>
185
- <FormBadge_Advanced />
186
- <FormBadge_WIP />
187
- <FormDocumentation
188
- className="ml-1"
189
- documentationKey={DocumentationKey.DATA_CUBE_COLUMN_KINDS}
190
- />
191
- </div>
192
- </>
193
- )}
194
- </div>
195
-
196
- <div className="-ml-2 mb-2 mt-3 h-[1px] w-[calc(100%_+_16px)] bg-neutral-200" />
197
-
198
- {selectedColumn && (
199
- <>
200
- <div className="mt-2 flex h-5 w-full items-center">
201
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
202
- Display Name:
144
+ {selectedColumn && (
145
+ <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">
146
+ {selectedColumn.dataType}
147
+ </div>
148
+ )}
203
149
  </div>
204
- <FormTextInput
205
- className="w-80"
206
- value={selectedColumn.displayName ?? ''}
207
- onChange={(event) => {
208
- const value = event.target.value.trim();
209
- selectedColumn.setDisplayName(
210
- value !== '' ? value : undefined,
211
- );
212
- }}
213
- />
214
- </div>
215
-
216
- {selectedColumn.dataType === DataCubeColumnDataType.NUMBER && (
217
- <>
218
- <div className="mt-2 flex h-5 w-full items-center">
219
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
220
- Number Format:
150
+ </FormDropdownMenuTrigger>
151
+ <FormDropdownMenu className="w-80" {...columnsDropdownProps}>
152
+ {panel.configurableColumns.map((column) => (
153
+ <FormDropdownMenuItem
154
+ key={column.name}
155
+ onClick={() => {
156
+ panel.setSelectedColumnName(column.name);
157
+ closeColumnsDropdown();
158
+ }}
159
+ autoFocus={column.name === selectedColumn?.name}
160
+ >
161
+ <div className="overflow-hidden overflow-ellipsis whitespace-nowrap">
162
+ {column.name}
221
163
  </div>
222
- <FormNumberInput
223
- className="w-16 text-sm"
224
- min={0}
225
- step={1}
226
- value={selectedColumn.decimals ?? 0}
227
- setValue={(value) => {
228
- selectedColumn.setDecimals(value);
229
- }}
230
- />
231
- <div className="ml-1 flex-shrink-0 text-sm">
232
- Decimal places
164
+ <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">
165
+ {column.dataType}
233
166
  </div>
234
- <FormCheckbox
235
- className="ml-3"
236
- label="Display commas"
237
- checked={selectedColumn.displayCommas}
238
- onChange={() =>
239
- selectedColumn.setDisplayCommas(
240
- !selectedColumn.displayCommas,
241
- )
242
- }
243
- />
244
- <FormCheckbox
245
- className="ml-3"
246
- label="Negative number in parens"
247
- checked={selectedColumn.negativeNumberInParens}
248
- onChange={() =>
249
- selectedColumn.setNegativeNumberInParens(
250
- !selectedColumn.negativeNumberInParens,
251
- )
252
- }
253
- />
254
- </div>
255
-
256
- <div className="mt-2 flex h-5 w-full items-center">
257
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
258
- Number Scale:
259
- </div>
260
- <FormDropdownMenuTrigger
261
- className="w-32"
262
- onClick={openNumberScaleDropdown}
263
- >
264
- {selectedColumn.numberScale ?? '(None)'}
265
- </FormDropdownMenuTrigger>
266
- <FormDropdownMenu
267
- className="w-32"
268
- {...numberScaleDropdownProps}
269
- >
270
- {[
271
- undefined,
272
- DataCubeNumberScale.PERCENT,
273
- DataCubeNumberScale.BASIS_POINT,
274
- DataCubeNumberScale.THOUSANDS,
275
- DataCubeNumberScale.MILLIONS,
276
- DataCubeNumberScale.BILLIONS,
277
- DataCubeNumberScale.TRILLIONS,
278
- DataCubeNumberScale.AUTO,
279
- ].map((scale) => (
280
- <FormDropdownMenuItem
281
- key={scale ?? ''}
282
- onClick={() => {
283
- selectedColumn.setNumberScale(scale);
284
- closeNumberScaleDropdown();
285
- }}
286
- >
287
- {scale ?? '(None)'}
288
- </FormDropdownMenuItem>
289
- ))}
290
- </FormDropdownMenu>
291
- </div>
292
-
293
- <div className="mt-2 flex h-5 w-full items-center">
294
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
295
- Aggregation Type:
167
+ </FormDropdownMenuItem>
168
+ ))}
169
+ </FormDropdownMenu>
170
+ {panel.showAdvancedSettings && selectedColumn && (
171
+ <>
172
+ <div className="mx-2 h-[1px] w-4 flex-shrink-0 bg-neutral-400" />
173
+ <div className="flex h-6 items-center">
174
+ <div className="flex h-full flex-shrink-0 items-center text-sm">
175
+ Kind:
296
176
  </div>
297
177
  <FormDropdownMenuTrigger
298
- className="w-32"
299
- onClick={openAggregationTypeDropdown}
178
+ className="ml-1 w-20"
179
+ onClick={openKindDropdown}
180
+ open={kindDropdownPropsOpen}
300
181
  disabled={true}
301
182
  >
302
- {selectedColumn.aggregateFunction ?? '(None)'}
183
+ {selectedColumn.kind}
303
184
  </FormDropdownMenuTrigger>
304
- <FormDropdownMenu
305
- className="w-32"
306
- {...aggregationTypeDropdownProps}
307
- >
185
+ <FormDropdownMenu className="w-20" {...kindDropdownProps}>
308
186
  {[
309
- DataCubeAggregateOperation.SUM,
310
- DataCubeAggregateOperation.AVERAGE,
311
- DataCubeAggregateOperation.COUNT,
312
- DataCubeAggregateOperation.MIN,
313
- DataCubeAggregateOperation.MAX,
314
- ].map((fn) => (
187
+ DataCubeColumnKind.DIMENSION,
188
+ DataCubeColumnKind.MEASURE,
189
+ ].map((kind) => (
315
190
  <FormDropdownMenuItem
316
- key={fn}
191
+ key={kind}
317
192
  onClick={() => {
318
- selectedColumn.setAggregateFunction(fn);
319
- closeAggregationTypeDropdown();
193
+ selectedColumn.setKind(kind);
194
+ closeKindDropdown();
320
195
  }}
196
+ autoFocus={kind === selectedColumn.kind}
321
197
  >
322
- {fn}
198
+ {kind}
323
199
  </FormDropdownMenuItem>
324
200
  ))}
325
201
  </FormDropdownMenu>
202
+ <FormBadge_Advanced />
326
203
  <FormBadge_WIP />
327
- </div>
328
-
329
- <div className="mt-2 flex h-5 w-full items-center">
330
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
331
- Exclude from HPivot?
332
- </div>
333
- <FormCheckbox
334
- checked={selectedColumn.excludedFromHorizontalPivot}
335
- onChange={() =>
336
- selectedColumn.setExcludedFromHorizontalPivot(
337
- !selectedColumn.excludedFromHorizontalPivot,
338
- )
339
- }
340
- disabled={true}
204
+ <FormDocumentation
205
+ className="ml-1"
206
+ documentationKey={DocumentationKey.DATA_CUBE_COLUMN_KINDS}
341
207
  />
342
- <FormBadge_WIP />
343
208
  </div>
344
209
  </>
345
210
  )}
211
+ </div>
346
212
 
347
- {selectedColumn.dataType === DataCubeColumnDataType.TEXT && (
348
- <>
349
- <div className="mt-2 flex h-5 w-full items-center">
350
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
351
- Dislay as Link?
352
- <FormDocumentation
353
- className="ml-1"
354
- documentationKey={
355
- DocumentationKey.DATA_CUBE_COLUMN_DISPLAY_AS_LINK
213
+ <div className="-ml-2 mb-2 mt-3 h-[1px] w-[calc(100%_+_16px)] bg-neutral-200" />
214
+
215
+ {selectedColumn && (
216
+ <>
217
+ <div className="mt-2 flex h-5 w-full items-center">
218
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
219
+ Display Name:
220
+ </div>
221
+ <FormTextInput
222
+ className="w-80"
223
+ value={selectedColumn.displayName ?? ''}
224
+ onChange={(event) => {
225
+ const value = event.target.value.trim();
226
+ selectedColumn.setDisplayName(
227
+ value !== '' ? value : undefined,
228
+ );
229
+ }}
230
+ />
231
+ </div>
232
+
233
+ {selectedColumn.dataType === DataCubeColumnDataType.NUMBER && (
234
+ <>
235
+ <div className="mt-2 flex h-5 w-full items-center">
236
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
237
+ Number Format:
238
+ </div>
239
+ <FormNumberInput
240
+ className="w-16 text-sm"
241
+ min={0}
242
+ step={1}
243
+ value={selectedColumn.decimals ?? 0}
244
+ setValue={(value) => {
245
+ selectedColumn.setDecimals(value);
246
+ }}
247
+ />
248
+ <div className="ml-1 flex-shrink-0 text-sm">
249
+ Decimal places
250
+ </div>
251
+ <FormCheckbox
252
+ className="ml-3"
253
+ label="Display commas"
254
+ checked={selectedColumn.displayCommas}
255
+ onChange={() =>
256
+ selectedColumn.setDisplayCommas(
257
+ !selectedColumn.displayCommas,
258
+ )
259
+ }
260
+ />
261
+ <FormCheckbox
262
+ className="ml-3"
263
+ label="Negative number in parens"
264
+ checked={selectedColumn.negativeNumberInParens}
265
+ onChange={() =>
266
+ selectedColumn.setNegativeNumberInParens(
267
+ !selectedColumn.negativeNumberInParens,
268
+ )
356
269
  }
357
270
  />
358
271
  </div>
359
- <FormCheckbox
360
- checked={selectedColumn.displayAsLink}
361
- onChange={() =>
362
- selectedColumn.setDisplayAsLink(
363
- !selectedColumn.displayAsLink,
364
- )
365
- }
366
- />
367
- <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
368
- <div className="ml-2 mr-1.5 flex h-full flex-shrink-0 items-center text-sm">
369
- Use Parameter in Link as Label:
272
+
273
+ <div className="mt-2 flex h-5 w-full items-center">
274
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
275
+ Number Scale:
276
+ </div>
277
+ <FormDropdownMenuTrigger
278
+ className="w-32"
279
+ onClick={openNumberScaleDropdown}
280
+ open={numberScaleDropdownPropsOpen}
281
+ >
282
+ {selectedColumn.numberScale ?? '(None)'}
283
+ </FormDropdownMenuTrigger>
284
+ <FormDropdownMenu
285
+ className="w-32"
286
+ {...numberScaleDropdownProps}
287
+ >
288
+ {[
289
+ undefined,
290
+ DataCubeNumberScale.PERCENT,
291
+ DataCubeNumberScale.BASIS_POINT,
292
+ DataCubeNumberScale.THOUSANDS,
293
+ DataCubeNumberScale.MILLIONS,
294
+ DataCubeNumberScale.BILLIONS,
295
+ DataCubeNumberScale.TRILLIONS,
296
+ DataCubeNumberScale.AUTO,
297
+ ].map((scale) => (
298
+ <FormDropdownMenuItem
299
+ key={scale ?? ''}
300
+ onClick={() => {
301
+ selectedColumn.setNumberScale(scale);
302
+ closeNumberScaleDropdown();
303
+ }}
304
+ autoFocus={scale === selectedColumn.numberScale}
305
+ >
306
+ {scale ?? '(None)'}
307
+ </FormDropdownMenuItem>
308
+ ))}
309
+ </FormDropdownMenu>
370
310
  </div>
371
- <FormTextInput
372
- className="w-48"
373
- placeholder={DEFAULT_URL_LABEL_QUERY_PARAM}
374
- value={selectedColumn.linkLabelParameter ?? ''}
375
- onChange={(event) => {
376
- const value = event.target.value.trim();
377
- selectedColumn.setLinkLabelParameter(
378
- value !== '' ? value : undefined,
379
- );
380
- }}
311
+
312
+ <div className="mt-2 flex h-5 w-full items-center">
313
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
314
+ Aggregation Type:
315
+ </div>
316
+ <FormDropdownMenuTrigger
317
+ className="w-32"
318
+ onClick={openAggregationTypeDropdown}
319
+ disabled={true}
320
+ open={aggregationTypeDropdownPropsOpen}
321
+ >
322
+ {selectedColumn.aggregateFunction ?? '(None)'}
323
+ </FormDropdownMenuTrigger>
324
+ <FormDropdownMenu
325
+ className="w-32"
326
+ {...aggregationTypeDropdownProps}
327
+ >
328
+ {[
329
+ DataCubeAggregateOperator.SUM,
330
+ DataCubeAggregateOperator.AVERAGE,
331
+ DataCubeAggregateOperator.COUNT,
332
+ DataCubeAggregateOperator.MIN,
333
+ DataCubeAggregateOperator.MAX,
334
+ ].map((op) => (
335
+ <FormDropdownMenuItem
336
+ key={op}
337
+ onClick={() => {
338
+ selectedColumn.setAggregateFunction(op);
339
+ closeAggregationTypeDropdown();
340
+ }}
341
+ autoFocus={op === selectedColumn.aggregateFunction}
342
+ >
343
+ {op}
344
+ </FormDropdownMenuItem>
345
+ ))}
346
+ </FormDropdownMenu>
347
+ <FormBadge_WIP />
348
+ </div>
349
+
350
+ <div className="mt-2 flex h-5 w-full items-center">
351
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
352
+ Exclude from HPivot?
353
+ </div>
354
+ <FormCheckbox
355
+ checked={selectedColumn.excludedFromHorizontalPivot}
356
+ onChange={() =>
357
+ selectedColumn.setExcludedFromHorizontalPivot(
358
+ !selectedColumn.excludedFromHorizontalPivot,
359
+ )
360
+ }
361
+ disabled={true}
362
+ />
363
+ <FormBadge_WIP />
364
+ </div>
365
+ </>
366
+ )}
367
+
368
+ {selectedColumn.dataType === DataCubeColumnDataType.TEXT && (
369
+ <>
370
+ <div className="mt-2 flex h-5 w-full items-center">
371
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
372
+ Dislay as Link?
373
+ <FormDocumentation
374
+ className="ml-1"
375
+ documentationKey={
376
+ DocumentationKey.DATA_CUBE_COLUMN_DISPLAY_AS_LINK
377
+ }
378
+ />
379
+ </div>
380
+ <FormCheckbox
381
+ checked={selectedColumn.displayAsLink}
382
+ onChange={() =>
383
+ selectedColumn.setDisplayAsLink(
384
+ !selectedColumn.displayAsLink,
385
+ )
386
+ }
387
+ />
388
+ <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
389
+ <div className="ml-2 mr-1.5 flex h-full flex-shrink-0 items-center text-sm">
390
+ Use Parameter in Link as Label:
391
+ </div>
392
+ <FormTextInput
393
+ className="w-48"
394
+ placeholder={DEFAULT_URL_LABEL_QUERY_PARAM}
395
+ value={selectedColumn.linkLabelParameter ?? ''}
396
+ onChange={(event) => {
397
+ const value = event.target.value.trim();
398
+ selectedColumn.setLinkLabelParameter(
399
+ value !== '' ? value : undefined,
400
+ );
401
+ }}
402
+ />
403
+ </div>
404
+ </>
405
+ )}
406
+
407
+ <div className="mt-2 flex h-5 w-full items-center">
408
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
409
+ {`Missing Value Format:`}
410
+ <FormDocumentation
411
+ className="ml-1"
412
+ documentationKey={
413
+ DocumentationKey.DATA_CUBE_COLUMN_MISSING_VALUE_FORMAT
414
+ }
381
415
  />
382
416
  </div>
383
- </>
384
- )}
385
-
386
- <div className="mt-2 flex h-5 w-full items-center">
387
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
388
- {`Missing Value Format:`}
389
- <FormDocumentation
390
- className="ml-1"
391
- documentationKey={
392
- DocumentationKey.DATA_CUBE_COLUMN_MISSING_VALUE_FORMAT
393
- }
417
+ <FormTextInput
418
+ className="w-16"
419
+ value={selectedColumn.missingValueDisplayText ?? ''}
420
+ onChange={(event) => {
421
+ const value = event.target.value.trim();
422
+ selectedColumn.setMissingValueDisplayText(
423
+ value !== '' ? value : undefined,
424
+ );
425
+ }}
426
+ placeholder="(empty)"
394
427
  />
395
428
  </div>
396
- <FormTextInput
397
- className="w-16"
398
- value={selectedColumn.missingValueDisplayText ?? ''}
399
- onChange={(event) => {
400
- const value = event.target.value.trim();
401
- selectedColumn.setMissingValueDisplayText(
402
- value !== '' ? value : undefined,
403
- );
404
- }}
405
- placeholder="(empty)"
406
- />
407
- </div>
408
429
 
409
- <div className="mt-2 flex h-5 w-full items-center">
410
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
411
- Visibility:
430
+ <div className="mt-2 flex h-5 w-full items-center">
431
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
432
+ Visibility:
433
+ </div>
434
+ <FormCheckbox
435
+ label="Blur content"
436
+ checked={selectedColumn.blur}
437
+ onChange={() =>
438
+ selectedColumn.setBlur(!selectedColumn.blur)
439
+ }
440
+ disabled={selectedColumn.hideFromView}
441
+ />
442
+ <FormCheckbox
443
+ className="ml-3"
444
+ label="Hide from view"
445
+ checked={selectedColumn.hideFromView}
446
+ onChange={() =>
447
+ selectedColumn.setHideFromView(
448
+ !selectedColumn.hideFromView,
449
+ )
450
+ }
451
+ />
412
452
  </div>
413
- <FormCheckbox
414
- label="Blur content"
415
- checked={selectedColumn.blur}
416
- onChange={() => selectedColumn.setBlur(!selectedColumn.blur)}
417
- disabled={selectedColumn.hideFromView}
418
- />
419
- <FormCheckbox
420
- className="ml-3"
421
- label="Hide from view"
422
- checked={selectedColumn.hideFromView}
423
- onChange={() =>
424
- selectedColumn.setHideFromView(!selectedColumn.hideFromView)
425
- }
426
- />
427
- </div>
428
453
 
429
- <div className="mt-2 flex h-5 w-full items-center">
430
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
431
- Pin:
454
+ <div className="mt-2 flex h-5 w-full items-center">
455
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
456
+ Pin:
457
+ </div>
458
+ <FormDropdownMenuTrigger
459
+ className="w-16"
460
+ onClick={openColumnPinDropdown}
461
+ open={columnPinDropdownPropsOpen}
462
+ >
463
+ {selectedColumn.pinned ?? '(None)'}
464
+ </FormDropdownMenuTrigger>
465
+ <FormDropdownMenu
466
+ className="w-16"
467
+ {...columnPinDropdownProps}
468
+ >
469
+ {[
470
+ undefined,
471
+ DataCubeColumnPinPlacement.LEFT,
472
+ DataCubeColumnPinPlacement.RIGHT,
473
+ ].map((placement) => (
474
+ <FormDropdownMenuItem
475
+ key={placement ?? ''}
476
+ onClick={() => {
477
+ selectedColumn.setPinned(placement);
478
+ closeColumnPinDropdown();
479
+ }}
480
+ autoFocus={placement === selectedColumn.pinned}
481
+ >
482
+ {placement ?? '(None)'}
483
+ </FormDropdownMenuItem>
484
+ ))}
485
+ </FormDropdownMenu>
432
486
  </div>
433
- <FormDropdownMenuTrigger
434
- className="w-16"
435
- onClick={openColumnPinDropdown}
436
- >
437
- {selectedColumn.pinned ?? '(None)'}
438
- </FormDropdownMenuTrigger>
439
- <FormDropdownMenu className="w-16" {...columnPinDropdownProps}>
440
- {[
441
- undefined,
442
- DataCubeColumnPinPlacement.LEFT,
443
- DataCubeColumnPinPlacement.RIGHT,
444
- ].map((placement) => (
445
- <FormDropdownMenuItem
446
- key={placement ?? ''}
447
- onClick={() => {
448
- selectedColumn.setPinned(placement);
449
- closeColumnPinDropdown();
450
- }}
451
- >
452
- {placement ?? '(None)'}
453
- </FormDropdownMenuItem>
454
- ))}
455
- </FormDropdownMenu>
456
- </div>
457
487
 
458
- <div className="mt-1.5 flex h-6 w-full items-center">
459
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
460
- Width:
461
- </div>
462
- <FormCheckbox
463
- label="(Any)"
464
- checked={
465
- selectedColumn.fixedWidth === undefined &&
466
- selectedColumn.minWidth === undefined &&
467
- selectedColumn.maxWidth === undefined
468
- }
469
- onChange={() => {
470
- if (
488
+ <div className="mt-1.5 flex h-6 w-full items-center">
489
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
490
+ Width:
491
+ </div>
492
+ <FormCheckbox
493
+ label="(Any)"
494
+ checked={
471
495
  selectedColumn.fixedWidth === undefined &&
472
496
  selectedColumn.minWidth === undefined &&
473
497
  selectedColumn.maxWidth === undefined
474
- ) {
475
- selectedColumn.setFixedWidth(DEFAULT_COLUMN_WIDTH);
476
- selectedColumn.setMinWidth(undefined);
477
- selectedColumn.setMaxWidth(undefined);
478
- } else {
479
- selectedColumn.setFixedWidth(undefined);
480
- selectedColumn.setMinWidth(undefined);
481
- selectedColumn.setMaxWidth(undefined);
482
498
  }
483
- }}
484
- />
485
-
486
- <FormCheckbox
487
- className="ml-3"
488
- label="Fixed"
489
- checked={selectedColumn.fixedWidth !== undefined}
490
- onChange={() => {
491
- selectedColumn.setFixedWidth(
492
- selectedColumn.fixedWidth !== undefined
493
- ? undefined
494
- : DEFAULT_COLUMN_WIDTH,
495
- );
496
- selectedColumn.setMinWidth(undefined);
497
- selectedColumn.setMaxWidth(undefined);
498
- }}
499
- />
500
- <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
501
- <FormNumberInput
502
- className="ml-1 w-16 text-sm"
503
- min={0}
504
- step={50}
505
- defaultValue={undefined}
506
- isValid={(value) => value !== undefined && value > 0}
507
- value={selectedColumn.fixedWidth}
508
- setValue={(value) => {
509
- selectedColumn.setFixedWidth(value);
510
- }}
511
- disabled={
512
- selectedColumn.minWidth !== undefined ||
513
- selectedColumn.maxWidth !== undefined
514
- }
515
- />
499
+ onChange={() => {
500
+ if (
501
+ selectedColumn.fixedWidth === undefined &&
502
+ selectedColumn.minWidth === undefined &&
503
+ selectedColumn.maxWidth === undefined
504
+ ) {
505
+ selectedColumn.setFixedWidth(DEFAULT_COLUMN_WIDTH);
506
+ selectedColumn.setMinWidth(undefined);
507
+ selectedColumn.setMaxWidth(undefined);
508
+ } else {
509
+ selectedColumn.setFixedWidth(undefined);
510
+ selectedColumn.setMinWidth(undefined);
511
+ selectedColumn.setMaxWidth(undefined);
512
+ }
513
+ }}
514
+ />
516
515
 
517
- <FormCheckbox
518
- className="ml-3"
519
- label="In range"
520
- checked={
521
- selectedColumn.minWidth !== undefined ||
522
- selectedColumn.maxWidth !== undefined
523
- }
524
- onChange={() => {
525
- if (
526
- selectedColumn.minWidth === undefined &&
527
- selectedColumn.maxWidth === undefined
528
- ) {
529
- selectedColumn.setMinWidth(DEFAULT_COLUMN_MIN_WIDTH);
530
- selectedColumn.setMaxWidth(DEFAULT_COLUMN_MAX_WIDTH);
531
- selectedColumn.setFixedWidth(undefined);
532
- } else {
516
+ <FormCheckbox
517
+ className="ml-3"
518
+ label="Fixed"
519
+ checked={selectedColumn.fixedWidth !== undefined}
520
+ onChange={() => {
521
+ selectedColumn.setFixedWidth(
522
+ selectedColumn.fixedWidth !== undefined
523
+ ? undefined
524
+ : DEFAULT_COLUMN_WIDTH,
525
+ );
533
526
  selectedColumn.setMinWidth(undefined);
534
527
  selectedColumn.setMaxWidth(undefined);
535
- selectedColumn.setFixedWidth(undefined);
528
+ }}
529
+ />
530
+ <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
531
+ <FormNumberInput
532
+ className="ml-1 w-16 text-sm"
533
+ min={0}
534
+ step={50}
535
+ defaultValue={undefined}
536
+ isValid={(value) => value !== undefined && value > 0}
537
+ value={selectedColumn.fixedWidth}
538
+ setValue={(value) => {
539
+ selectedColumn.setFixedWidth(value);
540
+ }}
541
+ disabled={
542
+ selectedColumn.minWidth !== undefined ||
543
+ selectedColumn.maxWidth !== undefined
536
544
  }
537
- }}
538
- />
539
- <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
540
- <FormNumberInput
541
- className="ml-1 w-16 text-sm"
542
- min={0}
543
- step={50}
544
- defaultValue={undefined}
545
- isValid={(value) => value !== undefined && value > 0}
546
- value={selectedColumn.minWidth}
547
- setValue={(value) => {
548
- selectedColumn.setMinWidth(value);
549
- }}
550
- disabled={selectedColumn.fixedWidth !== undefined}
551
- />
552
- <div className="ml-1 h-[1px] w-1 flex-shrink-0 bg-neutral-400" />
553
- <FormNumberInput
554
- className="ml-1 w-16 text-sm"
555
- min={selectedColumn.minWidth ?? 0}
556
- step={50}
557
- defaultValue={undefined}
558
- isValid={(value) =>
559
- value !== undefined &&
560
- value >= (selectedColumn.minWidth ?? 0)
561
- }
562
- value={selectedColumn.maxWidth}
563
- setValue={(value) => {
564
- selectedColumn.setMaxWidth(value);
565
- }}
566
- disabled={selectedColumn.fixedWidth !== undefined}
567
- />
568
- </div>
569
-
570
- <div className="my-2 h-[1px] w-full bg-neutral-200" />
571
-
572
- <div className="mt-2 flex h-5 w-full items-center">
573
- <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
574
- Font:
575
- </div>
576
- <FormDropdownMenuTrigger
577
- className="w-28"
578
- onClick={openFontFamilyDropdown}
579
- >
580
- {selectedColumn.fontFamily ?? gridConfiguration.fontFamily}
581
- </FormDropdownMenuTrigger>
582
- <FormDropdownMenu className="w-28" {...fontFamilyDropdownProps}>
583
- {[
584
- DataCubeFont.ARIAL,
585
- DataCubeFont.ROBOTO,
586
- DataCubeFont.ROBOTO_CONDENSED,
587
- ].map((font) => (
588
- <FormDropdownMenuItem
589
- key={font}
590
- onClick={() => {
591
- selectedColumn.setFontFamily(font);
592
- closeFontFamilyDropdown();
593
- }}
594
- >
595
- {font}
596
- </FormDropdownMenuItem>
597
- ))}
598
- <FormDropdownMenuItemSeparator />
599
- {[
600
- DataCubeFont.GEORGIA,
601
- DataCubeFont.ROBOTO_SERIF,
602
- DataCubeFont.TIMES_NEW_ROMAN,
603
- ].map((font) => (
604
- <FormDropdownMenuItem
605
- key={font}
606
- onClick={() => {
607
- selectedColumn.setFontFamily(font);
608
- closeFontFamilyDropdown();
609
- }}
610
- >
611
- {font}
612
- </FormDropdownMenuItem>
613
- ))}
614
- <FormDropdownMenuItemSeparator />
615
- {[
616
- DataCubeFont.JERBRAINS_MONO,
617
- DataCubeFont.ROBOTO_MONO,
618
- DataCubeFont.UBUNTU_MONO,
619
- ].map((font) => (
620
- <FormDropdownMenuItem
621
- key={font}
622
- onClick={() => {
623
- selectedColumn.setFontFamily(font);
624
- closeFontFamilyDropdown();
625
- }}
626
- >
627
- {font}
628
- </FormDropdownMenuItem>
629
- ))}
630
- </FormDropdownMenu>
631
-
632
- <FormDropdownMenuTrigger
633
- className="ml-1 w-10"
634
- onClick={openFontSizeDropdown}
635
- >
636
- {selectedColumn.fontSize ?? gridConfiguration.fontSize}
637
- </FormDropdownMenuTrigger>
638
- <FormDropdownMenu
639
- className="w-10"
640
- {...openFontSizeDropdownProps}
641
- >
642
- {[
643
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26,
644
- 28, 32, 36, 48, 72,
645
- ].map((size) => (
646
- <FormDropdownMenuItem
647
- key={size}
648
- onClick={() => {
649
- selectedColumn.setFontSize(size);
650
- closeFontSizeDropdown();
651
- }}
652
- >
653
- {size}
654
- </FormDropdownMenuItem>
655
- ))}
656
- </FormDropdownMenu>
545
+ />
657
546
 
658
- <div className="relative ml-2 flex h-5">
659
- <button
660
- title="Bold"
661
- className={cn(
662
- '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]',
663
- {
664
- 'bg-neutral-200':
665
- selectedColumn.fontBold ?? gridConfiguration.fontBold,
666
- },
667
- )}
668
- onClick={() =>
669
- selectedColumn.setFontBold(
670
- !(
671
- selectedColumn.fontBold ?? gridConfiguration.fontBold
672
- ),
673
- )
547
+ <FormCheckbox
548
+ className="ml-3"
549
+ label="In range"
550
+ checked={
551
+ selectedColumn.minWidth !== undefined ||
552
+ selectedColumn.maxWidth !== undefined
674
553
  }
675
- >
676
- <DataCubeIcon.FontBold />
677
- </button>
678
- <button
679
- title="Italic"
680
- className={cn(
681
- '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]',
682
- {
683
- 'bg-neutral-200':
684
- selectedColumn.fontItalic ??
685
- gridConfiguration.fontItalic,
686
- },
687
- )}
688
- onClick={() =>
689
- selectedColumn.setFontItalic(
690
- !(
691
- selectedColumn.fontItalic ??
692
- gridConfiguration.fontItalic
693
- ),
694
- )
695
- }
696
- >
697
- <DataCubeIcon.FontItalic />
698
- </button>
699
- <button
700
- title={`Underline${(selectedColumn.fontUnderline ?? gridConfiguration.fontUnderline) ? ` (${selectedColumn.fontUnderline ?? gridConfiguration.fontUnderline})` : ''}`}
701
- className={cn(
702
- '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]',
703
- {
704
- 'bg-neutral-200':
705
- (selectedColumn.fontUnderline ??
706
- gridConfiguration.fontUnderline) !== undefined,
707
- },
708
- )}
709
- onClick={() => {
554
+ onChange={() => {
710
555
  if (
711
- (selectedColumn.fontUnderline ??
712
- gridConfiguration.fontUnderline) === undefined
556
+ selectedColumn.minWidth === undefined &&
557
+ selectedColumn.maxWidth === undefined
713
558
  ) {
714
- selectedColumn.setFontUnderline(
715
- DataCubeFontFormatUnderlineVariant.SOLID,
716
- );
717
- selectedColumn.setFontStrikethrough(false);
559
+ selectedColumn.setMinWidth(DEFAULT_COLUMN_MIN_WIDTH);
560
+ selectedColumn.setMaxWidth(DEFAULT_COLUMN_MAX_WIDTH);
561
+ selectedColumn.setFixedWidth(undefined);
718
562
  } else {
719
- selectedColumn.setFontUnderline(undefined);
563
+ selectedColumn.setMinWidth(undefined);
564
+ selectedColumn.setMaxWidth(undefined);
565
+ selectedColumn.setFixedWidth(undefined);
720
566
  }
721
567
  }}
568
+ />
569
+ <div className="ml-1 h-[1px] w-2 flex-shrink-0 bg-neutral-400" />
570
+ <FormNumberInput
571
+ className="ml-1 w-16 text-sm"
572
+ min={0}
573
+ step={50}
574
+ defaultValue={undefined}
575
+ isValid={(value) => value !== undefined && value > 0}
576
+ value={selectedColumn.minWidth}
577
+ setValue={(value) => {
578
+ selectedColumn.setMinWidth(value);
579
+ }}
580
+ disabled={selectedColumn.fixedWidth !== undefined}
581
+ />
582
+ <div className="ml-1 h-[1px] w-1 flex-shrink-0 bg-neutral-400" />
583
+ <FormNumberInput
584
+ className="ml-1 w-16 text-sm"
585
+ min={selectedColumn.minWidth ?? 0}
586
+ step={50}
587
+ defaultValue={undefined}
588
+ isValid={(value) =>
589
+ value !== undefined &&
590
+ value >= (selectedColumn.minWidth ?? 0)
591
+ }
592
+ value={selectedColumn.maxWidth}
593
+ setValue={(value) => {
594
+ selectedColumn.setMaxWidth(value);
595
+ }}
596
+ disabled={selectedColumn.fixedWidth !== undefined}
597
+ />
598
+ </div>
599
+
600
+ <div className="my-2 h-[1px] w-full bg-neutral-200" />
601
+
602
+ <div className="mt-2 flex h-5 w-full items-center">
603
+ <div className="flex h-full w-32 flex-shrink-0 items-center text-sm">
604
+ Font:
605
+ </div>
606
+ <FormDropdownMenuTrigger
607
+ className="w-28"
608
+ onClick={openFontFamilyDropdown}
609
+ open={fontFamilyDropdownPropsOpen}
722
610
  >
723
- <DataCubeIcon.FontUnderline />
724
- </button>
725
- <button
726
- 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]"
727
- onClick={openFontFormatUnderlineVariantDropdown}
728
- >
729
- <div
730
- className={cn('h-4 w-[0.5px] bg-neutral-200', {
731
- 'opacity-0':
732
- (selectedColumn.fontUnderline ??
733
- gridConfiguration.fontUnderline) !== undefined,
734
- })}
735
- />
736
- <DataCubeIcon.CaretDown />
737
- </button>
611
+ {selectedColumn.fontFamily ?? gridConfiguration.fontFamily}
612
+ </FormDropdownMenuTrigger>
738
613
  <FormDropdownMenu
739
- className="w-14"
740
- {...fontFormatUnderlineVariantDropdownProps}
614
+ className="w-28"
615
+ {...fontFamilyDropdownProps}
741
616
  >
742
617
  {[
743
- DataCubeFontFormatUnderlineVariant.SOLID,
744
- DataCubeFontFormatUnderlineVariant.DASHED,
745
- DataCubeFontFormatUnderlineVariant.DOTTED,
746
- DataCubeFontFormatUnderlineVariant.DOUBLE,
747
- DataCubeFontFormatUnderlineVariant.WAVY,
748
- ].map((variant) => (
618
+ DataCubeFont.ARIAL,
619
+ DataCubeFont.ROBOTO,
620
+ DataCubeFont.ROBOTO_CONDENSED,
621
+ ].map((font) => (
749
622
  <FormDropdownMenuItem
750
- className="relative"
751
- key={variant}
623
+ key={font}
752
624
  onClick={() => {
753
- selectedColumn.setFontUnderline(variant);
754
- selectedColumn.setFontStrikethrough(false);
755
- closeFontFormatUnderlineVariantDropdown();
625
+ selectedColumn.setFontFamily(font);
626
+ closeFontFamilyDropdown();
756
627
  }}
628
+ autoFocus={
629
+ font ===
630
+ (selectedColumn.fontFamily ??
631
+ gridConfiguration.fontFamily)
632
+ }
757
633
  >
758
- <div
759
- className={cn(
760
- '!hover:underline absolute top-0 !underline',
761
- {
762
- '!hover:decoration-solid !decoration-solid':
763
- variant ===
764
- DataCubeFontFormatUnderlineVariant.SOLID,
765
- '!hover:decoration-dashed !decoration-dashed':
766
- variant ===
767
- DataCubeFontFormatUnderlineVariant.DASHED,
768
- '!hover:decoration-dotted !decoration-dotted':
769
- variant ===
770
- DataCubeFontFormatUnderlineVariant.DOTTED,
771
- '!hover:decoration-double !decoration-double':
772
- variant ===
773
- DataCubeFontFormatUnderlineVariant.DOUBLE,
774
- '!hover:decoration-wavy !decoration-wavy':
775
- variant ===
776
- DataCubeFontFormatUnderlineVariant.WAVY,
777
- 'text-sky-600':
778
- variant ===
779
- (selectedColumn.fontUnderline ??
780
- gridConfiguration.fontUnderline),
781
- },
782
- )}
783
- >
784
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
785
- </div>
634
+ {font}
786
635
  </FormDropdownMenuItem>
787
636
  ))}
788
- </FormDropdownMenu>
789
- <button
790
- title="Strikethrough"
791
- className={cn(
792
- '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]',
793
- {
794
- 'bg-neutral-200':
795
- selectedColumn.fontStrikethrough ??
796
- gridConfiguration.fontStrikethrough,
797
- },
798
- )}
799
- onClick={() => {
800
- if (
801
- selectedColumn.fontStrikethrough ??
802
- gridConfiguration.fontStrikethrough
803
- ) {
804
- selectedColumn.setFontStrikethrough(false);
805
- } else {
806
- selectedColumn.setFontStrikethrough(true);
807
- selectedColumn.setFontUnderline(undefined);
808
- }
809
- }}
810
- >
811
- <DataCubeIcon.FontStrikethrough />
812
- </button>
813
- <button
814
- title={`Case${(selectedColumn.fontCase ?? gridConfiguration.fontCase) ? ` (${selectedColumn.fontCase ?? gridConfiguration.fontCase})` : ''}`}
815
- className={cn(
816
- '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]',
817
- {
818
- 'bg-neutral-200':
819
- (selectedColumn.fontCase ??
820
- gridConfiguration.fontCase) !== undefined,
821
- },
822
- )}
823
- onClick={() => {
824
- if (
825
- (selectedColumn.fontCase ??
826
- gridConfiguration.fontCase) === undefined
827
- ) {
828
- selectedColumn.setFontCase(DataCubeFontCase.UPPERCASE);
829
- } else {
830
- selectedColumn.setFontCase(undefined);
831
- }
832
- }}
833
- >
834
- <DataCubeIcon.FontCase className="stroke-[0.5px]" />
835
- </button>
836
- <button
837
- 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]"
838
- onClick={openFontCaseDropdown}
839
- >
840
- <div
841
- className={cn('h-4 w-[0.5px] bg-neutral-200', {
842
- 'opacity-0':
843
- (selectedColumn.fontCase ??
844
- gridConfiguration.fontCase) !== undefined,
845
- })}
846
- />
847
- <DataCubeIcon.CaretDown />
848
- </button>
849
- <FormDropdownMenu className="w-20" {...fontCaseDropdownProps}>
637
+ <FormDropdownMenuItemSeparator />
850
638
  {[
851
- DataCubeFontCase.LOWERCASE,
852
- DataCubeFontCase.UPPERCASE,
853
- DataCubeFontCase.CAPITALIZE,
854
- ].map((fontCase) => (
639
+ DataCubeFont.GEORGIA,
640
+ DataCubeFont.ROBOTO_SERIF,
641
+ DataCubeFont.TIMES_NEW_ROMAN,
642
+ ].map((font) => (
855
643
  <FormDropdownMenuItem
856
- className="relative"
857
- key={fontCase}
644
+ key={font}
858
645
  onClick={() => {
859
- selectedColumn.setFontCase(fontCase);
860
- closeFontCaseDropdown();
646
+ selectedColumn.setFontFamily(font);
647
+ closeFontFamilyDropdown();
861
648
  }}
649
+ autoFocus={
650
+ font ===
651
+ (selectedColumn.fontFamily ??
652
+ gridConfiguration.fontFamily)
653
+ }
862
654
  >
863
- <div
864
- className={cn({
865
- lowercase: fontCase === DataCubeFontCase.LOWERCASE,
866
- uppercase: fontCase === DataCubeFontCase.UPPERCASE,
867
- capitalize:
868
- fontCase === DataCubeFontCase.CAPITALIZE,
869
- 'text-sky-600':
870
- fontCase ===
871
- (selectedColumn.fontCase ??
872
- gridConfiguration.fontCase),
873
- })}
874
- >
875
- {fontCase}
876
- </div>
655
+ {font}
656
+ </FormDropdownMenuItem>
657
+ ))}
658
+ <FormDropdownMenuItemSeparator />
659
+ {[
660
+ DataCubeFont.JERBRAINS_MONO,
661
+ DataCubeFont.ROBOTO_MONO,
662
+ DataCubeFont.UBUNTU_MONO,
663
+ ].map((font) => (
664
+ <FormDropdownMenuItem
665
+ key={font}
666
+ onClick={() => {
667
+ selectedColumn.setFontFamily(font);
668
+ closeFontFamilyDropdown();
669
+ }}
670
+ autoFocus={
671
+ font ===
672
+ (selectedColumn.fontFamily ??
673
+ gridConfiguration.fontFamily)
674
+ }
675
+ >
676
+ {font}
877
677
  </FormDropdownMenuItem>
878
678
  ))}
879
679
  </FormDropdownMenu>
880
- </div>
881
680
 
882
- <div className="relative ml-2 flex h-5">
883
- <button
884
- title="Align Left"
885
- className={cn(
886
- '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]',
887
- {
888
- 'bg-neutral-200':
889
- (selectedColumn.textAlign ??
890
- gridConfiguration.textAlign) ===
891
- DataCubeFontTextAlignment.LEFT,
892
- },
893
- )}
894
- onClick={() =>
895
- selectedColumn.setTextAlign(
896
- DataCubeFontTextAlignment.LEFT,
897
- )
898
- }
899
- >
900
- <DataCubeIcon.TextAlignLeft />
901
- </button>
902
- <button
903
- title="Align Center"
904
- className={cn(
905
- '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]',
906
- {
907
- 'bg-neutral-200':
908
- (selectedColumn.textAlign ??
909
- gridConfiguration.textAlign) ===
910
- DataCubeFontTextAlignment.CENTER,
911
- },
912
- )}
913
- onClick={() =>
914
- selectedColumn.setTextAlign(
915
- DataCubeFontTextAlignment.CENTER,
916
- )
917
- }
681
+ <FormDropdownMenuTrigger
682
+ className="ml-1 w-10"
683
+ onClick={openFontSizeDropdown}
684
+ open={openFontSizeDropdownPropsOpen}
918
685
  >
919
- <DataCubeIcon.TextAlignCenter />
920
- </button>
921
- <button
922
- title="Align Right"
923
- className={cn(
924
- '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]',
925
- {
926
- 'bg-neutral-200':
927
- (selectedColumn.textAlign ??
928
- gridConfiguration.textAlign) ===
929
- DataCubeFontTextAlignment.RIGHT,
930
- },
931
- )}
932
- onClick={() =>
933
- selectedColumn.setTextAlign(
934
- DataCubeFontTextAlignment.RIGHT,
935
- )
936
- }
686
+ {selectedColumn.fontSize ?? gridConfiguration.fontSize}
687
+ </FormDropdownMenuTrigger>
688
+ <FormDropdownMenu
689
+ className="w-10"
690
+ {...openFontSizeDropdownProps}
937
691
  >
938
- <DataCubeIcon.TextAlignRight />
939
- </button>
940
- </div>
941
- </div>
942
-
943
- <div className="mt-2 flex w-full">
944
- <div className="flex h-6 w-32 flex-shrink-0 items-center text-sm">
945
- Colors:
946
- </div>
947
- <div className="h-18">
948
- <div className="flex h-6">
949
- <div className="w-16 flex-shrink-0" />
950
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
951
- Normal
952
- </div>
953
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
954
- Negative
955
- </div>
956
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
957
- Zero
958
- </div>
959
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
960
- Error
961
- </div>
962
- </div>
963
- <div className="flex h-6">
964
- <div className="flex h-full w-16 flex-shrink-0 items-center text-sm">
965
- Foreground:
966
- </div>
967
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
968
- <FormColorPickerButton
969
- color={
970
- selectedColumn.normalForegroundColor ??
971
- gridConfiguration.normalForegroundColor
972
- }
973
- defaultColor={gridConfiguration.normalForegroundColor}
974
- onChange={(value) =>
975
- selectedColumn.setNormalForegroundColor(value)
976
- }
977
- />
978
- </div>
979
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
980
- <FormColorPickerButton
981
- color={
982
- selectedColumn.negativeForegroundColor ??
983
- gridConfiguration.negativeForegroundColor
984
- }
985
- defaultColor={gridConfiguration.negativeForegroundColor}
986
- onChange={(value) =>
987
- selectedColumn.setNegativeForegroundColor(value)
988
- }
989
- />
990
- </div>
991
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
992
- <FormColorPickerButton
993
- color={
994
- selectedColumn.zeroForegroundColor ??
995
- gridConfiguration.zeroForegroundColor
692
+ {[
693
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26,
694
+ 28, 32, 36, 48, 72,
695
+ ].map((size) => (
696
+ <FormDropdownMenuItem
697
+ key={size}
698
+ onClick={() => {
699
+ selectedColumn.setFontSize(size);
700
+ closeFontSizeDropdown();
701
+ }}
702
+ autoFocus={
703
+ size ===
704
+ (selectedColumn.fontSize ??
705
+ gridConfiguration.fontSize)
996
706
  }
997
- defaultColor={gridConfiguration.zeroForegroundColor}
998
- onChange={(value) =>
999
- selectedColumn.setZeroForegroundColor(value)
707
+ >
708
+ {size}
709
+ </FormDropdownMenuItem>
710
+ ))}
711
+ </FormDropdownMenu>
712
+
713
+ <div className="relative ml-2 flex h-5">
714
+ <button
715
+ title="Bold"
716
+ className={cn(
717
+ '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:z-[1]',
718
+ {
719
+ 'bg-neutral-200':
720
+ selectedColumn.fontBold ??
721
+ gridConfiguration.fontBold,
722
+ },
723
+ )}
724
+ onClick={() =>
725
+ selectedColumn.setFontBold(
726
+ !(
727
+ selectedColumn.fontBold ??
728
+ gridConfiguration.fontBold
729
+ ),
730
+ )
731
+ }
732
+ >
733
+ <DataCubeIcon.FontBold />
734
+ </button>
735
+ <button
736
+ title="Italic"
737
+ className={cn(
738
+ '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:z-[1]',
739
+ {
740
+ 'bg-neutral-200':
741
+ selectedColumn.fontItalic ??
742
+ gridConfiguration.fontItalic,
743
+ },
744
+ )}
745
+ onClick={() =>
746
+ selectedColumn.setFontItalic(
747
+ !(
748
+ selectedColumn.fontItalic ??
749
+ gridConfiguration.fontItalic
750
+ ),
751
+ )
752
+ }
753
+ >
754
+ <DataCubeIcon.FontItalic />
755
+ </button>
756
+ <button
757
+ title={`Underline${(selectedColumn.fontUnderline ?? gridConfiguration.fontUnderline) ? ` (${selectedColumn.fontUnderline ?? gridConfiguration.fontUnderline})` : ''}`}
758
+ className={cn(
759
+ '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:z-[1]',
760
+ {
761
+ 'bg-neutral-200':
762
+ (selectedColumn.fontUnderline ??
763
+ gridConfiguration.fontUnderline) !== undefined,
764
+ },
765
+ )}
766
+ onClick={() => {
767
+ if (
768
+ (selectedColumn.fontUnderline ??
769
+ gridConfiguration.fontUnderline) === undefined
770
+ ) {
771
+ selectedColumn.setFontUnderline(
772
+ DataCubeFontFormatUnderlineVariant.SOLID,
773
+ );
774
+ selectedColumn.setFontStrikethrough(false);
775
+ } else {
776
+ selectedColumn.setFontUnderline(undefined);
1000
777
  }
778
+ }}
779
+ >
780
+ <DataCubeIcon.FontUnderline />
781
+ </button>
782
+ <button
783
+ 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:z-[1]"
784
+ onClick={openFontFormatUnderlineVariantDropdown}
785
+ >
786
+ <div
787
+ className={cn('h-4 w-[0.5px] bg-neutral-200', {
788
+ 'opacity-0':
789
+ (selectedColumn.fontUnderline ??
790
+ gridConfiguration.fontUnderline) !== undefined,
791
+ })}
1001
792
  />
1002
- </div>
1003
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1004
- <FormColorPickerButton
1005
- color={
1006
- selectedColumn.errorForegroundColor ??
1007
- gridConfiguration.errorForegroundColor
793
+ <DataCubeIcon.CaretDown />
794
+ </button>
795
+ <FormDropdownMenu
796
+ className="w-14"
797
+ {...fontFormatUnderlineVariantDropdownProps}
798
+ >
799
+ {[
800
+ DataCubeFontFormatUnderlineVariant.SOLID,
801
+ DataCubeFontFormatUnderlineVariant.DASHED,
802
+ DataCubeFontFormatUnderlineVariant.DOTTED,
803
+ DataCubeFontFormatUnderlineVariant.DOUBLE,
804
+ DataCubeFontFormatUnderlineVariant.WAVY,
805
+ ].map((variant) => (
806
+ <FormDropdownMenuItem
807
+ className="relative"
808
+ key={variant}
809
+ onClick={() => {
810
+ selectedColumn.setFontUnderline(variant);
811
+ selectedColumn.setFontStrikethrough(false);
812
+ closeFontFormatUnderlineVariantDropdown();
813
+ }}
814
+ autoFocus={
815
+ variant ===
816
+ (selectedColumn.fontUnderline ??
817
+ gridConfiguration.fontUnderline)
818
+ }
819
+ >
820
+ <div
821
+ className={cn(
822
+ '!hover:underline absolute top-0 !underline',
823
+ {
824
+ '!hover:decoration-solid !decoration-solid':
825
+ variant ===
826
+ DataCubeFontFormatUnderlineVariant.SOLID,
827
+ '!hover:decoration-dashed !decoration-dashed':
828
+ variant ===
829
+ DataCubeFontFormatUnderlineVariant.DASHED,
830
+ '!hover:decoration-dotted !decoration-dotted':
831
+ variant ===
832
+ DataCubeFontFormatUnderlineVariant.DOTTED,
833
+ '!hover:decoration-double !decoration-double':
834
+ variant ===
835
+ DataCubeFontFormatUnderlineVariant.DOUBLE,
836
+ '!hover:decoration-wavy !decoration-wavy':
837
+ variant ===
838
+ DataCubeFontFormatUnderlineVariant.WAVY,
839
+ },
840
+ )}
841
+ >
842
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
843
+ </div>
844
+ </FormDropdownMenuItem>
845
+ ))}
846
+ </FormDropdownMenu>
847
+ <button
848
+ title="Strikethrough"
849
+ className={cn(
850
+ '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:z-[1]',
851
+ {
852
+ 'bg-neutral-200':
853
+ selectedColumn.fontStrikethrough ??
854
+ gridConfiguration.fontStrikethrough,
855
+ },
856
+ )}
857
+ onClick={() => {
858
+ if (
859
+ selectedColumn.fontStrikethrough ??
860
+ gridConfiguration.fontStrikethrough
861
+ ) {
862
+ selectedColumn.setFontStrikethrough(false);
863
+ } else {
864
+ selectedColumn.setFontStrikethrough(true);
865
+ selectedColumn.setFontUnderline(undefined);
1008
866
  }
1009
- defaultColor={gridConfiguration.errorForegroundColor}
1010
- onChange={(value) =>
1011
- selectedColumn.setErrorForegroundColor(value)
867
+ }}
868
+ >
869
+ <DataCubeIcon.FontStrikethrough />
870
+ </button>
871
+ <button
872
+ title={`Case${(selectedColumn.fontCase ?? gridConfiguration.fontCase) ? ` (${selectedColumn.fontCase ?? gridConfiguration.fontCase})` : ''}`}
873
+ className={cn(
874
+ '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:z-[1]',
875
+ {
876
+ 'bg-neutral-200':
877
+ (selectedColumn.fontCase ??
878
+ gridConfiguration.fontCase) !== undefined,
879
+ },
880
+ )}
881
+ onClick={() => {
882
+ if (
883
+ (selectedColumn.fontCase ??
884
+ gridConfiguration.fontCase) === undefined
885
+ ) {
886
+ selectedColumn.setFontCase(
887
+ DataCubeFontCase.UPPERCASE,
888
+ );
889
+ } else {
890
+ selectedColumn.setFontCase(undefined);
1012
891
  }
892
+ }}
893
+ >
894
+ <DataCubeIcon.FontCase className="stroke-[0.5px]" />
895
+ </button>
896
+ <button
897
+ 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:z-[1]"
898
+ onClick={openFontCaseDropdown}
899
+ >
900
+ <div
901
+ className={cn('h-4 w-[0.5px] bg-neutral-200', {
902
+ 'opacity-0':
903
+ (selectedColumn.fontCase ??
904
+ gridConfiguration.fontCase) !== undefined,
905
+ })}
1013
906
  />
1014
- </div>
907
+ <DataCubeIcon.CaretDown />
908
+ </button>
909
+ <FormDropdownMenu
910
+ className="w-20"
911
+ {...fontCaseDropdownProps}
912
+ >
913
+ {[
914
+ DataCubeFontCase.LOWERCASE,
915
+ DataCubeFontCase.UPPERCASE,
916
+ DataCubeFontCase.CAPITALIZE,
917
+ ].map((fontCase) => (
918
+ <FormDropdownMenuItem
919
+ key={fontCase}
920
+ onClick={() => {
921
+ selectedColumn.setFontCase(fontCase);
922
+ closeFontCaseDropdown();
923
+ }}
924
+ autoFocus={
925
+ fontCase ===
926
+ (selectedColumn.fontCase ??
927
+ gridConfiguration.fontCase)
928
+ }
929
+ >
930
+ <div
931
+ className={cn({
932
+ lowercase:
933
+ fontCase === DataCubeFontCase.LOWERCASE,
934
+ uppercase:
935
+ fontCase === DataCubeFontCase.UPPERCASE,
936
+ capitalize:
937
+ fontCase === DataCubeFontCase.CAPITALIZE,
938
+ })}
939
+ >
940
+ {fontCase}
941
+ </div>
942
+ </FormDropdownMenuItem>
943
+ ))}
944
+ </FormDropdownMenu>
1015
945
  </div>
1016
- <div className="flex h-6">
1017
- <div className="flex h-full w-16 flex-shrink-0 items-center text-sm">
1018
- Background:
1019
- </div>
1020
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1021
- <FormColorPickerButton
1022
- color={
1023
- selectedColumn.normalBackgroundColor ??
1024
- gridConfiguration.normalBackgroundColor
1025
- }
1026
- defaultColor={gridConfiguration.normalBackgroundColor}
1027
- onChange={(value) =>
1028
- selectedColumn.setNormalBackgroundColor(value)
1029
- }
1030
- />
1031
- </div>
1032
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1033
- <FormColorPickerButton
1034
- color={
1035
- selectedColumn.negativeBackgroundColor ??
1036
- gridConfiguration.negativeBackgroundColor
1037
- }
1038
- defaultColor={gridConfiguration.negativeBackgroundColor}
1039
- onChange={(value) =>
1040
- selectedColumn.setNegativeBackgroundColor(value)
1041
- }
1042
- />
946
+
947
+ <div className="relative ml-2 flex h-5">
948
+ <button
949
+ title="Align Left"
950
+ className={cn(
951
+ '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:z-[1]',
952
+ {
953
+ 'bg-neutral-200':
954
+ (selectedColumn.textAlign ??
955
+ gridConfiguration.textAlign) ===
956
+ DataCubeFontTextAlignment.LEFT,
957
+ },
958
+ )}
959
+ onClick={() =>
960
+ selectedColumn.setTextAlign(
961
+ DataCubeFontTextAlignment.LEFT,
962
+ )
963
+ }
964
+ >
965
+ <DataCubeIcon.TextAlignLeft />
966
+ </button>
967
+ <button
968
+ title="Align Center"
969
+ className={cn(
970
+ '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:z-[1]',
971
+ {
972
+ 'bg-neutral-200':
973
+ (selectedColumn.textAlign ??
974
+ gridConfiguration.textAlign) ===
975
+ DataCubeFontTextAlignment.CENTER,
976
+ },
977
+ )}
978
+ onClick={() =>
979
+ selectedColumn.setTextAlign(
980
+ DataCubeFontTextAlignment.CENTER,
981
+ )
982
+ }
983
+ >
984
+ <DataCubeIcon.TextAlignCenter />
985
+ </button>
986
+ <button
987
+ title="Align Right"
988
+ className={cn(
989
+ '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:z-[1]',
990
+ {
991
+ 'bg-neutral-200':
992
+ (selectedColumn.textAlign ??
993
+ gridConfiguration.textAlign) ===
994
+ DataCubeFontTextAlignment.RIGHT,
995
+ },
996
+ )}
997
+ onClick={() =>
998
+ selectedColumn.setTextAlign(
999
+ DataCubeFontTextAlignment.RIGHT,
1000
+ )
1001
+ }
1002
+ >
1003
+ <DataCubeIcon.TextAlignRight />
1004
+ </button>
1005
+ </div>
1006
+ </div>
1007
+
1008
+ <div className="mt-2 flex w-full">
1009
+ <div className="flex h-6 w-32 flex-shrink-0 items-center text-sm">
1010
+ Colors:
1011
+ </div>
1012
+ <div className="h-18">
1013
+ <div className="flex h-6">
1014
+ <div className="w-16 flex-shrink-0" />
1015
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
1016
+ Normal
1017
+ </div>
1018
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
1019
+ Negative
1020
+ </div>
1021
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
1022
+ Zero
1023
+ </div>
1024
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center text-sm">
1025
+ Error
1026
+ </div>
1043
1027
  </div>
1044
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1045
- <FormColorPickerButton
1046
- color={
1047
- selectedColumn.zeroBackgroundColor ??
1048
- gridConfiguration.zeroBackgroundColor
1049
- }
1050
- defaultColor={gridConfiguration.zeroBackgroundColor}
1051
- onChange={(value) =>
1052
- selectedColumn.setZeroBackgroundColor(value)
1053
- }
1054
- />
1028
+ <div className="flex h-6">
1029
+ <div className="flex h-full w-16 flex-shrink-0 items-center text-sm">
1030
+ Foreground:
1031
+ </div>
1032
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1033
+ <FormColorPickerButton
1034
+ color={
1035
+ selectedColumn.normalForegroundColor ??
1036
+ gridConfiguration.normalForegroundColor
1037
+ }
1038
+ defaultColor={gridConfiguration.normalForegroundColor}
1039
+ onChange={(value) =>
1040
+ selectedColumn.setNormalForegroundColor(value)
1041
+ }
1042
+ />
1043
+ </div>
1044
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1045
+ <FormColorPickerButton
1046
+ color={
1047
+ selectedColumn.negativeForegroundColor ??
1048
+ gridConfiguration.negativeForegroundColor
1049
+ }
1050
+ defaultColor={
1051
+ gridConfiguration.negativeForegroundColor
1052
+ }
1053
+ onChange={(value) =>
1054
+ selectedColumn.setNegativeForegroundColor(value)
1055
+ }
1056
+ />
1057
+ </div>
1058
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1059
+ <FormColorPickerButton
1060
+ color={
1061
+ selectedColumn.zeroForegroundColor ??
1062
+ gridConfiguration.zeroForegroundColor
1063
+ }
1064
+ defaultColor={gridConfiguration.zeroForegroundColor}
1065
+ onChange={(value) =>
1066
+ selectedColumn.setZeroForegroundColor(value)
1067
+ }
1068
+ />
1069
+ </div>
1070
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1071
+ <FormColorPickerButton
1072
+ color={
1073
+ selectedColumn.errorForegroundColor ??
1074
+ gridConfiguration.errorForegroundColor
1075
+ }
1076
+ defaultColor={gridConfiguration.errorForegroundColor}
1077
+ onChange={(value) =>
1078
+ selectedColumn.setErrorForegroundColor(value)
1079
+ }
1080
+ />
1081
+ </div>
1055
1082
  </div>
1056
- <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1057
- <FormColorPickerButton
1058
- color={
1059
- selectedColumn.errorBackgroundColor ??
1060
- gridConfiguration.errorBackgroundColor
1061
- }
1062
- defaultColor={gridConfiguration.errorBackgroundColor}
1063
- onChange={(value) =>
1064
- selectedColumn.setErrorBackgroundColor(value)
1065
- }
1066
- />
1083
+ <div className="flex h-6">
1084
+ <div className="flex h-full w-16 flex-shrink-0 items-center text-sm">
1085
+ Background:
1086
+ </div>
1087
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1088
+ <FormColorPickerButton
1089
+ color={
1090
+ selectedColumn.normalBackgroundColor ??
1091
+ gridConfiguration.normalBackgroundColor
1092
+ }
1093
+ defaultColor={gridConfiguration.normalBackgroundColor}
1094
+ onChange={(value) =>
1095
+ selectedColumn.setNormalBackgroundColor(value)
1096
+ }
1097
+ />
1098
+ </div>
1099
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1100
+ <FormColorPickerButton
1101
+ color={
1102
+ selectedColumn.negativeBackgroundColor ??
1103
+ gridConfiguration.negativeBackgroundColor
1104
+ }
1105
+ defaultColor={
1106
+ gridConfiguration.negativeBackgroundColor
1107
+ }
1108
+ onChange={(value) =>
1109
+ selectedColumn.setNegativeBackgroundColor(value)
1110
+ }
1111
+ />
1112
+ </div>
1113
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1114
+ <FormColorPickerButton
1115
+ color={
1116
+ selectedColumn.zeroBackgroundColor ??
1117
+ gridConfiguration.zeroBackgroundColor
1118
+ }
1119
+ defaultColor={gridConfiguration.zeroBackgroundColor}
1120
+ onChange={(value) =>
1121
+ selectedColumn.setZeroBackgroundColor(value)
1122
+ }
1123
+ />
1124
+ </div>
1125
+ <div className="flex h-full w-12 flex-shrink-0 items-center justify-center">
1126
+ <FormColorPickerButton
1127
+ color={
1128
+ selectedColumn.errorBackgroundColor ??
1129
+ gridConfiguration.errorBackgroundColor
1130
+ }
1131
+ defaultColor={gridConfiguration.errorBackgroundColor}
1132
+ onChange={(value) =>
1133
+ selectedColumn.setErrorBackgroundColor(value)
1134
+ }
1135
+ />
1136
+ </div>
1067
1137
  </div>
1068
1138
  </div>
1069
1139
  </div>
1070
- </div>
1071
1140
 
1072
- <div className="mt-2 flex w-full">
1073
- <div className="flex h-6 w-32 flex-shrink-0 items-center text-sm" />
1074
- <div className="w-80">
1075
- <div className="mb-2 h-[1px] w-full bg-neutral-200" />
1076
- <button
1077
- 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"
1078
- disabled={selectedColumn.isUsingDefaultStyling}
1079
- onClick={() => selectedColumn.useDefaultStyling()}
1080
- >
1081
- Use Default Styling
1082
- </button>
1141
+ <div className="mt-2 flex w-full">
1142
+ <div className="flex h-6 w-32 flex-shrink-0 items-center text-sm" />
1143
+ <div className="w-80">
1144
+ <div className="mb-2 h-[1px] w-full bg-neutral-200" />
1145
+ <button
1146
+ 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"
1147
+ disabled={selectedColumn.isUsingDefaultStyling}
1148
+ onClick={() => selectedColumn.useDefaultStyling()}
1149
+ >
1150
+ Use Default Styling
1151
+ </button>
1152
+ </div>
1083
1153
  </div>
1084
- </div>
1085
- </>
1086
- )}
1154
+ </>
1155
+ )}
1156
+ </div>
1087
1157
  </div>
1088
1158
  </div>
1089
- </div>
1090
- );
1091
- });
1159
+ );
1160
+ },
1161
+ );