@vuu-ui/vuu-table-extras 0.0.26

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 (247) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +0 -0
  3. package/cjs/cell-edit-validators/CaseValidator.js +24 -0
  4. package/cjs/cell-edit-validators/CaseValidator.js.map +1 -0
  5. package/cjs/cell-edit-validators/PatternValidator.js +26 -0
  6. package/cjs/cell-edit-validators/PatternValidator.js.map +1 -0
  7. package/cjs/cell-renderers/background-cell/BackgroundCell.css.js +6 -0
  8. package/cjs/cell-renderers/background-cell/BackgroundCell.css.js.map +1 -0
  9. package/cjs/cell-renderers/background-cell/BackgroundCell.js +79 -0
  10. package/cjs/cell-renderers/background-cell/BackgroundCell.js.map +1 -0
  11. package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +6 -0
  12. package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +1 -0
  13. package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +67 -0
  14. package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -0
  15. package/cjs/cell-renderers/background-cell/BackgroundKeyframes.css.js +6 -0
  16. package/cjs/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +1 -0
  17. package/cjs/cell-renderers/background-cell/useDirection.js +20 -0
  18. package/cjs/cell-renderers/background-cell/useDirection.js.map +1 -0
  19. package/cjs/cell-renderers/dropdown-cell/DropdownCell.css.js +6 -0
  20. package/cjs/cell-renderers/dropdown-cell/DropdownCell.css.js.map +1 -0
  21. package/cjs/cell-renderers/dropdown-cell/DropdownCell.js +65 -0
  22. package/cjs/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -0
  23. package/cjs/cell-renderers/lookup-cell/LookupCell.js +26 -0
  24. package/cjs/cell-renderers/lookup-cell/LookupCell.js.map +1 -0
  25. package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.css.js +6 -0
  26. package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +1 -0
  27. package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js +62 -0
  28. package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -0
  29. package/cjs/cell-renderers/progress-cell/ProgressCell.css.js +6 -0
  30. package/cjs/cell-renderers/progress-cell/ProgressCell.css.js.map +1 -0
  31. package/cjs/cell-renderers/progress-cell/ProgressCell.js +69 -0
  32. package/cjs/cell-renderers/progress-cell/ProgressCell.js.map +1 -0
  33. package/cjs/column-expression-input/ColumnExpressionInput.css.js +6 -0
  34. package/cjs/column-expression-input/ColumnExpressionInput.css.js.map +1 -0
  35. package/cjs/column-expression-input/ColumnExpressionInput.js +39 -0
  36. package/cjs/column-expression-input/ColumnExpressionInput.js.map +1 -0
  37. package/cjs/column-expression-input/column-function-descriptors.js +307 -0
  38. package/cjs/column-expression-input/column-function-descriptors.js.map +1 -0
  39. package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +29 -0
  40. package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -0
  41. package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +469 -0
  42. package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -0
  43. package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js +61 -0
  44. package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -0
  45. package/cjs/column-expression-input/column-language-parser/generated/column-parser.js +21 -0
  46. package/cjs/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -0
  47. package/cjs/column-expression-input/functionDocInfo.js +39 -0
  48. package/cjs/column-expression-input/functionDocInfo.js.map +1 -0
  49. package/cjs/column-expression-input/highlighting.js +16 -0
  50. package/cjs/column-expression-input/highlighting.js.map +1 -0
  51. package/cjs/column-expression-input/theme.js +63 -0
  52. package/cjs/column-expression-input/theme.js.map +1 -0
  53. package/cjs/column-expression-input/useColumnAutoComplete.js +358 -0
  54. package/cjs/column-expression-input/useColumnAutoComplete.js.map +1 -0
  55. package/cjs/column-expression-input/useColumnExpressionEditor.js +131 -0
  56. package/cjs/column-expression-input/useColumnExpressionEditor.js.map +1 -0
  57. package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js +212 -0
  58. package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -0
  59. package/cjs/column-expression-panel/ColumnExpressionPanel.js +87 -0
  60. package/cjs/column-expression-panel/ColumnExpressionPanel.js.map +1 -0
  61. package/cjs/column-expression-panel/useColumnExpression.js +69 -0
  62. package/cjs/column-expression-panel/useColumnExpression.js.map +1 -0
  63. package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js +97 -0
  64. package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -0
  65. package/cjs/column-formatting-settings/ColumnFormattingPanel.js +107 -0
  66. package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +1 -0
  67. package/cjs/column-formatting-settings/DateTimeFormattingSettings.js +90 -0
  68. package/cjs/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -0
  69. package/cjs/column-formatting-settings/LongTypeFormattingSettings.css.js +6 -0
  70. package/cjs/column-formatting-settings/LongTypeFormattingSettings.css.js.map +1 -0
  71. package/cjs/column-formatting-settings/LongTypeFormattingSettings.js +49 -0
  72. package/cjs/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -0
  73. package/cjs/column-list/ColumnList.css.js +6 -0
  74. package/cjs/column-list/ColumnList.css.js.map +1 -0
  75. package/cjs/column-list/ColumnList.js +115 -0
  76. package/cjs/column-list/ColumnList.js.map +1 -0
  77. package/cjs/column-settings/ColumnNameLabel.css.js +6 -0
  78. package/cjs/column-settings/ColumnNameLabel.css.js.map +1 -0
  79. package/cjs/column-settings/ColumnNameLabel.js +45 -0
  80. package/cjs/column-settings/ColumnNameLabel.js.map +1 -0
  81. package/cjs/column-settings/ColumnSettingsPanel.css.js +6 -0
  82. package/cjs/column-settings/ColumnSettingsPanel.css.js.map +1 -0
  83. package/cjs/column-settings/ColumnSettingsPanel.js +195 -0
  84. package/cjs/column-settings/ColumnSettingsPanel.js.map +1 -0
  85. package/cjs/column-settings/useColumnSettings.js +235 -0
  86. package/cjs/column-settings/useColumnSettings.js.map +1 -0
  87. package/cjs/datasource-stats/DatasourceStats.css.js +6 -0
  88. package/cjs/datasource-stats/DatasourceStats.css.js.map +1 -0
  89. package/cjs/datasource-stats/DatasourceStats.js +48 -0
  90. package/cjs/datasource-stats/DatasourceStats.js.map +1 -0
  91. package/cjs/index.js +54 -0
  92. package/cjs/index.js.map +1 -0
  93. package/cjs/table-settings/TableSettingsPanel.css.js +6 -0
  94. package/cjs/table-settings/TableSettingsPanel.css.js.map +1 -0
  95. package/cjs/table-settings/TableSettingsPanel.js +123 -0
  96. package/cjs/table-settings/TableSettingsPanel.js.map +1 -0
  97. package/cjs/table-settings/useTableSettings.js +182 -0
  98. package/cjs/table-settings/useTableSettings.js.map +1 -0
  99. package/esm/cell-edit-validators/CaseValidator.js +22 -0
  100. package/esm/cell-edit-validators/CaseValidator.js.map +1 -0
  101. package/esm/cell-edit-validators/PatternValidator.js +24 -0
  102. package/esm/cell-edit-validators/PatternValidator.js.map +1 -0
  103. package/esm/cell-renderers/background-cell/BackgroundCell.css.js +4 -0
  104. package/esm/cell-renderers/background-cell/BackgroundCell.css.js.map +1 -0
  105. package/esm/cell-renderers/background-cell/BackgroundCell.js +77 -0
  106. package/esm/cell-renderers/background-cell/BackgroundCell.js.map +1 -0
  107. package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +4 -0
  108. package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +1 -0
  109. package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +65 -0
  110. package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -0
  111. package/esm/cell-renderers/background-cell/BackgroundKeyframes.css.js +4 -0
  112. package/esm/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +1 -0
  113. package/esm/cell-renderers/background-cell/useDirection.js +18 -0
  114. package/esm/cell-renderers/background-cell/useDirection.js.map +1 -0
  115. package/esm/cell-renderers/dropdown-cell/DropdownCell.css.js +4 -0
  116. package/esm/cell-renderers/dropdown-cell/DropdownCell.css.js.map +1 -0
  117. package/esm/cell-renderers/dropdown-cell/DropdownCell.js +63 -0
  118. package/esm/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -0
  119. package/esm/cell-renderers/lookup-cell/LookupCell.js +24 -0
  120. package/esm/cell-renderers/lookup-cell/LookupCell.js.map +1 -0
  121. package/esm/cell-renderers/pct-progress-cell/PctProgressCell.css.js +4 -0
  122. package/esm/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +1 -0
  123. package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js +60 -0
  124. package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -0
  125. package/esm/cell-renderers/progress-cell/ProgressCell.css.js +4 -0
  126. package/esm/cell-renderers/progress-cell/ProgressCell.css.js.map +1 -0
  127. package/esm/cell-renderers/progress-cell/ProgressCell.js +67 -0
  128. package/esm/cell-renderers/progress-cell/ProgressCell.js.map +1 -0
  129. package/esm/column-expression-input/ColumnExpressionInput.css.js +4 -0
  130. package/esm/column-expression-input/ColumnExpressionInput.css.js.map +1 -0
  131. package/esm/column-expression-input/ColumnExpressionInput.js +37 -0
  132. package/esm/column-expression-input/ColumnExpressionInput.js.map +1 -0
  133. package/esm/column-expression-input/column-function-descriptors.js +305 -0
  134. package/esm/column-expression-input/column-function-descriptors.js.map +1 -0
  135. package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +27 -0
  136. package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -0
  137. package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +467 -0
  138. package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -0
  139. package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js +56 -0
  140. package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -0
  141. package/esm/column-expression-input/column-language-parser/generated/column-parser.js +19 -0
  142. package/esm/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -0
  143. package/esm/column-expression-input/functionDocInfo.js +37 -0
  144. package/esm/column-expression-input/functionDocInfo.js.map +1 -0
  145. package/esm/column-expression-input/highlighting.js +14 -0
  146. package/esm/column-expression-input/highlighting.js.map +1 -0
  147. package/esm/column-expression-input/theme.js +61 -0
  148. package/esm/column-expression-input/theme.js.map +1 -0
  149. package/esm/column-expression-input/useColumnAutoComplete.js +356 -0
  150. package/esm/column-expression-input/useColumnAutoComplete.js.map +1 -0
  151. package/esm/column-expression-input/useColumnExpressionEditor.js +129 -0
  152. package/esm/column-expression-input/useColumnExpressionEditor.js.map +1 -0
  153. package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js +210 -0
  154. package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -0
  155. package/esm/column-expression-panel/ColumnExpressionPanel.js +85 -0
  156. package/esm/column-expression-panel/ColumnExpressionPanel.js.map +1 -0
  157. package/esm/column-expression-panel/useColumnExpression.js +67 -0
  158. package/esm/column-expression-panel/useColumnExpression.js.map +1 -0
  159. package/esm/column-formatting-settings/BaseNumericFormattingSettings.js +95 -0
  160. package/esm/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -0
  161. package/esm/column-formatting-settings/ColumnFormattingPanel.js +105 -0
  162. package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +1 -0
  163. package/esm/column-formatting-settings/DateTimeFormattingSettings.js +88 -0
  164. package/esm/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -0
  165. package/esm/column-formatting-settings/LongTypeFormattingSettings.css.js +4 -0
  166. package/esm/column-formatting-settings/LongTypeFormattingSettings.css.js.map +1 -0
  167. package/esm/column-formatting-settings/LongTypeFormattingSettings.js +47 -0
  168. package/esm/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -0
  169. package/esm/column-list/ColumnList.css.js +4 -0
  170. package/esm/column-list/ColumnList.css.js.map +1 -0
  171. package/esm/column-list/ColumnList.js +113 -0
  172. package/esm/column-list/ColumnList.js.map +1 -0
  173. package/esm/column-settings/ColumnNameLabel.css.js +4 -0
  174. package/esm/column-settings/ColumnNameLabel.css.js.map +1 -0
  175. package/esm/column-settings/ColumnNameLabel.js +43 -0
  176. package/esm/column-settings/ColumnNameLabel.js.map +1 -0
  177. package/esm/column-settings/ColumnSettingsPanel.css.js +4 -0
  178. package/esm/column-settings/ColumnSettingsPanel.css.js.map +1 -0
  179. package/esm/column-settings/ColumnSettingsPanel.js +193 -0
  180. package/esm/column-settings/ColumnSettingsPanel.js.map +1 -0
  181. package/esm/column-settings/useColumnSettings.js +233 -0
  182. package/esm/column-settings/useColumnSettings.js.map +1 -0
  183. package/esm/datasource-stats/DatasourceStats.css.js +4 -0
  184. package/esm/datasource-stats/DatasourceStats.css.js.map +1 -0
  185. package/esm/datasource-stats/DatasourceStats.js +46 -0
  186. package/esm/datasource-stats/DatasourceStats.js.map +1 -0
  187. package/esm/index.js +24 -0
  188. package/esm/index.js.map +1 -0
  189. package/esm/table-settings/TableSettingsPanel.css.js +4 -0
  190. package/esm/table-settings/TableSettingsPanel.css.js.map +1 -0
  191. package/esm/table-settings/TableSettingsPanel.js +121 -0
  192. package/esm/table-settings/TableSettingsPanel.js.map +1 -0
  193. package/esm/table-settings/useTableSettings.js +180 -0
  194. package/esm/table-settings/useTableSettings.js.map +1 -0
  195. package/package.json +47 -0
  196. package/types/cell-edit-validators/CaseValidator.d.ts +2 -0
  197. package/types/cell-edit-validators/PatternValidator.d.ts +2 -0
  198. package/types/cell-edit-validators/index.d.ts +2 -0
  199. package/types/cell-renderers/background-cell/BackgroundCell.d.ts +3 -0
  200. package/types/cell-renderers/background-cell/BackgroundCellConfigurationEditor.d.ts +3 -0
  201. package/types/cell-renderers/background-cell/index.d.ts +2 -0
  202. package/types/cell-renderers/background-cell/useDirection.d.ts +3 -0
  203. package/types/cell-renderers/dropdown-cell/DropdownCell.d.ts +3 -0
  204. package/types/cell-renderers/dropdown-cell/index.d.ts +1 -0
  205. package/types/cell-renderers/index.d.ts +5 -0
  206. package/types/cell-renderers/lookup-cell/LookupCell.d.ts +3 -0
  207. package/types/cell-renderers/lookup-cell/index.d.ts +1 -0
  208. package/types/cell-renderers/pct-progress-cell/PctProgressCell.d.ts +3 -0
  209. package/types/cell-renderers/pct-progress-cell/index.d.ts +1 -0
  210. package/types/cell-renderers/progress-cell/ProgressCell.d.ts +1 -0
  211. package/types/cell-renderers/progress-cell/index.d.ts +1 -0
  212. package/types/column-expression-input/ColumnExpressionInput.d.ts +10 -0
  213. package/types/column-expression-input/column-function-descriptors.d.ts +15 -0
  214. package/types/column-expression-input/column-language-parser/ColumnExpressionLanguage.d.ts +2 -0
  215. package/types/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.d.ts +58 -0
  216. package/types/column-expression-input/column-language-parser/column-expression-parse-utils.d.ts +5 -0
  217. package/types/column-expression-input/column-language-parser/generated/column-parser.d.ts +2 -0
  218. package/types/column-expression-input/column-language-parser/generated/column-parser.terms.d.ts +24 -0
  219. package/types/column-expression-input/column-language-parser/index.d.ts +3 -0
  220. package/types/column-expression-input/column-language-parser/test.d.mts +1 -0
  221. package/types/column-expression-input/functionDocInfo.d.ts +2 -0
  222. package/types/column-expression-input/highlighting.d.ts +1 -0
  223. package/types/column-expression-input/index.d.ts +4 -0
  224. package/types/column-expression-input/theme.d.ts +1 -0
  225. package/types/column-expression-input/useColumnAutoComplete.d.ts +6 -0
  226. package/types/column-expression-input/useColumnExpressionEditor.d.ts +25 -0
  227. package/types/column-expression-input/useColumnExpressionSuggestionProvider.d.ts +8 -0
  228. package/types/column-expression-panel/ColumnExpressionPanel.d.ts +13 -0
  229. package/types/column-expression-panel/index.d.ts +1 -0
  230. package/types/column-expression-panel/useColumnExpression.d.ts +10 -0
  231. package/types/column-formatting-settings/BaseNumericFormattingSettings.d.ts +3 -0
  232. package/types/column-formatting-settings/ColumnFormattingPanel.d.ts +9 -0
  233. package/types/column-formatting-settings/DateTimeFormattingSettings.d.ts +3 -0
  234. package/types/column-formatting-settings/LongTypeFormattingSettings.d.ts +3 -0
  235. package/types/column-formatting-settings/index.d.ts +3 -0
  236. package/types/column-list/ColumnList.d.ts +12 -0
  237. package/types/column-list/index.d.ts +1 -0
  238. package/types/column-settings/ColumnNameLabel.d.ts +7 -0
  239. package/types/column-settings/ColumnSettingsPanel.d.ts +3 -0
  240. package/types/column-settings/index.d.ts +1 -0
  241. package/types/column-settings/useColumnSettings.d.ts +22 -0
  242. package/types/datasource-stats/DatasourceStats.d.ts +7 -0
  243. package/types/datasource-stats/index.d.ts +1 -0
  244. package/types/index.d.ts +9 -0
  245. package/types/table-settings/TableSettingsPanel.d.ts +8 -0
  246. package/types/table-settings/index.d.ts +2 -0
  247. package/types/table-settings/useTableSettings.d.ts +18 -0
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+
5
+ const functionDocInfo = ({
6
+ name,
7
+ description,
8
+ example,
9
+ params,
10
+ type
11
+ }) => {
12
+ const rootElement = vuuUtils.createEl("div", "vuuFunctionDoc");
13
+ const headingElement = vuuUtils.createEl("div", "function-heading");
14
+ const nameElement = vuuUtils.createEl("span", "function-name", name);
15
+ const paramElement = vuuUtils.createEl("span", "param-list", params.description);
16
+ const typeElement = vuuUtils.createEl("span", "function-type", type);
17
+ headingElement.appendChild(nameElement);
18
+ headingElement.appendChild(paramElement);
19
+ headingElement.appendChild(typeElement);
20
+ const child2 = vuuUtils.createEl("p", void 0, description);
21
+ rootElement.appendChild(headingElement);
22
+ rootElement.appendChild(child2);
23
+ if (example) {
24
+ const exampleElement = vuuUtils.createEl("div", "example-container");
25
+ const expressionElement = vuuUtils.createEl(
26
+ "div",
27
+ "example-expression",
28
+ example.expression
29
+ );
30
+ const resultElement = vuuUtils.createEl("div", "example-result", example.result);
31
+ exampleElement.appendChild(expressionElement);
32
+ rootElement.appendChild(exampleElement);
33
+ rootElement.appendChild(resultElement);
34
+ }
35
+ return rootElement;
36
+ };
37
+
38
+ exports.functionDocInfo = functionDocInfo;
39
+ //# sourceMappingURL=functionDocInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionDocInfo.js","sources":["../../src/column-expression-input/functionDocInfo.ts"],"sourcesContent":["import { createEl } from \"@vuu-ui/vuu-utils\";\nimport { ColumnFunctionDescriptor } from \"./column-function-descriptors\";\n\nexport const functionDocInfo = ({\n name,\n description,\n example,\n params,\n type,\n}: ColumnFunctionDescriptor) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", name);\n const paramElement = createEl(\"span\", \"param-list\", params.description);\n const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n headingElement.appendChild(paramElement);\n headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, description);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n if (example) {\n const exampleElement = createEl(\"div\", \"example-container\");\n const expressionElement = createEl(\n \"div\",\n \"example-expression\",\n example.expression\n );\n const resultElement = createEl(\"div\", \"example-result\", example.result);\n\n exampleElement.appendChild(expressionElement);\n\n rootElement.appendChild(exampleElement);\n rootElement.appendChild(resultElement);\n }\n\n return rootElement;\n};\n"],"names":["createEl"],"mappings":";;;;AAGO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AACF,CAAgC,KAAA;AAC9B,EAAM,MAAA,WAAA,GAAcA,iBAAS,CAAA,KAAA,EAAO,gBAAgB,CAAA,CAAA;AACpD,EAAM,MAAA,cAAA,GAAiBA,iBAAS,CAAA,KAAA,EAAO,kBAAkB,CAAA,CAAA;AAEzD,EAAA,MAAM,WAAc,GAAAA,iBAAA,CAAS,MAAQ,EAAA,eAAA,EAAiB,IAAI,CAAA,CAAA;AAC1D,EAAA,MAAM,YAAe,GAAAA,iBAAA,CAAS,MAAQ,EAAA,YAAA,EAAc,OAAO,WAAW,CAAA,CAAA;AACtE,EAAA,MAAM,WAAc,GAAAA,iBAAA,CAAS,MAAQ,EAAA,eAAA,EAAiB,IAAI,CAAA,CAAA;AAE1D,EAAA,cAAA,CAAe,YAAY,WAAW,CAAA,CAAA;AACtC,EAAA,cAAA,CAAe,YAAY,YAAY,CAAA,CAAA;AACvC,EAAA,cAAA,CAAe,YAAY,WAAW,CAAA,CAAA;AAEtC,EAAA,MAAM,MAAS,GAAAA,iBAAA,CAAS,GAAK,EAAA,KAAA,CAAA,EAAW,WAAW,CAAA,CAAA;AAEnD,EAAA,WAAA,CAAY,YAAY,cAAc,CAAA,CAAA;AACtC,EAAA,WAAA,CAAY,YAAY,MAAM,CAAA,CAAA;AAE9B,EAAA,IAAI,OAAS,EAAA;AACX,IAAM,MAAA,cAAA,GAAiBA,iBAAS,CAAA,KAAA,EAAO,mBAAmB,CAAA,CAAA;AAC1D,IAAA,MAAM,iBAAoB,GAAAA,iBAAA;AAAA,MACxB,KAAA;AAAA,MACA,oBAAA;AAAA,MACA,OAAQ,CAAA,UAAA;AAAA,KACV,CAAA;AACA,IAAA,MAAM,aAAgB,GAAAA,iBAAA,CAAS,KAAO,EAAA,gBAAA,EAAkB,QAAQ,MAAM,CAAA,CAAA;AAEtE,IAAA,cAAA,CAAe,YAAY,iBAAiB,CAAA,CAAA;AAE5C,IAAA,WAAA,CAAY,YAAY,cAAc,CAAA,CAAA;AACtC,IAAA,WAAA,CAAY,YAAY,aAAa,CAAA,CAAA;AAAA,GACvC;AAEA,EAAO,OAAA,WAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var vuuCodemirror = require('@vuu-ui/vuu-codemirror');
4
+
5
+ const myHighlightStyle = vuuCodemirror.HighlightStyle.define([
6
+ {
7
+ tag: vuuCodemirror.tags.attributeValue,
8
+ color: "var(--vuuFilterEditor-variableColor);font-weight: bold"
9
+ },
10
+ { tag: vuuCodemirror.tags.variableName, color: "var(--vuuFilterEditor-variableColor)" },
11
+ { tag: vuuCodemirror.tags.comment, color: "green", fontStyle: "italic" }
12
+ ]);
13
+ const vuuHighlighting = vuuCodemirror.syntaxHighlighting(myHighlightStyle);
14
+
15
+ exports.vuuHighlighting = vuuHighlighting;
16
+ //# sourceMappingURL=highlighting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlighting.js","sources":["../../src/column-expression-input/highlighting.ts"],"sourcesContent":["import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n {\n tag: tags.attributeValue,\n color: \"var(--vuuFilterEditor-variableColor);font-weight: bold\",\n },\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n"],"names":["HighlightStyle","tags","syntaxHighlighting"],"mappings":";;;;AAMA,MAAM,gBAAA,GAAmBA,6BAAe,MAAO,CAAA;AAAA,EAC7C;AAAA,IACE,KAAKC,kBAAK,CAAA,cAAA;AAAA,IACV,KAAO,EAAA,wDAAA;AAAA,GACT;AAAA,EACA,EAAE,GAAA,EAAKA,kBAAK,CAAA,YAAA,EAAc,OAAO,sCAAuC,EAAA;AAAA,EACxE,EAAE,GAAK,EAAAA,kBAAA,CAAK,SAAS,KAAO,EAAA,OAAA,EAAS,WAAW,QAAS,EAAA;AAC3D,CAAC,CAAA,CAAA;AAEY,MAAA,eAAA,GAAkBC,iCAAmB,gBAAgB;;;;"}
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ var vuuCodemirror = require('@vuu-ui/vuu-codemirror');
4
+
5
+ const vuuTheme = vuuCodemirror.EditorView.theme(
6
+ {
7
+ "&": {
8
+ border: "solid 1px var(--salt-container-primary-borderColor)",
9
+ color: "var(--vuuFilterEditor-color)",
10
+ backgroundColor: "var(--vuuFilterEditor-background)"
11
+ },
12
+ ".cm-content": {
13
+ caretColor: "var(--vuuFilterEditor-cursorColor)"
14
+ },
15
+ "&.cm-focused .cm-cursor": {
16
+ borderLeftColor: "var(--vuuFilterEditor-cursorColor)"
17
+ },
18
+ "&.cm-focused .cm-selectionBackground, ::selection": {
19
+ backgroundColor: "var(--vuuFilterEditor-selectionBackground)"
20
+ },
21
+ ".cm-selectionBackground, ::selection": {
22
+ backgroundColor: "var(--vuuFilterEditor-selectionBackground)"
23
+ },
24
+ ".cm-scroller": {
25
+ fontFamily: "var(--vuuFilterEditor-fontFamily)"
26
+ },
27
+ ".cm-completionLabel": {
28
+ color: "var(--vuu-color-gray-50)"
29
+ },
30
+ ".cm-completionMatchedText": {
31
+ color: "var(--vuu-color-gray-80)",
32
+ fontWeight: 700,
33
+ textDecoration: "none"
34
+ },
35
+ ".cm-tooltip": {
36
+ background: "var(--vuuFilterEditor-tooltipBackground)",
37
+ border: "var(--vuuFilterEditor-tooltipBorder)",
38
+ borderRadius: "4px",
39
+ boxShadow: "var(--vuuFilterEditor-tooltipElevation)",
40
+ "&.cm-tooltip-autocomplete > ul": {
41
+ fontFamily: "var(--vuuFilterEditor-fontFamily)",
42
+ fontSize: "var(--vuuFilterEditor-fontSize)",
43
+ maxHeight: "240px"
44
+ },
45
+ "&.cm-tooltip-autocomplete > ul > li": {
46
+ height: "var(--vuuFilterEditor-suggestion-height)",
47
+ padding: "0 3px",
48
+ lineHeight: "var(--vuuFilterEditor-suggestion-height)"
49
+ },
50
+ "&.cm-tooltip-autocomplete li[aria-selected]": {
51
+ background: "var(--vuuFilterEditor-suggestion-selectedBackground)",
52
+ color: "var(--vuuFilterEditor-suggestion-selectedColor)"
53
+ },
54
+ "&.cm-tooltip-autocomplete li .cm-completionDetail": {
55
+ color: "var(--vuuFilterEditor-suggestion-detailColor)"
56
+ }
57
+ }
58
+ },
59
+ { dark: false }
60
+ );
61
+
62
+ exports.vuuTheme = vuuTheme;
63
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sources":["../../src/column-expression-input/theme.ts"],"sourcesContent":["import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n border: \"solid 1px var(--salt-container-primary-borderColor)\",\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-completionLabel\": {\n color: \"var(--vuu-color-gray-50)\",\n },\n \".cm-completionMatchedText\": {\n color: \"var(--vuu-color-gray-80)\",\n fontWeight: 700,\n textDecoration: \"none\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n borderRadius: \"4px\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n \"&.cm-tooltip-autocomplete li .cm-completionDetail\": {\n color: \"var(--vuuFilterEditor-suggestion-detailColor)\",\n },\n },\n },\n { dark: false }\n);\n"],"names":["EditorView"],"mappings":";;;;AAEO,MAAM,WAAWA,wBAAW,CAAA,KAAA;AAAA,EACjC;AAAA,IACE,GAAK,EAAA;AAAA,MACH,MAAQ,EAAA,qDAAA;AAAA,MACR,KAAO,EAAA,8BAAA;AAAA,MACP,eAAiB,EAAA,mCAAA;AAAA,KACnB;AAAA,IACA,aAAe,EAAA;AAAA,MACb,UAAY,EAAA,oCAAA;AAAA,KACd;AAAA,IACA,yBAA2B,EAAA;AAAA,MACzB,eAAiB,EAAA,oCAAA;AAAA,KACnB;AAAA,IACA,mDAAqD,EAAA;AAAA,MACnD,eAAiB,EAAA,4CAAA;AAAA,KACnB;AAAA,IACA,sCAAwC,EAAA;AAAA,MACtC,eAAiB,EAAA,4CAAA;AAAA,KACnB;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,UAAY,EAAA,mCAAA;AAAA,KACd;AAAA,IACA,qBAAuB,EAAA;AAAA,MACrB,KAAO,EAAA,0BAAA;AAAA,KACT;AAAA,IACA,2BAA6B,EAAA;AAAA,MAC3B,KAAO,EAAA,0BAAA;AAAA,MACP,UAAY,EAAA,GAAA;AAAA,MACZ,cAAgB,EAAA,MAAA;AAAA,KAClB;AAAA,IACA,aAAe,EAAA;AAAA,MACb,UAAY,EAAA,0CAAA;AAAA,MACZ,MAAQ,EAAA,sCAAA;AAAA,MACR,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,yCAAA;AAAA,MACX,gCAAkC,EAAA;AAAA,QAChC,UAAY,EAAA,mCAAA;AAAA,QACZ,QAAU,EAAA,iCAAA;AAAA,QACV,SAAW,EAAA,OAAA;AAAA,OACb;AAAA,MACA,qCAAuC,EAAA;AAAA,QACrC,MAAQ,EAAA,0CAAA;AAAA,QACR,OAAS,EAAA,OAAA;AAAA,QACT,UAAY,EAAA,0CAAA;AAAA,OACd;AAAA,MACA,6CAA+C,EAAA;AAAA,QAC7C,UAAY,EAAA,sDAAA;AAAA,QACZ,KAAO,EAAA,iDAAA;AAAA,OACT;AAAA,MACA,mDAAqD,EAAA;AAAA,QACnD,KAAO,EAAA,+CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AAAA,EACA,EAAE,MAAM,KAAM,EAAA;AAChB;;;;"}
@@ -0,0 +1,358 @@
1
+ 'use strict';
2
+
3
+ var vuuCodemirror = require('@vuu-ui/vuu-codemirror');
4
+ var react = require('react');
5
+ require('./column-language-parser/ColumnExpressionLanguage.js');
6
+ require('./column-language-parser/ColumnExpressionTreeWalker.js');
7
+ var columnExpressionParseUtils = require('./column-language-parser/column-expression-parse-utils.js');
8
+
9
+ const applyPrefix = (completions, prefix) => prefix ? completions.map((completion) => ({
10
+ ...completion,
11
+ apply: typeof completion.apply === "function" ? completion.apply : `${prefix}${completion.apply ?? completion.label}`
12
+ })) : completions;
13
+ const isOperator = (node) => node === void 0 ? false : ["Times", "Divide", "Plus", "Minus"].includes(node.name);
14
+ const completionDone = (onSubmit) => ({
15
+ apply: () => {
16
+ onSubmit?.();
17
+ },
18
+ label: "Done",
19
+ boost: 10
20
+ });
21
+ const getLastChild = (node, context) => {
22
+ let { lastChild: childNode } = node;
23
+ const { pos } = context;
24
+ while (childNode) {
25
+ const isBeforeCursor = childNode.from < pos;
26
+ if (isBeforeCursor && columnExpressionParseUtils.ColumnNamedTerms.includes(childNode.name)) {
27
+ if (childNode.name === "ParenthesizedExpression") {
28
+ const expression = childNode.firstChild?.nextSibling;
29
+ if (expression) {
30
+ childNode = expression;
31
+ }
32
+ }
33
+ return childNode;
34
+ } else {
35
+ childNode = childNode.prevSibling;
36
+ }
37
+ }
38
+ };
39
+ const getFunctionName = (node, state) => {
40
+ if (node.name === "ArgList") {
41
+ const functionNode = node.prevSibling;
42
+ if (functionNode) {
43
+ return vuuCodemirror.getValue(functionNode, state);
44
+ }
45
+ } else if (node.name === "OpenBrace") {
46
+ const maybeFunction = node.parent?.prevSibling;
47
+ if (maybeFunction?.name === "Function") {
48
+ return vuuCodemirror.getValue(maybeFunction, state);
49
+ }
50
+ }
51
+ };
52
+ const getRelationalOperator = (node, state) => {
53
+ if (node.name === "RelationalExpression") {
54
+ const lastNode = columnExpressionParseUtils.lastNamedChild(node);
55
+ if (lastNode?.name === "RelationalOperator") {
56
+ return vuuCodemirror.getValue(lastNode, state);
57
+ }
58
+ } else {
59
+ const prevNode = node.prevSibling;
60
+ if (prevNode?.name === "RelationalOperator") {
61
+ return vuuCodemirror.getValue(prevNode, state);
62
+ }
63
+ }
64
+ };
65
+ const getColumnName = (node, state) => {
66
+ if (node.name === "RelationalExpression") {
67
+ if (node.firstChild?.name === "Column") {
68
+ return vuuCodemirror.getValue(node.firstChild, state);
69
+ }
70
+ } else {
71
+ const prevNode = node.prevSibling;
72
+ if (prevNode?.name === "Column") {
73
+ return vuuCodemirror.getValue(prevNode, state);
74
+ } else if (prevNode?.name === "RelationalOperator") {
75
+ return getColumnName(prevNode, state);
76
+ }
77
+ }
78
+ };
79
+ const makeSuggestions = async (context, suggestionProvider, suggestionType, optionalArgs = {}) => {
80
+ const options = await suggestionProvider.getSuggestions(
81
+ suggestionType,
82
+ optionalArgs
83
+ );
84
+ const { startsWith = "" } = optionalArgs;
85
+ return { from: context.pos - startsWith.length, options };
86
+ };
87
+ const handleConditionalExpression = (node, context, suggestionProvider, maybeComplete, onSubmit) => {
88
+ const lastChild = getLastChild(node, context);
89
+ switch (lastChild?.name) {
90
+ case "If":
91
+ return makeSuggestions(context, suggestionProvider, "expression", {
92
+ prefix: "( "
93
+ });
94
+ case "OpenBrace":
95
+ return makeSuggestions(context, suggestionProvider, "expression");
96
+ case "Condition":
97
+ return makeSuggestions(context, suggestionProvider, "expression", {
98
+ prefix: ", "
99
+ });
100
+ case "CloseBrace":
101
+ if (maybeComplete) {
102
+ const options = [completionDone(onSubmit)];
103
+ return { from: context.pos, options };
104
+ }
105
+ }
106
+ };
107
+ const promptToSave = (context, onSubmit) => {
108
+ const options = [completionDone(onSubmit)];
109
+ return { from: context.pos, options };
110
+ };
111
+ const useColumnAutoComplete = (suggestionProvider, onSubmit) => {
112
+ const makeSuggestions2 = react.useCallback(
113
+ async (context, suggestionType, optionalArgs = {}) => {
114
+ const options = await suggestionProvider.getSuggestions(
115
+ suggestionType,
116
+ optionalArgs
117
+ );
118
+ const { startsWith = "" } = optionalArgs;
119
+ return { from: context.pos - startsWith.length, options };
120
+ },
121
+ [suggestionProvider]
122
+ );
123
+ return react.useCallback(
124
+ async (context) => {
125
+ const { state, pos } = context;
126
+ const word = context.matchBefore(/\w*/) ?? {
127
+ from: 0,
128
+ to: 0,
129
+ text: void 0
130
+ };
131
+ const tree = vuuCodemirror.syntaxTree(state);
132
+ const nodeBefore = tree.resolveInner(pos, -1);
133
+ const text = state.doc.toString();
134
+ const maybeComplete = columnExpressionParseUtils.isCompleteExpression(text);
135
+ switch (nodeBefore.name) {
136
+ case "If": {
137
+ return makeSuggestions2(context, "expression", { prefix: "( " });
138
+ }
139
+ case "Condition":
140
+ {
141
+ const lastChild = getLastChild(nodeBefore, context);
142
+ if (lastChild?.name === "Column") {
143
+ const prevChild = vuuCodemirror.getPreviousNode(lastChild);
144
+ if (prevChild?.name !== "RelationalOperator") {
145
+ return makeSuggestions2(context, "condition-operator", {
146
+ columnName: vuuCodemirror.getValue(lastChild, state)
147
+ });
148
+ }
149
+ } else if (lastChild?.name === "RelationalOperator") {
150
+ return makeSuggestions2(context, "expression");
151
+ }
152
+ }
153
+ break;
154
+ case "ConditionalExpression":
155
+ return handleConditionalExpression(
156
+ nodeBefore,
157
+ context,
158
+ suggestionProvider
159
+ );
160
+ case "RelationalExpression":
161
+ {
162
+ if (columnExpressionParseUtils.isCompleteRelationalExpression(nodeBefore)) {
163
+ return {
164
+ from: context.pos,
165
+ options: vuuCodemirror.booleanJoinSuggestions.concat({
166
+ label: ", <truthy expression>, <falsy expression>",
167
+ apply: ", "
168
+ })
169
+ };
170
+ } else {
171
+ const operator = getRelationalOperator(nodeBefore, state);
172
+ const columnName = getColumnName(nodeBefore, state);
173
+ if (!operator) {
174
+ const options = await suggestionProvider.getSuggestions(
175
+ "condition-operator",
176
+ {
177
+ columnName
178
+ }
179
+ );
180
+ return { from: context.pos, options };
181
+ } else {
182
+ return makeSuggestions2(context, "expression");
183
+ }
184
+ }
185
+ }
186
+ case "RelationalOperator":
187
+ return makeSuggestions2(context, "expression");
188
+ case "String":
189
+ {
190
+ const operator = getRelationalOperator(
191
+ nodeBefore,
192
+ state
193
+ );
194
+ const columnName = getColumnName(nodeBefore, state);
195
+ const { from, to } = nodeBefore;
196
+ if (to - from === 2 && context.pos === from + 1) {
197
+ if (columnName && operator) {
198
+ return makeSuggestions2(context, "columnValue", {
199
+ columnName,
200
+ operator,
201
+ startsWith: word.text
202
+ });
203
+ }
204
+ } else if (to - from > 2 && context.pos === to) {
205
+ return makeSuggestions2(context, "expression", {
206
+ prefix: ", "
207
+ });
208
+ }
209
+ }
210
+ break;
211
+ case "ArithmeticExpression":
212
+ {
213
+ const lastChild = getLastChild(nodeBefore, context);
214
+ if (lastChild?.name === "Column") {
215
+ return makeSuggestions2(context, "expression");
216
+ } else if (isOperator(lastChild)) {
217
+ const operator = lastChild.name;
218
+ return makeSuggestions2(context, "column", { operator });
219
+ }
220
+ }
221
+ break;
222
+ case "OpenBrace":
223
+ {
224
+ const functionName = getFunctionName(nodeBefore, state);
225
+ return makeSuggestions2(context, "expression", { functionName });
226
+ }
227
+ case "ArgList": {
228
+ const functionName = getFunctionName(nodeBefore, state);
229
+ const lastArgument = getLastChild(nodeBefore, context);
230
+ const prefix = lastArgument?.name === "OpenBrace" || lastArgument?.name === "Comma" ? void 0 : ",";
231
+ let options = await suggestionProvider.getSuggestions("expression", {
232
+ functionName
233
+ });
234
+ options = prefix ? applyPrefix(options, ", ") : options;
235
+ if (lastArgument?.name !== "OpenBrace" && lastArgument?.name !== "Comma") {
236
+ options = [
237
+ {
238
+ apply: ") ",
239
+ boost: 10,
240
+ label: "Done - no more arguments"
241
+ }
242
+ ].concat(options);
243
+ }
244
+ return { from: context.pos, options };
245
+ }
246
+ case "Equal":
247
+ if (text.trim() === "=") {
248
+ return makeSuggestions2(context, "expression");
249
+ }
250
+ break;
251
+ case "ParenthesizedExpression":
252
+ case "ColumnDefinitionExpression":
253
+ if (context.pos === 0) {
254
+ return makeSuggestions2(context, "expression");
255
+ } else {
256
+ const lastChild = getLastChild(nodeBefore, context);
257
+ if (lastChild?.name === "Column") {
258
+ if (maybeComplete) {
259
+ const options = [
260
+ completionDone(onSubmit.current)
261
+ ];
262
+ const columnName = vuuCodemirror.getValue(lastChild, state);
263
+ const columnOptions = await suggestionProvider.getSuggestions("operator", {
264
+ columnName
265
+ });
266
+ return {
267
+ from: context.pos,
268
+ options: options.concat(columnOptions)
269
+ };
270
+ }
271
+ } else if (lastChild?.name === "CallExpression") {
272
+ if (maybeComplete) {
273
+ return {
274
+ from: context.pos,
275
+ options: [completionDone(onSubmit.current)]
276
+ };
277
+ }
278
+ } else if (lastChild?.name === "ArithmeticExpression") {
279
+ if (maybeComplete) {
280
+ let options = [completionDone(onSubmit.current)];
281
+ const lastExpressionChild = getLastChild(lastChild, context);
282
+ if (lastExpressionChild?.name === "Column") {
283
+ const columnName = vuuCodemirror.getValue(lastExpressionChild, state);
284
+ const suggestions = await suggestionProvider.getSuggestions(
285
+ "operator",
286
+ { columnName }
287
+ );
288
+ options = options.concat(suggestions);
289
+ }
290
+ return {
291
+ from: context.pos,
292
+ options
293
+ };
294
+ }
295
+ } else if (lastChild?.name === "ConditionalExpression") {
296
+ return handleConditionalExpression(
297
+ lastChild,
298
+ context,
299
+ suggestionProvider,
300
+ maybeComplete,
301
+ onSubmit.current
302
+ );
303
+ }
304
+ break;
305
+ }
306
+ case "Column":
307
+ {
308
+ const isPartialMatch = await suggestionProvider.isPartialMatch(
309
+ "expression",
310
+ void 0,
311
+ word.text
312
+ );
313
+ if (isPartialMatch) {
314
+ return makeSuggestions2(context, "expression", {
315
+ startsWith: word.text
316
+ });
317
+ }
318
+ }
319
+ break;
320
+ case "Comma":
321
+ {
322
+ const parentNode = vuuCodemirror.getNamedParentNode(nodeBefore);
323
+ if (parentNode?.name === "ConditionalExpression") {
324
+ return makeSuggestions2(context, "expression");
325
+ }
326
+ }
327
+ break;
328
+ case "CloseBrace":
329
+ {
330
+ const parentNode = vuuCodemirror.getNamedParentNode(nodeBefore);
331
+ if (parentNode?.name === "ConditionalExpression") {
332
+ return handleConditionalExpression(
333
+ parentNode,
334
+ context,
335
+ suggestionProvider,
336
+ maybeComplete,
337
+ onSubmit.current
338
+ );
339
+ } else if (parentNode?.name === "ArgList") {
340
+ if (maybeComplete) {
341
+ return promptToSave(context, onSubmit.current);
342
+ }
343
+ }
344
+ }
345
+ break;
346
+ default: {
347
+ if (nodeBefore?.prevSibling?.name === "FilterClause") {
348
+ console.log("looks like we ight be a or|and operator");
349
+ }
350
+ }
351
+ }
352
+ },
353
+ [makeSuggestions2, onSubmit, suggestionProvider]
354
+ );
355
+ };
356
+
357
+ exports.useColumnAutoComplete = useColumnAutoComplete;
358
+ //# sourceMappingURL=useColumnAutoComplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnAutoComplete.js","sources":["../../src/column-expression-input/useColumnAutoComplete.ts"],"sourcesContent":["import {\n booleanJoinSuggestions,\n Completion,\n CompletionContext,\n CompletionSource,\n EditorState,\n getNamedParentNode,\n getPreviousNode,\n getValue,\n SyntaxNode,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n ColumnNamedTerms,\n isCompleteExpression,\n isCompleteRelationalExpression,\n} from \"./column-language-parser\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionOptions,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\nimport { lastNamedChild } from \"./column-language-parser\";\n\nexport type ApplyCompletion = (mode?: \"add\" | \"replace\") => void;\n\nexport type Operator = \"\";\n\nconst applyPrefix = (completions: Completion[], prefix?: string) =>\n prefix\n ? completions.map((completion) => ({\n ...completion,\n apply:\n typeof completion.apply === \"function\"\n ? completion.apply\n : `${prefix}${completion.apply ?? completion.label}`,\n }))\n : completions;\n\nconst isOperator = (node?: SyntaxNode): node is SyntaxNode =>\n node === undefined\n ? false\n : [\"Times\", \"Divide\", \"Plus\", \"Minus\"].includes(node.name);\n\nconst completionDone = (onSubmit?: () => void): Completion => ({\n apply: () => {\n onSubmit?.();\n },\n label: \"Done\",\n boost: 10,\n});\n\nconst getLastChild = (node: SyntaxNode, context: CompletionContext) => {\n let { lastChild: childNode } = node;\n const { pos } = context;\n while (childNode) {\n const isBeforeCursor = childNode.from < pos;\n if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {\n if (childNode.name === \"ParenthesizedExpression\") {\n // extract the parenthesized expression\n const expression = childNode.firstChild?.nextSibling;\n if (expression) {\n childNode = expression;\n }\n }\n return childNode;\n } else {\n childNode = childNode.prevSibling;\n }\n }\n};\nconst getFunctionName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"ArgList\") {\n const functionNode = node.prevSibling;\n if (functionNode) {\n return getValue(functionNode, state);\n }\n } else if (node.name === \"OpenBrace\") {\n const maybeFunction = node.parent?.prevSibling;\n if (maybeFunction?.name === \"Function\") {\n return getValue(maybeFunction, state);\n }\n }\n};\n\nconst getRelationalOperator = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"RelationalExpression\") {\n const lastNode = lastNamedChild(node);\n if (lastNode?.name === \"RelationalOperator\") {\n return getValue(lastNode, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"RelationalOperator\") {\n return getValue(prevNode, state) as ColumnExpressionOperator;\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState\n): string | undefined => {\n if (node.name === \"RelationalExpression\") {\n if (node.firstChild?.name === \"Column\") {\n return getValue(node.firstChild, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"RelationalOperator\") {\n return getColumnName(prevNode, state);\n }\n }\n};\n\nconst makeSuggestions = async (\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n};\n\nconst handleConditionalExpression = (\n node: SyntaxNode,\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n maybeComplete?: boolean,\n onSubmit?: () => void\n) => {\n const lastChild = getLastChild(node, context);\n switch (lastChild?.name) {\n case \"If\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \"( \",\n });\n case \"OpenBrace\":\n return makeSuggestions(context, suggestionProvider, \"expression\");\n case \"Condition\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \", \",\n });\n case \"CloseBrace\":\n if (maybeComplete) {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n }\n }\n};\n\nconst promptToSave = (context: CompletionContext, onSubmit: () => void) => {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n};\n\nexport const useColumnAutoComplete = (\n suggestionProvider: IExpressionSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n ) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider]\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n const text = state.doc.toString();\n const maybeComplete = isCompleteExpression(text);\n\n switch (nodeBefore.name) {\n case \"If\": {\n return makeSuggestions(context, \"expression\", { prefix: \"( \" });\n }\n case \"Condition\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n // is this the first term ?\n const prevChild = getPreviousNode(lastChild);\n if (prevChild?.name !== \"RelationalOperator\") {\n return makeSuggestions(context, \"condition-operator\", {\n columnName: getValue(lastChild, state),\n });\n }\n } else if (lastChild?.name === \"RelationalOperator\") {\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n case \"ConditionalExpression\":\n return handleConditionalExpression(\n nodeBefore,\n context,\n suggestionProvider\n );\n case \"RelationalExpression\":\n {\n if (isCompleteRelationalExpression(nodeBefore)) {\n return {\n from: context.pos,\n options: booleanJoinSuggestions.concat({\n label: \", <truthy expression>, <falsy expression>\",\n apply: \", \",\n }),\n };\n } else {\n const operator = getRelationalOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n if (!operator) {\n const options = await suggestionProvider.getSuggestions(\n \"condition-operator\",\n {\n columnName,\n }\n );\n return { from: context.pos, options };\n } else {\n return makeSuggestions(context, \"expression\");\n }\n }\n }\n break;\n\n case \"RelationalOperator\":\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getRelationalOperator(\n nodeBefore,\n state\n ) as ColumnExpressionOperator;\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n } else if (to - from > 2 && context.pos === to) {\n // NOte we couls also offer AND/OR to extend the condition\n return makeSuggestions(context, \"expression\", {\n prefix: \", \",\n });\n }\n }\n break;\n\n case \"ArithmeticExpression\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n return makeSuggestions(context, \"expression\");\n } else if (isOperator(lastChild)) {\n const operator = lastChild.name as ColumnExpressionOperator;\n return makeSuggestions(context, \"column\", { operator });\n }\n }\n\n break;\n case \"OpenBrace\":\n {\n // Might be a function expression, might be parenthesized\n const functionName = getFunctionName(nodeBefore, state);\n // If not function, what came before - if it's an operator\n // we restrict to numerics\n return makeSuggestions(context, \"expression\", { functionName });\n }\n break;\n case \"ArgList\": {\n const functionName = getFunctionName(nodeBefore, state);\n const lastArgument = getLastChild(nodeBefore, context);\n\n const prefix =\n lastArgument?.name === \"OpenBrace\" || lastArgument?.name === \"Comma\"\n ? undefined\n : \",\";\n let options = await suggestionProvider.getSuggestions(\"expression\", {\n functionName,\n });\n options = prefix ? applyPrefix(options, \", \") : options;\n\n // TODO per function check for number of arguments expected\n if (\n lastArgument?.name !== \"OpenBrace\" &&\n lastArgument?.name !== \"Comma\"\n ) {\n options = [\n {\n apply: \") \",\n boost: 10,\n label: \"Done - no more arguments\",\n } as Completion,\n ].concat(options);\n }\n return { from: context.pos, options };\n }\n case \"Equal\":\n if (text.trim() === \"=\") {\n return makeSuggestions(context, \"expression\");\n }\n break;\n case \"ParenthesizedExpression\":\n case \"ColumnDefinitionExpression\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"expression\");\n } else {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n if (maybeComplete) {\n // We come in here is the columns IS complete, too (ie has space after)\n const options: Completion[] = [\n completionDone(onSubmit.current),\n ];\n const columnName = getValue(lastChild, state);\n const columnOptions: Completion[] =\n await suggestionProvider.getSuggestions(\"operator\", {\n columnName,\n });\n\n return {\n from: context.pos,\n options: options.concat(columnOptions),\n };\n }\n } else if (lastChild?.name === \"CallExpression\") {\n if (maybeComplete) {\n return {\n from: context.pos,\n options: [completionDone(onSubmit.current)],\n };\n }\n } else if (lastChild?.name === \"ArithmeticExpression\") {\n if (maybeComplete) {\n let options: Completion[] = [completionDone(onSubmit.current)];\n\n const lastExpressionChild = getLastChild(lastChild, context);\n if (lastExpressionChild?.name === \"Column\") {\n const columnName = getValue(lastExpressionChild, state);\n // TODO need to exclude columns already included in expression\n\n const suggestions = await suggestionProvider.getSuggestions(\n \"operator\",\n { columnName }\n );\n options = options.concat(suggestions);\n }\n\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n lastChild,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n }\n break;\n }\n case \"Column\":\n {\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"expression\",\n undefined,\n word.text\n );\n\n if (isPartialMatch) {\n return makeSuggestions(context, \"expression\", {\n startsWith: word.text,\n });\n }\n }\n break;\n case \"Comma\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n\n case \"CloseBrace\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n parentNode,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n } else if (parentNode?.name === \"ArgList\") {\n if (maybeComplete) {\n return promptToSave(context, onSubmit.current);\n }\n }\n }\n break;\n\n default: {\n if (nodeBefore?.prevSibling?.name === \"FilterClause\") {\n console.log(\"looks like we ight be a or|and operator\");\n }\n }\n }\n },\n [makeSuggestions, onSubmit, suggestionProvider]\n ) as CompletionSource;\n};\n"],"names":["ColumnNamedTerms","getValue","lastNamedChild","makeSuggestions","useCallback","syntaxTree","isCompleteExpression","getPreviousNode","isCompleteRelationalExpression","booleanJoinSuggestions","getNamedParentNode"],"mappings":"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"}