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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/package.json +11 -14
  2. package/src/Clock.js +43 -0
  3. package/src/PageVisibilityObserver.js +42 -0
  4. package/src/ScaledDecimal.js +32 -0
  5. package/src/ShellContext.js +5 -0
  6. package/src/ThemeProvider.js +56 -0
  7. package/src/array-utils.js +51 -0
  8. package/src/box-utils.js +51 -0
  9. package/src/broadcast-channel.js +0 -0
  10. package/src/column-utils.js +790 -0
  11. package/src/common-types.js +11 -0
  12. package/src/component-registry.js +83 -0
  13. package/src/context-definitions/DataContext.js +15 -0
  14. package/src/context-definitions/DataProvider.js +13 -0
  15. package/src/context-definitions/DataSourceProvider.js +18 -0
  16. package/src/context-definitions/WorkspaceContext.js +14 -0
  17. package/src/cookie-utils.js +15 -0
  18. package/src/css-utils.js +5 -0
  19. package/src/data-editing/DataEditingProvider.js +13 -0
  20. package/src/data-editing/EditButtons.js +32 -0
  21. package/src/data-editing/EditModeProvider.js +18 -0
  22. package/src/data-editing/EditSession.js +149 -0
  23. package/src/data-editing/edit-utils.js +37 -0
  24. package/src/data-editing/useEditableTable.js +76 -0
  25. package/src/data-utils.js +55 -0
  26. package/src/datasource/BaseDataSource.js +233 -0
  27. package/src/datasource/datasource-action-utils.js +6 -0
  28. package/src/datasource/datasource-filter-utils.js +27 -0
  29. package/src/datasource/datasource-utils.js +148 -0
  30. package/src/date/date-utils.js +80 -0
  31. package/src/date/dateTimePattern.js +17 -0
  32. package/src/date/formatter.js +101 -0
  33. package/src/date/index.js +4 -0
  34. package/src/date/types.js +27 -0
  35. package/src/debug-utils.js +25 -0
  36. package/src/event-emitter.js +78 -0
  37. package/src/feature-utils.js +86 -0
  38. package/src/filters/filter-utils.js +136 -0
  39. package/src/filters/filterAsQuery.js +70 -0
  40. package/src/filters/index.js +2 -0
  41. package/src/form-utils.js +69 -0
  42. package/src/formatting-utils.js +42 -0
  43. package/src/getUniqueId.js +2 -0
  44. package/src/group-utils.js +16 -0
  45. package/src/html-utils.js +108 -0
  46. package/src/index.js +77 -0
  47. package/src/input-utils.js +3 -0
  48. package/src/invariant.js +9 -0
  49. package/src/itemToString.js +9 -0
  50. package/src/json-types.js +0 -0
  51. package/src/json-utils.js +108 -0
  52. package/{esm/packages/vuu-utils/src → src}/keyboard-utils.js +1 -3
  53. package/src/keyset.js +57 -0
  54. package/src/layout-types.js +0 -0
  55. package/src/list-utils.js +5 -0
  56. package/src/local-storage-utils.js +23 -0
  57. package/src/logging-utils.js +52 -0
  58. package/src/module-utils.js +2 -0
  59. package/src/nanoid/index.js +13 -0
  60. package/src/perf-utils.js +28 -0
  61. package/src/promise-utils.js +26 -0
  62. package/src/protocol-message-utils.js +68 -0
  63. package/src/range-utils.js +109 -0
  64. package/src/react-utils.js +64 -0
  65. package/src/round-decimal.js +83 -0
  66. package/src/row-utils.js +43 -0
  67. package/src/selection-utils.js +25 -0
  68. package/src/shell-layout-types.js +9 -0
  69. package/src/sort-utils.js +75 -0
  70. package/src/table-schema-utils.js +11 -0
  71. package/src/text-utils.js +13 -0
  72. package/src/theme-utils.js +21 -0
  73. package/src/tree-types.js +0 -0
  74. package/src/tree-utils.js +96 -0
  75. package/src/ts-utils.js +6 -0
  76. package/src/typeahead-utils.js +4 -0
  77. package/src/url-utils.js +12 -0
  78. package/src/useId.js +6 -0
  79. package/src/useLayoutEffectSkipFirst.js +9 -0
  80. package/src/useResizeObserver.js +122 -0
  81. package/src/useStateRef.js +21 -0
  82. package/src/user-types.js +0 -0
  83. package/types/ThemeProvider.d.ts +4 -4
  84. package/types/data-utils.d.ts +1 -1
  85. package/types/date/date-utils.d.ts +8 -8
  86. package/types/feature-utils.d.ts +1 -1
  87. package/types/filters/filter-utils.d.ts +15 -15
  88. package/cjs/node_modules/@dnd-kit/abstract/index.js +0 -1488
  89. package/cjs/node_modules/@dnd-kit/abstract/index.js.map +0 -1
  90. package/cjs/node_modules/@dnd-kit/abstract/modifiers.js +0 -85
  91. package/cjs/node_modules/@dnd-kit/abstract/modifiers.js.map +0 -1
  92. package/cjs/node_modules/@dnd-kit/collision/dist/index.js +0 -91
  93. package/cjs/node_modules/@dnd-kit/collision/dist/index.js.map +0 -1
  94. package/cjs/node_modules/@dnd-kit/dom/index.js +0 -1991
  95. package/cjs/node_modules/@dnd-kit/dom/index.js.map +0 -1
  96. package/cjs/node_modules/@dnd-kit/dom/sortable.js +0 -828
  97. package/cjs/node_modules/@dnd-kit/dom/sortable.js.map +0 -1
  98. package/cjs/node_modules/@dnd-kit/dom/utilities.js +0 -1389
  99. package/cjs/node_modules/@dnd-kit/dom/utilities.js.map +0 -1
  100. package/cjs/node_modules/@dnd-kit/geometry/dist/index.js +0 -310
  101. package/cjs/node_modules/@dnd-kit/geometry/dist/index.js.map +0 -1
  102. package/cjs/node_modules/@dnd-kit/react/hooks.js +0 -134
  103. package/cjs/node_modules/@dnd-kit/react/hooks.js.map +0 -1
  104. package/cjs/node_modules/@dnd-kit/react/index.js +0 -398
  105. package/cjs/node_modules/@dnd-kit/react/index.js.map +0 -1
  106. package/cjs/node_modules/@dnd-kit/react/sortable.js +0 -177
  107. package/cjs/node_modules/@dnd-kit/react/sortable.js.map +0 -1
  108. package/cjs/node_modules/@dnd-kit/react/utilities.js +0 -19
  109. package/cjs/node_modules/@dnd-kit/react/utilities.js.map +0 -1
  110. package/cjs/node_modules/@dnd-kit/state/dist/index.js +0 -280
  111. package/cjs/node_modules/@dnd-kit/state/dist/index.js.map +0 -1
  112. package/cjs/node_modules/@preact/signals-core/dist/signals-core.js +0 -11
  113. package/cjs/node_modules/@preact/signals-core/dist/signals-core.js.map +0 -1
  114. package/cjs/packages/vuu-utils/src/Clock.js +0 -62
  115. package/cjs/packages/vuu-utils/src/Clock.js.map +0 -1
  116. package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js +0 -80
  117. package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js.map +0 -1
  118. package/cjs/packages/vuu-utils/src/ScaledDecimal.js +0 -43
  119. package/cjs/packages/vuu-utils/src/ScaledDecimal.js.map +0 -1
  120. package/cjs/packages/vuu-utils/src/ShellContext.js +0 -13
  121. package/cjs/packages/vuu-utils/src/ShellContext.js.map +0 -1
  122. package/cjs/packages/vuu-utils/src/ThemeProvider.js +0 -85
  123. package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +0 -1
  124. package/cjs/packages/vuu-utils/src/array-utils.js +0 -87
  125. package/cjs/packages/vuu-utils/src/array-utils.js.map +0 -1
  126. package/cjs/packages/vuu-utils/src/box-utils.js +0 -53
  127. package/cjs/packages/vuu-utils/src/box-utils.js.map +0 -1
  128. package/cjs/packages/vuu-utils/src/column-utils.js +0 -1057
  129. package/cjs/packages/vuu-utils/src/column-utils.js.map +0 -1
  130. package/cjs/packages/vuu-utils/src/common-types.js +0 -15
  131. package/cjs/packages/vuu-utils/src/common-types.js.map +0 -1
  132. package/cjs/packages/vuu-utils/src/component-registry.js +0 -144
  133. package/cjs/packages/vuu-utils/src/component-registry.js.map +0 -1
  134. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js +0 -21
  135. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +0 -1
  136. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js +0 -19
  137. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +0 -1
  138. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +0 -33
  139. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +0 -1
  140. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +0 -20
  141. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +0 -1
  142. package/cjs/packages/vuu-utils/src/cookie-utils.js +0 -22
  143. package/cjs/packages/vuu-utils/src/cookie-utils.js.map +0 -1
  144. package/cjs/packages/vuu-utils/src/css-utils.js +0 -9
  145. package/cjs/packages/vuu-utils/src/css-utils.js.map +0 -1
  146. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js +0 -28
  147. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +0 -1
  148. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js +0 -34
  149. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js.map +0 -1
  150. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js +0 -204
  151. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js.map +0 -1
  152. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js +0 -37
  153. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js.map +0 -1
  154. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js +0 -81
  155. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js.map +0 -1
  156. package/cjs/packages/vuu-utils/src/data-utils.js +0 -96
  157. package/cjs/packages/vuu-utils/src/data-utils.js.map +0 -1
  158. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +0 -317
  159. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +0 -1
  160. package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js +0 -14
  161. package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +0 -1
  162. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +0 -40
  163. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +0 -1
  164. package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js +0 -218
  165. package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js.map +0 -1
  166. package/cjs/packages/vuu-utils/src/date/date-utils.js +0 -131
  167. package/cjs/packages/vuu-utils/src/date/date-utils.js.map +0 -1
  168. package/cjs/packages/vuu-utils/src/date/dateTimePattern.js +0 -26
  169. package/cjs/packages/vuu-utils/src/date/dateTimePattern.js.map +0 -1
  170. package/cjs/packages/vuu-utils/src/date/formatter.js +0 -82
  171. package/cjs/packages/vuu-utils/src/date/formatter.js.map +0 -1
  172. package/cjs/packages/vuu-utils/src/date/types.js +0 -32
  173. package/cjs/packages/vuu-utils/src/date/types.js.map +0 -1
  174. package/cjs/packages/vuu-utils/src/debug-utils.js +0 -34
  175. package/cjs/packages/vuu-utils/src/debug-utils.js.map +0 -1
  176. package/cjs/packages/vuu-utils/src/event-emitter.js +0 -113
  177. package/cjs/packages/vuu-utils/src/event-emitter.js.map +0 -1
  178. package/cjs/packages/vuu-utils/src/feature-utils.js +0 -139
  179. package/cjs/packages/vuu-utils/src/feature-utils.js.map +0 -1
  180. package/cjs/packages/vuu-utils/src/filters/filter-utils.js +0 -182
  181. package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +0 -1
  182. package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js +0 -69
  183. package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js.map +0 -1
  184. package/cjs/packages/vuu-utils/src/form-utils.js +0 -117
  185. package/cjs/packages/vuu-utils/src/form-utils.js.map +0 -1
  186. package/cjs/packages/vuu-utils/src/formatting-utils.js +0 -98
  187. package/cjs/packages/vuu-utils/src/formatting-utils.js.map +0 -1
  188. package/cjs/packages/vuu-utils/src/getUniqueId.js +0 -6
  189. package/cjs/packages/vuu-utils/src/getUniqueId.js.map +0 -1
  190. package/cjs/packages/vuu-utils/src/group-utils.js +0 -27
  191. package/cjs/packages/vuu-utils/src/group-utils.js.map +0 -1
  192. package/cjs/packages/vuu-utils/src/html-utils.js +0 -162
  193. package/cjs/packages/vuu-utils/src/html-utils.js.map +0 -1
  194. package/cjs/packages/vuu-utils/src/index.js +0 -475
  195. package/cjs/packages/vuu-utils/src/index.js.map +0 -1
  196. package/cjs/packages/vuu-utils/src/input-utils.js +0 -10
  197. package/cjs/packages/vuu-utils/src/input-utils.js.map +0 -1
  198. package/cjs/packages/vuu-utils/src/invariant.js +0 -13
  199. package/cjs/packages/vuu-utils/src/invariant.js.map +0 -1
  200. package/cjs/packages/vuu-utils/src/itemToString.js +0 -23
  201. package/cjs/packages/vuu-utils/src/itemToString.js.map +0 -1
  202. package/cjs/packages/vuu-utils/src/json-utils.js +0 -105
  203. package/cjs/packages/vuu-utils/src/json-utils.js.map +0 -1
  204. package/cjs/packages/vuu-utils/src/keyboard-utils.js +0 -30
  205. package/cjs/packages/vuu-utils/src/keyboard-utils.js.map +0 -1
  206. package/cjs/packages/vuu-utils/src/keyset.js +0 -72
  207. package/cjs/packages/vuu-utils/src/keyset.js.map +0 -1
  208. package/cjs/packages/vuu-utils/src/list-utils.js +0 -11
  209. package/cjs/packages/vuu-utils/src/list-utils.js.map +0 -1
  210. package/cjs/packages/vuu-utils/src/local-storage-utils.js +0 -35
  211. package/cjs/packages/vuu-utils/src/local-storage-utils.js.map +0 -1
  212. package/cjs/packages/vuu-utils/src/logging-utils.js +0 -65
  213. package/cjs/packages/vuu-utils/src/logging-utils.js.map +0 -1
  214. package/cjs/packages/vuu-utils/src/module-utils.js +0 -6
  215. package/cjs/packages/vuu-utils/src/module-utils.js.map +0 -1
  216. package/cjs/packages/vuu-utils/src/nanoid/index.js +0 -22
  217. package/cjs/packages/vuu-utils/src/nanoid/index.js.map +0 -1
  218. package/cjs/packages/vuu-utils/src/perf-utils.js +0 -35
  219. package/cjs/packages/vuu-utils/src/perf-utils.js.map +0 -1
  220. package/cjs/packages/vuu-utils/src/promise-utils.js +0 -42
  221. package/cjs/packages/vuu-utils/src/promise-utils.js.map +0 -1
  222. package/cjs/packages/vuu-utils/src/protocol-message-utils.js +0 -104
  223. package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +0 -1
  224. package/cjs/packages/vuu-utils/src/range-utils.js +0 -115
  225. package/cjs/packages/vuu-utils/src/range-utils.js.map +0 -1
  226. package/cjs/packages/vuu-utils/src/react-utils.js +0 -72
  227. package/cjs/packages/vuu-utils/src/react-utils.js.map +0 -1
  228. package/cjs/packages/vuu-utils/src/round-decimal.js +0 -131
  229. package/cjs/packages/vuu-utils/src/round-decimal.js.map +0 -1
  230. package/cjs/packages/vuu-utils/src/row-utils.js +0 -59
  231. package/cjs/packages/vuu-utils/src/row-utils.js.map +0 -1
  232. package/cjs/packages/vuu-utils/src/selection-utils.js +0 -34
  233. package/cjs/packages/vuu-utils/src/selection-utils.js.map +0 -1
  234. package/cjs/packages/vuu-utils/src/shell-layout-types.js +0 -13
  235. package/cjs/packages/vuu-utils/src/shell-layout-types.js.map +0 -1
  236. package/cjs/packages/vuu-utils/src/sort-utils.js +0 -78
  237. package/cjs/packages/vuu-utils/src/sort-utils.js.map +0 -1
  238. package/cjs/packages/vuu-utils/src/table-schema-utils.js +0 -13
  239. package/cjs/packages/vuu-utils/src/table-schema-utils.js.map +0 -1
  240. package/cjs/packages/vuu-utils/src/text-utils.js +0 -21
  241. package/cjs/packages/vuu-utils/src/text-utils.js.map +0 -1
  242. package/cjs/packages/vuu-utils/src/theme-utils.js +0 -36
  243. package/cjs/packages/vuu-utils/src/theme-utils.js.map +0 -1
  244. package/cjs/packages/vuu-utils/src/tree-utils.js +0 -114
  245. package/cjs/packages/vuu-utils/src/tree-utils.js.map +0 -1
  246. package/cjs/packages/vuu-utils/src/ts-utils.js +0 -12
  247. package/cjs/packages/vuu-utils/src/ts-utils.js.map +0 -1
  248. package/cjs/packages/vuu-utils/src/typeahead-utils.js +0 -6
  249. package/cjs/packages/vuu-utils/src/typeahead-utils.js.map +0 -1
  250. package/cjs/packages/vuu-utils/src/url-utils.js +0 -21
  251. package/cjs/packages/vuu-utils/src/url-utils.js.map +0 -1
  252. package/cjs/packages/vuu-utils/src/useId.js +0 -9
  253. package/cjs/packages/vuu-utils/src/useId.js.map +0 -1
  254. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +0 -17
  255. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +0 -1
  256. package/cjs/packages/vuu-utils/src/useResizeObserver.js +0 -134
  257. package/cjs/packages/vuu-utils/src/useResizeObserver.js.map +0 -1
  258. package/cjs/packages/vuu-utils/src/useStateRef.js +0 -23
  259. package/cjs/packages/vuu-utils/src/useStateRef.js.map +0 -1
  260. package/esm/node_modules/@dnd-kit/abstract/index.js +0 -1472
  261. package/esm/node_modules/@dnd-kit/abstract/index.js.map +0 -1
  262. package/esm/node_modules/@dnd-kit/abstract/modifiers.js +0 -82
  263. package/esm/node_modules/@dnd-kit/abstract/modifiers.js.map +0 -1
  264. package/esm/node_modules/@dnd-kit/collision/dist/index.js +0 -86
  265. package/esm/node_modules/@dnd-kit/collision/dist/index.js.map +0 -1
  266. package/esm/node_modules/@dnd-kit/dom/index.js +0 -1977
  267. package/esm/node_modules/@dnd-kit/dom/index.js.map +0 -1
  268. package/esm/node_modules/@dnd-kit/dom/sortable.js +0 -822
  269. package/esm/node_modules/@dnd-kit/dom/sortable.js.map +0 -1
  270. package/esm/node_modules/@dnd-kit/dom/utilities.js +0 -1344
  271. package/esm/node_modules/@dnd-kit/dom/utilities.js.map +0 -1
  272. package/esm/node_modules/@dnd-kit/geometry/dist/index.js +0 -303
  273. package/esm/node_modules/@dnd-kit/geometry/dist/index.js.map +0 -1
  274. package/esm/node_modules/@dnd-kit/react/hooks.js +0 -126
  275. package/esm/node_modules/@dnd-kit/react/hooks.js.map +0 -1
  276. package/esm/node_modules/@dnd-kit/react/index.js +0 -392
  277. package/esm/node_modules/@dnd-kit/react/index.js.map +0 -1
  278. package/esm/node_modules/@dnd-kit/react/sortable.js +0 -175
  279. package/esm/node_modules/@dnd-kit/react/sortable.js.map +0 -1
  280. package/esm/node_modules/@dnd-kit/react/utilities.js +0 -17
  281. package/esm/node_modules/@dnd-kit/react/utilities.js.map +0 -1
  282. package/esm/node_modules/@dnd-kit/state/dist/index.js +0 -266
  283. package/esm/node_modules/@dnd-kit/state/dist/index.js.map +0 -1
  284. package/esm/node_modules/@preact/signals-core/dist/signals-core.js +0 -4
  285. package/esm/node_modules/@preact/signals-core/dist/signals-core.js.map +0 -1
  286. package/esm/packages/vuu-utils/src/Clock.js +0 -60
  287. package/esm/packages/vuu-utils/src/Clock.js.map +0 -1
  288. package/esm/packages/vuu-utils/src/PageVisibilityObserver.js +0 -78
  289. package/esm/packages/vuu-utils/src/PageVisibilityObserver.js.map +0 -1
  290. package/esm/packages/vuu-utils/src/ScaledDecimal.js +0 -37
  291. package/esm/packages/vuu-utils/src/ScaledDecimal.js.map +0 -1
  292. package/esm/packages/vuu-utils/src/ShellContext.js +0 -10
  293. package/esm/packages/vuu-utils/src/ShellContext.js.map +0 -1
  294. package/esm/packages/vuu-utils/src/ThemeProvider.js +0 -78
  295. package/esm/packages/vuu-utils/src/ThemeProvider.js.map +0 -1
  296. package/esm/packages/vuu-utils/src/array-utils.js +0 -79
  297. package/esm/packages/vuu-utils/src/array-utils.js.map +0 -1
  298. package/esm/packages/vuu-utils/src/box-utils.js +0 -47
  299. package/esm/packages/vuu-utils/src/box-utils.js.map +0 -1
  300. package/esm/packages/vuu-utils/src/column-utils.js +0 -970
  301. package/esm/packages/vuu-utils/src/column-utils.js.map +0 -1
  302. package/esm/packages/vuu-utils/src/common-types.js +0 -13
  303. package/esm/packages/vuu-utils/src/common-types.js.map +0 -1
  304. package/esm/packages/vuu-utils/src/component-registry.js +0 -128
  305. package/esm/packages/vuu-utils/src/component-registry.js.map +0 -1
  306. package/esm/packages/vuu-utils/src/context-definitions/DataContext.js +0 -18
  307. package/esm/packages/vuu-utils/src/context-definitions/DataContext.js.map +0 -1
  308. package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js +0 -16
  309. package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js.map +0 -1
  310. package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +0 -29
  311. package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +0 -1
  312. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +0 -17
  313. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +0 -1
  314. package/esm/packages/vuu-utils/src/cookie-utils.js +0 -19
  315. package/esm/packages/vuu-utils/src/cookie-utils.js.map +0 -1
  316. package/esm/packages/vuu-utils/src/css-utils.js +0 -7
  317. package/esm/packages/vuu-utils/src/css-utils.js.map +0 -1
  318. package/esm/packages/vuu-utils/src/data-editing/DataEditingProvider.js +0 -25
  319. package/esm/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +0 -1
  320. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js +0 -32
  321. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js.map +0 -1
  322. package/esm/packages/vuu-utils/src/data-editing/EditSession.js +0 -201
  323. package/esm/packages/vuu-utils/src/data-editing/EditSession.js.map +0 -1
  324. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js +0 -34
  325. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js.map +0 -1
  326. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js +0 -79
  327. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js.map +0 -1
  328. package/esm/packages/vuu-utils/src/data-utils.js +0 -82
  329. package/esm/packages/vuu-utils/src/data-utils.js.map +0 -1
  330. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +0 -314
  331. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +0 -1
  332. package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js +0 -8
  333. package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +0 -1
  334. package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js +0 -38
  335. package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +0 -1
  336. package/esm/packages/vuu-utils/src/datasource/datasource-utils.js +0 -193
  337. package/esm/packages/vuu-utils/src/datasource/datasource-utils.js.map +0 -1
  338. package/esm/packages/vuu-utils/src/date/date-utils.js +0 -121
  339. package/esm/packages/vuu-utils/src/date/date-utils.js.map +0 -1
  340. package/esm/packages/vuu-utils/src/date/dateTimePattern.js +0 -22
  341. package/esm/packages/vuu-utils/src/date/dateTimePattern.js.map +0 -1
  342. package/esm/packages/vuu-utils/src/date/formatter.js +0 -79
  343. package/esm/packages/vuu-utils/src/date/formatter.js.map +0 -1
  344. package/esm/packages/vuu-utils/src/date/types.js +0 -26
  345. package/esm/packages/vuu-utils/src/date/types.js.map +0 -1
  346. package/esm/packages/vuu-utils/src/debug-utils.js +0 -32
  347. package/esm/packages/vuu-utils/src/debug-utils.js.map +0 -1
  348. package/esm/packages/vuu-utils/src/event-emitter.js +0 -111
  349. package/esm/packages/vuu-utils/src/event-emitter.js.map +0 -1
  350. package/esm/packages/vuu-utils/src/feature-utils.js +0 -125
  351. package/esm/packages/vuu-utils/src/feature-utils.js.map +0 -1
  352. package/esm/packages/vuu-utils/src/filters/filter-utils.js +0 -159
  353. package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +0 -1
  354. package/esm/packages/vuu-utils/src/filters/filterAsQuery.js +0 -65
  355. package/esm/packages/vuu-utils/src/filters/filterAsQuery.js.map +0 -1
  356. package/esm/packages/vuu-utils/src/form-utils.js +0 -110
  357. package/esm/packages/vuu-utils/src/form-utils.js.map +0 -1
  358. package/esm/packages/vuu-utils/src/formatting-utils.js +0 -93
  359. package/esm/packages/vuu-utils/src/formatting-utils.js.map +0 -1
  360. package/esm/packages/vuu-utils/src/getUniqueId.js +0 -4
  361. package/esm/packages/vuu-utils/src/getUniqueId.js.map +0 -1
  362. package/esm/packages/vuu-utils/src/group-utils.js +0 -23
  363. package/esm/packages/vuu-utils/src/group-utils.js.map +0 -1
  364. package/esm/packages/vuu-utils/src/html-utils.js +0 -145
  365. package/esm/packages/vuu-utils/src/html-utils.js.map +0 -1
  366. package/esm/packages/vuu-utils/src/index.js +0 -77
  367. package/esm/packages/vuu-utils/src/index.js.map +0 -1
  368. package/esm/packages/vuu-utils/src/input-utils.js +0 -7
  369. package/esm/packages/vuu-utils/src/input-utils.js.map +0 -1
  370. package/esm/packages/vuu-utils/src/invariant.js +0 -11
  371. package/esm/packages/vuu-utils/src/invariant.js.map +0 -1
  372. package/esm/packages/vuu-utils/src/itemToString.js +0 -21
  373. package/esm/packages/vuu-utils/src/itemToString.js.map +0 -1
  374. package/esm/packages/vuu-utils/src/json-utils.js +0 -103
  375. package/esm/packages/vuu-utils/src/json-utils.js.map +0 -1
  376. package/esm/packages/vuu-utils/src/keyboard-utils.js.map +0 -1
  377. package/esm/packages/vuu-utils/src/keyset.js +0 -70
  378. package/esm/packages/vuu-utils/src/keyset.js.map +0 -1
  379. package/esm/packages/vuu-utils/src/list-utils.js +0 -9
  380. package/esm/packages/vuu-utils/src/list-utils.js.map +0 -1
  381. package/esm/packages/vuu-utils/src/local-storage-utils.js +0 -30
  382. package/esm/packages/vuu-utils/src/local-storage-utils.js.map +0 -1
  383. package/esm/packages/vuu-utils/src/logging-utils.js +0 -61
  384. package/esm/packages/vuu-utils/src/logging-utils.js.map +0 -1
  385. package/esm/packages/vuu-utils/src/module-utils.js +0 -4
  386. package/esm/packages/vuu-utils/src/module-utils.js.map +0 -1
  387. package/esm/packages/vuu-utils/src/nanoid/index.js +0 -20
  388. package/esm/packages/vuu-utils/src/nanoid/index.js.map +0 -1
  389. package/esm/packages/vuu-utils/src/perf-utils.js +0 -32
  390. package/esm/packages/vuu-utils/src/perf-utils.js.map +0 -1
  391. package/esm/packages/vuu-utils/src/promise-utils.js +0 -40
  392. package/esm/packages/vuu-utils/src/promise-utils.js.map +0 -1
  393. package/esm/packages/vuu-utils/src/protocol-message-utils.js +0 -75
  394. package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +0 -1
  395. package/esm/packages/vuu-utils/src/range-utils.js +0 -108
  396. package/esm/packages/vuu-utils/src/range-utils.js.map +0 -1
  397. package/esm/packages/vuu-utils/src/react-utils.js +0 -66
  398. package/esm/packages/vuu-utils/src/react-utils.js.map +0 -1
  399. package/esm/packages/vuu-utils/src/round-decimal.js +0 -127
  400. package/esm/packages/vuu-utils/src/round-decimal.js.map +0 -1
  401. package/esm/packages/vuu-utils/src/row-utils.js +0 -54
  402. package/esm/packages/vuu-utils/src/row-utils.js.map +0 -1
  403. package/esm/packages/vuu-utils/src/selection-utils.js +0 -31
  404. package/esm/packages/vuu-utils/src/selection-utils.js.map +0 -1
  405. package/esm/packages/vuu-utils/src/shell-layout-types.js +0 -11
  406. package/esm/packages/vuu-utils/src/shell-layout-types.js.map +0 -1
  407. package/esm/packages/vuu-utils/src/sort-utils.js +0 -73
  408. package/esm/packages/vuu-utils/src/sort-utils.js.map +0 -1
  409. package/esm/packages/vuu-utils/src/table-schema-utils.js +0 -11
  410. package/esm/packages/vuu-utils/src/table-schema-utils.js.map +0 -1
  411. package/esm/packages/vuu-utils/src/text-utils.js +0 -18
  412. package/esm/packages/vuu-utils/src/text-utils.js.map +0 -1
  413. package/esm/packages/vuu-utils/src/theme-utils.js +0 -34
  414. package/esm/packages/vuu-utils/src/theme-utils.js.map +0 -1
  415. package/esm/packages/vuu-utils/src/tree-utils.js +0 -108
  416. package/esm/packages/vuu-utils/src/tree-utils.js.map +0 -1
  417. package/esm/packages/vuu-utils/src/ts-utils.js +0 -8
  418. package/esm/packages/vuu-utils/src/ts-utils.js.map +0 -1
  419. package/esm/packages/vuu-utils/src/typeahead-utils.js +0 -4
  420. package/esm/packages/vuu-utils/src/typeahead-utils.js.map +0 -1
  421. package/esm/packages/vuu-utils/src/url-utils.js +0 -18
  422. package/esm/packages/vuu-utils/src/url-utils.js.map +0 -1
  423. package/esm/packages/vuu-utils/src/useId.js +0 -7
  424. package/esm/packages/vuu-utils/src/useId.js.map +0 -1
  425. package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +0 -15
  426. package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +0 -1
  427. package/esm/packages/vuu-utils/src/useResizeObserver.js +0 -130
  428. package/esm/packages/vuu-utils/src/useResizeObserver.js.map +0 -1
  429. package/esm/packages/vuu-utils/src/useStateRef.js +0 -21
  430. package/esm/packages/vuu-utils/src/useStateRef.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ function isArrayOfListeners(listeners) {
2
+ return Array.isArray(listeners);
3
+ }
4
+ function isOnlyListener(listeners) {
5
+ return !Array.isArray(listeners);
6
+ }
7
+ class EventEmitter {
8
+ #events = new Map();
9
+ addListener(event, listener) {
10
+ const listeners = this.#events.get(event);
11
+ if (listeners) {
12
+ if (isArrayOfListeners(listeners)) listeners.push(listener);
13
+ else if (isOnlyListener(listeners)) this.#events.set(event, [
14
+ listeners,
15
+ listener
16
+ ]);
17
+ } else this.#events.set(event, listener);
18
+ }
19
+ removeListener(event, listener) {
20
+ if (!this.#events.has(event)) return;
21
+ const listenerOrListeners = this.#events.get(event);
22
+ let position = -1;
23
+ if (listenerOrListeners === listener) this.#events.delete(event);
24
+ else if (Array.isArray(listenerOrListeners)) {
25
+ for(let i = listenerOrListeners.length; i-- > 0;)if (listenerOrListeners[i] === listener) {
26
+ position = i;
27
+ break;
28
+ }
29
+ if (position < 0) return;
30
+ if (1 === listenerOrListeners.length) {
31
+ listenerOrListeners.length = 0;
32
+ this.#events.delete(event);
33
+ } else listenerOrListeners.splice(position, 1);
34
+ }
35
+ }
36
+ removeAllListeners(event) {
37
+ if (event && this.#events.has(event)) this.#events.delete(event);
38
+ else if (void 0 === event) this.#events.clear();
39
+ }
40
+ emit(event, ...args) {
41
+ if (this.#events) {
42
+ const handler = this.#events.get(event);
43
+ if (handler) this.invokeHandler(handler, args);
44
+ }
45
+ }
46
+ once(event, listener) {
47
+ const handler = (...args)=>{
48
+ this.removeListener(event, handler);
49
+ listener(...args);
50
+ };
51
+ this.on(event, handler);
52
+ }
53
+ on(event, listener) {
54
+ this.addListener(event, listener);
55
+ }
56
+ hasListener(event, listener) {
57
+ const listeners = this.#events.get(event);
58
+ if (Array.isArray(listeners)) return listeners.includes(listener);
59
+ return listeners === listener;
60
+ }
61
+ invokeHandler(handler, args) {
62
+ if (isArrayOfListeners(handler)) handler.slice().forEach((listener)=>this.invokeHandler(listener, args));
63
+ else switch(args.length){
64
+ case 0:
65
+ handler();
66
+ break;
67
+ case 1:
68
+ handler(args[0]);
69
+ break;
70
+ case 2:
71
+ handler(args[0], args[1]);
72
+ break;
73
+ default:
74
+ handler.call(null, ...args);
75
+ }
76
+ }
77
+ }
78
+ export { EventEmitter };
@@ -0,0 +1,86 @@
1
+ import { partition } from "./array-utils.js";
2
+ import { wordify } from "./text-utils.js";
3
+ import react from "react";
4
+ import { getLayoutComponent } from "./component-registry.js";
5
+ const env = process.env.NODE_ENV;
6
+ const isStaticFeature = (feature)=>null !== feature && "object" == typeof feature && "type" in feature;
7
+ const isStaticFeatures = (features)=>Array.isArray(features) && features.every(isStaticFeature);
8
+ function featureFromJson({ type }) {
9
+ const componentType = type.match(/^[a-z]/) ? type : getLayoutComponent(type);
10
+ if (void 0 === componentType) throw Error(`layoutUtils unable to create feature component from JSON, unknown type ${type}`);
11
+ return react.createElement(componentType);
12
+ }
13
+ const isCustomFeature = (feature)=>"vuu-features" === feature.leftNavLocation;
14
+ const isWildcardSchema = (vuuTables)=>"*" === vuuTables;
15
+ const isVuuTables = (vuuTables)=>Array.isArray(vuuTables);
16
+ const hasFilterTableFeatureProps = (props)=>"object" == typeof props.ComponentProps && null !== props.ComponentProps && "tableSchema" in props.ComponentProps;
17
+ const isSameTable = (t1, t2)=>{
18
+ t1.module === t2.module && (t1.table, t2.table);
19
+ };
20
+ const byModule = (schema1, schema2)=>{
21
+ const m1 = schema1.table.module.toLowerCase();
22
+ const m2 = schema2.table.module.toLowerCase();
23
+ if (m1 < m2) return -1;
24
+ if (m1 > m2) return 1;
25
+ if (schema1.table.table < schema2.table.table) return -1;
26
+ if (schema1.table.table > schema2.table.table) return 1;
27
+ return 0;
28
+ };
29
+ const getFilterTableFeatures = (schemas, getFeaturePath)=>schemas.sort(byModule).map((schema)=>({
30
+ ...getFeaturePath({
31
+ env: env,
32
+ fileName: "FilterTable"
33
+ }),
34
+ ComponentProps: {
35
+ tableSchema: schema
36
+ },
37
+ ViewProps: {
38
+ allowRename: true
39
+ },
40
+ title: `${schema.table.module} ${schema.table.table}`
41
+ }));
42
+ const assertComponentRegistered = (componentName, component)=>{
43
+ if ("function" != typeof component) console.warn(`${componentName} module not loaded, will be unabale to deserialize from layout JSON`);
44
+ };
45
+ const assertComponentsRegistered = (componentList)=>{
46
+ for (const { componentName, component } of componentList)assertComponentRegistered(componentName, component);
47
+ };
48
+ const getCustomAndTableFeatures = (dynamicFeatures, tableSchemas)=>{
49
+ const [customFeatureConfig, tableFeaturesConfig] = partition(dynamicFeatures, isCustomFeature);
50
+ const customFeatures = [];
51
+ const tableFeatures = [];
52
+ for (const { featureProps = {}, viewProps, ...feature } of tableFeaturesConfig){
53
+ const { vuuTables } = featureProps;
54
+ if (isWildcardSchema(vuuTables)) {
55
+ if (tableSchemas) for (const tableSchema of tableSchemas)tableFeatures.push({
56
+ ...feature,
57
+ ComponentProps: {
58
+ tableSchema
59
+ },
60
+ title: `${tableSchema.table.module} ${wordify(tableSchema.table.table)}`,
61
+ ViewProps: {
62
+ ...viewProps,
63
+ allowRename: true
64
+ }
65
+ });
66
+ }
67
+ }
68
+ for (const { featureProps = {}, viewProps, ...feature } of customFeatureConfig){
69
+ const { vuuTables } = featureProps;
70
+ if (isVuuTables(vuuTables)) {
71
+ if (tableSchemas) customFeatures.push({
72
+ ...feature,
73
+ ComponentProps: vuuTables.reduce((map, vuuTable)=>{
74
+ map[`${vuuTable.table}Schema`] = tableSchemas.find((tableSchema)=>isSameTable(vuuTable, tableSchema.table));
75
+ return map;
76
+ }, {}),
77
+ ViewProps: viewProps
78
+ });
79
+ } else customFeatures.push(feature);
80
+ }
81
+ return {
82
+ dynamicFeatures: customFeatures,
83
+ tableFeatures: tableFeatures
84
+ };
85
+ };
86
+ export { assertComponentRegistered, assertComponentsRegistered, byModule, env, featureFromJson, getCustomAndTableFeatures, getFilterTableFeatures, hasFilterTableFeatureProps, isCustomFeature, isSameTable, isStaticFeatures, isVuuTables, isWildcardSchema };
@@ -0,0 +1,136 @@
1
+ import { ScaledDecimal } from "../ScaledDecimal.js";
2
+ const singleValueFilterOps = new Set([
3
+ "=",
4
+ "!=",
5
+ ">",
6
+ ">=",
7
+ "<",
8
+ "<=",
9
+ "contains",
10
+ "starts",
11
+ "ends"
12
+ ]);
13
+ const isBetweenOperator = (op)=>"between" === op || "between-inclusive" === op;
14
+ const isValidFilterClauseOp = (op)=>"in" === op || singleValueFilterOps.has(op);
15
+ const isNamedFilter = (f)=>void 0 !== f && void 0 !== f.name;
16
+ const isSingleValueFilter = (f)=>void 0 !== f && singleValueFilterOps.has(f.op);
17
+ const isScaledDecimalFilterClause = (f)=>f.value instanceof ScaledDecimal;
18
+ const isSerializableFilter = (f)=>isSingleValueFilter(f) && "asQuery" in f && "function" == typeof f["asQuery"];
19
+ const isFilter = (f)=>"object" == typeof f && null !== f && (isFilterClause(f) || isMultiClauseFilter(f));
20
+ const isFilterClause = (f)=>void 0 !== f && (isSingleValueFilter(f) || isMultiValueFilter(f));
21
+ const isMultiValueFilter = (f)=>void 0 !== f && "in" === f.op;
22
+ const isInFilter = (f)=>"in" === f.op;
23
+ const isAndFilter = (f)=>f?.op === "and";
24
+ const isBetweenFilter = (f)=>isAndFilter(f) && 2 === f.filters.length && f.filters[0].column === f.filters[1].column && (">" === f.filters[0].op && "<" === f.filters[1].op || ">=" === f.filters[0].op && "<=" === f.filters[1].op);
25
+ const isOrFilter = (f)=>f?.op === "or";
26
+ const isCompleteFilter = (filter)=>isSingleValueFilter(filter) && void 0 !== filter.column && void 0 !== filter.op && void 0 !== filter.value;
27
+ function isMultiClauseFilter(f) {
28
+ return void 0 !== f && ("and" === f.op || "or" === f.op);
29
+ }
30
+ const isExtendedFilter = (f)=>"object" == typeof f.extendedOptions;
31
+ const applyFilterToColumns = (columns, { filterStruct })=>columns.map((column)=>{
32
+ const filter = extractFilterForColumn(filterStruct, column.name);
33
+ if (void 0 !== filter) return {
34
+ ...column,
35
+ filter
36
+ };
37
+ if (column.filter) return {
38
+ ...column,
39
+ filter: void 0
40
+ };
41
+ return column;
42
+ });
43
+ const isFilteredColumn = (column)=>void 0 !== column.filter;
44
+ const stripFilterFromColumns = (columns)=>columns.map((col)=>{
45
+ const { filter, ...rest } = col;
46
+ return filter ? rest : col;
47
+ });
48
+ const extractFilterForColumn = (filter, columnName)=>{
49
+ if (isMultiClauseFilter(filter)) return collectFiltersForColumn(filter, columnName);
50
+ if (isFilterClause(filter)) return filter.column === columnName ? filter : void 0;
51
+ };
52
+ const collectFiltersForColumn = (filter, columnName)=>{
53
+ const { filters, op } = filter;
54
+ const results = [];
55
+ filters.forEach((filter)=>{
56
+ const ffc = extractFilterForColumn(filter, columnName);
57
+ if (ffc) results.push(ffc);
58
+ });
59
+ if (0 === results.length) return;
60
+ if (1 === results.length) return results[0];
61
+ return {
62
+ op,
63
+ filters: results
64
+ };
65
+ };
66
+ const stringifyBoolean = (value)=>"boolean" == typeof value ? "${filter.value}" : value;
67
+ const getColumnValueFromFilter = (column, operator, filter)=>{
68
+ if (isSingleValueFilter(filter)) {
69
+ if (filter.column === column.name) {
70
+ if (!operator.startsWith("between")) return stringifyBoolean(filter.value);
71
+ else if ("=" === filter.op) return [
72
+ `${filter.value}`,
73
+ ""
74
+ ];
75
+ else if ("<" === filter.op) return [
76
+ "",
77
+ `${filter.value}`
78
+ ];
79
+ }
80
+ } else if (isBetweenFilter(filter)) {
81
+ if (filter.filters[0].column === column.name) {
82
+ const [{ value: v1 }, { value: v2 }] = filter.filters;
83
+ return [
84
+ `${v1}`,
85
+ `${v2}`
86
+ ];
87
+ }
88
+ } else if (isAndFilter(filter)) {
89
+ const filterForColumn = filter.filters.find((f)=>isBetweenFilter(f) ? f.filters[0].column === column.name : f.column === column.name);
90
+ if (isSingleValueFilter(filterForColumn)) return stringifyBoolean(filterForColumn.value);
91
+ if (operator.startsWith("between") && isBetweenFilter(filterForColumn)) {
92
+ const [{ value: v1 }, { value: v2 }] = filterForColumn.filters;
93
+ return [
94
+ `${v1}`,
95
+ `${v2}`
96
+ ];
97
+ }
98
+ }
99
+ if (!operator.startsWith("between")) return "";
100
+ if ("time" === column.type) return [
101
+ "00:00:00",
102
+ "23:59:59"
103
+ ];
104
+ return [
105
+ "",
106
+ ""
107
+ ];
108
+ };
109
+ const betweenFiltersAreEqual = (f1, f2)=>{
110
+ const [from1, to1] = f1.filters;
111
+ const [from2, to2] = f2.filters;
112
+ return filtersAreEqual(from1, from2) && filtersAreEqual(to1, to2);
113
+ };
114
+ const singleValueFilterClausesAreEqual = (f1, f2)=>f1.column === f2.column && f1.op === f2.op && f1.value === f2.value;
115
+ const findEqualFilter = (filters)=>(filter)=>{
116
+ if (isBetweenFilter(filter)) {
117
+ const target = filters.find((f)=>isBetweenFilter(f) && betweenFiltersAreEqual(f, filter));
118
+ return void 0 !== target;
119
+ }
120
+ {
121
+ const target = filters.find((f)=>f.column === filter.column);
122
+ if (target) return target.op === filter.op && target.value === filter.value;
123
+ }
124
+ return false;
125
+ };
126
+ const filtersAreEqual = (f1, f2)=>{
127
+ if (null == f1 && null == f2) return true;
128
+ if (null == f1 || null == f2) ;
129
+ else if (isSingleValueFilter(f1) && isSingleValueFilter(f2)) return singleValueFilterClausesAreEqual(f1, f2);
130
+ else if (isBetweenFilter(f1) && isBetweenFilter(f2)) return betweenFiltersAreEqual(f1, f2);
131
+ else if (isAndFilter(f1) && isAndFilter(f2)) {
132
+ if (f1.filters.length === f2.filters.length) return f1.filters.every(findEqualFilter(f2.filters));
133
+ }
134
+ return false;
135
+ };
136
+ export { applyFilterToColumns, extractFilterForColumn, filtersAreEqual, getColumnValueFromFilter, isAndFilter, isBetweenFilter, isBetweenOperator, isCompleteFilter, isExtendedFilter, isFilter, isFilterClause, isFilteredColumn, isInFilter, isMultiClauseFilter, isMultiValueFilter, isNamedFilter, isOrFilter, isScaledDecimalFilterClause, isSerializableFilter, isSingleValueFilter, isValidFilterClauseOp, stripFilterFromColumns };
@@ -0,0 +1,70 @@
1
+ import { isDateTimeDataValue } from "../column-utils.js";
2
+ import { isMultiClauseFilter, isMultiValueFilter, isSerializableFilter } from "./filter-utils.js";
3
+ import { ScaledDecimal } from "../ScaledDecimal.js";
4
+ const filterValue = (value)=>"string" == typeof value ? `"${value}"` : value instanceof ScaledDecimal ? value.toString() : value;
5
+ const quotedStrings = (value)=>"string" == typeof value ? `"${value}"` : value;
6
+ const removeOuterMostParentheses = (s)=>s.replace(/^\((.*)\)$/, "$1");
7
+ const filterAsQuery = (f, opts)=>removeOuterMostParentheses(filterAsQueryCore(f, opts));
8
+ const filterAsQueryCore = (f, opts)=>{
9
+ if (isMultiClauseFilter(f)) {
10
+ const multiClauseFilter = f.filters.map((filter)=>filterAsQueryCore(filter, opts)).join(` ${f.op} `);
11
+ return `(${multiClauseFilter})`;
12
+ }
13
+ if (isMultiValueFilter(f)) return `${f.column} ${f.op} [${f.values.map(quotedStrings).join(",")}]`;
14
+ return singleValueFilterAsQuery(f, opts);
15
+ };
16
+ function singleValueFilterAsQuery(f, opts) {
17
+ if (isSerializableFilter(f)) return f.asQuery();
18
+ {
19
+ const column = opts?.columnsByName?.[f.column];
20
+ if (column && isDateTimeDataValue(column)) return dateFilterAsQuery(f);
21
+ return defaultSingleValueFilterAsQuery(f);
22
+ }
23
+ }
24
+ const ONE_DAY_IN_MILLIS = 86400000;
25
+ function dateFilterAsQuery(f) {
26
+ switch(f.op){
27
+ case "=":
28
+ {
29
+ const filters = [
30
+ {
31
+ op: ">=",
32
+ column: f.column,
33
+ value: f.value
34
+ },
35
+ {
36
+ op: "<",
37
+ column: f.column,
38
+ value: f.value + ONE_DAY_IN_MILLIS
39
+ }
40
+ ];
41
+ return filterAsQueryCore({
42
+ op: "and",
43
+ filters
44
+ });
45
+ }
46
+ case "!=":
47
+ {
48
+ const filters = [
49
+ {
50
+ op: "<",
51
+ column: f.column,
52
+ value: f.value
53
+ },
54
+ {
55
+ op: ">=",
56
+ column: f.column,
57
+ value: f.value + ONE_DAY_IN_MILLIS
58
+ }
59
+ ];
60
+ return filterAsQueryCore({
61
+ op: "or",
62
+ filters
63
+ });
64
+ }
65
+ default:
66
+ return defaultSingleValueFilterAsQuery(f);
67
+ }
68
+ }
69
+ const defaultSingleValueFilterAsQuery = (f)=>`${f.column} ${f.op} ${filterValue(f.value)}`;
70
+ export { ONE_DAY_IN_MILLIS, dateFilterAsQuery, filterAsQuery };
@@ -0,0 +1,2 @@
1
+ export * from "./filter-utils.js";
2
+ export * from "./filterAsQuery.js";
@@ -0,0 +1,69 @@
1
+ import { stringIsValidDecimal, stringIsValidInt } from "./data-utils.js";
2
+ import { Time, isValidTimeString } from "./date/index.js";
3
+ import { queryClosest } from "./html-utils.js";
4
+ import { ScaledDecimal2, ScaledDecimal4, ScaledDecimal6, ScaledDecimal8 } from "./ScaledDecimal.js";
5
+ class DataValidationError extends Error {
6
+ actualType;
7
+ expectedType;
8
+ constructor(message, expectedType, actualType){
9
+ super(message);
10
+ this.actualType = actualType;
11
+ this.expectedType = expectedType;
12
+ }
13
+ }
14
+ const getFieldName = (target)=>{
15
+ const saltFormField = queryClosest(target, "[data-field]");
16
+ const fieldName = saltFormField?.dataset.field;
17
+ if (fieldName) return fieldName;
18
+ throw Error("named form field not found");
19
+ };
20
+ const isNumber = (type, value)=>"number" === type;
21
+ const isValidRange = ([val1, val2])=>{
22
+ if (isValidTimeString(val1) && isValidTimeString(val2)) return val2 > val1;
23
+ return true;
24
+ };
25
+ function getTypedRange([value1, value2], dataType, options) {
26
+ return [
27
+ getTypedValue(value1, dataType, false, options),
28
+ getTypedValue(value2, dataType, false, options)
29
+ ];
30
+ }
31
+ const getActualType = (value)=>{
32
+ if ("boolean" == typeof value) return "boolean";
33
+ if ("number" == typeof value) return "number";
34
+ return "string";
35
+ };
36
+ function getTypedValue(value, type, throwIfInvalid = false, options) {
37
+ switch(type){
38
+ case "int":
39
+ case "long":
40
+ if (stringIsValidInt(value)) return parseInt(value, 10);
41
+ if (isValidTimeString(value)) return value;
42
+ if (!throwIfInvalid) return;
43
+ else throw Error(`value ${value} is not a valid ${type}`);
44
+ case "scaleddecimal2":
45
+ return ScaledDecimal2(value);
46
+ case "scaleddecimal4":
47
+ return ScaledDecimal4(value);
48
+ case "scaleddecimal6":
49
+ return ScaledDecimal6(value);
50
+ case "scaleddecimal8":
51
+ return ScaledDecimal8(value);
52
+ case "double":
53
+ case "number":
54
+ if (stringIsValidDecimal(value)) return parseFloat(value);
55
+ if (!throwIfInvalid) return;
56
+ throw new DataValidationError(`value ${value} is not a valid ${type}`, "decimal", getActualType(value));
57
+ case "boolean":
58
+ return "true" === value;
59
+ case "time":
60
+ if (isValidTimeString(value)) if (options?.type === "TimeString") return value;
61
+ else return +Time(value).asDate();
62
+ if (value.length > 0 && Time.isDateInMillis(value)) return Number(value);
63
+ if (!throwIfInvalid) return;
64
+ else throw Error(`value ${value} is not a valid ${type}`);
65
+ default:
66
+ return value;
67
+ }
68
+ }
69
+ export { DataValidationError, getFieldName, getTypedRange, getTypedValue, isNumber, isValidRange };
@@ -0,0 +1,42 @@
1
+ import { isDateTimeDataValue, isMappedValueTypeRenderer, isTimeDataValue, isTypeDescriptor } from "./column-utils.js";
2
+ import { dateTimePattern, formatDate } from "./date/index.js";
3
+ import { roundDecimal, roundScaledDecimal } from "./round-decimal.js";
4
+ import { isNumericType } from "./protocol-message-utils.js";
5
+ const DEFAULT_NUMERIC_FORMAT = {};
6
+ const defaultValueFormatter = (value)=>null == value ? "" : "string" == typeof value ? value : value.toString();
7
+ const dateFormatter = (column)=>{
8
+ const pattern = dateTimePattern(column.type);
9
+ const formatter = formatDate(pattern);
10
+ return (value)=>{
11
+ if ("number" == typeof value && 0 !== value) return formatter(new Date(value));
12
+ return "";
13
+ };
14
+ };
15
+ const numericFormatter = ({ align = "right", serverDataType, type })=>{
16
+ if (void 0 === type || "string" == typeof type) return defaultValueFormatter;
17
+ {
18
+ const { alignOnDecimals = false, decimals, roundingRule, useLocaleString, zeroPad = false } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;
19
+ return (value)=>{
20
+ if (serverDataType?.startsWith("scaleddecimal")) if ("string" == typeof value) return roundScaledDecimal(value, align, decimals, zeroPad, alignOnDecimals, useLocaleString, roundingRule);
21
+ else throw Error(`[formatting-utils] numericFormatter, invalid data for ${serverDataType}: '${value}'`);
22
+ if ("string" == typeof value && (value.startsWith("Σ") || value.startsWith("["))) return value;
23
+ const number = "number" == typeof value ? value : "string" == typeof value ? parseFloat(value) : void 0;
24
+ return roundDecimal(number, align, decimals, zeroPad, alignOnDecimals, useLocaleString, roundingRule);
25
+ };
26
+ }
27
+ };
28
+ const mapFormatter = (map)=>(value)=>map[value] ?? "";
29
+ const NumericTypes = [
30
+ "decimal",
31
+ "number"
32
+ ];
33
+ const getValueFormatter = (column, serverDataType = column.serverDataType)=>{
34
+ if (isDateTimeDataValue(column, serverDataType) || isTimeDataValue(column)) return dateFormatter(column);
35
+ const { type } = column;
36
+ if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) return mapFormatter(type.renderer.map);
37
+ if (isNumericType(serverDataType) || isTypeDescriptor(type) && NumericTypes.includes(type.name)) return numericFormatter(column);
38
+ if ("string" === serverDataType || "char" === serverDataType) return (value)=>value;
39
+ return defaultValueFormatter;
40
+ };
41
+ const lowerCase = (str)=>str.toLowerCase();
42
+ export { defaultValueFormatter, getValueFormatter, lowerCase, numericFormatter };
@@ -0,0 +1,2 @@
1
+ const getUniqueId = ()=>`hw-${Math.round(1e5 * Math.random())}`;
2
+ export { getUniqueId };
@@ -0,0 +1,16 @@
1
+ function addGroupColumn(groupBy, column) {
2
+ if (groupBy.length > 0) return groupBy.concat(column.name);
3
+ return [
4
+ column.name
5
+ ];
6
+ }
7
+ const removeGroupColumn = (groupBy, column)=>groupBy.filter((colName)=>colName !== column.name);
8
+ const getGroupStatus = (columnName, groupBy)=>{
9
+ if (void 0 === groupBy || 0 === groupBy.length) return "no-groupby";
10
+ {
11
+ const indexPos = groupBy.indexOf(columnName);
12
+ if (-1 === indexPos) return 1 === groupBy.length ? "single-groupby-other-column" : "multi-groupby-other-columns";
13
+ return 1 === groupBy.length ? "single-groupby" : "single-groupby-other-column";
14
+ }
15
+ };
16
+ export { addGroupColumn, getGroupStatus, removeGroupColumn };
@@ -0,0 +1,108 @@
1
+ const createEl = (elementType, className, textContent)=>{
2
+ const el = document.createElement(elementType);
3
+ if (className) el.className = className;
4
+ if (textContent) el.textContent = textContent;
5
+ return el;
6
+ };
7
+ const getFocusableElement = (el, tabIndex)=>{
8
+ if (el) {
9
+ if (el.hasAttribute("tabindex")) {
10
+ const rootTabIndex = parseInt(el.getAttribute("tabindex"));
11
+ if (!isNaN(rootTabIndex) && (void 0 === tabIndex || rootTabIndex === tabIndex)) return el;
12
+ }
13
+ const focusableEl = "number" == typeof tabIndex ? el.querySelector(`[tabindex="${tabIndex}"]`) : el.querySelector("[tabindex]");
14
+ if (focusableEl) return focusableEl;
15
+ }
16
+ };
17
+ const getElementDataIndex = (el)=>{
18
+ if (el) {
19
+ const index = parseInt(el.dataset.index || "");
20
+ if (!isNaN(index)) return index;
21
+ }
22
+ return -1;
23
+ };
24
+ function queryClosest(el, cssQueryString, throwIfNotFound) {
25
+ if (el) {
26
+ const result = el.closest(cssQueryString);
27
+ if (result) return result;
28
+ }
29
+ if (!throwIfNotFound) return null;
30
+ throw Error(`no element found to match '${cssQueryString}'`);
31
+ }
32
+ const getClosest = (el, dataProperty)=>queryClosest(el, `[data-${dataProperty}]`);
33
+ const getClosestIndexItem = (el)=>getClosest(el, "index");
34
+ function getElementByDataIndex(container, index, throwIfNotFound = false) {
35
+ if (null == container && throwIfNotFound) throw Error("html-utils getElementByDataIndex, container is null");
36
+ const element = container?.querySelector(`[data-index="${index}"]`);
37
+ if (element) return element;
38
+ if (!throwIfNotFound) return;
39
+ throw Error("html-utils getElementByDataIndex, Item not found with data-index='${index}'");
40
+ }
41
+ const focusFirstFocusableElement = (el, tabIndex)=>{
42
+ requestAnimationFrame(()=>{
43
+ const focusableElement = getFocusableElement(el, tabIndex);
44
+ if (focusableElement) focusableElement.focus();
45
+ });
46
+ };
47
+ const isSelectableElement = (el)=>{
48
+ const item = el?.closest("[data-index]");
49
+ if (!item || item.ariaDisabled || "false" === item.dataset.selectable || item.querySelector('[data-selectable="false"],[aria-disabled="true"]')) return false;
50
+ return true;
51
+ };
52
+ const isInputElement = (el)=>{
53
+ if (null === el) return false;
54
+ return "INPUT" === el.tagName;
55
+ };
56
+ const isDateInput = (el)=>isInputElement(el) && el.classList.contains("saltDateInput-input");
57
+ const hasOpenOptionList = (el)=>{
58
+ if (null !== el) return "true" === el.ariaExpanded;
59
+ };
60
+ let size;
61
+ function getScrollbarSize() {
62
+ if (void 0 === size) {
63
+ let outer = document.createElement("div");
64
+ outer.className = "scrollable-content";
65
+ outer.style.width = "50px";
66
+ outer.style.height = "50px";
67
+ outer.style.overflowY = "scroll";
68
+ outer.style.position = "absolute";
69
+ outer.style.top = "-200px";
70
+ outer.style.left = "-200px";
71
+ const inner = document.createElement("div");
72
+ inner.style.height = "100px";
73
+ inner.style.width = "100%";
74
+ outer.appendChild(inner);
75
+ document.body.appendChild(outer);
76
+ const outerWidth = outer.offsetWidth;
77
+ const innerWidth = inner.offsetWidth;
78
+ document.body.removeChild(outer);
79
+ size = outerWidth - innerWidth;
80
+ outer = null;
81
+ }
82
+ return size;
83
+ }
84
+ const dispatchMouseEvent = (el, type)=>{
85
+ const evt = new MouseEvent(type, {
86
+ view: window,
87
+ bubbles: true,
88
+ cancelable: true
89
+ });
90
+ el.dispatchEvent(evt);
91
+ };
92
+ const dispatchKeyboardEvent = (el, type, key)=>{
93
+ const evt = new KeyboardEvent(type, {
94
+ key,
95
+ view: window,
96
+ bubbles: true,
97
+ cancelable: true
98
+ });
99
+ el.dispatchEvent(evt);
100
+ };
101
+ const dispatchCustomEvent = (el, type)=>{
102
+ const evt = new Event(type, {
103
+ bubbles: true,
104
+ cancelable: true
105
+ });
106
+ el.dispatchEvent(evt);
107
+ };
108
+ export { createEl, dispatchCustomEvent, dispatchKeyboardEvent, dispatchMouseEvent, focusFirstFocusableElement, getClosest, getClosestIndexItem, getElementByDataIndex, getElementDataIndex, getFocusableElement, getScrollbarSize, hasOpenOptionList, isDateInput, isInputElement, isSelectableElement, queryClosest };