@vuu-ui/vuu-table-extras 3.0.0-beta.3 → 3.1.0-beta.1

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 (453) hide show
  1. package/package.json +22 -18
  2. package/src/calculated-column/CalculatedColumnPanel.js +95 -0
  3. package/src/calculated-column/useCalculatedColumnPanel.js +60 -0
  4. package/src/calculated-column/useEditCalculatedColumn.js +104 -0
  5. package/src/cell-edit-validators/CaseValidator.js +21 -0
  6. package/src/cell-edit-validators/PatternValidator.js +23 -0
  7. package/src/cell-edit-validators/index.js +2 -0
  8. package/src/cell-renderers/background-cell/BackgroundCell.css.js +103 -0
  9. package/src/cell-renderers/background-cell/BackgroundCell.js +76 -0
  10. package/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +9 -0
  11. package/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +71 -0
  12. package/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +187 -0
  13. package/src/cell-renderers/background-cell/index.js +2 -0
  14. package/src/cell-renderers/background-cell/useDirection.js +25 -0
  15. package/src/cell-renderers/button-cell/IconButtonCell.css.js +23 -0
  16. package/src/cell-renderers/button-cell/IconButtonCell.js +33 -0
  17. package/src/cell-renderers/dropdown-cell/DropdownCell.css.js +36 -0
  18. package/src/cell-renderers/dropdown-cell/DropdownCell.js +87 -0
  19. package/src/cell-renderers/dropdown-cell/index.js +1 -0
  20. package/src/cell-renderers/index.js +6 -0
  21. package/src/cell-renderers/lookup-cell/LookupCell.js +15 -0
  22. package/src/cell-renderers/lookup-cell/index.js +1 -0
  23. package/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +31 -0
  24. package/src/cell-renderers/pct-progress-cell/PctProgressCell.js +49 -0
  25. package/src/cell-renderers/pct-progress-cell/index.js +1 -0
  26. package/src/cell-renderers/progress-cell/ProgressCell.css.js +43 -0
  27. package/src/cell-renderers/progress-cell/ProgressCell.js +74 -0
  28. package/src/cell-renderers/progress-cell/index.js +1 -0
  29. package/src/column-expression-input/ColumnExpressionInput.css.js +94 -0
  30. package/src/column-expression-input/ColumnExpressionInput.js +28 -0
  31. package/src/column-expression-input/column-function-descriptors.js +281 -0
  32. package/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +18 -0
  33. package/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +381 -0
  34. package/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +56 -0
  35. package/src/column-expression-input/column-language-parser/index.js +3 -0
  36. package/src/column-expression-input/functionDocInfo.js +24 -0
  37. package/src/column-expression-input/highlighting.js +18 -0
  38. package/src/column-expression-input/index.js +4 -0
  39. package/src/column-expression-input/theme.js +57 -0
  40. package/src/column-expression-input/useColumnAutoComplete.js +307 -0
  41. package/src/column-expression-input/useColumnExpressionEditor.js +133 -0
  42. package/src/column-expression-input/useColumnExpressionSuggestionProvider.js +211 -0
  43. package/src/column-formatting-settings/BaseNumericFormattingSettings.js +96 -0
  44. package/src/column-formatting-settings/ColumnFormattingPanel.js +112 -0
  45. package/src/column-formatting-settings/DateTimeFormattingSettings.js +116 -0
  46. package/src/column-formatting-settings/LongTypeFormattingSettings.css.js +11 -0
  47. package/src/column-formatting-settings/LongTypeFormattingSettings.js +54 -0
  48. package/src/column-formatting-settings/index.js +3 -0
  49. package/src/column-menu/ColumnMenu.css.js +25 -0
  50. package/src/column-menu/ColumnMenu.js +69 -0
  51. package/src/column-menu/column-action-types.js +0 -0
  52. package/src/column-menu/column-menu-utils.js +318 -0
  53. package/src/column-menu/useColumnActions.js +77 -0
  54. package/src/column-picker/ColumnModel.js +113 -0
  55. package/src/column-picker/ColumnPicker.css.js +96 -0
  56. package/src/column-picker/ColumnPicker.js +204 -0
  57. package/src/column-picker/ColumnPickerAction.js +24 -0
  58. package/src/column-picker/useColumnPicker.js +42 -0
  59. package/src/column-picker/useTableColumnPicker.js +27 -0
  60. package/src/column-picker/useTableColumnPickerDeprecated.js +87 -0
  61. package/src/column-settings-panel/ColumnNameLabel.css.js +18 -0
  62. package/src/column-settings-panel/ColumnNameLabel.js +54 -0
  63. package/src/column-settings-panel/ColumnSettingsPanel.css.js +70 -0
  64. package/src/column-settings-panel/ColumnSettingsPanel.js +173 -0
  65. package/src/column-settings-panel/useColumnSettings.js +205 -0
  66. package/src/csv-upload/CsvUpload.css.js +28 -0
  67. package/src/csv-upload/CsvUpload.js +105 -0
  68. package/src/csv-upload/data-upload-preview/DataUploadPreview.css.js +15 -0
  69. package/src/csv-upload/data-upload-preview/DataUploadPreview.js +113 -0
  70. package/src/csv-upload/data-upload-preview/useDataUploadPreview.js +63 -0
  71. package/src/csv-upload/index.js +7 -0
  72. package/{esm/packages/vuu-table-extras/src → src}/csv-upload/parse/csv-constants.js +0 -2
  73. package/src/csv-upload/parse/csv-errors.js +54 -0
  74. package/src/csv-upload/parse/csv-parse.js +79 -0
  75. package/src/csv-upload/parse/csv-schema-validation.js +45 -0
  76. package/src/csv-upload/parse/csv-upload-utils.js +59 -0
  77. package/src/csv-upload/parse/index.js +5 -0
  78. package/src/csv-upload/useCsvUpload.js +305 -0
  79. package/src/datasource-stats/DatasourceStats.css.js +56 -0
  80. package/src/datasource-stats/DatasourceStats.js +89 -0
  81. package/src/datasource-stats/useDatasourceStats.js +51 -0
  82. package/src/freeze-control/FreezeControl.css.js +108 -0
  83. package/src/freeze-control/FreezeControl.js +96 -0
  84. package/src/freeze-control/FrozenBanner.css.js +16 -0
  85. package/src/freeze-control/FrozenBanner.js +48 -0
  86. package/src/freeze-control/freezeControlBadge.js +9 -0
  87. package/src/freeze-control/useFreezeControl.js +68 -0
  88. package/src/index.js +23 -0
  89. package/src/inline-add-row/InlineAddRow.css.js +16 -0
  90. package/src/inline-add-row/InlineAddRow.js +34 -0
  91. package/src/inline-add-row/index.js +2 -0
  92. package/src/inline-add-row/useInlineAddRow.js +120 -0
  93. package/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +23 -0
  94. package/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +99 -0
  95. package/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +28 -0
  96. package/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +29 -0
  97. package/src/table-footer/TableFooter.css.js +31 -0
  98. package/src/table-footer/TableFooter.js +33 -0
  99. package/src/table-provider/TableProvider.js +33 -0
  100. package/src/table-settings-panel/TableSettingsPanel.css.js +70 -0
  101. package/src/table-settings-panel/TableSettingsPanel.js +128 -0
  102. package/src/table-settings-panel/useTableSettings.js +50 -0
  103. package/cjs/node_modules/csv-parse/dist/esm/sync.js +0 -3978
  104. package/cjs/node_modules/csv-parse/dist/esm/sync.js.map +0 -1
  105. package/cjs/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js +0 -85
  106. package/cjs/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js.map +0 -1
  107. package/cjs/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js +0 -71
  108. package/cjs/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js.map +0 -1
  109. package/cjs/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js +0 -138
  110. package/cjs/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js.map +0 -1
  111. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js +0 -25
  112. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js.map +0 -1
  113. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js +0 -31
  114. package/cjs/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js.map +0 -1
  115. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js +0 -6
  116. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js.map +0 -1
  117. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js +0 -81
  118. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js.map +0 -1
  119. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +0 -6
  120. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +0 -1
  121. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +0 -67
  122. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +0 -1
  123. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +0 -6
  124. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +0 -1
  125. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js +0 -20
  126. package/cjs/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js.map +0 -1
  127. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js +0 -6
  128. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js.map +0 -1
  129. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js +0 -40
  130. package/cjs/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js.map +0 -1
  131. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js +0 -6
  132. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js.map +0 -1
  133. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js +0 -106
  134. package/cjs/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js.map +0 -1
  135. package/cjs/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js +0 -21
  136. package/cjs/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js.map +0 -1
  137. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +0 -6
  138. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +0 -1
  139. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js +0 -62
  140. package/cjs/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js.map +0 -1
  141. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js +0 -6
  142. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js.map +0 -1
  143. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js +0 -69
  144. package/cjs/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js.map +0 -1
  145. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js +0 -6
  146. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js.map +0 -1
  147. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js +0 -39
  148. package/cjs/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js.map +0 -1
  149. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js +0 -307
  150. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js.map +0 -1
  151. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +0 -28
  152. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +0 -1
  153. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +0 -465
  154. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +0 -1
  155. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +0 -61
  156. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +0 -1
  157. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js +0 -21
  158. package/cjs/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js.map +0 -1
  159. package/cjs/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js +0 -39
  160. package/cjs/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js.map +0 -1
  161. package/cjs/packages/vuu-table-extras/src/column-expression-input/highlighting.js +0 -16
  162. package/cjs/packages/vuu-table-extras/src/column-expression-input/highlighting.js.map +0 -1
  163. package/cjs/packages/vuu-table-extras/src/column-expression-input/theme.js +0 -63
  164. package/cjs/packages/vuu-table-extras/src/column-expression-input/theme.js.map +0 -1
  165. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js +0 -358
  166. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js.map +0 -1
  167. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js +0 -131
  168. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js.map +0 -1
  169. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js +0 -213
  170. package/cjs/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js.map +0 -1
  171. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js +0 -98
  172. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js.map +0 -1
  173. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js +0 -111
  174. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js.map +0 -1
  175. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js +0 -102
  176. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js.map +0 -1
  177. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js +0 -6
  178. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js.map +0 -1
  179. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js +0 -48
  180. package/cjs/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js.map +0 -1
  181. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js +0 -6
  182. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js.map +0 -1
  183. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.js +0 -107
  184. package/cjs/packages/vuu-table-extras/src/column-menu/ColumnMenu.js.map +0 -1
  185. package/cjs/packages/vuu-table-extras/src/column-menu/column-menu-utils.js +0 -459
  186. package/cjs/packages/vuu-table-extras/src/column-menu/column-menu-utils.js.map +0 -1
  187. package/cjs/packages/vuu-table-extras/src/column-menu/useColumnActions.js +0 -68
  188. package/cjs/packages/vuu-table-extras/src/column-menu/useColumnActions.js.map +0 -1
  189. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnModel.js +0 -177
  190. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnModel.js.map +0 -1
  191. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js +0 -6
  192. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js.map +0 -1
  193. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.js +0 -252
  194. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPicker.js.map +0 -1
  195. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js +0 -34
  196. package/cjs/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js.map +0 -1
  197. package/cjs/packages/vuu-table-extras/src/column-picker/useColumnPicker.js +0 -55
  198. package/cjs/packages/vuu-table-extras/src/column-picker/useColumnPicker.js.map +0 -1
  199. package/cjs/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js +0 -35
  200. package/cjs/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js.map +0 -1
  201. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js +0 -6
  202. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js.map +0 -1
  203. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js +0 -45
  204. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js.map +0 -1
  205. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js +0 -6
  206. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js.map +0 -1
  207. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js +0 -161
  208. package/cjs/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js.map +0 -1
  209. package/cjs/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js +0 -203
  210. package/cjs/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js.map +0 -1
  211. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js +0 -6
  212. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js.map +0 -1
  213. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.js +0 -109
  214. package/cjs/packages/vuu-table-extras/src/csv-upload/CsvUpload.js.map +0 -1
  215. package/cjs/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.css.js +0 -6
  216. package/cjs/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.css.js.map +0 -1
  217. package/cjs/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.js +0 -118
  218. package/cjs/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.js.map +0 -1
  219. package/cjs/packages/vuu-table-extras/src/csv-upload/data-upload-preview/useDataUploadPreview.js +0 -76
  220. package/cjs/packages/vuu-table-extras/src/csv-upload/data-upload-preview/useDataUploadPreview.js.map +0 -1
  221. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-constants.js +0 -8
  222. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-constants.js.map +0 -1
  223. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js +0 -64
  224. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js.map +0 -1
  225. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js +0 -199
  226. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js.map +0 -1
  227. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js +0 -100
  228. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js.map +0 -1
  229. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js +0 -43
  230. package/cjs/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js.map +0 -1
  231. package/cjs/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js +0 -391
  232. package/cjs/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js.map +0 -1
  233. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js +0 -6
  234. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js.map +0 -1
  235. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js +0 -76
  236. package/cjs/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js.map +0 -1
  237. package/cjs/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js +0 -66
  238. package/cjs/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js.map +0 -1
  239. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js +0 -6
  240. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js.map +0 -1
  241. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.js +0 -106
  242. package/cjs/packages/vuu-table-extras/src/freeze-control/FreezeControl.js.map +0 -1
  243. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js +0 -6
  244. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js.map +0 -1
  245. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js +0 -55
  246. package/cjs/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js.map +0 -1
  247. package/cjs/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js +0 -10
  248. package/cjs/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js.map +0 -1
  249. package/cjs/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js +0 -68
  250. package/cjs/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js.map +0 -1
  251. package/cjs/packages/vuu-table-extras/src/index.js +0 -106
  252. package/cjs/packages/vuu-table-extras/src/index.js.map +0 -1
  253. package/cjs/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.css.js +0 -6
  254. package/cjs/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.css.js.map +0 -1
  255. package/cjs/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.js +0 -44
  256. package/cjs/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.js.map +0 -1
  257. package/cjs/packages/vuu-table-extras/src/inline-add-row/useInlineAddRow.js +0 -137
  258. package/cjs/packages/vuu-table-extras/src/inline-add-row/useInlineAddRow.js.map +0 -1
  259. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +0 -6
  260. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js.map +0 -1
  261. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +0 -90
  262. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js.map +0 -1
  263. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +0 -44
  264. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js.map +0 -1
  265. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +0 -49
  266. package/cjs/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js.map +0 -1
  267. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.css.js +0 -6
  268. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.css.js.map +0 -1
  269. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.js +0 -37
  270. package/cjs/packages/vuu-table-extras/src/table-footer/TableFooter.js.map +0 -1
  271. package/cjs/packages/vuu-table-extras/src/table-provider/TableProvider.js +0 -61
  272. package/cjs/packages/vuu-table-extras/src/table-provider/TableProvider.js.map +0 -1
  273. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js +0 -6
  274. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js.map +0 -1
  275. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js +0 -116
  276. package/cjs/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js.map +0 -1
  277. package/cjs/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js +0 -60
  278. package/cjs/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js.map +0 -1
  279. package/esm/node_modules/csv-parse/dist/esm/sync.js +0 -3974
  280. package/esm/node_modules/csv-parse/dist/esm/sync.js.map +0 -1
  281. package/esm/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js +0 -83
  282. package/esm/packages/vuu-table-extras/src/calculated-column/CalculatedColumnPanel.js.map +0 -1
  283. package/esm/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js +0 -69
  284. package/esm/packages/vuu-table-extras/src/calculated-column/useCalculatedColumnPanel.js.map +0 -1
  285. package/esm/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js +0 -136
  286. package/esm/packages/vuu-table-extras/src/calculated-column/useEditCalculatedColumn.js.map +0 -1
  287. package/esm/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js +0 -23
  288. package/esm/packages/vuu-table-extras/src/cell-edit-validators/CaseValidator.js.map +0 -1
  289. package/esm/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js +0 -29
  290. package/esm/packages/vuu-table-extras/src/cell-edit-validators/PatternValidator.js.map +0 -1
  291. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js +0 -4
  292. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.css.js.map +0 -1
  293. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js +0 -79
  294. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCell.js.map +0 -1
  295. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +0 -4
  296. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +0 -1
  297. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +0 -65
  298. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +0 -1
  299. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +0 -4
  300. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +0 -1
  301. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js +0 -18
  302. package/esm/packages/vuu-table-extras/src/cell-renderers/background-cell/useDirection.js.map +0 -1
  303. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js +0 -4
  304. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.css.js.map +0 -1
  305. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js +0 -38
  306. package/esm/packages/vuu-table-extras/src/cell-renderers/button-cell/IconButtonCell.js.map +0 -1
  307. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js +0 -4
  308. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.css.js.map +0 -1
  309. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js +0 -104
  310. package/esm/packages/vuu-table-extras/src/cell-renderers/dropdown-cell/DropdownCell.js.map +0 -1
  311. package/esm/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js +0 -19
  312. package/esm/packages/vuu-table-extras/src/cell-renderers/lookup-cell/LookupCell.js.map +0 -1
  313. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +0 -4
  314. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +0 -1
  315. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js +0 -60
  316. package/esm/packages/vuu-table-extras/src/cell-renderers/pct-progress-cell/PctProgressCell.js.map +0 -1
  317. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js +0 -4
  318. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.css.js.map +0 -1
  319. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js +0 -67
  320. package/esm/packages/vuu-table-extras/src/cell-renderers/progress-cell/ProgressCell.js.map +0 -1
  321. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js +0 -4
  322. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.css.js.map +0 -1
  323. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js +0 -37
  324. package/esm/packages/vuu-table-extras/src/column-expression-input/ColumnExpressionInput.js.map +0 -1
  325. package/esm/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js +0 -305
  326. package/esm/packages/vuu-table-extras/src/column-expression-input/column-function-descriptors.js.map +0 -1
  327. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +0 -26
  328. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +0 -1
  329. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +0 -463
  330. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +0 -1
  331. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +0 -56
  332. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +0 -1
  333. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js +0 -19
  334. package/esm/packages/vuu-table-extras/src/column-expression-input/column-language-parser/generated/column-parser.js.map +0 -1
  335. package/esm/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js +0 -37
  336. package/esm/packages/vuu-table-extras/src/column-expression-input/functionDocInfo.js.map +0 -1
  337. package/esm/packages/vuu-table-extras/src/column-expression-input/highlighting.js +0 -14
  338. package/esm/packages/vuu-table-extras/src/column-expression-input/highlighting.js.map +0 -1
  339. package/esm/packages/vuu-table-extras/src/column-expression-input/theme.js +0 -61
  340. package/esm/packages/vuu-table-extras/src/column-expression-input/theme.js.map +0 -1
  341. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js +0 -356
  342. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnAutoComplete.js.map +0 -1
  343. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js +0 -129
  344. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionEditor.js.map +0 -1
  345. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js +0 -211
  346. package/esm/packages/vuu-table-extras/src/column-expression-input/useColumnExpressionSuggestionProvider.js.map +0 -1
  347. package/esm/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js +0 -96
  348. package/esm/packages/vuu-table-extras/src/column-formatting-settings/BaseNumericFormattingSettings.js.map +0 -1
  349. package/esm/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js +0 -109
  350. package/esm/packages/vuu-table-extras/src/column-formatting-settings/ColumnFormattingPanel.js.map +0 -1
  351. package/esm/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js +0 -100
  352. package/esm/packages/vuu-table-extras/src/column-formatting-settings/DateTimeFormattingSettings.js.map +0 -1
  353. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js +0 -4
  354. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.css.js.map +0 -1
  355. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js +0 -46
  356. package/esm/packages/vuu-table-extras/src/column-formatting-settings/LongTypeFormattingSettings.js.map +0 -1
  357. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js +0 -4
  358. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.css.js.map +0 -1
  359. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.js +0 -105
  360. package/esm/packages/vuu-table-extras/src/column-menu/ColumnMenu.js.map +0 -1
  361. package/esm/packages/vuu-table-extras/src/column-menu/column-menu-utils.js +0 -451
  362. package/esm/packages/vuu-table-extras/src/column-menu/column-menu-utils.js.map +0 -1
  363. package/esm/packages/vuu-table-extras/src/column-menu/useColumnActions.js +0 -66
  364. package/esm/packages/vuu-table-extras/src/column-menu/useColumnActions.js.map +0 -1
  365. package/esm/packages/vuu-table-extras/src/column-picker/ColumnModel.js +0 -170
  366. package/esm/packages/vuu-table-extras/src/column-picker/ColumnModel.js.map +0 -1
  367. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js +0 -4
  368. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.css.js.map +0 -1
  369. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.js +0 -249
  370. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPicker.js.map +0 -1
  371. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js +0 -32
  372. package/esm/packages/vuu-table-extras/src/column-picker/ColumnPickerAction.js.map +0 -1
  373. package/esm/packages/vuu-table-extras/src/column-picker/useColumnPicker.js +0 -53
  374. package/esm/packages/vuu-table-extras/src/column-picker/useColumnPicker.js.map +0 -1
  375. package/esm/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js +0 -33
  376. package/esm/packages/vuu-table-extras/src/column-picker/useTableColumnPicker.js.map +0 -1
  377. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js +0 -4
  378. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.css.js.map +0 -1
  379. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js +0 -43
  380. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnNameLabel.js.map +0 -1
  381. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js +0 -4
  382. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.css.js.map +0 -1
  383. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js +0 -159
  384. package/esm/packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.js.map +0 -1
  385. package/esm/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js +0 -201
  386. package/esm/packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.js.map +0 -1
  387. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js +0 -4
  388. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.css.js.map +0 -1
  389. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.js +0 -107
  390. package/esm/packages/vuu-table-extras/src/csv-upload/CsvUpload.js.map +0 -1
  391. package/esm/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.css.js +0 -4
  392. package/esm/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.css.js.map +0 -1
  393. package/esm/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.js +0 -116
  394. package/esm/packages/vuu-table-extras/src/csv-upload/data-upload-preview/DataUploadPreview.js.map +0 -1
  395. package/esm/packages/vuu-table-extras/src/csv-upload/data-upload-preview/useDataUploadPreview.js +0 -73
  396. package/esm/packages/vuu-table-extras/src/csv-upload/data-upload-preview/useDataUploadPreview.js.map +0 -1
  397. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-constants.js.map +0 -1
  398. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js +0 -57
  399. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-errors.js.map +0 -1
  400. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js +0 -196
  401. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-parse.js.map +0 -1
  402. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js +0 -97
  403. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-schema-validation.js.map +0 -1
  404. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js +0 -35
  405. package/esm/packages/vuu-table-extras/src/csv-upload/parse/csv-upload-utils.js.map +0 -1
  406. package/esm/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js +0 -389
  407. package/esm/packages/vuu-table-extras/src/csv-upload/useCsvUpload.js.map +0 -1
  408. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js +0 -4
  409. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.css.js.map +0 -1
  410. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js +0 -74
  411. package/esm/packages/vuu-table-extras/src/datasource-stats/DatasourceStats.js.map +0 -1
  412. package/esm/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js +0 -64
  413. package/esm/packages/vuu-table-extras/src/datasource-stats/useDatasourceStats.js.map +0 -1
  414. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js +0 -4
  415. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.css.js.map +0 -1
  416. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.js +0 -104
  417. package/esm/packages/vuu-table-extras/src/freeze-control/FreezeControl.js.map +0 -1
  418. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js +0 -4
  419. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.css.js.map +0 -1
  420. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js +0 -53
  421. package/esm/packages/vuu-table-extras/src/freeze-control/FrozenBanner.js.map +0 -1
  422. package/esm/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js +0 -8
  423. package/esm/packages/vuu-table-extras/src/freeze-control/freezeControlBadge.js.map +0 -1
  424. package/esm/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js +0 -66
  425. package/esm/packages/vuu-table-extras/src/freeze-control/useFreezeControl.js.map +0 -1
  426. package/esm/packages/vuu-table-extras/src/index.js +0 -45
  427. package/esm/packages/vuu-table-extras/src/index.js.map +0 -1
  428. package/esm/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.css.js +0 -4
  429. package/esm/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.css.js.map +0 -1
  430. package/esm/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.js +0 -42
  431. package/esm/packages/vuu-table-extras/src/inline-add-row/InlineAddRow.js.map +0 -1
  432. package/esm/packages/vuu-table-extras/src/inline-add-row/useInlineAddRow.js +0 -135
  433. package/esm/packages/vuu-table-extras/src/inline-add-row/useInlineAddRow.js.map +0 -1
  434. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +0 -4
  435. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js.map +0 -1
  436. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +0 -88
  437. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.js.map +0 -1
  438. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +0 -42
  439. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableSettingsAction.js.map +0 -1
  440. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +0 -47
  441. package/esm/packages/vuu-table-extras/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js.map +0 -1
  442. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.css.js +0 -4
  443. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.css.js.map +0 -1
  444. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.js +0 -34
  445. package/esm/packages/vuu-table-extras/src/table-footer/TableFooter.js.map +0 -1
  446. package/esm/packages/vuu-table-extras/src/table-provider/TableProvider.js +0 -56
  447. package/esm/packages/vuu-table-extras/src/table-provider/TableProvider.js.map +0 -1
  448. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js +0 -4
  449. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.css.js.map +0 -1
  450. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js +0 -112
  451. package/esm/packages/vuu-table-extras/src/table-settings-panel/TableSettingsPanel.js.map +0 -1
  452. package/esm/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js +0 -58
  453. package/esm/packages/vuu-table-extras/src/table-settings-panel/useTableSettings.js.map +0 -1
