@vuu-ui/vuu-utils 2.1.18 → 2.1.19-beta.2

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 (430) hide show
  1. package/package.json +11 -14
  2. package/src/Clock.js +43 -0
  3. package/src/PageVisibilityObserver.js +42 -0
  4. package/src/ScaledDecimal.js +32 -0
  5. package/src/ShellContext.js +5 -0
  6. package/src/ThemeProvider.js +56 -0
  7. package/src/array-utils.js +51 -0
  8. package/src/box-utils.js +51 -0
  9. package/src/broadcast-channel.js +0 -0
  10. package/src/column-utils.js +790 -0
  11. package/src/common-types.js +11 -0
  12. package/src/component-registry.js +83 -0
  13. package/src/context-definitions/DataContext.js +15 -0
  14. package/src/context-definitions/DataProvider.js +13 -0
  15. package/src/context-definitions/DataSourceProvider.js +18 -0
  16. package/src/context-definitions/WorkspaceContext.js +14 -0
  17. package/src/cookie-utils.js +15 -0
  18. package/src/css-utils.js +5 -0
  19. package/src/data-editing/DataEditingProvider.js +13 -0
  20. package/src/data-editing/EditButtons.js +32 -0
  21. package/src/data-editing/EditModeProvider.js +18 -0
  22. package/src/data-editing/EditSession.js +149 -0
  23. package/src/data-editing/edit-utils.js +37 -0
  24. package/src/data-editing/useEditableTable.js +76 -0
  25. package/src/data-utils.js +55 -0
  26. package/src/datasource/BaseDataSource.js +233 -0
  27. package/src/datasource/datasource-action-utils.js +6 -0
  28. package/src/datasource/datasource-filter-utils.js +27 -0
  29. package/src/datasource/datasource-utils.js +148 -0
  30. package/src/date/date-utils.js +80 -0
  31. package/src/date/dateTimePattern.js +17 -0
  32. package/src/date/formatter.js +101 -0
  33. package/src/date/index.js +4 -0
  34. package/src/date/types.js +27 -0
  35. package/src/debug-utils.js +25 -0
  36. package/src/event-emitter.js +78 -0
  37. package/src/feature-utils.js +86 -0
  38. package/src/filters/filter-utils.js +136 -0
  39. package/src/filters/filterAsQuery.js +70 -0
  40. package/src/filters/index.js +2 -0
  41. package/src/form-utils.js +69 -0
  42. package/src/formatting-utils.js +42 -0
  43. package/src/getUniqueId.js +2 -0
  44. package/src/group-utils.js +16 -0
  45. package/src/html-utils.js +108 -0
  46. package/src/index.js +77 -0
  47. package/src/input-utils.js +3 -0
  48. package/src/invariant.js +9 -0
  49. package/src/itemToString.js +9 -0
  50. package/src/json-types.js +0 -0
  51. package/src/json-utils.js +108 -0
  52. package/{esm/packages/vuu-utils/src → src}/keyboard-utils.js +1 -3
  53. package/src/keyset.js +57 -0
  54. package/src/layout-types.js +0 -0
  55. package/src/list-utils.js +5 -0
  56. package/src/local-storage-utils.js +23 -0
  57. package/src/logging-utils.js +52 -0
  58. package/src/module-utils.js +2 -0
  59. package/src/nanoid/index.js +13 -0
  60. package/src/perf-utils.js +28 -0
  61. package/src/promise-utils.js +26 -0
  62. package/src/protocol-message-utils.js +68 -0
  63. package/src/range-utils.js +109 -0
  64. package/src/react-utils.js +64 -0
  65. package/src/round-decimal.js +83 -0
  66. package/src/row-utils.js +43 -0
  67. package/src/selection-utils.js +25 -0
  68. package/src/shell-layout-types.js +9 -0
  69. package/src/sort-utils.js +75 -0
  70. package/src/table-schema-utils.js +11 -0
  71. package/src/text-utils.js +13 -0
  72. package/src/theme-utils.js +21 -0
  73. package/src/tree-types.js +0 -0
  74. package/src/tree-utils.js +96 -0
  75. package/src/ts-utils.js +6 -0
  76. package/src/typeahead-utils.js +4 -0
  77. package/src/url-utils.js +12 -0
  78. package/src/useId.js +6 -0
  79. package/src/useLayoutEffectSkipFirst.js +9 -0
  80. package/src/useResizeObserver.js +122 -0
  81. package/src/useStateRef.js +21 -0
  82. package/src/user-types.js +0 -0
  83. package/types/ThemeProvider.d.ts +4 -4
  84. package/types/data-utils.d.ts +1 -1
  85. package/types/date/date-utils.d.ts +8 -8
  86. package/types/feature-utils.d.ts +1 -1
  87. package/types/filters/filter-utils.d.ts +15 -15
  88. package/cjs/node_modules/@dnd-kit/abstract/index.js +0 -1488
  89. package/cjs/node_modules/@dnd-kit/abstract/index.js.map +0 -1
  90. package/cjs/node_modules/@dnd-kit/abstract/modifiers.js +0 -85
  91. package/cjs/node_modules/@dnd-kit/abstract/modifiers.js.map +0 -1
  92. package/cjs/node_modules/@dnd-kit/collision/dist/index.js +0 -91
  93. package/cjs/node_modules/@dnd-kit/collision/dist/index.js.map +0 -1
  94. package/cjs/node_modules/@dnd-kit/dom/index.js +0 -1991
  95. package/cjs/node_modules/@dnd-kit/dom/index.js.map +0 -1
  96. package/cjs/node_modules/@dnd-kit/dom/sortable.js +0 -828
  97. package/cjs/node_modules/@dnd-kit/dom/sortable.js.map +0 -1
  98. package/cjs/node_modules/@dnd-kit/dom/utilities.js +0 -1389
  99. package/cjs/node_modules/@dnd-kit/dom/utilities.js.map +0 -1
  100. package/cjs/node_modules/@dnd-kit/geometry/dist/index.js +0 -310
  101. package/cjs/node_modules/@dnd-kit/geometry/dist/index.js.map +0 -1
  102. package/cjs/node_modules/@dnd-kit/react/hooks.js +0 -134
  103. package/cjs/node_modules/@dnd-kit/react/hooks.js.map +0 -1
  104. package/cjs/node_modules/@dnd-kit/react/index.js +0 -398
  105. package/cjs/node_modules/@dnd-kit/react/index.js.map +0 -1
  106. package/cjs/node_modules/@dnd-kit/react/sortable.js +0 -177
  107. package/cjs/node_modules/@dnd-kit/react/sortable.js.map +0 -1
  108. package/cjs/node_modules/@dnd-kit/react/utilities.js +0 -19
  109. package/cjs/node_modules/@dnd-kit/react/utilities.js.map +0 -1
  110. package/cjs/node_modules/@dnd-kit/state/dist/index.js +0 -280
  111. package/cjs/node_modules/@dnd-kit/state/dist/index.js.map +0 -1
  112. package/cjs/node_modules/@preact/signals-core/dist/signals-core.js +0 -11
  113. package/cjs/node_modules/@preact/signals-core/dist/signals-core.js.map +0 -1
  114. package/cjs/packages/vuu-utils/src/Clock.js +0 -62
  115. package/cjs/packages/vuu-utils/src/Clock.js.map +0 -1
  116. package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js +0 -80
  117. package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js.map +0 -1
  118. package/cjs/packages/vuu-utils/src/ScaledDecimal.js +0 -43
  119. package/cjs/packages/vuu-utils/src/ScaledDecimal.js.map +0 -1
  120. package/cjs/packages/vuu-utils/src/ShellContext.js +0 -13
  121. package/cjs/packages/vuu-utils/src/ShellContext.js.map +0 -1
  122. package/cjs/packages/vuu-utils/src/ThemeProvider.js +0 -85
  123. package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +0 -1
  124. package/cjs/packages/vuu-utils/src/array-utils.js +0 -87
  125. package/cjs/packages/vuu-utils/src/array-utils.js.map +0 -1
  126. package/cjs/packages/vuu-utils/src/box-utils.js +0 -53
  127. package/cjs/packages/vuu-utils/src/box-utils.js.map +0 -1
  128. package/cjs/packages/vuu-utils/src/column-utils.js +0 -1057
  129. package/cjs/packages/vuu-utils/src/column-utils.js.map +0 -1
  130. package/cjs/packages/vuu-utils/src/common-types.js +0 -15
  131. package/cjs/packages/vuu-utils/src/common-types.js.map +0 -1
  132. package/cjs/packages/vuu-utils/src/component-registry.js +0 -144
  133. package/cjs/packages/vuu-utils/src/component-registry.js.map +0 -1
  134. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js +0 -21
  135. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +0 -1
  136. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js +0 -19
  137. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +0 -1
  138. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +0 -33
  139. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +0 -1
  140. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +0 -20
  141. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +0 -1
  142. package/cjs/packages/vuu-utils/src/cookie-utils.js +0 -22
  143. package/cjs/packages/vuu-utils/src/cookie-utils.js.map +0 -1
  144. package/cjs/packages/vuu-utils/src/css-utils.js +0 -9
  145. package/cjs/packages/vuu-utils/src/css-utils.js.map +0 -1
  146. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js +0 -28
  147. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +0 -1
  148. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js +0 -34
  149. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js.map +0 -1
  150. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js +0 -204
  151. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js.map +0 -1
  152. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js +0 -37
  153. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js.map +0 -1
  154. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js +0 -81
  155. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js.map +0 -1
  156. package/cjs/packages/vuu-utils/src/data-utils.js +0 -96
  157. package/cjs/packages/vuu-utils/src/data-utils.js.map +0 -1
  158. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +0 -317
  159. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +0 -1
  160. package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js +0 -14
  161. package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +0 -1
  162. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +0 -40
  163. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +0 -1
  164. package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js +0 -218
  165. package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js.map +0 -1
  166. package/cjs/packages/vuu-utils/src/date/date-utils.js +0 -131
  167. package/cjs/packages/vuu-utils/src/date/date-utils.js.map +0 -1
  168. package/cjs/packages/vuu-utils/src/date/dateTimePattern.js +0 -26
  169. package/cjs/packages/vuu-utils/src/date/dateTimePattern.js.map +0 -1
  170. package/cjs/packages/vuu-utils/src/date/formatter.js +0 -82
  171. package/cjs/packages/vuu-utils/src/date/formatter.js.map +0 -1
  172. package/cjs/packages/vuu-utils/src/date/types.js +0 -32
  173. package/cjs/packages/vuu-utils/src/date/types.js.map +0 -1
  174. package/cjs/packages/vuu-utils/src/debug-utils.js +0 -34
  175. package/cjs/packages/vuu-utils/src/debug-utils.js.map +0 -1
  176. package/cjs/packages/vuu-utils/src/event-emitter.js +0 -113
  177. package/cjs/packages/vuu-utils/src/event-emitter.js.map +0 -1
  178. package/cjs/packages/vuu-utils/src/feature-utils.js +0 -139
  179. package/cjs/packages/vuu-utils/src/feature-utils.js.map +0 -1
  180. package/cjs/packages/vuu-utils/src/filters/filter-utils.js +0 -182
  181. package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +0 -1
  182. package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js +0 -69
  183. package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js.map +0 -1
  184. package/cjs/packages/vuu-utils/src/form-utils.js +0 -117
  185. package/cjs/packages/vuu-utils/src/form-utils.js.map +0 -1
  186. package/cjs/packages/vuu-utils/src/formatting-utils.js +0 -98
  187. package/cjs/packages/vuu-utils/src/formatting-utils.js.map +0 -1
  188. package/cjs/packages/vuu-utils/src/getUniqueId.js +0 -6
  189. package/cjs/packages/vuu-utils/src/getUniqueId.js.map +0 -1
  190. package/cjs/packages/vuu-utils/src/group-utils.js +0 -27
  191. package/cjs/packages/vuu-utils/src/group-utils.js.map +0 -1
  192. package/cjs/packages/vuu-utils/src/html-utils.js +0 -162
  193. package/cjs/packages/vuu-utils/src/html-utils.js.map +0 -1
  194. package/cjs/packages/vuu-utils/src/index.js +0 -475
  195. package/cjs/packages/vuu-utils/src/index.js.map +0 -1
  196. package/cjs/packages/vuu-utils/src/input-utils.js +0 -10
  197. package/cjs/packages/vuu-utils/src/input-utils.js.map +0 -1
  198. package/cjs/packages/vuu-utils/src/invariant.js +0 -13
  199. package/cjs/packages/vuu-utils/src/invariant.js.map +0 -1
  200. package/cjs/packages/vuu-utils/src/itemToString.js +0 -23
  201. package/cjs/packages/vuu-utils/src/itemToString.js.map +0 -1
  202. package/cjs/packages/vuu-utils/src/json-utils.js +0 -105
  203. package/cjs/packages/vuu-utils/src/json-utils.js.map +0 -1
  204. package/cjs/packages/vuu-utils/src/keyboard-utils.js +0 -30
  205. package/cjs/packages/vuu-utils/src/keyboard-utils.js.map +0 -1
  206. package/cjs/packages/vuu-utils/src/keyset.js +0 -72
  207. package/cjs/packages/vuu-utils/src/keyset.js.map +0 -1
  208. package/cjs/packages/vuu-utils/src/list-utils.js +0 -11
  209. package/cjs/packages/vuu-utils/src/list-utils.js.map +0 -1
  210. package/cjs/packages/vuu-utils/src/local-storage-utils.js +0 -35
  211. package/cjs/packages/vuu-utils/src/local-storage-utils.js.map +0 -1
  212. package/cjs/packages/vuu-utils/src/logging-utils.js +0 -65
  213. package/cjs/packages/vuu-utils/src/logging-utils.js.map +0 -1
  214. package/cjs/packages/vuu-utils/src/module-utils.js +0 -6
  215. package/cjs/packages/vuu-utils/src/module-utils.js.map +0 -1
  216. package/cjs/packages/vuu-utils/src/nanoid/index.js +0 -22
  217. package/cjs/packages/vuu-utils/src/nanoid/index.js.map +0 -1
  218. package/cjs/packages/vuu-utils/src/perf-utils.js +0 -35
  219. package/cjs/packages/vuu-utils/src/perf-utils.js.map +0 -1
  220. package/cjs/packages/vuu-utils/src/promise-utils.js +0 -42
  221. package/cjs/packages/vuu-utils/src/promise-utils.js.map +0 -1
  222. package/cjs/packages/vuu-utils/src/protocol-message-utils.js +0 -104
  223. package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +0 -1
  224. package/cjs/packages/vuu-utils/src/range-utils.js +0 -115
  225. package/cjs/packages/vuu-utils/src/range-utils.js.map +0 -1
  226. package/cjs/packages/vuu-utils/src/react-utils.js +0 -72
  227. package/cjs/packages/vuu-utils/src/react-utils.js.map +0 -1
  228. package/cjs/packages/vuu-utils/src/round-decimal.js +0 -131
  229. package/cjs/packages/vuu-utils/src/round-decimal.js.map +0 -1
  230. package/cjs/packages/vuu-utils/src/row-utils.js +0 -59
  231. package/cjs/packages/vuu-utils/src/row-utils.js.map +0 -1
  232. package/cjs/packages/vuu-utils/src/selection-utils.js +0 -34
  233. package/cjs/packages/vuu-utils/src/selection-utils.js.map +0 -1
  234. package/cjs/packages/vuu-utils/src/shell-layout-types.js +0 -13
  235. package/cjs/packages/vuu-utils/src/shell-layout-types.js.map +0 -1
  236. package/cjs/packages/vuu-utils/src/sort-utils.js +0 -78
  237. package/cjs/packages/vuu-utils/src/sort-utils.js.map +0 -1
  238. package/cjs/packages/vuu-utils/src/table-schema-utils.js +0 -13
  239. package/cjs/packages/vuu-utils/src/table-schema-utils.js.map +0 -1
  240. package/cjs/packages/vuu-utils/src/text-utils.js +0 -21
  241. package/cjs/packages/vuu-utils/src/text-utils.js.map +0 -1
  242. package/cjs/packages/vuu-utils/src/theme-utils.js +0 -36
  243. package/cjs/packages/vuu-utils/src/theme-utils.js.map +0 -1
  244. package/cjs/packages/vuu-utils/src/tree-utils.js +0 -114
  245. package/cjs/packages/vuu-utils/src/tree-utils.js.map +0 -1
  246. package/cjs/packages/vuu-utils/src/ts-utils.js +0 -12
  247. package/cjs/packages/vuu-utils/src/ts-utils.js.map +0 -1
  248. package/cjs/packages/vuu-utils/src/typeahead-utils.js +0 -6
  249. package/cjs/packages/vuu-utils/src/typeahead-utils.js.map +0 -1
  250. package/cjs/packages/vuu-utils/src/url-utils.js +0 -21
  251. package/cjs/packages/vuu-utils/src/url-utils.js.map +0 -1
  252. package/cjs/packages/vuu-utils/src/useId.js +0 -9
  253. package/cjs/packages/vuu-utils/src/useId.js.map +0 -1
  254. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +0 -17
  255. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +0 -1
  256. package/cjs/packages/vuu-utils/src/useResizeObserver.js +0 -134
  257. package/cjs/packages/vuu-utils/src/useResizeObserver.js.map +0 -1
  258. package/cjs/packages/vuu-utils/src/useStateRef.js +0 -23
  259. package/cjs/packages/vuu-utils/src/useStateRef.js.map +0 -1
  260. package/esm/node_modules/@dnd-kit/abstract/index.js +0 -1472
  261. package/esm/node_modules/@dnd-kit/abstract/index.js.map +0 -1
  262. package/esm/node_modules/@dnd-kit/abstract/modifiers.js +0 -82
  263. package/esm/node_modules/@dnd-kit/abstract/modifiers.js.map +0 -1
  264. package/esm/node_modules/@dnd-kit/collision/dist/index.js +0 -86
  265. package/esm/node_modules/@dnd-kit/collision/dist/index.js.map +0 -1
  266. package/esm/node_modules/@dnd-kit/dom/index.js +0 -1977
  267. package/esm/node_modules/@dnd-kit/dom/index.js.map +0 -1
  268. package/esm/node_modules/@dnd-kit/dom/sortable.js +0 -822
  269. package/esm/node_modules/@dnd-kit/dom/sortable.js.map +0 -1
  270. package/esm/node_modules/@dnd-kit/dom/utilities.js +0 -1344
  271. package/esm/node_modules/@dnd-kit/dom/utilities.js.map +0 -1
  272. package/esm/node_modules/@dnd-kit/geometry/dist/index.js +0 -303
  273. package/esm/node_modules/@dnd-kit/geometry/dist/index.js.map +0 -1
  274. package/esm/node_modules/@dnd-kit/react/hooks.js +0 -126
  275. package/esm/node_modules/@dnd-kit/react/hooks.js.map +0 -1
  276. package/esm/node_modules/@dnd-kit/react/index.js +0 -392
  277. package/esm/node_modules/@dnd-kit/react/index.js.map +0 -1
  278. package/esm/node_modules/@dnd-kit/react/sortable.js +0 -175
  279. package/esm/node_modules/@dnd-kit/react/sortable.js.map +0 -1
  280. package/esm/node_modules/@dnd-kit/react/utilities.js +0 -17
  281. package/esm/node_modules/@dnd-kit/react/utilities.js.map +0 -1
  282. package/esm/node_modules/@dnd-kit/state/dist/index.js +0 -266
  283. package/esm/node_modules/@dnd-kit/state/dist/index.js.map +0 -1
  284. package/esm/node_modules/@preact/signals-core/dist/signals-core.js +0 -4
  285. package/esm/node_modules/@preact/signals-core/dist/signals-core.js.map +0 -1
  286. package/esm/packages/vuu-utils/src/Clock.js +0 -60
  287. package/esm/packages/vuu-utils/src/Clock.js.map +0 -1
  288. package/esm/packages/vuu-utils/src/PageVisibilityObserver.js +0 -78
  289. package/esm/packages/vuu-utils/src/PageVisibilityObserver.js.map +0 -1
  290. package/esm/packages/vuu-utils/src/ScaledDecimal.js +0 -37
  291. package/esm/packages/vuu-utils/src/ScaledDecimal.js.map +0 -1
  292. package/esm/packages/vuu-utils/src/ShellContext.js +0 -10
  293. package/esm/packages/vuu-utils/src/ShellContext.js.map +0 -1
  294. package/esm/packages/vuu-utils/src/ThemeProvider.js +0 -78
  295. package/esm/packages/vuu-utils/src/ThemeProvider.js.map +0 -1
  296. package/esm/packages/vuu-utils/src/array-utils.js +0 -79
  297. package/esm/packages/vuu-utils/src/array-utils.js.map +0 -1
  298. package/esm/packages/vuu-utils/src/box-utils.js +0 -47
  299. package/esm/packages/vuu-utils/src/box-utils.js.map +0 -1
  300. package/esm/packages/vuu-utils/src/column-utils.js +0 -970
  301. package/esm/packages/vuu-utils/src/column-utils.js.map +0 -1
  302. package/esm/packages/vuu-utils/src/common-types.js +0 -13
  303. package/esm/packages/vuu-utils/src/common-types.js.map +0 -1
  304. package/esm/packages/vuu-utils/src/component-registry.js +0 -128
  305. package/esm/packages/vuu-utils/src/component-registry.js.map +0 -1
  306. package/esm/packages/vuu-utils/src/context-definitions/DataContext.js +0 -18
  307. package/esm/packages/vuu-utils/src/context-definitions/DataContext.js.map +0 -1
  308. package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js +0 -16
  309. package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js.map +0 -1
  310. package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +0 -29
  311. package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +0 -1
  312. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +0 -17
  313. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +0 -1
  314. package/esm/packages/vuu-utils/src/cookie-utils.js +0 -19
  315. package/esm/packages/vuu-utils/src/cookie-utils.js.map +0 -1
  316. package/esm/packages/vuu-utils/src/css-utils.js +0 -7
  317. package/esm/packages/vuu-utils/src/css-utils.js.map +0 -1
  318. package/esm/packages/vuu-utils/src/data-editing/DataEditingProvider.js +0 -25
  319. package/esm/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +0 -1
  320. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js +0 -32
  321. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js.map +0 -1
  322. package/esm/packages/vuu-utils/src/data-editing/EditSession.js +0 -201
  323. package/esm/packages/vuu-utils/src/data-editing/EditSession.js.map +0 -1
  324. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js +0 -34
  325. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js.map +0 -1
  326. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js +0 -79
  327. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js.map +0 -1
  328. package/esm/packages/vuu-utils/src/data-utils.js +0 -82
  329. package/esm/packages/vuu-utils/src/data-utils.js.map +0 -1
  330. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +0 -314
  331. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +0 -1
  332. package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js +0 -8
  333. package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +0 -1
  334. package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js +0 -38
  335. package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +0 -1
  336. package/esm/packages/vuu-utils/src/datasource/datasource-utils.js +0 -193
  337. package/esm/packages/vuu-utils/src/datasource/datasource-utils.js.map +0 -1
  338. package/esm/packages/vuu-utils/src/date/date-utils.js +0 -121
  339. package/esm/packages/vuu-utils/src/date/date-utils.js.map +0 -1
  340. package/esm/packages/vuu-utils/src/date/dateTimePattern.js +0 -22
  341. package/esm/packages/vuu-utils/src/date/dateTimePattern.js.map +0 -1
  342. package/esm/packages/vuu-utils/src/date/formatter.js +0 -79
  343. package/esm/packages/vuu-utils/src/date/formatter.js.map +0 -1
  344. package/esm/packages/vuu-utils/src/date/types.js +0 -26
  345. package/esm/packages/vuu-utils/src/date/types.js.map +0 -1
  346. package/esm/packages/vuu-utils/src/debug-utils.js +0 -32
  347. package/esm/packages/vuu-utils/src/debug-utils.js.map +0 -1
  348. package/esm/packages/vuu-utils/src/event-emitter.js +0 -111
  349. package/esm/packages/vuu-utils/src/event-emitter.js.map +0 -1
  350. package/esm/packages/vuu-utils/src/feature-utils.js +0 -125
  351. package/esm/packages/vuu-utils/src/feature-utils.js.map +0 -1
  352. package/esm/packages/vuu-utils/src/filters/filter-utils.js +0 -159
  353. package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +0 -1
  354. package/esm/packages/vuu-utils/src/filters/filterAsQuery.js +0 -65
  355. package/esm/packages/vuu-utils/src/filters/filterAsQuery.js.map +0 -1
  356. package/esm/packages/vuu-utils/src/form-utils.js +0 -110
  357. package/esm/packages/vuu-utils/src/form-utils.js.map +0 -1
  358. package/esm/packages/vuu-utils/src/formatting-utils.js +0 -93
  359. package/esm/packages/vuu-utils/src/formatting-utils.js.map +0 -1
  360. package/esm/packages/vuu-utils/src/getUniqueId.js +0 -4
  361. package/esm/packages/vuu-utils/src/getUniqueId.js.map +0 -1
  362. package/esm/packages/vuu-utils/src/group-utils.js +0 -23
  363. package/esm/packages/vuu-utils/src/group-utils.js.map +0 -1
  364. package/esm/packages/vuu-utils/src/html-utils.js +0 -145
  365. package/esm/packages/vuu-utils/src/html-utils.js.map +0 -1
  366. package/esm/packages/vuu-utils/src/index.js +0 -77
  367. package/esm/packages/vuu-utils/src/index.js.map +0 -1
  368. package/esm/packages/vuu-utils/src/input-utils.js +0 -7
  369. package/esm/packages/vuu-utils/src/input-utils.js.map +0 -1
  370. package/esm/packages/vuu-utils/src/invariant.js +0 -11
  371. package/esm/packages/vuu-utils/src/invariant.js.map +0 -1
  372. package/esm/packages/vuu-utils/src/itemToString.js +0 -21
  373. package/esm/packages/vuu-utils/src/itemToString.js.map +0 -1
  374. package/esm/packages/vuu-utils/src/json-utils.js +0 -103
  375. package/esm/packages/vuu-utils/src/json-utils.js.map +0 -1
  376. package/esm/packages/vuu-utils/src/keyboard-utils.js.map +0 -1
  377. package/esm/packages/vuu-utils/src/keyset.js +0 -70
  378. package/esm/packages/vuu-utils/src/keyset.js.map +0 -1
  379. package/esm/packages/vuu-utils/src/list-utils.js +0 -9
  380. package/esm/packages/vuu-utils/src/list-utils.js.map +0 -1
  381. package/esm/packages/vuu-utils/src/local-storage-utils.js +0 -30
  382. package/esm/packages/vuu-utils/src/local-storage-utils.js.map +0 -1
  383. package/esm/packages/vuu-utils/src/logging-utils.js +0 -61
  384. package/esm/packages/vuu-utils/src/logging-utils.js.map +0 -1
  385. package/esm/packages/vuu-utils/src/module-utils.js +0 -4
  386. package/esm/packages/vuu-utils/src/module-utils.js.map +0 -1
  387. package/esm/packages/vuu-utils/src/nanoid/index.js +0 -20
  388. package/esm/packages/vuu-utils/src/nanoid/index.js.map +0 -1
  389. package/esm/packages/vuu-utils/src/perf-utils.js +0 -32
  390. package/esm/packages/vuu-utils/src/perf-utils.js.map +0 -1
  391. package/esm/packages/vuu-utils/src/promise-utils.js +0 -40
  392. package/esm/packages/vuu-utils/src/promise-utils.js.map +0 -1
  393. package/esm/packages/vuu-utils/src/protocol-message-utils.js +0 -75
  394. package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +0 -1
  395. package/esm/packages/vuu-utils/src/range-utils.js +0 -108
  396. package/esm/packages/vuu-utils/src/range-utils.js.map +0 -1
  397. package/esm/packages/vuu-utils/src/react-utils.js +0 -66
  398. package/esm/packages/vuu-utils/src/react-utils.js.map +0 -1
  399. package/esm/packages/vuu-utils/src/round-decimal.js +0 -127
  400. package/esm/packages/vuu-utils/src/round-decimal.js.map +0 -1
  401. package/esm/packages/vuu-utils/src/row-utils.js +0 -54
  402. package/esm/packages/vuu-utils/src/row-utils.js.map +0 -1
  403. package/esm/packages/vuu-utils/src/selection-utils.js +0 -31
  404. package/esm/packages/vuu-utils/src/selection-utils.js.map +0 -1
  405. package/esm/packages/vuu-utils/src/shell-layout-types.js +0 -11
  406. package/esm/packages/vuu-utils/src/shell-layout-types.js.map +0 -1
  407. package/esm/packages/vuu-utils/src/sort-utils.js +0 -73
  408. package/esm/packages/vuu-utils/src/sort-utils.js.map +0 -1
  409. package/esm/packages/vuu-utils/src/table-schema-utils.js +0 -11
  410. package/esm/packages/vuu-utils/src/table-schema-utils.js.map +0 -1
  411. package/esm/packages/vuu-utils/src/text-utils.js +0 -18
  412. package/esm/packages/vuu-utils/src/text-utils.js.map +0 -1
  413. package/esm/packages/vuu-utils/src/theme-utils.js +0 -34
  414. package/esm/packages/vuu-utils/src/theme-utils.js.map +0 -1
  415. package/esm/packages/vuu-utils/src/tree-utils.js +0 -108
  416. package/esm/packages/vuu-utils/src/tree-utils.js.map +0 -1
  417. package/esm/packages/vuu-utils/src/ts-utils.js +0 -8
  418. package/esm/packages/vuu-utils/src/ts-utils.js.map +0 -1
  419. package/esm/packages/vuu-utils/src/typeahead-utils.js +0 -4
  420. package/esm/packages/vuu-utils/src/typeahead-utils.js.map +0 -1
  421. package/esm/packages/vuu-utils/src/url-utils.js +0 -18
  422. package/esm/packages/vuu-utils/src/url-utils.js.map +0 -1
  423. package/esm/packages/vuu-utils/src/useId.js +0 -7
  424. package/esm/packages/vuu-utils/src/useId.js.map +0 -1
  425. package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +0 -15
  426. package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +0 -1
  427. package/esm/packages/vuu-utils/src/useResizeObserver.js +0 -130
  428. package/esm/packages/vuu-utils/src/useResizeObserver.js.map +0 -1
  429. package/esm/packages/vuu-utils/src/useStateRef.js +0 -21
  430. package/esm/packages/vuu-utils/src/useStateRef.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ const MEASURES = {
2
+ horizontal: {
3
+ positionProp: "left",
4
+ sizeProp: "width"
5
+ },
6
+ vertical: {
7
+ positionProp: "top",
8
+ sizeProp: "height"
9
+ }
10
+ };
11
+ export { MEASURES };
@@ -0,0 +1,83 @@
1
+ import { hasCustomRenderer, isColumnTypeRenderer, isTypeDescriptor } from "./column-utils.js";
2
+ const containersSet = new Set();
3
+ const viewsSet = new Set();
4
+ const layoutComponentsMap = new Map();
5
+ const cellRenderersMap = new Map();
6
+ const columnHeaderRenderersMap = new Map();
7
+ const configEditorsMap = new Map();
8
+ const cellConfigPanelsMap = new Map();
9
+ const editRuleValidatorsMap = new Map();
10
+ const optionsMap = new Map();
11
+ const rowClassGeneratorsMap = new Map();
12
+ const isTypeCompatible = (rendererType, serverDataType)=>{
13
+ if (void 0 === rendererType || "private" === rendererType) return true;
14
+ if (!Array.isArray(rendererType)) return rendererType === serverDataType;
15
+ if ("json" === serverDataType) return false;
16
+ return rendererType.includes(serverDataType);
17
+ };
18
+ const isContainer = (componentType)=>containersSet.has(componentType);
19
+ const isView = (componentType)=>viewsSet.has(componentType);
20
+ const isLayoutComponent = (componentType)=>isContainer(componentType) || isView(componentType);
21
+ const isCellRenderer = (type, component)=>void 0 !== component && "cell-renderer" === type;
22
+ const isColumnHeaderContentRenderer = (type, component)=>"column-header-content-renderer" === type;
23
+ const isColumnHeaderLabelRenderer = (type, component)=>"column-header-label-renderer" === type;
24
+ const isCellConfigPanel = (type, component)=>"cell-config-panel" === type;
25
+ const isEditRuleValidator = (type, component)=>"data-edit-validator" === type;
26
+ const isRowClassGenerator = (type, component)=>"row-class-generator" === type;
27
+ function registerComponent(componentName, component, componentType, options) {
28
+ if ("container" === componentType || "view" === componentType || "component" === componentType) {
29
+ layoutComponentsMap.set(componentName, component);
30
+ if ("container" === componentType) containersSet.add(componentName);
31
+ else if ("view" === componentType) viewsSet.add(componentName);
32
+ } else if (isCellRenderer(componentType, component)) cellRenderersMap.set(componentName, component);
33
+ else if (isColumnHeaderContentRenderer(componentType, component)) columnHeaderRenderersMap.set(componentName, component);
34
+ else if (isColumnHeaderLabelRenderer(componentType, component)) columnHeaderRenderersMap.set(componentName, component);
35
+ else if (isCellConfigPanel(componentType, component)) cellConfigPanelsMap.set(componentName, component);
36
+ else if (isEditRuleValidator(componentType, component)) editRuleValidatorsMap.set(componentName, component);
37
+ else if (isRowClassGenerator(componentType, component)) rowClassGeneratorsMap.set(componentName, component);
38
+ if (options) optionsMap.set(componentName, options);
39
+ }
40
+ const registerConfigurationEditor = (componentName, configurationEditor)=>{
41
+ configEditorsMap.set(componentName, configurationEditor);
42
+ };
43
+ const getRegisteredCellRenderers = (cellRendererDataType)=>{
44
+ const rendererNames = Array.from(cellRenderersMap.keys());
45
+ const allRenderers = rendererNames.map((name)=>({
46
+ name,
47
+ ...optionsMap.get(name)
48
+ })).filter(({ userCanAssign })=>false !== userCanAssign);
49
+ if (cellRendererDataType) return allRenderers.filter((renderer)=>isTypeCompatible(renderer.serverDataType, cellRendererDataType));
50
+ return allRenderers;
51
+ };
52
+ const getLayoutComponent = (componentName)=>{
53
+ const layoutComponent = layoutComponentsMap.get(componentName);
54
+ if (layoutComponent) return layoutComponent;
55
+ throw Error(`layout component ${componentName} not found in ComponentRegistry`);
56
+ };
57
+ const getCellRendererOptions = (renderName)=>optionsMap.get(renderName);
58
+ function getCellRenderer(column) {
59
+ return dataCellRenderer(column);
60
+ }
61
+ function getColumnHeaderContentRenderer(column) {
62
+ if (column.colHeaderContentRenderer) return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);
63
+ }
64
+ function getColumnHeaderLabelRenderer(column) {
65
+ if (column.colHeaderLabelRenderer) return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);
66
+ }
67
+ const getRowClassNameGenerator = (generatorId)=>rowClassGeneratorsMap.get(generatorId);
68
+ function getConfigurationEditor(configEditor = "") {
69
+ return configEditorsMap.get(configEditor);
70
+ }
71
+ function getCellConfigPanelRenderer(name) {
72
+ return cellConfigPanelsMap.get(name);
73
+ }
74
+ function getEditRuleValidator(name) {
75
+ return editRuleValidatorsMap.get(name);
76
+ }
77
+ function dataCellRenderer(column) {
78
+ if ("boolean" === column.serverDataType && !hasCustomRenderer(column.type)) return cellRenderersMap.get("checkbox-cell");
79
+ if (column.editable && !hasCustomRenderer(column.type)) return cellRenderersMap.get("input-cell");
80
+ if (isTypeDescriptor(column.type) && isColumnTypeRenderer(column.type.renderer)) return cellRenderersMap.get(column.type.renderer?.name);
81
+ if ("boolean" === column.serverDataType) return cellRenderersMap.get("checkbox-cell");
82
+ }
83
+ export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getLayoutComponent, getRegisteredCellRenderers, getRowClassNameGenerator, isContainer, isLayoutComponent, isView, registerComponent, registerConfigurationEditor };
@@ -0,0 +1,15 @@
1
+ import { createContext } from "react";
2
+ const getServerAPI = ()=>{
3
+ throw Error("no DataProvider has been installed");
4
+ };
5
+ class NullDataSourceConstructor {
6
+ constructor(_){
7
+ throw Error("no DataProvider has been installed");
8
+ }
9
+ }
10
+ const DataContext = /*#__PURE__*/ createContext({
11
+ isLocalData: false,
12
+ getServerAPI: getServerAPI,
13
+ VuuDataSource: NullDataSourceConstructor
14
+ });
15
+ export { DataContext, NullDataSourceConstructor };
@@ -0,0 +1,13 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useContext } from "react";
3
+ import { DataContext } from "./DataContext.js";
4
+ const DataProvider = ({ children, getServerAPI, isLocalData = true, VuuDataSource })=>/*#__PURE__*/ jsx(DataContext.Provider, {
5
+ value: {
6
+ isLocalData,
7
+ VuuDataSource,
8
+ getServerAPI
9
+ },
10
+ children: children
11
+ });
12
+ const useData = ()=>useContext(DataContext);
13
+ export { DataProvider, useData };
@@ -0,0 +1,18 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ const DataSourceContext = /*#__PURE__*/ createContext({
4
+ dataSource: void 0
5
+ });
6
+ const DataSourceProvider = ({ children, dataSource })=>/*#__PURE__*/ jsx(DataSourceContext.Provider, {
7
+ value: {
8
+ dataSource
9
+ },
10
+ children: children
11
+ });
12
+ function useDataSource(throwIfNoDataSource = false) {
13
+ const { dataSource } = useContext(DataSourceContext);
14
+ if (dataSource) return dataSource;
15
+ if (throwIfNoDataSource) throw Error("[DataSOurceProvider] useDataSource,no DataSourceProvider has been declared ");
16
+ console.warn("[DataSourceProvider] useDataSource: no DataSourceProvider has been declared");
17
+ }
18
+ export { DataSourceContext, DataSourceProvider, useDataSource };
@@ -0,0 +1,14 @@
1
+ import react, { useContext } from "react";
2
+ const WorkspaceContext = /*#__PURE__*/ react.createContext({
3
+ getApplicationSettings: ()=>void 0,
4
+ layoutMetadata: [],
5
+ saveLayout: ()=>void 0,
6
+ saveApplicationLayout: ()=>void 0,
7
+ saveApplicationSettings: ()=>void 0,
8
+ loadLayoutById: ()=>void 0
9
+ });
10
+ const usePlaceholderJSON = ()=>{
11
+ const { layoutPlaceholderJSON } = useContext(WorkspaceContext);
12
+ return layoutPlaceholderJSON;
13
+ };
14
+ export { WorkspaceContext, usePlaceholderJSON };
@@ -0,0 +1,15 @@
1
+ const getCookieValue = (name)=>{
2
+ if (globalThis.document?.cookie !== void 0) return globalThis.document.cookie.split("; ").find((row)=>row.startsWith(`${name}=`))?.split("=")[1];
3
+ };
4
+ function setCookieValue(name, value, days) {
5
+ let expires = "";
6
+ if ("number" == typeof days) {
7
+ const date = new Date();
8
+ date.setTime(date.getTime() + 24 * days * 3600000);
9
+ expires = "; expires=" + date.toUTCString();
10
+ }
11
+ const encodedName = encodeURIComponent(name);
12
+ const encodedValue = encodeURIComponent(value);
13
+ document.cookie = `${encodedName}=${encodedValue}${expires};`;
14
+ }
15
+ export { getCookieValue, setCookieValue };
@@ -0,0 +1,5 @@
1
+ const importCSS = async (path)=>{
2
+ const container = new CSSStyleSheet();
3
+ return fetch(path).then((x)=>x.text()).then((x)=>container.replace(x));
4
+ };
5
+ export { importCSS };
@@ -0,0 +1,13 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ const DataEditingContext = /*#__PURE__*/ createContext(void 0);
4
+ const DataEditingProvider = ({ children, editSession })=>/*#__PURE__*/ jsx(DataEditingContext.Provider, {
5
+ value: editSession,
6
+ children: children
7
+ });
8
+ function useEditSession(throwIfUnavailable = false) {
9
+ const editSession = useContext(DataEditingContext);
10
+ if (void 0 !== editSession) return editSession;
11
+ if (throwIfUnavailable) throw Error("[useEditSession] no DataEditingContext in scope. You need to enclose editable component(s) with DataEditingProvider");
12
+ }
13
+ export { DataEditingProvider, useEditSession };
@@ -0,0 +1,32 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { Button } from "@salt-ds/core";
3
+ import { useCallback, useMemo, useState } from "react";
4
+ const EditButtons = ({ editSession, onCancel, onSave })=>{
5
+ const [editState, setEditState] = useState("clean");
6
+ const handleSave = useCallback(()=>{
7
+ onSave("stale" === editState);
8
+ }, [
9
+ editState,
10
+ onSave
11
+ ]);
12
+ useMemo(()=>{
13
+ editSession?.on("editState", setEditState);
14
+ }, [
15
+ editSession
16
+ ]);
17
+ return /*#__PURE__*/ jsxs(Fragment, {
18
+ children: [
19
+ /*#__PURE__*/ jsx(Button, {
20
+ disabled: "clean" === editState || "invalid" === editState,
21
+ onClick: handleSave,
22
+ sentiment: "accented",
23
+ children: "stale" === editState ? "Save (force)" : "Save"
24
+ }),
25
+ /*#__PURE__*/ jsx(Button, {
26
+ onClick: onCancel,
27
+ children: "Cancel"
28
+ })
29
+ ]
30
+ });
31
+ };
32
+ export { EditButtons };
@@ -0,0 +1,18 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useState } from "react";
3
+ const EditModeContext = /*#__PURE__*/ createContext({
4
+ isEditMode: false,
5
+ setEditMode: ()=>"EditModeProvider in place"
6
+ });
7
+ const EditModeProvider = ({ children })=>{
8
+ const [isEditMode, setEditMode] = useState(false);
9
+ return /*#__PURE__*/ jsx(EditModeContext.Provider, {
10
+ value: {
11
+ isEditMode,
12
+ setEditMode
13
+ },
14
+ children: children
15
+ });
16
+ };
17
+ const useEditMode = ()=>useContext(EditModeContext);
18
+ export { EditModeProvider, useEditMode };
@@ -0,0 +1,149 @@
1
+ import { EventEmitter } from "../event-emitter.js";
2
+ import { isRpcError } from "../protocol-message-utils.js";
3
+ class EditError extends Error {
4
+ }
5
+ class StaleUpdateError extends Error {
6
+ }
7
+ class EditSession extends EventEmitter {
8
+ #rowEdits = new Map();
9
+ #editCount = 0;
10
+ #invalidCount = 0;
11
+ #sourceTableDataSource;
12
+ #sessionDataSource;
13
+ #inEditMode = false;
14
+ constructor(dataSource){
15
+ super();
16
+ this.#sourceTableDataSource = dataSource;
17
+ }
18
+ get editCount() {
19
+ return this.#editCount;
20
+ }
21
+ set editCount(val) {
22
+ if (val !== this.#editCount) {
23
+ const oldCount = this.#editCount;
24
+ this.#editCount = val;
25
+ if (0 === val) this.emit("editState", "clean");
26
+ else if (0 === oldCount) this.emit("editState", "dirty");
27
+ }
28
+ }
29
+ get invalidCount() {
30
+ return this.#invalidCount;
31
+ }
32
+ set invalidCount(val) {
33
+ if (val !== this.#invalidCount) {
34
+ const oldCount = this.#invalidCount;
35
+ this.#invalidCount = val;
36
+ if (0 === val) this.emit("editState", 0 === this.#editCount ? "clean" : "dirty");
37
+ else if (0 === oldCount) this.emit("editState", "invalid");
38
+ }
39
+ }
40
+ clear() {
41
+ this.#rowEdits.clear();
42
+ this.#editCount = 0;
43
+ this.#inEditMode = false;
44
+ }
45
+ async begin(editSessionMode) {
46
+ try {
47
+ this.#inEditMode = true;
48
+ const sessionDataSource = await this.#sourceTableDataSource?.beginEditSession?.(editSessionMode);
49
+ this.#sessionDataSource = sessionDataSource;
50
+ return sessionDataSource;
51
+ } catch (e) {
52
+ this.#inEditMode = false;
53
+ }
54
+ }
55
+ get dataSource() {
56
+ return this.#sessionDataSource ?? this.#sourceTableDataSource;
57
+ }
58
+ async end(saveChanges = false, force = false) {
59
+ try {
60
+ if (this.#inEditMode) {
61
+ await this.dataSource?.endEditSession?.(saveChanges, force);
62
+ this.clear();
63
+ }
64
+ } catch (e) {
65
+ if (e instanceof StaleUpdateError) this.emit("editState", "stale");
66
+ else console.error(`[EditSession] ${e.message}`);
67
+ }
68
+ }
69
+ get inEditMode() {
70
+ return this.#inEditMode;
71
+ }
72
+ get editState() {
73
+ return 0 === this.editCount ? "clean" : "dirty";
74
+ }
75
+ getOrCreateRowEdits(key) {
76
+ const rowEditDetails = this.#rowEdits.get(key);
77
+ if (rowEditDetails) return rowEditDetails;
78
+ {
79
+ const rowEditDetails = {
80
+ cellEdits: new Map()
81
+ };
82
+ this.#rowEdits.set(key, rowEditDetails);
83
+ return rowEditDetails;
84
+ }
85
+ }
86
+ storeCellEdit(cellEdits, column, originalValue, editedValue, isValid) {
87
+ const cellEdit = cellEdits.get(column);
88
+ if (cellEdit) {
89
+ if (cellEdit.originalValue === editedValue) {
90
+ cellEdits.delete(column);
91
+ cellEdit.isDeleted = true;
92
+ if (cellEdit.isValid) this.editCount -= 1;
93
+ else this.invalidCount -= 1;
94
+ } else if (isValid && false === cellEdit.isValid) {
95
+ cellEdit.isValid = true;
96
+ cellEdit.editedValue = editedValue;
97
+ this.#invalidCount -= 1;
98
+ this.editCount += 1;
99
+ }
100
+ return cellEdit;
101
+ }
102
+ {
103
+ const cellEdit = {
104
+ originalValue,
105
+ editedValue,
106
+ isValid
107
+ };
108
+ cellEdits.set(column, cellEdit);
109
+ if (isValid) this.editCount += 1;
110
+ return cellEdit;
111
+ }
112
+ }
113
+ async commit(key, columnName, originalValue, typedValue, isValid) {
114
+ if (!this.#inEditMode) throw new Error("No edit session in progress");
115
+ const rowEditDetails = this.getOrCreateRowEdits(key);
116
+ if (isValid) {
117
+ const { cellEdits } = rowEditDetails;
118
+ const cellEdit = this.storeCellEdit(cellEdits, columnName, originalValue, typedValue, isValid);
119
+ if (cellEdit.isDeleted) {
120
+ if (0 === rowEditDetails.cellEdits.size) this.#rowEdits.delete(key);
121
+ }
122
+ if (this.dataSource?.editCell) {
123
+ const response = await this.dataSource.editCell(key, columnName, typedValue);
124
+ if (isRpcError(response)) {
125
+ cellEdit.isValid = false;
126
+ this.invalidCount += 1;
127
+ }
128
+ return {
129
+ editedDuringCurrentSession: cellEdit.originalValue !== typedValue,
130
+ ...response
131
+ };
132
+ }
133
+ } else {
134
+ const { cellEdits } = rowEditDetails;
135
+ let cellEdit = cellEdits.get(columnName);
136
+ if (cellEdit && false !== cellEdit.isValid) {
137
+ cellEdit.isValid = false;
138
+ this.invalidCount += 1;
139
+ } else if (void 0 === cellEdit) {
140
+ cellEdit = this.storeCellEdit(cellEdits, columnName, originalValue, typedValue, isValid);
141
+ this.invalidCount += 1;
142
+ }
143
+ return {
144
+ editedDuringCurrentSession: false
145
+ };
146
+ }
147
+ }
148
+ }
149
+ export { EditError, EditSession, StaleUpdateError };
@@ -0,0 +1,37 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { formatDate } from "../date/index.js";
3
+ const isInlineEditingSession = (editSessionMode)=>editSessionMode.startsWith("inline");
4
+ const timeFormatter = formatDate({
5
+ time: "hh:mm:ss"
6
+ });
7
+ const getVuuEditMessage = (dataRow, column, originalValue)=>{
8
+ const vuuMsg = dataRow.vuuMsg;
9
+ if ("string" == typeof vuuMsg && "" !== vuuMsg) {
10
+ const columnMessages = vuuMsg.split(",");
11
+ const msgForCol = columnMessages.find((msg)=>msg.startsWith(`${column.name}:`));
12
+ if (msgForCol) {
13
+ const [, value, updatedValue, ts] = msgForCol.split(":");
14
+ const updateTime = timeFormatter(new Date(parseInt(ts)));
15
+ return /*#__PURE__*/ jsxs("span", {
16
+ children: [
17
+ "Update rejected. Original value ",
18
+ /*#__PURE__*/ jsx("b", {
19
+ children: originalValue
20
+ }),
21
+ " could not be updated to ",
22
+ /*#__PURE__*/ jsx("b", {
23
+ children: value
24
+ }),
25
+ ". It was updated to ",
26
+ /*#__PURE__*/ jsx("b", {
27
+ children: updatedValue
28
+ }),
29
+ " at ",
30
+ updateTime,
31
+ "."
32
+ ]
33
+ });
34
+ }
35
+ }
36
+ };
37
+ export { getVuuEditMessage, isInlineEditingSession };
@@ -0,0 +1,76 @@
1
+ import { useCallback, useMemo, useState } from "react";
2
+ import { useData } from "../context-definitions/DataProvider.js";
3
+ import { useLayoutEffectSkipFirst } from "../useLayoutEffectSkipFirst.js";
4
+ import { EditSession } from "./EditSession.js";
5
+ const useEditableTable = ({ columns, dataSource: dataSourceProp, editSessionMode = "inline-all-rows", isEditMode, onCancel, onSave, table })=>{
6
+ const { VuuDataSource } = useData();
7
+ const [sessionDataSource, setSessionDataSource] = useState(void 0);
8
+ useLayoutEffectSkipFirst(()=>{
9
+ console.warn("[useEditableTable] columns and or table changed");
10
+ }, [
11
+ columns,
12
+ table
13
+ ]);
14
+ const dataSource = useMemo(()=>{
15
+ if (dataSourceProp) return dataSourceProp;
16
+ if (table) return new VuuDataSource({
17
+ columns,
18
+ table
19
+ });
20
+ throw Error("useEditableTable unable to provide DataSource, neither dataSource nor table available as props");
21
+ }, [
22
+ VuuDataSource,
23
+ columns,
24
+ dataSourceProp,
25
+ table
26
+ ]);
27
+ const editSession = useMemo(()=>new EditSession(dataSource), [
28
+ dataSource
29
+ ]);
30
+ const handleCancel = useCallback(()=>{
31
+ try {
32
+ editSession.end();
33
+ onCancel();
34
+ } catch (e) {}
35
+ }, [
36
+ editSession,
37
+ onCancel
38
+ ]);
39
+ const handleSave = useCallback(async (force = false)=>{
40
+ dataSource.resume?.();
41
+ try {
42
+ await editSession.end(true, force);
43
+ if (false === editSession.inEditMode) onSave();
44
+ } catch (e) {
45
+ console.log(`[useEditableTable] handleSave ${e.message}`);
46
+ }
47
+ }, [
48
+ dataSource,
49
+ editSession,
50
+ onSave
51
+ ]);
52
+ useMemo(async ()=>{
53
+ console.log(`[useEditableTable] editMode ${isEditMode}`);
54
+ if (isEditMode) try {
55
+ const sessionDataSource = await editSession.begin(editSessionMode);
56
+ if (sessionDataSource) setSessionDataSource(sessionDataSource);
57
+ } catch (e) {
58
+ console.error(e);
59
+ onCancel();
60
+ }
61
+ else await editSession.end();
62
+ }, [
63
+ editSession,
64
+ editSessionMode,
65
+ isEditMode,
66
+ onCancel
67
+ ]);
68
+ return {
69
+ dataSource,
70
+ editSession,
71
+ onCancel: handleCancel,
72
+ onSave: handleSave,
73
+ sessionDataSource
74
+ };
75
+ };
76
+ export { useEditableTable };
@@ -0,0 +1,55 @@
1
+ const UP1 = "up1";
2
+ const UP2 = "up2";
3
+ const DOWN1 = "down1";
4
+ const DOWN2 = "down2";
5
+ const decimalPattern = /^-?[0-9]*\.[0-9]*$/;
6
+ const stringIsValidInt = (val)=>parseInt(val, 10).toString() === val;
7
+ const stringIsValidDecimal = (val)=>stringIsValidInt(val) || decimalPattern.test(val);
8
+ const stringIsValidNumber = (val)=>stringIsValidInt(val) || stringIsValidDecimal(val);
9
+ const numericTypeOfStringValue = (val)=>stringIsValidInt(val) ? "int" : stringIsValidDecimal(val) ? "double" : "NaN";
10
+ const isValidNumber = (n)=>"number" == typeof n && isFinite(n);
11
+ const EMPTY = {};
12
+ const shallowEquals = (o1 = EMPTY, o2 = EMPTY)=>{
13
+ const props1 = Object.keys(o1);
14
+ const props2 = Object.keys(o2);
15
+ return props1.length === props2.length && props1.every((key)=>o1[key] === o2[key]);
16
+ };
17
+ function getMovingValueDirection(newValue, direction, prevValue, decimalPlaces) {
18
+ if (void 0 === newValue) return "";
19
+ if (!isFinite(newValue) || void 0 === prevValue || void 0 === direction) return "";
20
+ {
21
+ let diff = newValue - prevValue;
22
+ if (diff) {
23
+ if ("number" == typeof decimalPlaces) diff = newValue.toFixed(decimalPlaces) - prevValue.toFixed(decimalPlaces);
24
+ }
25
+ if (!diff) return "";
26
+ if ("" === direction) if (diff < 0) return DOWN1;
27
+ else return UP1;
28
+ if (diff > 0) if (direction === DOWN1 || direction === DOWN2 || direction === UP2) return UP1;
29
+ else return UP2;
30
+ else if (direction === UP1 || direction === UP2 || direction === DOWN2) return DOWN1;
31
+ else return DOWN2;
32
+ }
33
+ }
34
+ function asInteger(value, defaultValue) {
35
+ if ("number" == typeof value) return Number.isInteger(value) ? value : value < 0 ? Math.ceil(value) : Math.floor(value);
36
+ {
37
+ const integerValue = parseInt(value ?? "");
38
+ if (!isNaN(integerValue)) return integerValue;
39
+ if ("number" == typeof defaultValue) return defaultValue;
40
+ throw Error(`parseIndex invalid value ${value}`);
41
+ }
42
+ }
43
+ const dataDescriptorTypeToVuuRowDataItemType = ({ serverDataType = "string" })=>{
44
+ switch(serverDataType){
45
+ case "double":
46
+ case "int":
47
+ case "long":
48
+ return "number";
49
+ case "boolean":
50
+ return "boolean";
51
+ default:
52
+ return "string";
53
+ }
54
+ };
55
+ export { DOWN1, DOWN2, UP1, UP2, asInteger, dataDescriptorTypeToVuuRowDataItemType, getMovingValueDirection, isValidNumber, numericTypeOfStringValue, shallowEquals, stringIsValidDecimal, stringIsValidInt, stringIsValidNumber };