@revolist/revogrid 4.9.28 → 4.9.30

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 (212) hide show
  1. package/dist/cjs/{column.drag.plugin-34501a1e.js → column.drag.plugin-350ccc11.js} +100 -34
  2. package/dist/cjs/column.drag.plugin-350ccc11.js.map +1 -0
  3. package/dist/cjs/{column.service-9d63ff18.js → column.service-affe0219.js} +191 -3
  4. package/dist/cjs/column.service-affe0219.js.map +1 -0
  5. package/dist/cjs/{edit.utils-093fe9cd.js → edit.utils-c726b9a0.js} +2 -2
  6. package/dist/cjs/{edit.utils-093fe9cd.js.map → edit.utils-c726b9a0.js.map} +1 -1
  7. package/dist/cjs/{header-cell-renderer-e4258dfd.js → header-cell-renderer-820a866d.js} +2 -2
  8. package/dist/cjs/{header-cell-renderer-e4258dfd.js.map → header-cell-renderer-820a866d.js.map} +1 -1
  9. package/dist/cjs/{index-a9ee8eef.js → index-01270cfd.js} +12 -263
  10. package/dist/cjs/index-01270cfd.js.map +1 -0
  11. package/dist/cjs/index-10d10c55.js +2 -2
  12. package/dist/cjs/index.cjs.js +9 -7
  13. package/dist/cjs/index.cjs.js.map +1 -1
  14. package/dist/cjs/{key.utils-1438f2ac.js → key.utils-9739c6e8.js} +2 -2
  15. package/dist/cjs/{key.utils-1438f2ac.js.map → key.utils-9739c6e8.js.map} +1 -1
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/cjs/revo-grid.cjs.entry.js +89 -50
  18. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  19. package/dist/cjs/revo-grid.cjs.js +1 -1
  20. package/dist/cjs/{revogr-attribution_6.cjs.entry.js → revogr-attribution_7.cjs.entry.js} +76 -35
  21. package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -0
  22. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +5 -5
  23. package/dist/cjs/revogr-data_4.cjs.entry.js +14 -10
  24. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  25. package/dist/cjs/revogr-filter-panel.cjs.entry.js +21 -9
  26. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
  27. package/dist/cjs/{row-header-utils-eb5949b3.js → row-header-utils-63591189.js} +2 -2
  28. package/dist/cjs/{row-header-utils-eb5949b3.js.map → row-header-utils-63591189.js.map} +1 -1
  29. package/dist/cjs/{text-editor-ea3badef.js → text-editor-fc7b1ea9.js} +3 -3
  30. package/dist/cjs/{text-editor-ea3badef.js.map → text-editor-fc7b1ea9.js.map} +1 -1
  31. package/dist/cjs/{throttle-6fecba1e.js → throttle-64eee101.js} +2 -2
  32. package/dist/cjs/{throttle-6fecba1e.js.map → throttle-64eee101.js.map} +1 -1
  33. package/dist/collection/collection-manifest.json +1 -0
  34. package/dist/collection/components/data/revogr-data-style.css +3 -3
  35. package/dist/collection/components/editors/revogr-edit-style.css +3 -3
  36. package/dist/collection/components/extra/revogr-extra.js +78 -0
  37. package/dist/collection/components/extra/revogr-extra.js.map +1 -0
  38. package/dist/collection/components/header/revogr-header-style.css +3 -3
  39. package/dist/collection/components/header/revogr-header.js +31 -2
  40. package/dist/collection/components/header/revogr-header.js.map +1 -1
  41. package/dist/collection/components/overlay/autofill.service.js.map +1 -1
  42. package/dist/collection/components/overlay/revogr-overlay-selection.js +66 -19
  43. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  44. package/dist/collection/components/overlay/revogr-overlay-style.css +3 -3
  45. package/dist/collection/components/overlay/selection.utils.js +1 -5
  46. package/dist/collection/components/overlay/selection.utils.js.map +1 -1
  47. package/dist/collection/components/revoGrid/revo-grid-style.css +3 -3
  48. package/dist/collection/components/revoGrid/revo-grid.js +56 -16
  49. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  50. package/dist/collection/components/revoGrid/viewport.service.js +8 -7
  51. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
  52. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +3 -3
  53. package/dist/collection/components/scrollable/revogr-scroll-style.css +3 -3
  54. package/dist/collection/components/selectionFocus/revogr-focus-style.css +3 -3
  55. package/dist/collection/components/selectionFocus/revogr-focus.js +10 -3
  56. package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -1
  57. package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +3 -3
  58. package/dist/collection/components/selectionTempRange/revogr-temp-range.js +10 -4
  59. package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -1
  60. package/dist/collection/plugins/filter/filter.panel.js +22 -10
  61. package/dist/collection/plugins/filter/filter.panel.js.map +1 -1
  62. package/dist/collection/plugins/filter/filter.plugin.js +10 -13
  63. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  64. package/dist/collection/plugins/filter/filter.style.css +6 -3
  65. package/dist/collection/plugins/filter/filter.types.js.map +1 -1
  66. package/dist/collection/serve/controller.js +1 -1
  67. package/dist/collection/serve/data.js +5 -1
  68. package/dist/collection/services/column.data.provider.js +16 -13
  69. package/dist/collection/services/column.data.provider.js.map +1 -1
  70. package/dist/collection/services/dimension.provider.js +15 -7
  71. package/dist/collection/services/dimension.provider.js.map +1 -1
  72. package/dist/collection/store/dataSource/data.store.js +6 -3
  73. package/dist/collection/store/dataSource/data.store.js.map +1 -1
  74. package/dist/collection/store/dimension/dimension.helpers.js +2 -8
  75. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -1
  76. package/dist/collection/types/interfaces.js.map +1 -1
  77. package/dist/collection/utils/column.utils.js +3 -0
  78. package/dist/collection/utils/column.utils.js.map +1 -1
  79. package/dist/esm/{column.drag.plugin-1474c3ae.js → column.drag.plugin-cab965af.js} +85 -21
  80. package/dist/esm/column.drag.plugin-cab965af.js.map +1 -0
  81. package/dist/esm/{column.service-9e1f693c.js → column.service-c66e75f2.js} +189 -3
  82. package/dist/esm/column.service-c66e75f2.js.map +1 -0
  83. package/dist/esm/{edit.utils-1eeabeab.js → edit.utils-19a4c775.js} +2 -2
  84. package/dist/esm/{edit.utils-1eeabeab.js.map → edit.utils-19a4c775.js.map} +1 -1
  85. package/dist/esm/{header-cell-renderer-2ef5f8a1.js → header-cell-renderer-39ed6d63.js} +2 -2
  86. package/dist/esm/{header-cell-renderer-2ef5f8a1.js.map → header-cell-renderer-39ed6d63.js.map} +1 -1
  87. package/dist/esm/index-a61f225b.js +2 -2
  88. package/dist/esm/{index-b6586f9b.js → index-ba44e9d4.js} +10 -261
  89. package/dist/esm/index-ba44e9d4.js.map +1 -0
  90. package/dist/esm/index.js +7 -7
  91. package/dist/esm/{key.utils-562c749e.js → key.utils-7d553ef4.js} +2 -2
  92. package/dist/esm/{key.utils-562c749e.js.map → key.utils-7d553ef4.js.map} +1 -1
  93. package/dist/esm/loader.js +1 -1
  94. package/dist/esm/revo-grid.entry.js +82 -43
  95. package/dist/esm/revo-grid.entry.js.map +1 -1
  96. package/dist/esm/revo-grid.js +1 -1
  97. package/dist/esm/{revogr-attribution_6.entry.js → revogr-attribution_7.entry.js} +76 -36
  98. package/dist/esm/revogr-attribution_7.entry.js.map +1 -0
  99. package/dist/esm/revogr-clipboard_3.entry.js +5 -5
  100. package/dist/esm/revogr-data_4.entry.js +13 -9
  101. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  102. package/dist/esm/revogr-filter-panel.entry.js +21 -9
  103. package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
  104. package/dist/esm/{row-header-utils-e043f744.js → row-header-utils-0e99306d.js} +2 -2
  105. package/dist/esm/{row-header-utils-e043f744.js.map → row-header-utils-0e99306d.js.map} +1 -1
  106. package/dist/esm/{text-editor-654f5d53.js → text-editor-b624b721.js} +3 -3
  107. package/dist/esm/{text-editor-654f5d53.js.map → text-editor-b624b721.js.map} +1 -1
  108. package/dist/esm/{throttle-bb3169c7.js → throttle-d31899f3.js} +2 -2
  109. package/dist/esm/{throttle-bb3169c7.js.map → throttle-d31899f3.js.map} +1 -1
  110. package/dist/revo-grid/column.drag.plugin-cab965af.js +5 -0
  111. package/dist/revo-grid/column.drag.plugin-cab965af.js.map +1 -0
  112. package/dist/revo-grid/column.service-c66e75f2.js +5 -0
  113. package/dist/revo-grid/column.service-c66e75f2.js.map +1 -0
  114. package/dist/revo-grid/{edit.utils-1eeabeab.js → edit.utils-19a4c775.js} +2 -2
  115. package/dist/revo-grid/{header-cell-renderer-2ef5f8a1.js → header-cell-renderer-39ed6d63.js} +2 -2
  116. package/dist/revo-grid/{index-b6586f9b.js → index-ba44e9d4.js} +2 -2
  117. package/dist/revo-grid/index-ba44e9d4.js.map +1 -0
  118. package/dist/revo-grid/index.esm.js +1 -1
  119. package/dist/revo-grid/key.utils-7d553ef4.js +5 -0
  120. package/dist/revo-grid/{key.utils-562c749e.js.map → key.utils-7d553ef4.js.map} +1 -1
  121. package/dist/revo-grid/revo-grid.entry.js +1 -1
  122. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  123. package/dist/revo-grid/revo-grid.esm.js +1 -1
  124. package/dist/revo-grid/revo-grid.esm.js.map +1 -1
  125. package/dist/revo-grid/revogr-attribution_7.entry.js +5 -0
  126. package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -0
  127. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  128. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  129. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  130. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  131. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  132. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
  133. package/dist/revo-grid/row-header-utils-0e99306d.js +5 -0
  134. package/dist/revo-grid/text-editor-b624b721.js +5 -0
  135. package/dist/revo-grid/{throttle-bb3169c7.js → throttle-d31899f3.js} +2 -2
  136. package/dist/types/components/extra/revogr-extra.d.ts +24 -0
  137. package/dist/types/components/header/revogr-header.d.ts +7 -2
  138. package/dist/types/components/overlay/autofill.service.d.ts +1 -1
  139. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +8 -2
  140. package/dist/types/components/overlay/selection.utils.d.ts +7 -4
  141. package/dist/types/components/revoGrid/revo-grid.d.ts +22 -13
  142. package/dist/types/components.d.ts +52 -6
  143. package/dist/types/plugins/filter/filter.panel.d.ts +3 -0
  144. package/dist/types/plugins/filter/filter.plugin.d.ts +2 -5
  145. package/dist/types/plugins/filter/filter.types.d.ts +3 -2
  146. package/dist/types/services/column.data.provider.d.ts +5 -1
  147. package/dist/types/services/dimension.provider.d.ts +5 -0
  148. package/dist/types/store/dataSource/data.store.d.ts +2 -1
  149. package/dist/types/store/dimension/dimension.helpers.d.ts +1 -1
  150. package/dist/types/types/interfaces.d.ts +3 -1
  151. package/dist/types/utils/column.utils.d.ts +3 -0
  152. package/hydrate/index.js +301 -172
  153. package/hydrate/index.mjs +301 -172
  154. package/package.json +1 -1
  155. package/standalone/column.service.js +188 -2
  156. package/standalone/column.service.js.map +1 -1
  157. package/standalone/{reduce.js → data.store.js} +8 -188
  158. package/standalone/data.store.js.map +1 -0
  159. package/standalone/dimension.helpers.js +4 -75
  160. package/standalone/dimension.helpers.js.map +1 -1
  161. package/standalone/index.d.ts +2 -0
  162. package/standalone/index.js +3 -2
  163. package/standalone/index.js.map +1 -1
  164. package/standalone/revo-grid.js +174 -65
  165. package/standalone/revo-grid.js.map +1 -1
  166. package/standalone/revogr-data2.js +3 -3
  167. package/standalone/revogr-edit2.js +1 -1
  168. package/standalone/revogr-extra.d.ts +11 -0
  169. package/standalone/revogr-extra.js +11 -0
  170. package/standalone/revogr-extra.js.map +1 -0
  171. package/standalone/revogr-extra2.js +45 -0
  172. package/standalone/revogr-extra2.js.map +1 -0
  173. package/standalone/revogr-filter-panel.js +21 -9
  174. package/standalone/revogr-filter-panel.js.map +1 -1
  175. package/standalone/revogr-focus2.js +12 -5
  176. package/standalone/revogr-focus2.js.map +1 -1
  177. package/standalone/revogr-header2.js +9 -5
  178. package/standalone/revogr-header2.js.map +1 -1
  179. package/standalone/revogr-order-editor2.js +1 -1
  180. package/standalone/revogr-overlay-selection2.js +30 -18
  181. package/standalone/revogr-overlay-selection2.js.map +1 -1
  182. package/standalone/revogr-row-headers2.js +1 -1
  183. package/standalone/revogr-scroll-virtual2.js +1 -1
  184. package/standalone/revogr-temp-range2.js +11 -5
  185. package/standalone/revogr-temp-range2.js.map +1 -1
  186. package/standalone/revogr-viewport-scroll2.js +1 -1
  187. package/standalone/selection.utils.js +2 -6
  188. package/standalone/selection.utils.js.map +1 -1
  189. package/dist/cjs/column.drag.plugin-34501a1e.js.map +0 -1
  190. package/dist/cjs/column.service-9d63ff18.js.map +0 -1
  191. package/dist/cjs/index-a9ee8eef.js.map +0 -1
  192. package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +0 -1
  193. package/dist/esm/column.drag.plugin-1474c3ae.js.map +0 -1
  194. package/dist/esm/column.service-9e1f693c.js.map +0 -1
  195. package/dist/esm/index-b6586f9b.js.map +0 -1
  196. package/dist/esm/revogr-attribution_6.entry.js.map +0 -1
  197. package/dist/revo-grid/column.drag.plugin-1474c3ae.js +0 -5
  198. package/dist/revo-grid/column.drag.plugin-1474c3ae.js.map +0 -1
  199. package/dist/revo-grid/column.service-9e1f693c.js +0 -5
  200. package/dist/revo-grid/column.service-9e1f693c.js.map +0 -1
  201. package/dist/revo-grid/index-b6586f9b.js.map +0 -1
  202. package/dist/revo-grid/key.utils-562c749e.js +0 -5
  203. package/dist/revo-grid/revogr-attribution_6.entry.js +0 -5
  204. package/dist/revo-grid/revogr-attribution_6.entry.js.map +0 -1
  205. package/dist/revo-grid/row-header-utils-e043f744.js +0 -5
  206. package/dist/revo-grid/text-editor-654f5d53.js +0 -5
  207. package/standalone/reduce.js.map +0 -1
  208. /package/dist/revo-grid/{edit.utils-1eeabeab.js.map → edit.utils-19a4c775.js.map} +0 -0
  209. /package/dist/revo-grid/{header-cell-renderer-2ef5f8a1.js.map → header-cell-renderer-39ed6d63.js.map} +0 -0
  210. /package/dist/revo-grid/{row-header-utils-e043f744.js.map → row-header-utils-0e99306d.js.map} +0 -0
  211. /package/dist/revo-grid/{text-editor-654f5d53.js.map → text-editor-b624b721.js.map} +0 -0
  212. /package/dist/revo-grid/{throttle-bb3169c7.js.map → throttle-d31899f3.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","getFilterItemsList","_a","propFilters","capts","assign","filterCaptions","h","key","map","d","index","andOrButton","onClick","toggleFilterAndOr","id","AndOrButton","text","relation","class","onChange","onFilterTypeChange","renderSelectOptions","onRemoveFilter","TrashButton","renderExtra","autoCorrect","pos","getBoundingClientRect","maxLeft","window","innerWidth","width","left","offsetLeft","style","_b","setTimeout","input","HTMLInputElement","focus","disableDynamicFiltering","onAddNewFilter","addNewFilterToProp","push","onUserInput","event","onKeyDown","toLowerCase","stopPropagation","onSave","onCancel","onReset","assertChanges","resetChange","items","findIndex","splice","Error","isDefaultTypeRemoved","options","selected","filterNames","gIndex","filterTypes","k","disabled","currentFilter","filterEntities","extra","onInput","bind","render","Host","display","x","top","y","ref","slot"],"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\n @Event() filterChange: EventEmitter<MultiFilterItem>;\n @Event() resetChange: EventEmitter<ColumnProp>;\n\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 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 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 this.resetChange.emit(this.changes?.prop);\n\n // this updates the DOM which is used by getFilterItemsList() key\n this.filterId++;\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\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 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 <slot slot=\"header\" />\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 <slot />\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 <slot slot=\"footer\" />\n </Host>\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","ok","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","getFilterItemsList","_a","propFilters","capts","assign","filterCaptions","h","key","map","d","index","andOrButton","onClick","toggleFilterAndOr","id","AndOrButton","text","relation","class","onChange","onFilterTypeChange","renderSelectOptions","onRemoveFilter","TrashButton","renderExtra","autoCorrect","pos","getBoundingClientRect","maxLeft","window","innerWidth","width","left","offsetLeft","style","_b","setTimeout","input","HTMLInputElement","focus","disableDynamicFiltering","onAddNewFilter","addNewFilterToProp","push","onUserInput","event","onKeyDown","toLowerCase","stopPropagation","onSave","onCancel","onReset","assertChanges","resetChange","items","findIndex","splice","Error","isDefaultTypeRemoved","options","selected","filterNames","gIndex","filterTypes","k","disabled","currentFilter","filterEntities","extra","onInput","bind","render","Host","display","x","top","y","ref","slot"],"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 max-height: calc(100% - 80px);\n min-width: 250px;\n overflow: auto;\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 {\n FilterCaptions,\n LogicFunction,\n MultiFilterItem,\n ShowData,\n} from './filter.types';\nimport { ColumnProp } from '@type';\nimport { FilterType } from './filter.indexed';\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 ok: 'Ok',\n save: 'Save',\n // drops the filter\n reset: 'Reset',\n cancel: 'Cancel',\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 /**\n * Disables dynamic filtering. A way to apply filters on Save only\n */\n @Prop() disableDynamicFiltering = false;\n\n @Event() filterChange: EventEmitter<MultiFilterItem>;\n @Event() resetChange: EventEmitter<ColumnProp>;\n\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 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 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) {\n this.debouncedApplyFilter();\n }\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) {\n this.debouncedApplyFilter();\n }\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) {\n this.debouncedApplyFilter();\n }\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 this.resetChange.emit(this.changes?.prop);\n\n // this updates the DOM which is used by getFilterItemsList() key\n this.filterId++;\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) {\n this.debouncedApplyFilter();\n }\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) {\n this.debouncedApplyFilter();\n }\n }\n\n private assertChanges() {\n if (!this.changes) {\n throw new Error('Changes required per edit');\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 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 <slot slot=\"header\" />\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 <slot />\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 <button\n id=\"revo-button-ok\"\n aria-label=\"ok\"\n class=\"revo-button green\"\n onClick={() => this.onCancel()}\n >\n {capts.cancel}\n </button>,\n ]}\n {!this.disableDynamicFiltering && [\n <button\n id=\"revo-button-ok\"\n aria-label=\"ok\"\n class=\"revo-button green\"\n onClick={() => this.onCancel()}\n >\n {capts.ok}\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 ]}\n </div>\n <slot slot=\"footer\" />\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ import{j as t,W as e,w as s}from"./index-ba44e9d4.js";function i(e,s,i,f,u){const l=t(u,e);const h=d(s);let m;if(h){let t=l.itemIndex-(h.itemIndex||0);if(t){m=a(Math.abs(t),Object.assign(Object.assign({positiveDirection:t>-1},u),s))}}const b=n(f,u.realSize,l);if(m){const t=o(l,i,b,m,u);if(t.length){r(m.items,t,m)}}if(!m){const t=c({firstItemStart:l.start,firstItemIndex:l.itemIndex,origSize:u.originItemSize,maxSize:b,maxCount:i,sizes:u.sizes});m={items:t,start:0,end:t.length-1}}return m}function n(t,e,s){return Math.min(t+(s.end-s.start),e)}function r(t,e,s){t.splice(s.end+1,0,...e);if(s.start>=s.end&&!(s.start===s.end&&s.start===0)){s.start+=e.length}s.end+=e.length}function o(t,e,s,i,n){const r=h(i);const o=c({sizes:n.sizes,firstItemStart:r.end,firstItemIndex:r.itemIndex+1,origSize:n.originItemSize,maxSize:s-(r.end-t.start),maxCount:e});return o}function c(t,e=0){const s=[];let i=t.firstItemIndex;let n=e;while(n<=t.maxSize&&i<t.maxCount){const e=f(i,t.sizes,t.origSize);s.push({start:t.firstItemStart+n,end:t.firstItemStart+n+e,itemIndex:i,size:e});n+=e;i++}return s}function a(t,e){var s,i;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 s=h(e);let i=o.start;const c=i+t;for(;i<c;i++){const t=s.itemIndex+1;const c=f(t,e.sizes,e.originItemSize);if(s.end+c>e.realSize){break}let a=i%r;if(!n[a]){throw new Error("incorrect index")}n[a]=s={start:s.end,end:s.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=((s=c===null||c===void 0?void 0:c.itemIndex)!==null&&s!==void 0?s:0)-1;const l=f(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=(i=c===null||c===void 0?void 0:c.start)!==null&&i!==void 0?i:0;n[d]=c={start:h-l,end:h,itemIndex:t,size:l};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 f(t,e,s=0){if(e&&e[t]){return e[t]}return s}function u(t,e,s,i){if(!s||!i){return false}return t>=s.start&&t<=s.end||t>s.end&&i.end===e}function l(t,e,s,i){var n;if(!s){return false}return e+t>((n=i===null||i===void 0?void 0:i.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,s,i){const n=[...t];const r=n.length;let o=i;let c=0;let a=e;if(!r){return[]}while(c<r){const t=n[a];t.start=o;t.size=s;t.end=t.start+s;o=t.end;a++;c++;if(a===r){a=0}}return n}function b(){return{items:[],start:0,end:0,virtualSize:0,realCount:0}}class v{get lastCoordinate(){return this.lastKnownScroll}set lastCoordinate(t){this.lastKnownScroll=t}constructor(t){this.type=t;this.lastKnownScroll=0;this.store=e(b())}setViewPortCoordinate(t,e,s=false){const n=this.store.get("virtualSize");if(!n){return}const c=1;const a=e.originItemSize*c;const f=a*2;const m=n+f;let b=0;if(e.realSize>n){b=e.realSize-n-a}let v=t;if(v<0){v=0}else if(v>b){v=b}this.lastCoordinate=v;v-=a;v=v<0?0:v<b?v:b;let j;if(s){j={items:[],start:0,end:0}}else{j=this.getItems()}const z=d(j);const x=h(j);let O={};if(!u(v,e.realSize,z,x)){O=Object.assign(Object.assign({},O),i(v,j,this.store.get("realCount"),m,e));this.setViewport(Object.assign({},O))}else if(l(v,m,z,x)){const t=[...j.items];const s=o(z,this.store.get("realCount"),m+v-z.start,j,{sizes:e.sizes,originItemSize:e.originItemSize});if(s.length){const e={start:this.store.get("start"),end:this.store.get("end")};r(t,s,e);O=Object.assign(Object.assign(Object.assign({},O),{items:[...t]}),e);this.setViewport(Object.assign({},O))}}}setOriginalSizes(t){const e=this.store.get("items");const i=e.length;if(!i){return}s(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){if(typeof t.realCount==="number"||typeof t.virtualSize==="number"){t=Object.assign(Object.assign({},t),{items:t.items||[]})}s(this.store,t)}}const j=10;const z=(t,e,s=50)=>(e===null||e===void 0?void 0:e.size)||Math.max((t.toString().length+1)*j,s);export{v as V,o as a,c as b,l as c,d,h as e,z as f,i as g,u as i,a as r,m as s,r as u};
5
+ //# sourceMappingURL=row-header-utils-0e99306d.js.map
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ import{f as i,d as t}from"./key.utils-7d553ef4.js";import{u as e}from"./index-ba44e9d4.js";class n{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 e();(i=this.editInput)===null||i===void 0?void 0:i.focus()}}onKeyDown(e){const n=i(e.key);const s=t(e.key);if((s||n)&&e.target&&this.saveCallback&&!e.isComposing){this.beforeDisconnect();this.saveCallback(this.getValue(),s)}}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 e,n;return i("input",{type:"text",enterKeyHint:"enter",value:(n=(e=this.editCell)===null||e===void 0?void 0:e.val)!==null&&n!==void 0?n:"",ref:i=>{this.editInput=i},onKeyDown:i=>this.onKeyDown(i)})}}export{n as T};
5
+ //# sourceMappingURL=text-editor-b624b721.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import{o as t}from"./index-b6586f9b.js";import{d as i,i as s}from"./debounce-7b511afc.js";const r={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const n=-1;function e(t,i,s=0){return t+(s?i-s:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:n,rgCol:n};this.params={rgRow:Object.assign({},r),rgCol:Object.assign({},r)}}setParams(t,i){const s=e(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:s-t.clientSize,virtualContentSize:s})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,s)=>{if(this.cfg.skipAnimationFrame){return i()}const r=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=s.bind(null,r)}));try{await i;const s=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,s);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:s.virtualSize?this.convert(t.coordinate,s,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,s=false,r,e=false){this.cancelScroll(i);if(!s&&this.previousScroll[i]===t){this.previousScroll[i]=n;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:r,outside:e})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return n}if(typeof i.maxSize==="number"&&t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,s;(s=(i=this.preventArtificialScroll)[t])===null||s===void 0?void 0:s.call(i);this.preventArtificialScroll[t]=null}convert(i,s,r=true){var n;const e=s.clientSize;const o=[0,((n=s.virtualContentSize)!==null&&n!==void 0?n:e)-e];const a=[0,s.contentSize-s.virtualSize];if(r){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 s=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return s>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c="Expected a function";function l(t,r,n){var e=true,o=true;if(typeof t!="function"){throw new TypeError(c)}if(s(n)){e="leading"in n?!!n.leading:e;o="trailing"in n?!!n.trailing:o}return i(t,r,{leading:e,maxWait:r,trailing:o})}export{a as L,o as a,e as g,l as t};
5
- //# sourceMappingURL=throttle-bb3169c7.js.map
4
+ import{q as t}from"./index-ba44e9d4.js";import{d as i,i as s}from"./debounce-7b511afc.js";const r={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,s=0){return t+(s?i-s: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({},r),rgCol:Object.assign({},r)}}setParams(t,i){const s=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:s-t.clientSize,virtualContentSize:s})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,s)=>{if(this.cfg.skipAnimationFrame){return i()}const r=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=s.bind(null,r)}));try{await i;const s=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,s);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:s.virtualSize?this.convert(t.coordinate,s,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,s=false,r,n=false){this.cancelScroll(i);if(!s&&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:r,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,s;(s=(i=this.preventArtificialScroll)[t])===null||s===void 0?void 0:s.call(i);this.preventArtificialScroll[t]=null}convert(i,s,r=true){var e;const n=s.clientSize;const o=[0,((e=s.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,s.contentSize-s.virtualSize];if(r){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 s=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return s>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c="Expected a function";function l(t,r,e){var n=true,o=true;if(typeof t!="function"){throw new TypeError(c)}if(s(e)){n="leading"in e?!!e.leading:n;o="trailing"in e?!!e.trailing:o}return i(t,r,{leading:n,maxWait:r,trailing:o})}export{a as L,o as a,n as g,l as t};
5
+ //# sourceMappingURL=throttle-d31899f3.js.map
@@ -0,0 +1,24 @@
1
+ import { VNode } from '../../stencil-public-runtime';
2
+ /**
3
+ * Contains extra elements for stencil components.
4
+ * Performs rendering and updates for external components.
5
+ */
6
+ /**
7
+ * @internal
8
+ */
9
+ export declare class RevoGridExtra {
10
+ /**
11
+ * Nodes to render
12
+ */
13
+ nodes: ((VNode) | (() => VNode))[] | null;
14
+ /**
15
+ * Force component to re-render
16
+ */
17
+ update: number;
18
+ /**
19
+ * Refreshes the extra component. Useful if you want to manually
20
+ * force the component to re-render.
21
+ */
22
+ refresh(): Promise<void>;
23
+ render(): VNode[] | undefined;
24
+ }
@@ -68,12 +68,17 @@ export declare class RevogrHeaderComponent {
68
68
  */
69
69
  headerdblClick: EventEmitter<InitialHeaderClick>;
70
70
  /**
71
- * Before each header cell render function. Allows to override cell properties
72
- */
71
+ * Before each header cell render function. Allows to override cell properties
72
+ */
73
73
  beforeHeaderRender: EventEmitter<HeaderRenderProps>;
74
+ /**
75
+ * After all header cells rendered. Finalizes cell rendering.
76
+ */
77
+ afterHeaderRender: EventEmitter<Providers<DimensionCols | 'rowHeaders'>>;
74
78
  element: HTMLStencilElement;
75
79
  private onResize;
76
80
  private onResizeGroup;
81
+ componentDidRender(): void;
77
82
  render(): any[];
78
83
  get providers(): Providers<DimensionCols | 'rowHeaders'>;
79
84
  }
@@ -8,7 +8,7 @@ type Config = {
8
8
  dimensionCol: Observable<DimensionSettingsState>;
9
9
  columnService: ColumnService;
10
10
  dataStore: Observable<DSourceState<DataType, DimensionRows>>;
11
- setTempRange(e: Nullable<TempRange> | null): Event;
11
+ setTempRange(e: Nullable<TempRange> | null): Event | null;
12
12
  selectionChanged(e: ChangedRange): Event;
13
13
  rangeCopy(e: ChangedRange): Event;
14
14
  rangeDataApply(e: BeforeRangeSaveDataDetails): CustomEvent;
@@ -91,11 +91,11 @@ export declare class OverlaySelection {
91
91
  */
92
92
  setEdit: EventEmitter<BeforeEdit>;
93
93
  /**
94
- * Before range applied.
94
+ * Before range applied. First step in triggerRangeEvent.
95
95
  */
96
96
  beforeApplyRange: EventEmitter<FocusRenderEvent>;
97
97
  /**
98
- * Before range selection applied.
98
+ * Before range selection applied. Second step in triggerRangeEvent.
99
99
  */
100
100
  beforeSetRange: EventEmitter;
101
101
  /**
@@ -118,6 +118,12 @@ export declare class OverlaySelection {
118
118
  * Set temp range area during autofill.
119
119
  */
120
120
  setTempRange: EventEmitter<Nullable<TempRange> | null>;
121
+ /**
122
+ * Before set temp range area during autofill.
123
+ */
124
+ beforeSetTempRange: EventEmitter<{
125
+ tempRange: Nullable<TempRange> | null;
126
+ } & EventData & AllDimensionType>;
121
127
  /**
122
128
  * Before cell get focused.
123
129
  * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.
@@ -1,5 +1,5 @@
1
- import { DSourceState } from "../../store/index";
2
- import { DimensionSettingsState, Cell, RangeArea, RangeAreaCss, DataLookup, DimensionRows, DataType, EditCellStore } from "../../types/index";
1
+ import { DimensionIndexInput, DSourceState } from "../../store/index";
2
+ import type { DimensionSettingsState, Cell, RangeArea, RangeAreaCss, DataLookup, DimensionRows, DataType, EditCellStore } from "../../types/index";
3
3
  import { Observable } from '../../utils/store.utils';
4
4
  export type EventData = {
5
5
  el: HTMLElement;
@@ -33,7 +33,11 @@ export declare function getCoordinate(range: RangeArea, focus: Cell, changes: Pa
33
33
  export declare function isAfterLast({ x, y }: Cell, lastCell: Cell): boolean;
34
34
  /** check if out of range */
35
35
  export declare function isBeforeFirst({ x, y }: Cell): boolean;
36
- export declare function getCell({ x, y, x1, y1 }: RangeArea, dimensionRow: DimensionSettingsState, dimensionCol: DimensionSettingsState): {
36
+ /** Compare cells, only 1 coordinate difference is possible */
37
+ export declare function styleByCellProps(styles: {
38
+ [key: string]: number;
39
+ }): RangeAreaCss;
40
+ export declare function getCell({ x, y, x1, y1 }: RangeArea, dimensionRow: Pick<DimensionIndexInput, 'indexToItem' | 'indexes' | 'originItemSize'>, dimensionCol: Pick<DimensionIndexInput, 'indexToItem' | 'indexes' | 'originItemSize'>): {
37
41
  left: number;
38
42
  right: number;
39
43
  top: number;
@@ -41,4 +45,3 @@ export declare function getCell({ x, y, x1, y1 }: RangeArea, dimensionRow: Dimen
41
45
  width: number;
42
46
  height: number;
43
47
  };
44
- export declare function getElStyle(range: RangeArea, dimensionRow: DimensionSettingsState, dimensionCol: DimensionSettingsState): RangeAreaCss;
@@ -5,10 +5,14 @@ import { DataProvider } from '../../services/data.provider';
5
5
  import { DSourceState } from "../../store/index";
6
6
  import DimensionProvider from '../../services/dimension.provider';
7
7
  import ViewportProvider from '../../services/viewport.provider';
8
+ import ThemeService from '../../themeManager/theme.service';
8
9
  import { AutoSizeColumnConfig } from '../../plugins/column.auto-size.plugin';
9
10
  import { DataInput } from '../../plugins/export/types';
10
11
  import { GroupingOptions } from '../../plugins/groupingRow/grouping.row.types';
11
- import { FocusedData } from './viewport.service';
12
+ import ViewportService, { FocusedData } from './viewport.service';
13
+ import GridScrollingService from './viewport.scrolling.service';
14
+ import SelectionStoreConnector from '../../services/selection.store.connector';
15
+ import { OrdererService } from '../order/order-renderer';
12
16
  import type { Observable } from '../../utils/store.utils';
13
17
  import type { GridPlugin } from '../../plugins/base.plugin';
14
18
  import { ColumnCollection } from '../../utils/column.utils';
@@ -183,7 +187,7 @@ export declare class RevoGridComponent {
183
187
  * Used for additional items creation such as plugin elements.
184
188
  * Should be set before grid render inside of plugins.
185
189
  */
186
- registerVNode: VNode[];
190
+ registerVNode: (VNode | (() => VNode))[];
187
191
  /**
188
192
  * Enable accessibility. If disabled, the grid will not be accessible.
189
193
  * @default true
@@ -400,6 +404,10 @@ export declare class RevoGridComponent {
400
404
  * Emmited before the grid is rendered.
401
405
  */
402
406
  beforegridrender: EventEmitter;
407
+ /**
408
+ * Emmited after the grid is rendered.
409
+ */
410
+ aftergridrender: EventEmitter;
403
411
  /**
404
412
  * Emmited after the grid is initialized. Connected to the DOM.
405
413
  */
@@ -534,22 +542,22 @@ export declare class RevoGridComponent {
534
542
  onHeaderClick(e: CustomEvent<InitialHeaderClick>): void;
535
543
  onCellFocus(e: CustomEvent<BeforeSaveDataDetails>): void;
536
544
  element: HTMLRevoGridElement;
537
- private extraElements;
538
- columnProvider: ColumnDataProvider;
545
+ extraElements: (VNode | (() => VNode))[];
546
+ columnProvider?: ColumnDataProvider;
539
547
  dataProvider?: DataProvider;
540
548
  dimensionProvider?: DimensionProvider;
541
- viewportProvider: ViewportProvider;
542
- private themeService;
543
- private viewport;
544
- private isInited;
545
- private orderService;
546
- private selectionStoreConnector;
547
- private scrollingService;
549
+ viewportProvider?: ViewportProvider;
550
+ themeService: ThemeService;
551
+ viewport: ViewportService | null;
552
+ isInited: boolean;
553
+ orderService: OrdererService;
554
+ selectionStoreConnector: SelectionStoreConnector;
555
+ scrollingService: GridScrollingService;
548
556
  /**
549
557
  * Plugins
550
558
  * Define plugins collection
551
559
  */
552
- private internalPlugins;
560
+ internalPlugins: PluginBaseComponent[];
553
561
  columnTypesChanged(): void;
554
562
  columnChanged(newVal?: (ColumnGrouping | ColumnRegular)[]): void;
555
563
  disableVirtualXChanged(newVal?: boolean, prevVal?: boolean): void;
@@ -572,7 +580,7 @@ export declare class RevoGridComponent {
572
580
  /**
573
581
  * Register external VNodes
574
582
  */
575
- registerOutsideVNodes(elements?: VNode[]): void;
583
+ registerOutsideVNodes(elements?: (VNode | (() => VNode))[]): void;
576
584
  additionalDataChanged(data: any): void;
577
585
  pluginsChanged(plugins?: GridPlugin[], _prevPlugins?: GridPlugin[]): void;
578
586
  private setPlugins;
@@ -587,6 +595,7 @@ export declare class RevoGridComponent {
587
595
  */
588
596
  componentWillLoad(): void;
589
597
  componentWillRender(): false | Promise<any[]>;
598
+ componentDidRender(): void;
590
599
  render(): any;
591
600
  disconnectedCallback(): void;
592
601
  }
@@ -5,7 +5,7 @@
5
5
  * It contains typing information for all components that exist in this project.
6
6
  */
7
7
  import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
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";
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, Providers, 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
11
  import { ColumnFilterConfig, FilterCaptions, FilterCollection, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
@@ -20,7 +20,7 @@ import { ResizeProps } from "./components/header/resizable.directive";
20
20
  import { HeaderRenderProps } from "./components/header/header-renderer";
21
21
  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";
22
22
  import { EventData } from "./components/overlay/selection.utils";
23
- 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";
23
+ 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, Providers, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
24
24
  export { GridPlugin } from "./plugins/base.plugin";
25
25
  export { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
26
26
  export { ColumnFilterConfig, FilterCaptions, FilterCollection, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
@@ -205,7 +205,7 @@ export namespace Components {
205
205
  /**
206
206
  * Register new virtual node inside of grid. Used for additional items creation such as plugin elements. Should be set before grid render inside of plugins.
207
207
  */
208
- "registerVNode": VNode[];
208
+ "registerVNode": (VNode | (() => VNode))[];
209
209
  /**
210
210
  * When true, columns are resizable.
211
211
  */
@@ -396,7 +396,20 @@ export namespace Components {
396
396
  */
397
397
  "saveOnClose": boolean;
398
398
  }
399
+ interface RevogrExtra {
400
+ /**
401
+ * Nodes to render
402
+ */
403
+ "nodes": ((VNode) | (() => VNode))[] | null;
404
+ /**
405
+ * Refreshes the extra component. Useful if you want to manually force the component to re-render.
406
+ */
407
+ "refresh": () => Promise<void>;
408
+ }
399
409
  interface RevogrFilterPanel {
410
+ /**
411
+ * Disables dynamic filtering. A way to apply filters on Save only
412
+ */
400
413
  "disableDynamicFiltering": boolean;
401
414
  "filterCaptions": FilterCaptions | undefined;
402
415
  "filterEntities": Record<string, LogicFunction>;
@@ -809,6 +822,7 @@ declare global {
809
822
  "filterconfigchanged": any;
810
823
  "rowheaderschanged": any;
811
824
  "beforegridrender": any;
825
+ "aftergridrender": any;
812
826
  "aftergridinit": any;
813
827
  "additionaldatachanged": any;
814
828
  "afterthemechanged": Theme;
@@ -941,6 +955,12 @@ declare global {
941
955
  prototype: HTMLRevogrEditElement;
942
956
  new (): HTMLRevogrEditElement;
943
957
  };
958
+ interface HTMLRevogrExtraElement extends Components.RevogrExtra, HTMLStencilElement {
959
+ }
960
+ var HTMLRevogrExtraElement: {
961
+ prototype: HTMLRevogrExtraElement;
962
+ new (): HTMLRevogrExtraElement;
963
+ };
944
964
  interface HTMLRevogrFilterPanelElementEventMap {
945
965
  "filterChange": MultiFilterItem;
946
966
  "resetChange": ColumnProp;
@@ -988,6 +1008,7 @@ declare global {
988
1008
  "beforeheaderresize": ColumnRegular[];
989
1009
  "headerdblclick": InitialHeaderClick;
990
1010
  "beforeheaderrender": HeaderRenderProps;
1011
+ "afterheaderrender": Providers<DimensionCols | 'rowHeaders'>;
991
1012
  }
992
1013
  interface HTMLRevogrHeaderElement extends Components.RevogrHeader, HTMLStencilElement {
993
1014
  addEventListener<K extends keyof HTMLRevogrHeaderElementEventMap>(type: K, listener: (this: HTMLRevogrHeaderElement, ev: RevogrHeaderCustomEvent<HTMLRevogrHeaderElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -1049,6 +1070,7 @@ declare global {
1049
1070
  "selectall": any;
1050
1071
  "canceledit": any;
1051
1072
  "settemprange": Nullable<TempRange> | null;
1073
+ "beforesettemprange": { tempRange: Nullable<TempRange> | null } & EventData & AllDimensionType;
1052
1074
  "applyfocus": FocusRenderEvent;
1053
1075
  "focuscell": ApplyFocusEvent;
1054
1076
  "beforerangedataapply": FocusRenderEvent;
@@ -1178,6 +1200,7 @@ declare global {
1178
1200
  "revogr-clipboard": HTMLRevogrClipboardElement;
1179
1201
  "revogr-data": HTMLRevogrDataElement;
1180
1202
  "revogr-edit": HTMLRevogrEditElement;
1203
+ "revogr-extra": HTMLRevogrExtraElement;
1181
1204
  "revogr-filter-panel": HTMLRevogrFilterPanelElement;
1182
1205
  "revogr-focus": HTMLRevogrFocusElement;
1183
1206
  "revogr-header": HTMLRevogrHeaderElement;
@@ -1318,6 +1341,10 @@ declare namespace LocalJSX {
1318
1341
  * Emmited after the grid is initialized. Connected to the DOM.
1319
1342
  */
1320
1343
  "onAftergridinit"?: (event: RevoGridCustomEvent<any>) => void;
1344
+ /**
1345
+ * Emmited after the grid is rendered.
1346
+ */
1347
+ "onAftergridrender"?: (event: RevoGridCustomEvent<any>) => void;
1321
1348
  /**
1322
1349
  * After main source/rows updated
1323
1350
  */
@@ -1485,7 +1512,7 @@ declare namespace LocalJSX {
1485
1512
  /**
1486
1513
  * Register new virtual node inside of grid. Used for additional items creation such as plugin elements. Should be set before grid render inside of plugins.
1487
1514
  */
1488
- "registerVNode"?: VNode[];
1515
+ "registerVNode"?: (VNode | (() => VNode))[];
1489
1516
  /**
1490
1517
  * When true, columns are resizable.
1491
1518
  */
@@ -1705,7 +1732,16 @@ declare namespace LocalJSX {
1705
1732
  */
1706
1733
  "saveOnClose"?: boolean;
1707
1734
  }
1735
+ interface RevogrExtra {
1736
+ /**
1737
+ * Nodes to render
1738
+ */
1739
+ "nodes"?: ((VNode) | (() => VNode))[] | null;
1740
+ }
1708
1741
  interface RevogrFilterPanel {
1742
+ /**
1743
+ * Disables dynamic filtering. A way to apply filters on Save only
1744
+ */
1709
1745
  "disableDynamicFiltering"?: boolean;
1710
1746
  "filterCaptions"?: FilterCaptions | undefined;
1711
1747
  "filterEntities"?: Record<string, LogicFunction>;
@@ -1793,6 +1829,10 @@ declare namespace LocalJSX {
1793
1829
  * Column groups
1794
1830
  */
1795
1831
  "groups"?: Groups;
1832
+ /**
1833
+ * After all header cells rendered. Finalizes cell rendering.
1834
+ */
1835
+ "onAfterheaderrender"?: (event: RevogrHeaderCustomEvent<Providers<DimensionCols | 'rowHeaders'>>) => void;
1796
1836
  /**
1797
1837
  * On initial header click
1798
1838
  */
@@ -1932,7 +1972,7 @@ declare namespace LocalJSX {
1932
1972
  */
1933
1973
  "onApplyfocus"?: (event: RevogrOverlaySelectionCustomEvent<FocusRenderEvent>) => void;
1934
1974
  /**
1935
- * Before range applied.
1975
+ * Before range applied. First step in triggerRangeEvent.
1936
1976
  */
1937
1977
  "onBeforeapplyrange"?: (event: RevogrOverlaySelectionCustomEvent<FocusRenderEvent>) => void;
1938
1978
  /**
@@ -1976,9 +2016,13 @@ declare namespace LocalJSX {
1976
2016
  */
1977
2017
  "onBeforerangedataapply"?: (event: RevogrOverlaySelectionCustomEvent<FocusRenderEvent>) => void;
1978
2018
  /**
1979
- * Before range selection applied.
2019
+ * Before range selection applied. Second step in triggerRangeEvent.
1980
2020
  */
1981
2021
  "onBeforesetrange"?: (event: RevogrOverlaySelectionCustomEvent<any>) => void;
2022
+ /**
2023
+ * Before set temp range area during autofill.
2024
+ */
2025
+ "onBeforesettemprange"?: (event: RevogrOverlaySelectionCustomEvent<{ tempRange: Nullable<TempRange> | null } & EventData & AllDimensionType>) => void;
1982
2026
  /**
1983
2027
  * Used for editors support when editor close requested.
1984
2028
  */
@@ -2171,6 +2215,7 @@ declare namespace LocalJSX {
2171
2215
  "revogr-clipboard": RevogrClipboard;
2172
2216
  "revogr-data": RevogrData;
2173
2217
  "revogr-edit": RevogrEdit;
2218
+ "revogr-extra": RevogrExtra;
2174
2219
  "revogr-filter-panel": RevogrFilterPanel;
2175
2220
  "revogr-focus": RevogrFocus;
2176
2221
  "revogr-header": RevogrHeader;
@@ -2217,6 +2262,7 @@ declare module "@stencil/core" {
2217
2262
  * and managing the lifecycle of the editor instance.
2218
2263
  */
2219
2264
  "revogr-edit": LocalJSX.RevogrEdit & JSXBase.HTMLAttributes<HTMLRevogrEditElement>;
2265
+ "revogr-extra": LocalJSX.RevogrExtra & JSXBase.HTMLAttributes<HTMLRevogrExtraElement>;
2220
2266
  "revogr-filter-panel": LocalJSX.RevogrFilterPanel & JSXBase.HTMLAttributes<HTMLRevogrFilterPanelElement>;
2221
2267
  /**
2222
2268
  * Focus component. Shows focus layer around the cell that is currently in focus.
@@ -21,6 +21,9 @@ export declare class FilterPanel {
21
21
  filterNames: Record<string, string>;
22
22
  filterEntities: Record<string, LogicFunction>;
23
23
  filterCaptions: FilterCaptions | undefined;
24
+ /**
25
+ * Disables dynamic filtering. A way to apply filters on Save only
26
+ */
24
27
  disableDynamicFiltering: boolean;
25
28
  filterChange: EventEmitter<MultiFilterItem>;
26
29
  resetChange: EventEmitter<ColumnProp>;
@@ -6,6 +6,7 @@ export * from './filter.indexed';
6
6
  export * from './filter.button';
7
7
  export declare const FILTER_TRIMMED_TYPE = "filter";
8
8
  export declare const FILTER_CONFIG_CHANGED_EVENT = "filterconfigchanged";
9
+ export declare const FILTE_PANEL = "revogr-filter-panel";
9
10
  /**
10
11
  * @typedef ColumnFilterConfig
11
12
  * @type {object}
@@ -14,7 +15,7 @@ export declare const FILTER_CONFIG_CHANGED_EVENT = "filterconfigchanged";
14
15
  * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.
15
16
  * @property {FilterLocalization|undefined} localization - translation for filter popup captions.
16
17
  * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering.
17
- * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering.
18
+ * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.
18
19
  * A way to define your own filter types per column
19
20
  */
20
21
  /**
@@ -46,10 +47,6 @@ export declare class FilterPlugin extends BasePlugin {
46
47
  doFiltering(collection: FilterCollection, source: DataType[], columns: ColumnRegular[], filterItems: MultiFilterItem): Promise<void>;
47
48
  clearFiltering(): Promise<void>;
48
49
  runFiltering(multiFilterItems: MultiFilterItem): Promise<void>;
49
- getData(): Promise<{
50
- source: DataType[];
51
- columns: ColumnRegular[];
52
- }>;
53
50
  /**
54
51
  * Get trimmed rows based on filter
55
52
  */
@@ -8,15 +8,16 @@ export type LogicFunction<T1 = LogicFunctionParam, T2 = LogicFunctionExtraParam>
8
8
  (value: T1, extra?: T2): boolean;
9
9
  extra?: ExtraField;
10
10
  };
11
- type CustomFilter = {
11
+ type CustomFilter<T1 = LogicFunctionParam, T2 = LogicFunctionExtraParam> = {
12
12
  columnFilterType: string;
13
13
  name: string;
14
- func: LogicFunction;
14
+ func: LogicFunction<T1, T2>;
15
15
  };
16
16
  export type FilterCaptions = {
17
17
  title: string;
18
18
  save: string;
19
19
  reset: string;
20
+ ok: string;
20
21
  cancel: string;
21
22
  add: string;
22
23
  placeholder: string;