@vuu-ui/vuu-utils 0.13.6 → 0.13.7

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 (446) hide show
  1. package/cjs/node_modules/@dnd-kit/abstract/index.js +625 -0
  2. package/cjs/node_modules/@dnd-kit/abstract/index.js.map +1 -0
  3. package/cjs/node_modules/@dnd-kit/abstract/modifiers.js +85 -0
  4. package/cjs/node_modules/@dnd-kit/abstract/modifiers.js.map +1 -0
  5. package/cjs/node_modules/@dnd-kit/collision/dist/index.js +91 -0
  6. package/cjs/node_modules/@dnd-kit/collision/dist/index.js.map +1 -0
  7. package/cjs/node_modules/@dnd-kit/dom/index.js +1649 -0
  8. package/cjs/node_modules/@dnd-kit/dom/index.js.map +1 -0
  9. package/cjs/node_modules/@dnd-kit/dom/sortable.js +833 -0
  10. package/cjs/node_modules/@dnd-kit/dom/sortable.js.map +1 -0
  11. package/cjs/node_modules/@dnd-kit/dom/utilities.js +1389 -0
  12. package/cjs/node_modules/@dnd-kit/dom/utilities.js.map +1 -0
  13. package/cjs/node_modules/@dnd-kit/geometry/dist/index.js +310 -0
  14. package/cjs/node_modules/@dnd-kit/geometry/dist/index.js.map +1 -0
  15. package/cjs/node_modules/@dnd-kit/react/hooks.js +86 -0
  16. package/cjs/node_modules/@dnd-kit/react/hooks.js.map +1 -0
  17. package/cjs/node_modules/@dnd-kit/react/sortable.js +177 -0
  18. package/cjs/node_modules/@dnd-kit/react/sortable.js.map +1 -0
  19. package/cjs/node_modules/@dnd-kit/react/utilities.js +19 -0
  20. package/cjs/node_modules/@dnd-kit/react/utilities.js.map +1 -0
  21. package/cjs/node_modules/@dnd-kit/state/dist/index.js +272 -0
  22. package/cjs/node_modules/@dnd-kit/state/dist/index.js.map +1 -0
  23. package/cjs/node_modules/@preact/signals-core/dist/signals-core.js +11 -0
  24. package/cjs/node_modules/@preact/signals-core/dist/signals-core.js.map +1 -0
  25. package/cjs/packages/vuu-utils/src/DataWindow.js.map +1 -0
  26. package/cjs/packages/vuu-utils/src/ShellContext.js.map +1 -0
  27. package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +1 -0
  28. package/cjs/packages/vuu-utils/src/array-utils.js.map +1 -0
  29. package/cjs/packages/vuu-utils/src/box-utils.js.map +1 -0
  30. package/cjs/packages/vuu-utils/src/column-utils.js.map +1 -0
  31. package/cjs/packages/vuu-utils/src/common-types.js.map +1 -0
  32. package/cjs/packages/vuu-utils/src/component-registry.js.map +1 -0
  33. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +1 -0
  34. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +1 -0
  35. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +1 -0
  36. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -0
  37. package/cjs/packages/vuu-utils/src/cookie-utils.js.map +1 -0
  38. package/cjs/packages/vuu-utils/src/css-utils.js.map +1 -0
  39. package/cjs/packages/vuu-utils/src/data-utils.js.map +1 -0
  40. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -0
  41. package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +1 -0
  42. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -0
  43. package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js.map +1 -0
  44. package/cjs/packages/vuu-utils/src/date/date-utils.js.map +1 -0
  45. package/cjs/packages/vuu-utils/src/date/dateTimePattern.js.map +1 -0
  46. package/cjs/packages/vuu-utils/src/date/formatter.js.map +1 -0
  47. package/cjs/packages/vuu-utils/src/date/types.js.map +1 -0
  48. package/cjs/packages/vuu-utils/src/debug-utils.js.map +1 -0
  49. package/cjs/packages/vuu-utils/src/event-emitter.js.map +1 -0
  50. package/cjs/packages/vuu-utils/src/feature-utils.js.map +1 -0
  51. package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +1 -0
  52. package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js.map +1 -0
  53. package/cjs/packages/vuu-utils/src/form-utils.js.map +1 -0
  54. package/cjs/packages/vuu-utils/src/formatting-utils.js.map +1 -0
  55. package/cjs/packages/vuu-utils/src/getUniqueId.js.map +1 -0
  56. package/cjs/packages/vuu-utils/src/group-utils.js.map +1 -0
  57. package/cjs/packages/vuu-utils/src/html-utils.js.map +1 -0
  58. package/cjs/{index.js → packages/vuu-utils/src/index.js} +18 -2
  59. package/cjs/{index.js.map → packages/vuu-utils/src/index.js.map} +1 -1
  60. package/cjs/packages/vuu-utils/src/input-utils.js.map +1 -0
  61. package/cjs/packages/vuu-utils/src/invariant.js.map +1 -0
  62. package/cjs/packages/vuu-utils/src/itemToString.js.map +1 -0
  63. package/cjs/packages/vuu-utils/src/json-utils.js.map +1 -0
  64. package/cjs/packages/vuu-utils/src/keyboard-utils.js.map +1 -0
  65. package/cjs/packages/vuu-utils/src/keyset.js.map +1 -0
  66. package/cjs/packages/vuu-utils/src/list-utils.js.map +1 -0
  67. package/cjs/packages/vuu-utils/src/local-storage-utils.js.map +1 -0
  68. package/cjs/packages/vuu-utils/src/logging-utils.js.map +1 -0
  69. package/cjs/packages/vuu-utils/src/menu-utils.js.map +1 -0
  70. package/cjs/packages/vuu-utils/src/module-utils.js.map +1 -0
  71. package/cjs/packages/vuu-utils/src/moving-window.js.map +1 -0
  72. package/cjs/packages/vuu-utils/src/nanoid/index.js.map +1 -0
  73. package/cjs/packages/vuu-utils/src/perf-utils.js.map +1 -0
  74. package/cjs/packages/vuu-utils/src/promise-utils.js.map +1 -0
  75. package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +1 -0
  76. package/cjs/packages/vuu-utils/src/range-utils.js.map +1 -0
  77. package/cjs/packages/vuu-utils/src/react-utils.js.map +1 -0
  78. package/cjs/packages/vuu-utils/src/round-decimal.js.map +1 -0
  79. package/cjs/packages/vuu-utils/src/row-utils.js.map +1 -0
  80. package/cjs/packages/vuu-utils/src/selection-utils.js.map +1 -0
  81. package/cjs/packages/vuu-utils/src/shell-layout-types.js.map +1 -0
  82. package/cjs/packages/vuu-utils/src/sort-utils.js.map +1 -0
  83. package/cjs/packages/vuu-utils/src/table-schema-utils.js.map +1 -0
  84. package/cjs/packages/vuu-utils/src/text-utils.js.map +1 -0
  85. package/cjs/packages/vuu-utils/src/tree-utils.js.map +1 -0
  86. package/cjs/packages/vuu-utils/src/ts-utils.js.map +1 -0
  87. package/cjs/packages/vuu-utils/src/typeahead-utils.js.map +1 -0
  88. package/cjs/packages/vuu-utils/src/url-utils.js.map +1 -0
  89. package/cjs/packages/vuu-utils/src/useId.js.map +1 -0
  90. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +1 -0
  91. package/cjs/packages/vuu-utils/src/useStateRef.js.map +1 -0
  92. package/esm/node_modules/@dnd-kit/abstract/index.js +612 -0
  93. package/esm/node_modules/@dnd-kit/abstract/index.js.map +1 -0
  94. package/esm/node_modules/@dnd-kit/abstract/modifiers.js +82 -0
  95. package/esm/node_modules/@dnd-kit/abstract/modifiers.js.map +1 -0
  96. package/esm/node_modules/@dnd-kit/collision/dist/index.js +86 -0
  97. package/esm/node_modules/@dnd-kit/collision/dist/index.js.map +1 -0
  98. package/esm/node_modules/@dnd-kit/dom/index.js +1642 -0
  99. package/esm/node_modules/@dnd-kit/dom/index.js.map +1 -0
  100. package/esm/node_modules/@dnd-kit/dom/sortable.js +827 -0
  101. package/esm/node_modules/@dnd-kit/dom/sortable.js.map +1 -0
  102. package/esm/node_modules/@dnd-kit/dom/utilities.js +1344 -0
  103. package/esm/node_modules/@dnd-kit/dom/utilities.js.map +1 -0
  104. package/esm/node_modules/@dnd-kit/geometry/dist/index.js +303 -0
  105. package/esm/node_modules/@dnd-kit/geometry/dist/index.js.map +1 -0
  106. package/esm/node_modules/@dnd-kit/react/hooks.js +80 -0
  107. package/esm/node_modules/@dnd-kit/react/hooks.js.map +1 -0
  108. package/esm/node_modules/@dnd-kit/react/sortable.js +175 -0
  109. package/esm/node_modules/@dnd-kit/react/sortable.js.map +1 -0
  110. package/esm/node_modules/@dnd-kit/react/utilities.js +17 -0
  111. package/esm/node_modules/@dnd-kit/react/utilities.js.map +1 -0
  112. package/esm/node_modules/@dnd-kit/state/dist/index.js +259 -0
  113. package/esm/node_modules/@dnd-kit/state/dist/index.js.map +1 -0
  114. package/esm/node_modules/@preact/signals-core/dist/signals-core.js +4 -0
  115. package/esm/node_modules/@preact/signals-core/dist/signals-core.js.map +1 -0
  116. package/esm/packages/vuu-utils/src/DataWindow.js.map +1 -0
  117. package/esm/packages/vuu-utils/src/ShellContext.js.map +1 -0
  118. package/esm/packages/vuu-utils/src/ThemeProvider.js.map +1 -0
  119. package/esm/packages/vuu-utils/src/array-utils.js.map +1 -0
  120. package/esm/packages/vuu-utils/src/box-utils.js.map +1 -0
  121. package/esm/packages/vuu-utils/src/column-utils.js.map +1 -0
  122. package/esm/packages/vuu-utils/src/common-types.js.map +1 -0
  123. package/esm/packages/vuu-utils/src/component-registry.js.map +1 -0
  124. package/esm/packages/vuu-utils/src/context-definitions/DataContext.js.map +1 -0
  125. package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js.map +1 -0
  126. package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +1 -0
  127. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -0
  128. package/esm/packages/vuu-utils/src/cookie-utils.js.map +1 -0
  129. package/esm/packages/vuu-utils/src/css-utils.js.map +1 -0
  130. package/esm/packages/vuu-utils/src/data-utils.js.map +1 -0
  131. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -0
  132. package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +1 -0
  133. package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -0
  134. package/esm/packages/vuu-utils/src/datasource/datasource-utils.js.map +1 -0
  135. package/esm/packages/vuu-utils/src/date/date-utils.js.map +1 -0
  136. package/esm/packages/vuu-utils/src/date/dateTimePattern.js.map +1 -0
  137. package/esm/packages/vuu-utils/src/date/formatter.js.map +1 -0
  138. package/esm/packages/vuu-utils/src/date/types.js.map +1 -0
  139. package/esm/packages/vuu-utils/src/debug-utils.js.map +1 -0
  140. package/esm/packages/vuu-utils/src/event-emitter.js.map +1 -0
  141. package/esm/packages/vuu-utils/src/feature-utils.js.map +1 -0
  142. package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +1 -0
  143. package/esm/packages/vuu-utils/src/filters/filterAsQuery.js.map +1 -0
  144. package/esm/packages/vuu-utils/src/form-utils.js.map +1 -0
  145. package/esm/packages/vuu-utils/src/formatting-utils.js.map +1 -0
  146. package/esm/packages/vuu-utils/src/getUniqueId.js.map +1 -0
  147. package/esm/packages/vuu-utils/src/group-utils.js.map +1 -0
  148. package/esm/packages/vuu-utils/src/html-utils.js.map +1 -0
  149. package/esm/{index.js → packages/vuu-utils/src/index.js} +4 -0
  150. package/esm/{index.js.map → packages/vuu-utils/src/index.js.map} +1 -1
  151. package/esm/packages/vuu-utils/src/input-utils.js.map +1 -0
  152. package/esm/packages/vuu-utils/src/invariant.js.map +1 -0
  153. package/esm/packages/vuu-utils/src/itemToString.js.map +1 -0
  154. package/esm/packages/vuu-utils/src/json-utils.js.map +1 -0
  155. package/esm/packages/vuu-utils/src/keyboard-utils.js.map +1 -0
  156. package/esm/packages/vuu-utils/src/keyset.js.map +1 -0
  157. package/esm/packages/vuu-utils/src/list-utils.js.map +1 -0
  158. package/esm/packages/vuu-utils/src/local-storage-utils.js.map +1 -0
  159. package/esm/packages/vuu-utils/src/logging-utils.js.map +1 -0
  160. package/esm/packages/vuu-utils/src/menu-utils.js.map +1 -0
  161. package/esm/packages/vuu-utils/src/module-utils.js.map +1 -0
  162. package/esm/packages/vuu-utils/src/moving-window.js.map +1 -0
  163. package/esm/packages/vuu-utils/src/nanoid/index.js.map +1 -0
  164. package/esm/packages/vuu-utils/src/perf-utils.js.map +1 -0
  165. package/esm/packages/vuu-utils/src/promise-utils.js.map +1 -0
  166. package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +1 -0
  167. package/esm/packages/vuu-utils/src/range-utils.js.map +1 -0
  168. package/esm/packages/vuu-utils/src/react-utils.js.map +1 -0
  169. package/esm/packages/vuu-utils/src/round-decimal.js.map +1 -0
  170. package/esm/packages/vuu-utils/src/row-utils.js.map +1 -0
  171. package/esm/packages/vuu-utils/src/selection-utils.js.map +1 -0
  172. package/esm/packages/vuu-utils/src/shell-layout-types.js.map +1 -0
  173. package/esm/packages/vuu-utils/src/sort-utils.js.map +1 -0
  174. package/esm/packages/vuu-utils/src/table-schema-utils.js.map +1 -0
  175. package/esm/packages/vuu-utils/src/text-utils.js.map +1 -0
  176. package/esm/packages/vuu-utils/src/tree-utils.js.map +1 -0
  177. package/esm/packages/vuu-utils/src/ts-utils.js.map +1 -0
  178. package/esm/packages/vuu-utils/src/typeahead-utils.js.map +1 -0
  179. package/esm/packages/vuu-utils/src/url-utils.js.map +1 -0
  180. package/esm/packages/vuu-utils/src/useId.js.map +1 -0
  181. package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +1 -0
  182. package/esm/packages/vuu-utils/src/useStateRef.js.map +1 -0
  183. package/package.json +9 -6
  184. package/types/component-registry.d.ts +2 -2
  185. package/types/filters/filter-utils.d.ts +2 -2
  186. package/types/index.d.ts +5 -0
  187. package/cjs/DataWindow.js.map +0 -1
  188. package/cjs/ShellContext.js.map +0 -1
  189. package/cjs/ThemeProvider.js.map +0 -1
  190. package/cjs/array-utils.js.map +0 -1
  191. package/cjs/box-utils.js.map +0 -1
  192. package/cjs/column-utils.js.map +0 -1
  193. package/cjs/common-types.js.map +0 -1
  194. package/cjs/component-registry.js.map +0 -1
  195. package/cjs/context-definitions/DataContext.js.map +0 -1
  196. package/cjs/context-definitions/DataProvider.js.map +0 -1
  197. package/cjs/context-definitions/DataSourceProvider.js.map +0 -1
  198. package/cjs/context-definitions/WorkspaceContext.js.map +0 -1
  199. package/cjs/cookie-utils.js.map +0 -1
  200. package/cjs/css-utils.js.map +0 -1
  201. package/cjs/data-utils.js.map +0 -1
  202. package/cjs/datasource/BaseDataSource.js.map +0 -1
  203. package/cjs/datasource/datasource-action-utils.js.map +0 -1
  204. package/cjs/datasource/datasource-filter-utils.js.map +0 -1
  205. package/cjs/datasource/datasource-utils.js.map +0 -1
  206. package/cjs/date/date-utils.js.map +0 -1
  207. package/cjs/date/dateTimePattern.js.map +0 -1
  208. package/cjs/date/formatter.js.map +0 -1
  209. package/cjs/date/types.js.map +0 -1
  210. package/cjs/debug-utils.js.map +0 -1
  211. package/cjs/event-emitter.js.map +0 -1
  212. package/cjs/feature-utils.js.map +0 -1
  213. package/cjs/filters/filter-utils.js.map +0 -1
  214. package/cjs/filters/filterAsQuery.js.map +0 -1
  215. package/cjs/form-utils.js.map +0 -1
  216. package/cjs/formatting-utils.js.map +0 -1
  217. package/cjs/getUniqueId.js.map +0 -1
  218. package/cjs/group-utils.js.map +0 -1
  219. package/cjs/html-utils.js.map +0 -1
  220. package/cjs/input-utils.js.map +0 -1
  221. package/cjs/invariant.js.map +0 -1
  222. package/cjs/itemToString.js.map +0 -1
  223. package/cjs/json-utils.js.map +0 -1
  224. package/cjs/keyboard-utils.js.map +0 -1
  225. package/cjs/keyset.js.map +0 -1
  226. package/cjs/list-utils.js.map +0 -1
  227. package/cjs/local-storage-utils.js.map +0 -1
  228. package/cjs/logging-utils.js.map +0 -1
  229. package/cjs/menu-utils.js.map +0 -1
  230. package/cjs/module-utils.js.map +0 -1
  231. package/cjs/moving-window.js.map +0 -1
  232. package/cjs/nanoid/index.js.map +0 -1
  233. package/cjs/perf-utils.js.map +0 -1
  234. package/cjs/promise-utils.js.map +0 -1
  235. package/cjs/protocol-message-utils.js.map +0 -1
  236. package/cjs/range-utils.js.map +0 -1
  237. package/cjs/react-utils.js.map +0 -1
  238. package/cjs/round-decimal.js.map +0 -1
  239. package/cjs/row-utils.js.map +0 -1
  240. package/cjs/selection-utils.js.map +0 -1
  241. package/cjs/shell-layout-types.js.map +0 -1
  242. package/cjs/sort-utils.js.map +0 -1
  243. package/cjs/table-schema-utils.js.map +0 -1
  244. package/cjs/text-utils.js.map +0 -1
  245. package/cjs/tree-utils.js.map +0 -1
  246. package/cjs/ts-utils.js.map +0 -1
  247. package/cjs/typeahead-utils.js.map +0 -1
  248. package/cjs/url-utils.js.map +0 -1
  249. package/cjs/useId.js.map +0 -1
  250. package/cjs/useLayoutEffectSkipFirst.js.map +0 -1
  251. package/cjs/useStateRef.js.map +0 -1
  252. package/esm/DataWindow.js.map +0 -1
  253. package/esm/ShellContext.js.map +0 -1
  254. package/esm/ThemeProvider.js.map +0 -1
  255. package/esm/array-utils.js.map +0 -1
  256. package/esm/box-utils.js.map +0 -1
  257. package/esm/column-utils.js.map +0 -1
  258. package/esm/common-types.js.map +0 -1
  259. package/esm/component-registry.js.map +0 -1
  260. package/esm/context-definitions/DataContext.js.map +0 -1
  261. package/esm/context-definitions/DataProvider.js.map +0 -1
  262. package/esm/context-definitions/DataSourceProvider.js.map +0 -1
  263. package/esm/context-definitions/WorkspaceContext.js.map +0 -1
  264. package/esm/cookie-utils.js.map +0 -1
  265. package/esm/css-utils.js.map +0 -1
  266. package/esm/data-utils.js.map +0 -1
  267. package/esm/datasource/BaseDataSource.js.map +0 -1
  268. package/esm/datasource/datasource-action-utils.js.map +0 -1
  269. package/esm/datasource/datasource-filter-utils.js.map +0 -1
  270. package/esm/datasource/datasource-utils.js.map +0 -1
  271. package/esm/date/date-utils.js.map +0 -1
  272. package/esm/date/dateTimePattern.js.map +0 -1
  273. package/esm/date/formatter.js.map +0 -1
  274. package/esm/date/types.js.map +0 -1
  275. package/esm/debug-utils.js.map +0 -1
  276. package/esm/event-emitter.js.map +0 -1
  277. package/esm/feature-utils.js.map +0 -1
  278. package/esm/filters/filter-utils.js.map +0 -1
  279. package/esm/filters/filterAsQuery.js.map +0 -1
  280. package/esm/form-utils.js.map +0 -1
  281. package/esm/formatting-utils.js.map +0 -1
  282. package/esm/getUniqueId.js.map +0 -1
  283. package/esm/group-utils.js.map +0 -1
  284. package/esm/html-utils.js.map +0 -1
  285. package/esm/input-utils.js.map +0 -1
  286. package/esm/invariant.js.map +0 -1
  287. package/esm/itemToString.js.map +0 -1
  288. package/esm/json-utils.js.map +0 -1
  289. package/esm/keyboard-utils.js.map +0 -1
  290. package/esm/keyset.js.map +0 -1
  291. package/esm/list-utils.js.map +0 -1
  292. package/esm/local-storage-utils.js.map +0 -1
  293. package/esm/logging-utils.js.map +0 -1
  294. package/esm/menu-utils.js.map +0 -1
  295. package/esm/module-utils.js.map +0 -1
  296. package/esm/moving-window.js.map +0 -1
  297. package/esm/nanoid/index.js.map +0 -1
  298. package/esm/perf-utils.js.map +0 -1
  299. package/esm/promise-utils.js.map +0 -1
  300. package/esm/protocol-message-utils.js.map +0 -1
  301. package/esm/range-utils.js.map +0 -1
  302. package/esm/react-utils.js.map +0 -1
  303. package/esm/round-decimal.js.map +0 -1
  304. package/esm/row-utils.js.map +0 -1
  305. package/esm/selection-utils.js.map +0 -1
  306. package/esm/shell-layout-types.js.map +0 -1
  307. package/esm/sort-utils.js.map +0 -1
  308. package/esm/table-schema-utils.js.map +0 -1
  309. package/esm/text-utils.js.map +0 -1
  310. package/esm/tree-utils.js.map +0 -1
  311. package/esm/ts-utils.js.map +0 -1
  312. package/esm/typeahead-utils.js.map +0 -1
  313. package/esm/url-utils.js.map +0 -1
  314. package/esm/useId.js.map +0 -1
  315. package/esm/useLayoutEffectSkipFirst.js.map +0 -1
  316. package/esm/useStateRef.js.map +0 -1
  317. /package/cjs/{DataWindow.js → packages/vuu-utils/src/DataWindow.js} +0 -0
  318. /package/cjs/{ShellContext.js → packages/vuu-utils/src/ShellContext.js} +0 -0
  319. /package/cjs/{ThemeProvider.js → packages/vuu-utils/src/ThemeProvider.js} +0 -0
  320. /package/cjs/{array-utils.js → packages/vuu-utils/src/array-utils.js} +0 -0
  321. /package/cjs/{box-utils.js → packages/vuu-utils/src/box-utils.js} +0 -0
  322. /package/cjs/{column-utils.js → packages/vuu-utils/src/column-utils.js} +0 -0
  323. /package/cjs/{common-types.js → packages/vuu-utils/src/common-types.js} +0 -0
  324. /package/cjs/{component-registry.js → packages/vuu-utils/src/component-registry.js} +0 -0
  325. /package/cjs/{context-definitions → packages/vuu-utils/src/context-definitions}/DataContext.js +0 -0
  326. /package/cjs/{context-definitions → packages/vuu-utils/src/context-definitions}/DataProvider.js +0 -0
  327. /package/cjs/{context-definitions → packages/vuu-utils/src/context-definitions}/DataSourceProvider.js +0 -0
  328. /package/cjs/{context-definitions → packages/vuu-utils/src/context-definitions}/WorkspaceContext.js +0 -0
  329. /package/cjs/{cookie-utils.js → packages/vuu-utils/src/cookie-utils.js} +0 -0
  330. /package/cjs/{css-utils.js → packages/vuu-utils/src/css-utils.js} +0 -0
  331. /package/cjs/{data-utils.js → packages/vuu-utils/src/data-utils.js} +0 -0
  332. /package/cjs/{datasource → packages/vuu-utils/src/datasource}/BaseDataSource.js +0 -0
  333. /package/cjs/{datasource → packages/vuu-utils/src/datasource}/datasource-action-utils.js +0 -0
  334. /package/cjs/{datasource → packages/vuu-utils/src/datasource}/datasource-filter-utils.js +0 -0
  335. /package/cjs/{datasource → packages/vuu-utils/src/datasource}/datasource-utils.js +0 -0
  336. /package/cjs/{date → packages/vuu-utils/src/date}/date-utils.js +0 -0
  337. /package/cjs/{date → packages/vuu-utils/src/date}/dateTimePattern.js +0 -0
  338. /package/cjs/{date → packages/vuu-utils/src/date}/formatter.js +0 -0
  339. /package/cjs/{date → packages/vuu-utils/src/date}/types.js +0 -0
  340. /package/cjs/{debug-utils.js → packages/vuu-utils/src/debug-utils.js} +0 -0
  341. /package/cjs/{event-emitter.js → packages/vuu-utils/src/event-emitter.js} +0 -0
  342. /package/cjs/{feature-utils.js → packages/vuu-utils/src/feature-utils.js} +0 -0
  343. /package/cjs/{filters → packages/vuu-utils/src/filters}/filter-utils.js +0 -0
  344. /package/cjs/{filters → packages/vuu-utils/src/filters}/filterAsQuery.js +0 -0
  345. /package/cjs/{form-utils.js → packages/vuu-utils/src/form-utils.js} +0 -0
  346. /package/cjs/{formatting-utils.js → packages/vuu-utils/src/formatting-utils.js} +0 -0
  347. /package/cjs/{getUniqueId.js → packages/vuu-utils/src/getUniqueId.js} +0 -0
  348. /package/cjs/{group-utils.js → packages/vuu-utils/src/group-utils.js} +0 -0
  349. /package/cjs/{html-utils.js → packages/vuu-utils/src/html-utils.js} +0 -0
  350. /package/cjs/{input-utils.js → packages/vuu-utils/src/input-utils.js} +0 -0
  351. /package/cjs/{invariant.js → packages/vuu-utils/src/invariant.js} +0 -0
  352. /package/cjs/{itemToString.js → packages/vuu-utils/src/itemToString.js} +0 -0
  353. /package/cjs/{json-utils.js → packages/vuu-utils/src/json-utils.js} +0 -0
  354. /package/cjs/{keyboard-utils.js → packages/vuu-utils/src/keyboard-utils.js} +0 -0
  355. /package/cjs/{keyset.js → packages/vuu-utils/src/keyset.js} +0 -0
  356. /package/cjs/{list-utils.js → packages/vuu-utils/src/list-utils.js} +0 -0
  357. /package/cjs/{local-storage-utils.js → packages/vuu-utils/src/local-storage-utils.js} +0 -0
  358. /package/cjs/{logging-utils.js → packages/vuu-utils/src/logging-utils.js} +0 -0
  359. /package/cjs/{menu-utils.js → packages/vuu-utils/src/menu-utils.js} +0 -0
  360. /package/cjs/{module-utils.js → packages/vuu-utils/src/module-utils.js} +0 -0
  361. /package/cjs/{moving-window.js → packages/vuu-utils/src/moving-window.js} +0 -0
  362. /package/cjs/{nanoid → packages/vuu-utils/src/nanoid}/index.js +0 -0
  363. /package/cjs/{perf-utils.js → packages/vuu-utils/src/perf-utils.js} +0 -0
  364. /package/cjs/{promise-utils.js → packages/vuu-utils/src/promise-utils.js} +0 -0
  365. /package/cjs/{protocol-message-utils.js → packages/vuu-utils/src/protocol-message-utils.js} +0 -0
  366. /package/cjs/{range-utils.js → packages/vuu-utils/src/range-utils.js} +0 -0
  367. /package/cjs/{react-utils.js → packages/vuu-utils/src/react-utils.js} +0 -0
  368. /package/cjs/{round-decimal.js → packages/vuu-utils/src/round-decimal.js} +0 -0
  369. /package/cjs/{row-utils.js → packages/vuu-utils/src/row-utils.js} +0 -0
  370. /package/cjs/{selection-utils.js → packages/vuu-utils/src/selection-utils.js} +0 -0
  371. /package/cjs/{shell-layout-types.js → packages/vuu-utils/src/shell-layout-types.js} +0 -0
  372. /package/cjs/{sort-utils.js → packages/vuu-utils/src/sort-utils.js} +0 -0
  373. /package/cjs/{table-schema-utils.js → packages/vuu-utils/src/table-schema-utils.js} +0 -0
  374. /package/cjs/{text-utils.js → packages/vuu-utils/src/text-utils.js} +0 -0
  375. /package/cjs/{tree-utils.js → packages/vuu-utils/src/tree-utils.js} +0 -0
  376. /package/cjs/{ts-utils.js → packages/vuu-utils/src/ts-utils.js} +0 -0
  377. /package/cjs/{typeahead-utils.js → packages/vuu-utils/src/typeahead-utils.js} +0 -0
  378. /package/cjs/{url-utils.js → packages/vuu-utils/src/url-utils.js} +0 -0
  379. /package/cjs/{useId.js → packages/vuu-utils/src/useId.js} +0 -0
  380. /package/cjs/{useLayoutEffectSkipFirst.js → packages/vuu-utils/src/useLayoutEffectSkipFirst.js} +0 -0
  381. /package/cjs/{useStateRef.js → packages/vuu-utils/src/useStateRef.js} +0 -0
  382. /package/esm/{DataWindow.js → packages/vuu-utils/src/DataWindow.js} +0 -0
  383. /package/esm/{ShellContext.js → packages/vuu-utils/src/ShellContext.js} +0 -0
  384. /package/esm/{ThemeProvider.js → packages/vuu-utils/src/ThemeProvider.js} +0 -0
  385. /package/esm/{array-utils.js → packages/vuu-utils/src/array-utils.js} +0 -0
  386. /package/esm/{box-utils.js → packages/vuu-utils/src/box-utils.js} +0 -0
  387. /package/esm/{column-utils.js → packages/vuu-utils/src/column-utils.js} +0 -0
  388. /package/esm/{common-types.js → packages/vuu-utils/src/common-types.js} +0 -0
  389. /package/esm/{component-registry.js → packages/vuu-utils/src/component-registry.js} +0 -0
  390. /package/esm/{context-definitions → packages/vuu-utils/src/context-definitions}/DataContext.js +0 -0
  391. /package/esm/{context-definitions → packages/vuu-utils/src/context-definitions}/DataProvider.js +0 -0
  392. /package/esm/{context-definitions → packages/vuu-utils/src/context-definitions}/DataSourceProvider.js +0 -0
  393. /package/esm/{context-definitions → packages/vuu-utils/src/context-definitions}/WorkspaceContext.js +0 -0
  394. /package/esm/{cookie-utils.js → packages/vuu-utils/src/cookie-utils.js} +0 -0
  395. /package/esm/{css-utils.js → packages/vuu-utils/src/css-utils.js} +0 -0
  396. /package/esm/{data-utils.js → packages/vuu-utils/src/data-utils.js} +0 -0
  397. /package/esm/{datasource → packages/vuu-utils/src/datasource}/BaseDataSource.js +0 -0
  398. /package/esm/{datasource → packages/vuu-utils/src/datasource}/datasource-action-utils.js +0 -0
  399. /package/esm/{datasource → packages/vuu-utils/src/datasource}/datasource-filter-utils.js +0 -0
  400. /package/esm/{datasource → packages/vuu-utils/src/datasource}/datasource-utils.js +0 -0
  401. /package/esm/{date → packages/vuu-utils/src/date}/date-utils.js +0 -0
  402. /package/esm/{date → packages/vuu-utils/src/date}/dateTimePattern.js +0 -0
  403. /package/esm/{date → packages/vuu-utils/src/date}/formatter.js +0 -0
  404. /package/esm/{date → packages/vuu-utils/src/date}/types.js +0 -0
  405. /package/esm/{debug-utils.js → packages/vuu-utils/src/debug-utils.js} +0 -0
  406. /package/esm/{event-emitter.js → packages/vuu-utils/src/event-emitter.js} +0 -0
  407. /package/esm/{feature-utils.js → packages/vuu-utils/src/feature-utils.js} +0 -0
  408. /package/esm/{filters → packages/vuu-utils/src/filters}/filter-utils.js +0 -0
  409. /package/esm/{filters → packages/vuu-utils/src/filters}/filterAsQuery.js +0 -0
  410. /package/esm/{form-utils.js → packages/vuu-utils/src/form-utils.js} +0 -0
  411. /package/esm/{formatting-utils.js → packages/vuu-utils/src/formatting-utils.js} +0 -0
  412. /package/esm/{getUniqueId.js → packages/vuu-utils/src/getUniqueId.js} +0 -0
  413. /package/esm/{group-utils.js → packages/vuu-utils/src/group-utils.js} +0 -0
  414. /package/esm/{html-utils.js → packages/vuu-utils/src/html-utils.js} +0 -0
  415. /package/esm/{input-utils.js → packages/vuu-utils/src/input-utils.js} +0 -0
  416. /package/esm/{invariant.js → packages/vuu-utils/src/invariant.js} +0 -0
  417. /package/esm/{itemToString.js → packages/vuu-utils/src/itemToString.js} +0 -0
  418. /package/esm/{json-utils.js → packages/vuu-utils/src/json-utils.js} +0 -0
  419. /package/esm/{keyboard-utils.js → packages/vuu-utils/src/keyboard-utils.js} +0 -0
  420. /package/esm/{keyset.js → packages/vuu-utils/src/keyset.js} +0 -0
  421. /package/esm/{list-utils.js → packages/vuu-utils/src/list-utils.js} +0 -0
  422. /package/esm/{local-storage-utils.js → packages/vuu-utils/src/local-storage-utils.js} +0 -0
  423. /package/esm/{logging-utils.js → packages/vuu-utils/src/logging-utils.js} +0 -0
  424. /package/esm/{menu-utils.js → packages/vuu-utils/src/menu-utils.js} +0 -0
  425. /package/esm/{module-utils.js → packages/vuu-utils/src/module-utils.js} +0 -0
  426. /package/esm/{moving-window.js → packages/vuu-utils/src/moving-window.js} +0 -0
  427. /package/esm/{nanoid → packages/vuu-utils/src/nanoid}/index.js +0 -0
  428. /package/esm/{perf-utils.js → packages/vuu-utils/src/perf-utils.js} +0 -0
  429. /package/esm/{promise-utils.js → packages/vuu-utils/src/promise-utils.js} +0 -0
  430. /package/esm/{protocol-message-utils.js → packages/vuu-utils/src/protocol-message-utils.js} +0 -0
  431. /package/esm/{range-utils.js → packages/vuu-utils/src/range-utils.js} +0 -0
  432. /package/esm/{react-utils.js → packages/vuu-utils/src/react-utils.js} +0 -0
  433. /package/esm/{round-decimal.js → packages/vuu-utils/src/round-decimal.js} +0 -0
  434. /package/esm/{row-utils.js → packages/vuu-utils/src/row-utils.js} +0 -0
  435. /package/esm/{selection-utils.js → packages/vuu-utils/src/selection-utils.js} +0 -0
  436. /package/esm/{shell-layout-types.js → packages/vuu-utils/src/shell-layout-types.js} +0 -0
  437. /package/esm/{sort-utils.js → packages/vuu-utils/src/sort-utils.js} +0 -0
  438. /package/esm/{table-schema-utils.js → packages/vuu-utils/src/table-schema-utils.js} +0 -0
  439. /package/esm/{text-utils.js → packages/vuu-utils/src/text-utils.js} +0 -0
  440. /package/esm/{tree-utils.js → packages/vuu-utils/src/tree-utils.js} +0 -0
  441. /package/esm/{ts-utils.js → packages/vuu-utils/src/ts-utils.js} +0 -0
  442. /package/esm/{typeahead-utils.js → packages/vuu-utils/src/typeahead-utils.js} +0 -0
  443. /package/esm/{url-utils.js → packages/vuu-utils/src/url-utils.js} +0 -0
  444. /package/esm/{useId.js → packages/vuu-utils/src/useId.js} +0 -0
  445. /package/esm/{useLayoutEffectSkipFirst.js → packages/vuu-utils/src/useLayoutEffectSkipFirst.js} +0 -0
  446. /package/esm/{useStateRef.js → packages/vuu-utils/src/useStateRef.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"column-utils.js","sources":["../src/column-utils.ts"],"sourcesContent":["import type {\n DataSourceRow,\n DataValueType,\n DataValueTypeSimple,\n DateTimeDataValueDescriptor,\n SchemaColumn,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuAggType,\n VuuAggregation,\n VuuColumnDataType,\n VuuDataRow,\n VuuDataRowDto,\n VuuGroupBy,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type {\n ColumnAlignment,\n ColumnDescriptor,\n ColumnLayout,\n DataValueTypeDescriptor,\n ColumnTypeFormatting,\n ColumnTypeRendering,\n ColumnTypeWithValidationRules,\n DefaultColumnConfiguration,\n GroupColumnDescriptor,\n LookupRenderer,\n MappedValueTypeRenderer,\n PinLocation,\n RuntimeColumnDescriptor,\n TableCellRendererProps,\n TableConfig,\n TableHeading,\n TableHeadings,\n ValueListRenderer,\n} from \"@vuu-ui/vuu-table-types\";\nimport { type CSSProperties } from \"react\";\nimport { moveItem } from \"./array-utils\";\nimport { TableModel } from \"@vuu-ui/vuu-table\";\n\n/**\n * ColumnMap provides a lookup of the index position of a data item within a row\n * by column name.\n */\nexport interface ColumnMap {\n [columnName: string]: number;\n}\n\nconst SORT_ASC = \"asc\";\nconst NO_HEADINGS: TableHeadings = [];\nconst DEFAULT_COL_WIDTH = 100;\nconst DEFAULT_MAX_WIDTH = 250;\nconst DEFAULT_MIN_WIDTH = 50;\n// const DEFAULT_FLEX = 0;\n\nexport type SortCriteriaItem = string | [string, \"asc\"]; // TODO where is 'desc'?\n\nexport const AggregationType: { [key: string]: VuuAggType } = {\n Average: 2,\n Count: 3,\n Distinct: 6,\n Sum: 1,\n High: 4,\n Low: 5,\n};\n\nexport function mapSortCriteria(\n sortCriteria: SortCriteriaItem[],\n columnMap: ColumnMap,\n metadataOffset = 0,\n): [number, \"asc\"][] {\n return sortCriteria.map((s) => {\n if (typeof s === \"string\") {\n return [columnMap[s] + metadataOffset, \"asc\"];\n } else if (Array.isArray(s)) {\n const [columnName, sortDir] = s;\n return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];\n } else {\n throw Error(\"columnUtils.mapSortCriteria invalid input\");\n }\n });\n}\n\nconst numericTypes = [\"int\", \"long\", \"double\"];\nexport const getDefaultAlignment = (\n serverDataType?: VuuColumnDataType,\n): ColumnAlignment =>\n serverDataType === undefined\n ? \"left\"\n : numericTypes.includes(serverDataType)\n ? \"right\"\n : \"left\";\n\nexport const getRuntimeColumnWidth = (\n col: ColumnDescriptor,\n runtimeColumns: RuntimeColumnDescriptor[],\n) => {\n const runtimeColumn = runtimeColumns.find(({ name }) => name === col.name);\n if (runtimeColumn) {\n return runtimeColumn.width;\n } else {\n return DEFAULT_COL_WIDTH;\n }\n};\n\n// Save the current runtime column widths into the table column config. We do this\n// when user has manually resized a column under a fit layout. From this point,\n// layout becomes manual - there will be no further automatic column sizing.\nexport const applyRuntimeColumnWidthsToConfig = (\n tableConfig: TableConfig,\n columns: RuntimeColumnDescriptor[],\n): TableConfig => {\n return {\n ...tableConfig,\n columns: columns.map((column) => ({\n ...column,\n width: column.width ?? getRuntimeColumnWidth(column, columns),\n })),\n columnLayout: \"manual\",\n };\n};\n\nexport const isValidColumnAlignment = (v: string): v is ColumnAlignment =>\n v === \"left\" || v === \"right\";\n\nexport const isValidPinLocation = (v: string): v is PinLocation =>\n isValidColumnAlignment(v) || v === \"floating\" || v === \"\";\n\nexport type CalculatedColumn = {\n name: string;\n expression: string;\n serverDataType: VuuColumnDataType;\n};\n\nconst VUU_COLUMN_DATA_TYPES: (string | undefined | null)[] = [\n \"long\",\n \"double\",\n \"int\",\n \"string\",\n \"char\",\n \"boolean\",\n];\n\nexport const isVuuColumnDataType = (\n value: string | undefined | null,\n): value is VuuColumnDataType => VUU_COLUMN_DATA_TYPES.includes(value);\n\nexport const fromServerDataType = (\n serverDataType: VuuColumnDataType,\n): DataValueTypeSimple => {\n switch (serverDataType) {\n case \"double\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"string\";\n }\n};\n\nexport const isNumericColumn = ({ serverDataType, type }: ColumnDescriptor) => {\n if (\n serverDataType === \"int\" ||\n serverDataType === \"long\" ||\n serverDataType === \"double\"\n ) {\n return true;\n }\n if (typeof type === \"string\") {\n return type === \"number\";\n }\n if (typeof type?.name === \"string\") {\n return type?.name === \"number\";\n }\n\n return false;\n};\n\nexport const isDateTimeDataValue = (\n column: ColumnDescriptor,\n): column is DateTimeDataValueDescriptor =>\n (isTypeDescriptor(column.type) ? column.type.name : column.type) ===\n \"date/time\";\n\nexport const isPinned = (column: ColumnDescriptor) =>\n typeof column.pin === \"string\";\n\nexport const hasHeadings = (column: ColumnDescriptor) =>\n Array.isArray(column.heading) && column.heading.length > 0;\n\nexport const isResizing = (column: RuntimeColumnDescriptor) => column.resizing;\n\nexport const isTextColumn = ({ serverDataType }: ColumnDescriptor) =>\n serverDataType === undefined\n ? false\n : serverDataType === \"char\" || serverDataType === \"string\";\n\nexport const toColumnDescriptor = (name: string): ColumnDescriptor => ({\n name,\n});\n\n/**\n *\n */\nexport const isTypeDescriptor = (\n type?: DataValueType,\n): type is DataValueTypeDescriptor =>\n typeof type !== \"undefined\" && typeof type !== \"string\";\n\nconst EMPTY_COLUMN_MAP = {} as const;\n\nexport const isColumnTypeRenderer = (\n renderer?: unknown,\n): renderer is ColumnTypeRendering =>\n typeof (renderer as ColumnTypeRendering)?.name !== \"undefined\";\n\nexport const hasCustomRenderer = (\n type?: DataValueType,\n): type is DataValueTypeDescriptor =>\n isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer);\n\nexport const isLookupRenderer = (\n renderer?: unknown,\n): renderer is LookupRenderer =>\n typeof (renderer as LookupRenderer)?.name !== \"undefined\" &&\n \"lookup\" in (renderer as LookupRenderer);\n\nexport const isValueListRenderer = (\n renderer?: unknown,\n): renderer is ValueListRenderer =>\n typeof (renderer as ValueListRenderer)?.name !== \"undefined\" &&\n Array.isArray((renderer as ValueListRenderer).values);\n\nexport const hasValidationRules = (\n type?: DataValueType,\n): type is ColumnTypeWithValidationRules =>\n isTypeDescriptor(type) && Array.isArray(type.rules) && type.rules.length > 0;\n\nexport const isMappedValueTypeRenderer = (\n renderer?: unknown,\n): renderer is MappedValueTypeRenderer =>\n renderer !== undefined &&\n typeof (renderer as MappedValueTypeRenderer)?.map !== \"undefined\";\n\nexport function buildColumnMap(\n columns?: (ColumnDescriptor | SchemaColumn | string)[],\n): ColumnMap {\n const start = metadataKeys.count;\n if (columns) {\n return columns.reduce((map, column, i) => {\n if (typeof column === \"string\") {\n map[column] = start + i;\n } else {\n map[column.name] = start + i;\n }\n return map;\n }, {} as ColumnMap);\n } else {\n return EMPTY_COLUMN_MAP;\n }\n}\n\nexport function projectUpdates(updates: number[]): number[] {\n const results: number[] = [];\n const metadataOffset = metadataKeys.count - 2;\n for (let i = 0; i < updates.length; i += 3) {\n results[i] = updates[i] + metadataOffset;\n results[i + 1] = updates[i + 1];\n results[i + 2] = updates[i + 2];\n }\n return results;\n}\n\nconst KEY = 6;\n\nexport const metadataKeys = {\n IDX: 0,\n RENDER_IDX: 1,\n IS_LEAF: 2,\n IS_EXPANDED: 3,\n DEPTH: 4,\n COUNT: 5,\n KEY,\n SELECTED: 7,\n count: 8,\n // TODO following only used in datamodel\n PARENT_IDX: \"parent_idx\",\n IDX_POINTER: \"idx_pointer\",\n FILTER_COUNT: \"filter_count\",\n NEXT_FILTER_IDX: \"next_filter_idx\",\n} as const;\n\n// This method mutates the passed columns array\nconst insertColumn = (\n columns: RuntimeColumnDescriptor[],\n column: RuntimeColumnDescriptor,\n) => {\n const { originalIdx } = column;\n if (typeof originalIdx === \"number\") {\n for (let i = 0; i < columns.length; i++) {\n const { originalIdx: colIdx = -1 } = columns[i];\n if (colIdx > originalIdx) {\n columns.splice(i, 0, column);\n return columns;\n }\n }\n }\n columns.push(column);\n return columns;\n};\n\nexport const flattenColumnGroup = (\n columns: RuntimeColumnDescriptor[],\n): RuntimeColumnDescriptor[] => {\n if (columns[0]?.isGroup) {\n const [groupColumn, ...nonGroupedColumns] = columns as [\n GroupColumnDescriptor,\n ...RuntimeColumnDescriptor[],\n ];\n groupColumn.columns.forEach((groupColumn) => {\n insertColumn(nonGroupedColumns, groupColumn);\n });\n return nonGroupedColumns;\n } else {\n return columns;\n }\n};\n\nexport function extractGroupColumn({\n availableWidth,\n columns,\n groupBy,\n confirmed = true,\n}: ColumnGroupProps): [\n GroupColumnDescriptor | null,\n RuntimeColumnDescriptor[],\n] {\n if (groupBy && groupBy.length > 0) {\n const flattenedColumns = flattenColumnGroup(columns);\n // Note: groupedColumns will be in column order, not groupBy order\n const [groupedColumns, rest] = flattenedColumns.reduce<\n [RuntimeColumnDescriptor[], RuntimeColumnDescriptor[]]\n >(\n (result, column, i) => {\n const [g, r] = result;\n if (groupBy.includes(column.name)) {\n g.push({\n ...column,\n originalIdx: i,\n });\n } else {\n r.push(column);\n }\n\n return result;\n },\n [[], []],\n );\n if (groupedColumns.length !== groupBy.length) {\n throw Error(\n `extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(\n groupBy,\n )} `,\n );\n }\n\n const groupOnly = rest.length === 0;\n\n const groupCount = groupBy.length;\n const groupCols: RuntimeColumnDescriptor[] = groupBy.map((name, idx) => {\n // Keep the cols in same order defined on groupBy\n const column = groupedColumns.find(\n (col) => col.name === name,\n ) as RuntimeColumnDescriptor;\n return {\n ...column,\n groupLevel: groupCount - idx,\n };\n });\n\n const width = groupOnly\n ? availableWidth\n : Math.min(\n availableWidth,\n groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100,\n );\n\n const groupCol = {\n ariaColIndex: 1,\n columns: groupCols,\n heading: [\"group-col\"],\n isGroup: true,\n groupConfirmed: confirmed,\n name: \"group-col\",\n width,\n } as GroupColumnDescriptor;\n\n const withAdjustedAriaIndex: RuntimeColumnDescriptor[] = [];\n let colIndex = 2;\n for (const column of rest) {\n withAdjustedAriaIndex.push({\n ...column,\n ariaColIndex: column.hidden ? -1 : colIndex,\n });\n if (!column.hidden) {\n colIndex += 1;\n }\n }\n\n return [groupCol, withAdjustedAriaIndex];\n }\n return [null, flattenColumnGroup(columns)];\n}\n\nexport const isGroupColumn = (\n column: RuntimeColumnDescriptor,\n): column is GroupColumnDescriptor => column.isGroup === true;\n\n/**\n * groupConfirmed is currently the only 'pending' attribute we use. A\n * value of true is only reset by a follow-up value of false. Intermediary\n * values of undefined are discounted.\n */\nexport const checkConfirmationPending = (previousConfig?: TableModel) => {\n if (previousConfig) {\n const [column] = previousConfig.columns;\n if (isGroupColumn(column)) {\n return column.groupConfirmed;\n }\n }\n};\n\nexport const isJsonAttribute = (value: unknown) =>\n typeof value === \"string\" && (value.endsWith(\"{\") || value.endsWith(\"[\"));\n\nexport const isJsonGroup = (\n column: RuntimeColumnDescriptor,\n row: VuuDataRow,\n columnMap: ColumnMap,\n) =>\n (column.type as DataValueTypeDescriptor)?.name === \"json\" &&\n isJsonAttribute(row[columnMap[column.name]]);\n\nexport const isJsonColumn = (column: RuntimeColumnDescriptor) =>\n (column.type as DataValueTypeDescriptor)?.name === \"json\";\n\nexport const sortPinnedColumns = (\n columns: RuntimeColumnDescriptor[],\n): RuntimeColumnDescriptor[] => {\n const leftPinnedColumns: RuntimeColumnDescriptor[] = [];\n const rightPinnedColumns: RuntimeColumnDescriptor[] = [];\n const restColumns: RuntimeColumnDescriptor[] = [];\n // 4 is the selectionEndSize, need to consider how we make this available\n let pinnedWidthLeft = 4;\n for (const column of columns) {\n // prettier-ignore\n switch(column.pin){\n case \"left\": {\n leftPinnedColumns.push({\n ...column,\n endPin: undefined,\n pinnedOffset: pinnedWidthLeft\n });\n pinnedWidthLeft += column.width;\n }\n break;\n // store right pinned columns initially in reverse order\n case \"right\": rightPinnedColumns.unshift(column); break;\n default: restColumns.push(column)\n }\n }\n\n if (leftPinnedColumns.length) {\n leftPinnedColumns.push({\n ...(leftPinnedColumns.pop() as RuntimeColumnDescriptor),\n endPin: true,\n });\n }\n\n const allColumns = leftPinnedColumns.length\n ? leftPinnedColumns.concat(restColumns)\n : restColumns;\n\n if (rightPinnedColumns.length) {\n const measuredRightPinnedColumns: RuntimeColumnDescriptor[] = [];\n let pinnedWidthRight = 0;\n for (const column of rightPinnedColumns) {\n measuredRightPinnedColumns.unshift({\n ...column,\n pinnedOffset: pinnedWidthRight,\n });\n pinnedWidthRight += column.width;\n }\n measuredRightPinnedColumns[0].endPin = true;\n return allColumns.concat(measuredRightPinnedColumns);\n } else {\n return allColumns;\n }\n};\n\nexport const measurePinnedColumns = (\n columns: RuntimeColumnDescriptor[],\n selectionEndSize: number,\n) => {\n let pinnedWidthLeft = 0;\n let pinnedWidthRight = 0;\n let unpinnedWidth = 0;\n for (const column of columns) {\n const { hidden, pin, width } = column;\n const visibleWidth = hidden ? 0 : width;\n if (pin === \"left\") {\n pinnedWidthLeft += visibleWidth;\n } else if (pin === \"right\") {\n pinnedWidthRight += visibleWidth;\n } else {\n unpinnedWidth += visibleWidth;\n }\n }\n return {\n pinnedWidthLeft: pinnedWidthLeft + selectionEndSize,\n pinnedWidthRight: pinnedWidthRight + selectionEndSize,\n unpinnedWidth,\n };\n};\n\nexport const getTableHeadings = (\n columns: RuntimeColumnDescriptor[],\n): TableHeadings => {\n if (columns.some(hasHeadings)) {\n const maxHeadingDepth = columns.reduce<number>(\n (max, { heading }) => Math.max(max, heading?.length ?? 0),\n 0,\n );\n\n let heading: TableHeading | undefined = undefined;\n const tableHeadings: TableHeadings = [];\n let tableHeadingsRow: TableHeading[];\n for (let level = 0; level < maxHeadingDepth; level++) {\n tableHeadingsRow = [];\n columns.forEach(({ heading: columnHeading = NO_HEADINGS, width }) => {\n const label = columnHeading[level] ?? \"\";\n if (heading && heading.label === label) {\n heading.width += width;\n } else {\n heading = { label, width } as TableHeading;\n tableHeadingsRow.push(heading);\n }\n });\n tableHeadings.push(tableHeadingsRow);\n }\n\n return tableHeadings;\n }\n return NO_HEADINGS;\n};\n\nexport const getColumnStyle = ({\n pin,\n // the 4 is `selectionEndSize`, unfortunate if we need to be passed it from cell\n // need to think about how to make this available\n pinnedOffset = pin === \"left\" ? 0 : 4,\n width,\n}: RuntimeColumnDescriptor) =>\n pin === \"left\"\n ? ({\n left: pinnedOffset,\n width,\n \"--pin-width\": `${pinnedOffset + width - 3}px`,\n } as CSSProperties)\n : pin === \"right\"\n ? ({\n right: pinnedOffset,\n width,\n \"--pin-width\": `${pinnedOffset + width}px`,\n } as CSSProperties)\n : { width };\n\nexport const setAggregations = (\n aggregations: VuuAggregation[],\n column: ColumnDescriptor,\n aggType: VuuAggType,\n) => {\n return aggregations\n .filter((agg) => agg.column !== column.name)\n .concat({ column: column.name, aggType });\n};\n\nexport type ColumnGroupProps = {\n columns: RuntimeColumnDescriptor[];\n groupBy: VuuGroupBy;\n confirmed?: boolean;\n availableWidth: number;\n};\n\nexport const applyGroupByToColumns = (props: ColumnGroupProps) => {\n if (props.groupBy.length) {\n const [groupColumn, nonGroupedColumns] = extractGroupColumn(props);\n if (groupColumn) {\n return [groupColumn as RuntimeColumnDescriptor].concat(nonGroupedColumns);\n }\n } else if (props.columns[0]?.isGroup) {\n return flattenColumnGroup(props.columns);\n }\n return props.columns;\n};\n\nexport const applySortToColumns = (\n columns: RuntimeColumnDescriptor[],\n sort: VuuSort,\n) =>\n columns.map((column) => {\n const sorted = getSortType(column, sort);\n if (sorted !== undefined) {\n return {\n ...column,\n sorted,\n };\n } else if (column.sorted) {\n return {\n ...column,\n sorted: undefined,\n };\n } else {\n return column;\n }\n });\n\nexport const removeSort = (columns: RuntimeColumnDescriptor[]) =>\n columns.map((col) => (col.sorted ? { ...col, sorted: undefined } : col));\n\nexport const existingSort = (columns: RuntimeColumnDescriptor[]) =>\n columns.some((col) => col.sorted);\n\nconst getSortType = (column: ColumnDescriptor, { sortDefs }: VuuSort) => {\n const sortDef = sortDefs.find((sortCol) => sortCol.column === column.name);\n if (sortDef) {\n return sortDefs.length > 1\n ? (sortDefs.indexOf(sortDef) + 1) * (sortDef.sortType === \"A\" ? 1 : -1)\n : sortDef.sortType;\n }\n};\n\n// Calculated columns have the formal 'name:datatype:expression'\nexport const getColumnName = (name: string) => {\n const pos = name.indexOf(\":\");\n if (pos === -1) {\n return name;\n } else {\n return name.slice(0, pos);\n }\n};\n\nexport const getColumnLabel = (column: ColumnDescriptor) => {\n if (column.label) {\n return column.label;\n } else if (isCalculatedColumn(column.name)) {\n const { name } = getCalculatedColumnDetails(column);\n // calculated column name follows pattern: `name:serverDataType:expression`\n return name ?? column.name;\n } else {\n return column.name;\n }\n};\n\nexport const findColumn = (\n columns: RuntimeColumnDescriptor[],\n columnName: string,\n): RuntimeColumnDescriptor | undefined => {\n const column = columns.find((col) => col.name === columnName);\n if (column) {\n return column;\n } else {\n const groupColumn = columns.find(\n (col) => col.isGroup,\n ) as GroupColumnDescriptor;\n if (groupColumn) {\n return findColumn(groupColumn.columns, columnName);\n }\n }\n};\n\nexport function updateColumn<T extends ColumnDescriptor>(\n columns: T[],\n column: T,\n): T[];\nexport function updateColumn(\n columns: RuntimeColumnDescriptor[],\n column: string,\n options: Partial<ColumnDescriptor>,\n): RuntimeColumnDescriptor[];\nexport function updateColumn(\n columns: RuntimeColumnDescriptor[],\n column: string | RuntimeColumnDescriptor,\n options?: Partial<ColumnDescriptor>,\n) {\n const targetColumn =\n typeof column === \"string\"\n ? columns.find((col) => col.name === column)\n : column;\n if (targetColumn) {\n const replacementColumn = options\n ? { ...targetColumn, ...options }\n : targetColumn;\n return columns.map((col) =>\n col.name === replacementColumn.name ? replacementColumn : col,\n );\n } else {\n throw Error(\"column-utils.replaceColun, column not found\");\n }\n}\n\nexport const toDataSourceColumns = (column: ColumnDescriptor) => column.name;\n\nexport const dataSourceRowToDataRowDto = (\n row: DataSourceRow,\n columnMap: ColumnMap,\n): VuuDataRowDto => {\n return Object.entries(columnMap).reduce<VuuDataRowDto>(\n (map, [colName, key]) => {\n map[colName] = row[key];\n return map;\n },\n {},\n );\n};\n\nexport const isDataLoading = (columns: RuntimeColumnDescriptor[]) => {\n return isGroupColumn(columns[0]) && columns[0].groupConfirmed === false;\n};\n\nexport const getColumnsInViewport = (\n columns: RuntimeColumnDescriptor[],\n vpStart: number,\n vpEnd: number,\n): [RuntimeColumnDescriptor[], number] => {\n const visibleColumns: RuntimeColumnDescriptor[] = [];\n let preSpan = 0;\n let rightPinnedOnly = false;\n\n for (let columnOffset = 0, i = 0; i < columns.length; i++) {\n const column = columns[i];\n // TODO if we were to measure the pinned columns first,\n // might be able to save rendering some columns ?\n if (column.hidden) {\n continue;\n } else if (rightPinnedOnly) {\n if (column.pin === \"right\") {\n visibleColumns.push(column);\n }\n } else if (columnOffset + column.width < vpStart) {\n if (column.pin === \"left\") {\n visibleColumns.push(column);\n } else if (\n columnOffset + column.width + columns[i + 1]?.width >\n vpStart\n ) {\n visibleColumns.push(column);\n } else {\n preSpan += column.width;\n }\n } else if (columnOffset > vpEnd) {\n rightPinnedOnly = true;\n } else {\n visibleColumns.push(column);\n }\n columnOffset += column.width;\n }\n\n return [visibleColumns, preSpan];\n};\n\nexport const isNotHidden = (column: RuntimeColumnDescriptor) =>\n column.hidden !== true;\n\nexport const visibleColumnAtIndex = (\n columns: RuntimeColumnDescriptor[],\n index: number,\n) => {\n if (columns.every(isNotHidden)) {\n return columns[index];\n } else {\n return columns.filter(isNotHidden).at(index);\n }\n};\n\nconst { DEPTH, IS_LEAF } = metadataKeys;\n\nexport const getGroupIcon = (\n columns: RuntimeColumnDescriptor[],\n row: DataSourceRow,\n): string | undefined => {\n const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;\n // Depth can be greater tha group columns when we have just removed a column from groupby\n // but new data has not yet been received.\n if (isLeaf || depth > columns.length) {\n return undefined;\n } else if (depth === 0) {\n return undefined;\n } else {\n const { getIcon } = columns[depth - 1];\n return getIcon?.(row);\n }\n};\n\nexport const getGroupValue = (\n columns: RuntimeColumnDescriptor[],\n row: DataSourceRow,\n columnMap: ColumnMap,\n): string | null => {\n const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;\n // Depth can be greater tha group columns when we have just removed a column from groupby\n // but new data has not yet been received.\n if (isLeaf || depth > columns.length) {\n return null;\n } else if (depth === 0) {\n return \"$root\";\n } else {\n // offset allows for $root\n const { name, valueFormatter } = columns[depth - 1];\n\n const value = valueFormatter(row[columnMap[name]]);\n return value;\n }\n};\n\nexport const getDefaultColumnType = (\n serverDataType?: VuuColumnDataType,\n): DataValueTypeSimple => {\n switch (serverDataType) {\n case \"int\":\n case \"long\":\n case \"double\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"string\";\n }\n};\n\nexport const updateColumnFormatting = <\n T extends ColumnDescriptor = ColumnDescriptor,\n>(\n column: T,\n formatting: ColumnTypeFormatting,\n): T => {\n const { serverDataType, type = getDefaultColumnType(serverDataType) } =\n column;\n\n if (isTypeDescriptor(type)) {\n return { ...column, type: { ...type, formatting } };\n } else {\n return { ...column, type: { name: type, formatting } };\n }\n};\n\nexport function updateColumnType<T extends ColumnDescriptor = ColumnDescriptor>(\n column: T,\n type: DataValueTypeSimple,\n): T {\n return isTypeDescriptor(column.type)\n ? { ...column, type: { ...column.type, name: type } }\n : { ...column, type };\n}\n\nexport const updateColumnRenderProps = <\n T extends ColumnDescriptor = ColumnDescriptor,\n>(\n column: T,\n renderer: ColumnTypeRendering,\n): T => {\n const { serverDataType, type = getDefaultColumnType(serverDataType) } =\n column;\n\n if (isTypeDescriptor(type)) {\n return {\n ...column,\n type: {\n ...type,\n // TODO do we need to preserve any existing attributes from renderer ?\n renderer,\n },\n };\n } else {\n return { ...column, type: { name: type, renderer } };\n }\n};\n\nconst NO_TYPE_SETTINGS = {};\nexport const getTypeFormattingFromColumn = (\n column: ColumnDescriptor,\n): ColumnTypeFormatting => {\n if (isTypeDescriptor(column.type)) {\n return column.type.formatting ?? NO_TYPE_SETTINGS;\n } else {\n return NO_TYPE_SETTINGS;\n }\n};\n\n/**\n * Return a filter predicate that will reject columns, names of which\n * are not in provided list. Exception made for columns explicitly\n * configured as client columns.\n */\nexport const subscribedOnly =\n (columnNames?: string[]) => (column: ColumnDescriptor) =>\n column.source === \"client\" || columnNames?.includes(column.name);\n\nexport const addColumnToSubscribedColumns = (\n subscribedColumns: ColumnDescriptor[],\n availableColumns: SchemaColumn[],\n columnName: string,\n) => {\n const byColName =\n (n = columnName) =>\n (column: { name: string }) =>\n column.name === n;\n if (subscribedColumns.findIndex(byColName()) !== -1) {\n throw Error(\n `column-utils, addColumnToSubscribedColumns column ${columnName} is already subscribed`,\n );\n }\n const indexOfAvailableColumn = availableColumns.findIndex(byColName());\n if (indexOfAvailableColumn === -1) {\n throw Error(\n `column-utils, addColumnToSubscribedColumns column ${columnName} is not available`,\n );\n }\n\n const newColumn = {\n ...availableColumns[indexOfAvailableColumn],\n } as ColumnDescriptor;\n\n // find the nearest preceding available column which is subscribed\n let index = -1;\n for (let i = indexOfAvailableColumn - 1; i >= 0; i--) {\n const { name } = availableColumns[i];\n index = subscribedColumns.findIndex(byColName(name));\n if (index !== -1) {\n break;\n }\n }\n\n if (index === -1) {\n return [newColumn].concat(subscribedColumns);\n } else {\n const results: ColumnDescriptor[] = [];\n for (let i = 0; i < subscribedColumns.length; i++) {\n results.push(subscribedColumns[i]);\n if (i === index) {\n results.push(newColumn);\n index = Number.MAX_SAFE_INTEGER;\n }\n }\n return results;\n }\n};\n\nconst CalculatedColumnPattern = /.*:.*:.*/;\n\nexport const isCalculatedColumn = (columnName?: string) =>\n columnName !== undefined && CalculatedColumnPattern.test(columnName);\n\nexport const getCalculatedColumnDetails = (\n column: ColumnDescriptor,\n): Partial<CalculatedColumn> => {\n if (isCalculatedColumn(column.name)) {\n const [name, serverDataType, expression] = column.name.split(/:=?/);\n if (serverDataType && !isVuuColumnDataType(serverDataType)) {\n throw Error(\n `column-utils, getCalculatedColumnDetails ${serverDataType} is not valid type for column ${column.name}`,\n );\n }\n return {\n name: name ?? \"\",\n expression: expression ?? \"\",\n serverDataType: isVuuColumnDataType(serverDataType)\n ? serverDataType\n : undefined,\n };\n } else {\n throw Error(`column.name is nor a calculated column`);\n }\n};\n\nexport const setCalculatedColumnName = (\n column: ColumnDescriptor,\n name: string,\n): ColumnDescriptor => {\n const [, type, expression] = column.name.split(\":\");\n return {\n ...column,\n name: `${name}:${type}:${expression}`,\n };\n};\n\nexport const setCalculatedColumnType = (\n column: ColumnDescriptor,\n type: string,\n): ColumnDescriptor => {\n const [name, , expression] = column.name.split(\":\");\n return {\n ...column,\n name: `${name}:${type}:${expression}`,\n };\n};\n\n// TODO should we validate the expression here ?\nexport const setCalculatedColumnExpression = (\n column: ColumnDescriptor,\n expression: string,\n): ColumnDescriptor => {\n const [name, type] = column.name.split(\":\");\n return {\n ...column,\n name: `${name}:${type}:=${expression}`,\n };\n};\n\nexport const moveColumnTo = (\n columns: ColumnDescriptor[],\n column: ColumnDescriptor,\n newIndex: number,\n) => {\n const index = columns.findIndex((col) => col.name === column.name);\n return moveItem(columns, index, newIndex);\n};\n\nexport function replaceColumn<\n C extends ColumnDescriptor = RuntimeColumnDescriptor,\n>(columns: C[], column: C) {\n return columns.map((col) => (col.name === column.name ? column : col));\n}\n\nexport const applyDefaultColumnConfig = (\n { columns, table }: TableSchema,\n getDefaultColumnConfig?: DefaultColumnConfiguration,\n) => {\n if (typeof getDefaultColumnConfig === \"function\") {\n return columns.map((column) => {\n const config = getDefaultColumnConfig(table.table, column.name);\n if (config) {\n return {\n ...column,\n ...config,\n };\n } else {\n return column;\n }\n });\n } else {\n return columns;\n }\n};\n\nexport type columnOptions = {\n availableWidth?: number;\n columnLayout?: ColumnLayout;\n defaultWidth?: number;\n defaultMinWidth?: number;\n defaultMaxWidth?: number;\n defaultFlex?: number;\n};\n\ntype ColumnLayoutOptions = Pick<\n columnOptions,\n \"defaultMinWidth\" | \"defaultMaxWidth\" | \"defaultWidth\"\n>;\n\ninterface StaticColumnLayoutOptions extends ColumnLayoutOptions {\n columnLayout: \"manual\" | \"static\";\n}\ninterface FitColumnLayoutOptions extends ColumnLayoutOptions {\n availableWidth?: number;\n columnLayout: \"fit\";\n}\n\ntype ColumnStats = {\n flexCount: number;\n totalMinWidth: number;\n totalMaxWidth: number;\n totalWidth: number;\n};\n\nconst measureColumns = (\n columns: RuntimeColumnDescriptor[],\n defaultMaxWidth: number,\n defaultMinWidth: number,\n) =>\n columns.reduce<ColumnStats>(\n (aggregated, column) => {\n if (column.hidden !== true) {\n aggregated.totalMinWidth += column.minWidth ?? defaultMinWidth;\n aggregated.totalMaxWidth += column.maxWidth ?? defaultMaxWidth;\n aggregated.totalWidth += column.width;\n aggregated.flexCount += column.flex ?? 0;\n }\n return aggregated;\n },\n { totalMinWidth: 0, totalMaxWidth: 0, totalWidth: 0, flexCount: 0 },\n );\n\nexport function applyWidthToColumns(\n columns: RuntimeColumnDescriptor[],\n options: StaticColumnLayoutOptions | FitColumnLayoutOptions,\n): RuntimeColumnDescriptor[];\n\nexport function applyWidthToColumns(\n columns: RuntimeColumnDescriptor[],\n {\n availableWidth = 0,\n columnLayout = \"static\",\n defaultWidth = DEFAULT_COL_WIDTH,\n defaultMinWidth = DEFAULT_MIN_WIDTH,\n defaultMaxWidth = DEFAULT_MAX_WIDTH,\n }: // defaultFlex = DEFAULT_FLEX,\n columnOptions,\n): RuntimeColumnDescriptor[] {\n if (columnLayout === \"fit\") {\n const { totalMinWidth, totalMaxWidth, totalWidth, flexCount } =\n measureColumns(columns, defaultMaxWidth, defaultMinWidth);\n\n if (totalMaxWidth < availableWidth) {\n return assignMaxWidthToAll(columns, defaultMaxWidth);\n } else if (totalMinWidth > availableWidth) {\n return columns;\n } else if (totalWidth > availableWidth) {\n return shrinkColumnsToFitAvailableSpace(\n columns,\n availableWidth,\n totalWidth,\n defaultMinWidth,\n defaultWidth,\n flexCount,\n );\n } else if (totalWidth < availableWidth) {\n return stretchColumnsToFillAvailableSpace(\n columns,\n availableWidth,\n totalWidth,\n defaultMaxWidth,\n defaultWidth,\n );\n }\n }\n return columns;\n}\n\nconst assignMaxWidthToAll = (\n columns: RuntimeColumnDescriptor[],\n defaultMaxWidth: number,\n) => {\n return columns.map((column) => {\n const { maxWidth = defaultMaxWidth } = column;\n if (column.width === maxWidth) {\n return column;\n } else {\n return {\n ...column,\n width: maxWidth,\n };\n }\n });\n};\n\nconst shrinkColumnsToFitAvailableSpace = (\n columns: RuntimeColumnDescriptor[],\n availableWidth: number,\n totalWidth: number,\n defaultMinWidth: number,\n defaultWidth: number,\n flexCount: number,\n) => {\n const excessWidth = totalWidth - availableWidth;\n const inFlexMode = flexCount > 0;\n let excessWidthPerColumn = excessWidth / (flexCount || columns.length);\n let columnsNotYetAtMinWidth = columns.length;\n let unassignedExcess = 0;\n let newColumns = columns.map<RuntimeColumnDescriptor>((column) => {\n const {\n minWidth = defaultMinWidth,\n width = defaultWidth,\n flex = 0,\n } = column;\n if (inFlexMode && flex === 0) {\n return column;\n }\n const adjustedWidth = width - excessWidthPerColumn;\n if (adjustedWidth < minWidth) {\n columnsNotYetAtMinWidth -= 1;\n unassignedExcess += minWidth - adjustedWidth;\n return { ...column, width: minWidth };\n } else {\n return { ...column, width: adjustedWidth };\n }\n });\n if (unassignedExcess === 0) {\n return newColumns;\n } else {\n excessWidthPerColumn = unassignedExcess / columnsNotYetAtMinWidth;\n newColumns = newColumns.map((column) => {\n const adjustedWidth = column.width - excessWidthPerColumn;\n if (column.width !== column.minWidth) {\n return { ...column, width: adjustedWidth };\n } else {\n return column;\n }\n });\n return newColumns;\n }\n};\n\nconst hasFlex = ({ flex }: ColumnDescriptor) => typeof flex === \"number\";\n\nconst stretchColumnsToFillAvailableSpace = (\n columns: RuntimeColumnDescriptor[],\n availableWidth: number,\n totalWidth: number,\n defaultMaxWidth: number,\n defaultWidth: number,\n) => {\n let freeSpaceToBeFilled = availableWidth - totalWidth;\n let adjustedColumns = columns;\n\n const canGrow = ({\n width = defaultWidth,\n maxWidth = defaultMaxWidth,\n }: ColumnDescriptor) => width < maxWidth;\n\n while (freeSpaceToBeFilled > 0) {\n const flexCols = adjustedColumns.filter(\n (col) => hasFlex(col) && canGrow(col),\n );\n const columnsNotYetAtMaxWidth =\n flexCols.length || adjustedColumns.filter(canGrow).length;\n\n // THis deos not take flex correctly into account\n const additionalWidthPerColumn = Math.ceil(\n freeSpaceToBeFilled / columnsNotYetAtMaxWidth,\n );\n adjustedColumns = columns.map((column) => {\n const {\n maxWidth = defaultMaxWidth,\n width = defaultWidth,\n flex = 0,\n } = column;\n if (flexCols.length > 0 && flex === 0) {\n return column;\n }\n\n // we rounded the additionalWidthPerColumn up, so make sure\n // we don't over-assign\n const adjustmentAmount = Math.min(\n additionalWidthPerColumn,\n freeSpaceToBeFilled,\n );\n const adjustedWidth = width + adjustmentAmount;\n if (adjustedWidth > maxWidth) {\n freeSpaceToBeFilled -= adjustedWidth - maxWidth;\n return { ...column, width: maxWidth };\n } else {\n freeSpaceToBeFilled -= adjustmentAmount;\n return { ...column, width: adjustedWidth };\n }\n });\n }\n return adjustedColumns;\n};\n\n/**\n * A memo compare function for cell renderers. Can be used to suppress\n * render where column and data are both unchanged. Avoids render\n * when row changes, where changes in row are unrelated to this cell.\n * Suitabnle only for readonly cell renderers. See below for editable\n * cell renderers.\n */\nexport const dataAndColumnUnchanged = (\n p: TableCellRendererProps,\n p1: TableCellRendererProps,\n) =>\n p.column === p1.column &&\n p.column.valueFormatter(p.row[p.columnMap[p.column.name]]) ===\n p1.column.valueFormatter(p1.row[p1.columnMap[p1.column.name]]);\n\n/**\n * A memo compare function for cell renderers. Can be used to suppress\n * render where column, row key and data are all unchanged. Avoids render\n * when row changes, where changes in row are unrelated to this cell.\n * Suitable for editable cells. Including key in compare is not strictly\n * necessary for rendering, but it is important in the event that user\n * edits data - ensures we never have a stale key.\n */\nexport const dataColumnAndKeyUnchanged = (\n p: TableCellRendererProps,\n p1: TableCellRendererProps,\n) =>\n p.column === p1.column &&\n p.row[KEY] === p1.row[KEY] &&\n p.column.valueFormatter(p.row[p.columnMap[p.column.name]]) ===\n p1.column.valueFormatter(p1.row[p1.columnMap[p1.column.name]]);\n\nexport const toColumnName = (column: ColumnDescriptor) => column.name;\nexport const isStringColumn = (column: ColumnDescriptor) =>\n column.serverDataType === \"string\";\n\n/**\n * Given an ordered list of column names, return column items in same order\n */\nexport const reorderColumnItems = <\n T extends { name: string } = { name: string },\n>(\n columnItems: Array<T>,\n orderedNames: string[],\n): T[] => {\n const columns: T[] = [];\n for (const name of orderedNames) {\n const columnItem = columnItems.find((c) => c.name === name);\n if (columnItem) {\n columns.push(columnItem);\n }\n }\n return columns;\n};\n"],"names":["groupColumn","heading"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common-types.js","sources":["../src/common-types.ts"],"sourcesContent":["export type orientationType = \"horizontal\" | \"vertical\";\n\ntype measureProp = keyof DOMRect;\ntype measureType = Record<string, measureProp>;\ntype measuresType = Record<orientationType, measureType>;\n\nexport const MEASURES: measuresType = {\n horizontal: {\n positionProp: \"left\",\n sizeProp: \"width\",\n },\n vertical: {\n positionProp: \"top\",\n sizeProp: \"height\",\n },\n};\n"],"names":[],"mappings":"AAMO,MAAM,QAAyB,GAAA;AAAA,EACpC,UAAY,EAAA;AAAA,IACV,YAAc,EAAA,MAAA;AAAA,IACd,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,YAAc,EAAA,KAAA;AAAA,IACd,QAAU,EAAA;AAAA;AAEd;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-registry.js","sources":["../src/component-registry.ts"],"sourcesContent":["import { DataSourceRow, EditRuleValidator } from \"@vuu-ui/vuu-data-types\";\nimport { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n HeaderCellProps,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { FunctionComponent as FC, HTMLAttributes } from \"react\";\nimport {\n ColumnMap,\n hasCustomRenderer,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\n\nexport interface CellConfigPanelProps extends HTMLAttributes<HTMLDivElement> {\n onConfigChange: () => void;\n}\n\nexport type PropertyChangeHandler = (\n propertyName: string,\n propertyValue: string | number | boolean,\n) => void;\n\nexport type ColumnRenderPropsChangeHandler = (\n renderProps: ColumnTypeRendering,\n) => void;\n\nexport interface ConfigurationEditorProps {\n column: ColumnDescriptorCustomRenderer;\n onChangeRendering: ColumnRenderPropsChangeHandler;\n}\n\nexport type RowClassNameGenerator = (\n row: DataSourceRow,\n columnMap: ColumnMap,\n) => string | undefined;\n\nexport type RowClassGenerator = {\n id: string;\n fn: RowClassNameGenerator;\n};\n\nexport type ConfigEditorComponent = FC<CellConfigPanelProps>;\n\nconst containersSet = new Set<string>();\nconst viewsSet = new Set<string>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst layoutComponentsMap = new Map<string, FC<any>>();\nconst cellRenderersMap = new Map<string, FC<TableCellRendererProps>>();\nconst columnHeaderRenderersMap = new Map<string, FC<HeaderCellProps>>();\nconst configEditorsMap = new Map<string, FC<ConfigurationEditorProps>>();\nconst cellConfigPanelsMap = new Map<string, ConfigEditorComponent>();\nconst editRuleValidatorsMap = new Map<string, EditRuleValidator>();\nconst optionsMap = new Map<string, CellRendererOptions>();\nconst rowClassGeneratorsMap = new Map<string, RowClassGenerator>();\n\nexport type layoutComponentType = \"container\" | \"view\";\n\nexport type ComponentType =\n | layoutComponentType\n | \"cell-renderer\"\n | \"cell-config-panel\"\n | \"column-header-content-renderer\"\n | \"column-header-label-renderer\"\n | \"component\"\n | \"data-edit-validator\"\n | \"row-class-generator\";\n\ntype CellRendererOptions = {\n configEditor?: string;\n description?: string;\n label?: string;\n serverDataType?: VuuColumnDataType | VuuColumnDataType[] | \"json\" | \"private\";\n userCanAssign?: boolean;\n};\nexport interface CellRendererDescriptor extends CellRendererOptions {\n name: string;\n}\n\nconst isTypeCompatible = (\n rendererType:\n | VuuColumnDataType\n | (VuuColumnDataType | \"json\")[]\n | \"json\"\n | \"private\"\n | undefined,\n serverDataType: VuuColumnDataType | \"json\",\n) => {\n if (rendererType === undefined || rendererType === \"private\") {\n return true;\n } else if (Array.isArray(rendererType)) {\n return rendererType.includes(serverDataType);\n } else {\n return rendererType === serverDataType;\n }\n};\n\n/**\n * This check is performed during construction of UI from JSON. If component\n * is not registered, it will log a warning.\n */\nexport const isContainer = (componentType: string) => {\n return containersSet.has(componentType);\n};\n\n/**\n * This check is performed during construction of UI from JSON. If component\n * is not registered, it will log a warning.\n */\nexport const isView = (componentType: string) => {\n return viewsSet.has(componentType);\n};\n\n/**\n * This check is performed during construction of UI from JSON. If component\n * is not registered, it will log a warning.\n */\nexport const isLayoutComponent = (\n componentType: string,\n): componentType is layoutComponentType =>\n isContainer(componentType) || isView(componentType);\n\nconst isCellRenderer = (\n type: ComponentType,\n component: unknown,\n): component is FC<TableCellRendererProps> =>\n component !== undefined && type === \"cell-renderer\";\n\nconst isColumnHeaderContentRenderer = (\n type: ComponentType,\n component: unknown,\n): component is FC<HeaderCellProps> =>\n type === \"column-header-content-renderer\";\nconst isColumnHeaderLabelRenderer = (\n type: ComponentType,\n component: unknown,\n): component is FC<HeaderCellProps> => type === \"column-header-label-renderer\";\n\nconst isCellConfigPanel = (\n type: ComponentType,\n component: unknown,\n): component is FC<CellConfigPanelProps> => type === \"cell-config-panel\";\n\nconst isEditRuleValidator = (\n type: ComponentType,\n component: unknown,\n): component is EditRuleValidator => type === \"data-edit-validator\";\n\nconst isRowClassGenerator = (\n type: ComponentType,\n component: unknown,\n): component is RowClassGenerator => type === \"row-class-generator\";\n\nexport function registerComponent(\n componentName: string,\n component: RowClassGenerator,\n componentType: \"row-class-generator\",\n options?: CellRendererOptions,\n): void;\nexport function registerComponent(\n componentName: string,\n component: EditRuleValidator,\n componentType: \"data-edit-validator\",\n options?: CellRendererOptions,\n): void;\nexport function registerComponent(\n componentName: string,\n // unknown won't work for us here, we'll get the default children\n // definition for FC which conflicts with some components props.\n // VoidFunctionComponent doesn't help either\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: FC<any>,\n componentType: Omit<\n ComponentType,\n \"data-edit-validator\" | \"row-class-generator\"\n >,\n options?: CellRendererOptions,\n): void;\nexport function registerComponent(\n componentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentType: any,\n options?: CellRendererOptions,\n): void {\n if (\n componentType === \"container\" ||\n componentType === \"view\" ||\n componentType === \"component\"\n ) {\n layoutComponentsMap.set(componentName, component);\n if (componentType === \"container\") {\n containersSet.add(componentName);\n } else if (componentType === \"view\") {\n viewsSet.add(componentName);\n }\n } else if (isCellRenderer(componentType, component)) {\n cellRenderersMap.set(componentName, component);\n } else if (isColumnHeaderContentRenderer(componentType, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isColumnHeaderLabelRenderer(componentType, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isCellConfigPanel(componentType, component)) {\n cellConfigPanelsMap.set(componentName, component);\n } else if (isEditRuleValidator(componentType, component)) {\n editRuleValidatorsMap.set(componentName, component);\n } else if (isRowClassGenerator(componentType, component)) {\n rowClassGeneratorsMap.set(componentName, component);\n }\n if (options) {\n optionsMap.set(componentName, options);\n }\n}\n\nexport const registerConfigurationEditor = (\n componentName: string,\n configurationEditor: FC<ConfigurationEditorProps>,\n) => {\n configEditorsMap.set(componentName, configurationEditor);\n};\n\n// This is invoked by settings panel to allow users to assign\n// non-default, cell renderers. Ignore renderers registered\n// with the attribute userCanAssign = false\nexport const getRegisteredCellRenderers = (\n serverDataType?: VuuColumnDataType | \"json\",\n): CellRendererDescriptor[] => {\n const rendererNames = Array.from(cellRenderersMap.keys());\n const allRenderers = rendererNames\n .map<CellRendererDescriptor>((name) => ({\n name,\n ...(optionsMap.get(name) as CellRendererOptions),\n }))\n .filter(({ userCanAssign }) => userCanAssign !== false);\n if (serverDataType) {\n return allRenderers.filter((renderer) =>\n isTypeCompatible(renderer.serverDataType, serverDataType),\n );\n } else {\n return allRenderers;\n }\n};\n\nexport const getLayoutComponent = (componentName: string) => {\n const layoutComponent = layoutComponentsMap.get(componentName);\n if (layoutComponent) {\n return layoutComponent;\n } else {\n throw Error(\n `layout component ${componentName} not found in ComponentRegistry`,\n );\n }\n};\n\nexport const getCellRendererOptions = (renderName: string) =>\n optionsMap.get(renderName);\n\nexport function getCellRenderer(column: ColumnDescriptor) {\n return dataCellRenderer(column);\n}\nexport function getColumnHeaderContentRenderer(column: ColumnDescriptor) {\n if (column.colHeaderContentRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);\n }\n}\nexport function getColumnHeaderLabelRenderer(column: ColumnDescriptor) {\n if (column.colHeaderLabelRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);\n }\n}\nexport const getRowClassNameGenerator = (generatorId: string) =>\n rowClassGeneratorsMap.get(generatorId);\n\nexport function getConfigurationEditor(configEditor = \"\") {\n return configEditorsMap.get(configEditor);\n}\n\nexport function getCellConfigPanelRenderer(name: string) {\n return cellConfigPanelsMap.get(name);\n}\n\nexport function getEditRuleValidator(name: string) {\n return editRuleValidatorsMap.get(name);\n}\n\nfunction dataCellRenderer(column: ColumnDescriptor) {\n if (column.serverDataType === \"boolean\" && !hasCustomRenderer(column.type)) {\n return cellRenderersMap.get(\"checkbox-cell\");\n } else if (column.editable && !hasCustomRenderer(column.type)) {\n // we can only offer a text input edit as a generic editor.\n // If a more specialised editor is required, user must configure\n // it in column config.\n return cellRenderersMap.get(\"input-cell\");\n } else if (\n isTypeDescriptor(column.type) &&\n isColumnTypeRenderer(column.type.renderer)\n ) {\n return cellRenderersMap.get(column.type.renderer?.name);\n } else if (column.serverDataType === \"boolean\") {\n return cellRenderersMap.get(\"checkbox-cell\");\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataContext.js","sources":["../../src/context-definitions/DataContext.tsx"],"sourcesContent":["import type {\n DataSource,\n DataSourceConstructorProps,\n ServerAPI,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataContextProps {\n VuuDataSource: DataSourceConstructor;\n dataSourceExtensions?: unknown;\n isLocalData: boolean;\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\" | \"rpcCall\">\n >;\n /**\n * A tableSchema would normally be requested via the serverAPI.\n * schemas can be injected, in which case these 'local' schemas\n * will be returned from the getTableSchema API call.\n * The key is formed from concatenation of module and tableName\n * from VuuTable e.g 'SIMUL:instruments'\n */\n tableSchemas?: Record<string, TableSchema>;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataProvider has been installed\");\n};\n\nclass NullDataSourceConstructor {\n constructor(_: DataSourceConstructorProps) {\n throw Error(\"no DataeProvider has been installed\");\n }\n}\n\nexport const DataContext = createContext<DataContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSourceConstructor as DataSourceConstructor,\n});\n"],"names":[],"mappings":";;AA6BA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,oCAAoC,CAAA;AAClD,CAAA;AAEA,MAAM,yBAA0B,CAAA;AAAA,EAC9B,YAAY,CAA+B,EAAA;AACzC,IAAA,MAAM,MAAM,qCAAqC,CAAA;AAAA;AAErD;AAEO,MAAM,cAAc,aAAgC,CAAA;AAAA,EACzD,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA;AACjB,CAAC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataProvider.js","sources":["../../src/context-definitions/DataProvider.tsx"],"sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { DataContext, DataContextProps } from \"./DataContext\";\n\nexport const DataProvider = ({\n children,\n getServerAPI,\n isLocalData = true,\n VuuDataSource,\n}: Omit<DataContextProps, \"isLocalData\"> & {\n children: ReactNode;\n isLocalData?: boolean;\n}) => {\n return (\n <DataContext.Provider value={{ isLocalData, VuuDataSource, getServerAPI }}>\n {children}\n </DataContext.Provider>\n );\n};\n\nexport const useData = () => useContext(DataContext);\nexport const useDataSourceExtensions = () => {\n const { dataSourceExtensions } = useContext(DataContext);\n return dataSourceExtensions;\n};\n"],"names":[],"mappings":";;;;AAGO,MAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd;AACF,CAGM,KAAA;AACJ,EACE,uBAAA,GAAA,CAAC,WAAY,CAAA,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAE,WAAa,EAAA,aAAA,EAAe,YAAa,EAAA,EACrE,QACH,EAAA,CAAA;AAEJ;AAEa,MAAA,OAAA,GAAU,MAAM,UAAA,CAAW,WAAW;AAC5C,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,EAAE,oBAAA,EAAyB,GAAA,UAAA,CAAW,WAAW,CAAA;AACvD,EAAO,OAAA,oBAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataSourceProvider.js","sources":["../../src/context-definitions/DataSourceProvider.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { createContext, ReactNode, useContext } from \"react\";\n\nexport interface DataSourceContextProps {\n dataSource?: DataSource;\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n dataSource: undefined,\n});\n\nexport const DataSourceProvider = ({\n children,\n dataSource,\n}: {\n children: ReactNode;\n dataSource: DataSource;\n}) => {\n return (\n <DataSourceContext.Provider value={{ dataSource }}>\n {children}\n </DataSourceContext.Provider>\n );\n};\n\nexport function useDataSource(throwIfNoDataSource: true): DataSource;\nexport function useDataSource(\n throwIfNoDataSource: false | undefined,\n): DataSource | undefined;\nexport function useDataSource(throwIfNoDataSource = false) {\n const { dataSource } = useContext(DataSourceContext);\n if (dataSource) {\n return dataSource;\n } else if (throwIfNoDataSource) {\n throw Error(\n `[DataSOurceProvider] useDataSource,no DataSourceProvider has been declared `,\n );\n } else {\n console.warn(\n `[DataSourceProvider] useDataSource: no DataSourceProvider has been declared`,\n );\n }\n}\n"],"names":[],"mappings":";;;AAOO,MAAM,oBAAoB,aAAsC,CAAA;AAAA,EACrE,UAAY,EAAA,KAAA;AACd,CAAC;AAEM,MAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAA,GAAA,CAAC,kBAAkB,QAAlB,EAAA,EAA2B,OAAO,EAAE,UAAA,IAClC,QACH,EAAA,CAAA;AAEJ;AAMgB,SAAA,aAAA,CAAc,sBAAsB,KAAO,EAAA;AACzD,EAAA,MAAM,EAAE,UAAA,EAAe,GAAA,UAAA,CAAW,iBAAiB,CAAA;AACnD,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,OAAA,UAAA;AAAA,aACE,mBAAqB,EAAA;AAC9B,IAAM,MAAA,KAAA;AAAA,MACJ,CAAA,2EAAA;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,CAAA,2EAAA;AAAA,KACF;AAAA;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkspaceContext.js","sources":["../../src/context-definitions/WorkspaceContext.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport {\n ApplicationSetting,\n ApplicationSettings,\n LayoutJSON\n} from \"../json-types\";\nimport { LayoutMetadata, LayoutMetadataDto } from \"../layout-types\";\n\nexport interface WorkspaceContextProps {\n layoutMetadata: LayoutMetadata[];\n layoutPlaceholderJSON?: LayoutJSON;\n getApplicationSettings: (\n key?: keyof ApplicationSettings\n ) => ApplicationSettings | ApplicationSetting | undefined;\n loadLayoutById: (id: string) => void;\n saveApplicationSettings: (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings\n ) => void;\n saveLayout: (n: LayoutMetadataDto) => void;\n saveApplicationLayout: (layout: LayoutJSON) => void;\n workspaceJSON?: LayoutJSON | LayoutJSON[];\n}\n\nexport const WorkspaceContext = React.createContext<WorkspaceContextProps>({\n getApplicationSettings: () => undefined,\n layoutMetadata: [],\n saveLayout: () => undefined,\n saveApplicationLayout: () => undefined,\n saveApplicationSettings: () => undefined,\n loadLayoutById: () => undefined\n});\n\nexport const usePlaceholderJSON = () => {\n const { layoutPlaceholderJSON } = useContext(WorkspaceContext);\n return layoutPlaceholderJSON;\n};\n"],"names":[],"mappings":";;AAwBa,MAAA,gBAAA,GAAmB,MAAM,aAAqC,CAAA;AAAA,EACzE,wBAAwB,MAAM,KAAA,CAAA;AAAA,EAC9B,gBAAgB,EAAC;AAAA,EACjB,YAAY,MAAM,KAAA,CAAA;AAAA,EAClB,uBAAuB,MAAM,KAAA,CAAA;AAAA,EAC7B,yBAAyB,MAAM,KAAA,CAAA;AAAA,EAC/B,gBAAgB,MAAM,KAAA;AACxB,CAAC;AAEM,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM,EAAE,qBAAA,EAA0B,GAAA,UAAA,CAAW,gBAAgB,CAAA;AAC7D,EAAO,OAAA,qBAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cookie-utils.js","sources":["../src/cookie-utils.ts"],"sourcesContent":["export const getCookieValue = (name: string): string | number | undefined => {\n if (globalThis.document?.cookie !== undefined) {\n return globalThis.document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(`${name}=`))\n ?.split(\"=\")[1];\n }\n};\n"],"names":[],"mappings":"AAAa,MAAA,cAAA,GAAiB,CAAC,IAA8C,KAAA;AAC3E,EAAI,IAAA,UAAA,CAAW,QAAU,EAAA,MAAA,KAAW,KAAW,CAAA,EAAA;AAC7C,IAAA,OAAO,WAAW,QAAS,CAAA,MAAA,CACxB,MAAM,IAAI,CAAA,CACV,KAAK,CAAC,GAAA,KAAQ,IAAI,UAAW,CAAA,CAAA,EAAG,IAAI,CAAG,CAAA,CAAA,CAAC,GACvC,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA;AAAA;AAEpB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"css-utils.js","sources":["../src/css-utils.ts"],"sourcesContent":["export const importCSS = async (path: string) => {\n const container = new CSSStyleSheet();\n return fetch(path)\n .then((x) => x.text())\n .then((x) => container.replace(x));\n};\n"],"names":[],"mappings":"AAAa,MAAA,SAAA,GAAY,OAAO,IAAiB,KAAA;AAC/C,EAAM,MAAA,SAAA,GAAY,IAAI,aAAc,EAAA;AACpC,EAAA,OAAO,MAAM,IAAI,CAAA,CACd,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,EAAM,CAAA,CACpB,KAAK,CAAC,CAAA,KAAM,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AACrC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-utils.js","sources":["../src/data-utils.ts"],"sourcesContent":["export type valueChangeDirection = \"up1\" | \"up2\" | \"down1\" | \"down2\" | \"\";\n\nexport const UP1 = \"up1\";\nexport const UP2 = \"up2\";\nexport const DOWN1 = \"down1\";\nexport const DOWN2 = \"down2\";\n\nconst decimalPattern = /^-?[0-9]*\\.[0-9]+$/;\n\nexport const stringIsValidInt = (val: string) =>\n parseInt(val, 10).toString() === val;\n\nexport const stringIsValidDecimal = (val: string) =>\n stringIsValidInt(val) || decimalPattern.test(val);\n\nexport const stringIsValidNumber = (val: string) =>\n stringIsValidInt(val) || stringIsValidDecimal(val);\n\nexport const numericTypeOfStringValue = (val: string) =>\n stringIsValidInt(val) ? \"int\" : stringIsValidDecimal(val) ? \"double\" : \"NaN\";\n\nexport const isValidNumber = (n: unknown): n is number =>\n typeof n === \"number\" && isFinite(n);\n\nconst EMPTY = {};\nexport const shallowEquals = (\n o1: { [key: string]: unknown } = EMPTY,\n o2: { [key: string]: unknown } = EMPTY,\n) => {\n const props1 = Object.keys(o1);\n const props2 = Object.keys(o2);\n return (\n props1.length === props2.length &&\n props1.every((key) => o1[key] === o2[key])\n );\n};\n\nexport function getMovingValueDirection(\n newValue?: number,\n direction?: valueChangeDirection,\n prevValue?: number,\n /** the number of decimal places to take into account when highlighting a change */\n decimalPlaces?: number,\n): valueChangeDirection {\n if (newValue === undefined) {\n return \"\";\n }\n if (\n !isFinite(newValue) ||\n prevValue === undefined ||\n direction === undefined\n ) {\n return \"\";\n } else {\n let diff = newValue - prevValue;\n if (diff) {\n // make sure there is still a diff when reduced to number of decimals to be displayed\n if (typeof decimalPlaces === \"number\") {\n diff =\n +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);\n }\n }\n\n if (diff) {\n if (direction === \"\") {\n if (diff < 0) {\n return DOWN1;\n } else {\n return UP1;\n }\n } else if (diff > 0) {\n if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {\n return UP1;\n } else {\n return UP2;\n }\n } else if (\n direction === UP1 ||\n direction === UP2 ||\n direction === DOWN2\n ) {\n return DOWN1;\n } else {\n return DOWN2;\n }\n } else {\n return \"\";\n }\n }\n}\n\nexport function asInteger(\n index: number | string | undefined,\n defaultValue?: number,\n) {\n if (typeof index === \"number\") {\n return index;\n } else {\n const numIdx = parseInt(index ?? \"\");\n if (!isNaN(numIdx)) {\n return numIdx;\n } else if (typeof defaultValue === \"number\") {\n return defaultValue;\n }\n throw Error(`parseIndex invalid value ${index}`);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseDataSource.js","sources":["../../src/datasource/BaseDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { uuid } from \"../nanoid\";\nimport {\n DataSourceConfigChanges,\n isConfigChanged,\n vanillaConfig,\n withConfigDefaults,\n} from \"./datasource-utils\";\nimport { Range } from \"../range-utils\";\n\nexport type RuntimeConfig = WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n};\n\nexport abstract class BaseDataSource\n extends EventEmitter<DataSourceEvents>\n implements Pick<DataSource, \"config\">\n{\n // This should simply be id\n public viewport: string;\n\n protected _clientCallback: DataSourceSubscribeCallback | undefined;\n protected _config: RuntimeConfig = vanillaConfig;\n protected _impendingConfig: RuntimeConfig | undefined = undefined;\n protected _range = Range(0, 0);\n protected _size = 0;\n protected _title: string | undefined;\n\n #pageCount = 0;\n\n private awaitingConfirmationOfConfigChanges = false;\n\n constructor({\n aggregations,\n baseFilterSpec,\n columns,\n filterSpec,\n groupBy,\n sort,\n title,\n viewport,\n }: Omit<DataSourceConstructorProps, \"table\">) {\n super();\n this._config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n\n this._title = title;\n this.viewport = viewport ?? \"\";\n }\n\n subscribe(\n {\n baseFilterSpec,\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n viewport = this.viewport || (this.viewport = uuid()),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this._clientCallback = callback;\n this.viewport = viewport;\n\n if (\n aggregations ||\n baseFilterSpec ||\n columns ||\n filterSpec ||\n groupBy ||\n sort\n ) {\n this._config = {\n ...this._config,\n aggregations: aggregations || this._config.aggregations,\n baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this._range = range;\n }\n }\n\n get aggregations() {\n return this._config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.config = {\n ...this._config,\n aggregations,\n };\n this.emit(\"config\", this._config, this.range);\n }\n\n get baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\n };\n }\n\n get columns() {\n return this._config.columns;\n }\n\n set columns(columns: string[]) {\n this.config = {\n ...this._config,\n columns,\n };\n this.emit(\"config\", this._config, this.range);\n }\n\n get filter() {\n return this._config.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this._config,\n filterSpec: filter,\n };\n }\n\n get isAwaitingConfirmationOfConfigChange() {\n return this._impendingConfig !== undefined;\n }\n\n protected confirmConfigChange() {\n if (this._impendingConfig) {\n this._config = this._impendingConfig;\n console.log(\n \"%cclear impending config and emit config change\",\n \"color:red\",\n );\n this._impendingConfig = undefined;\n this.emit(\"config\", this._config, this.range, true);\n } else {\n throw Error(\n `[BaseDataSource], unexpected call to confirmConfigChange, no changes pending`,\n );\n }\n }\n\n get config() {\n return this._impendingConfig ?? this._config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const confirmed = this.awaitingConfirmationOfConfigChanges\n ? true\n : undefined;\n // TODO what happens if config is set and we still have an unconfirmed change ?\n this.awaitingConfirmationOfConfigChanges = false;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n this.emit(\"config\", this.config, this.range, confirmed, configChanges);\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n this.awaitingConfirmationOfConfigChanges = true;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n this.emit(\"config\", this.config, this.range, false, configChanges);\n }\n }\n\n get pageCount() {\n return this.#pageCount;\n }\n\n set pageCount(pageCount: number) {\n if (pageCount !== this.#pageCount) {\n this.#pageCount = pageCount;\n this.emit(\"page-count\", pageCount);\n }\n }\n\n get range() {\n return this._range;\n }\n\n set range(range: Range) {\n if (range.from !== this._range.from || range.to !== this._range.to) {\n this._range = range;\n this.pageCount = Math.ceil(this._size / (range.to - range.from));\n this.rangeRequest(range);\n requestAnimationFrame(() => {\n this.emit(\"range\", range);\n });\n }\n }\n\n get size() {\n return this._size;\n }\n\n set size(size: number) {\n this._size = size;\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(size / (this.range.to - this.range.from));\n this.pageCount = pageCount;\n }\n }\n\n get sort() {\n return this._config.sort;\n }\n\n set sort(sort: VuuSort) {\n this.config = {\n ...this._config,\n sort,\n };\n this.emit(\"config\", this._config, this.range);\n }\n\n get title() {\n return this._title ?? \"\";\n }\n\n set title(title: string) {\n this._title = title;\n this.emit(\"title-changed\", this.viewport ?? \"\", title);\n }\n\n // Public while we use this from useSessionDataSource\n public applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._config,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfig = {\n ...this._config,\n ...config,\n };\n } else {\n this._impendingConfig = undefined;\n this._config = {\n ...this._config,\n ...config,\n };\n }\n } else {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfig = withConfigDefaults(newConfig);\n } else {\n this._impendingConfig = undefined;\n this._config = withConfigDefaults(newConfig);\n }\n }\n return otherChanges;\n }\n }\n }\n\n abstract rangeRequest(range: VuuRange): void;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"datasource-action-utils.js","sources":["../../src/datasource/datasource-action-utils.ts"],"sourcesContent":["import {\n DataSourceMenusMessage,\n DataSourceVisualLinkCreatedMessage,\n DataSourceVisualLinkRemovedMessage,\n DataSourceVisualLinksMessage,\n VuuFeatureMessage,\n} from \"@vuu-ui/vuu-data-types\";\nimport { GridAction } from \"@vuu-ui/vuu-table-types\";\n\nexport const isVisualLinksAction = (\n action: GridAction,\n): action is DataSourceVisualLinksMessage => action.type === \"vuu-links\";\n\nexport const isVisualLinkCreatedAction = (\n action: GridAction,\n): action is DataSourceVisualLinkCreatedMessage =>\n action.type === \"vuu-link-created\";\n\nexport const isVisualLinkRemovedAction = (\n action: GridAction,\n): action is DataSourceVisualLinkRemovedMessage =>\n action.type === \"vuu-link-removed\";\n\nexport const isViewportMenusAction = (\n action: GridAction,\n): action is DataSourceMenusMessage => action.type === \"vuu-menu\";\n\nexport const isVuuFeatureAction = (\n action: GridAction,\n): action is VuuFeatureMessage =>\n isViewportMenusAction(action) || isVisualLinksAction(action);\n"],"names":[],"mappings":"AASO,MAAM,mBAAsB,GAAA,CACjC,MAC2C,KAAA,MAAA,CAAO,IAAS,KAAA;AAEtD,MAAM,yBAA4B,GAAA,CACvC,MAEA,KAAA,MAAA,CAAO,IAAS,KAAA;AAEX,MAAM,yBAA4B,GAAA,CACvC,MAEA,KAAA,MAAA,CAAO,IAAS,KAAA;AAEX,MAAM,qBAAwB,GAAA,CACnC,MACqC,KAAA,MAAA,CAAO,IAAS,KAAA;AAEhD,MAAM,qBAAqB,CAChC,MAAA,KAEA,sBAAsB,MAAM,CAAA,IAAK,oBAAoB,MAAM;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"datasource-filter-utils.js","sources":["../../src/datasource/datasource-filter-utils.ts"],"sourcesContent":["import { WithBaseFilter, WithFullConfig } from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\n\nexport const combineFilters = ({\n baseFilterSpec,\n filterSpec,\n ...config\n}: WithBaseFilter<WithFullConfig>) => {\n const baseFilterQuery = baseFilterSpec?.filter ?? \"\";\n const combinedFilter =\n filterSpec.filter.length > 0 && baseFilterQuery.length > 0\n ? `${filterSpec.filter} and ${baseFilterQuery}`\n : filterSpec.filter || baseFilterQuery;\n\n const newConfig: WithFullConfig = {\n ...config,\n filterSpec: {\n filter: combinedFilter,\n filterStruct:\n combinedFilter.length > 0 ? parseFilter(combinedFilter) : undefined,\n },\n };\n\n return newConfig;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,cAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAsC,KAAA;AACpC,EAAM,MAAA,eAAA,GAAkB,gBAAgB,MAAU,IAAA,EAAA;AAClD,EAAA,MAAM,cACJ,GAAA,UAAA,CAAW,MAAO,CAAA,MAAA,GAAS,KAAK,eAAgB,CAAA,MAAA,GAAS,CACrD,GAAA,CAAA,EAAG,WAAW,MAAM,CAAA,KAAA,EAAQ,eAAe,CAAA,CAAA,GAC3C,WAAW,MAAU,IAAA,eAAA;AAE3B,EAAA,MAAM,SAA4B,GAAA;AAAA,IAChC,GAAG,MAAA;AAAA,IACH,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,cAAA;AAAA,MACR,cACE,cAAe,CAAA,MAAA,GAAS,CAAI,GAAA,WAAA,CAAY,cAAc,CAAI,GAAA,KAAA;AAAA;AAC9D,GACF;AAEA,EAAO,OAAA,SAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"datasource-utils.js","sources":["../../src/datasource/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithBaseFilter,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"../column-utils\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n baseFilterChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: WithBaseFilter<DataSourceConfig>,\n newConfig: WithBaseFilter<DataSourceConfig>,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isBaseFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.baseFilterSpec?.filter !== c2.baseFilterSpec?.filter;\n }\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n baseFilterChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const baseFilterChanged = isBaseFilterChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n baseFilterChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n baseFilterChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (\n config?: WithBaseFilter<DataSourceConfig>,\n): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasBaseFilter = (\n config?: WithBaseFilter<DataSourceConfig>,\n): config is WithFilter =>\n config?.baseFilterSpec !== undefined &&\n config.baseFilterSpec.filter.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuUIMessageInRPCEditReject =>\n response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const withConfigDefaults = (\n config: WithBaseFilter<DataSourceConfig>,\n): WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n} => {\n if (\n config.aggregations &&\n config.baseFilterSpec &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n baseFilterSpec: baseFilter = { filter: \"\" },\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n baseFilterSpec: baseFilter,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"AA6Ba,MAAA,QAAA,GAAsB,EAAE,MAAA,EAAQ,EAAG;AACzC,MAAM,MAAkB,GAAA,EAAE,QAAU,EAAA,EAAG;AAEvC,MAAM,aAAgC,GAAA;AAAA,EAC3C,cAAc,EAAC;AAAA,EACf,SAAS,EAAC;AAAA,EACV,UAAY,EAAA,QAAA;AAAA,EACZ,SAAS,EAAC;AAAA,EACV,IAAM,EAAA;AACR;AAqBA,MAAM,yBAA8C,CAClD,EAAE,cAAc,IAAK,EAAA,EACrB,EAAE,YAAc,EAAA,IAAA,EAEf,KAAA,IAAA,KAAS,UAAa,IAAM,EAAA,MAAA,KAAW,KACvC,IAAS,KAAA,KAAA,CAAA,IAAa,MAAM,MAAW,KAAA,CAAA;AAE1C,MAAM,oBAAyC,CAC7C,EAAE,SAAS,KAAM,EAAA,EACjB,EAAE,OAAS,EAAA,KAAA,EAEV,KAAA,KAAA,KAAU,UAAa,KAAO,EAAA,MAAA,KAAW,KACzC,KAAU,KAAA,KAAA,CAAA,IAAa,OAAO,MAAW,KAAA,CAAA;AAE5C,MAAM,mBAAwC,CAC5C,EAAE,YAAY,EAAG,EAAA,EACjB,EAAE,UAAY,EAAA,EAAA,EAEb,KAAA,EAAA,KAAO,UAAa,EAAI,EAAA,MAAA,KAAW,MACnC,EAAO,KAAA,KAAA,CAAA,IAAa,IAAI,MAAW,KAAA,EAAA;AAEtC,MAAM,oBAAyC,CAC7C,EAAE,SAAS,IAAK,EAAA,EAChB,EAAE,OAAS,EAAA,IAAA,EAEV,KAAA,IAAA,KAAS,UAAa,IAAM,EAAA,MAAA,KAAW,KACvC,IAAS,KAAA,KAAA,CAAA,IAAa,MAAM,MAAW,KAAA,CAAA;AAE1C,MAAM,cAAA,GAAsC,CAAC,EAAE,IAAA,EAAM,IAAM,EAAA,EAAE,MAAM,EAAG,EAAA,KACnE,OAAO,KAAa,CAAA,IAAA,EAAA,EAAI,SAAS,MAAW,KAAA,CAAA,IAC5C,OAAO,KAAa,CAAA,IAAA,EAAA,EAAI,SAAS,MAAW,KAAA,CAAA;AAE/C,MAAM,cAAA,GAAiB,CAAC,CAAA,EAAY,CAAe,KAAA;AACjD,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,CAAA,KAAM,KAAa,CAAA,IAAA,CAAA,KAAM,KAAW,CAAA,EAAA;AAC7C,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,KAAA;AAAA;AAEX,CAAA;AAEA,MAAM,qBAAA,GAA6C,CAAC,MAAA,EAAQ,SAAc,KAAA;AACxE,EAAM,MAAA,EAAE,YAAc,EAAA,IAAA,EAAS,GAAA,MAAA;AAC/B,EAAM,MAAA,EAAE,YAAc,EAAA,IAAA,EAAS,GAAA,SAAA;AAC/B,EAAA,IAAI,eAAe,IAAM,EAAA,IAAI,KAAK,sBAAuB,CAAA,MAAA,EAAQ,SAAS,CAAG,EAAA;AAC3E,IAAO,OAAA,KAAA;AAAA,GACE,MAAA,IAAA,IAAA,KAAS,KAAa,CAAA,IAAA,IAAA,KAAS,KAAW,CAAA,EAAA;AACnD,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,IAAA,CAAK,MAAW,KAAA,IAAA,CAAK,MAAQ,EAAA;AACtC,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,OAAO,IAAK,CAAA,IAAA;AAAA,IACV,CAAC,EAAE,MAAQ,EAAA,OAAA,IAAW,CACpB,KAAA,MAAA,KAAW,IAAK,CAAA,CAAC,CAAE,CAAA,MAAA,IAAU,OAAY,KAAA,IAAA,CAAK,CAAC,CAAE,CAAA;AAAA,GACrD;AACF,CAAA;AAEA,MAAM,gBAAA,GAAwC,CAAC,MAAA,EAAQ,SAAc,KAAA;AACnE,EAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,MAAA;AAC3B,EAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,SAAA;AAE3B,EAAA,IAAI,eAAe,KAAO,EAAA,KAAK,KAAK,iBAAkB,CAAA,MAAA,EAAQ,SAAS,CAAG,EAAA;AACxE,IAAO,OAAA,KAAA;AAAA,GACE,MAAA,IAAA,KAAA,KAAU,KAAa,CAAA,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AACrD,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,KAAA,EAAO,MAAW,KAAA,KAAA,EAAO,MAAQ,EAAA;AAC1C,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,KAAA,CAAM,KAAK,CAAC,MAAA,EAAQ,MAAM,MAAW,KAAA,KAAA,GAAQ,CAAC,CAAC,CAAA;AACxD,CAAA;AAEa,MAAA,mBAAA,GAA2C,CAAC,EAAA,EAAI,EAAO,KAAA;AAClE,EAAI,IAAA,gBAAA,CAAiB,EAAI,EAAA,EAAE,CAAG,EAAA;AAC5B,IAAO,OAAA,KAAA;AAAA,GACF,MAAA;AACL,IAAA,OAAO,EAAG,CAAA,cAAA,EAAgB,MAAW,KAAA,EAAA,CAAG,cAAgB,EAAA,MAAA;AAAA;AAE5D;AAEa,MAAA,eAAA,GAAuC,CAAC,EAAA,EAAI,EAAO,KAAA;AAC9D,EAAI,IAAA,gBAAA,CAAiB,EAAI,EAAA,EAAE,CAAG,EAAA;AAC5B,IAAO,OAAA,KAAA;AAAA,GACF,MAAA;AACL,IAAA,OAAO,EAAG,CAAA,UAAA,EAAY,MAAW,KAAA,EAAA,CAAG,UAAY,EAAA,MAAA;AAAA;AAEpD;AAEa,MAAA,gBAAA,GAAwC,CAAC,MAAA,EAAQ,SAAc,KAAA;AAC1E,EAAM,MAAA,EAAE,OAAS,EAAA,EAAA,EAAO,GAAA,MAAA;AACxB,EAAM,MAAA,EAAE,OAAS,EAAA,EAAA,EAAO,GAAA,SAAA;AACxB,EAAA,IAAI,eAAe,EAAI,EAAA,EAAE,KAAK,iBAAkB,CAAA,MAAA,EAAQ,SAAS,CAAG,EAAA;AAClE,IAAO,OAAA,KAAA;AAAA,GACE,MAAA,IAAA,EAAA,KAAO,KAAa,CAAA,IAAA,EAAA,KAAO,KAAW,CAAA,EAAA;AAC/C,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,EAAA,EAAI,MAAW,KAAA,EAAA,EAAI,MAAQ,EAAA;AACpC,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,EAAA,CAAG,KAAK,CAAC,MAAA,EAAQ,MAAM,MAAW,KAAA,EAAA,GAAK,CAAC,CAAC,CAAA;AAClD;AAEA,MAAM,aAAA,GAAqC,CAAC,MAAA,EAAQ,SAAc,KAAA;AAChE,EAAM,MAAA,EAAE,IAAM,EAAA,EAAA,EAAO,GAAA,MAAA;AACrB,EAAM,MAAA,EAAE,IAAM,EAAA,EAAA,EAAO,GAAA,SAAA;AACrB,EAAA,IAAI,eAAe,EAAI,EAAA,EAAE,KAAK,cAAe,CAAA,MAAA,EAAQ,SAAS,CAAG,EAAA;AAC/D,IAAO,OAAA,KAAA;AAAA,GACE,MAAA,IAAA,EAAA,KAAO,KAAa,CAAA,IAAA,EAAA,KAAO,KAAW,CAAA,EAAA;AAC/C,IAAO,OAAA,IAAA;AAAA,aACE,EAAI,EAAA,QAAA,CAAS,MAAW,KAAA,EAAA,EAAI,SAAS,MAAQ,EAAA;AACtD,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,OAAO,GAAG,QAAS,CAAA,IAAA;AAAA,IACjB,CAAC,EAAE,MAAA,EAAQ,QAAS,EAAA,EAAG,MACrB,MAAW,KAAA,EAAA,CAAG,QAAS,CAAA,CAAC,EAAE,MAAU,IAAA,QAAA,KAAa,EAAG,CAAA,QAAA,CAAS,CAAC,CAAE,CAAA;AAAA,GACpE;AACF,CAAA;AAEA,MAAM,mBAAA,GAA2C,CAC/C,EAAE,UAAA,EAAY,IACd,EAAA,EAAE,UAAY,EAAA,EAAA,EACX,KAAA;AACH,EAAI,IAAA,cAAA,CAAe,EAAI,EAAA,EAAE,CAAG,EAAA;AAC1B,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,EAAA,KAAO,KAAa,CAAA,IAAA,EAAA,KAAO,KAAW,CAAA,EAAA;AACxC,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,OAAO,GAAG,KAAU,KAAA,EAAA,CAAG,KAAS,IAAA,EAAA,CAAG,eAAe,EAAG,CAAA,UAAA;AACvD,CAAA;AAEO,MAAM,iBAAkD,GAAA;AAAA,EAC7D,mBAAqB,EAAA,KAAA;AAAA,EACrB,iBAAmB,EAAA,KAAA;AAAA,EACnB,cAAgB,EAAA,KAAA;AAAA,EAChB,aAAe,EAAA,KAAA;AAAA,EACf,cAAgB,EAAA,KAAA;AAAA,EAChB,SAAW,EAAA,IAAA;AAAA,EACX,WAAa,EAAA,KAAA;AAAA,EACb,iBAAmB,EAAA;AACrB;AAEa,MAAA,eAAA,GAAkB,CAC7B,MAAA,EACA,SACiC,KAAA;AACjC,EAAI,IAAA,cAAA,CAAe,MAAQ,EAAA,SAAS,CAAG,EAAA;AACrC,IAAO,OAAA,iBAAA;AAAA;AAGT,EAAI,IAAA,MAAA,KAAW,KAAa,CAAA,IAAA,SAAA,IAAa,KAAW,CAAA,EAAA;AAClD,IAAO,OAAA,iBAAA;AAAA,GACT,MAAA,IAAW,WAAW,KAAW,CAAA,EAAA;AAC/B,IAAO,OAAA,eAAA,CAAgB,EAAC,EAAG,SAAS,CAAA;AAAA,GACtC,MAAA,IAAW,cAAc,KAAW,CAAA,EAAA;AAClC,IAAO,OAAA,eAAA,CAAgB,MAAQ,EAAA,EAAE,CAAA;AAAA;AAGnC,EAAM,MAAA,mBAAA,GAAsB,qBAAsB,CAAA,MAAA,EAAQ,SAAS,CAAA;AACnE,EAAM,MAAA,iBAAA,GAAoB,mBAAoB,CAAA,MAAA,EAAQ,SAAS,CAAA;AAC/D,EAAM,MAAA,cAAA,GAAiB,gBAAiB,CAAA,MAAA,EAAQ,SAAS,CAAA;AACzD,EAAM,MAAA,aAAA,GAAgB,eAAgB,CAAA,MAAA,EAAQ,SAAS,CAAA;AACvD,EAAM,MAAA,cAAA,GAAiB,gBAAiB,CAAA,MAAA,EAAQ,SAAS,CAAA;AACzD,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,MAAA,EAAQ,SAAS,CAAA;AACnD,EAAM,MAAA,iBAAA,GAAoB,mBAAoB,CAAA,MAAA,EAAQ,SAAS,CAAA;AAE/D,EAAA,MAAM,YAAY,EAChB,mBAAA,IACA,qBACA,cACA,IAAA,aAAA,IACA,kBACA,WACA,IAAA,iBAAA,CAAA;AAGF,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEa,MAAA,UAAA,GAAa,CACxB,MAAA,KAEA,MAAW,KAAA,KAAA,CAAA,IACX,OAAO,OAAY,KAAA,KAAA,CAAA,IACnB,MAAO,CAAA,OAAA,CAAQ,MAAS,GAAA;AAEb,MAAA,aAAA,GAAgB,CAC3B,MAEA,KAAA,MAAA,EAAQ,mBAAmB,KAC3B,CAAA,IAAA,MAAA,CAAO,cAAe,CAAA,MAAA,CAAO,MAAS,GAAA;AAE3B,MAAA,SAAA,GAAY,CAAC,MACxB,KAAA,MAAA,EAAQ,eAAe,KAAa,CAAA,IAAA,MAAA,CAAO,UAAW,CAAA,MAAA,CAAO,MAAS,GAAA;AAEjE,MAAM,OAAU,GAAA,CAAC,MACtB,KAAA,MAAA,EAAQ,SAAS,KACjB,CAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,CAAO,MAAM,QAAQ,CAAA,IACnC,MAAO,CAAA,IAAA,CAAK,SAAS,MAAS,GAAA;AAEzB,MAAM,gCAAgC,CAC3C,MAAA,KAEA,OAAQ,MAAA,CAAuC,yBAAyB,CACxE,KAAA;AAEK,MAAM,oBAAuB,GAAA,CAClC,OACuC,KAAA,OAAA,CAAQ,IAAS,KAAA;AAEnD,MAAM,0BAA6B,GAAA,CACxC,GAEC,KAAA,GAAA,CAAiC,IAAS,KAAA;AAEtC,MAAM,gBAAmB,GAAA,CAAC,GAC/B,KAAA,OAAQ,IAA0B,MAAW,KAAA;AAExC,MAAM,eAAkB,GAAA,CAC7B,QAEA,KAAA,QAAA,EAAU,IAAS,KAAA;AAEd,MAAM,sBAAsB,CACjC,GAAA,KAEC,GAA4B,CAAA,IAAA,CAAK,SAAS,cAAc;AAE9C,MAAA,iBAAA,GAAoB,CAC/B,GAAA,KACmC,UAAc,IAAA;AAQtC,MAAA,kBAAA,GAAqB,CAChC,OAEA,KAAA,OAAA,CAAQ,SAAS,iBAAqB,IAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,IAAI;AAErD,MAAA,kBAAA,GAAqB,CAChC,MAGG,KAAA;AACH,EACE,IAAA,MAAA,CAAO,YACP,IAAA,MAAA,CAAO,cACP,IAAA,MAAA,CAAO,OACP,IAAA,MAAA,CAAO,UACP,IAAA,MAAA,CAAO,OACP,IAAA,MAAA,CAAO,IACP,EAAA;AACA,IAAO,OAAA,MAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA;AAAA,MACJ,eAAe,EAAC;AAAA,MAChB,cAAgB,EAAA,UAAA,GAAa,EAAE,MAAA,EAAQ,EAAG,EAAA;AAAA,MAC1C,UAAU,EAAC;AAAA,MACX,UAAY,EAAA,MAAA,GAAS,EAAE,MAAA,EAAQ,EAAG,EAAA;AAAA,MAClC,UAAU,EAAC;AAAA,MACX,IAAO,GAAA,EAAE,QAAU,EAAA,EAAG,EAAA;AAAA,MACtB;AAAA,KACE,GAAA,MAAA;AAEJ,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA,cAAgB,EAAA,UAAA;AAAA,MAChB,OAAA;AAAA,MACA,UAAY,EAAA,MAAA;AAAA,MACZ,OAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAAA;AAEJ;AAKO,MAAM,wBAAwB,CACnC,GAAA,EACA,cAEA,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAE,CAAA,MAAA;AAAA,EACxB,CAAC,MAAA,EAAQ,CAAC,IAAA,EAAM,KAAK,CAAO,MAAA;AAAA,IAC1B,GAAG,MAAA;AAAA,IACH,CAAC,IAAI,GAAG,GAAA,CAAI,KAAK;AAAA,GACnB,CAAA;AAAA,EACA;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-utils.js","sources":["../../src/date/date-utils.ts"],"sourcesContent":["import { CalendarDate } from \"@internationalized/date\";\n\nexport function toCalendarDate(d: Date) {\n return new CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());\n}\n"],"names":[],"mappings":";;AAEO,SAAS,eAAe,CAAS,EAAA;AACtC,EAAO,OAAA,IAAI,YAAa,CAAA,CAAA,CAAE,WAAY,EAAA,EAAG,CAAE,CAAA,QAAA,EAAa,GAAA,CAAA,EAAG,CAAE,CAAA,OAAA,EAAS,CAAA;AACxE;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dateTimePattern.js","sources":["../../src/date/dateTimePattern.ts"],"sourcesContent":["import { DateTimeDataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport { isTypeDescriptor } from \"../column-utils\";\nimport { DateTimePattern, isDateTimePattern } from \"./types\";\n\nexport const defaultPatternsByType = {\n time: \"hh:mm:ss\",\n date: \"dd.mm.yyyy\",\n} as const;\n\nexport const fallbackDateTimePattern: DateTimePattern = {\n date: defaultPatternsByType[\"date\"],\n};\n\nexport function dateTimePattern(\n type: DateTimeDataValueDescriptor[\"type\"],\n): DateTimePattern {\n if (isTypeDescriptor(type)) {\n if (type.formatting && isDateTimePattern(type.formatting.pattern)) {\n return type.formatting.pattern;\n }\n }\n\n return fallbackDateTimePattern;\n}\n"],"names":[],"mappings":";;;AAIO,MAAM,qBAAwB,GAAA;AAAA,EACnC,IAAM,EAAA,UAAA;AAAA,EACN,IAAM,EAAA;AACR;AAEO,MAAM,uBAA2C,GAAA;AAAA,EACtD,IAAA,EAAM,sBAAsB,MAAM;AACpC;AAEO,SAAS,gBACd,IACiB,EAAA;AACjB,EAAI,IAAA,gBAAA,CAAiB,IAAI,CAAG,EAAA;AAC1B,IAAA,IAAI,KAAK,UAAc,IAAA,iBAAA,CAAkB,IAAK,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AACjE,MAAA,OAAO,KAAK,UAAW,CAAA,OAAA;AAAA;AACzB;AAGF,EAAO,OAAA,uBAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatter.js","sources":["../../src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { isNotNullOrUndefined } from \"../ts-utils\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<DatePattern, DateTimeFormatConfig> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nfunction getFormatConfigs(pattern: DateTimePattern) {\n return [\n pattern.date ? formatConfigByDatePatterns[pattern.date] : null,\n pattern.time ? formatConfigByTimePatterns[pattern.time] : null,\n ];\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getFormatConfigs(pattern)\n .filter(isNotNullOrUndefined)\n .map((c) => getDateFormatter(c.locale, c.options));\n\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n\nexport function getDateFormatter(\n locale: string,\n options?: Intl.DateTimeFormatOptions\n) {\n return new DateFormatter(locale, options);\n}\n"],"names":[],"mappings":";;;AAUA,MAAM,qBAAoD,GAAA;AAAA,EACxD,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,UAAY,EAAA;AAAA,IACV,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,KAAM;AAAA,GACrD;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,IAAK;AAAA;AAEtD,CAAA;AAGA,MAAM,qBAAoD,GAAA;AAAA,EACxD,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA;AACR,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,qBAAsB;AAAA,GACtC;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA,GACrD;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA;AAEvD,CAAA;AAEA,SAAS,iBAAiB,OAA0B,EAAA;AAClD,EAAO,OAAA;AAAA,IACL,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA;AAAA,IAC1D,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA;AAAA,GAC5D;AACF;AAEO,SAAS,WAAW,OAA+C,EAAA;AACxE,EAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,OAAO,CAAA,CACxC,OAAO,oBAAoB,CAAA,CAC3B,GAAI,CAAA,CAAC,MAAM,gBAAiB,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,OAAO,CAAC,CAAA;AAEnD,EAAA,OAAO,CAAC,CAAA,KAAM,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAC3D;AAEgB,SAAA,gBAAA,CACd,QACA,OACA,EAAA;AACA,EAAO,OAAA,IAAI,aAAc,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC1C;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sources":["../../src/date/types.ts"],"sourcesContent":["import { ColumnTypeFormatting } from \"@vuu-ui/vuu-table-types\";\n\nconst supportedDatePatterns = [\n \"dd.mm.yyyy\",\n \"dd/mm/yyyy\",\n \"dd MMM yyyy\",\n \"dd MMMM yyyy\",\n \"mm/dd/yyyy\",\n \"MMM dd, yyyy\",\n \"MMMM dd, yyyy\",\n] as const;\n\nconst supportedTimePatterns = [\"hh:mm:ss\", \"hh:mm:ss a\"] as const;\n\nexport const supportedDateTimePatterns = {\n date: supportedDatePatterns,\n time: supportedTimePatterns,\n};\nexport const dateTimeLabelByType = { date: \"Date\", time: \"Time\" } as const;\n\nexport type DatePattern = (typeof supportedDatePatterns)[number];\nexport type TimePattern = (typeof supportedTimePatterns)[number];\n\nexport type DateTimePattern =\n | { date?: DatePattern; time: TimePattern }\n | { date: DatePattern; time?: TimePattern };\n\nexport const isDatePattern = (pattern?: string): pattern is DatePattern =>\n supportedDatePatterns.includes(pattern as DatePattern);\n\nexport const isTimePattern = (pattern?: string): pattern is TimePattern =>\n supportedTimePatterns.includes(pattern as TimePattern);\n\nexport const isDateTimePattern = (\n pattern?: ColumnTypeFormatting[\"pattern\"],\n): pattern is DateTimePattern =>\n isDatePattern(pattern?.date) || isTimePattern(pattern?.time);\n"],"names":[],"mappings":"AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,qBAAA,GAAwB,CAAC,UAAA,EAAY,YAAY,CAAA;AAEhD,MAAM,yBAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,qBAAA;AAAA,EACN,IAAM,EAAA;AACR;AACO,MAAM,mBAAsB,GAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,MAAM,MAAO;AASzD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAEhD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAE1C,MAAA,iBAAA,GAAoB,CAC/B,OAEA,KAAA,aAAA,CAAc,SAAS,IAAI,CAAA,IAAK,aAAc,CAAA,OAAA,EAAS,IAAI;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-utils.js","sources":["../src/debug-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { logger } from \"./logging-utils\";\n\nconst { debug, debugEnabled } = logger(\"range-monitor\");\n\nexport class RangeMonitor {\n public range: VuuRange = { from: 0, to: 0 };\n public timestamp = 0;\n\n constructor(private source: string) {}\n\n isSet() {\n return this.timestamp !== 0;\n }\n set({ from, to }: VuuRange) {\n const { timestamp } = this;\n this.range.from = from;\n this.range.to = to;\n this.timestamp = performance.now();\n if (timestamp) {\n debugEnabled &&\n debug(\n `<${this.source}> [${from}-${to}], ${(\n this.timestamp - timestamp\n ).toFixed(0)} ms elapsed`,\n );\n } else {\n return 0;\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAGA,MAAM,EAAE,KAAA,EAAO,YAAa,EAAA,GAAI,OAAO,eAAe,CAAA;AAE/C,MAAM,YAAa,CAAA;AAAA,EAIxB,YAAoB,MAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAHpB,IAAA,aAAA,CAAA,IAAA,EAAO,OAAkB,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,CAAE,EAAA,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAO,WAAY,EAAA,CAAA,CAAA;AAAA;AAEkB,EAErC,KAAQ,GAAA;AACN,IAAA,OAAO,KAAK,SAAc,KAAA,CAAA;AAAA;AAC5B,EACA,GAAI,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC1B,IAAM,MAAA,EAAE,WAAc,GAAA,IAAA;AACtB,IAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA;AAClB,IAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA;AAChB,IAAK,IAAA,CAAA,SAAA,GAAY,YAAY,GAAI,EAAA;AACjC,IAAA,IAAI,SAAW,EAAA;AACb,MACE,YAAA,IAAA,KAAA;AAAA,QACE,CAAI,CAAA,EAAA,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAA,CAC7B,IAAK,CAAA,SAAA,GAAY,SACjB,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA;AAAA,OACd;AAAA,KACG,MAAA;AACL,MAAO,OAAA,CAAA;AAAA;AACT;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-emitter.js","sources":["../src/event-emitter.ts"],"sourcesContent":["type Listener = (...args: any[]) => void;\nexport type EmittedEvents = Record<string, Listener>;\n\nfunction isArrayOfListeners(\n listeners: EventListener | EventListener[],\n): listeners is EventListener[] {\n return Array.isArray(listeners);\n}\n\nfunction isOnlyListener(\n listeners: EventListener | EventListener[],\n): listeners is EventListener {\n return !Array.isArray(listeners);\n}\n\nexport interface IEventEmitter<Events extends EmittedEvents> {\n addListener<E extends keyof Events>(event: E, listener: Events[E]): void;\n emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>): void;\n on<E extends keyof Events>(event: E, listener: Events[E]): void;\n removeListener<E extends keyof Events>(event: E, listener: Events[E]): void;\n removeAllListeners<E extends keyof Events>(event?: E): void;\n}\n\nexport class EventEmitter<Events extends EmittedEvents>\n implements IEventEmitter<Events>\n{\n #events: Map<keyof Events, Listener | Listener[]> = new Map();\n\n addListener<E extends keyof Events>(event: E, listener: Events[E]) {\n const listeners = this.#events.get(event);\n\n if (!listeners) {\n this.#events.set(event, listener);\n } else if (isArrayOfListeners(listeners)) {\n listeners.push(listener);\n } else if (isOnlyListener(listeners)) {\n this.#events.set(event, [listeners, listener]);\n }\n }\n\n removeListener<E extends keyof Events>(event: E, listener: Events[E]) {\n if (!this.#events.has(event)) {\n return;\n }\n\n const listenerOrListeners = this.#events.get(event);\n let position = -1;\n\n if (listenerOrListeners === listener) {\n this.#events.delete(event);\n } else if (Array.isArray(listenerOrListeners)) {\n for (let i = listenerOrListeners.length; i-- > 0; ) {\n if (listenerOrListeners[i] === listener) {\n position = i;\n break;\n }\n }\n\n if (position < 0) {\n return;\n }\n\n if (listenerOrListeners.length === 1) {\n listenerOrListeners.length = 0;\n this.#events.delete(event);\n } else {\n listenerOrListeners.splice(position, 1);\n }\n }\n }\n\n removeAllListeners<E extends keyof Events>(event?: E) {\n if (event && this.#events.has(event)) {\n this.#events.delete(event);\n } else if (event === undefined) {\n this.#events.clear();\n }\n }\n\n emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>) {\n if (this.#events) {\n const handler = this.#events.get(event);\n if (handler) {\n this.invokeHandler(handler, args);\n }\n }\n }\n\n once<E extends keyof Events>(event: E, listener: Events[E]) {\n const handler = ((...args) => {\n this.removeListener(event, handler);\n listener(...args);\n }) as Events[E];\n\n this.on(event, handler);\n }\n\n on<E extends keyof Events>(event: E, listener: Events[E]) {\n this.addListener(event, listener);\n }\n\n hasListener<E extends keyof Events>(event: E, listener: Events[E]) {\n const listeners = this.#events.get(event);\n if (Array.isArray(listeners)) {\n return listeners.includes(listener);\n } else {\n return listeners === listener;\n }\n }\n\n private invokeHandler(handler: Listener | Array<Listener>, args: unknown[]) {\n if (isArrayOfListeners(handler)) {\n handler.slice().forEach((listener) => this.invokeHandler(listener, args));\n } else {\n switch (args.length) {\n case 0:\n handler();\n break;\n case 1:\n handler(args[0]);\n break;\n case 2:\n handler(args[0], args[1]);\n break;\n // slower\n default:\n handler.call(null, ...args);\n }\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-utils.js","sources":["../src/feature-utils.ts"],"sourcesContent":["import type { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ListOption } from \"@vuu-ui/vuu-table-types\";\nimport { partition } from \"./array-utils\";\nimport { wordify } from \"./text-utils\";\nimport React, { ReactElement } from \"react\";\nimport { getLayoutComponent } from \"./component-registry\";\n\nexport type PathMap = {\n [key: string]: Pick<DynamicFeatureDescriptor, \"css\" | \"url\">;\n};\nexport type Environment = \"development\" | \"production\";\nexport const env = process.env.NODE_ENV as Environment;\n\nexport type LookupTableProvider = (table: VuuTable) => ListOption[];\n\nexport interface ViewConfig {\n allowRename?: boolean;\n closeable?: boolean;\n header?: boolean;\n}\n\nexport interface DynamicFeatureProps<P extends object | undefined = object> {\n /**\n props that will be passed to the lazily loaded component.\n */\n ComponentProps?: P;\n ViewProps?: ViewConfig;\n css?: string;\n height?: number;\n title?: string;\n /** \n The url of javascript bundle to lazily load. Bundle must provide a default export\n and that export must be a React component.\n */\n url: string;\n width?: number;\n}\n\ndeclare global {\n const vuuConfig: Promise<VuuConfig>;\n}\n\nexport interface DynamicFeatureDescriptor {\n name: string;\n title: string;\n url: string;\n css?: string;\n leftNavLocation: \"vuu-features\" | \"vuu-tables\";\n featureProps?: {\n vuuTables?: \"*\" | VuuTable[];\n };\n viewProps?: ViewConfig;\n}\n\nexport interface StaticFeatureDescriptor {\n group?: string;\n label: string;\n type: string;\n}\n\nconst isStaticFeature = (\n feature: unknown,\n): feature is StaticFeatureDescriptor =>\n feature !== null && typeof feature === \"object\" && \"type\" in feature;\n\nexport const isStaticFeatures = (\n features: unknown,\n): features is StaticFeatureDescriptor[] =>\n Array.isArray(features) && features.every(isStaticFeature);\n\nexport interface FilterTableFeatureProps {\n tableSchema: TableSchema;\n}\n\nexport type DynamicFeatures = {\n [key: string]: DynamicFeatureDescriptor;\n};\n\nexport function featureFromJson({ type }: { type: string }): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : getLayoutComponent(type);\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create feature component from JSON, unknown type ${type}`,\n );\n }\n return React.createElement(componentType);\n}\n\nexport interface VuuConfig {\n features: DynamicFeatures;\n authUrl?: string;\n websocketUrl: string;\n ssl: boolean;\n}\n\n/**\n * We currently categorize 'features' simply by the leftNavLocation\n * @param feature\n * @returns\n */\nexport const isCustomFeature = (feature: DynamicFeatureDescriptor) =>\n feature.leftNavLocation === \"vuu-features\";\n\nexport const isWildcardSchema = (\n vuuTables?: \"*\" | VuuTable[],\n): vuuTables is \"*\" => vuuTables === \"*\";\nexport const isVuuTables = (\n vuuTables?: \"*\" | VuuTable[],\n): vuuTables is VuuTable[] => Array.isArray(vuuTables);\n\nexport interface FeaturePropsWithFilterTableFeature\n extends Omit<DynamicFeatureProps, \"ComponentProps\"> {\n ComponentProps: FilterTableFeatureProps;\n}\n\nexport const hasFilterTableFeatureProps = (\n props: DynamicFeatureProps,\n): props is FeaturePropsWithFilterTableFeature =>\n typeof props.ComponentProps === \"object\" &&\n props.ComponentProps !== null &&\n \"tableSchema\" in props.ComponentProps;\n\nexport const isSameTable = (t1: VuuTable, t2: VuuTable) => {\n t1.module === t2.module && t1.table == t2.table;\n};\n\n// Sort TableScheas by module\nexport const byModule = (schema1: TableSchema, schema2: TableSchema) => {\n const m1 = schema1.table.module.toLowerCase();\n const m2 = schema2.table.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (schema1.table.table < schema2.table.table) {\n return -1;\n } else if (schema1.table.table > schema2.table.table) {\n return 1;\n } else {\n return 0;\n }\n};\n\nexport type GetFeaturePaths = (params: {\n env: Environment;\n fileName: string;\n withCss?: boolean;\n}) => DynamicFeatureProps;\n\nexport const getFilterTableFeatures = (\n schemas: TableSchema[],\n getFeaturePath: GetFeaturePaths,\n) =>\n schemas\n .sort(byModule)\n .map<DynamicFeatureProps<FilterTableFeatureProps>>((schema) => ({\n ...getFeaturePath({ env, fileName: \"FilterTable\" }),\n ComponentProps: {\n tableSchema: schema,\n },\n ViewProps: {\n allowRename: true,\n },\n title: `${schema.table.module} ${schema.table.table}`,\n }));\n\nexport type Component = {\n componentName: string;\n component: unknown;\n};\n\nexport const assertComponentRegistered = (\n componentName: string,\n component: unknown,\n) => {\n if (typeof component !== \"function\") {\n console.warn(\n `${componentName} module not loaded, will be unabale to deserialize from layout JSON`,\n );\n }\n};\n\nexport const assertComponentsRegistered = (componentList: Component[]) => {\n for (const { componentName, component } of componentList) {\n assertComponentRegistered(componentName, component);\n }\n};\n/**\n * Process the DynamicFeature descriptors. Identify\n * the vuu tables required and inject the appropriate TableSchemas\n *\n * @param dynamicFeatures\n * @param tableSchemas\n * @returns\n */\nexport const getCustomAndTableFeatures = (\n dynamicFeatures: DynamicFeatureDescriptor[],\n tableSchemas: TableSchema[],\n): {\n dynamicFeatures: DynamicFeatureProps[];\n tableFeatures: DynamicFeatureProps<FilterTableFeatureProps>[];\n} => {\n // Split features into simple tables and 'custom' features\n const [customFeatureConfig, tableFeaturesConfig] = partition(\n dynamicFeatures,\n isCustomFeature,\n );\n\n const customFeatures: DynamicFeatureProps[] = [];\n const tableFeatures: DynamicFeatureProps<FilterTableFeatureProps>[] = [];\n\n for (const {\n featureProps = {},\n viewProps,\n ...feature\n } of tableFeaturesConfig) {\n const { vuuTables } = featureProps;\n // Currently FilterTable is the only 'tableFeature' and it uses the wildcard\n if (isWildcardSchema(vuuTables)) {\n if (tableSchemas) {\n for (const tableSchema of tableSchemas) {\n tableFeatures.push({\n ...feature,\n ComponentProps: {\n tableSchema,\n },\n title: `${tableSchema.table.module} ${wordify(\n tableSchema.table.table,\n )}`,\n ViewProps: {\n ...viewProps,\n allowRename: true,\n },\n });\n }\n }\n } /*else if (isVuuTables(vuuTables) && tableSchemas) {\n const tableSchema = tableSchemas.find((tableSchema) =>\n isSameTable(vuuTable, tableSchema.table),\n );\n if (tableSchema) {\n tableFeatures.push({\n ...feature,\n ComponentProps: {\n tableSchema,\n },\n ViewProps: viewProps,\n });\n }\n }*/\n }\n\n for (const {\n featureProps = {},\n viewProps,\n ...feature\n } of customFeatureConfig) {\n const { vuuTables } = featureProps;\n if (isVuuTables(vuuTables)) {\n if (tableSchemas) {\n customFeatures.push({\n ...feature,\n ComponentProps: vuuTables.reduce<Record<string, TableSchema>>(\n (map, vuuTable) => {\n map[`${vuuTable.table}Schema`] = tableSchemas.find(\n (tableSchema) => isSameTable(vuuTable, tableSchema.table),\n ) as TableSchema;\n return map;\n },\n {},\n ),\n ViewProps: viewProps,\n });\n }\n } else {\n customFeatures.push(feature);\n }\n }\n return { dynamicFeatures: customFeatures, tableFeatures: tableFeatures };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter-utils.js","sources":["../../src/filters/filter-utils.ts"],"sourcesContent":["import type { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\nimport {\n AndFilter,\n Filter,\n FilterClauseOp,\n FilterWithPartialClause,\n MultiClauseFilter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { VuuFilter, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { getTypedValue } from \"../form-utils\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"contains\",\n \"starts\",\n \"ends\",\n]);\n\nexport const isValidFilterClauseOp = (op?: string): op is FilterClauseOp =>\n op === \"in\" || singleValueFilterOps.has(op as SingleValueFilterClauseOp);\n\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isFilterClause = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (\n f?: Partial<Filter>,\n): f is MultiValueFilterClause => f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Partial<Filter>): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (f: Partial<Filter>): f is AndFilter =>\n f.op === \"and\";\nexport const isOrFilter = (f: Partial<Filter>): f is OrFilter => f.op === \"or\";\n\nexport const isCompleteFilter = (filter: Partial<Filter>): filter is Filter =>\n isSingleValueFilter(filter) &&\n filter.column !== undefined &&\n filter.op !== undefined &&\n filter.value !== undefined;\n\nexport function isMultiClauseFilter(\n f?: Partial<Filter> | FilterWithPartialClause,\n): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n\nexport const applyFilterToColumns = (\n columns: RuntimeColumnDescriptor[],\n { filterStruct }: DataSourceFilter,\n) =>\n columns.map((column) => {\n // TODO this gives us a dependency on vuu-filters\n const filter = extractFilterForColumn(filterStruct, column.name);\n if (filter !== undefined) {\n return {\n ...column,\n filter,\n };\n } else if (column.filter) {\n return {\n ...column,\n filter: undefined,\n };\n } else {\n return column;\n }\n });\n\nexport const isFilteredColumn = (column: RuntimeColumnDescriptor) =>\n column.filter !== undefined;\n\nexport const stripFilterFromColumns = (columns: RuntimeColumnDescriptor[]) =>\n columns.map((col) => {\n const { filter, ...rest } = col;\n return filter ? rest : col;\n });\n\nexport const extractFilterForColumn = (\n filter: Filter | undefined,\n columnName: string,\n) => {\n if (isMultiClauseFilter(filter)) {\n return collectFiltersForColumn(filter, columnName);\n }\n if (isFilterClause(filter)) {\n return filter.column === columnName ? filter : undefined;\n }\n return undefined;\n};\n\nconst collectFiltersForColumn = (\n filter: MultiClauseFilter,\n columnName: string,\n) => {\n const { filters, op } = filter;\n const results: Filter[] = [];\n filters.forEach((filter) => {\n const ffc = extractFilterForColumn(filter, columnName);\n if (ffc) {\n results.push(ffc);\n }\n });\n if (results.length === 0) {\n return undefined;\n } else if (results.length === 1) {\n return results[0];\n }\n return {\n op,\n filters: results,\n };\n};\n\nexport type FilterEvents = {\n filter: (vuuFilter: VuuFilter) => void;\n};\n\nconst createFilterClause = (column: string, value: VuuRowDataItemType) =>\n typeof value === \"string\"\n ? `${column} contains \"${value}\"`\n : `${column} = ${value}`;\n\nexport class FilterAggregator extends EventEmitter<FilterEvents> {\n #columns = new Map<string, ColumnDescriptor>();\n #filters = new Map<string, VuuRowDataItemType>();\n\n addFilter(column: ColumnDescriptor, value: string | number) {\n this.#columns.set(column.name, column);\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(value.toString(), serverDataType, true);\n\n this.#filters.set(column.name, typedValue);\n // this.emit(\"filter\", this.filter);\n }\n\n removeFilter(column: ColumnDescriptor) {\n if (this.#columns.has(column.name)) {\n this.#columns.delete(column.name);\n this.#filters.delete(column.name);\n return true;\n } else {\n return false;\n }\n }\n\n get filter(): VuuFilter {\n const { size } = this.#filters;\n if (size === 0) {\n return { filter: \"\" };\n } else {\n return {\n filter: Array.from(this.#filters.entries())\n .map((args) => createFilterClause(...args))\n .join(\" and \"),\n };\n }\n }\n}\n"],"names":["filter"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"filterAsQuery.js","sources":["../../src/filters/filterAsQuery.ts"],"sourcesContent":["import {\n ColumnDescriptorsByName,\n Filter,\n SingleValueFilterClause,\n} from \"@vuu-ui/vuu-filter-types\";\nimport type { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { isDateTimeDataValue } from \"../column-utils\";\nimport { isMultiClauseFilter, isMultiValueFilter } from \"./filter-utils\";\n\nconst filterValue = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nconst quotedStrings = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nconst removeOuterMostParentheses = (s: string) => s.replace(/^\\((.*)\\)$/, \"$1\");\n\nexport const filterAsQuery = (\n f: Filter,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string => {\n return removeOuterMostParentheses(filterAsQueryCore(f, opts));\n};\n\nconst filterAsQueryCore = (\n f: Filter,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string => {\n if (isMultiClauseFilter(f)) {\n const multiClauseFilter = f.filters\n .map((filter) => filterAsQueryCore(filter, opts))\n .join(` ${f.op} `);\n return `(${multiClauseFilter})`;\n } else if (isMultiValueFilter(f)) {\n return `${f.column} ${f.op} [${f.values.map(quotedStrings).join(\",\")}]`;\n } else {\n return singleValueFilterAsQuery(f, opts);\n }\n};\n\nfunction singleValueFilterAsQuery(\n f: SingleValueFilterClause,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string {\n const column = opts?.columnsByName?.[f.column];\n if (column && isDateTimeDataValue(column)) {\n return dateFilterAsQuery(f as SingleValueFilterClause<number>);\n } else {\n return defaultSingleValueFilterAsQuery(f);\n }\n}\n\nconst ONE_DAY_IN_MILIS = 1000 * 60 * 60 * 24;\nexport function dateFilterAsQuery(f: SingleValueFilterClause<number>): string {\n switch (f.op) {\n case \"=\": {\n const filters: Array<Filter> = [\n { op: \">=\", column: f.column, value: f.value },\n {\n op: \"<\",\n column: f.column,\n value: f.value + ONE_DAY_IN_MILIS,\n },\n ];\n return filterAsQueryCore({ op: \"and\", filters });\n }\n case \"!=\": {\n const filters: Array<Filter> = [\n { op: \"<\", column: f.column, value: f.value },\n {\n op: \">=\",\n column: f.column,\n value: f.value + ONE_DAY_IN_MILIS,\n },\n ];\n return filterAsQueryCore({ op: \"or\", filters });\n }\n default:\n return defaultSingleValueFilterAsQuery(f);\n }\n}\n\nconst defaultSingleValueFilterAsQuery = (f: SingleValueFilterClause) =>\n `${f.column} ${f.op} ${filterValue(f.value)}`;\n\nexport const removeColumnFromFilter = (\n column: RuntimeColumnDescriptor,\n filter: Filter,\n): [Filter | undefined, string] => {\n if (isMultiClauseFilter(filter)) {\n const [clause1, clause2] = filter.filters;\n if (clause1.column === column.name) {\n return [clause2, filterAsQuery(clause2)];\n }\n if (clause2.column === column.name) {\n return [clause1, filterAsQuery(clause1)];\n }\n }\n return [undefined, \"\"];\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-utils.js","sources":["../src/form-utils.ts"],"sourcesContent":["import {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { KeyboardEvent, SyntheticEvent } from \"react\";\nimport { queryClosest } from \"./html-utils\";\nimport { stringIsValidDecimal, stringIsValidInt } from \"./data-utils\";\n\n/**\n * Use with the following convention:\n *\n * <FormField data-field=\"my-field-name\">\n */\nexport const getFieldName = (target: EventTarget | HTMLElement): string => {\n const saltFormField = queryClosest(target, \"[data-field]\") as HTMLElement;\n const fieldName = saltFormField?.dataset.field;\n if (fieldName) {\n return fieldName;\n } else {\n throw Error(\"named form field not found\");\n }\n};\n\nexport type InputSource = \"typeahead-suggestion\" | \"text-input\";\n\nexport const isNumber = (\n type: string,\n value: VuuRowDataItemType,\n): value is number => type === \"number\";\n\nexport type CommitHandler<\n E extends HTMLElement = HTMLInputElement,\n T extends VuuRowDataItemType = VuuRowDataItemType,\n> = (\n evt: SyntheticEvent<E> | KeyboardEvent<E>,\n value: T,\n source?: InputSource,\n) => void;\n\n/**\n * Convert a string value to the type appropriate for the associated\n * column or form field. Can be used when processing a string value\n * from an input used for user editing.\n *\n * @param value\n * @param type\n * @param throwIfInvalid\n */\nexport function getTypedValue(\n value: string,\n type: VuuColumnDataType | \"number\",\n throwIfInvalid?: false,\n): VuuRowDataItemType | undefined;\nexport function getTypedValue(\n value: string,\n type: VuuColumnDataType | \"number\",\n throwIfInvalid: true,\n): VuuRowDataItemType;\nexport function getTypedValue(\n value: string,\n type: VuuColumnDataType | \"number\",\n throwIfInvalid = false,\n): VuuRowDataItemType | undefined {\n switch (type) {\n case \"int\":\n case \"long\": {\n if (stringIsValidInt(value)) {\n return parseInt(value, 10);\n } else if (throwIfInvalid) {\n throw Error(`value ${value} is not a valid ${type}`);\n } else {\n return undefined;\n }\n }\n\n case \"double\":\n case \"number\": {\n if (stringIsValidDecimal(value)) {\n return parseFloat(value);\n } else if (throwIfInvalid) {\n throw Error(`value ${value} is not a valid ${type}`);\n } else {\n return undefined;\n }\n }\n\n case \"boolean\":\n return value === \"true\" ? true : false;\n default:\n return value;\n }\n}\n"],"names":[],"mappings":";;;AAaa,MAAA,YAAA,GAAe,CAAC,MAA8C,KAAA;AACzE,EAAM,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA,EAAQ,cAAc,CAAA;AACzD,EAAM,MAAA,SAAA,GAAY,eAAe,OAAQ,CAAA,KAAA;AACzC,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA;AAAA,GACF,MAAA;AACL,IAAA,MAAM,MAAM,4BAA4B,CAAA;AAAA;AAE5C;AAIO,MAAM,QAAW,GAAA,CACtB,IACA,EAAA,KAAA,KACoB,IAAS,KAAA;AA8BxB,SAAS,aACd,CAAA,KAAA,EACA,IACA,EAAA,cAAA,GAAiB,KACe,EAAA;AAChC,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,KAAA;AAAA,IACL,KAAK,MAAQ,EAAA;AACX,MAAI,IAAA,gBAAA,CAAiB,KAAK,CAAG,EAAA;AAC3B,QAAO,OAAA,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,iBAChB,cAAgB,EAAA;AACzB,QAAA,MAAM,KAAM,CAAA,CAAA,MAAA,EAAS,KAAK,CAAA,gBAAA,EAAmB,IAAI,CAAE,CAAA,CAAA;AAAA,OAC9C,MAAA;AACL,QAAO,OAAA,KAAA,CAAA;AAAA;AACT;AACF,IAEA,KAAK,QAAA;AAAA,IACL,KAAK,QAAU,EAAA;AACb,MAAI,IAAA,oBAAA,CAAqB,KAAK,CAAG,EAAA;AAC/B,QAAA,OAAO,WAAW,KAAK,CAAA;AAAA,iBACd,cAAgB,EAAA;AACzB,QAAA,MAAM,KAAM,CAAA,CAAA,MAAA,EAAS,KAAK,CAAA,gBAAA,EAAmB,IAAI,CAAE,CAAA,CAAA;AAAA,OAC9C,MAAA;AACL,QAAO,OAAA,KAAA,CAAA;AAAA;AACT;AACF,IAEA,KAAK,SAAA;AACH,MAAO,OAAA,KAAA,KAAU,SAAS,IAAO,GAAA,KAAA;AAAA,IACnC;AACE,MAAO,OAAA,KAAA;AAAA;AAEb;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatting-utils.js","sources":["../src/formatting-utils.ts"],"sourcesContent":["import { DateTimeDataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DateTimeDataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(number, align, decimals, zeroPad, alignOnDecimals);\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n } else if (serverDataType === \"double\") {\n return numericFormatter(column);\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":[],"mappings":";;;;;;AAmBA,MAAM,yBAA+C,EAAC;AAEzC,MAAA,qBAAA,GAAwB,CAAC,KAAA,KACpC,KAAS,IAAA,IAAA,GAAO,EAAK,GAAA,OAAO,KAAU,KAAA,QAAA,GAAW,KAAQ,GAAA,KAAA,CAAM,QAAS;AAE1E,MAAM,aAAA,GAAgB,CAAC,MAAwC,KAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,eAAgB,CAAA,MAAA,CAAO,IAAI,CAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,WAAW,OAAO,CAAA;AAEpC,EAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,CAAG,EAAA;AAC5C,MAAA,OAAO,SAAU,CAAA,IAAI,IAAK,CAAA,KAAK,CAAC,CAAA;AAAA,KAC3B,MAAA;AACL,MAAO,OAAA,EAAA;AAAA;AACT,GACF;AACF,CAAA;AAEO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,KAAQ,GAAA,OAAA;AAAA,EACR;AACF,CAAiC,KAAA;AAC/B,EAAA,IAAI,IAAS,KAAA,KAAA,CAAA,IAAa,OAAO,IAAA,KAAS,QAAU,EAAA;AAClD,IAAO,OAAA,qBAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA;AAAA,MACJ,eAAkB,GAAA,KAAA;AAAA,MAClB,QAAA;AAAA,MACA,OAAU,GAAA;AAAA,KACZ,GAAI,KAAK,UAAc,IAAA,sBAAA;AACvB,IAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,MACE,IAAA,OAAO,KAAU,KAAA,QAAA,KAChB,KAAM,CAAA,UAAA,CAAW,QAAG,CAAK,IAAA,KAAA,CAAM,UAAW,CAAA,GAAG,CAC9C,CAAA,EAAA;AACA,QAAO,OAAA,KAAA;AAAA;AAET,MAAM,MAAA,MAAA,GACJ,OAAO,KAAA,KAAU,QACb,GAAA,KAAA,GACA,OAAO,KAAU,KAAA,QAAA,GACf,UAAW,CAAA,KAAK,CAChB,GAAA,KAAA,CAAA;AACR,MAAA,OAAO,YAAa,CAAA,MAAA,EAAQ,KAAO,EAAA,QAAA,EAAU,SAAS,eAAe,CAAA;AAAA,KACvE;AAAA;AAEJ;AAEA,MAAM,YAAA,GAAe,CAAC,GAA4B,KAAA;AAChD,EAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,IAAO,OAAA,GAAA,CAAI,KAAe,CAAK,IAAA,EAAA;AAAA,GACjC;AACF,CAAA;AAEO,MAAM,iBAAoB,GAAA,CAC/B,MACA,EAAA,cAAA,GAAiB,OAAO,cACL,KAAA;AACnB,EAAI,IAAA,mBAAA,CAAoB,MAAM,CAAG,EAAA;AAC/B,IAAA,OAAO,cAAc,MAAM,CAAA;AAAA;AAG7B,EAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AACjB,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,yBAA0B,CAAA,IAAA,EAAM,QAAQ,CAAG,EAAA;AACvE,IAAO,OAAA,YAAA,CAAa,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,GAC5B,MAAA,IAAA,cAAA,KAAmB,QAAY,IAAA,cAAA,KAAmB,MAAQ,EAAA;AACnE,IAAA,OAAO,CAAC,KAAmB,KAAA,KAAA;AAAA,GAC7B,MAAA,IAAW,mBAAmB,QAAU,EAAA;AACtC,IAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA;AAEhC,EAAO,OAAA,qBAAA;AACT;AAQO,MAAM,SAAY,GAAA,CAAC,GACxB,KAAA,GAAA,CAAI,WAAY;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getUniqueId.js","sources":["../src/getUniqueId.ts"],"sourcesContent":["export const getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;\n"],"names":[],"mappings":"AAAa,MAAA,WAAA,GAAc,MAAM,CAAM,GAAA,EAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,EAAW,GAAA,GAAG,CAAC,CAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"group-utils.js","sources":["../src/group-utils.ts"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\n\nexport function addGroupColumn(groupBy: VuuGroupBy, column: ColumnDescriptor) {\n if (groupBy.length > 0) {\n return groupBy.concat(column.name);\n } else {\n return [column.name];\n }\n}\n\nexport const removeGroupColumn = (\n groupBy: VuuGroupBy,\n column: ColumnDescriptor,\n) => groupBy.filter((colName) => colName !== column.name);\n\nexport type ColumnGroupStatus =\n | \"no-groupby\"\n | \"single-groupby-other-column\"\n | \"single-groupby\"\n | \"multi-groupby-other-columns\"\n | \"multi-groupby-includes-column\";\n\n/**\n * Given a VuuGroupby definition and a column, determine whether the given column\n * is included in the grouping and if so, in what position/direction.\n */\nexport const getGroupStatus = (\n columnName: string,\n groupBy?: VuuGroupBy,\n): ColumnGroupStatus => {\n if (groupBy === undefined || groupBy.length === 0) {\n return \"no-groupby\";\n } else {\n const indexPos = groupBy.indexOf(columnName);\n if (indexPos === -1) {\n return groupBy.length === 1\n ? \"single-groupby-other-column\"\n : \"multi-groupby-other-columns\";\n } else {\n return groupBy.length === 1\n ? \"single-groupby\"\n : \"single-groupby-other-column\";\n }\n }\n};\n"],"names":[],"mappings":"AAGgB,SAAA,cAAA,CAAe,SAAqB,MAA0B,EAAA;AAC5E,EAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,IAAO,OAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA,GAC5B,MAAA;AACL,IAAO,OAAA,CAAC,OAAO,IAAI,CAAA;AAAA;AAEvB;AAEa,MAAA,iBAAA,GAAoB,CAC/B,OAAA,EACA,MACG,KAAA,OAAA,CAAQ,OAAO,CAAC,OAAA,KAAY,OAAY,KAAA,MAAA,CAAO,IAAI;AAa3C,MAAA,cAAA,GAAiB,CAC5B,UAAA,EACA,OACsB,KAAA;AACtB,EAAA,IAAI,OAAY,KAAA,KAAA,CAAA,IAAa,OAAQ,CAAA,MAAA,KAAW,CAAG,EAAA;AACjD,IAAO,OAAA,YAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,QAAA,GAAW,OAAQ,CAAA,OAAA,CAAQ,UAAU,CAAA;AAC3C,IAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACnB,MAAO,OAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,GACtB,6BACA,GAAA,6BAAA;AAAA,KACC,MAAA;AACL,MAAO,OAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,GACtB,gBACA,GAAA,6BAAA;AAAA;AACN;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"html-utils.js","sources":["../src/html-utils.ts"],"sourcesContent":["export const createEl = (\n elementType: \"div\" | \"p\" | \"span\",\n className?: string,\n textContent?: string,\n): HTMLElement => {\n const el = document.createElement(elementType);\n if (className) {\n el.className = className;\n }\n if (textContent) {\n el.textContent = textContent;\n }\n return el;\n};\n\nexport const getFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number,\n) => {\n if (el) {\n if (el.hasAttribute(\"tabindex\")) {\n const rootTabIndex = parseInt(el.getAttribute(\"tabindex\") as string);\n if (\n !isNaN(rootTabIndex) &&\n (tabIndex === undefined || rootTabIndex === tabIndex)\n ) {\n return el;\n }\n }\n const focusableEl =\n typeof tabIndex === \"number\"\n ? (el.querySelector(`[tabindex=\"${tabIndex}\"]`) as HTMLElement)\n : (el.querySelector(\"[tabindex]\") as HTMLElement);\n if (focusableEl) {\n return focusableEl as HTMLElement;\n }\n }\n};\n\nexport const getElementDataIndex = (el: HTMLElement | null) => {\n if (el) {\n const index = parseInt(el.dataset.index || \"\");\n if (!isNaN(index)) {\n return index;\n }\n }\n return -1;\n};\n\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound?: false,\n): T | null;\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound: true,\n): T;\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound?: boolean,\n) {\n if (el) {\n const result = (el as HTMLElement).closest(cssQueryString) as T;\n if (result) {\n return result;\n }\n }\n if (throwIfNotFound) {\n throw Error(`no element found to match '${cssQueryString}'`);\n } else {\n return null;\n }\n}\n\nexport const getClosest = (el: HTMLElement, dataProperty: string) =>\n queryClosest(el, `[data-${dataProperty}]`);\n\nexport const getClosestIndexItem = (el: HTMLElement) => getClosest(el, \"index\");\n\nexport function getElementByDataIndex(\n c: HTMLElement | null | undefined,\n i: number | string,\n throwIfNotFound: true,\n): HTMLElement;\nexport function getElementByDataIndex(\n c: HTMLElement | null | undefined,\n i: number | string,\n throwIfNotFound?: false,\n): HTMLElement | undefined;\nexport function getElementByDataIndex(\n container: HTMLElement | null | undefined,\n index: number | string,\n throwIfNotFound = false,\n) {\n if (container == null && throwIfNotFound) {\n throw Error(\"html-utils getElementByDataIndex, container is null\");\n }\n const element = container?.querySelector(\n `[data-index=\"${index}\"]`,\n ) as HTMLElement;\n if (element) {\n return element;\n } else if (throwIfNotFound) {\n throw Error(\n \"html-utils getElementByDataIndex, Item not found with data-index='${index}'\",\n );\n } else {\n return undefined;\n }\n}\n\nexport const focusFirstFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number,\n) => {\n // TODO test el for focusable\n requestAnimationFrame(() => {\n const focusableElement = getFocusableElement(el, tabIndex);\n if (focusableElement) {\n focusableElement.focus();\n }\n });\n};\n\nexport const isSelectableElement = (el?: HTMLElement | null) => {\n const item = el?.closest(\"[data-index]\") as HTMLElement;\n if (\n !item ||\n item.ariaDisabled ||\n item.dataset.selectable === \"false\" ||\n item.querySelector('[data-selectable=\"false\"],[aria-disabled=\"true\"]')\n ) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const isInputElement = (\n el: HTMLElement | EventTarget | null,\n): el is HTMLInputElement => {\n if (el === null) {\n return false;\n } else {\n return (el as HTMLElement).tagName === \"INPUT\";\n }\n};\n\nexport const isDateInput = (\n el: HTMLElement | EventTarget | null,\n): el is HTMLInputElement =>\n isInputElement(el) && el.classList.contains(\"saltDateInput-input\");\n\nexport const hasOpenOptionList = (el: HTMLElement | EventTarget | null) => {\n if (el !== null) {\n return (el as HTMLElement).ariaExpanded === \"true\";\n }\n};\n\nlet size: number;\n\nexport function getScrollbarSize() {\n if (size === undefined) {\n let outer: HTMLElement | null = document.createElement(\"div\");\n outer.className = \"scrollable-content\";\n outer.style.width = \"50px\";\n outer.style.height = \"50px\";\n outer.style.overflowY = \"scroll\";\n outer.style.position = \"absolute\";\n outer.style.top = \"-200px\";\n outer.style.left = \"-200px\";\n const inner = document.createElement(\"div\");\n inner.style.height = \"100px\";\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const outerWidth = outer.offsetWidth;\n const innerWidth = inner.offsetWidth;\n document.body.removeChild(outer);\n size = outerWidth - innerWidth;\n outer = null;\n }\n\n return size;\n}\n\nexport type MouseEventTypes = \"dblclick\" | \"click\";\nexport type KeyboardEventTypes = \"keydown\" | \"keypress\" | \"keyup\";\n\nexport const dispatchMouseEvent = (el: HTMLElement, type: MouseEventTypes) => {\n const evt = new MouseEvent(type, {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\nexport const dispatchKeyboardEvent = (\n el: HTMLElement,\n type: KeyboardEventTypes,\n key: string,\n) => {\n const evt = new KeyboardEvent(type, {\n key,\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n\nexport type VuuDomEventType = \"vuu-commit\" | \"vuu-dropped\";\n\nexport const dispatchCustomEvent = (el: HTMLElement, type: VuuDomEventType) => {\n const evt = new Event(type, {\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-utils.js","sources":["../src/input-utils.ts"],"sourcesContent":["export const isCharacterKey = (key: string) => key.length === 1;\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n"],"names":[],"mappings":"AAAO,MAAM,cAAiB,GAAA,CAAC,GAAgB,KAAA,GAAA,CAAI,MAAW,KAAA;AAEjD,MAAA,UAAA,GAAa,CAAC,GAAuB,KAAA;AAChD,EAAA,OAAO,GAAI,CAAA,GAAA,KAAQ,GAAO,IAAA,GAAA,CAAI,GAAQ,KAAA,GAAA;AACxC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"invariant.js","sources":["../src/invariant.ts"],"sourcesContent":["export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = \"Invariant Violation\";\n // TODO what is framesToPop?\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n"],"names":[],"mappings":"AAAgB,SAAA,SAAA,CAAU,WAAoB,OAAiB,EAAA;AAC7D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAO,GAAA,qBAAA;AAIb,IAAA,KAAA,CAAM,WAAc,GAAA,CAAA;AACpB,IAAM,MAAA,KAAA;AAAA;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"itemToString.js","sources":["../src/itemToString.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemToStringFunction = (item: any) => string;\n\nconst isPlainObject = (obj: unknown) =>\n Object.prototype.toString.call(obj) === \"[object Object]\";\n\nexport function itemToString(item: unknown): string {\n if (typeof item === \"string\") {\n return item;\n } else if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.prototype.hasOwnProperty.call(item, \"label\")) {\n return String((item as { label?: string }).label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\")\n );\n\n return \"\";\n}\n"],"names":[],"mappings":"AAGA,MAAM,aAAA,GAAgB,CAAC,GACrB,KAAA,MAAA,CAAO,UAAU,QAAS,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,iBAAA;AAEnC,SAAS,aAAa,IAAuB,EAAA;AAClD,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,CAAC,aAAc,CAAA,IAAI,CAAG,EAAA;AAC/B,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA;AAGpB,EAAA,IAAI,OAAO,SAAU,CAAA,cAAA,CAAe,IAAK,CAAA,IAAA,EAAM,OAAO,CAAG,EAAA;AACvD,IAAO,OAAA,MAAA,CAAQ,KAA4B,KAAK,CAAA;AAAA;AAGlD,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN;AAAA,MACE,iFAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI;AAAA,GACb;AAEA,EAAO,OAAA,EAAA;AACT;;;;"}