@@ -0,0 +1,63 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ const getSessionDataSource = (editSession)=>{
3
+ const dataSource = editSession.sessionDataSource;
4
+ if (!dataSource) throw new Error("[DataUploadPreview] requires an active edit session");
5
+ return dataSource;
6
+ };
7
+ const useDataUploadPreview = ({ dataSource, editSession, onClose })=>{
8
+ const [editState, setEditState] = useState(editSession.editState);
9
+ const [lifecycle, setLifecycle] = useState(editSession.lifecycle);
10
+ const [selectionCount, setSelectionCount] = useState(0);
11
+ const [sessionError, setSessionError] = useState();
12
+ const endSession = useCallback(async (save, force = false)=>{
13
+ try {
14
+ await editSession.end(save, force);
15
+ onClose();
16
+ } catch (error) {
17
+ setSessionError(error instanceof Error ? error.message : "Unable to end edit session");
18
+ }
19
+ }, [
20
+ editSession,
21
+ onClose
22
+ ]);
23
+ const onCancel = useCallback(()=>endSession(false), [
24
+ endSession
25
+ ]);
26
+ const onDelete = useCallback(()=>editSession.deleteSelectedRows(), [
27
+ editSession
28
+ ]);
29
+ const onSave = useCallback((force = false)=>endSession(true, force), [
30
+ endSession
31
+ ]);
32
+ useEffect(()=>{
33
+ const handleEditState = (nextEditState)=>{
34
+ setEditState(nextEditState);
35
+ };
36
+ const handleLifecycle = (nextLifecycle)=>{
37
+ setLifecycle(nextLifecycle);
38
+ };
39
+ editSession.on("editState", handleEditState);
40
+ editSession.on("lifecycle", handleLifecycle);
41
+ dataSource.on("row-selection", setSelectionCount);
42
+ return ()=>{
43
+ editSession.removeListener("editState", handleEditState);
44
+ editSession.removeListener("lifecycle", handleLifecycle);
45
+ dataSource.removeListener("row-selection", setSelectionCount);
46
+ };
47
+ }, [
48
+ dataSource,
49
+ editSession
50
+ ]);
51
+ const canCancel = "active" === lifecycle.status || "error" === lifecycle.status && "end" === lifecycle.operation;
52
+ const canSave = canCancel && ("dirty" === editState || "stale" === editState) && 0 === editSession.invalidCount;
53
+ return {
54
+ canCancel,
55
+ canSave,
56
+ hasSelection: selectionCount > 0,
57
+ onCancel,
58
+ onDelete,
59
+ onSave,
60
+ sessionError
61
+ };
62
+ };
63
+ export { getSessionDataSource, useDataUploadPreview };
@@ -0,0 +1,7 @@
1
+ export { CsvUpload } from "./CsvUpload.js";
2
+ export { useCsvUpload } from "./useCsvUpload.js";
3
+ export { DataUploadPreview } from "./data-upload-preview/DataUploadPreview.js";
4
+ export { validateCsvAgainstSchema } from "./parse/csv-schema-validation.js";
5
+ export { parseCsv } from "./parse/csv-parse.js";
6
+ export { CsvParseErrorEnum, CsvValidationErrorEnum } from "./parse/csv-errors.js";
7
+ export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER } from "./parse/csv-constants.js";
@@ -1,5 +1,3 @@
1
1
  const CSV_HEADER_ROW_NUMBER = 1;
