@vuu-ui/vuu-table-extras 2.1.19-beta.2 → 2.1.19-beta.4

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 (436) hide show
  1. package/cjs/node_modules/csv-parse/dist/esm/sync.js +3978 -0
  2. package/cjs/node_modules/csv-parse/dist/esm/sync.js.map +1 -0
  3. package/cjs/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js +85 -0
  4. package/cjs/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js.map +1 -0
  5. package/cjs/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js +71 -0
  6. package/cjs/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js.map +1 -0
  7. package/cjs/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js +138 -0
  8. package/cjs/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js.map +1 -0
  9. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js +25 -0
  10. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js.map +1 -0
  11. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js +31 -0
  12. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js.map +1 -0
  13. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js +6 -0
  14. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js.map +1 -0
  15. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js +81 -0
  16. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js.map +1 -0
  17. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +6 -0
  18. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +1 -0
  19. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +67 -0
  20. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -0
  21. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +6 -0
  22. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +1 -0
  23. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js +20 -0
  24. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js.map +1 -0
  25. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js +6 -0
  26. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js.map +1 -0
  27. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js +40 -0
  28. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js.map +1 -0
  29. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js +6 -0
  30. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js.map +1 -0
  31. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js +103 -0
  32. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -0
  33. package/cjs/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js +21 -0
  34. package/cjs/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js.map +1 -0
  35. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +6 -0
  36. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +1 -0
  37. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js +62 -0
  38. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -0
  39. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js +6 -0
  40. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js.map +1 -0
  41. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js +69 -0
  42. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js.map +1 -0
  43. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js +6 -0
  44. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js.map +1 -0
  45. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js +39 -0
  46. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js.map +1 -0
  47. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js +307 -0
  48. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js.map +1 -0
  49. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +28 -0
  50. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -0
  51. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +465 -0
  52. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -0
  53. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +61 -0
  54. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -0
  55. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js +21 -0
  56. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -0
  57. package/cjs/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js +39 -0
  58. package/cjs/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js.map +1 -0
  59. package/cjs/packages/vuu-table-extras/src/column-expression-input/highlighting.js +16 -0
  60. package/cjs/packages/vuu-table-extras/src/column-expression-input/highlighting.js.map +1 -0
  61. package/cjs/packages/vuu-table-extras/src/column-expression-input/theme.js +63 -0
  62. package/cjs/packages/vuu-table-extras/src/column-expression-input/theme.js.map +1 -0
  63. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js +358 -0
  64. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js.map +1 -0
  65. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js +131 -0
  66. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js.map +1 -0
  67. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js +213 -0
  68. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -0
  69. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js +98 -0
  70. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -0
  71. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js +111 -0
  72. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js.map +1 -0
  73. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js +102 -0
  74. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -0
  75. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js +6 -0
  76. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js.map +1 -0
  77. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js +48 -0
  78. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -0
  79. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js +6 -0
  80. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js.map +1 -0
  81. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.js +107 -0
  82. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.js.map +1 -0
  83. package/cjs/packages/vuu-table-extras/src/column-menu/column-menu-utils.js +459 -0
  84. package/cjs/packages/vuu-table-extras/src/column-menu/column-menu-utils.js.map +1 -0
  85. package/cjs/packages/vuu-table-extras/src/column-menu/useColumnActions.js +68 -0
  86. package/cjs/packages/vuu-table-extras/src/column-menu/useColumnActions.js.map +1 -0
  87. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnModel.js +177 -0
  88. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnModel.js.map +1 -0
  89. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js +6 -0
  90. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js.map +1 -0
  91. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.js +252 -0
  92. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.js.map +1 -0
  93. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js +34 -0
  94. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js.map +1 -0
  95. package/cjs/packages/vuu-table-extras/src/column-picker/useColumnPicker.js +55 -0
  96. package/cjs/packages/vuu-table-extras/src/column-picker/useColumnPicker.js.map +1 -0
  97. package/cjs/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js +35 -0
  98. package/cjs/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js.map +1 -0
  99. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js +6 -0
  100. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js.map +1 -0
  101. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js +45 -0
  102. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js.map +1 -0
  103. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js +6 -0
  104. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js.map +1 -0
  105. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js +161 -0
  106. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js.map +1 -0
  107. package/cjs/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js +203 -0
  108. package/cjs/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js.map +1 -0
  109. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js +6 -0
  110. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js.map +1 -0
  111. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.js +95 -0
  112. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.js.map +1 -0
  113. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-constants.js +8 -0
  114. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-constants.js.map +1 -0
  115. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js +64 -0
  116. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js.map +1 -0
  117. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js +199 -0
  118. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js.map +1 -0
  119. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js +100 -0
  120. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js.map +1 -0
  121. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js +86 -0
  122. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js.map +1 -0
  123. package/cjs/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js +303 -0
  124. package/cjs/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js.map +1 -0
  125. package/cjs/packages/vuu-table-extras/src/csv-upload/useCsvUploadSessionPreview.js +73 -0
  126. package/cjs/packages/vuu-table-extras/src/csv-upload/useCsvUploadSessionPreview.js.map +1 -0
  127. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js +6 -0
  128. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js.map +1 -0
  129. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js +76 -0
  130. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js.map +1 -0
  131. package/cjs/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js +61 -0
  132. package/cjs/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js.map +1 -0
  133. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js +6 -0
  134. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js.map +1 -0
  135. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.js +106 -0
  136. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.js.map +1 -0
  137. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js +6 -0
  138. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js.map +1 -0
  139. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js +55 -0
  140. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js.map +1 -0
  141. package/cjs/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js +10 -0
  142. package/cjs/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js.map +1 -0
  143. package/cjs/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js +68 -0
  144. package/cjs/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js.map +1 -0
  145. package/cjs/packages/vuu-table-extras/src/index.js +102 -0
  146. package/cjs/packages/vuu-table-extras/src/index.js.map +1 -0
  147. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +6 -0
  148. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js.map +1 -0
  149. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +90 -0
  150. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js.map +1 -0
  151. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +44 -0
  152. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js.map +1 -0
  153. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +49 -0
  154. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js.map +1 -0
  155. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.css.js +6 -0
  156. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.css.js.map +1 -0
  157. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.js +34 -0
  158. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.js.map +1 -0
  159. package/cjs/packages/vuu-table-extras/src/table-provider/TableProvider.js +61 -0
  160. package/cjs/packages/vuu-table-extras/src/table-provider/TableProvider.js.map +1 -0
  161. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js +6 -0
  162. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js.map +1 -0
  163. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js +116 -0
  164. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js.map +1 -0
  165. package/cjs/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js +60 -0
  166. package/cjs/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js.map +1 -0
  167. package/esm/node_modules/csv-parse/dist/esm/sync.js +3974 -0
  168. package/esm/node_modules/csv-parse/dist/esm/sync.js.map +1 -0
  169. package/esm/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js +83 -0
  170. package/esm/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js.map +1 -0
  171. package/esm/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js +69 -0
  172. package/esm/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js.map +1 -0
  173. package/esm/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js +136 -0
  174. package/esm/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js.map +1 -0
  175. package/esm/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js +23 -0
  176. package/esm/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js.map +1 -0
  177. package/esm/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js +29 -0
  178. package/esm/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js.map +1 -0
  179. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js +4 -0
  180. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js.map +1 -0
  181. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js +79 -0
  182. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js.map +1 -0
  183. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +4 -0
  184. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +1 -0
  185. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +65 -0
  186. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -0
  187. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +4 -0
  188. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +1 -0
  189. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js +18 -0
  190. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js.map +1 -0
  191. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js +4 -0
  192. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js.map +1 -0
  193. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js +38 -0
  194. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js.map +1 -0
  195. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js +4 -0
  196. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js.map +1 -0
  197. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js +101 -0
  198. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -0
  199. package/esm/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js +19 -0
  200. package/esm/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js.map +1 -0
  201. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +4 -0
  202. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +1 -0
  203. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js +60 -0
  204. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -0
  205. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js +4 -0
  206. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js.map +1 -0
  207. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js +67 -0
  208. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js.map +1 -0
  209. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js +4 -0
  210. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js.map +1 -0
  211. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js +37 -0
  212. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js.map +1 -0
  213. package/esm/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js +305 -0
  214. package/esm/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js.map +1 -0
  215. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +26 -0
  216. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -0
  217. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +463 -0
  218. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -0
  219. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +56 -0
  220. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -0
  221. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js +19 -0
  222. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -0
  223. package/esm/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js +37 -0
  224. package/esm/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js.map +1 -0
  225. package/esm/packages/vuu-table-extras/src/column-expression-input/highlighting.js +14 -0
  226. package/esm/packages/vuu-table-extras/src/column-expression-input/highlighting.js.map +1 -0
  227. package/esm/packages/vuu-table-extras/src/column-expression-input/theme.js +61 -0
  228. package/esm/packages/vuu-table-extras/src/column-expression-input/theme.js.map +1 -0
  229. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js +356 -0
  230. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js.map +1 -0
  231. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js +129 -0
  232. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js.map +1 -0
  233. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js +211 -0
  234. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -0
  235. package/esm/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js +96 -0
  236. package/esm/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -0
  237. package/esm/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js +109 -0
  238. package/esm/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js.map +1 -0
  239. package/esm/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js +100 -0
  240. package/esm/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -0
  241. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js +4 -0
  242. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js.map +1 -0
  243. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js +46 -0
  244. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -0
  245. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js +4 -0
  246. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js.map +1 -0
  247. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.js +105 -0
  248. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.js.map +1 -0
  249. package/esm/packages/vuu-table-extras/src/column-menu/column-menu-utils.js +451 -0
  250. package/esm/packages/vuu-table-extras/src/column-menu/column-menu-utils.js.map +1 -0
  251. package/esm/packages/vuu-table-extras/src/column-menu/useColumnActions.js +66 -0
  252. package/esm/packages/vuu-table-extras/src/column-menu/useColumnActions.js.map +1 -0
  253. package/esm/packages/vuu-table-extras/src/column-picker/ColumnModel.js +170 -0
  254. package/esm/packages/vuu-table-extras/src/column-picker/ColumnModel.js.map +1 -0
  255. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js +4 -0
  256. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js.map +1 -0
  257. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.js +249 -0
  258. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.js.map +1 -0
  259. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js +32 -0
  260. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js.map +1 -0
  261. package/esm/packages/vuu-table-extras/src/column-picker/useColumnPicker.js +53 -0
  262. package/esm/packages/vuu-table-extras/src/column-picker/useColumnPicker.js.map +1 -0
  263. package/esm/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js +33 -0
  264. package/esm/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js.map +1 -0
  265. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js +4 -0
  266. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js.map +1 -0
  267. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js +43 -0
  268. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js.map +1 -0
  269. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js +4 -0
  270. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js.map +1 -0
  271. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js +159 -0
  272. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js.map +1 -0
  273. package/esm/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js +201 -0
  274. package/esm/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js.map +1 -0
  275. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js +4 -0
  276. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js.map +1 -0
  277. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.js +93 -0
  278. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.js.map +1 -0
  279. package/{src → esm/packages/vuu-table-extras/src}/csv-upload/parse/csv-constants.js +2 -0
  280. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-constants.js.map +1 -0
  281. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js +57 -0
  282. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js.map +1 -0
  283. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js +196 -0
  284. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js.map +1 -0
  285. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js +97 -0
  286. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js.map +1 -0
  287. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js +76 -0
  288. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js.map +1 -0
  289. package/esm/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js +301 -0
  290. package/esm/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js.map +1 -0
  291. package/esm/packages/vuu-table-extras/src/csv-upload/useCsvUploadSessionPreview.js +71 -0
  292. package/esm/packages/vuu-table-extras/src/csv-upload/useCsvUploadSessionPreview.js.map +1 -0
  293. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js +4 -0
  294. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js.map +1 -0
  295. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js +74 -0
  296. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js.map +1 -0
  297. package/esm/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js +59 -0
  298. package/esm/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js.map +1 -0
  299. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js +4 -0
  300. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js.map +1 -0
  301. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.js +104 -0
  302. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.js.map +1 -0
  303. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js +4 -0
  304. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js.map +1 -0
  305. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js +53 -0
  306. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js.map +1 -0
  307. package/esm/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js +8 -0
  308. package/esm/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js.map +1 -0
  309. package/esm/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js +66 -0
  310. package/esm/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js.map +1 -0
  311. package/esm/packages/vuu-table-extras/src/index.js +43 -0
  312. package/esm/packages/vuu-table-extras/src/index.js.map +1 -0
  313. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +4 -0
  314. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js.map +1 -0
  315. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +88 -0
  316. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js.map +1 -0
  317. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +42 -0
  318. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js.map +1 -0
  319. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +47 -0
  320. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js.map +1 -0
  321. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.css.js +4 -0
  322. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.css.js.map +1 -0
  323. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.js +31 -0
  324. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.js.map +1 -0
  325. package/esm/packages/vuu-table-extras/src/table-provider/TableProvider.js +56 -0
  326. package/esm/packages/vuu-table-extras/src/table-provider/TableProvider.js.map +1 -0
  327. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js +4 -0
  328. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js.map +1 -0
  329. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js +112 -0
  330. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js.map +1 -0
  331. package/esm/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js +58 -0
  332. package/esm/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js.map +1 -0
  333. package/package.json +18 -15
  334. package/types/cell-renderers/background-cell/BackgroundCell.d.ts +1 -1
  335. package/types/cell-renderers/dropdown-cell/DropdownCell.d.ts +1 -1
  336. package/types/cell-renderers/lookup-cell/LookupCell.d.ts +1 -1
  337. package/types/column-expression-input/column-language-parser/generated/column-parser.d.ts +1 -1
  338. package/types/column-expression-input/column-language-parser/generated/column-parser.terms.d.ts +24 -1
  339. package/types/column-expression-input/column-language-parser/test.d.mts +1 -1
  340. package/types/csv-upload/CsvUpload.d.ts +2 -2
  341. package/types/csv-upload/useCsvUpload.d.ts +3 -3
  342. package/types/freeze-control/useFreezeControl.d.ts +1 -1
  343. package/src/calculated-column/CalculatedColumnPanel.js +0 -95
  344. package/src/calculated-column/useCalculatedColumnPanel.js +0 -60
  345. package/src/calculated-column/useEditCalculatedColumn.js +0 -104
  346. package/src/cell-edit-validators/CaseValidator.js +0 -21
  347. package/src/cell-edit-validators/PatternValidator.js +0 -23
  348. package/src/cell-edit-validators/index.js +0 -2
  349. package/src/cell-renderers/background-cell/BackgroundCell.css.js +0 -103
  350. package/src/cell-renderers/background-cell/BackgroundCell.js +0 -76
  351. package/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +0 -9
  352. package/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +0 -71
  353. package/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +0 -187
  354. package/src/cell-renderers/background-cell/index.js +0 -2
  355. package/src/cell-renderers/background-cell/useDirection.js +0 -25
  356. package/src/cell-renderers/button-cell/IconButtonCell.css.js +0 -23
  357. package/src/cell-renderers/button-cell/IconButtonCell.js +0 -33
  358. package/src/cell-renderers/dropdown-cell/DropdownCell.css.js +0 -36
  359. package/src/cell-renderers/dropdown-cell/DropdownCell.js +0 -84
  360. package/src/cell-renderers/dropdown-cell/index.js +0 -1
  361. package/src/cell-renderers/index.js +0 -6
  362. package/src/cell-renderers/lookup-cell/LookupCell.js +0 -15
  363. package/src/cell-renderers/lookup-cell/index.js +0 -1
  364. package/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +0 -31
  365. package/src/cell-renderers/pct-progress-cell/PctProgressCell.js +0 -49
  366. package/src/cell-renderers/pct-progress-cell/index.js +0 -1
  367. package/src/cell-renderers/progress-cell/ProgressCell.css.js +0 -43
  368. package/src/cell-renderers/progress-cell/ProgressCell.js +0 -74
  369. package/src/cell-renderers/progress-cell/index.js +0 -1
  370. package/src/column-expression-input/ColumnExpressionInput.css.js +0 -94
  371. package/src/column-expression-input/ColumnExpressionInput.js +0 -28
  372. package/src/column-expression-input/column-function-descriptors.js +0 -281
  373. package/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +0 -18
  374. package/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +0 -381
  375. package/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +0 -56
  376. package/src/column-expression-input/column-language-parser/index.js +0 -3
  377. package/src/column-expression-input/functionDocInfo.js +0 -24
  378. package/src/column-expression-input/highlighting.js +0 -18
  379. package/src/column-expression-input/index.js +0 -4
  380. package/src/column-expression-input/theme.js +0 -57
  381. package/src/column-expression-input/useColumnAutoComplete.js +0 -307
  382. package/src/column-expression-input/useColumnExpressionEditor.js +0 -133
  383. package/src/column-expression-input/useColumnExpressionSuggestionProvider.js +0 -211
  384. package/src/column-formatting-settings/BaseNumericFormattingSettings.js +0 -96
  385. package/src/column-formatting-settings/ColumnFormattingPanel.js +0 -112
  386. package/src/column-formatting-settings/DateTimeFormattingSettings.js +0 -116
  387. package/src/column-formatting-settings/LongTypeFormattingSettings.css.js +0 -11
  388. package/src/column-formatting-settings/LongTypeFormattingSettings.js +0 -54
  389. package/src/column-formatting-settings/index.js +0 -3
  390. package/src/column-menu/ColumnMenu.css.js +0 -25
  391. package/src/column-menu/ColumnMenu.js +0 -69
  392. package/src/column-menu/column-action-types.js +0 -0
  393. package/src/column-menu/column-menu-utils.js +0 -318
  394. package/src/column-menu/useColumnActions.js +0 -77
  395. package/src/column-picker/ColumnModel.js +0 -113
  396. package/src/column-picker/ColumnPicker.css.js +0 -96
  397. package/src/column-picker/ColumnPicker.js +0 -204
  398. package/src/column-picker/ColumnPickerAction.js +0 -24
  399. package/src/column-picker/useColumnPicker.js +0 -42
  400. package/src/column-picker/useTableColumnPicker.js +0 -27
  401. package/src/column-picker/useTableColumnPickerDeprecated.js +0 -87
  402. package/src/column-settings-panel/ColumnNameLabel.css.js +0 -18
  403. package/src/column-settings-panel/ColumnNameLabel.js +0 -54
  404. package/src/column-settings-panel/ColumnSettingsPanel.css.js +0 -70
  405. package/src/column-settings-panel/ColumnSettingsPanel.js +0 -173
  406. package/src/column-settings-panel/useColumnSettings.js +0 -205
  407. package/src/csv-upload/CsvUpload.css.js +0 -28
  408. package/src/csv-upload/CsvUpload.js +0 -95
  409. package/src/csv-upload/index.js +0 -7
  410. package/src/csv-upload/parse/csv-errors.js +0 -54
  411. package/src/csv-upload/parse/csv-parse.js +0 -79
  412. package/src/csv-upload/parse/csv-schema-validation.js +0 -45
  413. package/src/csv-upload/parse/csv-upload-utils.js +0 -59
  414. package/src/csv-upload/parse/index.js +0 -5
  415. package/src/csv-upload/useCsvUpload.js +0 -260
  416. package/src/csv-upload/useCsvUploadSessionPreview.js +0 -70
  417. package/src/datasource-stats/DatasourceStats.css.js +0 -56
  418. package/src/datasource-stats/DatasourceStats.js +0 -89
  419. package/src/datasource-stats/useDatasourceStats.js +0 -48
  420. package/src/freeze-control/FreezeControl.css.js +0 -108
  421. package/src/freeze-control/FreezeControl.js +0 -96
  422. package/src/freeze-control/FrozenBanner.css.js +0 -16
  423. package/src/freeze-control/FrozenBanner.js +0 -48
  424. package/src/freeze-control/freezeControlBadge.js +0 -9
  425. package/src/freeze-control/useFreezeControl.js +0 -68
  426. package/src/index.js +0 -22
  427. package/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +0 -23
  428. package/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +0 -99
  429. package/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +0 -28
  430. package/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +0 -29
  431. package/src/table-footer/TableFooter.css.js +0 -22
  432. package/src/table-footer/TableFooter.js +0 -30
  433. package/src/table-provider/TableProvider.js +0 -33
  434. package/src/table-settings-panel/TableSettingsPanel.css.js +0 -70
  435. package/src/table-settings-panel/TableSettingsPanel.js +0 -128
  436. package/src/table-settings-panel/useTableSettings.js +0 -50
