@neovici/cosmoz-omnitable 14.14.3 → 14.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/dist/cosmoz-omnitable-column-amount.d.ts +2 -0
  2. package/dist/cosmoz-omnitable-column-amount.d.ts.map +1 -0
  3. package/dist/cosmoz-omnitable-column-amount.js +113 -0
  4. package/dist/cosmoz-omnitable-column-autocomplete.d.ts +6 -0
  5. package/dist/cosmoz-omnitable-column-autocomplete.d.ts.map +1 -0
  6. package/dist/cosmoz-omnitable-column-autocomplete.js +87 -0
  7. package/dist/cosmoz-omnitable-column-boolean.d.ts +17 -0
  8. package/dist/cosmoz-omnitable-column-boolean.d.ts.map +1 -0
  9. package/dist/cosmoz-omnitable-column-boolean.js +105 -0
  10. package/dist/cosmoz-omnitable-column-date.d.ts +2 -0
  11. package/dist/cosmoz-omnitable-column-date.d.ts.map +1 -0
  12. package/dist/cosmoz-omnitable-column-date.js +97 -0
  13. package/dist/cosmoz-omnitable-column-datetime.d.ts +2 -0
  14. package/dist/cosmoz-omnitable-column-datetime.d.ts.map +1 -0
  15. package/dist/cosmoz-omnitable-column-datetime.js +106 -0
  16. package/dist/cosmoz-omnitable-column-list-data.d.ts +2 -0
  17. package/dist/cosmoz-omnitable-column-list-data.d.ts.map +1 -0
  18. package/dist/cosmoz-omnitable-column-list-data.js +123 -0
  19. package/dist/cosmoz-omnitable-column-list-horizontal.d.ts +2 -0
  20. package/dist/cosmoz-omnitable-column-list-horizontal.d.ts.map +1 -0
  21. package/{cosmoz-omnitable-column-list-horizontal.js → dist/cosmoz-omnitable-column-list-horizontal.js} +15 -37
  22. package/dist/cosmoz-omnitable-column-list-mixin.d.ts +59 -0
  23. package/dist/cosmoz-omnitable-column-list-mixin.d.ts.map +1 -0
  24. package/dist/cosmoz-omnitable-column-list-mixin.js +139 -0
  25. package/dist/cosmoz-omnitable-column-list.d.ts +2 -0
  26. package/dist/cosmoz-omnitable-column-list.d.ts.map +1 -0
  27. package/{cosmoz-omnitable-column-list.js → dist/cosmoz-omnitable-column-list.js} +28 -47
  28. package/dist/cosmoz-omnitable-column-mixin.d.ts +161 -0
  29. package/dist/cosmoz-omnitable-column-mixin.d.ts.map +1 -0
  30. package/dist/cosmoz-omnitable-column-mixin.js +121 -0
  31. package/dist/cosmoz-omnitable-column-number.d.ts +2 -0
  32. package/dist/cosmoz-omnitable-column-number.d.ts.map +1 -0
  33. package/dist/cosmoz-omnitable-column-number.js +112 -0
  34. package/dist/cosmoz-omnitable-column-time.d.ts +2 -0
  35. package/dist/cosmoz-omnitable-column-time.d.ts.map +1 -0
  36. package/dist/cosmoz-omnitable-column-time.js +102 -0
  37. package/dist/cosmoz-omnitable-column.d.ts +2 -0
  38. package/dist/cosmoz-omnitable-column.d.ts.map +1 -0
  39. package/dist/cosmoz-omnitable-column.js +75 -0
  40. package/dist/cosmoz-omnitable-columns.d.ts +2 -0
  41. package/dist/cosmoz-omnitable-columns.d.ts.map +1 -0
  42. package/{cosmoz-omnitable-columns.js → dist/cosmoz-omnitable-columns.js} +1 -0
  43. package/dist/cosmoz-omnitable-group-row.d.ts +2 -0
  44. package/dist/cosmoz-omnitable-group-row.d.ts.map +1 -0
  45. package/dist/cosmoz-omnitable-group-row.js +15 -0
  46. package/dist/cosmoz-omnitable-header-row.d.ts +2 -0
  47. package/dist/cosmoz-omnitable-header-row.d.ts.map +1 -0
  48. package/{cosmoz-omnitable-header-row.js → dist/cosmoz-omnitable-header-row.js} +12 -45
  49. package/dist/cosmoz-omnitable-item-expand-line.d.ts +2 -0
  50. package/dist/cosmoz-omnitable-item-expand-line.d.ts.map +1 -0
  51. package/{cosmoz-omnitable-item-expand-line.js → dist/cosmoz-omnitable-item-expand-line.js} +4 -9
  52. package/dist/cosmoz-omnitable-item-expand.d.ts +2 -0
  53. package/dist/cosmoz-omnitable-item-expand.d.ts.map +1 -0
  54. package/{cosmoz-omnitable-item-expand.js → dist/cosmoz-omnitable-item-expand.js} +10 -18
  55. package/dist/cosmoz-omnitable-item-row.d.ts +2 -0
  56. package/dist/cosmoz-omnitable-item-row.d.ts.map +1 -0
  57. package/dist/cosmoz-omnitable-item-row.js +19 -0
  58. package/dist/cosmoz-omnitable-skeleton.d.ts +2 -0
  59. package/dist/cosmoz-omnitable-skeleton.d.ts.map +1 -0
  60. package/{cosmoz-omnitable-skeleton.js → dist/cosmoz-omnitable-skeleton.js} +9 -25
  61. package/dist/cosmoz-omnitable-styles.d.ts +4 -0
  62. package/dist/cosmoz-omnitable-styles.d.ts.map +1 -0
  63. package/{cosmoz-omnitable-styles.js → dist/cosmoz-omnitable-styles.js} +3 -4
  64. package/dist/cosmoz-omnitable.d.ts +3 -0
  65. package/dist/cosmoz-omnitable.d.ts.map +1 -0
  66. package/{cosmoz-omnitable.js → dist/cosmoz-omnitable.js} +27 -40
  67. package/dist/grouped-list/cosmoz-grouped-list-row.d.ts +2 -0
  68. package/dist/grouped-list/cosmoz-grouped-list-row.d.ts.map +1 -0
  69. package/dist/grouped-list/cosmoz-grouped-list-row.js +31 -0
  70. package/dist/grouped-list/cosmoz-grouped-list.d.ts +2 -0
  71. package/dist/grouped-list/cosmoz-grouped-list.d.ts.map +1 -0
  72. package/dist/grouped-list/cosmoz-grouped-list.js +5 -0
  73. package/dist/grouped-list/index.d.ts +2 -0
  74. package/dist/grouped-list/index.d.ts.map +1 -0
  75. package/{grouped-list → dist/grouped-list}/index.js +1 -0
  76. package/dist/grouped-list/use-collapsible-items.d.ts +7 -0
  77. package/dist/grouped-list/use-collapsible-items.d.ts.map +1 -0
  78. package/dist/grouped-list/use-collapsible-items.js +27 -0
  79. package/dist/grouped-list/use-cosmoz-grouped-list.d.ts +15 -0
  80. package/dist/grouped-list/use-cosmoz-grouped-list.d.ts.map +1 -0
  81. package/dist/grouped-list/use-cosmoz-grouped-list.js +66 -0
  82. package/dist/grouped-list/use-selected-items.d.ts +19 -0
  83. package/dist/grouped-list/use-selected-items.d.ts.map +1 -0
  84. package/dist/grouped-list/use-selected-items.js +105 -0
  85. package/dist/grouped-list/use-weak-state.d.ts +6 -0
  86. package/dist/grouped-list/use-weak-state.d.ts.map +1 -0
  87. package/dist/grouped-list/use-weak-state.js +15 -0
  88. package/dist/grouped-list/utils.d.ts +11 -0
  89. package/dist/grouped-list/utils.d.ts.map +1 -0
  90. package/dist/grouped-list/utils.js +57 -0
  91. package/dist/lib/compute-layout.d.ts +3 -0
  92. package/dist/lib/compute-layout.d.ts.map +1 -0
  93. package/dist/lib/compute-layout.js +46 -0
  94. package/dist/lib/cosmoz-omnitable-amount-range-input.d.ts +2 -0
  95. package/dist/lib/cosmoz-omnitable-amount-range-input.d.ts.map +1 -0
  96. package/dist/lib/cosmoz-omnitable-amount-range-input.js +304 -0
  97. package/dist/lib/cosmoz-omnitable-date-input-mixin.d.ts +2 -0
  98. package/dist/lib/cosmoz-omnitable-date-input-mixin.d.ts.map +1 -0
  99. package/dist/lib/cosmoz-omnitable-date-input-mixin.js +149 -0
  100. package/dist/lib/cosmoz-omnitable-date-range-input.d.ts +2 -0
  101. package/dist/lib/cosmoz-omnitable-date-range-input.d.ts.map +1 -0
  102. package/{lib → dist/lib}/cosmoz-omnitable-date-range-input.js +32 -41
  103. package/dist/lib/cosmoz-omnitable-datetime-range-input.d.ts +2 -0
  104. package/dist/lib/cosmoz-omnitable-datetime-range-input.d.ts.map +1 -0
  105. package/{lib → dist/lib}/cosmoz-omnitable-datetime-range-input.js +27 -38
  106. package/dist/lib/cosmoz-omnitable-number-range-input.d.ts +2 -0
  107. package/dist/lib/cosmoz-omnitable-number-range-input.d.ts.map +1 -0
  108. package/{lib → dist/lib}/cosmoz-omnitable-number-range-input.js +73 -83
  109. package/dist/lib/cosmoz-omnitable-range-input-mixin.d.ts +2 -0
  110. package/dist/lib/cosmoz-omnitable-range-input-mixin.d.ts.map +1 -0
  111. package/dist/lib/cosmoz-omnitable-range-input-mixin.js +337 -0
  112. package/dist/lib/cosmoz-omnitable-resize-nub.d.ts +2 -0
  113. package/dist/lib/cosmoz-omnitable-resize-nub.d.ts.map +1 -0
  114. package/dist/lib/cosmoz-omnitable-resize-nub.js +33 -0
  115. package/dist/lib/cosmoz-omnitable-time-range-input.d.ts +2 -0
  116. package/dist/lib/cosmoz-omnitable-time-range-input.d.ts.map +1 -0
  117. package/dist/lib/cosmoz-omnitable-time-range-input.js +125 -0
  118. package/dist/lib/generic-sorter.d.ts +2 -0
  119. package/dist/lib/generic-sorter.d.ts.map +1 -0
  120. package/dist/lib/generic-sorter.js +29 -0
  121. package/dist/lib/icons.d.ts +5 -0
  122. package/dist/lib/icons.d.ts.map +1 -0
  123. package/{lib → dist/lib}/icons.js +5 -8
  124. package/dist/lib/layout.d.ts +2 -0
  125. package/dist/lib/layout.d.ts.map +1 -0
  126. package/dist/lib/layout.js +41 -0
  127. package/dist/lib/polymer-haunted-render-mixin.d.ts +10 -0
  128. package/dist/lib/polymer-haunted-render-mixin.d.ts.map +1 -0
  129. package/dist/lib/polymer-haunted-render-mixin.js +16 -0
  130. package/dist/lib/render-footer.d.ts +9 -0
  131. package/dist/lib/render-footer.d.ts.map +1 -0
  132. package/{lib → dist/lib}/render-footer.js +4 -17
  133. package/dist/lib/render-header.d.ts +14 -0
  134. package/dist/lib/render-header.d.ts.map +1 -0
  135. package/{lib → dist/lib}/render-header.js +6 -27
  136. package/dist/lib/render-list.d.ts +2 -0
  137. package/dist/lib/render-list.d.ts.map +1 -0
  138. package/{lib → dist/lib}/render-list.js +12 -45
  139. package/dist/lib/save-as-csv-action.d.ts +2 -0
  140. package/dist/lib/save-as-csv-action.d.ts.map +1 -0
  141. package/dist/lib/save-as-csv-action.js +26 -0
  142. package/dist/lib/save-as-xlsx-action.d.ts +3 -0
  143. package/dist/lib/save-as-xlsx-action.d.ts.map +1 -0
  144. package/dist/lib/save-as-xlsx-action.js +18 -0
  145. package/dist/lib/settings/cosmoz-omnitable-settings.d.ts +2 -0
  146. package/dist/lib/settings/cosmoz-omnitable-settings.d.ts.map +1 -0
  147. package/{lib → dist/lib}/settings/cosmoz-omnitable-settings.js +27 -69
  148. package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts +14 -0
  149. package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts.map +1 -0
  150. package/dist/lib/settings/cosmoz-omnitable-sort-group.js +55 -0
  151. package/dist/lib/settings/drivers/context.d.ts +12 -0
  152. package/dist/lib/settings/drivers/context.d.ts.map +1 -0
  153. package/dist/lib/settings/drivers/context.js +11 -0
  154. package/dist/lib/settings/drivers/index.d.ts +4 -0
  155. package/dist/lib/settings/drivers/index.d.ts.map +1 -0
  156. package/{lib → dist/lib}/settings/drivers/index.js +1 -0
  157. package/dist/lib/settings/drivers/local.d.ts +8 -0
  158. package/dist/lib/settings/drivers/local.d.ts.map +1 -0
  159. package/dist/lib/settings/drivers/local.js +33 -0
  160. package/dist/lib/settings/drivers/remote.d.ts +8 -0
  161. package/dist/lib/settings/drivers/remote.d.ts.map +1 -0
  162. package/dist/lib/settings/drivers/remote.js +25 -0
  163. package/dist/lib/settings/index.d.ts +2 -0
  164. package/dist/lib/settings/index.d.ts.map +1 -0
  165. package/{lib → dist/lib}/settings/index.js +1 -1
  166. package/dist/lib/settings/normalize.d.ts +11 -0
  167. package/dist/lib/settings/normalize.d.ts.map +1 -0
  168. package/dist/lib/settings/normalize.js +47 -0
  169. package/dist/lib/settings/style.css.d.ts +4 -0
  170. package/dist/lib/settings/style.css.d.ts.map +1 -0
  171. package/{lib → dist/lib}/settings/style.css.js +3 -4
  172. package/dist/lib/settings/use-saved-settings.d.ts +9 -0
  173. package/dist/lib/settings/use-saved-settings.d.ts.map +1 -0
  174. package/dist/lib/settings/use-saved-settings.js +35 -0
  175. package/dist/lib/settings/use-settings-ui.d.ts +3 -0
  176. package/dist/lib/settings/use-settings-ui.d.ts.map +1 -0
  177. package/dist/lib/settings/use-settings-ui.js +78 -0
  178. package/dist/lib/settings/use-settings.d.ts +23 -0
  179. package/dist/lib/settings/use-settings.d.ts.map +1 -0
  180. package/dist/lib/settings/use-settings.js +26 -0
  181. package/dist/lib/use-canvas-width.d.ts +2 -0
  182. package/dist/lib/use-canvas-width.d.ts.map +1 -0
  183. package/dist/lib/use-canvas-width.js +8 -0
  184. package/dist/lib/use-dom-columns.d.ts +5 -0
  185. package/dist/lib/use-dom-columns.d.ts.map +1 -0
  186. package/dist/lib/use-dom-columns.js +127 -0
  187. package/dist/lib/use-fast-layout.d.ts +13 -0
  188. package/dist/lib/use-fast-layout.d.ts.map +1 -0
  189. package/dist/lib/use-fast-layout.js +47 -0
  190. package/dist/lib/use-footer.d.ts +10 -0
  191. package/dist/lib/use-footer.d.ts.map +1 -0
  192. package/dist/lib/use-footer.js +11 -0
  193. package/dist/lib/use-hash-state.d.ts +4 -0
  194. package/dist/lib/use-hash-state.d.ts.map +1 -0
  195. package/dist/lib/use-hash-state.js +32 -0
  196. package/dist/lib/use-header.d.ts +21 -0
  197. package/dist/lib/use-header.d.ts.map +1 -0
  198. package/dist/lib/use-header.js +38 -0
  199. package/dist/lib/use-layout.d.ts +7 -0
  200. package/dist/lib/use-layout.d.ts.map +1 -0
  201. package/dist/lib/use-layout.js +21 -0
  202. package/dist/lib/use-list.d.ts +31 -0
  203. package/dist/lib/use-list.d.ts.map +1 -0
  204. package/dist/lib/use-list.js +198 -0
  205. package/dist/lib/use-mini.d.ts +10 -0
  206. package/dist/lib/use-mini.d.ts.map +1 -0
  207. package/dist/lib/use-mini.js +19 -0
  208. package/dist/lib/use-omnitable.d.ts +37 -0
  209. package/dist/lib/use-omnitable.d.ts.map +1 -0
  210. package/dist/lib/use-omnitable.js +74 -0
  211. package/dist/lib/use-processed-items.d.ts +17 -0
  212. package/dist/lib/use-processed-items.d.ts.map +1 -0
  213. package/dist/lib/use-processed-items.js +151 -0
  214. package/dist/lib/use-public-interface.d.ts +7 -0
  215. package/dist/lib/use-public-interface.d.ts.map +1 -0
  216. package/dist/lib/use-public-interface.js +82 -0
  217. package/dist/lib/use-resizable-columns.d.ts +7 -0
  218. package/dist/lib/use-resizable-columns.d.ts.map +1 -0
  219. package/dist/lib/use-resizable-columns.js +38 -0
  220. package/dist/lib/use-sort-and-group-options.d.ts +26 -0
  221. package/dist/lib/use-sort-and-group-options.d.ts.map +1 -0
  222. package/dist/lib/use-sort-and-group-options.js +36 -0
  223. package/dist/lib/use-track-size.d.ts +2 -0
  224. package/dist/lib/use-track-size.d.ts.map +1 -0
  225. package/dist/lib/use-track-size.js +15 -0
  226. package/dist/lib/use-tween-array.d.ts +3 -0
  227. package/dist/lib/use-tween-array.d.ts.map +1 -0
  228. package/dist/lib/use-tween-array.js +50 -0
  229. package/dist/lib/utils-amount.d.ts +26 -0
  230. package/dist/lib/utils-amount.d.ts.map +1 -0
  231. package/dist/lib/utils-amount.js +99 -0
  232. package/dist/lib/utils-data.d.ts +8 -0
  233. package/dist/lib/utils-data.d.ts.map +1 -0
  234. package/dist/lib/utils-data.js +28 -0
  235. package/dist/lib/utils-date.d.ts +25 -0
  236. package/dist/lib/utils-date.d.ts.map +1 -0
  237. package/dist/lib/utils-date.js +161 -0
  238. package/dist/lib/utils-datetime.d.ts +16 -0
  239. package/dist/lib/utils-datetime.d.ts.map +1 -0
  240. package/dist/lib/utils-datetime.js +52 -0
  241. package/dist/lib/utils-number.d.ts +19 -0
  242. package/dist/lib/utils-number.d.ts.map +1 -0
  243. package/dist/lib/utils-number.js +87 -0
  244. package/dist/lib/utils-time.d.ts +17 -0
  245. package/dist/lib/utils-time.d.ts.map +1 -0
  246. package/dist/lib/utils-time.js +88 -0
  247. package/dist/lib/utils.d.ts +3 -0
  248. package/dist/lib/utils.d.ts.map +1 -0
  249. package/dist/lib/utils.js +14 -0
  250. package/dist/ui-helpers/cosmoz-clear-button.d.ts +2 -0
  251. package/dist/ui-helpers/cosmoz-clear-button.d.ts.map +1 -0
  252. package/{ui-helpers → dist/ui-helpers}/cosmoz-clear-button.js +3 -5
  253. package/package.json +38 -8
  254. package/cosmoz-omnitable-column-amount.js +0 -162
  255. package/cosmoz-omnitable-column-autocomplete.js +0 -113
  256. package/cosmoz-omnitable-column-boolean.js +0 -168
  257. package/cosmoz-omnitable-column-date.js +0 -133
  258. package/cosmoz-omnitable-column-datetime.js +0 -145
  259. package/cosmoz-omnitable-column-list-data.js +0 -141
  260. package/cosmoz-omnitable-column-list-mixin.js +0 -198
  261. package/cosmoz-omnitable-column-mixin.js +0 -149
  262. package/cosmoz-omnitable-column-number.js +0 -157
  263. package/cosmoz-omnitable-column-time.js +0 -137
  264. package/cosmoz-omnitable-column.js +0 -99
  265. package/cosmoz-omnitable-group-row.js +0 -20
  266. package/cosmoz-omnitable-item-row.js +0 -38
  267. package/grouped-list/cosmoz-grouped-list-row.js +0 -41
  268. package/grouped-list/cosmoz-grouped-list.js +0 -13
  269. package/grouped-list/use-collapsible-items.js +0 -32
  270. package/grouped-list/use-cosmoz-grouped-list.js +0 -102
  271. package/grouped-list/use-selected-items.js +0 -140
  272. package/grouped-list/use-weak-state.js +0 -21
  273. package/grouped-list/utils.js +0 -89
  274. package/lib/compute-layout.js +0 -74
  275. package/lib/cosmoz-omnitable-amount-range-input.js +0 -353
  276. package/lib/cosmoz-omnitable-date-input-mixin.js +0 -182
  277. package/lib/cosmoz-omnitable-range-input-mixin.js +0 -451
  278. package/lib/cosmoz-omnitable-resize-nub.js +0 -41
  279. package/lib/cosmoz-omnitable-time-range-input.js +0 -154
  280. package/lib/generic-sorter.js +0 -35
  281. package/lib/layout.js +0 -61
  282. package/lib/polymer-haunted-render-mixin.js +0 -19
  283. package/lib/save-as-csv-action.js +0 -36
  284. package/lib/save-as-xlsx-action.js +0 -27
  285. package/lib/settings/cosmoz-omnitable-sort-group.js +0 -74
  286. package/lib/settings/drivers/context.js +0 -16
  287. package/lib/settings/drivers/local.js +0 -29
  288. package/lib/settings/drivers/remote.js +0 -22
  289. package/lib/settings/normalize.js +0 -76
  290. package/lib/settings/use-saved-settings.js +0 -43
  291. package/lib/settings/use-settings-ui.js +0 -125
  292. package/lib/settings/use-settings.js +0 -53
  293. package/lib/use-canvas-width.js +0 -12
  294. package/lib/use-dom-columns.js +0 -166
  295. package/lib/use-fast-layout.js +0 -73
  296. package/lib/use-footer.js +0 -16
  297. package/lib/use-hash-state.js +0 -71
  298. package/lib/use-header.js +0 -71
  299. package/lib/use-layout.js +0 -32
  300. package/lib/use-list.js +0 -263
  301. package/lib/use-mini.js +0 -30
  302. package/lib/use-omnitable.js +0 -99
  303. package/lib/use-processed-items.js +0 -254
  304. package/lib/use-public-interface.js +0 -107
  305. package/lib/use-resizable-columns.js +0 -63
  306. package/lib/use-sort-and-group-options.js +0 -95
  307. package/lib/use-track-size.js +0 -23
  308. package/lib/use-tween-array.js +0 -60
  309. package/lib/utils-amount.js +0 -131
  310. package/lib/utils-data.js +0 -42
  311. package/lib/utils-date.js +0 -194
  312. package/lib/utils-datetime.js +0 -66
  313. package/lib/utils-number.js +0 -111
  314. package/lib/utils-time.js +0 -112
  315. package/lib/utils.js +0 -17