2
2
  const CSV_FIRST_DATA_ROW_NUMBER = 2;
3
-
4
3
  export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER };
5
- //# sourceMappingURL=csv-constants.js.map
@@ -0,0 +1,54 @@
1
+ import { CSV_HEADER_ROW_NUMBER } from "./csv-constants.js";
2
+ var csv_errors_CsvParseErrorEnum = /*#__PURE__*/ function(CsvParseErrorEnum) {
3
+ CsvParseErrorEnum["EMPTY_FILE"] = "EMPTY_FILE";
4
+ CsvParseErrorEnum["INVALID_SEPARATOR"] = "INVALID_SEPARATOR";
5
+ CsvParseErrorEnum["INVALID_FORMAT"] = "INVALID_FORMAT";
6
+ CsvParseErrorEnum["UNQUOTED_VALUE"] = "UNQUOTED_VALUE";
7
+ CsvParseErrorEnum["EMPTY_HEADER_COLUMN"] = "EMPTY_HEADER_COLUMN";
8
+ CsvParseErrorEnum["DUPLICATE_HEADER_COLUMN"] = "DUPLICATE_HEADER_COLUMN";
9
+ CsvParseErrorEnum["ROW_COLUMN_COUNT_MISMATCH"] = "ROW_COLUMN_COUNT_MISMATCH";
10
+ return CsvParseErrorEnum;
11
+ }({});
12
+ var csv_errors_CsvValidationErrorEnum = /*#__PURE__*/ function(CsvValidationErrorEnum) {
13
+ CsvValidationErrorEnum["MISSING_KEY_COLUMN"] = "MISSING_KEY_COLUMN";
14
+ CsvValidationErrorEnum["UNKNOWN_COLUMN"] = "UNKNOWN_COLUMN";
15
+ CsvValidationErrorEnum["MAX_ROWS_EXCEEDED"] = "MAX_ROWS_EXCEEDED";
16
+ CsvValidationErrorEnum["EMPTY_NON_STRING_VALUE"] = "EMPTY_NON_STRING_VALUE";
17
+ CsvValidationErrorEnum["TYPE_MISMATCH"] = "TYPE_MISMATCH";
18
+ return CsvValidationErrorEnum;
19
+ }({});
20
+ const createCsvErrorState = ()=>({
21
+ errorMap: {
22
+ rowErrors: {},
23
+ fileErrors: {}
24
+ },
25
+ errors: []
26
+ });
27
+ const addCsvFileError = (state, columnName, error, message, value = "")=>{
28
+ const existing = state.errorMap.fileErrors[columnName] ?? [];
29
+ existing.push(error);
30
+ state.errorMap.fileErrors[columnName] = existing;
31
+ state.errors.push({
32
+ rowNum: CSV_HEADER_ROW_NUMBER,
33
+ column: columnName,
34
+ value,
35
+ message,
36
+ errorEnum: error
37
+ });
38
+ };
39
+ const addCsvRowError = (state, rowNum, columnName, error, message, value = "")=>{
40
+ const rowErrors = state.errorMap.rowErrors[rowNum] ?? {};
41
+ const existing = rowErrors[columnName] ?? [];
42
+ existing.push(error);
43
+ rowErrors[columnName] = existing;
44
+ state.errorMap.rowErrors[rowNum] = rowErrors;
45
+ state.errors.push({
46
+ rowNum,
47
+ column: columnName,
48
+ value,
49
+ message,
50
+ errorEnum: error
51
+ });
52
+ };
53
+ const hasCsvErrors = (errorMap)=>Object.keys(errorMap.fileErrors).length > 0 || Object.keys(errorMap.rowErrors).length > 0;
54
+ export { addCsvFileError, addCsvRowError, createCsvErrorState, csv_errors_CsvParseErrorEnum as CsvParseErrorEnum, csv_errors_CsvValidationErrorEnum as CsvValidationErrorEnum, hasCsvErrors };
@@ -0,0 +1,79 @@
1
+ import { parse } from "csv-parse/browser/esm/sync";
2
+ import { CsvParseErrorEnum, addCsvFileError, addCsvRowError, createCsvErrorState, hasCsvErrors } from "./csv-errors.js";
3
+ import { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER } from "./csv-constants.js";
4
+ const normaliseLineEndings = (input)=>input.replace(/^\uFEFF/, "").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
5
+ const quotedCsvLinePattern = /^\s*"(?:""|[^"])*"\s*(,\s*"(?:""|[^"])*"\s*)*$/;
6
+ const withError = (message, errorMap, errors, header = [], rows = [])=>({
7
+ error: {
8
+ errorMap,
9
+ errors,
10
+ message
11
+ },
12
+ header,
13
+ rows
14
+ });
15
+ const parseCsv = (csvText, options)=>{
16
+ const errorState = createCsvErrorState();
17
+ const text = normaliseLineEndings(csvText);
18
+ if (0 === text.trim().length) {
19
+ addCsvFileError(errorState, "*", CsvParseErrorEnum.EMPTY_FILE, "CSV file is empty.");
20
+ return withError("CSV file is empty.", errorState.errorMap, errorState.errors);
21
+ }
22
+ const allLines = text.split("\n");
23
+ const nonEmptyLines = allLines.filter((line)=>line.trim().length > 0);
24
+ if (0 === nonEmptyLines.length) {
25
+ addCsvFileError(errorState, "*", CsvParseErrorEnum.EMPTY_FILE, "CSV file is empty.");
26
+ return withError("CSV file is empty.", errorState.errorMap, errorState.errors);
27
+ }
28
+ const firstLine = nonEmptyLines[0];
29
+ if (firstLine.includes(";") && !firstLine.includes(",")) {
30
+ addCsvFileError(errorState, "*", CsvParseErrorEnum.INVALID_SEPARATOR, "CSV must use comma separators.", firstLine);
31
+ return withError("CSV must use comma separators.", errorState.errorMap, errorState.errors);
32
+ }
33
+ if (options?.requireQuotedValues === true) {
34
+ nonEmptyLines.forEach((line, lineIndex)=>{
35
+ if (!quotedCsvLinePattern.test(line)) if (0 === lineIndex) addCsvFileError(errorState, "*", CsvParseErrorEnum.UNQUOTED_VALUE, "CSV values must be enclosed in double quotes.", line);
36
+ else addCsvRowError(errorState, lineIndex + CSV_HEADER_ROW_NUMBER, "*", CsvParseErrorEnum.UNQUOTED_VALUE, "CSV values must be enclosed in double quotes.", line);
37
+ });
38
+ if (hasCsvErrors(errorState.errorMap)) return withError("CSV values must be enclosed in double quotes.", errorState.errorMap, errorState.errors);
39
+ }
40
+ let records;
41
+ try {
42
+ records = parse(text, {
43
+ bom: true,
44
+ delimiter: ",",
45
+ escape: '"',
46
+ quote: '"',
47
+ relax_column_count: true,
48
+ skip_empty_lines: true
49
+ });
50
+ } catch (err) {
51
+ addCsvFileError(errorState, "*", CsvParseErrorEnum.INVALID_FORMAT, err instanceof Error ? err.message : "Invalid CSV format.");
52
+ return withError("Invalid CSV format.", errorState.errorMap, errorState.errors);
53
+ }
54
+ if (0 === records.length) {
55
+ addCsvFileError(errorState, "*", CsvParseErrorEnum.EMPTY_FILE, "CSV file is empty.");
56
+ return withError("CSV file is empty.", errorState.errorMap, errorState.errors);
57
+ }
58
+ const header = records[0].map((value)=>value.trim());
59
+ if (0 === header.length) addCsvFileError(errorState, "*", CsvParseErrorEnum.EMPTY_HEADER_COLUMN, "CSV header contains empty column names.");
60
+ header.forEach((col, columnIndex)=>{
61
+ if (0 === col.length) addCsvFileError(errorState, `column_${columnIndex + 1}`, CsvParseErrorEnum.EMPTY_HEADER_COLUMN, "CSV header contains empty column names.");
62
+ });
63
+ if (hasCsvErrors(errorState.errorMap)) return withError("CSV header contains empty column names.", errorState.errorMap, errorState.errors);
64
+ const duplicateHeader = header.find((col, idx)=>header.indexOf(col) !== idx);
65
+ if (duplicateHeader) {
66
+ addCsvFileError(errorState, duplicateHeader, CsvParseErrorEnum.DUPLICATE_HEADER_COLUMN, `CSV header contains duplicate column '${duplicateHeader}'.`, duplicateHeader);
67
+ return withError(`CSV header contains duplicate column '${duplicateHeader}'.`, errorState.errorMap, errorState.errors, header, []);
68
+ }
69
+ const rows = records.slice(1);
70
+ rows.forEach((row, rowIndex)=>{
71
+ if (row.length !== header.length) addCsvRowError(errorState, rowIndex + CSV_FIRST_DATA_ROW_NUMBER, "*", CsvParseErrorEnum.ROW_COLUMN_COUNT_MISMATCH, "CSV rows must have the same number of columns as the header.", row.join(","));
72
+ });
73
+ if (hasCsvErrors(errorState.errorMap)) return withError("CSV rows must have the same number of columns as the header.", errorState.errorMap, errorState.errors, header, rows);
74
+ return {
75
+ header,
76
+ rows
77
+ };
78
+ };
79
+ export { CsvParseErrorEnum, parseCsv };
@@ -0,0 +1,45 @@
1
+ import { getTypedValue } from "@vuu-ui/vuu-utils";
2
+ import { CsvValidationErrorEnum, addCsvFileError, addCsvRowError, createCsvErrorState } from "./csv-errors.js";
3
+ import { CSV_FIRST_DATA_ROW_NUMBER } from "./csv-constants.js";
4
+ const MAX_ROWS_IN_CSV = 25000;
5
+ const validateCsvAgainstSchema = (parsed, tableSchema, options)=>{
6
+ const schemaColumns = new Map(tableSchema.columns.map((col)=>[
7
+ col.name,
8
+ col.serverDataType
9
+ ]));
10
+ const maxRows = options?.maxRows ?? MAX_ROWS_IN_CSV;
11
+ const errorState = createCsvErrorState();
12
+ if (!parsed.header.includes(tableSchema.key)) addCsvFileError(errorState, tableSchema.key, CsvValidationErrorEnum.MISSING_KEY_COLUMN, `CSV must include key column '${tableSchema.key}'.`);
13
+ parsed.header.forEach((column)=>{
14
+ if (!schemaColumns.has(column)) addCsvFileError(errorState, column, CsvValidationErrorEnum.UNKNOWN_COLUMN, "Column is not present in table schema.", column);
15
+ });
16
+ if (parsed.rows.length > maxRows) addCsvFileError(errorState, "*", CsvValidationErrorEnum.MAX_ROWS_EXCEEDED, `CSV row count ${parsed.rows.length} exceeds maxRows ${maxRows}.`, String(parsed.rows.length));
17
+ const typedRows = [];
18
+ parsed.rows.forEach((rowValues, rowIndex)=>{
19
+ const rowNum = rowIndex + CSV_FIRST_DATA_ROW_NUMBER;
20
+ const typedRow = {};
21
+ parsed.header.forEach((columnName, columnIndex)=>{
22
+ const rawValue = rowValues[columnIndex];
23
+ const schemaType = schemaColumns.get(columnName);
24
+ if (0 === rawValue.length && "string" !== schemaType) return void addCsvRowError(errorState, rowNum, columnName, CsvValidationErrorEnum.EMPTY_NON_STRING_VALUE, "Empty value is not allowed for non-string columns.", rawValue);
25
+ let value;
26
+ const toType = schemaType ?? "string";
27
+ try {
28
+ value = getTypedValue(rawValue, toType);
29
+ } catch (err) {
30
+ addCsvRowError(errorState, rowNum, columnName, CsvValidationErrorEnum.TYPE_MISMATCH, err instanceof Error ? err.message : String(err), rawValue);
31
+ return;
32
+ }
33
+ if (void 0 === value) return void addCsvRowError(errorState, rowNum, columnName, CsvValidationErrorEnum.TYPE_MISMATCH, `Value '${rawValue}' is not a valid ${toType}`, rawValue);
34
+ typedRow[columnName] = value;
35
+ });
36
+ typedRows.push(typedRow);
37
+ });
38
+ return {
39
+ columns: parsed.header,
40
+ errorMap: errorState.errorMap,
41
+ errors: errorState.errors,
42
+ rows: typedRows
43
+ };
44
+ };
45
+ export { CsvValidationErrorEnum, validateCsvAgainstSchema };
@@ -0,0 +1,59 @@
1
+ import { isRpcError } from "@vuu-ui/vuu-utils";
2
+ import { CSV_FIRST_DATA_ROW_NUMBER } from "./csv-constants.js";
3
+ const isRecord = (value)=>"object" == typeof value && null !== value;
4
+ const toErrorMessage = (error)=>error instanceof Error ? error.message : String(error);
5
+ const isCsvParseError = (value)=>isRecord(value) && "message" in value && "string" == typeof value.message && "errors" in value && Array.isArray(value.errors) && "errorMap" in value && isRecord(value.errorMap);
6
+ const hasFileParseErrors = (parseError)=>Object.keys(parseError.errorMap.fileErrors).length > 0;
7
+ const createUploadError = (source, message, parseError, validationError)=>({
8
+ message,
9
+ parseError,
10
+ validationError,
11
+ source
12
+ });
13
+ const mergeValidationWithParseErrors = (schemaValidation, parseError)=>parseError ? {
14
+ ...schemaValidation,
15
+ errors: [
16
+ ...schemaValidation.errors,
17
+ ...toValidationErrorsFromParseRowErrors(parseError)
18
+ ],
19
+ parseRowError: parseError
20
+ } : schemaValidation;
21
+ const buildRowErrorMessage = (prefix, rowErrors)=>{
22
+ const details = rowErrors.slice(0, 8).join("; ");
23
+ const remaining = rowErrors.length - 8;
24
+ const suffix = remaining > 0 ? `; and ${remaining} more` : "";
25
+ return `${prefix} for ${rowErrors.length} row(s): ${details}${suffix}`;
26
+ };
27
+ const toValidationErrorsFromParseRowErrors = (parseError)=>parseError.errors.filter((error)=>error.rowNum >= CSV_FIRST_DATA_ROW_NUMBER);
28
+ const normalizeTableData = (value, fallback)=>{
29
+ const tableData = isRecord(value) && "data" in value ? value.data : value;
30
+ if (!isRecord(tableData)) return fallback;
31
+ const columns = tableData.columns;
32
+ const rows = tableData.rows;
33
+ if (!Array.isArray(columns) || columns.some((column)=>"string" != typeof column) || !Array.isArray(rows)) return fallback;
34
+ return {
35
+ columns,
36
+ rows: rows.map((row)=>{
37
+ if (Array.isArray(row)) return row;
38
+ if (!isRecord(row)) return columns.map(()=>"");
39
+ return columns.map((column)=>row[column] ?? "");
40
+ })
41
+ };
42
+ };
43
+ const executeBatchRpcCalls = async (items, executor, errorFormatter)=>{
44
+ const errors = [];
45
+ const results = [];
46
+ for (const item of items)try {
47
+ const result = await executor(item);
48
+ const rpcResult = result;
49
+ if (isRpcError(rpcResult)) errors.push(errorFormatter(item, rpcResult.errorMessage));
50
+ else results.push(result);
51
+ } catch (err) {
52
+ errors.push(errorFormatter(item, toErrorMessage(err)));
53
+ }
54
+ return {
55
+ errors,
56
+ results
57
+ };
58
+ };
59
+ export { buildRowErrorMessage, createUploadError, executeBatchRpcCalls, hasFileParseErrors, isCsvParseError, mergeValidationWithParseErrors, normalizeTableData, toErrorMessage, toValidationErrorsFromParseRowErrors };
@@ -0,0 +1,5 @@
1
+ export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER } from "./csv-constants.js";
2
+ export { CsvParseErrorEnum, CsvValidationErrorEnum, addCsvFileError, addCsvRowError, createCsvErrorState, hasCsvErrors } from "./csv-errors.js";
3
+ export { parseCsv } from "./csv-parse.js";
4
+ export { validateCsvAgainstSchema } from "./csv-schema-validation.js";
5
+ export { buildRowErrorMessage, executeBatchRpcCalls, hasFileParseErrors, isCsvParseError, mergeValidationWithParseErrors, normalizeTableData, toErrorMessage, toValidationErrorsFromParseRowErrors } from "./csv-upload-utils.js";
@@ -0,0 +1,305 @@
1
+ import { EditSession } from "@vuu-ui/vuu-data-editing";
2
+ import { isRpcError, isSessionTable } from "@vuu-ui/vuu-utils";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { parseCsv } from "./parse/csv-parse.js";
5
+ import { validateCsvAgainstSchema } from "./parse/csv-schema-validation.js";
6
+ import { buildRowErrorMessage, createUploadError, hasFileParseErrors, isCsvParseError, mergeValidationWithParseErrors, toErrorMessage } from "./parse/csv-upload-utils.js";
7
+ import { CSV_FIRST_DATA_ROW_NUMBER } from "./parse/csv-constants.js";
8
+ const useCsvUpload = ({ dataSource, importMode = "direct", onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions })=>{
9
+ const [validation, setValidation] = useState();
10
+ const [sessionTable, setSessionTable] = useState();
11
+ const [isProcessingFile, setIsProcessingFile] = useState(false);
12
+ const [isImporting, setIsImporting] = useState(false);
13
+ const editSession = useMemo(()=>new EditSession(dataSource), [
14
+ dataSource
15
+ ]);
16
+ const ownsEditSessionRef = useRef(true);
17
+ const operationIdRef = useRef(0);
18
+ const processingPromiseRef = useRef(void 0);
19
+ const sessionDataSourceRef = useRef(void 0);
20
+ useEffect(()=>()=>{
21
+ operationIdRef.current++;
22
+ const processingPromise = processingPromiseRef.current;
23
+ (async ()=>{
24
+ try {
25
+ await processingPromise;
26
+ } finally{
27
+ if (ownsEditSessionRef.current) try {
28
+ await editSession.end(false);
29
+ } catch (error) {
30
+ console.error("[useCsvUpload] failed to discard edit session during cleanup", error);
31
+ }
32
+ }
33
+ })();
34
+ }, [
35
+ editSession
36
+ ]);
37
+ const setActiveSessionDataSource = useCallback((sessionDataSource)=>{
38
+ sessionDataSourceRef.current = sessionDataSource;
39
+ const table = sessionDataSource?.table;
40
+ setSessionTable(table && isSessionTable(table) ? table : void 0);
41
+ }, []);
42
+ const endEditSessionAndNotify = useCallback(async (save, reason)=>{
43
+ const sessionDataSource = sessionDataSourceRef.current;
44
+ if (!sessionDataSource) throw Error("CsvUpload has no active edit session.");
45
+ if (!sessionDataSource.endEditSession) throw Error("CsvUpload requires the session datasource to support endEditSession.");
46
+ const currentSessionTable = sessionDataSource.table;
47
+ await editSession.end(save);
48
+ setActiveSessionDataSource(void 0);
49
+ onImportSessionEnded?.({
50
+ reason,
51
+ sessionTable: currentSessionTable && isSessionTable(currentSessionTable) ? currentSessionTable : void 0
52
+ });
53
+ }, [
54
+ editSession,
55
+ onImportSessionEnded,
56
+ setActiveSessionDataSource
57
+ ]);
58
+ const table = dataSource.table;
59
+ const schema = dataSource.tableSchema;
60
+ const addAllRows = useCallback(async (mergedValidation, operationId)=>{
61
+ const vuuMsgByRow = new Map();
62
+ for (const { rowNum, column, message } of mergedValidation.errors){
63
+ if (rowNum < CSV_FIRST_DATA_ROW_NUMBER) continue;
64
+ const existing = vuuMsgByRow.get(rowNum);
65
+ const columnError = `${column}: ${message}`;
66
+ vuuMsgByRow.set(rowNum, existing ? `${existing}; ${columnError}` : `Row ${rowNum}: ${columnError}`);
67
+ }
68
+ const parsedRowCount = mergedValidation.rows.length;
69
+ const unparsedErrorRows = [
70
+ ...vuuMsgByRow.keys()
71
+ ].filter((rowNum)=>rowNum - CSV_FIRST_DATA_ROW_NUMBER >= parsedRowCount).map((rowNum)=>({
72
+ rowNum,
73
+ rowData: {},
74
+ vuuMsg: vuuMsgByRow.get(rowNum) ?? ""
75
+ }));
76
+ const allRows = [
77
+ ...mergedValidation.rows.map((rowData, idx)=>({
78
+ rowNum: idx + CSV_FIRST_DATA_ROW_NUMBER,
79
+ rowData: rowData ?? {},
80
+ vuuMsg: vuuMsgByRow.get(idx + CSV_FIRST_DATA_ROW_NUMBER) ?? ""
81
+ })),
82
+ ...unparsedErrorRows
83
+ ];
84
+ const rpcErrors = [];
85
+ for (const { rowNum, rowData, vuuMsg } of allRows){
86
+ if (operationId !== operationIdRef.current) return false;
87
+ try {
88
+ const payload = {
89
+ ...rowData,
90
+ rowNum,
91
+ vuuMsg
92
+ };
93
+ const result = await editSession.addRow(payload);
94
+ if (isRpcError(result)) throw Error(result.errorMessage);
95
+ if ("string" == typeof result) throw Error(result);
96
+ } catch (error) {
97
+ rpcErrors.push(`Row ${rowNum}: ${toErrorMessage(error)}`);
98
+ }
99
+ }
100
+ if (rpcErrors.length > 0) throw Error(buildRowErrorMessage("Import failed", rpcErrors));
101
+ return true;
102
+ }, [
103
+ editSession
104
+ ]);
105
+ const beginEditSession = useCallback(async ()=>{
106
+ const sessionDataSource = await editSession.begin("Empty");
107
+ const sessionVuuTable = sessionDataSource?.table;
108
+ if (void 0 === sessionDataSource || void 0 === sessionVuuTable || !isSessionTable(sessionVuuTable)) throw Error("CsvUpload createSessionDataSource returned no session datasource.");
109
+ if (!sessionDataSource.columns.includes("vuuMsg")) sessionDataSource.columns = sessionDataSource.columns.concat("vuuMsg");
110
+ setActiveSessionDataSource(sessionDataSource);
111
+ onImportSessionStarted?.(sessionDataSource);
112
+ return sessionDataSource;
113
+ }, [
114
+ editSession,
115
+ onImportSessionStarted,
116
+ setActiveSessionDataSource
117
+ ]);
118
+ const closePendingEditSession = useCallback(async (save)=>{
119
+ if (void 0 === sessionDataSourceRef.current) return;
120
+ await endEditSessionAndNotify(save, save ? "saved" : "discarded");
121
+ }, [
122
+ endEditSessionAndNotify
123
+ ]);
124
+ const cancelImport = useCallback(async ()=>{
125
+ operationIdRef.current++;
126
+ try {
127
+ await processingPromiseRef.current;
128
+ } catch {}
129
+ await closePendingEditSession(false);
130
+ }, [
131
+ closePendingEditSession
132
+ ]);
133
+ const processFile = useCallback(async (file, operationId)=>{
134
+ setValidation(void 0);
135
+ onError?.(void 0);
136
+ await closePendingEditSession(false);
137
+ if (operationId !== operationIdRef.current) return;
138
+ if (void 0 === schema) throw Error("Table schema is not yet available.");
139
+ if (void 0 === table) throw Error("CsvUpload requires dataSource.table to be defined.");
140
+ const fileContents = await file.text();
141
+ if (operationId !== operationIdRef.current) return;
142
+ const parsedCsv = parseCsv(fileContents, parseOptions);
143
+ if (parsedCsv.error && hasFileParseErrors(parsedCsv.error)) {
144
+ setValidation(void 0);
145
+ onError?.({
146
+ errors: {
147
+ validationError: createUploadError("validation", `Validation failed: ${parsedCsv.error.message}`, parsedCsv.error)
148
+ }
149
+ });
150
+ return;
151
+ }
152
+ const schemaValidation = validateCsvAgainstSchema(parsedCsv, schema, {
153
+ maxRows
154
+ });
155
+ if (Object.keys(schemaValidation.errorMap.fileErrors).length > 0) {
156
+ setValidation(schemaValidation);
157
+ onError?.({
158
+ errors: {
159
+ schemaError: createUploadError("schema", "CSV validation failed.", parsedCsv.error, {
160
+ errorMap: schemaValidation.errorMap,
161
+ errors: schemaValidation.errors,
162
+ message: "CSV validation failed."
163
+ })
164
+ }
165
+ });
166
+ return;
167
+ }
168
+ const mergedValidation = mergeValidationWithParseErrors(schemaValidation, parsedCsv.error);
169
+ setValidation(mergedValidation);
170
+ if (mergedValidation.rows.length > 0) {
171
+ await beginEditSession();
172
+ if (operationId !== operationIdRef.current) return;
173
+ try {
174
+ const rowsAdded = await addAllRows(mergedValidation, operationId);
175
+ if (!rowsAdded) return;
176
+ } catch (error) {
177
+ await endEditSessionAndNotify(false, "failed");
178
+ setValidation(void 0);
179
+ onError?.({
180
+ errors: {
181
+ importError: createUploadError("import", `RPC import failed: ${toErrorMessage(error)}`)
182
+ }
183
+ });
184
+ }
185
+ }
186
+ }, [
187
+ onError,
188
+ addAllRows,
189
+ maxRows,
190
+ parseOptions,
191
+ beginEditSession,
192
+ closePendingEditSession,
193
+ table,
194
+ endEditSessionAndNotify,
195
+ schema
196
+ ]);
197
+ const handleFiles = useCallback(async (files)=>{
198
+ const file = files[0];
199
+ if (void 0 === file) return;
200
+ setIsProcessingFile(true);
201
+ onProcessingStarted?.();
202
+ const operationId = ++operationIdRef.current;
203
+ const processingPromise = processFile(file, operationId);
204
+ processingPromiseRef.current = processingPromise;
205
+ try {
206
+ await processingPromise;
207
+ } catch (err) {
208
+ setValidation(void 0);
209
+ setActiveSessionDataSource(void 0);
210
+ const parseError = isCsvParseError(err) ? err : void 0;
211
+ const errorMessage = parseError ? `Validation failed: ${parseError.message}` : `Validation failed: ${toErrorMessage(err)}`;
212
+ const errors = {
213
+ errors: {
214
+ validationError: createUploadError("validation", errorMessage, parseError)
215
+ }
216
+ };
217
+ onError?.(errors);
218
+ } finally{
219
+ if (processingPromiseRef.current === processingPromise) processingPromiseRef.current = void 0;
220
+ setIsProcessingFile(false);
221
+ }
222
+ }, [
223
+ onError,
224
+ onProcessingStarted,
225
+ processFile,
226
+ setActiveSessionDataSource
227
+ ]);
228
+ const onDrop = useCallback((_event, files)=>{
229
+ handleFiles(files);
230
+ }, [
231
+ handleFiles
232
+ ]);
233
+ const onTriggerChange = useCallback((_event, files)=>{
234
+ handleFiles(files);
235
+ }, [
236
+ handleFiles
237
+ ]);
238
+ const canImport = useMemo(()=>void 0 !== validation && 0 === validation.errors.length && validation.rows.length > 0 && !isProcessingFile && !isImporting, [
239
+ isImporting,
240
+ isProcessingFile,
241
+ validation
242
+ ]);
243
+ const importData = useCallback(async ()=>{
244
+ if (!canImport || void 0 === validation) return false;
245
+ setIsImporting(true);
246
+ onError?.(void 0);
247
+ try {
248
+ const fallbackTableData = {
249
+ columns: validation.columns,
250
+ rows: validation.rows.map((row)=>validation.columns.map((column)=>row[column] ?? ""))
251
+ };
252
+ const tableData = fallbackTableData;
253
+ if ("preview" === importMode) {
254
+ const sessionDataSource = sessionDataSourceRef.current;
255
+ if (!sessionDataSource) throw Error("CsvUpload has no session datasource to preview.");
256
+ if (!onPreview) throw Error("CsvUpload preview mode requires an onPreview callback.");
257
+ onPreview({
258
+ dataSource: sessionDataSource,
259
+ editSession,
260
+ tableData
261
+ });
262
+ ownsEditSessionRef.current = false;
263
+ } else {
264
+ await endEditSessionAndNotify(true, "saved");
265
+ onImported?.({
266
+ tableData
267
+ });
268
+ }
269
+ return true;
270
+ } catch (err) {
271
+ const errorMessage = `RPC import failed: ${String(err)}`;
272
+ const errors = {
273
+ errors: {
274
+ importError: createUploadError("import", errorMessage)
275
+ }
276
+ };
277
+ onError?.(errors);
278
+ return false;
279
+ } finally{
280
+ setIsImporting(false);
281
+ }
282
+ }, [
283
+ canImport,
284
+ editSession,
285
+ endEditSessionAndNotify,
286
+ onError,
287
+ onImported,
288
+ onPreview,
289
+ importMode,
290
+ validation
291
+ ]);
292
+ return {
293
+ canImport,
294
+ cancelImport,
295
+ importData,
296
+ isImporting,
297
+ isProcessingFile,
298
+ onDrop,
299
+ onTriggerChange,
300
+ sessionTable,
301
+ schema,
302
+ validation
303
+ };
304
+ };
305
+ export { useCsvUpload };