@revolist/revogrid 4.9.13 → 4.9.17

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 (196) hide show
  1. package/dist/cjs/{column.drag.plugin-e636b5af.js → column.drag.plugin-9841e68f.js} +108 -188
  2. package/dist/cjs/column.drag.plugin-9841e68f.js.map +1 -0
  3. package/dist/cjs/{column.service-15c8352d.js → column.service-2471e4f3.js} +159 -25
  4. package/dist/cjs/column.service-2471e4f3.js.map +1 -0
  5. package/dist/cjs/{edit.utils-1172677c.js → edit.utils-eef92df0.js} +2 -2
  6. package/dist/cjs/{edit.utils-1172677c.js.map → edit.utils-eef92df0.js.map} +1 -1
  7. package/dist/cjs/{header-cell-renderer-375a879f.js → header-cell-renderer-751067c0.js} +14 -14
  8. package/dist/cjs/header-cell-renderer-751067c0.js.map +1 -0
  9. package/dist/cjs/{index-28b6fdfb.js → index-8bceed03.js} +1 -2
  10. package/dist/cjs/index-8bceed03.js.map +1 -0
  11. package/dist/cjs/index.cjs.js +19 -17
  12. package/dist/cjs/index.cjs.js.map +1 -1
  13. package/dist/cjs/{key.utils-c62ab1e1.js → key.utils-f548f37c.js} +2 -2
  14. package/dist/cjs/{key.utils-c62ab1e1.js.map → key.utils-f548f37c.js.map} +1 -1
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/cjs/revo-grid.cjs.entry.js +33 -94
  17. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  18. package/dist/cjs/revo-grid.cjs.js +1 -1
  19. package/dist/cjs/revogr-attribution_6.cjs.entry.js +6 -6
  20. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +4 -4
  21. package/dist/cjs/revogr-data_4.cjs.entry.js +16 -15
  22. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  23. package/dist/cjs/revogr-filter-panel.cjs.entry.js +17 -10
  24. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
  25. package/dist/cjs/{row-header-utils-22ffee54.js → row-header-utils-5d0d3fab.js} +2 -2
  26. package/dist/cjs/{row-header-utils-22ffee54.js.map → row-header-utils-5d0d3fab.js.map} +1 -1
  27. package/dist/cjs/{text-editor-91a9f5b5.js → text-editor-f066d388.js} +3 -3
  28. package/dist/cjs/{text-editor-91a9f5b5.js.map → text-editor-f066d388.js.map} +1 -1
  29. package/dist/cjs/{throttle-5da5df51.js → throttle-216690f1.js} +2 -2
  30. package/dist/cjs/{throttle-5da5df51.js.map → throttle-216690f1.js.map} +1 -1
  31. package/dist/collection/collection-manifest.json +2 -2
  32. package/dist/collection/components/data/cell-renderer.js +2 -2
  33. package/dist/collection/components/data/cell-renderer.js.map +1 -1
  34. package/dist/collection/components/data/column.service.js +22 -24
  35. package/dist/collection/components/data/column.service.js.map +1 -1
  36. package/dist/collection/components/data/revogr-data.js +7 -6
  37. package/dist/collection/components/data/revogr-data.js.map +1 -1
  38. package/dist/collection/components/header/header-cell-renderer.js +5 -4
  39. package/dist/collection/components/header/header-cell-renderer.js.map +1 -1
  40. package/dist/collection/components/header/header-renderer.js +2 -2
  41. package/dist/collection/components/header/header-renderer.js.map +1 -1
  42. package/dist/collection/components/header/resizable.directive.js.map +1 -1
  43. package/dist/collection/components/header/resizable.element.js +9 -10
  44. package/dist/collection/components/header/resizable.element.js.map +1 -1
  45. package/dist/collection/components/header/revogr-header.js +3 -3
  46. package/dist/collection/components/header/revogr-header.js.map +1 -1
  47. package/dist/collection/components/revoGrid/revo-grid.js +6 -6
  48. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  49. package/dist/collection/global/global.js +2 -2
  50. package/dist/collection/global/global.js.map +1 -1
  51. package/dist/collection/plugins/filter/{filter.service.js → filter.indexed.js} +18 -18
  52. package/dist/collection/plugins/filter/filter.indexed.js.map +1 -0
  53. package/dist/collection/plugins/filter/filter.panel.js +32 -46
  54. package/dist/collection/plugins/filter/filter.panel.js.map +1 -1
  55. package/dist/collection/plugins/filter/filter.plugin.js +86 -40
  56. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  57. package/dist/collection/plugins/filter/filter.types.js.map +1 -1
  58. package/dist/collection/plugins/wcag/index.js +7 -1
  59. package/dist/collection/plugins/wcag/index.js.map +1 -1
  60. package/dist/collection/serve/controller.js +1 -1
  61. package/dist/collection/serve/data.js +8 -0
  62. package/dist/collection/services/column.data.provider.js +6 -5
  63. package/dist/collection/services/column.data.provider.js.map +1 -1
  64. package/dist/collection/themeManager/theme.compact.js +1 -1
  65. package/dist/collection/themeManager/theme.compact.js.map +1 -1
  66. package/dist/collection/themeManager/theme.default.js +1 -1
  67. package/dist/collection/themeManager/theme.default.js.map +1 -1
  68. package/dist/collection/themeManager/theme.material.js +1 -1
  69. package/dist/collection/themeManager/theme.material.js.map +1 -1
  70. package/dist/collection/themeManager/theme.service.js +9 -9
  71. package/dist/collection/themeManager/theme.service.js.map +1 -1
  72. package/dist/collection/types/interfaces.js.map +1 -1
  73. package/dist/collection/utils/column.utils.js +10 -0
  74. package/dist/collection/utils/column.utils.js.map +1 -1
  75. package/dist/esm/{column.drag.plugin-30dc4e24.js → column.drag.plugin-c9787a50.js} +107 -181
  76. package/dist/esm/column.drag.plugin-c9787a50.js.map +1 -0
  77. package/dist/esm/{column.service-414e9cba.js → column.service-a6682d9d.js} +153 -26
  78. package/dist/esm/column.service-a6682d9d.js.map +1 -0
  79. package/dist/esm/{edit.utils-0666e5bd.js → edit.utils-c358c970.js} +2 -2
  80. package/dist/esm/{edit.utils-0666e5bd.js.map → edit.utils-c358c970.js.map} +1 -1
  81. package/dist/esm/{header-cell-renderer-ca570fcf.js → header-cell-renderer-52d9d6ba.js} +14 -14
  82. package/dist/esm/header-cell-renderer-52d9d6ba.js.map +1 -0
  83. package/dist/esm/{index-74b9801b.js → index-6c437a0d.js} +2 -2
  84. package/dist/esm/index-6c437a0d.js.map +1 -0
  85. package/dist/esm/index.js +7 -7
  86. package/dist/esm/{key.utils-d3df5db8.js → key.utils-5a827d12.js} +2 -2
  87. package/dist/esm/{key.utils-d3df5db8.js.map → key.utils-5a827d12.js.map} +1 -1
  88. package/dist/esm/loader.js +1 -1
  89. package/dist/esm/revo-grid.entry.js +26 -87
  90. package/dist/esm/revo-grid.entry.js.map +1 -1
  91. package/dist/esm/revo-grid.js +1 -1
  92. package/dist/esm/revogr-attribution_6.entry.js +6 -6
  93. package/dist/esm/revogr-clipboard_3.entry.js +4 -4
  94. package/dist/esm/revogr-data_4.entry.js +16 -15
  95. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  96. package/dist/esm/revogr-filter-panel.entry.js +17 -10
  97. package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
  98. package/dist/esm/{row-header-utils-c7e3e2d5.js → row-header-utils-f5b04d1a.js} +2 -2
  99. package/dist/esm/{row-header-utils-c7e3e2d5.js.map → row-header-utils-f5b04d1a.js.map} +1 -1
  100. package/dist/esm/{text-editor-96d69516.js → text-editor-79a617b5.js} +3 -3
  101. package/dist/esm/{text-editor-96d69516.js.map → text-editor-79a617b5.js.map} +1 -1
  102. package/dist/esm/{throttle-262c3ed2.js → throttle-b94844de.js} +2 -2
  103. package/dist/esm/{throttle-262c3ed2.js.map → throttle-b94844de.js.map} +1 -1
  104. package/dist/revo-grid/column.drag.plugin-c9787a50.js +5 -0
  105. package/dist/revo-grid/column.drag.plugin-c9787a50.js.map +1 -0
  106. package/dist/revo-grid/column.service-a6682d9d.js +5 -0
  107. package/dist/revo-grid/column.service-a6682d9d.js.map +1 -0
  108. package/dist/revo-grid/{edit.utils-0666e5bd.js → edit.utils-c358c970.js} +2 -2
  109. package/dist/revo-grid/{header-cell-renderer-ca570fcf.js → header-cell-renderer-52d9d6ba.js} +2 -2
  110. package/dist/revo-grid/header-cell-renderer-52d9d6ba.js.map +1 -0
  111. package/dist/revo-grid/{index-74b9801b.js → index-6c437a0d.js} +2 -2
  112. package/dist/revo-grid/index.esm.js +1 -1
  113. package/dist/revo-grid/{key.utils-d3df5db8.js → key.utils-5a827d12.js} +2 -2
  114. package/dist/revo-grid/revo-grid.entry.js +1 -1
  115. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  116. package/dist/revo-grid/revo-grid.esm.js +1 -1
  117. package/dist/revo-grid/revo-grid.esm.js.map +1 -1
  118. package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
  119. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  120. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  121. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  122. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  123. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
  124. package/dist/revo-grid/{row-header-utils-c7e3e2d5.js → row-header-utils-f5b04d1a.js} +2 -2
  125. package/dist/revo-grid/{text-editor-96d69516.js → text-editor-79a617b5.js} +2 -2
  126. package/dist/revo-grid/{throttle-262c3ed2.js → throttle-b94844de.js} +2 -2
  127. package/dist/types/components/data/column.service.d.ts +1 -2
  128. package/dist/types/components/header/header-cell-renderer.d.ts +7 -9
  129. package/dist/types/components/header/header-renderer.d.ts +2 -3
  130. package/dist/types/components/header/resizable.directive.d.ts +0 -1
  131. package/dist/types/components/header/resizable.element.d.ts +3 -2
  132. package/dist/types/components/revoGrid/revo-grid.d.ts +1 -1
  133. package/dist/types/components.d.ts +2 -8
  134. package/dist/types/plugins/filter/{filter.service.d.ts → filter.indexed.d.ts} +2 -2
  135. package/dist/types/plugins/filter/filter.panel.d.ts +3 -27
  136. package/dist/types/plugins/filter/filter.plugin.d.ts +14 -47
  137. package/dist/types/plugins/filter/filter.types.d.ts +86 -1
  138. package/dist/types/services/column.data.provider.d.ts +2 -1
  139. package/dist/types/themeManager/theme.compact.d.ts +1 -1
  140. package/dist/types/themeManager/theme.default.d.ts +1 -1
  141. package/dist/types/themeManager/theme.material.d.ts +1 -1
  142. package/dist/types/themeManager/theme.service.d.ts +2 -2
  143. package/dist/types/types/interfaces.d.ts +10 -12
  144. package/dist/types/utils/column.utils.d.ts +3 -1
  145. package/hydrate/index.js +786 -787
  146. package/hydrate/index.mjs +786 -787
  147. package/package.json +1 -1
  148. package/standalone/column.service.js +153 -25
  149. package/standalone/column.service.js.map +1 -1
  150. package/standalone/dimension.helpers.js +2 -216
  151. package/standalone/dimension.helpers.js.map +1 -1
  152. package/standalone/index.js +7 -6
  153. package/standalone/index.js.map +1 -1
  154. package/standalone/index2.js +2 -84
  155. package/standalone/index2.js.map +1 -1
  156. package/standalone/platform.js +89 -0
  157. package/standalone/platform.js.map +1 -0
  158. package/standalone/{data.store.js → reduce.js} +252 -38
  159. package/standalone/reduce.js.map +1 -0
  160. package/standalone/revo-grid.js +127 -261
  161. package/standalone/revo-grid.js.map +1 -1
  162. package/standalone/revogr-data2.js +10 -8
  163. package/standalone/revogr-data2.js.map +1 -1
  164. package/standalone/revogr-edit2.js +2 -1
  165. package/standalone/revogr-edit2.js.map +1 -1
  166. package/standalone/revogr-filter-panel.js +17 -11
  167. package/standalone/revogr-filter-panel.js.map +1 -1
  168. package/standalone/revogr-focus2.js +1 -1
  169. package/standalone/revogr-header2.js +20 -20
  170. package/standalone/revogr-header2.js.map +1 -1
  171. package/standalone/revogr-order-editor2.js +1 -1
  172. package/standalone/revogr-overlay-selection2.js +3 -2
  173. package/standalone/revogr-overlay-selection2.js.map +1 -1
  174. package/standalone/revogr-row-headers2.js +1 -1
  175. package/standalone/selection.utils.js +1 -1
  176. package/dist/cjs/column.drag.plugin-e636b5af.js.map +0 -1
  177. package/dist/cjs/column.service-15c8352d.js.map +0 -1
  178. package/dist/cjs/header-cell-renderer-375a879f.js.map +0 -1
  179. package/dist/cjs/index-28b6fdfb.js.map +0 -1
  180. package/dist/collection/plugins/filter/filter.service.js.map +0 -1
  181. package/dist/esm/column.drag.plugin-30dc4e24.js.map +0 -1
  182. package/dist/esm/column.service-414e9cba.js.map +0 -1
  183. package/dist/esm/header-cell-renderer-ca570fcf.js.map +0 -1
  184. package/dist/esm/index-74b9801b.js.map +0 -1
  185. package/dist/revo-grid/column.drag.plugin-30dc4e24.js +0 -5
  186. package/dist/revo-grid/column.drag.plugin-30dc4e24.js.map +0 -1
  187. package/dist/revo-grid/column.service-414e9cba.js +0 -5
  188. package/dist/revo-grid/column.service-414e9cba.js.map +0 -1
  189. package/dist/revo-grid/header-cell-renderer-ca570fcf.js.map +0 -1
  190. package/standalone/data.store.js.map +0 -1
  191. /package/dist/revo-grid/{edit.utils-0666e5bd.js.map → edit.utils-c358c970.js.map} +0 -0
  192. /package/dist/revo-grid/{index-74b9801b.js.map → index-6c437a0d.js.map} +0 -0
  193. /package/dist/revo-grid/{key.utils-d3df5db8.js.map → key.utils-5a827d12.js.map} +0 -0
  194. /package/dist/revo-grid/{row-header-utils-c7e3e2d5.js.map → row-header-utils-f5b04d1a.js.map} +0 -0
  195. /package/dist/revo-grid/{text-editor-96d69516.js.map → text-editor-79a617b5.js.map} +0 -0
  196. /package/dist/revo-grid/{throttle-262c3ed2.js.map → throttle-b94844de.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["closest","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","s","el","this","call","parentElement","parentNode","nodeType","filterStyleCss","RevogrFilterPanelStyle0","defaultType","FILTER_LIST_CLASS","FILTER_LIST_CLASS_ACTION","FILTER_ID","FilterPanel","filterCaptionsInternal","title","save","reset","cancel","add","placeholder","and","or","debouncedApplyFilter","debounce","filterChange","emit","filterItems","onMouseDown","e","changes","defaultPrevented","path","composedPath","select","document","getElementById","HTMLSelectElement","includes","value","currentFilterType","type","currentFilterId","isOutside","element","target","HTMLElement","isFilterBtn","undefined","show","newEntity","getChanges","componentWillRender","isFilterIdSet","Object","keys","prop","filterId","length","renderSelectOptions","isDefaultTypeRemoved","options","_a","capts","assign","filterCaptions","push","h","selected","filterNames","gIndex","filterTypes","map","k","disabled","renderExtra","index","currentFilter","filterEntities","extra","id","onInput","onUserInput","bind","onKeyDown","getFilterItemsList","propFilters","key","d","andOrButton","onClick","toggleFilterAndOr","AndOrButton","text","relation","class","onChange","onFilterTypeChange","onRemoveFilter","TrashButton","autoCorrect","pos","getBoundingClientRect","maxLeft","window","innerWidth","width","left","offsetLeft","style","_b","render","Host","display","x","top","y","ref","onAddNewFilter","disableDynamicFiltering","onSave","onReset","onCancel","setTimeout","input","HTMLInputElement","focus","addNewFilterToProp","event","toLowerCase","stopPropagation","assertChanges","items","findIndex","splice","Error"],"sources":["src/utils/closest.polifill.ts","src/plugins/filter/filter.style.scss?tag=revogr-filter-panel","src/plugins/filter/filter.panel.tsx"],"sourcesContent":["(function closest() {\n if (!Element.prototype.matches) {\n Element.prototype.matches =\n ((Element.prototype as unknown) as { msMatchesSelector: (selectors: string) => boolean }).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n if (!Element.prototype.closest) {\n Element.prototype.closest = function (s: string) {\n let el: HTMLElement | Element | (Node & ParentNode) | null = this;\n\n do {\n if (Element.prototype.matches.call(el, s)) {\n return el;\n }\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n }\n})();\n","revogr-filter-panel {\n position: absolute;\n display: block;\n top: 0;\n left: 0;\n z-index: 100;\n\n opacity: 1;\n transform: none;\n background-color: #fff;\n transform-origin: 62px 0px;\n box-shadow: 0 5px 18px -2px rgba(black, 20%);\n padding: 10px;\n border-radius: 4px;\n\n min-width: 220px;\n text-align: left;\n\n .filter-holder > div {\n display: flex;\n flex-direction: column;\n }\n\n label {\n font-size: 13px;\n display: block;\n padding: 8px 0;\n }\n\n select {\n width: 100%;\n }\n\n input[type='text'] {\n border: 0;\n min-height: 34px;\n margin: 5px 0;\n background: #f3f3f3;\n border-radius: 5px;\n padding: 0 10px;\n box-sizing: border-box;\n width: 100%;\n }\n\n button {\n margin-top: 10px;\n margin-right: 5px;\n }\n\n .filter-actions {\n text-align: right;\n margin-right: -5px;\n }\n}\n\n.rgHeaderCell {\n &:hover .rv-filter {\n transition:\n opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,\n transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n }\n &:hover .rv-filter,\n .rv-filter.active {\n opacity: 1;\n }\n\n .rv-filter {\n $btn-size: 24px;\n height: $btn-size;\n width: $btn-size;\n background: none;\n border: 0;\n opacity: 0;\n visibility: visible;\n cursor: pointer;\n border-radius: 4px;\n\n &.active {\n color: #10224a;\n }\n\n .filter-img {\n $img-size: 11px;\n color: gray;\n width: $img-size;\n }\n }\n}\n\n.select-css {\n $gradient: 'data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E';\n $linearGradient: linear-gradient(to bottom, #ffffff 0%, #ffffff 100%);\n $borderColor: #f1f1f1;\n\n display: block;\n font-family: sans-serif;\n font-weight: 600;\n color: #444;\n line-height: 1.3;\n padding: 0.6em 1.4em 0.5em 0.8em;\n width: 100%;\n max-width: 100%; /* useful when width is set to anything other than 100% */\n box-sizing: border-box;\n margin: 0;\n border: 1px solid $borderColor;\n box-shadow: transparent;\n border-radius: 0.5em;\n appearance: none;\n background-color: #fff;\n background-image: url($gradient), $linearGradient;\n background-repeat: no-repeat, repeat;\n /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/\n background-position:\n right 0.7em top 50%,\n 0 0;\n /* icon size, then gradient */\n background-size:\n 0.65em auto,\n 100%;\n\n /* Hide arrow icon in IE browsers */\n &::-ms-expand {\n display: none;\n }\n /* Hover style */\n &:hover {\n border-color: rgb(197, 197, 197);\n }\n /* Focus style */\n &:focus {\n border-color: $borderColor;\n box-shadow: 0 0 1px 3px rgba(59, 153, 252, 0.7);\n box-shadow: 0 0 0 3px -moz-mac-focusring;\n color: #222;\n outline: none;\n }\n\n /* Set options to normal weight */\n option {\n font-weight: normal;\n }\n\n /* Disabled styles */\n &:disabled,\n &[aria-disabled='true'] {\n color: gray;\n background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'),\n linear-gradient(to bottom, #ffffff 0%, #ffffff 100%);\n }\n\n &:disabled:hover,\n &[aria-disabled='true'] {\n border-color: $borderColor;\n }\n}\n\n.multi-filter-list {\n margin-top: 5px;\n margin-bottom: 5px;\n\n div {\n white-space: nowrap;\n }\n\n .multi-filter-list-action {\n display: flex;\n\n justify-content: space-between;\n align-items: center;\n }\n\n .and-or-button {\n margin: 0 0 0 10px;\n min-width: 58px;\n cursor: pointer;\n }\n .trash-button {\n $btn-remove-size: 22px;\n margin: 0 0 -2px 6px;\n cursor: pointer;\n\n width: $btn-remove-size;\n height: 100%;\n font-size: 16px;\n\n .trash-img {\n width: 1em;\n }\n }\n}\n\n.add-filter-divider {\n display: block;\n margin: 0 -10px 10px -10px;\n\n border-bottom: 1px solid #d9d9d9;\n height: 10px;\n}\n\n.select-input {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n","import { Component, Event, EventEmitter, h, Host, Listen, Method, Prop, State, VNode, Element } from '@stencil/core';\nimport { FilterType } from './filter.service';\nimport { AndOrButton, isFilterBtn, TrashButton } from './filter.button';\nimport '../../utils/closest.polifill';\nimport { LogicFunction } from './filter.types';\nimport { FilterCaptions } from './filter.plugin';\nimport debounce from 'lodash/debounce';\nimport { ColumnProp } from '@type';\n\nexport type FilterItem = {\n // column id\n prop?: ColumnProp;\n // filter type definition\n type?: FilterType;\n // value for additional filtering, text value or some id\n value?: any;\n};\n\nexport type FilterData = {\n id: number;\n type: FilterType;\n value?: any;\n relation: 'and' | 'or';\n};\n\nexport type MultiFilterItem = {\n [prop: string]: FilterData[];\n};\n\nexport type ShowData = {\n x: number;\n y: number;\n /**\n * Auto correct position if it is out of document bounds\n */\n autoCorrect?: boolean;\n} & FilterItem;\n\nconst defaultType: FilterType = 'none';\n\nconst FILTER_LIST_CLASS = 'multi-filter-list';\nconst FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';\nconst FILTER_ID = 'add-filter';\n\n/**\n * Filter panel for editing filters\n */\n/**\n * @internal\n */\n@Component({\n tag: 'revogr-filter-panel',\n styleUrl: 'filter.style.scss',\n})\nexport class FilterPanel {\n private filterCaptionsInternal: FilterCaptions = {\n title: 'Filter by',\n save: 'Save',\n // drops the filter\n reset: 'Clear changes',\n cancel: 'Close',\n add: 'Add more condition...',\n placeholder: 'Enter value...',\n and: 'and',\n or: 'or',\n };\n\n @Element() element!: HTMLElement;\n @State() isFilterIdSet = false;\n @State() filterId = 0;\n @State() currentFilterId = -1;\n @State() currentFilterType: FilterType = defaultType;\n @State() changes: ShowData | undefined;\n @Prop() filterItems: MultiFilterItem = {};\n @Prop() filterTypes: Record<string, string[]> = {};\n @Prop() filterNames: Record<string, string> = {};\n @Prop() filterEntities: Record<string, LogicFunction> = {};\n @Prop() filterCaptions: FilterCaptions | undefined;\n @Prop() disableDynamicFiltering = false;\n @Event() filterChange: EventEmitter<MultiFilterItem>;\n @Listen('mousedown', { target: 'document' }) onMouseDown(e: MouseEvent) {\n // click on anything then select drops values to default\n if (!this.changes || e.defaultPrevented) {\n return;\n }\n const path = e.composedPath();\n const select = document.getElementById(FILTER_ID);\n if (select instanceof HTMLSelectElement) {\n // click on select should be skipped\n if (path.includes(select)) {\n return;\n }\n select.value = defaultType;\n }\n this.currentFilterType = defaultType;\n if (this.changes) {\n this.changes.type = defaultType;\n }\n this.currentFilterId = -1;\n\n const isOutside = !path.includes(this.element);\n\n if (e.target instanceof HTMLElement && isOutside && !isFilterBtn(e.target)) {\n this.changes = undefined;\n }\n }\n\n @Method() async show(newEntity?: ShowData) {\n this.changes = newEntity;\n if (this.changes) {\n this.changes.type = this.changes.type || defaultType;\n }\n }\n\n @Method() async getChanges() {\n return this.changes;\n }\n\n componentWillRender() {\n if (!this.isFilterIdSet) {\n this.isFilterIdSet = true;\n const filterItems = Object.keys(this.filterItems);\n for (const prop of filterItems) {\n // we set the proper filterId so there won't be any conflict when removing filters\n this.filterId += this.filterItems[prop].length;\n }\n }\n }\n\n renderSelectOptions(type: FilterType, isDefaultTypeRemoved = false) {\n const options: VNode[] = [];\n const prop = this.changes?.prop;\n\n if (!isDefaultTypeRemoved) {\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n\n options.push(\n <option selected={this.currentFilterType === defaultType} value={defaultType}>\n {prop && this.filterItems[prop] && this.filterItems[prop].length > 0 ? capts.add : this.filterNames[defaultType]}\n </option>,\n );\n }\n\n for (let gIndex in this.filterTypes) {\n options.push(\n ...this.filterTypes[gIndex].map(k => (\n <option value={k} selected={type === k}>\n {this.filterNames[k]}\n </option>\n )),\n );\n options.push(<option disabled></option>);\n }\n return options;\n }\n\n renderExtra(prop: ColumnProp, index: number) {\n const currentFilter = this.filterItems[prop];\n\n if (!currentFilter) return '';\n\n if (this.filterEntities[currentFilter[index].type].extra !== 'input') return '';\n\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n\n return (\n <input\n id={`filter-input-${currentFilter[index].id}`}\n placeholder={capts.placeholder}\n type=\"text\"\n value={currentFilter[index].value}\n onInput={this.onUserInput.bind(this, index, prop)}\n onKeyDown={e => this.onKeyDown(e)}\n />\n );\n }\n\n getFilterItemsList() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return '';\n\n const propFilters = this.filterItems[prop] || [];\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n return (\n <div key={this.filterId}>\n {propFilters.map((d, index) => {\n let andOrButton;\n\n // hide toggle button if there is only one filter and the last one\n if (index !== this.filterItems[prop].length - 1) {\n andOrButton = (\n <div onClick={() => this.toggleFilterAndOr(d.id)}>\n <AndOrButton text={d.relation === 'and' ? capts.and : capts.or} />\n </div>\n );\n }\n\n return (\n <div key={d.id} class={FILTER_LIST_CLASS}>\n <div class={{ 'select-input': true }}>\n <select class=\"select-css select-filter\" onChange={e => this.onFilterTypeChange(e, prop, index)}>\n {this.renderSelectOptions(this.filterItems[prop][index].type, true)}\n </select>\n <div class={FILTER_LIST_CLASS_ACTION}>{andOrButton}</div>\n <div onClick={() => this.onRemoveFilter(d.id)}>\n <TrashButton />\n </div>\n </div>\n <div>{this.renderExtra(prop, index)}</div>\n </div>\n );\n })}\n\n {propFilters.length > 0 ? <div class=\"add-filter-divider\"/> : ''}\n </div>\n );\n }\n\n private autoCorrect(el?: HTMLElement | null) {\n if (!el) {\n return;\n }\n const pos = el.getBoundingClientRect();\n const maxLeft = window.innerWidth - pos.width;\n\n if (pos.left > maxLeft && el.offsetLeft) {\n el.style.left = `${maxLeft - (el.parentElement?.getBoundingClientRect().left ?? 0)}px`;\n }\n }\n \n render() {\n if (!this.changes) {\n return <Host style={{ display: 'none' }}></Host>;\n }\n const style = {\n display: 'block',\n left: `${this.changes.x}px`,\n top: `${this.changes.y}px`,\n };\n\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n\n return (\n <Host style={style} ref={(el) => { this.changes?.autoCorrect && this.autoCorrect(el) }}>\n <label>{capts.title}</label>\n <div class=\"filter-holder\">{this.getFilterItemsList()}</div>\n\n <div class=\"add-filter\">\n <select id={FILTER_ID} class=\"select-css\" onChange={e => this.onAddNewFilter(e)}>\n {this.renderSelectOptions(this.currentFilterType)}\n </select>\n </div>\n <div class=\"filter-actions\">\n {this.disableDynamicFiltering &&\n <button id=\"revo-button-save\" aria-label=\"save\" class=\"revo-button green\" onClick={() => this.onSave()}>\n {capts.save}\n </button>\n }\n <button id=\"revo-button-reset\" aria-label=\"reset\" class=\"revo-button light\" onClick={() => this.onReset()}>\n {capts.reset}\n </button>\n <button id=\"revo-button-cancel\" aria-label=\"cancel\" class=\"revo-button light\" onClick={() => this.onCancel()}>\n {capts.cancel}\n </button>\n </div>\n </Host>\n );\n }\n\n private onFilterTypeChange(e: Event, prop: ColumnProp, index: number) {\n if (!(e.target instanceof HTMLSelectElement)) {\n return;\n }\n this.filterItems[prop][index].type = e.target.value as FilterType;\n\n // this re-renders the input to know if we need extra input\n this.filterId++;\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById('filter-input-' + this.filterItems[prop][index].id);\n if (input instanceof HTMLInputElement) {\n input.focus();\n }\n }, 0);\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private debouncedApplyFilter = debounce(() => {\n this.filterChange.emit(this.filterItems);\n }, 400);\n\n private onAddNewFilter(e: Event) {\n const el = e.target as HTMLSelectElement;\n this.currentFilterType = el.value as FilterType;\n this.addNewFilterToProp();\n\n // reset value after adding new filter\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n }\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private addNewFilterToProp() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return;\n\n if (!this.filterItems[prop]) {\n this.filterItems[prop] = [];\n }\n\n if (this.currentFilterType === 'none') return;\n\n this.filterId++;\n this.currentFilterId = this.filterId;\n\n this.filterItems[prop].push({\n id: this.currentFilterId,\n type: this.currentFilterType,\n value: '',\n relation: 'and',\n });\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById('filter-input-' + this.currentFilterId) as HTMLInputElement;\n if (input) input.focus();\n }, 0);\n }\n\n private onUserInput(index: number, prop: ColumnProp, event: Event) {\n // update the value of the filter item\n this.filterItems[prop][index].value = (event.target as HTMLInputElement).value;\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private onKeyDown(e: KeyboardEvent) {\n if (e.key.toLowerCase() === 'enter') {\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n this.addNewFilterToProp();\n select.focus();\n }\n return;\n }\n // keep event local, don't escalate farther to dom\n e.stopPropagation();\n }\n\n private onSave() {\n this.filterChange.emit(this.filterItems);\n }\n\n private onCancel() {\n this.changes = undefined;\n }\n\n private onReset() {\n this.assertChanges();\n\n delete this.filterItems[this.changes?.prop ?? ''];\n\n // this updates the DOM which is used by getFilterItemsList() key\n this.filterId++;\n\n this.filterChange.emit(this.filterItems);\n }\n\n private onRemoveFilter(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n items.splice(index, 1);\n\n // let's remove the prop if no more filters so the filter icon will be removed\n if (items.length === 0) delete this.filterItems[prop ?? ''];\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private toggleFilterAndOr(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n\n items[index].relation = items[index].relation === 'and' ? 'or' : 'and';\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private assertChanges() {\n if (!this.changes) {\n throw new Error('Changes required per edit');\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["closest","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","s","el","this","call","parentElement","parentNode","nodeType","filterStyleCss","RevogrFilterPanelStyle0","defaultType","FILTER_LIST_CLASS","FILTER_LIST_CLASS_ACTION","FILTER_ID","FilterPanel","filterCaptionsInternal","title","save","reset","cancel","add","placeholder","and","or","debouncedApplyFilter","debounce","filterChange","emit","filterItems","onMouseDown","e","changes","defaultPrevented","path","composedPath","select","document","getElementById","HTMLSelectElement","includes","value","currentFilterType","type","currentFilterId","isOutside","element","target","HTMLElement","isFilterBtn","undefined","show","newEntity","getChanges","componentWillRender","isFilterIdSet","Object","keys","prop","filterId","length","renderSelectOptions","isDefaultTypeRemoved","options","capts","assign","filterCaptions","push","h","selected","filterNames","gIndex","filterTypes","map","k","disabled","renderExtra","index","currentFilter","filterEntities","extra","id","onInput","onUserInput","bind","onKeyDown","getFilterItemsList","_a","propFilters","key","d","andOrButton","onClick","toggleFilterAndOr","AndOrButton","text","relation","class","onChange","onFilterTypeChange","onRemoveFilter","TrashButton","autoCorrect","pos","getBoundingClientRect","maxLeft","window","innerWidth","width","left","offsetLeft","style","_b","render","Host","display","x","top","y","ref","onAddNewFilter","disableDynamicFiltering","onSave","onReset","onCancel","setTimeout","input","HTMLInputElement","focus","addNewFilterToProp","event","toLowerCase","stopPropagation","assertChanges","items","findIndex","splice","Error"],"sources":["src/utils/closest.polifill.ts","src/plugins/filter/filter.style.scss?tag=revogr-filter-panel","src/plugins/filter/filter.panel.tsx"],"sourcesContent":["(function closest() {\n if (!Element.prototype.matches) {\n Element.prototype.matches =\n ((Element.prototype as unknown) as { msMatchesSelector: (selectors: string) => boolean }).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n if (!Element.prototype.closest) {\n Element.prototype.closest = function (s: string) {\n let el: HTMLElement | Element | (Node & ParentNode) | null = this;\n\n do {\n if (Element.prototype.matches.call(el, s)) {\n return el;\n }\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n }\n})();\n","revogr-filter-panel {\n position: absolute;\n display: block;\n top: 0;\n left: 0;\n z-index: 100;\n\n opacity: 1;\n transform: none;\n background-color: #fff;\n transform-origin: 62px 0px;\n box-shadow: 0 5px 18px -2px rgba(black, 20%);\n padding: 10px;\n border-radius: 4px;\n\n min-width: 220px;\n text-align: left;\n\n .filter-holder > div {\n display: flex;\n flex-direction: column;\n }\n\n label {\n font-size: 13px;\n display: block;\n padding: 8px 0;\n }\n\n select {\n width: 100%;\n }\n\n input[type='text'] {\n border: 0;\n min-height: 34px;\n margin: 5px 0;\n background: #f3f3f3;\n border-radius: 5px;\n padding: 0 10px;\n box-sizing: border-box;\n width: 100%;\n }\n\n button {\n margin-top: 10px;\n margin-right: 5px;\n }\n\n .filter-actions {\n text-align: right;\n margin-right: -5px;\n }\n}\n\n.rgHeaderCell {\n &:hover .rv-filter {\n transition:\n opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,\n transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n }\n &:hover .rv-filter,\n .rv-filter.active {\n opacity: 1;\n }\n\n .rv-filter {\n $btn-size: 24px;\n height: $btn-size;\n width: $btn-size;\n background: none;\n border: 0;\n opacity: 0;\n visibility: visible;\n cursor: pointer;\n border-radius: 4px;\n\n &.active {\n color: #10224a;\n }\n\n .filter-img {\n $img-size: 11px;\n color: gray;\n width: $img-size;\n }\n }\n}\n\n.select-css {\n $gradient: 'data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E';\n $linearGradient: linear-gradient(to bottom, #ffffff 0%, #ffffff 100%);\n $borderColor: #f1f1f1;\n\n display: block;\n font-family: sans-serif;\n font-weight: 600;\n color: #444;\n line-height: 1.3;\n padding: 0.6em 1.4em 0.5em 0.8em;\n width: 100%;\n max-width: 100%; /* useful when width is set to anything other than 100% */\n box-sizing: border-box;\n margin: 0;\n border: 1px solid $borderColor;\n box-shadow: transparent;\n border-radius: 0.5em;\n appearance: none;\n background-color: #fff;\n background-image: url($gradient), $linearGradient;\n background-repeat: no-repeat, repeat;\n /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/\n background-position:\n right 0.7em top 50%,\n 0 0;\n /* icon size, then gradient */\n background-size:\n 0.65em auto,\n 100%;\n\n /* Hide arrow icon in IE browsers */\n &::-ms-expand {\n display: none;\n }\n /* Hover style */\n &:hover {\n border-color: rgb(197, 197, 197);\n }\n /* Focus style */\n &:focus {\n border-color: $borderColor;\n box-shadow: 0 0 1px 3px rgba(59, 153, 252, 0.7);\n box-shadow: 0 0 0 3px -moz-mac-focusring;\n color: #222;\n outline: none;\n }\n\n /* Set options to normal weight */\n option {\n font-weight: normal;\n }\n\n /* Disabled styles */\n &:disabled,\n &[aria-disabled='true'] {\n color: gray;\n background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'),\n linear-gradient(to bottom, #ffffff 0%, #ffffff 100%);\n }\n\n &:disabled:hover,\n &[aria-disabled='true'] {\n border-color: $borderColor;\n }\n}\n\n.multi-filter-list {\n margin-top: 5px;\n margin-bottom: 5px;\n\n div {\n white-space: nowrap;\n }\n\n .multi-filter-list-action {\n display: flex;\n\n justify-content: space-between;\n align-items: center;\n }\n\n .and-or-button {\n margin: 0 0 0 10px;\n min-width: 58px;\n cursor: pointer;\n }\n .trash-button {\n $btn-remove-size: 22px;\n margin: 0 0 -2px 6px;\n cursor: pointer;\n\n width: $btn-remove-size;\n height: 100%;\n font-size: 16px;\n\n .trash-img {\n width: 1em;\n }\n }\n}\n\n.add-filter-divider {\n display: block;\n margin: 0 -10px 10px -10px;\n\n border-bottom: 1px solid #d9d9d9;\n height: 10px;\n}\n\n.select-input {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n","import {\n h,\n Component,\n Event,\n EventEmitter,\n Host,\n Listen,\n Method,\n Prop,\n State,\n VNode,\n Element,\n} from '@stencil/core';\nimport debounce from 'lodash/debounce';\n\nimport { AndOrButton, isFilterBtn, TrashButton } from './filter.button';\nimport '../../utils/closest.polifill';\nimport { FilterCaptions, LogicFunction, MultiFilterItem, ShowData } from './filter.types';\nimport { ColumnProp } from '@type';\nimport { FilterType } from './filter.indexed';\n\n\nconst defaultType: FilterType = 'none';\n\nconst FILTER_LIST_CLASS = 'multi-filter-list';\nconst FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';\nconst FILTER_ID = 'add-filter';\n\n/**\n * Filter panel for editing filters\n */\n/**\n * @internal\n */\n@Component({\n tag: 'revogr-filter-panel',\n styleUrl: 'filter.style.scss',\n})\nexport class FilterPanel {\n private filterCaptionsInternal: FilterCaptions = {\n title: 'Filter by',\n save: 'Save',\n // drops the filter\n reset: 'Clear changes',\n cancel: 'Close',\n add: 'Add more condition...',\n placeholder: 'Enter value...',\n and: 'and',\n or: 'or',\n };\n\n @Element() element!: HTMLElement;\n @State() isFilterIdSet = false;\n @State() filterId = 0;\n @State() currentFilterId = -1;\n @State() currentFilterType: FilterType = defaultType;\n @State() changes: ShowData | undefined;\n @Prop() filterItems: MultiFilterItem = {};\n @Prop() filterNames: Record<string, string> = {};\n @Prop() filterEntities: Record<string, LogicFunction> = {};\n @Prop() filterCaptions: FilterCaptions | undefined;\n @Prop() disableDynamicFiltering = false;\n @Event() filterChange: EventEmitter<MultiFilterItem>;\n @Listen('mousedown', { target: 'document' }) onMouseDown(e: MouseEvent) {\n // click on anything then select drops values to default\n if (!this.changes || e.defaultPrevented) {\n return;\n }\n const path = e.composedPath();\n const select = document.getElementById(FILTER_ID);\n if (select instanceof HTMLSelectElement) {\n // click on select should be skipped\n if (path.includes(select)) {\n return;\n }\n select.value = defaultType;\n }\n this.currentFilterType = defaultType;\n if (this.changes) {\n this.changes.type = defaultType;\n }\n this.currentFilterId = -1;\n\n const isOutside = !path.includes(this.element);\n\n if (\n e.target instanceof HTMLElement &&\n isOutside &&\n !isFilterBtn(e.target)\n ) {\n this.changes = undefined;\n }\n }\n\n @Method() async show(newEntity?: ShowData) {\n this.changes = newEntity;\n if (this.changes) {\n this.changes.type = this.changes.type || defaultType;\n }\n }\n\n @Method() async getChanges() {\n return this.changes;\n }\n\n componentWillRender() {\n if (!this.isFilterIdSet) {\n this.isFilterIdSet = true;\n const filterItems = Object.keys(this.filterItems);\n for (const prop of filterItems) {\n // we set the proper filterId so there won't be any conflict when removing filters\n this.filterId += this.filterItems[prop].length;\n }\n }\n }\n\n renderSelectOptions(type: FilterType, isDefaultTypeRemoved = false) {\n if (!this.changes) {\n return;\n }\n const options: VNode[] = [];\n const prop = this.changes.prop;\n\n if (!isDefaultTypeRemoved) {\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n\n options.push(\n <option\n selected={this.currentFilterType === defaultType}\n value={defaultType}\n >\n {prop && this.filterItems[prop] && this.filterItems[prop].length > 0\n ? capts.add\n : this.filterNames[defaultType]}\n </option>,\n );\n }\n\n for (let gIndex in this.changes.filterTypes) {\n options.push(\n ...this.changes.filterTypes[gIndex].map(k => (\n <option value={k} selected={type === k}>\n {this.filterNames[k]}\n </option>\n )),\n );\n options.push(<option disabled></option>);\n }\n return options;\n }\n\n renderExtra(prop: ColumnProp, index: number) {\n const currentFilter = this.filterItems[prop];\n\n if (!currentFilter) return '';\n\n if (this.filterEntities[currentFilter[index].type].extra !== 'input')\n return '';\n\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n\n return (\n <input\n id={`filter-input-${currentFilter[index].id}`}\n placeholder={capts.placeholder}\n type=\"text\"\n value={currentFilter[index].value}\n onInput={this.onUserInput.bind(this, index, prop)}\n onKeyDown={e => this.onKeyDown(e)}\n />\n );\n }\n\n getFilterItemsList() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return '';\n\n const propFilters = this.filterItems[prop] || [];\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n return (\n <div key={this.filterId}>\n {propFilters.map((d, index) => {\n let andOrButton;\n\n // hide toggle button if there is only one filter and the last one\n if (index !== this.filterItems[prop].length - 1) {\n andOrButton = (\n <div onClick={() => this.toggleFilterAndOr(d.id)}>\n <AndOrButton\n text={d.relation === 'and' ? capts.and : capts.or}\n />\n </div>\n );\n }\n\n return (\n <div key={d.id} class={FILTER_LIST_CLASS}>\n <div class={{ 'select-input': true }}>\n <select\n class=\"select-css select-filter\"\n onChange={e => this.onFilterTypeChange(e, prop, index)}\n >\n {this.renderSelectOptions(\n this.filterItems[prop][index].type,\n true,\n )}\n </select>\n <div class={FILTER_LIST_CLASS_ACTION}>{andOrButton}</div>\n <div onClick={() => this.onRemoveFilter(d.id)}>\n <TrashButton />\n </div>\n </div>\n <div>{this.renderExtra(prop, index)}</div>\n </div>\n );\n })}\n\n {propFilters.length > 0 ? <div class=\"add-filter-divider\" /> : ''}\n </div>\n );\n }\n\n private autoCorrect(el?: HTMLElement | null) {\n if (!el) {\n return;\n }\n const pos = el.getBoundingClientRect();\n const maxLeft = window.innerWidth - pos.width;\n\n if (pos.left > maxLeft && el.offsetLeft) {\n el.style.left = `${maxLeft - (el.parentElement?.getBoundingClientRect().left ?? 0)}px`;\n }\n }\n\n render() {\n if (!this.changes) {\n return <Host style={{ display: 'none' }}></Host>;\n }\n const style = {\n display: 'block',\n left: `${this.changes.x}px`,\n top: `${this.changes.y}px`,\n };\n\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n\n return (\n <Host\n style={style}\n ref={el => {\n this.changes?.autoCorrect && this.autoCorrect(el);\n }}\n >\n <label>{capts.title}</label>\n <div class=\"filter-holder\">{this.getFilterItemsList()}</div>\n\n <div class=\"add-filter\">\n <select\n id={FILTER_ID}\n class=\"select-css\"\n onChange={e => this.onAddNewFilter(e)}\n >\n {this.renderSelectOptions(this.currentFilterType)}\n </select>\n </div>\n <div class=\"filter-actions\">\n {this.disableDynamicFiltering && (\n <button\n id=\"revo-button-save\"\n aria-label=\"save\"\n class=\"revo-button green\"\n onClick={() => this.onSave()}\n >\n {capts.save}\n </button>\n )}\n <button\n id=\"revo-button-reset\"\n aria-label=\"reset\"\n class=\"revo-button light\"\n onClick={() => this.onReset()}\n >\n {capts.reset}\n </button>\n <button\n id=\"revo-button-cancel\"\n aria-label=\"cancel\"\n class=\"revo-button light\"\n onClick={() => this.onCancel()}\n >\n {capts.cancel}\n </button>\n </div>\n </Host>\n );\n }\n\n private onFilterTypeChange(e: Event, prop: ColumnProp, index: number) {\n if (!(e.target instanceof HTMLSelectElement)) {\n return;\n }\n this.filterItems[prop][index].type = e.target.value as FilterType;\n\n // this re-renders the input to know if we need extra input\n this.filterId++;\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById(\n 'filter-input-' + this.filterItems[prop][index].id,\n );\n if (input instanceof HTMLInputElement) {\n input.focus();\n }\n }, 0);\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private debouncedApplyFilter = debounce(() => {\n this.filterChange.emit(this.filterItems);\n }, 400);\n\n private onAddNewFilter(e: Event) {\n const el = e.target as HTMLSelectElement;\n this.currentFilterType = el.value as FilterType;\n this.addNewFilterToProp();\n\n // reset value after adding new filter\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n }\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private addNewFilterToProp() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return;\n\n if (!this.filterItems[prop]) {\n this.filterItems[prop] = [];\n }\n\n if (this.currentFilterType === 'none') return;\n\n this.filterId++;\n this.currentFilterId = this.filterId;\n\n this.filterItems[prop].push({\n id: this.currentFilterId,\n type: this.currentFilterType,\n value: '',\n relation: 'and',\n });\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById(\n 'filter-input-' + this.currentFilterId,\n ) as HTMLInputElement;\n if (input) input.focus();\n }, 0);\n }\n\n private onUserInput(index: number, prop: ColumnProp, event: Event) {\n // update the value of the filter item\n this.filterItems[prop][index].value = (\n event.target as HTMLInputElement\n ).value;\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private onKeyDown(e: KeyboardEvent) {\n if (e.key.toLowerCase() === 'enter') {\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n this.addNewFilterToProp();\n select.focus();\n }\n return;\n }\n // keep event local, don't escalate farther to dom\n e.stopPropagation();\n }\n\n private onSave() {\n this.filterChange.emit(this.filterItems);\n }\n\n private onCancel() {\n this.changes = undefined;\n }\n\n private onReset() {\n this.assertChanges();\n\n delete this.filterItems[this.changes?.prop ?? ''];\n\n // this updates the DOM which is used by getFilterItemsList() key\n this.filterId++;\n\n this.filterChange.emit(this.filterItems);\n }\n\n private onRemoveFilter(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n items.splice(index, 1);\n\n // let's remove the prop if no more filters so the filter icon will be removed\n if (items.length === 0) delete this.filterItems[prop ?? ''];\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private toggleFilterAndOr(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n\n items[index].relation = items[index].relation === 'and' ? 'or' : 'and';\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private assertChanges() {\n if (!this.changes) {\n throw new Error('Changes required per edit');\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import{i as t,V as e,v as i}from"./index-74b9801b.js";function s(e,i,s,l,u){const f=t(u,e);const h=d(i);let m;if(h){let t=f.itemIndex-(h.itemIndex||0);if(t){m=a(Math.abs(t),Object.assign(Object.assign({positiveDirection:t>-1},u),i))}}const v=n(l,u.realSize,f);if(m){const t=o(f,s,v,m,u);if(t.length){r(m.items,t,m)}}if(!m){const t=c({firstItemStart:f.start,firstItemIndex:f.itemIndex,origSize:u.originItemSize,maxSize:v,maxCount:s,sizes:u.sizes});m={items:t,start:0,end:t.length-1}}return m}function n(t,e,i){return Math.min(t+(i.end-i.start),e)}function r(t,e,i){t.splice(i.end+1,0,...e);if(i.start>=i.end&&!(i.start===i.end&&i.start===0)){i.start+=e.length}i.end+=e.length}function o(t,e,i,s,n){const r=h(s);const o=c({sizes:n.sizes,firstItemStart:r.end,firstItemIndex:r.itemIndex+1,origSize:n.originItemSize,maxSize:i-(r.end-t.start),maxCount:e});return o}function c(t,e=0){const i=[];let s=t.firstItemIndex;let n=e;while(n<=t.maxSize&&s<t.maxCount){const e=l(s,t.sizes,t.origSize);i.push({start:t.firstItemStart+n,end:t.firstItemStart+n+e,itemIndex:s,size:e});n+=e;s++}return i}function a(t,e){var i,s;const n=[...e.items];const r=n.length;let o={start:e.start,end:e.end};if(t>r){return undefined}if(e.positiveDirection){let i=h(e);let s=o.start;const c=s+t;for(;s<c;s++){const t=i.itemIndex+1;const c=l(t,e.sizes,e.originItemSize);if(i.end+c>e.realSize){break}let a=s%r;if(!n[a]){throw new Error("incorrect index")}n[a]=i={start:i.end,end:i.end+c,itemIndex:t,size:c};o.start++;o.end=a}}else{let c=d(e);const a=o.end;for(let u=0;u<t;u++){const t=((i=c===null||c===void 0?void 0:c.itemIndex)!==null&&i!==void 0?i:0)-1;const f=l(t,e.sizes,e.originItemSize);let d=a-u;d=(d<0?r+d:d)%r;if(!n[d]){console.error("incorrect index");break}const h=(s=c===null||c===void 0?void 0:c.start)!==null&&s!==void 0?s:0;n[d]=c={start:h-f,end:h,itemIndex:t,size:f};o.start=d;o.end--}}const c={start:(o.start<0?r+o.start:o.start)%r,end:(o.end<0?r+o.end:o.end)%r};return Object.assign({items:n},c)}function l(t,e,i=0){if(e&&e[t]){return e[t]}return i}function u(t,e,i,s){if(!i||!s){return false}return t>=i.start&&t<=i.end||t>i.end&&s.end===e}function f(t,e,i,s){var n;if(!i){return false}return e+t>((n=s===null||s===void 0?void 0:s.end)!==null&&n!==void 0?n:0)}function d(t){return t.items[t.start]}function h(t){return t.items[t.end]}function m(t,e,i,s){const n=[...t];const r=n.length;let o=s;let c=0;let a=e;if(!r){return[]}while(c<r){const t=n[a];t.start=o;t.size=i;t.end=t.start+i;o=t.end;a++;c++;if(a===r){a=0}}return n}function v(){return{items:[],start:0,end:0,virtualSize:0,realCount:0}}class b{get lastCoordinate(){return this.lastKnownScroll}set lastCoordinate(t){this.lastKnownScroll=t}constructor(t){this.type=t;this.lastKnownScroll=0;this.store=e(v());this.store.onChange("realCount",(()=>this.clearItems()));this.store.onChange("virtualSize",(()=>this.clearItems()))}setViewPortCoordinate(t,e,i=false){const n=this.store.get("virtualSize");if(!n){return}const c=1;const a=e.originItemSize*c;const l=a*2;const m=n+l;let v=0;if(e.realSize>n){v=e.realSize-n-a}let b=t;if(b<0){b=0}else if(b>v){b=v}this.lastCoordinate=b;b-=a;b=b<0?0:b<v?b:v;let z;if(i){z={items:[],start:0,end:0}}else{z=this.getItems()}const x=d(z);const I=h(z);let j={};if(!u(b,e.realSize,x,I)){j=Object.assign(Object.assign({},j),s(b,z,this.store.get("realCount"),m,e));this.setViewport(Object.assign({},j))}else if(f(b,m,x,I)){const t=[...z.items];const i=o(x,this.store.get("realCount"),m+b-x.start,z,{sizes:e.sizes,originItemSize:e.originItemSize});if(i.length){const e={start:this.store.get("start"),end:this.store.get("end")};r(t,i,e);j=Object.assign(Object.assign(Object.assign({},j),{items:[...t]}),e);this.setViewport(Object.assign({},j))}}}setOriginalSizes(t){const e=this.store.get("items");const s=e.length;if(!s){return}i(this.store,{items:m(e,this.store.get("start"),t,this.lastCoordinate)})}getItems(){return{items:this.store.get("items"),start:this.store.get("start"),end:this.store.get("end")}}setViewport(t){i(this.store,t)}clearItems(){this.store.set("items",[])}}const z=10;const x=(t,e,i=50)=>(e===null||e===void 0?void 0:e.size)||Math.max((t.toString().length+1)*z,i);export{b as V,o as a,c as b,f as c,d,h as e,x as f,s as g,u as i,a as r,m as s,r as u};
5
- //# sourceMappingURL=row-header-utils-c7e3e2d5.js.map
4
+ import{i as t,V as e,v as i}from"./index-6c437a0d.js";function s(e,i,s,l,u){const f=t(u,e);const h=d(i);let m;if(h){let t=f.itemIndex-(h.itemIndex||0);if(t){m=a(Math.abs(t),Object.assign(Object.assign({positiveDirection:t>-1},u),i))}}const v=n(l,u.realSize,f);if(m){const t=o(f,s,v,m,u);if(t.length){r(m.items,t,m)}}if(!m){const t=c({firstItemStart:f.start,firstItemIndex:f.itemIndex,origSize:u.originItemSize,maxSize:v,maxCount:s,sizes:u.sizes});m={items:t,start:0,end:t.length-1}}return m}function n(t,e,i){return Math.min(t+(i.end-i.start),e)}function r(t,e,i){t.splice(i.end+1,0,...e);if(i.start>=i.end&&!(i.start===i.end&&i.start===0)){i.start+=e.length}i.end+=e.length}function o(t,e,i,s,n){const r=h(s);const o=c({sizes:n.sizes,firstItemStart:r.end,firstItemIndex:r.itemIndex+1,origSize:n.originItemSize,maxSize:i-(r.end-t.start),maxCount:e});return o}function c(t,e=0){const i=[];let s=t.firstItemIndex;let n=e;while(n<=t.maxSize&&s<t.maxCount){const e=l(s,t.sizes,t.origSize);i.push({start:t.firstItemStart+n,end:t.firstItemStart+n+e,itemIndex:s,size:e});n+=e;s++}return i}function a(t,e){var i,s;const n=[...e.items];const r=n.length;let o={start:e.start,end:e.end};if(t>r){return undefined}if(e.positiveDirection){let i=h(e);let s=o.start;const c=s+t;for(;s<c;s++){const t=i.itemIndex+1;const c=l(t,e.sizes,e.originItemSize);if(i.end+c>e.realSize){break}let a=s%r;if(!n[a]){throw new Error("incorrect index")}n[a]=i={start:i.end,end:i.end+c,itemIndex:t,size:c};o.start++;o.end=a}}else{let c=d(e);const a=o.end;for(let u=0;u<t;u++){const t=((i=c===null||c===void 0?void 0:c.itemIndex)!==null&&i!==void 0?i:0)-1;const f=l(t,e.sizes,e.originItemSize);let d=a-u;d=(d<0?r+d:d)%r;if(!n[d]){console.error("incorrect index");break}const h=(s=c===null||c===void 0?void 0:c.start)!==null&&s!==void 0?s:0;n[d]=c={start:h-f,end:h,itemIndex:t,size:f};o.start=d;o.end--}}const c={start:(o.start<0?r+o.start:o.start)%r,end:(o.end<0?r+o.end:o.end)%r};return Object.assign({items:n},c)}function l(t,e,i=0){if(e&&e[t]){return e[t]}return i}function u(t,e,i,s){if(!i||!s){return false}return t>=i.start&&t<=i.end||t>i.end&&s.end===e}function f(t,e,i,s){var n;if(!i){return false}return e+t>((n=s===null||s===void 0?void 0:s.end)!==null&&n!==void 0?n:0)}function d(t){return t.items[t.start]}function h(t){return t.items[t.end]}function m(t,e,i,s){const n=[...t];const r=n.length;let o=s;let c=0;let a=e;if(!r){return[]}while(c<r){const t=n[a];t.start=o;t.size=i;t.end=t.start+i;o=t.end;a++;c++;if(a===r){a=0}}return n}function v(){return{items:[],start:0,end:0,virtualSize:0,realCount:0}}class z{get lastCoordinate(){return this.lastKnownScroll}set lastCoordinate(t){this.lastKnownScroll=t}constructor(t){this.type=t;this.lastKnownScroll=0;this.store=e(v());this.store.onChange("realCount",(()=>this.clearItems()));this.store.onChange("virtualSize",(()=>this.clearItems()))}setViewPortCoordinate(t,e,i=false){const n=this.store.get("virtualSize");if(!n){return}const c=1;const a=e.originItemSize*c;const l=a*2;const m=n+l;let v=0;if(e.realSize>n){v=e.realSize-n-a}let z=t;if(z<0){z=0}else if(z>v){z=v}this.lastCoordinate=z;z-=a;z=z<0?0:z<v?z:v;let b;if(i){b={items:[],start:0,end:0}}else{b=this.getItems()}const x=d(b);const I=h(b);let j={};if(!u(z,e.realSize,x,I)){j=Object.assign(Object.assign({},j),s(z,b,this.store.get("realCount"),m,e));this.setViewport(Object.assign({},j))}else if(f(z,m,x,I)){const t=[...b.items];const i=o(x,this.store.get("realCount"),m+z-x.start,b,{sizes:e.sizes,originItemSize:e.originItemSize});if(i.length){const e={start:this.store.get("start"),end:this.store.get("end")};r(t,i,e);j=Object.assign(Object.assign(Object.assign({},j),{items:[...t]}),e);this.setViewport(Object.assign({},j))}}}setOriginalSizes(t){const e=this.store.get("items");const s=e.length;if(!s){return}i(this.store,{items:m(e,this.store.get("start"),t,this.lastCoordinate)})}getItems(){return{items:this.store.get("items"),start:this.store.get("start"),end:this.store.get("end")}}setViewport(t){i(this.store,t)}clearItems(){this.store.set("items",[])}}const b=10;const x=(t,e,i=50)=>(e===null||e===void 0?void 0:e.size)||Math.max((t.toString().length+1)*b,i);export{z as V,o as a,c as b,f as c,d,h as e,x as f,s as g,u as i,a as r,m as s,r as u};
5
+ //# sourceMappingURL=row-header-utils-f5b04d1a.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import{f as i,d as t}from"./key.utils-d3df5db8.js";import{q as n}from"./index-74b9801b.js";class s{constructor(i,t){this.column=i;this.saveCallback=t;this.editInput=null;this.element=null;this.editCell=undefined}async componentDidRender(){var i;if(this.editInput){await n();(i=this.editInput)===null||i===void 0?void 0:i.focus()}}onKeyDown(n){const s=i(n.key);const e=t(n.key);if((e||s)&&n.target&&this.saveCallback&&!n.isComposing){this.beforeDisconnect();this.saveCallback(this.getValue(),e)}}beforeDisconnect(){var i;(i=this.editInput)===null||i===void 0?void 0:i.blur()}getValue(){var i;return(i=this.editInput)===null||i===void 0?void 0:i.value}render(i,t){var n,s;return i("input",{type:"text",enterKeyHint:"enter",value:(s=(n=this.editCell)===null||n===void 0?void 0:n.val)!==null&&s!==void 0?s:"",ref:i=>{this.editInput=i},onKeyDown:i=>this.onKeyDown(i)})}}export{s as T};
5
- //# sourceMappingURL=text-editor-96d69516.js.map
4
+ import{f as i,d as t}from"./key.utils-5a827d12.js";import{q as n}from"./index-6c437a0d.js";class s{constructor(i,t){this.column=i;this.saveCallback=t;this.editInput=null;this.element=null;this.editCell=undefined}async componentDidRender(){var i;if(this.editInput){await n();(i=this.editInput)===null||i===void 0?void 0:i.focus()}}onKeyDown(n){const s=i(n.key);const e=t(n.key);if((e||s)&&n.target&&this.saveCallback&&!n.isComposing){this.beforeDisconnect();this.saveCallback(this.getValue(),e)}}beforeDisconnect(){var i;(i=this.editInput)===null||i===void 0?void 0:i.blur()}getValue(){var i;return(i=this.editInput)===null||i===void 0?void 0:i.value}render(i,t){var n,s;return i("input",{type:"text",enterKeyHint:"enter",value:(s=(n=this.editCell)===null||n===void 0?void 0:n.val)!==null&&s!==void 0?s:"",ref:i=>{this.editInput=i},onKeyDown:i=>this.onKeyDown(i)})}}export{s as T};
5
+ //# sourceMappingURL=text-editor-79a617b5.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import{o as t}from"./index-74b9801b.js";import{d as i,i as r}from"./debounce-e8e9464a.js";const s={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,r=0){return t+(r?i-r:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:e,rgCol:e};this.params={rgRow:Object.assign({},s),rgCol:Object.assign({},s)}}setParams(t,i){const r=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:r-t.clientSize,virtualContentSize:r})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,r)=>{if(this.cfg.skipAnimationFrame){return i()}const s=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=r.bind(null,s)}));try{await i;const r=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,r);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:r.virtualSize?this.convert(t.coordinate,r,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,r=false,s,n=false){this.cancelScroll(i);if(!r&&this.previousScroll[i]===t){this.previousScroll[i]=e;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:s,outside:n})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return e}if(typeof i.maxSize==="number"&&t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,r;(r=(i=this.preventArtificialScroll)[t])===null||r===void 0?void 0:r.call(i);this.preventArtificialScroll[t]=null}convert(i,r,s=true){var e;const n=r.clientSize;const o=[0,((e=r.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,r.contentSize-r.virtualSize];if(s){return t(i,o,a)}return t(i,a,o)}}class a{constructor(t=10){this.scrollThrottling=t;this.mouseWheelScrollTimestamp={rgCol:0,rgRow:0};this.lastKnownScrollCoordinate={rgCol:0,rgRow:0}}setCoordinate(t){this.lastKnownScrollCoordinate[t.dimension]=t.coordinate}latestScrollUpdate(t){this.mouseWheelScrollTimestamp[t]=(new Date).getTime()}isReady(t,i){const r=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return r>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c=i,l=r;var h="Expected a function";function u(t,i,r){var s=true,e=true;if(typeof t!="function"){throw new TypeError(h)}if(l(r)){s="leading"in r?!!r.leading:s;e="trailing"in r?!!r.trailing:e}return c(t,i,{leading:s,maxWait:i,trailing:e})}var d=u;export{a as L,o as a,n as g,d as t};
5
- //# sourceMappingURL=throttle-262c3ed2.js.map
4
+ import{o as t}from"./index-6c437a0d.js";import{d as i,i as r}from"./debounce-e8e9464a.js";const s={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,r=0){return t+(r?i-r:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:e,rgCol:e};this.params={rgRow:Object.assign({},s),rgCol:Object.assign({},s)}}setParams(t,i){const r=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:r-t.clientSize,virtualContentSize:r})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,r)=>{if(this.cfg.skipAnimationFrame){return i()}const s=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=r.bind(null,s)}));try{await i;const r=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,r);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:r.virtualSize?this.convert(t.coordinate,r,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,r=false,s,n=false){this.cancelScroll(i);if(!r&&this.previousScroll[i]===t){this.previousScroll[i]=e;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:s,outside:n})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return e}if(typeof i.maxSize==="number"&&t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,r;(r=(i=this.preventArtificialScroll)[t])===null||r===void 0?void 0:r.call(i);this.preventArtificialScroll[t]=null}convert(i,r,s=true){var e;const n=r.clientSize;const o=[0,((e=r.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,r.contentSize-r.virtualSize];if(s){return t(i,o,a)}return t(i,a,o)}}class a{constructor(t=10){this.scrollThrottling=t;this.mouseWheelScrollTimestamp={rgCol:0,rgRow:0};this.lastKnownScrollCoordinate={rgCol:0,rgRow:0}}setCoordinate(t){this.lastKnownScrollCoordinate[t.dimension]=t.coordinate}latestScrollUpdate(t){this.mouseWheelScrollTimestamp[t]=(new Date).getTime()}isReady(t,i){const r=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return r>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c=i,l=r;var h="Expected a function";function u(t,i,r){var s=true,e=true;if(typeof t!="function"){throw new TypeError(h)}if(l(r)){s="leading"in r?!!r.leading:s;e="trailing"in r?!!r.trailing:e}return c(t,i,{leading:s,maxWait:i,trailing:e})}var d=u;export{a as L,o as a,n as g,d as t};
5
+ //# sourceMappingURL=throttle-b94844de.js.map
@@ -1,6 +1,6 @@
1
1
  import { DSourceState } from "../../store/index";
2
+ import { Observable } from '../../utils';
2
3
  import { DimensionCols, DimensionRows, RowDrag, ColumnRegular, DataType, CellProps, ColumnDataSchemaModel, ColumnProp, DataLookup, DataFormat, ChangedRange, OldNewRangeMapping, Cell, RangeArea, BeforeSaveDataDetails, EditorCtr, Editors } from "../../types/index";
3
- import { Observable } from '../../utils/store.utils';
4
4
  export type ColumnStores = {
5
5
  [T in DimensionCols]: Observable<DSourceState<ColumnRegular, DimensionCols>>;
6
6
  };
@@ -55,7 +55,6 @@ export default class ColumnService {
55
55
  };
56
56
  destroy(): void;
57
57
  }
58
- export declare function getCellData(val?: any): any;
59
58
  /**
60
59
  * Checks if the given rowDrag is a service for dragging rows.
61
60
  */
@@ -1,11 +1,9 @@
1
- import { VNode } from '../../stencil-public-runtime';
2
- import { ResizeProps } from './resizable.directive';
3
- import { CellProps, ColumnTemplateProp } from "../../types/index";
4
- type Props = {
5
- props: CellProps & Partial<ResizeProps>;
1
+ import { FunctionalComponent } from '../../stencil-public-runtime';
2
+ import { ResizableElementHTMLAttributes } from './resizable.element';
3
+ import { ColumnTemplateProp } from "../../types/index";
4
+ export declare const ON_COLUMN_CLICK = "columnclick";
5
+ export declare const HeaderCellRenderer: FunctionalComponent<{
6
+ props: ResizableElementHTMLAttributes;
6
7
  additionalData: any;
7
8
  data?: ColumnTemplateProp;
8
- };
9
- export declare const ON_COLUMN_CLICK = "columnclick";
10
- export declare const HeaderCellRenderer: ({ data, props, additionalData }: Props, children: VNode[]) => VNode;
11
- export {};
9
+ }>;
@@ -1,7 +1,6 @@
1
1
  import { VNode } from '../../stencil-public-runtime';
2
2
  import { ResizeEvent, ResizeProps } from './resizable.directive';
3
- import { VirtualPositionItem, ColumnTemplateProp, InitialHeaderClick } from "../../types/index";
4
- import { RangeArea } from "../../types/index";
3
+ import { VirtualPositionItem, ColumnTemplateProp, InitialHeaderClick, RangeArea } from "../../types/index";
5
4
  type Props = {
6
5
  column: VirtualPositionItem;
7
6
  additionalData: any;
@@ -11,7 +10,7 @@ type Props = {
11
10
  canFilter?: boolean;
12
11
  onResize?(e: ResizeEvent): void;
13
12
  onClick?(data: InitialHeaderClick): void;
14
- onDoubleClick?(data: InitialHeaderClick): void;
13
+ onDblClick?(data: InitialHeaderClick): void;
15
14
  } & Partial<Pick<ResizeProps, 'active'>>;
16
15
  declare const HeaderRenderer: (p: Props) => VNode;
17
16
  export default HeaderRenderer;
@@ -7,7 +7,6 @@ export type ResizeProps = {
7
7
  maxWidth?: number;
8
8
  maxHeight?: number;
9
9
  onResize?(e: ResizeEvent): void;
10
- onDoubleClick?(originalEvent: MouseEvent): void;
11
10
  };
12
11
  export type ResizeEvent = {
13
12
  eventName: string;
@@ -1,4 +1,5 @@
1
- import { VNode } from '../../stencil-public-runtime';
1
+ import { FunctionalComponent } from '../../stencil-public-runtime';
2
2
  import { ResizeProps } from './resizable.directive';
3
3
  import type { CellProps } from "../../types/index";
4
- export declare const ResizableElement: (props: Partial<ResizeProps> & CellProps, children: VNode[]) => any;
4
+ export type ResizableElementHTMLAttributes = Partial<ResizeProps> & CellProps;
5
+ export declare const ResizableElement: FunctionalComponent;
@@ -6,13 +6,13 @@ import { DSourceState } from "../../store/index";
6
6
  import DimensionProvider from '../../services/dimension.provider';
7
7
  import ViewportProvider from '../../services/viewport.provider';
8
8
  import { AutoSizeColumnConfig } from '../../plugins/column.auto-size.plugin';
9
- import { ColumnFilterConfig, FilterCollection } from '../../plugins/filter/filter.plugin';
10
9
  import { DataInput } from '../../plugins/export/types';
11
10
  import { GroupingOptions } from '../../plugins/groupingRow/grouping.row.types';
12
11
  import { FocusedData } from './viewport.service';
13
12
  import type { Observable } from '../../utils/store.utils';
14
13
  import type { GridPlugin } from '../../plugins/base.plugin';
15
14
  import { ColumnCollection } from '../../utils/column.utils';
15
+ import { ColumnFilterConfig, FilterCollection } from '../../plugins/filter/filter.types';
16
16
  /**
17
17
  * Revogrid - High-performance, customizable grid library for managing large datasets.
18
18
  *
@@ -8,7 +8,7 @@ import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
8
  import { AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PositionItem, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
9
9
  import { GridPlugin } from "./plugins/base.plugin";
10
10
  import { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
11
- import { ColumnFilterConfig, FilterCaptions, FilterCollection } from "./plugins/filter/filter.plugin";
11
+ import { ColumnFilterConfig, FilterCaptions, FilterCollection, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
12
12
  import { GroupingOptions } from "./plugins/groupingRow/grouping.row.types";
13
13
  import { VNode } from "./stencil-public-runtime";
14
14
  import { FocusedData } from "./components/revoGrid/viewport.service";
@@ -16,15 +16,13 @@ import { ColumnCollection } from "./utils/column.utils";
16
16
  import { DataInput } from "./plugins/export/types";
17
17
  import { Observable } from "./utils/store.utils";
18
18
  import { DSourceState, Groups } from "./store/index";
19
- import { MultiFilterItem, ShowData } from "./plugins/filter/filter.panel";
20
- import { LogicFunction } from "./plugins/filter/filter.types";
21
19
  import { ResizeProps } from "./components/header/resizable.directive";
22
20
  import { Cell as Cell1, ColumnRegular as ColumnRegular1, DataType as DataType1, DimensionCols as DimensionCols1, DimensionRows as DimensionRows1, DimensionSettingsState as DimensionSettingsState1, Observable as Observable1, SelectionStoreState as SelectionStoreState1 } from "./components";
23
21
  import { EventData } from "./components/overlay/selection.utils";
24
22
  export { AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PositionItem, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
25
23
  export { GridPlugin } from "./plugins/base.plugin";
26
24
  export { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
27
- export { ColumnFilterConfig, FilterCaptions, FilterCollection } from "./plugins/filter/filter.plugin";
25
+ export { ColumnFilterConfig, FilterCaptions, FilterCollection, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
28
26
  export { GroupingOptions } from "./plugins/groupingRow/grouping.row.types";
29
27
  export { VNode } from "./stencil-public-runtime";
30
28
  export { FocusedData } from "./components/revoGrid/viewport.service";
@@ -32,8 +30,6 @@ export { ColumnCollection } from "./utils/column.utils";
32
30
  export { DataInput } from "./plugins/export/types";
33
31
  export { Observable } from "./utils/store.utils";
34
32
  export { DSourceState, Groups } from "./store/index";
35
- export { MultiFilterItem, ShowData } from "./plugins/filter/filter.panel";
36
- export { LogicFunction } from "./plugins/filter/filter.types";
37
33
  export { ResizeProps } from "./components/header/resizable.directive";
38
34
  export { Cell as Cell1, ColumnRegular as ColumnRegular1, DataType as DataType1, DimensionCols as DimensionCols1, DimensionRows as DimensionRows1, DimensionSettingsState as DimensionSettingsState1, Observable as Observable1, SelectionStoreState as SelectionStoreState1 } from "./components";
39
35
  export { EventData } from "./components/overlay/selection.utils";
@@ -404,7 +400,6 @@ export namespace Components {
404
400
  "filterEntities": Record<string, LogicFunction>;
405
401
  "filterItems": MultiFilterItem;
406
402
  "filterNames": Record<string, string>;
407
- "filterTypes": Record<string, string[]>;
408
403
  "getChanges": () => Promise<ShowData | undefined>;
409
404
  "show": (newEntity?: ShowData) => Promise<void>;
410
405
  }
@@ -1712,7 +1707,6 @@ declare namespace LocalJSX {
1712
1707
  "filterEntities"?: Record<string, LogicFunction>;
1713
1708
  "filterItems"?: MultiFilterItem;
1714
1709
  "filterNames"?: Record<string, string>;
1715
- "filterTypes"?: Record<string, string[]>;
1716
1710
  "onFilterChange"?: (event: RevogrFilterPanelCustomEvent<MultiFilterItem>) => void;
1717
1711
  }
1718
1712
  /**
@@ -1,4 +1,6 @@
1
1
  import { LogicFunction } from './filter.types';
2
+ export declare const filterCoreFunctionsIndexedByType: Record<FilterType, LogicFunction>;
3
+ export declare const filterTypes: Record<string, FilterType[]>;
2
4
  export declare const filterNames: {
3
5
  none: string;
4
6
  empty: string;
@@ -16,5 +18,3 @@ export declare const filterNames: {
16
18
  lte: string;
17
19
  };
18
20
  export type FilterType = keyof typeof filterNames;
19
- export declare const filterEntities: Record<FilterType, LogicFunction>;
20
- export declare const filterTypes: Record<string, FilterType[]>;
@@ -1,31 +1,8 @@
1
1
  import { EventEmitter, VNode } from '../../stencil-public-runtime';
2
- import { FilterType } from './filter.service';
3
2
  import '../../utils/closest.polifill';
4
- import { LogicFunction } from './filter.types';
5
- import { FilterCaptions } from './filter.plugin';
3
+ import { FilterCaptions, LogicFunction, MultiFilterItem, ShowData } from './filter.types';
6
4
  import { ColumnProp } from "../../types/index";
7
- export type FilterItem = {
8
- prop?: ColumnProp;
9
- type?: FilterType;
10
- value?: any;
11
- };
12
- export type FilterData = {
13
- id: number;
14
- type: FilterType;
15
- value?: any;
16
- relation: 'and' | 'or';
17
- };
18
- export type MultiFilterItem = {
19
- [prop: string]: FilterData[];
20
- };
21
- export type ShowData = {
22
- x: number;
23
- y: number;
24
- /**
25
- * Auto correct position if it is out of document bounds
26
- */
27
- autoCorrect?: boolean;
28
- } & FilterItem;
5
+ import { FilterType } from './filter.indexed';
29
6
  /**
30
7
  * Filter panel for editing filters
31
8
  */
@@ -41,7 +18,6 @@ export declare class FilterPanel {
41
18
  currentFilterType: FilterType;
42
19
  changes: ShowData | undefined;
43
20
  filterItems: MultiFilterItem;
44
- filterTypes: Record<string, string[]>;
45
21
  filterNames: Record<string, string>;
46
22
  filterEntities: Record<string, LogicFunction>;
47
23
  filterCaptions: FilterCaptions | undefined;
@@ -51,7 +27,7 @@ export declare class FilterPanel {
51
27
  show(newEntity?: ShowData): Promise<void>;
52
28
  getChanges(): Promise<ShowData | undefined>;
53
29
  componentWillRender(): void;
54
- renderSelectOptions(type: FilterType, isDefaultTypeRemoved?: boolean): VNode[];
30
+ renderSelectOptions(type: FilterType, isDefaultTypeRemoved?: boolean): VNode[] | undefined;
55
31
  renderExtra(prop: ColumnProp, index: number): any;
56
32
  getFilterItemsList(): any;
57
33
  private autoCorrect;
@@ -1,28 +1,6 @@
1
1
  import { BasePlugin } from '../base.plugin';
2
- import { MultiFilterItem } from './filter.panel';
3
- import { FilterType } from './filter.service';
4
- import { LogicFunction } from './filter.types';
5
- import { ColumnProp, ColumnRegular, DataType } from "../../types/index";
6
- import { PluginProviders } from "../../types/index";
7
- type CustomFilter = {
8
- columnFilterType: string;
9
- name: string;
10
- func: LogicFunction;
11
- };
12
- export type FilterCaptions = {
13
- title: string;
14
- save: string;
15
- reset: string;
16
- cancel: string;
17
- add: string;
18
- placeholder: string;
19
- and: string;
20
- or: string;
21
- };
22
- export type FilterLocalization = {
23
- captions: FilterCaptions;
24
- filterNames: Record<FilterType, string>;
25
- };
2
+ import { ColumnFilterConfig, FilterCollection, LogicFunction, MultiFilterItem } from './filter.types';
3
+ import { ColumnRegular, DataType, PluginProviders } from "../../types/index";
26
4
  /**
27
5
  * @typedef ColumnFilterConfig
28
6
  * @type {object}
@@ -37,22 +15,6 @@ export type FilterLocalization = {
37
15
  /**
38
16
  * @internal
39
17
  */
40
- export type ColumnFilterConfig = {
41
- collection?: FilterCollection;
42
- include?: string[];
43
- customFilters?: Record<string, CustomFilter>;
44
- filterProp?: string;
45
- localization?: FilterLocalization;
46
- multiFilterItems?: MultiFilterItem;
47
- disableDynamicFiltering?: boolean;
48
- };
49
- type HeaderEvent = CustomEvent<ColumnRegular>;
50
- type FilterCollectionItem = {
51
- filter: LogicFunction;
52
- type: FilterType;
53
- value?: any;
54
- };
55
- export type FilterCollection = Record<ColumnProp, FilterCollectionItem>;
56
18
  export declare const FILTER_TRIMMED_TYPE = "filter";
57
19
  export declare const FILTER_CONFIG_CHANGED_EVENT = "filterconfigchanged";
58
20
  export declare class FilterPlugin extends BasePlugin {
@@ -60,26 +22,31 @@ export declare class FilterPlugin extends BasePlugin {
60
22
  pop?: HTMLRevogrFilterPanelElement;
61
23
  filterCollection: FilterCollection;
62
24
  multiFilterItems: MultiFilterItem;
63
- possibleFilters: Record<string, string[]>;
64
- possibleFilterNames: Record<string, string>;
65
- possibleFilterEntities: Record<string, LogicFunction>;
25
+ filterByType: Record<string, string[]>;
26
+ filterNameIndexByType: Record<string, string>;
27
+ filterFunctionsIndexedByType: Record<string, LogicFunction>;
66
28
  filterProp: string;
67
29
  constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, config?: ColumnFilterConfig);
68
30
  initConfig(config: ColumnFilterConfig): void;
69
- headerclick(e: HeaderEvent): Promise<void>;
31
+ headerclick(e: CustomEvent<ColumnRegular>): Promise<void>;
70
32
  getColumnFilter(type?: boolean | string | string[]): Record<string, string[]>;
71
33
  isValidType(type: any): type is string;
34
+ /**
35
+ * Called on internal component change
36
+ */
72
37
  onFilterChange(filterItems: MultiFilterItem): Promise<void>;
73
38
  /**
74
39
  * Triggers grid filtering
75
40
  */
76
- doFiltering(collection: FilterCollection, items: DataType[], columns: ColumnRegular[], filterItems: MultiFilterItem): Promise<void>;
41
+ doFiltering(collection: FilterCollection, source: DataType[], columns: ColumnRegular[], filterItems: MultiFilterItem): Promise<void>;
77
42
  clearFiltering(): Promise<void>;
78
43
  runFiltering(): Promise<void>;
79
44
  getData(): Promise<{
80
45
  source: DataType[];
81
46
  columns: ColumnRegular[];
82
47
  }>;
83
- getRowFilter(rows: DataType[], filterItems: MultiFilterItem): Record<number, boolean>;
48
+ /**
49
+ * Get trimmed rows based on filter
50
+ */
51
+ getRowFilter(rows: DataType[], filterItems: MultiFilterItem, columnByProp: Record<string, ColumnRegular>): Record<number, boolean>;
84
52
  }
85
- export {};
@@ -1,8 +1,93 @@
1
+ import { ColumnProp } from "../../types/index";
2
+ import { FilterType } from './filter.indexed';
1
3
  export type DateEnum = 'today' | 'yesterday' | 'tomorrow' | 'thisweek' | 'lastweek' | 'nextweek' | 'thismonth' | 'lastmonth' | 'nextmonth' | 'thisyear' | 'lastyear' | 'nextyear';
2
4
  export type ExtraField = 'input' | 'select' | 'multi' | 'datepicker';
3
5
  export type LogicFunctionParam = any;
4
- export type LogicFunctionExtraParam = 'select' | 'input' | 'multi' | 'datepicker' | undefined | string | number | Date | DateEnum | null | undefined | string[] | number[];
6
+ export type LogicFunctionExtraParam = 'select' | 'input' | 'multi' | 'datepicker' | number | Date | DateEnum | null | undefined | string | string[] | number[];
5
7
  export type LogicFunction = {
6
8
  (value: LogicFunctionParam, extra?: LogicFunctionExtraParam): boolean;
7
9
  extra?: ExtraField;
8
10
  };
11
+ type CustomFilter = {
12
+ columnFilterType: string;
13
+ name: string;
14
+ func: LogicFunction;
15
+ };
16
+ export type FilterCaptions = {
17
+ title: string;
18
+ save: string;
19
+ reset: string;
20
+ cancel: string;
21
+ add: string;
22
+ placeholder: string;
23
+ and: string;
24
+ or: string;
25
+ };
26
+ export type FilterLocalization = {
27
+ captions: FilterCaptions;
28
+ filterNames: Record<FilterType, string>;
29
+ };
30
+ /**
31
+ * Filter configuration for a column. This is the type of the `filter` property on a column.
32
+ */
33
+ export type ColumnFilterConfig = {
34
+ /**
35
+ * The collection of filters to be applied to the column.
36
+ */
37
+ collection?: FilterCollection;
38
+ /**
39
+ * The names of the filters to be included in the filter dropdown.
40
+ */
41
+ include?: string[];
42
+ /**
43
+ * A mapping of custom filter names to custom filter functions.
44
+ */
45
+ customFilters?: Record<string, CustomFilter>;
46
+ /**
47
+ * The property on the column idintifying which has the filter is applied.
48
+ */
49
+ filterProp?: string;
50
+ /**
51
+ * The localization for the filter dropdown.
52
+ */
53
+ localization?: FilterLocalization;
54
+ /**
55
+ * Information about the multi-filter items.
56
+ */
57
+ multiFilterItems?: MultiFilterItem;
58
+ /**
59
+ * Whether or not to disable dynamic filtering. If set to true, the filter will only be applied
60
+ * when the user clicks on the filter button.
61
+ */
62
+ disableDynamicFiltering?: boolean;
63
+ };
64
+ type FilterCollectionItem = {
65
+ filter: LogicFunction;
66
+ type: FilterType;
67
+ value?: any;
68
+ };
69
+ export type FilterCollection = Record<ColumnProp, FilterCollectionItem>;
70
+ export type FilterItem = {
71
+ prop?: ColumnProp;
72
+ type?: FilterType;
73
+ value?: any;
74
+ };
75
+ export type FilterData = {
76
+ id: number;
77
+ type: FilterType;
78
+ value?: any;
79
+ relation: 'and' | 'or';
80
+ };
81
+ export type MultiFilterItem = {
82
+ [prop: string]: FilterData[];
83
+ };
84
+ export type ShowData = {
85
+ x: number;
86
+ y: number;
87
+ /**
88
+ * Auto correct position if it is out of document bounds
89
+ */
90
+ autoCorrect?: boolean;
91
+ filterTypes?: Record<string, string[]>;
92
+ } & FilterItem;
93
+ export {};
@@ -7,6 +7,7 @@ type SortingOrder = Record<ColumnProp, 'asc' | 'desc' | undefined>;
7
7
  export default class ColumnDataProvider {
8
8
  readonly dataSources: ColumnDataSources;
9
9
  sorting: Sorting | null;
10
+ collection: ColumnCollection | null;
10
11
  get order(): SortingOrder;
11
12
  get stores(): ColumnDataSources;
12
13
  constructor();
@@ -15,7 +16,7 @@ export default class ColumnDataProvider {
15
16
  getRawColumns(): Record<DimensionCols, ColumnRegular[]>;
16
17
  getColumns(type?: DimensionCols | 'all'): ColumnRegular[];
17
18
  getColumnIndexByProp(prop: ColumnProp, type: DimensionCols): number;
18
- getColumnByProp(prop: ColumnProp, type: DimensionCols): ColumnRegular | undefined;
19
+ getColumnByProp(prop: ColumnProp): ColumnRegular[] | undefined;
19
20
  refreshByType(type: DimensionCols): void;
20
21
  setColumns(data: ColumnCollection): ColumnCollection;
21
22
  updateColumns(cols: ColumnRegular[]): void;
@@ -1,4 +1,4 @@
1
1
  import { ThemePackage } from '../types/theme';
2
- export default class ThemeCompact implements ThemePackage {
2
+ export declare class ThemeCompact implements ThemePackage {
3
3
  defaultRowSize: number;
4
4
  }