@@ -1,140 +0,0 @@
1
- import { useCallback, useEffect, useState } from '@pionjs/pion';
2
- import { isGroup } from './utils';
3
-
4
- export const useSelectedItems = ({
5
- initial,
6
- compareItemsFn,
7
- data,
8
- flatData,
9
- }) => {
10
- const [selectedItems, setSelectedItems] = useState(initial),
11
- [lastSelection, setLastSelection] = useState(),
12
- /**
13
- * Check if item is selected.
14
- * @param {object} item Item.
15
- * @returns {boolean} Whether item is selected.
16
- */
17
- isItemSelected = useCallback(
18
- (item) => selectedItems.includes(item),
19
- [selectedItems],
20
- ),
21
- /**
22
- * Check if group is selected.
23
- * @param {object} group Group.
24
- * @returns {boolean} Whether group is selected.
25
- */
26
- isGroupSelected = useCallback(
27
- (group) => group?.items?.every(isItemSelected),
28
- [isItemSelected],
29
- ),
30
- /**
31
- * Check if item.group is selected.
32
- * @param {object} item Item.
33
- * @returns {boolean} Whether item is selected.
34
- */
35
- isSelected = useCallback(
36
- (item) => isItemSelected(item) || isGroupSelected(item),
37
- [isItemSelected, isGroupSelected],
38
- ),
39
- /**
40
- * Add an item/group to the list of selected items.
41
- * @param {object} item Item to select.
42
- * @returns {void}
43
- */
44
- select = useCallback((item) => {
45
- const items = item.items ?? [item];
46
- setSelectedItems((selection) => [
47
- ...selection,
48
- ...items.filter((i) => !selection.includes(i)),
49
- ]);
50
- setLastSelection(item);
51
- }, []),
52
- /**
53
- * Removes an item/group from the list of selected items.
54
- * @param {object} item Item to select.
55
- * @returns {void}
56
- */
57
- deselect = useCallback((item) => {
58
- const items = item.items ?? [item];
59
- setSelectedItems((selection) =>
60
- selection.filter((i) => !items.includes(i)),
61
- );
62
- setLastSelection(item);
63
- }, []),
64
- selectOnly = useCallback((item) => {
65
- setSelectedItems(item.items?.slice() || [item]);
66
- setLastSelection(item);
67
- }, []),
68
- /**
69
- * Select all items.
70
- * @returns {void}
71
- */
72
- selectAll = useCallback(() => {
73
- setSelectedItems(data.flatMap((item) => item.items || item));
74
- setLastSelection(undefined);
75
- }, [data]),
76
- /**
77
- * Deselect all selected items.
78
- * @returns {void}
79
- */
80
- deselectAll = useCallback(() => {
81
- setSelectedItems([]);
82
- setLastSelection(undefined);
83
- }, []),
84
- /**
85
- * Toggles the selection of an item/group.
86
- * @param {object} item Item to select.
87
- * @param {boolean=} selected Select or deselect, fallback to toggling.
88
- * @returns {void}
89
- */
90
- toggleSelect = useCallback(
91
- (item, selected = !isSelected(item)) =>
92
- selected ? select(item) : deselect(item),
93
- [isSelected],
94
- ),
95
- toggleSelectTo = useCallback(
96
- (item, selected) => {
97
- const last = lastSelection
98
- ? flatData.findIndex((i) => compareItemsFn(i, lastSelection))
99
- : -1;
100
- if (last < 0) {
101
- return toggleSelect(item, selected);
102
- }
103
- const [from, to] = [last, flatData.indexOf(item)].sort((a, b) => a - b);
104
- flatData.slice(from, to + 1).forEach((item, i, items) => {
105
- if (i > 0 && i < items.length - 1 && isGroup(item)) {
106
- return;
107
- }
108
- toggleSelect(item, selected);
109
- });
110
- setLastSelection(item);
111
- },
112
- [flatData, compareItemsFn, toggleSelect],
113
- );
114
-
115
- // keep selected items across data updates
116
- useEffect(
117
- () =>
118
- setSelectedItems((selectedItems) =>
119
- selectedItems.length > 0
120
- ? flatData.filter((i) =>
121
- selectedItems.find((item) => compareItemsFn(i, item)),
122
- )
123
- : selectedItems,
124
- ),
125
- [flatData],
126
- );
127
- return {
128
- selectedItems,
129
- isItemSelected,
130
- isGroupSelected,
131
- isSelected,
132
- select,
133
- deselect,
134
- selectOnly,
135
- selectAll,
136
- deselectAll,
137
- toggleSelect,
138
- toggleSelectTo,
139
- };
140
- };
@@ -1,21 +0,0 @@
1
- import { useCallback, useState } from '@pionjs/pion';
2
- import { callFn, getItemState } from './utils';
3
-
4
- export const useWeakState = () => {
5
- const [wrapper, setState] = useState(() => [new WeakMap()]),
6
- setItemState = useCallback(
7
- (item, newItemState) =>
8
- setState(([state]) => {
9
- const itemState = getItemState(item, state);
10
- Object.assign(itemState, callFn(newItemState, itemState));
11
- return [state];
12
- }),
13
- [],
14
- );
15
-
16
- return {
17
- setItemState,
18
- state: wrapper[0],
19
- signal: wrapper,
20
- };
21
- };
@@ -1,89 +0,0 @@
1
- const symbols = {
2
- group: Symbol('group'),
3
- },
4
- getItemState = (item, itemsState) => {
5
- if (!itemsState.has(item)) {
6
- itemsState.set(item, {});
7
- }
8
-
9
- return itemsState.get(item);
10
- },
11
- isExpanded = (item, itemsState) =>
12
- Boolean(getItemState(item, itemsState).expanded),
13
- isFolded = (group, itemsState) =>
14
- Boolean(getItemState(group, itemsState).folded),
15
- isGroup = (item) => (item ? item.items instanceof Array : false),
16
- /**
17
- * Asserts that data is either all items or all groups, never mixed.
18
- * @param {Array} data the data
19
- * @return {void}
20
- */
21
- _assertDataIsHomogeneous = (data) => {
22
- if (!Array.isArray(data) || data.length === 0) {
23
- return;
24
- }
25
-
26
- const firstItemIsAGroup = Array.isArray(data[0].items),
27
- isHomogeneous = data.every(
28
- (group) => Array.isArray(group.items) === firstItemIsAGroup,
29
- );
30
-
31
- if (!isHomogeneous) {
32
- throw new Error('Data must be homogeneous.');
33
- }
34
- },
35
- /**
36
- * Prepare data.
37
- * @param {array} data Data.
38
- * @param {boolean} displayEmptyGroups Flag.
39
- * @param {WeakMap} itemsState State.
40
- * @returns {void|array} Prepared data.
41
- */
42
- prepareData = (data, displayEmptyGroups, itemsState) => {
43
- if (!Array.isArray(data)) {
44
- return;
45
- }
46
-
47
- // data should be either all items or all grouped items, never mixed
48
- _assertDataIsHomogeneous(data);
49
-
50
- const flatData = data.reduce((acc, item) => {
51
- // simple items
52
- if (!item.items) {
53
- return acc.concat(item);
54
- }
55
-
56
- // groups with items
57
- if (item.items.length) {
58
- if (getItemState(item, itemsState).folded) {
59
- return acc.concat(item);
60
- }
61
- return acc.concat(
62
- item,
63
- item.items.map((i) => Object.assign(i, { [symbols.group]: item })),
64
- );
65
- }
66
-
67
- // groups without items
68
- if (displayEmptyGroups) {
69
- return acc.concat(item);
70
- }
71
-
72
- return acc;
73
- }, []);
74
-
75
- return flatData;
76
- },
77
- callFn = (fn, ...args) => (typeof fn === 'function' ? fn(...args) : fn),
78
- byReference = (a, b) => a === b;
79
-
80
- export {
81
- symbols,
82
- prepareData,
83
- getItemState,
84
- isExpanded,
85
- isFolded,
86
- isGroup,
87
- callFn,
88
- byReference,
89
- };
@@ -1,74 +0,0 @@
1
- import { layout } from './layout';
2
- import { findLastIndex } from './utils';
3
-
4
- const _toCss = (layout, config) => {
5
- const lastVisibleIndex = findLastIndex(
6
- layout,
7
- (width) => width != null && width > 0,
8
- ),
9
- generateCellCSS = (itemName, width) =>
10
- `.cell[name="${itemName}"], cosmoz-omnitable-skeleton::part(cell-${itemName}){width: ${Math.floor(
11
- width,
12
- )}px;padding: 0 min(3px, ${width / 2}px)}`,
13
- hideResizeNub = (itemName) =>
14
- `cosmoz-omnitable-resize-nub[name="${itemName}"]{display:none}`,
15
- hideColumn = (itemName) =>
16
- `cosmoz-omnitable-resize-nub[name="${itemName}"], .cell[name="${itemName}"]{display:none}`;
17
-
18
- return config
19
- .map((item, index) => {
20
- const width = layout[index];
21
-
22
- // Hidden columns
23
- if (width == null || width === 0) {
24
- return hideColumn(item.name);
25
- }
26
-
27
- // All visible columns
28
- const cellCSS = generateCellCSS(item.name, width);
29
-
30
- // Last visible column, show cell but hide its resize nub
31
- if (index === lastVisibleIndex) {
32
- return `${cellCSS}\n${hideResizeNub(item.name)}`;
33
- }
34
-
35
- // Other visible columns just show the cell
36
- return cellCSS;
37
- })
38
- .join('\n');
39
- };
40
-
41
- export const computeLayout = (_columnConfigs, canvasWidth, numColumns) => {
42
- const columnConfigs = _columnConfigs.filter((c) => !c.hidden),
43
- totalWidths = columnConfigs.reduce((sum, { width }) => sum + width, 0);
44
-
45
- if (columnConfigs.length > 1 && totalWidths > canvasWidth) {
46
- // drop a column
47
- return computeLayout(columnConfigs.slice(1), canvasWidth, numColumns);
48
- }
49
-
50
- // calculate the index of the last visible column, the one that needs to flex,
51
- // as the column configs might now be in a different order than displayed
52
- // due to priority settings
53
- const lastColumnIndex = columnConfigs.reduce(
54
- ([max, maxIndex], column, index) => [
55
- Math.max(max, column.index),
56
- column.index > max ? index : maxIndex,
57
- ],
58
- [-1, -1],
59
- )[1];
60
-
61
- // force the last visible column to flex
62
- if (lastColumnIndex !== -1) {
63
- columnConfigs[lastColumnIndex].flex = 1;
64
- }
65
-
66
- const widths = layout(columnConfigs, canvasWidth);
67
-
68
- return widths.reduce((sorted, width, i) => {
69
- sorted[columnConfigs[i].index] = width;
70
- return sorted;
71
- }, new Array(numColumns).fill(undefined));
72
- },
73
- toCss = (layout, config) =>
74
- layout.length === 0 ? '.cell {display: none;}' : _toCss(layout, config);
@@ -1,353 +0,0 @@
1
- import { _ } from '@neovici/cosmoz-i18next';
2
- import { PolymerElement } from '@polymer/polymer';
3
- import { html } from 'lit-html';
4
- import { ifDefined } from 'lit-html/directives/if-defined.js';
5
- import '@neovici/cosmoz-input';
6
- import { rangeInputMixin } from './cosmoz-omnitable-range-input-mixin';
7
- import { polymerHauntedRender } from './polymer-haunted-render-mixin';
8
-
9
- class AmountRangeInput extends rangeInputMixin(
10
- polymerHauntedRender(PolymerElement),
11
- ) {
12
- static get properties() {
13
- return {
14
- /**
15
- * Base Currency used in filters
16
- */
17
- currency: { type: String },
18
-
19
- /**
20
- * If this is set true then currency property will be the currency with highest occurrence in values
21
- */
22
- autodetect: { type: Boolean, value: false },
23
-
24
- /**
25
- * Exchange rates of currencies. Example: {"EUR": 1, "USD":0.8169982616, "AUD":0.6529827192, "SEK": 0.1019271438}'
26
- * Default exchange rate is 1 and it is used for every currency that is present on column values but missing from exchange rates object.
27
- */
28
- rates: { type: Object },
29
- // trigger filter updates manually
30
- autoupdate: { type: String, value: false },
31
- _filterText: {
32
- type: String,
33
- computed: '_computeFilterText(filter.*, _formatters)',
34
- },
35
- };
36
- }
37
-
38
- static get observers() {
39
- return ['_valuesChanged(autodetect, currency, values)'];
40
- }
41
-
42
- render() {
43
- const onOpenedChanged = (event) => {
44
- this.headerFocused = event.detail.value;
45
- this._onDropdownOpenedChanged(event);
46
- };
47
-
48
- return html`
49
- <style>
50
- paper-dropdown-menu {
51
- --iron-icon-width: 0;
52
- display: block;
53
- text-align: right;
54
- }
55
-
56
- .dropdown-content h3 {
57
- font-weight: 500;
58
- font-size: 13px;
59
- margin: 0;
60
- font-family: var(
61
- --cosmoz-input-font-family,
62
- var(--paper-font-subhead_-_font-family, 'Inter', sans-serif)
63
- );
64
- }
65
-
66
- .dropdown-content {
67
- padding: 10px 10px 10px 10px;
68
- min-width: 150px;
69
- text-align: left;
70
- background: var(--cosmoz-omnitable-amount-input-background, #ffffff);
71
- border-radius: 6px;
72
- backdrop-filter: blur(16px) saturate(180%);
73
- -webkit-backdrop-filter: blur(16px) saturate(180%);
74
- box-shadow:
75
- 0 4px 24px 0 rgba(0, 0, 0, 0.18),
76
- 0 1.5px 6px 0 rgba(0, 0, 0, 0.1);
77
- }
78
-
79
- cosmoz-input[type='number'] {
80
- background: var(--cosmoz-omnitable-amount-input-background, #ffffff);
81
- border-radius: 6px;
82
- border: 1px solid #d1d1d6;
83
- box-shadow: 0 1px 2px 0 rgba(60, 60, 60, 0.04);
84
- padding: 2px 8px;
85
- margin-bottom: 6px;
86
- min-height: 28px;
87
- transition:
88
- border-color 0.2s,
89
- box-shadow 0.2s;
90
- }
91
-
92
- cosmoz-input[type='number']:focus-within {
93
- border-color: var(--cz-accent-color, #007aff);
94
- box-shadow: 0 0 0 1px rgba(0, 122, 255, 0.15);
95
- background: var(--cosmoz-omnitable-amount-input-background, #ffffff);
96
- }
97
- </style>
98
- <cosmoz-clear-button
99
- @click=${() => this.resetFilter()}
100
- ?visible=${this.hasFilter()}
101
- ></cosmoz-clear-button>
102
- <paper-dropdown-menu
103
- label=${this.title}
104
- placeholder=${ifDefined(this._filterText)}
105
- class="external-values-${this.externalValues}"
106
- title=${this._tooltip}
107
- horizontal-align="right"
108
- ?opened=${this.headerFocused}
109
- @opened-changed=${onOpenedChanged}
110
- >
111
- <div class="dropdown-content" slot="dropdown-content">
112
- <h3 style="margin: 0;">${this.title}</h3>
113
- <cosmoz-input
114
- class=${this._fromClasses}
115
- type="number"
116
- title=${_('Minimum amount')}
117
- label=${_('Min amount')}
118
- .value=${this._filterInput?.min}
119
- @value-changed=${(event) => {
120
- this.set('_filterInput.min', event.detail.value);
121
- }}
122
- @blur=${(event) => this._onBlur(event)}
123
- @keydown=${(event) => this._onKeyDown(event)}
124
- min=${this._toInputStringAmount(this._limit.fromMin)}
125
- max=${this._toInputStringAmount(this._limit.fromMax)}
126
- >
127
- <div slot="suffix" suffix>${this.filter?.min?.currency}</div>
128
- </cosmoz-input>
129
- <cosmoz-input
130
- class=${this._toClasses}
131
- type="number"
132
- title=${_('Maximum amount')}
133
- label=${_('Max amount')}
134
- .value=${this._filterInput?.max}
135
- @value-changed=${(event) => {
136
- this.set('_filterInput.max', event.detail.value);
137
- }}
138
- @blur=${(event) => this._onBlur(event)}
139
- @keydown=${(event) => this._onKeyDown(event)}
140
- min=${this._toInputStringAmount(this._limit.toMin)}
141
- max=${this._toInputStringAmount(this._limit.toMax)}
142
- >
143
- <div slot="suffix" suffix>${this.filter?.max?.currency}</div>
144
- </cosmoz-input>
145
- </div>
146
- </paper-dropdown-menu>
147
- `;
148
- }
149
-
150
- /**
151
- * Auto-detect currency property: Most frequently occurring currency
152
- * @param {boolean} autodetect Whether the currency property will be the currency with highest occurrence in values or not.
153
- * @param {string} currency Base currency used in filters.
154
- * @param {Array} values Array of amounts
155
- * @returns {void}
156
- */
157
- _valuesChanged(autodetect, currency, values) {
158
- if (!Array.isArray(values) || values.length < 1) {
159
- return;
160
- }
161
- if (!autodetect && currency) {
162
- return;
163
- }
164
- // array with currencies as keys and occurence as value
165
- const currencies = values.reduce((p, n) => {
166
- if (n.currency) {
167
- const c = n.currency;
168
- p[c] = (p[c] || 0) + 1;
169
- }
170
- return p;
171
- }, {});
172
-
173
- let key = Object.keys(currencies)[0];
174
- Object.keys(currencies).reduce((p, n) => {
175
- const max = Math.max(p, currencies[n]);
176
- if (max === currencies[n]) {
177
- key = n;
178
- }
179
- return max;
180
- }, 0);
181
- this.set('currency', key);
182
- }
183
-
184
- /**
185
- * Converts a value to an amount object optionaly limiting it.
186
- *
187
- * @param {Object} value The value to convert to number
188
- * @param {Object} limit The value used to limit the number
189
- * @param {Function} limitFunc The function used to limit the number (Math.min|Math.max)
190
- * @returns {Object|void} Value converted to Number or void
191
- */
192
- toAmount(value, limit, limitFunc) {
193
- if (value == null || value === '') {
194
- return;
195
- }
196
-
197
- if (
198
- typeof value !== 'object' ||
199
- value.currency == null ||
200
- value.currency === ''
201
- ) {
202
- return null;
203
- }
204
-
205
- const number = this.toNumber(value.amount);
206
- if (number == null || Number.isNaN(number)) {
207
- return null;
208
- }
209
- const amount = { currency: value.currency, amount: number };
210
-
211
- if (limitFunc == null || limit == null) {
212
- return amount;
213
- }
214
- const lAmount = this.toAmount(limit);
215
- if (lAmount == null) {
216
- return amount;
217
- }
218
-
219
- // calculate value and limit amounts with rates
220
- const rates = this.rates || {},
221
- valAmount = amount.amount * (rates[amount.currency] || 1),
222
- limAmount = lAmount.amount * (rates[lAmount.currency] || 1),
223
- lNumber = this.toNumber(valAmount, limAmount, limitFunc);
224
- return lNumber === valAmount ? amount : lAmount;
225
- }
226
-
227
- toValue() {
228
- return this.toAmount.apply(this, arguments);
229
- }
230
-
231
- /**
232
- * Get the comparable value of an item.
233
- *
234
- * @param {Object} item Item to be processed
235
- * @param {String} valuePath Property path
236
- * @returns {Number|void} Valid value or void
237
- */
238
- getComparableValue(item, valuePath) {
239
- const value = super.getComparableValue(item, valuePath);
240
-
241
- if (value == null) {
242
- return;
243
- }
244
- const amount = this.toNumber(value.amount),
245
- rates = this.rates;
246
-
247
- if (rates == null) {
248
- return amount;
249
- }
250
-
251
- return amount * (rates[value.currency] || 1);
252
- }
253
- getString(item, valuePath = this.valuePath) {
254
- const value = this.toValue(this.get(valuePath, item));
255
- if (value === undefined) {
256
- return '';
257
- }
258
- if (value === null) {
259
- return 'Invalid value';
260
- }
261
- return this.renderValue(value);
262
- }
263
-
264
- getCurrency(item, valuePath) {
265
- const value = this.get(valuePath, item);
266
- return value && value.currency;
267
- }
268
-
269
- getFormatter(currency, locale) {
270
- const id = locale ? locale : '',
271
- key = currency + id || '',
272
- formatters = (this._formatters = this._formatters || {});
273
- if (formatters[key]) {
274
- return formatters[key];
275
- }
276
-
277
- formatters[key] = new Intl.NumberFormat(locale || undefined, {
278
- style: 'currency',
279
- currency,
280
- });
281
-
282
- return formatters[key];
283
- }
284
- /**
285
- * Converts an amount to symbol and value to be rendered.
286
- *
287
- * @param {Object} value Amount to be formated
288
- * @param {Object} _formatters = this._formatters All possible formatters.
289
- * @returns {String} Formated value or empty string.
290
- */
291
- renderValue(value) {
292
- const amount = this.toAmount(value);
293
- if (amount == null) {
294
- return '';
295
- }
296
- return this.getFormatter(amount.currency, this.locale).format(value.amount);
297
- }
298
-
299
- _amountValueChanged(event) {
300
- const input = event.target,
301
- value = input.value,
302
- item = event.model.item,
303
- originalValue = this.get(this.valuePath, item),
304
- amountValue = Number(value),
305
- newValue = { amount: amountValue, currency: originalValue.currency };
306
-
307
- this.set(this.valuePath, newValue, item);
308
- this._fireItemChangeEvent(
309
- item,
310
- this.valuePath,
311
- originalValue,
312
- this.renderValue.bind(this),
313
- );
314
- }
315
-
316
- _toInputString(value) {
317
- const amount = this.toValue(value);
318
- if (amount == null) {
319
- return null; //Need null to clear input
320
- }
321
- return this.toNumber(amount.amount);
322
- }
323
-
324
- _toInputStringAmount(value) {
325
- const rates = this.rates;
326
- if (rates == null) {
327
- return this._toInputString(value);
328
- }
329
- const amount = this.toValue(value);
330
- if (amount == null) {
331
- return null;
332
- }
333
- const toCurrency =
334
- (this.toNumber(amount.amount) * (rates[amount.currency] || 1)) /
335
- (rates[this.currency] || 1);
336
- return toCurrency.toFixed(2);
337
- }
338
-
339
- _fromInputString(value, property) {
340
- const number = this.toNumber(value);
341
- if (number == null) {
342
- return;
343
- }
344
- return this.toValue({
345
- amount: number,
346
- currency:
347
- (property && this.get(['filter', property, 'currency'])) ||
348
- this.currency,
349
- });
350
- }
351
- }
352
-
353
- customElements.define('cosmoz-omnitable-amount-range-input', AmountRangeInput);