@@ -0,0 +1,129 @@
1
+ import { EditorView, EditorState, minimalSetup, autocompletion, keymap, defaultKeymap, startCompletion, ensureSyntaxTree } from '@vuu-ui/vuu-codemirror';
2
+ import { createEl } from '@vuu-ui/vuu-utils';
3
+ import { useRef, useMemo, useEffect, useCallback } from 'react';
4
+ import { columnExpressionLanguageSupport } from './column-language-parser/ColumnExpressionLanguage.js';
5
+ import { walkTree } from './column-language-parser/ColumnExpressionTreeWalker.js';
6
+ import './column-language-parser/column-expression-parse-utils.js';
7
+ import { vuuHighlighting } from './highlighting.js';
8
+ import { vuuTheme } from './theme.js';
9
+ import { useColumnAutoComplete } from './useColumnAutoComplete.js';
10
+
11
+ const getView = (ref) => {
12
+ if (ref.current == void 0) {
13
+ throw Error("EditorView not defined");
14
+ }
15
+ return ref.current;
16
+ };
17
+ const getOptionClass = () => {
18
+ return "vuuSuggestion";
19
+ };
20
+ const noop = () => console.log("noooop");
21
+ const hasExpressionType = (completion) => "expressionType" in completion;
22
+ const injectOptionContent = (completion) => {
23
+ if (hasExpressionType(completion)) {
24
+ const div = createEl("div", "expression-type-container");
25
+ const span = createEl("span", "expression-type", completion.expressionType);
26
+ div.appendChild(span);
27
+ return div;
28
+ } else {
29
+ return null;
30
+ }
31
+ };
32
+ const useColumnExpressionEditor = ({
33
+ onChange,
34
+ onSubmitExpression,
35
+ source,
36
+ suggestionProvider
37
+ }) => {
38
+ const editorRef = useRef(null);
39
+ const onSubmitRef = useRef(noop);
40
+ const viewRef = useRef(void 0);
41
+ const completionFn = useColumnAutoComplete(suggestionProvider, onSubmitRef);
42
+ const [createState, clearInput, submit] = useMemo(() => {
43
+ const parseExpression = () => {
44
+ const view = getView(viewRef);
45
+ const source2 = view.state.doc.toString();
46
+ const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5e3);
47
+ if (tree) {
48
+ const expression = walkTree(tree, source2);
49
+ return [source2, expression];
50
+ } else {
51
+ return ["", void 0];
52
+ }
53
+ };
54
+ const clearInput2 = () => {
55
+ getView(viewRef).setState(createState2());
56
+ };
57
+ const submitExpression = () => {
58
+ const [source2, expression] = parseExpression();
59
+ onSubmitExpression?.(source2, expression);
60
+ };
61
+ const showSuggestions = (key) => {
62
+ return keymap.of([
63
+ {
64
+ key,
65
+ run() {
66
+ startCompletion(getView(viewRef));
67
+ return true;
68
+ }
69
+ }
70
+ ]);
71
+ };
72
+ const createState2 = () => EditorState.create({
73
+ doc: source,
74
+ extensions: [
75
+ minimalSetup,
76
+ autocompletion({
77
+ addToOptions: [
78
+ {
79
+ render: injectOptionContent,
80
+ position: 70
81
+ }
82
+ ],
83
+ override: [completionFn],
84
+ optionClass: getOptionClass
85
+ }),
86
+ columnExpressionLanguageSupport(),
87
+ keymap.of(defaultKeymap),
88
+ showSuggestions("ArrowDown"),
89
+ EditorView.updateListener.of((v) => {
90
+ const view = getView(viewRef);
91
+ if (v.docChanged) {
92
+ startCompletion(view);
93
+ const source2 = view.state.doc.toString();
94
+ onChange?.(source2);
95
+ }
96
+ }),
97
+ // Enforces single line view
98
+ EditorState.transactionFilter.of(
99
+ (tr) => tr.newDoc.lines > 1 ? [] : tr
100
+ ),
101
+ vuuTheme,
102
+ vuuHighlighting
103
+ ]
104
+ });
105
+ onSubmitRef.current = () => {
106
+ submitExpression();
107
+ };
108
+ return [createState2, clearInput2, submitExpression];
109
+ }, [completionFn, onChange, onSubmitExpression, source]);
110
+ useEffect(() => {
111
+ if (!editorRef.current) {
112
+ throw Error("editor not in dom");
113
+ }
114
+ viewRef.current = new EditorView({
115
+ state: createState(),
116
+ parent: editorRef.current
117
+ });
118
+ return () => {
119
+ viewRef.current?.destroy();
120
+ };
121
+ }, [completionFn, createState]);
122
+ const handleBlur = useCallback(() => {
123
+ submit();
124
+ }, [submit]);
125
+ return { editorRef, clearInput, onBlur: handleBlur };
126
+ };
127
+
128
+ export { useColumnExpressionEditor };
129
+ //# sourceMappingURL=useColumnExpressionEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnExpressionEditor.js","sources":["../../../../../../../packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.ts"],"sourcesContent":["import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { createEl } from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEventHandler,\n MutableRefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { columnExpressionLanguageSupport } from \"./column-language-parser\";\nimport {\n ColumnDefinitionExpression,\n walkTree,\n} from \"./column-language-parser/ColumnExpressionTreeWalker\";\nimport { ColumnExpressionInputProps } from \"./ColumnExpressionInput\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n useColumnAutoComplete,\n} from \"./useColumnAutoComplete\";\n\nexport type ColumnExpressionOperator = \"Times\" | \"Divide\" | \"Minus\" | \"Plus\";\n\nexport type ColumnExpressionSuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"expression\"\n | \"condition-operator\"\n | \"operator\"\n | \"relational-operator\";\n\nexport type ColumnExpressionSuggestionOptions = {\n columnName?: string;\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n startsWith?: string;\n selection?: string[];\n};\n\n// TODO move this somewhere neutral\nexport interface IExpressionSuggestionProvider {\n getSuggestions: (\n valueType: ColumnExpressionSuggestionType,\n options?: ColumnExpressionSuggestionOptions,\n ) => Promise<Completion[]>;\n isPartialMatch: (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n text?: string | undefined,\n ) => Promise<boolean>;\n}\n\nexport interface ExpressionSuggestionConsumer {\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (/*completion: Completion*/) => {\n return \"vuuSuggestion\";\n};\n\nconst noop = () => console.log(\"noooop\");\n\nconst hasExpressionType = (\n completion: Completion,\n): completion is Completion & { expressionType: string } =>\n \"expressionType\" in completion;\n\nconst injectOptionContent = (\n completion: Completion /*, state: EditorState*/,\n) => {\n if (hasExpressionType(completion)) {\n const div = createEl(\"div\", \"expression-type-container\");\n const span = createEl(\"span\", \"expression-type\", completion.expressionType);\n div.appendChild(span);\n return div;\n } else {\n return null;\n }\n};\n\nexport const useColumnExpressionEditor = ({\n onChange,\n onSubmitExpression,\n source,\n suggestionProvider,\n}: ColumnExpressionInputProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmitRef = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>(undefined);\n const completionFn = useColumnAutoComplete(suggestionProvider, onSubmitRef);\n\n const [createState, clearInput, submit] = useMemo(() => {\n const parseExpression = ():\n | [string, ColumnDefinitionExpression]\n | [\"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const expression = walkTree(tree, source);\n return [source, expression];\n } else {\n return [\"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitExpression = () => {\n const [source, expression] = parseExpression();\n onSubmitExpression?.(source, expression);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: source,\n extensions: [\n minimalSetup,\n autocompletion({\n addToOptions: [\n {\n render: injectOptionContent,\n position: 70,\n },\n ],\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n columnExpressionLanguageSupport(),\n keymap.of(defaultKeymap),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n const source = view.state.doc.toString();\n onChange?.(source);\n }\n }),\n // Enforces single line view\n EditorState.transactionFilter.of((tr) =>\n tr.newDoc.lines > 1 ? [] : tr,\n ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmitRef.current = () => {\n submitExpression();\n };\n\n return [createState, clearInput, submitExpression];\n }, [completionFn, onChange, onSubmitExpression, source]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n const handleBlur = useCallback<FocusEventHandler>(() => {\n submit();\n }, [submit]);\n\n return { editorRef, clearInput, onBlur: handleBlur };\n};\n"],"names":["source","clearInput","createState"],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ import { toSuggestions, AnnotationType, getRelationalOperators, numericOperators, stringOperators } from '@vuu-ui/vuu-codemirror';
2
+ import { useTypeaheadSuggestions, getTypeaheadParams } from '@vuu-ui/vuu-data-react';
3
+ import { isNumericColumn, isTextColumn } from '@vuu-ui/vuu-utils';
4
+ import { useCallback, useRef } from 'react';
5
+ import { columnFunctionDescriptors } from './column-function-descriptors.js';
6
+ import { functionDocInfo } from './functionDocInfo.js';
7
+
8
+ const NO_OPERATORS = [];
9
+ const withApplySpace = (suggestions) => suggestions.map((suggestion) => ({
10
+ ...suggestion,
11
+ apply: (suggestion.apply ?? suggestion.label) + " "
12
+ }));
13
+ const getValidColumns = (columns, { functionName, operator }) => {
14
+ if (operator) {
15
+ return columns.filter(isNumericColumn);
16
+ } else if (functionName) {
17
+ const fn = columnFunctionDescriptors.find((f) => f.name === functionName);
18
+ if (fn) {
19
+ switch (fn.accepts) {
20
+ case "string":
21
+ return columns.filter(isTextColumn);
22
+ case "number":
23
+ return columns.filter(isNumericColumn);
24
+ default:
25
+ return columns;
26
+ }
27
+ }
28
+ }
29
+ return columns;
30
+ };
31
+ const getColumns = (columns, options) => {
32
+ const validColumns = getValidColumns(columns, options);
33
+ return validColumns.map((column) => {
34
+ const label = column.label ?? column.name;
35
+ return {
36
+ apply: options.prefix ? `${options.prefix}${column.name}` : column.name,
37
+ label,
38
+ boost: 5,
39
+ type: "column",
40
+ expressionType: column.serverDataType
41
+ };
42
+ });
43
+ };
44
+ const arithmeticOperators = [
45
+ { apply: "* ", boost: 2, label: "*", type: "operator" },
46
+ { apply: "/ ", boost: 2, label: "/", type: "operator" },
47
+ { apply: "+ ", boost: 2, label: "+", type: "operator" },
48
+ { apply: "- ", boost: 2, label: "-", type: "operator" }
49
+ ];
50
+ const getOperators = (column) => {
51
+ if (column === void 0 || isNumericColumn(column)) {
52
+ return arithmeticOperators;
53
+ } else {
54
+ return NO_OPERATORS;
55
+ }
56
+ };
57
+ const getConditionOperators = (column) => {
58
+ switch (column.serverDataType) {
59
+ case "string":
60
+ case "char":
61
+ return withApplySpace(
62
+ stringOperators
63
+ /*, startsWith*/
64
+ );
65
+ case "int":
66
+ case "long":
67
+ case "double":
68
+ return withApplySpace(numericOperators);
69
+ }
70
+ };
71
+ const toFunctionCompletion = (functionDescriptor) => ({
72
+ apply: `${functionDescriptor.name}( `,
73
+ boost: 2,
74
+ expressionType: functionDescriptor.type,
75
+ info: () => functionDocInfo(functionDescriptor),
76
+ label: functionDescriptor.name,
77
+ type: "function"
78
+ });
79
+ const getAcceptedTypes = (fn) => {
80
+ if (fn) {
81
+ if (typeof fn.accepts === "string") {
82
+ return fn.accepts;
83
+ } else if (Array.isArray(fn.accepts)) {
84
+ if (fn.accepts.every((s) => s === "string")) {
85
+ return "string";
86
+ } else {
87
+ return "any";
88
+ }
89
+ }
90
+ }
91
+ return "any";
92
+ };
93
+ const functions = columnFunctionDescriptors.map(toFunctionCompletion);
94
+ const getFunctions = ({ functionName }) => {
95
+ if (functionName) {
96
+ const fn = columnFunctionDescriptors.find((f) => f.name === functionName);
97
+ const acceptedTypes = getAcceptedTypes(fn);
98
+ if (fn) {
99
+ switch (acceptedTypes) {
100
+ case "string":
101
+ return columnFunctionDescriptors.filter((f) => f.type === "string" || f.type === "variable").map(toFunctionCompletion);
102
+ case "number":
103
+ return columnFunctionDescriptors.filter((f) => f.type === "number" || f.type === "variable").map(toFunctionCompletion);
104
+ }
105
+ }
106
+ }
107
+ return functions;
108
+ };
109
+ const NONE = {};
110
+ const useColumnExpressionSuggestionProvider = ({
111
+ columns,
112
+ table
113
+ }) => {
114
+ const findColumn = useCallback(
115
+ (name) => name ? columns.find((col) => col.name === name) : void 0,
116
+ [columns]
117
+ );
118
+ const latestSuggestionsRef = useRef(void 0);
119
+ const getTypeaheadSuggestions = useTypeaheadSuggestions();
120
+ const getSuggestions = useCallback(
121
+ async (suggestionType, options = NONE) => {
122
+ const { columnName, functionName, operator, prefix } = options;
123
+ switch (suggestionType) {
124
+ case "expression": {
125
+ const suggestions = await withApplySpace(
126
+ getColumns(columns, { functionName, prefix })
127
+ ).concat(getFunctions(options));
128
+ return latestSuggestionsRef.current = suggestions;
129
+ }
130
+ case "column": {
131
+ const suggestions = await getColumns(columns, options);
132
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
133
+ }
134
+ case "operator": {
135
+ const suggestions = await getOperators(findColumn(columnName));
136
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
137
+ }
138
+ case "relational-operator": {
139
+ const suggestions = await getRelationalOperators(
140
+ findColumn(columnName)
141
+ );
142
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
143
+ }
144
+ case "condition-operator":
145
+ {
146
+ const column = findColumn(columnName);
147
+ if (column) {
148
+ const suggestions = await getConditionOperators(column);
149
+ if (suggestions) {
150
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
151
+ }
152
+ }
153
+ }
154
+ break;
155
+ case "columnValue":
156
+ if (columnName && operator) {
157
+ const params = getTypeaheadParams(
158
+ table,
159
+ columnName
160
+ );
161
+ const suggestions = await getTypeaheadSuggestions(params);
162
+ if (suggestions) {
163
+ latestSuggestionsRef.current = toSuggestions(suggestions, {
164
+ suffix: ""
165
+ });
166
+ latestSuggestionsRef.current.forEach((suggestion) => {
167
+ suggestion.apply = (view, completion, from) => {
168
+ const annotation = new AnnotationType();
169
+ const cursorPos = from + completion.label.length + 1;
170
+ view.dispatch({
171
+ changes: { from, insert: completion.label },
172
+ selection: { anchor: cursorPos, head: cursorPos },
173
+ annotations: annotation.of(completion)
174
+ });
175
+ };
176
+ });
177
+ }
178
+ return latestSuggestionsRef.current || [];
179
+ }
180
+ break;
181
+ }
182
+ return [];
183
+ },
184
+ [columns, findColumn, getTypeaheadSuggestions, table]
185
+ );
186
+ const isPartialMatch = useCallback(
187
+ async (valueType, columnName, pattern) => {
188
+ const { current: latestSuggestions } = latestSuggestionsRef;
189
+ let maybe = false;
190
+ const suggestions = latestSuggestions || await getSuggestions(valueType, { columnName });
191
+ if (pattern && suggestions) {
192
+ for (const option of suggestions) {
193
+ if (option.label === pattern) {
194
+ return false;
195
+ } else if (option.label.startsWith(pattern)) {
196
+ maybe = true;
197
+ }
198
+ }
199
+ }
200
+ return maybe;
201
+ },
202
+ [getSuggestions]
203
+ );
204
+ return {
205
+ getSuggestions,
206
+ isPartialMatch
207
+ };
208
+ };
209
+
210
+ export { useColumnExpressionSuggestionProvider };
211
+ //# sourceMappingURL=useColumnExpressionSuggestionProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnExpressionSuggestionProvider.js","sources":["../../../../../../../packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.ts"],"sourcesContent":["import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: readonly ColumnDescriptor[],\n { functionName, operator }: ColumnOptions,\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (\n columns: readonly ColumnDescriptor[],\n options: ColumnOptions,\n) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${column.name}` : column.name,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor,\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: readonly ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns],\n );\n\n const latestSuggestionsRef = useRef<Completion[]>(undefined);\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix }),\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName),\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/,\n );\n const suggestions = await getTypeaheadSuggestions(params);\n if (suggestions) {\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number,\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n }\n return latestSuggestionsRef.current || [];\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table],\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string,\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions],\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { FormField, FormFieldLabel, Input, Switch } from '@salt-ds/core';
3
+ import { getTypeFormattingFromColumn } from '@vuu-ui/vuu-utils';
4
+ import { useState, useCallback } from 'react';
5
+
6
+ const classBase = "vuuFormattingSettings";
7
+ const BaseNumericFormattingSettings = ({
8
+ column,
9
+ onChangeFormatting: onChange
10
+ }) => {
11
+ const [formattingSettings, setFormattingSettings] = useState(getTypeFormattingFromColumn(column));
12
+ const handleInputKeyDown = useCallback(
13
+ (evt) => {
14
+ if (evt.key === "Enter" || evt.key === "Tab") {
15
+ onChange(formattingSettings);
16
+ }
17
+ },
18
+ [formattingSettings, onChange]
19
+ );
20
+ const handleChangeDecimals = useCallback(
21
+ (evt) => {
22
+ const { value } = evt.target;
23
+ const numericValue = value === "" ? void 0 : isNaN(parseInt(value)) ? void 0 : parseInt(value);
24
+ const newFormattingSettings = {
25
+ ...formattingSettings,
26
+ decimals: numericValue
27
+ };
28
+ setFormattingSettings(newFormattingSettings);
29
+ },
30
+ [formattingSettings]
31
+ );
32
+ const handleChangeAlignDecimals = useCallback(
33
+ (evt) => {
34
+ const { checked } = evt.target;
35
+ const newFormattingSettings = {
36
+ ...formattingSettings,
37
+ alignOnDecimals: checked
38
+ };
39
+ setFormattingSettings(newFormattingSettings);
40
+ onChange(newFormattingSettings);
41
+ },
42
+ [formattingSettings, onChange]
43
+ );
44
+ const handleChangeZeroPad = useCallback(
45
+ (evt) => {
46
+ const { checked } = evt.target;
47
+ const newFormattingSettings = {
48
+ ...formattingSettings,
49
+ zeroPad: checked
50
+ };
51
+ setFormattingSettings(newFormattingSettings);
52
+ onChange(newFormattingSettings);
53
+ },
54
+ [formattingSettings, onChange]
55
+ );
56
+ return /* @__PURE__ */ jsxs("div", { className: classBase, children: [
57
+ /* @__PURE__ */ jsxs(FormField, { "data-field": "decimals", children: [
58
+ /* @__PURE__ */ jsx(FormFieldLabel, { children: "Number of decimals" }),
59
+ /* @__PURE__ */ jsx(
60
+ Input,
61
+ {
62
+ bordered: true,
63
+ className: "vuuInput",
64
+ onChange: handleChangeDecimals,
65
+ onKeyDown: handleInputKeyDown,
66
+ value: formattingSettings.decimals ?? ""
67
+ }
68
+ )
69
+ ] }),
70
+ /* @__PURE__ */ jsxs(FormField, { labelPlacement: "left", children: [
71
+ /* @__PURE__ */ jsx(FormFieldLabel, { children: "Align on decimals" }),
72
+ /* @__PURE__ */ jsx(
73
+ Switch,
74
+ {
75
+ checked: formattingSettings.alignOnDecimals ?? false,
76
+ onChange: handleChangeAlignDecimals,
77
+ value: "align-decimals"
78
+ }
79
+ )
80
+ ] }),
81
+ /* @__PURE__ */ jsxs(FormField, { labelPlacement: "left", children: [
82
+ /* @__PURE__ */ jsx(FormFieldLabel, { children: "Zero pad decimals" }),
83
+ /* @__PURE__ */ jsx(
84
+ Switch,
85
+ {
86
+ checked: formattingSettings.zeroPad ?? false,
87
+ onChange: handleChangeZeroPad,
88
+ value: "zero-pad"
89
+ }
90
+ )
91
+ ] })
92
+ ] });
93
+ };
94
+
95
+ export { BaseNumericFormattingSettings };
96
+ //# sourceMappingURL=BaseNumericFormattingSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseNumericFormattingSettings.js","sources":["../../../../../../../packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.tsx"],"sourcesContent":["import { FormField, FormFieldLabel, Input, Switch } from \"@salt-ds/core\";\nimport {\n ColumnTypeFormatting,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getTypeFormattingFromColumn } from \"@vuu-ui/vuu-utils\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\n\nconst classBase = \"vuuFormattingSettings\";\n\nexport const BaseNumericFormattingSettings = ({\n column,\n onChangeFormatting: onChange,\n}: FormattingSettingsProps) => {\n const [formattingSettings, setFormattingSettings] =\n useState<ColumnTypeFormatting>(getTypeFormattingFromColumn(column));\n\n const handleInputKeyDown = useCallback(\n (evt: KeyboardEvent<HTMLInputElement>) => {\n if (evt.key === \"Enter\" || evt.key === \"Tab\") {\n onChange(formattingSettings);\n }\n },\n [formattingSettings, onChange],\n );\n\n const handleChangeDecimals = useCallback(\n (evt: SyntheticEvent) => {\n const { value } = evt.target as HTMLFormElement;\n const numericValue: number | undefined =\n value === \"\"\n ? undefined\n : isNaN(parseInt(value))\n ? undefined\n : parseInt(value);\n\n const newFormattingSettings = {\n ...formattingSettings,\n decimals: numericValue,\n };\n setFormattingSettings(newFormattingSettings);\n },\n [formattingSettings],\n );\n\n const handleChangeAlignDecimals = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const { checked } = evt.target as HTMLInputElement;\n const newFormattingSettings = {\n ...formattingSettings,\n alignOnDecimals: checked,\n };\n setFormattingSettings(newFormattingSettings);\n onChange(newFormattingSettings);\n },\n [formattingSettings, onChange],\n );\n\n const handleChangeZeroPad = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const { checked } = evt.target as HTMLInputElement;\n const newFormattingSettings = {\n ...formattingSettings,\n zeroPad: checked,\n };\n setFormattingSettings(newFormattingSettings);\n onChange(newFormattingSettings);\n },\n [formattingSettings, onChange],\n );\n\n return (\n <div className={classBase}>\n <FormField data-field=\"decimals\">\n <FormFieldLabel>Number of decimals</FormFieldLabel>\n <Input\n bordered\n className=\"vuuInput\"\n onChange={handleChangeDecimals}\n onKeyDown={handleInputKeyDown}\n value={formattingSettings.decimals ?? \"\"}\n />\n </FormField>\n\n <FormField labelPlacement=\"left\">\n <FormFieldLabel>Align on decimals</FormFieldLabel>\n <Switch\n checked={formattingSettings.alignOnDecimals ?? false}\n onChange={handleChangeAlignDecimals}\n value=\"align-decimals\"\n />\n </FormField>\n <FormField labelPlacement=\"left\">\n <FormFieldLabel>Zero pad decimals</FormFieldLabel>\n <Switch\n checked={formattingSettings.zeroPad ?? false}\n onChange={handleChangeZeroPad}\n value=\"zero-pad\"\n />\n </FormField>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { isTypeDescriptor, isColumnTypeRenderer, getCellRendererOptions, getConfigurationEditor } from '@vuu-ui/vuu-utils';
3
+ import { FormField, FormFieldLabel, Dropdown, Option } from '@salt-ds/core';
4
+ import cx from 'clsx';
5
+ import { useMemo, useCallback } from 'react';
6
+ import { BaseNumericFormattingSettings } from './BaseNumericFormattingSettings.js';
7
+ import { LongTypeFormattingSettings } from './LongTypeFormattingSettings.js';
8
+ import { DateTimeFormattingSettings } from './DateTimeFormattingSettings.js';
9
+
10
+ const classBase = "vuuColumnFormattingPanel";
11
+ const ColumnFormattingPanel = ({
12
+ availableRenderers,
13
+ className,
14
+ column,
15
+ onChangeFormatting,
16
+ onChangeColumnType,
17
+ onChangeRendering,
18
+ ...htmlAttributes
19
+ }) => {
20
+ const formattingSettingsComponent = useMemo(
21
+ () => getFormattingSettingsComponent({
22
+ column,
23
+ onChangeFormatting,
24
+ onChangeColumnType
25
+ }),
26
+ [column, onChangeColumnType, onChangeFormatting]
27
+ );
28
+ const ConfigEditor = useMemo(() => {
29
+ const { type } = column;
30
+ if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {
31
+ const cellRendererOptions = getCellRendererOptions(type.renderer.name);
32
+ return getConfigurationEditor(cellRendererOptions?.configEditor);
33
+ }
34
+ return void 0;
35
+ }, [column]);
36
+ const selectedCellRenderer = useMemo(() => {
37
+ const { type } = column;
38
+ const [defaultRenderer] = availableRenderers;
39
+ const rendererName = isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer) ? type.renderer.name : void 0;
40
+ const configuredRenderer = availableRenderers.find(
41
+ (renderer) => renderer.name === rendererName
42
+ );
43
+ return configuredRenderer ?? defaultRenderer;
44
+ }, [availableRenderers, column]);
45
+ const handleChangeRenderer = useCallback(
46
+ (_e, [cellRendererDescriptor]) => {
47
+ const renderProps = {
48
+ name: cellRendererDescriptor.name
49
+ };
50
+ onChangeRendering?.(renderProps);
51
+ },
52
+ [onChangeRendering]
53
+ );
54
+ const { serverDataType = "string" } = column;
55
+ return /* @__PURE__ */ jsxs("div", { ...htmlAttributes, className: `vuuColumnSettingsPanel-header`, children: [
56
+ /* @__PURE__ */ jsx("div", { children: "Formatting" }),
57
+ /* @__PURE__ */ jsxs(FormField, { children: [
58
+ /* @__PURE__ */ jsx(FormFieldLabel, { children: `Renderer (data type ${column.serverDataType})` }),
59
+ /* @__PURE__ */ jsx(
60
+ Dropdown,
61
+ {
62
+ bordered: true,
63
+ className: cx(`${classBase}-renderer`),
64
+ onSelectionChange: handleChangeRenderer,
65
+ selected: selectedCellRenderer ? [selectedCellRenderer] : [],
66
+ value: selectedCellRenderer?.label ?? selectedCellRenderer?.name,
67
+ children: availableRenderers.map((cellRenderer, i) => /* @__PURE__ */ jsx(Option, { value: cellRenderer, children: cellRenderer.label ?? cellRenderer.name }, i))
68
+ }
69
+ )
70
+ ] }),
71
+ /* @__PURE__ */ jsxs(
72
+ "div",
73
+ {
74
+ className: cx(classBase, className, `${classBase}-${serverDataType}`),
75
+ children: [
76
+ formattingSettingsComponent,
77
+ ConfigEditor ? /* @__PURE__ */ jsx(
78
+ ConfigEditor,
79
+ {
80
+ column,
81
+ onChangeRendering
82
+ }
83
+ ) : null
84
+ ]
85
+ }
86
+ )
87
+ ] });
88
+ };
89
+ function getFormattingSettingsComponent(props) {
90
+ const { column } = props;
91
+ switch (column.serverDataType) {
92
+ case "double":
93
+ case "scaleddecimal2":
94
+ case "scaleddecimal4":
95
+ case "scaleddecimal6":
96
+ case "scaleddecimal8":
97
+ case "int":
98
+ return /* @__PURE__ */ jsx(BaseNumericFormattingSettings, { ...props });
99
+ case "long":
100
+ return /* @__PURE__ */ jsx(LongTypeFormattingSettings, { ...props });
101
+ case "epochtimestamp":
102
+ return /* @__PURE__ */ jsx(DateTimeFormattingSettings, { ...props });
103
+ default:
104
+ return null;
105
+ }
106
+ }
107
+
108
+ export { ColumnFormattingPanel };
109
+ //# sourceMappingURL=ColumnFormattingPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnFormattingPanel.js","sources":["../../../../../../../packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\nimport { DateTimeFormattingSettings } from \"./DateTimeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType,\n }),\n [column, onChangeColumnType, onChangeFormatting],\n );\n\n const ConfigEditor = useMemo<\n React.FC<ConfigurationEditorProps> | undefined\n >(() => {\n const { type } = column;\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const cellRendererOptions = getCellRendererOptions(type.renderer.name);\n return getConfigurationEditor(cellRendererOptions?.configEditor);\n }\n return undefined;\n }, [column]);\n\n const selectedCellRenderer = useMemo(() => {\n const { type } = column;\n const [defaultRenderer] = availableRenderers;\n const rendererName =\n isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)\n ? type.renderer.name\n : undefined;\n const configuredRenderer = availableRenderers.find(\n (renderer) => renderer.name === rendererName,\n );\n return configuredRenderer ?? defaultRenderer;\n }, [availableRenderers, column]);\n\n const handleChangeRenderer = useCallback(\n (\n _e: SyntheticEvent,\n [cellRendererDescriptor]: CellRendererDescriptor[],\n ) => {\n const renderProps: ColumnTypeRendering = {\n name: cellRendererDescriptor.name,\n };\n onChangeRendering?.(renderProps);\n },\n [onChangeRendering],\n );\n\n const { serverDataType = \"string\" } = column;\n\n return (\n <div {...htmlAttributes} className={`vuuColumnSettingsPanel-header`}>\n <div>Formatting</div>\n\n <FormField>\n <FormFieldLabel>\n {`Renderer (data type ${column.serverDataType})`}\n </FormFieldLabel>\n <Dropdown<CellRendererDescriptor>\n bordered\n className={cx(`${classBase}-renderer`)}\n onSelectionChange={handleChangeRenderer}\n selected={selectedCellRenderer ? [selectedCellRenderer] : []}\n value={selectedCellRenderer?.label ?? selectedCellRenderer?.name}\n >\n {availableRenderers.map((cellRenderer, i) => (\n <Option key={i} value={cellRenderer}>\n {cellRenderer.label ?? cellRenderer.name}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n <div\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {formattingSettingsComponent}\n {ConfigEditor ? (\n <ConfigEditor\n column={column as ColumnDescriptorCustomRenderer}\n onChangeRendering={onChangeRendering}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nfunction getFormattingSettingsComponent(props: FormattingSettingsProps) {\n const { column } = props;\n\n switch (column.serverDataType) {\n case \"double\":\n case \"scaleddecimal2\":\n case \"scaleddecimal4\":\n case \"scaleddecimal6\":\n case \"scaleddecimal8\":\n case \"int\":\n return <BaseNumericFormattingSettings {...props} />;\n case \"long\":\n return <LongTypeFormattingSettings {...props} />;\n case \"epochtimestamp\":\n return <DateTimeFormattingSettings {...props} />;\n default:\n return null;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAqBA,MAAM,SAAY,GAAA,0BAAA;AAUX,MAAM,wBAAwB,CAAC;AAAA,EACpC,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,GAAG;AACL,CAAkC,KAAA;AAChC,EAAA,MAAM,2BAA8B,GAAA,OAAA;AAAA,IAClC,MACE,8BAA+B,CAAA;AAAA,MAC7B,MAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,CAAC,MAAQ,EAAA,kBAAA,EAAoB,kBAAkB;AAAA,GACjD;AAEA,EAAM,MAAA,YAAA,GAAe,QAEnB,MAAM;AACN,IAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AACjB,IAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,oBAAqB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AACjE,MAAA,MAAM,mBAAsB,GAAA,sBAAA,CAAuB,IAAK,CAAA,QAAA,CAAS,IAAI,CAAA;AACrE,MAAO,OAAA,sBAAA,CAAuB,qBAAqB,YAAY,CAAA;AAAA;AAEjE,IAAO,OAAA,KAAA,CAAA;AAAA,GACT,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAM,MAAA,oBAAA,GAAuB,QAAQ,MAAM;AACzC,IAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AACjB,IAAM,MAAA,CAAC,eAAe,CAAI,GAAA,kBAAA;AAC1B,IAAM,MAAA,YAAA,GACJ,gBAAiB,CAAA,IAAI,CAAK,IAAA,oBAAA,CAAqB,KAAK,QAAQ,CAAA,GACxD,IAAK,CAAA,QAAA,CAAS,IACd,GAAA,KAAA,CAAA;AACN,IAAA,MAAM,qBAAqB,kBAAmB,CAAA,IAAA;AAAA,MAC5C,CAAC,QAAa,KAAA,QAAA,CAAS,IAAS,KAAA;AAAA,KAClC;AACA,IAAA,OAAO,kBAAsB,IAAA,eAAA;AAAA,GAC5B,EAAA,CAAC,kBAAoB,EAAA,MAAM,CAAC,CAAA;AAE/B,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CACE,EAAA,EACA,CAAC,sBAAsB,CACpB,KAAA;AACH,MAAA,MAAM,WAAmC,GAAA;AAAA,QACvC,MAAM,sBAAuB,CAAA;AAAA,OAC/B;AACA,MAAA,iBAAA,GAAoB,WAAW,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAM,MAAA,EAAE,cAAiB,GAAA,QAAA,EAAa,GAAA,MAAA;AAEtC,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAK,GAAG,cAAA,EAAgB,WAAW,CAClC,6BAAA,CAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAI,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,yBAEd,SACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cACE,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,EAAuB,MAAO,CAAA,cAAc,CAC/C,CAAA,CAAA,EAAA,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,QAAQ,EAAA,IAAA;AAAA,UACR,SAAW,EAAA,EAAA,CAAG,CAAG,EAAA,SAAS,CAAW,SAAA,CAAA,CAAA;AAAA,UACrC,iBAAmB,EAAA,oBAAA;AAAA,UACnB,QAAU,EAAA,oBAAA,GAAuB,CAAC,oBAAoB,IAAI,EAAC;AAAA,UAC3D,KAAA,EAAO,oBAAsB,EAAA,KAAA,IAAS,oBAAsB,EAAA,IAAA;AAAA,UAE3D,QAAmB,EAAA,kBAAA,CAAA,GAAA,CAAI,CAAC,YAAA,EAAc,sBACpC,GAAA,CAAA,MAAA,EAAA,EAAe,KAAO,EAAA,YAAA,EACpB,QAAa,EAAA,YAAA,CAAA,KAAA,IAAS,YAAa,CAAA,IAAA,EAAA,EADzB,CAEb,CACD;AAAA;AAAA;AACH,KACF,EAAA,CAAA;AAAA,oBACA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAW,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,CAAA,EAAI,cAAc,CAAE,CAAA,CAAA;AAAA,QAEnE,QAAA,EAAA;AAAA,UAAA,2BAAA;AAAA,UACA,YACC,mBAAA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA;AAAA;AAAA,WAEA,GAAA;AAAA;AAAA;AAAA;AACN,GACF,EAAA,CAAA;AAEJ;AAEA,SAAS,+BAA+B,KAAgC,EAAA;AACtE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AAEnB,EAAA,QAAQ,OAAO,cAAgB;AAAA,IAC7B,KAAK,QAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAO,uBAAA,GAAA,CAAC,6BAA+B,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA;AAAA,IACnD,KAAK,MAAA;AACH,MAAO,uBAAA,GAAA,CAAC,0BAA4B,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA;AAAA,IAChD,KAAK,gBAAA;AACH,MAAO,uBAAA,GAAA,CAAC,0BAA4B,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA;AAAA,IAChD;AACE,MAAO,OAAA,IAAA;AAAA;AAEb;;;;"}