@toolbox-web/grid 2.13.1 → 2.14.0
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.
- package/all.js +2 -2
- package/all.js.map +1 -1
- package/custom-elements.json +18 -0
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/lib/core/grid.d.ts +23 -0
- package/lib/core/internal/style-injector.d.ts +0 -8
- package/lib/plugins/filtering/index.js +1 -1
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/filtering/types.d.ts +0 -28
- package/lib/plugins/master-detail/MasterDetailPlugin.d.ts +0 -1
- package/lib/plugins/master-detail/index.js +1 -1
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/master-detail/types.d.ts +0 -2
- package/lib/plugins/responsive/index.js +1 -1
- package/lib/plugins/responsive/index.js.map +1 -1
- package/lib/plugins/responsive/types.d.ts +11 -2
- package/lib/plugins/server-side/datasource-types.d.ts +8 -0
- package/lib/plugins/server-side/index.js +1 -1
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/server-side/types.d.ts +9 -10
- package/lib/plugins/visibility/index.js +1 -1
- package/lib/plugins/visibility/index.js.map +1 -1
- package/lib/plugins/visibility/types.d.ts +5 -10
- package/lib/plugins/visibility/visibility.d.ts +5 -3
- package/package.json +1 -1
- package/themes/dg-theme-bootstrap.css +2 -2
- package/themes/dg-theme-contrast.css +1 -1
- package/themes/dg-theme-large.css +1 -1
- package/themes/dg-theme-material.css +2 -2
- package/themes/dg-theme-standard.css +1 -1
- package/themes/dg-theme-vibrant.css +1 -1
- package/umd/grid.all.umd.js +1 -1
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +1 -1
- package/umd/grid.umd.js.map +1 -1
- package/umd/plugins/filtering.umd.js +1 -1
- package/umd/plugins/filtering.umd.js.map +1 -1
- package/umd/plugins/master-detail.umd.js +1 -1
- package/umd/plugins/master-detail.umd.js.map +1 -1
- package/umd/plugins/responsive.umd.js +1 -1
- package/umd/plugins/responsive.umd.js.map +1 -1
- package/umd/plugins/server-side.umd.js +1 -1
- package/umd/plugins/server-side.umd.js.map +1 -1
- package/umd/plugins/visibility.umd.js +1 -1
- package/umd/plugins/visibility.umd.js.map +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("../../core/internal/aria"),require("../../core/internal/value-accessor"),require("../../core/plugin/base-plugin"),require("../../core/plugin/expander-column"),require("../../core/internal/virtualization")):"function"==typeof define&&define.amd?define(["exports","../../core/internal/aria","../../core/internal/value-accessor","../../core/plugin/base-plugin","../../core/plugin/expander-column","../../core/internal/virtualization"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TbwGridPlugin_filtering={},e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid)}(this,function(e,t,r,n,l,i){"use strict";const a="(Blank)";function s(e){if("number"==typeof e)return e;if(e instanceof Date)return e.getTime();const t=Number(e);if(!isNaN(t))return t;return new Date(e).getTime()}function o(e,t,r=!1,n){if(!t.length)return e;const l=t.map(e=>function(e,t,r){const n=e.field,l=e.operator,i=r?e=>r(e[n],e):e=>e[n];if("blank"===l)return e=>{const t=i(e);return null==t||""===t||"number"==typeof t&&isNaN(t)};if("notBlank"===l)return e=>{const t=i(e);return null!=t&&""!==t&&!("number"==typeof t&&isNaN(t))};if(r&&("notIn"===l||"in"===l)){const t=e.value;if("notIn"===l){if(!Array.isArray(t))return()=>!0;const e=new Set(t);return t=>{const l=r(t[n],t),i=Array.isArray(l)?l:null!=l?[l]:[];return 0===i.length?!e.has(a):!i.some(t=>e.has(t))}}if(!Array.isArray(t))return()=>!1;const i=new Set(t);return e=>{const t=r(e[n],e),l=Array.isArray(t)?t:null!=t?[t]:[];return 0===l.length?i.has(a):l.some(e=>i.has(e))}}if("notIn"===l){if(!Array.isArray(e.value))return()=>!0;const t=new Set(e.value);return e=>{const r=e[n];return null==r||""===r?!t.has(a):!t.has(r)}}if("in"===l){if(!Array.isArray(e.value))return()=>!1;const t=new Set(e.value);return e=>{const r=e[n];return null==r||""===r?t.has(a):t.has(r)}}const o="number"===e.type&&!r,c=e=>null==e||""===e||"number"==typeof e&&isNaN(e);if("greaterThan"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r>t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n>t}}if("greaterThanOrEqual"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r>=t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n>=t}}if("lessThan"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r<t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n<t}}if("lessThanOrEqual"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r<=t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n<=t}}if("between"===l){const t=s(e.value),r=s(e.valueTo);return o?e=>{const l=e[n];return!c(l)&&(l>=t&&l<=r)}:e=>{const n=i(e);if(c(n))return!1;const l=s(n);return!isNaN(l)&&l>=t&&l<=r}}const d=t?String(e.value):String(e.value).toLowerCase();return"contains"===l?t?e=>{const t=i(e);return null!=t&&String(t).includes(d)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().includes(d)}:"notContains"===l?t?e=>{const t=i(e);return null!=t&&!String(t).includes(d)}:e=>{const t=i(e);return null!=t&&!String(t).toLowerCase().includes(d)}:"equals"===l?t?e=>{const t=i(e);return null!=t&&String(t)===d}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()===d}:"notEquals"===l?t?e=>{const t=i(e);return null!=t&&String(t)!==d}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()!==d}:"startsWith"===l?t?e=>{const t=i(e);return null!=t&&String(t).startsWith(d)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().startsWith(d)}:"endsWith"===l?t?e=>{const t=i(e);return null!=t&&String(t).endsWith(d)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().endsWith(d)}:()=>!0}(e,r,n?.get(e.field)));return 1===l.length?e.filter(l[0]):e.filter(e=>{for(let t=0;t<l.length;t++)if(!l[t](e))return!1;return!0})}function c(e,t,r){const n=new Set;let l=!1;for(const i of e){const e=i[t];if(r){const t=r(e,i);if(Array.isArray(t)){0===t.length&&(l=!0);for(const e of t)null!=e&&n.add(e)}else null!=t?n.add(t):l=!0}else null!=e&&""!==e?n.add(e):l=!0}return l&&n.add(a),[...n].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t)))}function d(e){return e?e.toISOString().split("T")[0]:""}function u(e){return e?"string"==typeof e?e:"number"==typeof e?d(new Date(e)):"":""}function p(e,t,r,n,l,a){const{field:s,column:o}=t,c=function(e){if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-filter-item-height");if(t&&t.trim()){const e=parseFloat(t);if(!isNaN(e)&&e>0)return e}}return 28}(e),d=e=>{if(null==e)return"(Blank)";if(o.format&&!o.filterValue){const t=o.format(e,void 0);if(t)return t}return String(e)};r=r.slice().sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t)));const u=document.createElement("div");u.className="tbw-filter-search";const p=document.createElement("input");p.type="text",p.placeholder="Search...",p.className="tbw-filter-search-input",p.value=a.get(s)??"",u.appendChild(p),e.appendChild(u);const f=document.createElement("div");f.className="tbw-filter-actions";const h=document.createElement("label");h.className="tbw-filter-value-item",h.style.padding="0",h.style.margin="0";const b=document.createElement("input");b.type="checkbox",b.className="tbw-filter-checkbox";const g=document.createElement("span");g.textContent="Select All",h.appendChild(b),h.appendChild(g),f.appendChild(h);const m=new Map;r.forEach(e=>{const t=null==e?"__null__":String(e);m.set(t,!n.has(e))});const v=()=>{const e=[...m.values()],t=e.every(e=>e),r=e.every(e=>!e);b.checked=t,b.indeterminate=!t&&!r};b.addEventListener("change",()=>{const e=b.checked;for(const t of m.keys())m.set(t,e);v(),k()}),v(),e.appendChild(f);const w=document.createElement("div");w.className="tbw-filter-values";const y=document.createElement("div");y.className="tbw-filter-values-spacer",w.appendChild(y);const x=document.createElement("div");x.className="tbw-filter-values-content",w.appendChild(x);let C=[];const E=(e,t)=>{const r=d(e),n=null==e?"__null__":String(e),l=document.createElement("label");l.className="tbw-filter-value-item",l.style.position="absolute",l.style.top=`calc(var(--tbw-filter-item-height, 28px) * ${t})`,l.style.left="0",l.style.right="0",l.style.boxSizing="border-box";const i=document.createElement("input");i.type="checkbox",i.className="tbw-filter-checkbox",i.checked=m.get(n)??!0,i.dataset.value=n,i.addEventListener("change",()=>{m.set(n,i.checked),v()});const a=document.createElement("span");return a.textContent=r,l.appendChild(i),l.appendChild(a),l},k=()=>{const e=C.length,t=w.clientHeight,r=w.scrollTop;if(y.style.height=e*c+"px",i.shouldBypassVirtualization(e,50/3))return x.innerHTML="",x.style.transform="translateY(0px)",void C.forEach((e,t)=>{x.appendChild(E(e,t))});const n=i.computeVirtualWindow({totalRows:e,viewportHeight:t,scrollTop:r,rowHeight:c,overscan:3});x.style.transform=`translateY(${n.offsetY}px)`,x.innerHTML="";for(let l=n.start;l<n.end;l++)x.appendChild(E(C[l],l-n.start))},S=e=>{const t=l.caseSensitive??!1,n=t?e:e.toLowerCase();if(C=r.filter(r=>{const l=d(r),i=t?l:l.toLowerCase();return!e||i.includes(n)}),C.sort((e,t)=>{const r=null==e?"__null__":String(e),n=null==t?"__null__":String(t),l=m.get(r)??!0;return l!==(m.get(n)??!0)?l?-1:1:"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t))}),0===C.length){y.style.height="0px",x.innerHTML="";const e=document.createElement("div");return e.className="tbw-filter-no-match",e.textContent="No matching values",void x.appendChild(e)}k()};let F;w.addEventListener("scroll",()=>{C.length>0&&k()},{passive:!0}),S(p.value),e.appendChild(w),p.addEventListener("input",()=>{clearTimeout(F),F=setTimeout(()=>{a.set(s,p.value),S(p.value)},l.debounceMs??150)});const N=document.createElement("div");N.className="tbw-filter-buttons";const A=document.createElement("button");A.type="button",A.className="tbw-filter-apply-btn",A.textContent="Apply",A.addEventListener("click",()=>{const e=[];for(const[t,n]of m)if(!n)if("__null__"===t)e.push(null);else{const n=r.find(e=>String(e)===t);e.push(void 0!==n?n:t)}t.applySetFilter(e)}),N.appendChild(A);const T=document.createElement("button");T.type="button",T.className="tbw-filter-clear-btn",T.textContent="Clear Filter",T.addEventListener("click",()=>{t.clearFilter()}),N.appendChild(T),e.appendChild(N)}function f(e,t){if("number"==typeof e)return e;if("string"==typeof e){const r=parseFloat(e);return isNaN(r)?t:r}return t}class h extends n.BaseGridPlugin{static manifest={events:[{type:"filter-change",description:"Emitted when filter criteria change. Broadcast to both DOM consumers and plugin bus."}],queries:[{type:"getContextMenuItems",description:"Contributes filter-related items to the header context menu"}]};name="filtering";styles='@layer tbw-plugins{tbw-grid .tbw-quick-filter-input{flex:1;max-width:300px;height:var(--tbw-input-height, 1.75rem);padding:var(--tbw-input-padding, 0 .5rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);color:var(--tbw-color-fg);font-size:var(--tbw-font-size-sm, .8125rem)}tbw-grid .tbw-quick-filter-input:focus{outline:none;border-color:var(--tbw-color-accent)}tbw-grid .header-cell.filtered:before{content:"";position:absolute;top:var(--tbw-spacing-xs, .25rem);right:var(--tbw-spacing-xs, .25rem);width:var(--tbw-indicator-size, .375rem);height:var(--tbw-indicator-size, .375rem);background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border-radius:50%}tbw-grid .tbw-filter-btn{display:var(--tbw-filter-btn-display, inline-flex);visibility:var(--tbw-filter-btn-visibility, visible);align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;padding:2px;margin-left:var(--tbw-spacing-xs, .25rem);opacity:.4;transition:opacity .15s,visibility 0s,display 0s allow-discrete;color:inherit;vertical-align:middle;transition-behavior:allow-discrete}tbw-grid .tbw-filter-btn:hover,tbw-grid .tbw-filter-btn.active{opacity:1;visibility:visible;display:inline-flex}tbw-grid .tbw-filter-btn.active{color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6))}tbw-grid .header-row .cell:hover .tbw-filter-btn,tbw-grid .header-row .cell.filtered .tbw-filter-btn{display:inline-flex;visibility:visible}}';get defaultConfig(){return{debounceMs:300,caseSensitive:!1,trimInput:!0,useWorker:!0}}isFilteringEnabled(){return!1!==this.grid.effectiveConfig?.filterable}isColumnFilterable(e){return!!this.isFilteringEnabled()&&!1!==e.filterable}getDataRows(){const e=this.sourceRows;if(e.length>0)return e;const t=this.rows;return 0===t.length?t:t.filter(e=>null!=e&&!0!==e.__loading)}getFilterValues(){const e=this.grid.effectiveConfig?.columns;if(!e)return;let t;for(const n of e)if(n.field)if(n.filterValue)t||(t=new Map),t.set(n.field,n.filterValue);else if(n.valueAccessor){t||(t=new Map);const e=n;t.set(n.field,(t,n)=>r.resolveCellValue(n,e))}return t}filters=new Map;cachedResult=null;cacheKey=null;cachedInputSpot=null;openPanelField=null;panelElement=null;panelAnchorElement=null;panelButtonElement=null;searchText=new Map;excludedValues=new Map;panelAbortController=null;globalStylesInjected=!1;columnLookup=null;columnLookupRef=null;getColumnByField(e){const t=this.grid.effectiveConfig?.columns;if(!t)return;let r=this.columnLookup;if(t!==this.columnLookupRef||!r){r=new Map;for(const e of t)e.field&&r.set(e.field,e);this.columnLookup=r,this.columnLookupRef=t}return r.get(e)}computeSelected(){const e={},t=[];for(const[n,l]of this.filters)if("set"===l.type)if("in"===l.operator&&Array.isArray(l.value))e[n]=l.value;else if("notIn"===l.operator){const e=this.getColumnByField(n),l=e?.filterValue??(e?.valueAccessor?(t,n)=>r.resolveCellValue(n,e):void 0);t.push({field:n,filterValue:l})}if(t.length>0){const r=function(e,t){const r=new Map;for(const{field:l,filterValue:i}of t)r.set(l,{values:new Set,hasBlank:!1,hasExtractor:!!i});for(const l of e)for(const{field:e,filterValue:n}of t){const t=r.get(e),i=l[e];if(n){const e=n(i,l);if(Array.isArray(e)){0===e.length&&(t.hasBlank=!0);for(const r of e)null!=r&&t.values.add(r)}else null!=e?t.values.add(e):t.hasBlank=!0}else null!=i&&""!==i?t.values.add(i):t.hasBlank=!0}const n=new Map;for(const[l,{values:i,hasBlank:s}]of r)s&&i.add(a),n.set(l,[...i].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t))));return n}(this.getDataRows(),t);for(const{field:n}of t){const t=this.excludedValues.get(n),l=r.get(n)??[];e[n]=t?l.filter(e=>!t.has(e)):l}}return e}syncExcludedValues(e,t){if(t)if("set"===t.type&&"notIn"===t.operator&&Array.isArray(t.value))this.excludedValues.set(e,new Set(t.value));else if("set"===t.type&&"in"===t.operator&&Array.isArray(t.value)){const r=this.getDataRows();if(!r||0===r.length)return void this.excludedValues.delete(e);const n=t.value,l=new Set(n.map(e=>null==e?a:e)),i=this.getUniqueValues(e),s=new Set(i.filter(e=>!l.has(e)));this.excludedValues.set(e,s)}else"set"===t.type&&this.excludedValues.delete(e);else this.excludedValues.delete(e)}attach(e){super.attach(e),this.injectGlobalStyles()}detach(){this.filters.clear(),this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null,this.columnLookup=null,this.columnLookupRef=null,this.openPanelField=null,this.panelElement&&(this.panelElement.remove(),this.panelElement=null),this.searchText.clear(),this.excludedValues.clear(),this.panelAbortController?.abort(),this.panelAbortController=null}handleQuery(e){if("filter:get-model"===e.type){if(!this.filters.size)return;return Object.fromEntries(this.filters)}if("getContextMenuItems"===e.type){const t=e.context;if(!t.isHeader)return;const r=t.column;if(!r?.field)return;if(!this.isFilteringEnabled())return;if(!this.isColumnFilterable(r))return;const n=[],l=this.isFieldFiltered(r.field),i=this.filters.size>0;return l&&n.push({id:"filtering/clear-column-filter",label:"Clear Filter",icon:"✕",order:20,action:()=>this.clearFieldFilter(r.field)}),i&&n.push({id:"filtering/clear-all-filters",label:"Clear All Filters",icon:"✕",order:21,disabled:!i,action:()=>this.clearAllFilters()}),n.length>0?n:void 0}}processRows(e){if(!this.filters.size)return e;const t=[...this.filters.values()];if(this.config.filterHandler)return this.cachedResult?this.cachedResult:e;const r=(n=t,JSON.stringify(n.map(e=>({field:e.field,operator:e.operator,value:e.value,valueTo:e.valueTo}))));var n;const l={len:e.length,first:e[0],mid:e[Math.floor(e.length/2)],last:e[e.length-1]},i=null!=this.cachedInputSpot&&l.len===this.cachedInputSpot.len&&l.first===this.cachedInputSpot.first&&l.mid===this.cachedInputSpot.mid&&l.last===this.cachedInputSpot.last;if(this.cacheKey===r&&this.cachedResult&&i)return this.cachedResult;if(!i)for(const[s,o]of this.filters)"set"===o.type&&"in"===o.operator&&this.syncExcludedValues(s,o);const a=o(e,t,this.config.caseSensitive,this.getFilterValues());return this.cachedResult=a,this.cacheKey=r,this.cachedInputSpot=l,a}afterRender(){const e=this.gridElement;if(!e)return;e.querySelectorAll('[part~="header-cell"]').forEach(e=>{const t=e.getAttribute("data-col");if(null===t)return;const r=this.visibleColumns[parseInt(t,10)];if(!r||!this.isColumnFilterable(r))return;if(l.isUtilityColumn(r))return;const n=r.field;if(!n)return;const i=this.filters.has(n);let a=e.querySelector(".tbw-filter-btn");if(a){const t=a.classList.contains("active");return a.classList.toggle("active",i),e.classList.toggle("filtered",i),i?e.setAttribute("aria-description","Filtered"):e.removeAttribute("aria-description"),void(t!==i&&this.setIcon(a,i?"filterActive":"filter"))}a=document.createElement("button"),a.type="button",a.className="tbw-filter-btn",a.setAttribute("aria-label",`Filter ${r.header??n}`),this.setIcon(a,i?"filterActive":"filter"),i&&(a.classList.add("active"),e.classList.add("filtered"),e.setAttribute("aria-description","Filtered")),a.addEventListener("click",e=>{e.stopPropagation(),this.toggleFilterPanel(n,r,a)});const s=e.querySelector(".resize-handle");s?e.insertBefore(a,s):e.appendChild(a)})}setFilter(e,r,n){if(null===r)this.filters.delete(e),this.syncExcludedValues(e,null);else{const t={...r,field:e};this.filters.set(e,t),this.syncExcludedValues(e,t)}if(this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null,n?.silent)this.emitPluginEvent("filter-change",{filters:[...this.filters.values()]});else{this.broadcast("filter-change",{filters:[...this.filters.values()],filteredRowCount:0,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.();const n=this.getColumnByField(e)?.header??e;t.announce(this.gridElement,null===r?t.getA11yMessage(this.gridElement,"filterCleared",n):t.getA11yMessage(this.gridElement,"filterApplied",n))}this.requestRender()}getFilter(e){return this.filters.get(e)}getFilters(){return[...this.filters.values()]}getFilterModel(){return this.getFilters()}setFilterModel(e,t){this.filters.clear(),this.excludedValues.clear();for(const r of e)this.filters.set(r.field,r),this.syncExcludedValues(r.field,r);this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null,t?.silent?this.emitPluginEvent("filter-change",{filters:[...this.filters.values()]}):(this.broadcast("filter-change",{filters:[...this.filters.values()],filteredRowCount:0,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.()),this.requestRender()}clearAllFilters(e){this.filters.clear(),this.excludedValues.clear(),this.searchText.clear(),this.applyFiltersInternal(e?.silent),e?.silent||t.announce(this.gridElement,t.getA11yMessage(this.gridElement,"allFiltersCleared"))}clearFieldFilter(e,r){if(this.filters.delete(e),this.excludedValues.delete(e),this.searchText.delete(e),this.applyFiltersInternal(r?.silent),!r?.silent){const r=this.getColumnByField(e)?.header??e;t.announce(this.gridElement,t.getA11yMessage(this.gridElement,"filterCleared",r))}}isFieldFiltered(e){return this.filters.has(e)}getFilteredRowCount(){return this.cachedResult?.length??this.rows.length}getActiveFilters(){return this.getFilters()}getUniqueValues(e){const t=this.getColumnByField(e),r=t?.filterValue;return c(this.getDataRows(),e,r)}getStaleFilters(){const e=[];for(const[t,r]of this.filters){if("set"!==r.type)continue;const n=this.getUniqueValues(t);if("notIn"===r.operator&&Array.isArray(r.value)){const t=new Set(r.value);0===n.filter(e=>!t.has(e)).length&&e.push(r)}else if("in"===r.operator&&Array.isArray(r.value)){const t=new Set(r.value);0===n.filter(e=>t.has(e)).length&&e.push(r)}}return e}getBlankMode(e){const t=this.filters.get(e);return"blank"===t?.operator?"blanksOnly":"notBlank"===t?.operator?"nonBlanksOnly":"all"}toggleBlankFilter(e,t){if("all"===t){const t=this.filters.get(e);if(t?.valueTo&&"object"==typeof t.valueTo){const r=t.valueTo;this.setFilter(e,r)}else this.setFilter(e,null);return}const r=this.filters.get(e),n=r&&"blank"!==r.operator&&"notBlank"!==r.operator?{type:r.type,operator:r.operator,value:r.value,valueTo:r.valueTo}:r?.valueTo;this.setFilter(e,{type:r?.type??"text",operator:"blanksOnly"===t?"blank":"notBlank",value:"",valueTo:n})}copyGridThemeContext(e){const t=this.gridElement;if(!t)return;for(const n of t.classList)n.startsWith("tbw-")||"selecting"===n||e.classList.add(n);const r=t.dataset.theme;r&&(e.dataset.theme=r)}injectGlobalStyles(){if(this.globalStylesInjected)return;if(document.getElementById("tbw-filter-panel-styles"))return void(this.globalStylesInjected=!0);const e=document.createElement("style");e.id="tbw-filter-panel-styles",e.textContent="@layer tbw-plugins{.tbw-filter-panel{position:fixed;background:var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));color:var(--tbw-filter-panel-fg, var(--tbw-color-fg, light-dark(#222222, #eeeeee)));border:1px solid var(--tbw-filter-panel-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-panel-radius, var(--tbw-border-radius, .25rem));box-shadow:0 4px 16px var(--tbw-filter-panel-shadow, var(--tbw-color-shadow, light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3))));padding:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));z-index:10000;min-width:200px;max-width:280px;max-height:350px;display:flex;flex-direction:column;font-family:var(--tbw-font-family, system-ui, sans-serif);font-size:var(--tbw-font-size, .8125rem);transform-origin:top center}.tbw-filter-panel.tbw-filter-panel-above{transform-origin:bottom center}.tbw-filter-panel.tbw-filter-panel-animated{animation:tbw-filter-panel-enter var(--tbw-animation-duration, .15s) var(--tbw-animation-easing, ease-out)}.tbw-filter-panel.tbw-filter-panel-above.tbw-filter-panel-animated{animation:tbw-filter-panel-enter-above var(--tbw-animation-duration, .15s) var(--tbw-animation-easing, ease-out)}@keyframes tbw-filter-panel-enter{0%{opacity:0;transform:scaleY(.3) translateY(-10px)}to{opacity:1;transform:scaleY(1) translateY(0)}}@keyframes tbw-filter-panel-enter-above{0%{opacity:0;transform:scaleY(.3) translateY(10px)}to{opacity:1;transform:scaleY(1) translateY(0)}}@supports (anchor-name: --test){.tbw-filter-panel{position-anchor:--tbw-filter-anchor;top:anchor(bottom);right:anchor(right);margin-top:4px;position-try-fallbacks:flip-inline,flip-block,flip-block flip-inline}}.tbw-filter-search{margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));min-height:var(--tbw-filter-item-height, 28px)}.tbw-filter-search-input{height:var(--tbw-filter-item-height, 28px);width:100%;padding:var(--tbw-filter-search-padding, var(--tbw-spacing-sm, .375rem) var(--tbw-spacing-md, .5rem));background:var(--tbw-filter-input-bg, var(--tbw-color-bg, transparent));color:inherit;border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-input-radius, var(--tbw-border-radius, .25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-search-input:focus{outline:none;border-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6)) r g b / 15%)}.tbw-filter-actions{display:flex;padding:var(--tbw-button-padding-sm, .25rem .125rem);margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border-bottom:1px solid var(--tbw-filter-divider, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));min-height:var(--tbw-filter-item-height, 28px)}.tbw-filter-actions .tbw-filter-value-item{flex:1}.tbw-filter-values{flex:1;overflow-y:auto;margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));max-height:180px;position:relative}.tbw-filter-values-spacer{width:1px}.tbw-filter-values-content{position:absolute;top:0;left:0;right:0}.tbw-filter-value-item{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding:var(--tbw-button-padding-sm, .25rem .125rem);cursor:pointer;border-radius:3px;height:var(--tbw-filter-item-height, 28px)}.tbw-filter-value-item:hover{background:var(--tbw-filter-hover, var(--tbw-color-row-hover, light-dark(#f0f6ff, #1c1c1c)))}.tbw-filter-checkbox{margin:0;cursor:pointer;accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6))}.tbw-filter-no-match{color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem)) 0;text-align:center;font-style:italic}.tbw-filter-buttons{display:flex;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding-top:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border-top:1px solid var(--tbw-filter-divider, var(--tbw-color-border, light-dark(#d0d0d4, #454545)))}.tbw-filter-apply-btn{flex:1;padding:var(--tbw-filter-btn-padding, var(--tbw-button-padding, .375rem .75rem));background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));color:var(--tbw-filter-accent-fg, var(--tbw-color-accent-fg, light-dark(#ffffff, #000000)));border:none;border-radius:var(--tbw-border-radius, .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);font-weight:var(--tbw-filter-btn-font-weight, 500);min-height:var(--tbw-filter-btn-min-height, auto)}.tbw-filter-apply-btn:hover{filter:brightness(.9)}.tbw-filter-clear-btn{flex:1;padding:var(--tbw-filter-btn-padding, var(--tbw-button-padding, .375rem .75rem));background:transparent;color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-border-radius, .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);font-weight:var(--tbw-filter-btn-font-weight, 500);min-height:var(--tbw-filter-btn-min-height, auto)}.tbw-filter-clear-btn:hover{background:var(--tbw-filter-hover, var(--tbw-color-row-hover, light-dark(#f0f6ff, #1c1c1c)))}.tbw-filter-range-inputs,.tbw-filter-date-range{display:flex;align-items:flex-end;gap:var(--tbw-spacing-sm, .375rem);margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-filter-range-group,.tbw-filter-date-group{display:flex;flex-direction:column;gap:var(--tbw-spacing-xs, .25rem);flex:1}.tbw-filter-range-label{font-size:var(--tbw-font-size-xs, .75rem);color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)))}.tbw-filter-range-input,.tbw-filter-date-input{width:100%;height:var(--tbw-filter-item-height, 28px);padding:var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-sm, .375rem);background:var(--tbw-filter-input-bg, var(--tbw-color-bg, transparent));color:inherit;border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-input-radius, var(--tbw-border-radius, .25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-range-input:focus,.tbw-filter-date-input:focus{outline:none;border-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6)) r g b / 15%)}.tbw-filter-range-separator{color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));padding-bottom:var(--tbw-spacing-xs, .25rem)}.tbw-filter-blank-option{display:flex;align-items:center;gap:var(--tbw-spacing-sm, .375rem);padding:var(--tbw-spacing-xs, .25rem) 0;margin-bottom:var(--tbw-spacing-xs, .25rem);font-size:var(--tbw-font-size-sm, .8125rem);cursor:pointer;-webkit-user-select:none;user-select:none}.tbw-filter-blank-checkbox{accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));margin:0;cursor:pointer}.tbw-filter-date-range.tbw-filter-disabled,.tbw-filter-range-inputs.tbw-filter-disabled,.tbw-filter-range-slider.tbw-filter-disabled{opacity:.4;pointer-events:none}.tbw-filter-range-slider{position:relative;height:24px;margin:var(--tbw-spacing-md, .5rem) 0 var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-filter-range-track{position:absolute;top:50%;left:0;right:0;height:4px;background:var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:2px;transform:translateY(-50%)}.tbw-filter-range-fill{position:absolute;top:50%;height:4px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border-radius:2px;transform:translateY(-50%)}.tbw-filter-range-thumb{position:absolute;top:0;width:100%;height:100%;background:none;pointer-events:none;-webkit-appearance:none;appearance:none}.tbw-filter-range-thumb::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border:2px solid var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));border-radius:50%;cursor:pointer;pointer-events:all;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-moz-range-thumb{width:16px;height:16px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border:2px solid var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));border-radius:50%;cursor:pointer;pointer-events:all;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-webkit-slider-thumb:hover{transform:scale(1.1)}.tbw-filter-range-thumb::-moz-range-thumb:hover{transform:scale(1.1)}}",document.head.appendChild(e),this.globalStylesInjected=!0}toggleFilterPanel(e,t,n){if(this.openPanelField===e)return void this.closeFilterPanel();this.closeFilterPanel();const l=document.createElement("div");if(l.className="tbw-filter-panel",this.copyGridThemeContext(l),this.isAnimationEnabled&&l.classList.add("tbw-filter-panel-animated"),this.panelElement=l,this.openPanelField=e,n.classList.add("active"),this.panelButtonElement=n,this.config.valuesHandler)return l.innerHTML='<div class="tbw-filter-loading">Loading...</div>',document.body.appendChild(l),this.positionPanel(l,n),this.setupPanelCloseHandler(l,n),void this.config.valuesHandler(e,t).then(r=>{this.openPanelField===e&&this.panelElement&&(l.innerHTML="",this.renderPanelContent(e,t,l,r))});const i=t.filterValue??(t.valueAccessor?(e,n)=>r.resolveCellValue(n,t):void 0),a=c(this.getDataRows(),e,i);document.body.appendChild(l),this.positionPanel(l,n),this.renderPanelContent(e,t,l,a),this.setupPanelCloseHandler(l,n)}renderPanelContent(e,t,r,n){const l=this.filters.get(e);if("in"===l?.operator&&"set"===l.type&&Array.isArray(l.value)&&!this.excludedValues.has(e)){const t=l.value,r=new Set(t.map(e=>null==e?a:e)),i=new Set(n.filter(e=>!r.has(e)));this.excludedValues.set(e,i)}let i=this.excludedValues.get(e);i||(i=new Set,this.excludedValues.set(e,i));const s=this.searchText.get(e)??"",o={field:e,column:t,uniqueValues:n,excludedValues:i,searchText:s,currentFilter:this.filters.get(e),applySetFilter:(t,r)=>{this.applySetFilter(e,t,r),this.closeFilterPanel()},applyTextFilter:(t,r,n)=>{this.applyTextFilter(e,t,r,n),this.closeFilterPanel()},clearFilter:()=>{this.clearFieldFilter(e),this.closeFilterPanel()},closePanel:()=>this.closeFilterPanel()};let c=!1;if(this.config.filterPanelRenderer&&(this.config.filterPanelRenderer(r,o),c=r.children.length>0),!c&&t.type){const e=this.grid.effectiveConfig.typeDefaults?.[t.type];e?.filterPanelRenderer&&(e.filterPanelRenderer(r,o),c=r.children.length>0)}if(!c){const e=t.filterType??t.type;"number"===e?function(e,t,r,n){const{field:l,column:i}=t,a=i.filterParams,s=i.editorParams,o=r.filter(e=>"number"==typeof e&&!isNaN(e)),c=o.length>0?Math.min(...o):0,d=o.length>0?Math.max(...o):100,u=f(a?.min??s?.min,c),p=f(a?.max??s?.max,d),h=a?.step??s?.step??1,b=n.get(l);let g=u,m=p;const v="blank"===b?.operator;"between"===b?.operator?(g=f(b.value,u),m=f(b.valueTo,p)):"greaterThanOrEqual"===b?.operator?g=f(b.value,u):"lessThanOrEqual"===b?.operator&&(m=f(b.value,p));const w=document.createElement("div");w.className="tbw-filter-range-inputs";const y=document.createElement("div");y.className="tbw-filter-range-group";const x=document.createElement("label");x.textContent="Min",x.className="tbw-filter-range-label";const C=document.createElement("input");C.type="number",C.className="tbw-filter-range-input",C.min=String(u),C.max=String(p),C.step=String(h),C.value=String(g),y.appendChild(x),y.appendChild(C),w.appendChild(y);const E=document.createElement("span");E.className="tbw-filter-range-separator",E.textContent="–",w.appendChild(E);const k=document.createElement("div");k.className="tbw-filter-range-group";const S=document.createElement("label");S.textContent="Max",S.className="tbw-filter-range-label";const F=document.createElement("input");F.type="number",F.className="tbw-filter-range-input",F.min=String(u),F.max=String(p),F.step=String(h),F.value=String(m),k.appendChild(S),k.appendChild(F),w.appendChild(k),e.appendChild(w);const N=document.createElement("div");N.className="tbw-filter-range-slider";const A=document.createElement("div");A.className="tbw-filter-range-track";const T=document.createElement("div");T.className="tbw-filter-range-fill";const L=document.createElement("input");L.type="range",L.className="tbw-filter-range-thumb tbw-filter-range-thumb-min",L.min=String(u),L.max=String(p),L.step=String(h),L.value=String(g);const P=document.createElement("input");P.type="range",P.className="tbw-filter-range-thumb tbw-filter-range-thumb-max",P.min=String(u),P.max=String(p),P.step=String(h),P.value=String(m),N.appendChild(A),N.appendChild(T),N.appendChild(L),N.appendChild(P),e.appendChild(N);const R=document.createElement("label");R.className="tbw-filter-blank-option";const V=document.createElement("input");V.type="checkbox",V.className="tbw-filter-blank-checkbox",V.checked=v;const M=document.createTextNode("Blank");R.appendChild(V),R.appendChild(M);const B=e=>{C.disabled=e,F.disabled=e,L.disabled=e,P.disabled=e,w.classList.toggle("tbw-filter-disabled",e),N.classList.toggle("tbw-filter-disabled",e)};B(v),V.addEventListener("change",()=>{B(V.checked)}),e.appendChild(R);const I=()=>{const e=parseFloat(L.value),t=parseFloat(P.value),r=p-u,n=(e-u)/r*100,l=(t-u)/r*100;T.style.left=`${n}%`,T.style.width=l-n+"%"};L.addEventListener("input",()=>{const e=Math.min(parseFloat(L.value),parseFloat(P.value));L.value=String(e),C.value=String(e),I()}),P.addEventListener("input",()=>{const e=Math.max(parseFloat(P.value),parseFloat(L.value));P.value=String(e),F.value=String(e),I()}),C.addEventListener("input",()=>{const e=parseFloat(C.value);let t=Number.isFinite(e)?e:u;t=Math.max(u,Math.min(t,parseFloat(F.value))),L.value=String(t),I()}),F.addEventListener("input",()=>{const e=parseFloat(F.value);let t=Number.isFinite(e)?e:p;t=Math.min(p,Math.max(t,parseFloat(C.value))),P.value=String(t),I()}),I();const q=document.createElement("div");q.className="tbw-filter-buttons";const z=document.createElement("button");z.type="button",z.className="tbw-filter-apply-btn",z.textContent="Apply",z.addEventListener("click",()=>{if(V.checked)return void t.applyTextFilter("blank","");const e=parseFloat(C.value),r=parseFloat(F.value),n=Number.isFinite(e)?e:u,l=Number.isFinite(r)?r:p;n!==u||l!==p?t.applyTextFilter("between",n,l):t.clearFilter()}),q.appendChild(z);const _=document.createElement("button");_.type="button",_.className="tbw-filter-clear-btn",_.textContent="Clear Filter",_.addEventListener("click",()=>{t.clearFilter()}),q.appendChild(_),e.appendChild(q)}(r,o,n,this.filters):"date"===e?function(e,t,r,n){const{field:l,column:i}=t,a=i.filterParams,s=i.editorParams,o=r.filter(e=>e instanceof Date||"string"==typeof e&&!isNaN(Date.parse(e))).map(e=>e instanceof Date?e:new Date(e)).filter(e=>!isNaN(e.getTime())),c=o.length>0?new Date(Math.min(...o.map(e=>e.getTime()))):null,p=o.length>0?new Date(Math.max(...o.map(e=>e.getTime()))):null,f=u(a?.min)||u(s?.min)||d(c),h=u(a?.max)||u(s?.max)||d(p),b=n.get(l);let g="",m="";const v="blank"===b?.operator;"between"===b?.operator?(g=u(b.value)||"",m=u(b.valueTo)||""):"greaterThanOrEqual"===b?.operator?g=u(b.value)||"":"lessThanOrEqual"===b?.operator&&(m=u(b.value)||"");const w=document.createElement("div");w.className="tbw-filter-date-range";const y=document.createElement("div");y.className="tbw-filter-date-group";const x=document.createElement("label");x.textContent="From",x.className="tbw-filter-range-label";const C=document.createElement("input");C.type="date",C.className="tbw-filter-date-input",f&&(C.min=f),h&&(C.max=h),C.value=g,y.appendChild(x),y.appendChild(C),w.appendChild(y);const E=document.createElement("span");E.className="tbw-filter-range-separator",E.textContent="–",w.appendChild(E);const k=document.createElement("div");k.className="tbw-filter-date-group";const S=document.createElement("label");S.textContent="To",S.className="tbw-filter-range-label";const F=document.createElement("input");F.type="date",F.className="tbw-filter-date-input",f&&(F.min=f),h&&(F.max=h),F.value=m,k.appendChild(S),k.appendChild(F),w.appendChild(k),e.appendChild(w);const N=document.createElement("label");N.className="tbw-filter-blank-option";const A=document.createElement("input");A.type="checkbox",A.className="tbw-filter-blank-checkbox",A.checked=v;const T=document.createTextNode("Show only blank");N.appendChild(A),N.appendChild(T);const L=e=>{C.disabled=e,F.disabled=e,w.classList.toggle("tbw-filter-disabled",e)};L(v),A.addEventListener("change",()=>{L(A.checked)}),e.appendChild(N);const P=document.createElement("div");P.className="tbw-filter-buttons";const R=document.createElement("button");R.type="button",R.className="tbw-filter-apply-btn",R.textContent="Apply",R.addEventListener("click",()=>{if(A.checked)return void t.applyTextFilter("blank","");const e=C.value,r=F.value;e&&r?t.applyTextFilter("between",e,r):e?t.applyTextFilter("greaterThanOrEqual",e):r?t.applyTextFilter("lessThanOrEqual",r):t.clearFilter()}),P.appendChild(R);const V=document.createElement("button");V.type="button",V.className="tbw-filter-clear-btn",V.textContent="Clear Filter",V.addEventListener("click",()=>{t.clearFilter()}),P.appendChild(V),e.appendChild(P)}(r,o,n,this.filters):p(r,o,n,i,{caseSensitive:this.config.caseSensitive,debounceMs:this.config.debounceMs},this.searchText)}}setupPanelCloseHandler(e,t){this.panelAbortController=new AbortController;const{signal:r}=this.panelAbortController;setTimeout(()=>{r.aborted||document.addEventListener("click",r=>{e.contains(r.target)||r.target===t||this.closeFilterPanel()},{signal:r})},0)}closeFilterPanel(){const e=this.panelElement;if(e&&(e.remove(),this.panelElement=null),this.panelAnchorElement&&(this.panelAnchorElement.style.anchorName="",this.panelAnchorElement=null),this.panelButtonElement){const e=this.openPanelField;e&&this.filters.has(e)||this.panelButtonElement.classList.remove("active"),this.panelButtonElement=null}this.openPanelField=null,this.panelAbortController?.abort(),this.panelAbortController=null}static supportsAnchorPositioning=null;static checkAnchorPositioningSupport(){return null===h.supportsAnchorPositioning&&(h.supportsAnchorPositioning=CSS.supports("anchor-name","--test")),h.supportsAnchorPositioning}positionPanel(e,t){const r=t.closest(".header-row")??t;if(r.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=r,h.checkAnchorPositioningSupport()){r.style.anchorName="",t.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=t;const n=r.getBoundingClientRect().bottom-t.getBoundingClientRect().bottom;return e.style.marginTop=`${n+4}px`,void requestAnimationFrame(()=>{const r=e.getBoundingClientRect(),n=t.getBoundingClientRect();r.top<n.top&&e.classList.add("tbw-filter-panel-above")})}const n=r.getBoundingClientRect(),l=t.getBoundingClientRect();e.style.position="fixed",e.style.top=`${n.bottom+4}px`,e.style.left=`${l.right}px`,requestAnimationFrame(()=>{const t=e.getBoundingClientRect();e.style.left=l.right-t.width+"px";l.right-t.width<8&&(e.style.left=`${l.left}px`),t.bottom>window.innerHeight-8&&(e.style.top=n.top-t.height-4+"px",e.classList.add("tbw-filter-panel-above"))})}applySetFilter(e,t,r){if(this.excludedValues.set(e,new Set(t)),0===t.length)this.filters.delete(e);else{const n=this.filters.get(e);if("in"===n?.operator){const n=this.getUniqueValues(e),l=new Set(t),i=n.filter(e=>!l.has(e));this.filters.set(e,{field:e,type:"set",operator:"in",value:i,...void 0!==r&&{valueTo:r}})}else this.filters.set(e,{field:e,type:"set",operator:"notIn",value:t,...void 0!==r&&{valueTo:r}})}this.applyFiltersInternal()}applyTextFilter(e,t,r,n){const l=this.getColumnByField(e),i=l?.filterType??l?.type??"text";this.filters.set(e,{field:e,type:i,operator:t,value:r,valueTo:n}),this.applyFiltersInternal()}applyFiltersInternal(e){this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null;const t=[...this.filters.values()];if(this.config.filterHandler){this.gridElement.setAttribute("aria-busy","true");const r=this.config.filterHandler(t,this.sourceRows),n=r=>{this.gridElement.removeAttribute("aria-busy"),this.cachedResult=r,this.grid.rows=r,e?this.emitPluginEvent("filter-change",{filters:t}):(this.broadcast("filter-change",{filters:t,filteredRowCount:r.length,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.()),this.requestRender()};return void(r&&"function"==typeof r.then?r.then(n):n(r))}e?this.emitPluginEvent("filter-change",{filters:t}):(this.broadcast("filter-change",{filters:t,filteredRowCount:0,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.()),this.requestRender()}getColumnState(e){if(!this.config.trackColumnState)return;const t=this.filters.get(e);return t?{filter:{type:t.type,operator:t.operator,value:t.value,valueTo:t.valueTo}}:void 0}applyColumnState(e,t){if(!this.config.trackColumnState)return;if(!t.filter)return void this.filters.delete(e);const r={field:e,type:t.filter.type,operator:t.filter.operator,value:t.filter.value,valueTo:t.filter.valueTo};this.filters.set(e,r),this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null}}e.BLANK_FILTER_VALUE=a,e.FilteringPlugin=h,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("../../core/internal/aria"),require("../../core/internal/value-accessor"),require("../../core/plugin/base-plugin"),require("../../core/plugin/expander-column"),require("../../core/internal/virtualization")):"function"==typeof define&&define.amd?define(["exports","../../core/internal/aria","../../core/internal/value-accessor","../../core/plugin/base-plugin","../../core/plugin/expander-column","../../core/internal/virtualization"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TbwGridPlugin_filtering={},e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid)}(this,function(e,t,r,n,l,i){"use strict";const a="(Blank)";function s(e){if("number"==typeof e)return e;if(e instanceof Date)return e.getTime();const t=Number(e);if(!isNaN(t))return t;return new Date(e).getTime()}function o(e,t,r=!1,n){if(!t.length)return e;const l=t.map(e=>function(e,t,r){const n=e.field,l=e.operator,i=r?e=>r(e[n],e):e=>e[n];if("blank"===l)return e=>{const t=i(e);return null==t||""===t||"number"==typeof t&&isNaN(t)};if("notBlank"===l)return e=>{const t=i(e);return null!=t&&""!==t&&!("number"==typeof t&&isNaN(t))};if(r&&("notIn"===l||"in"===l)){const t=e.value;if("notIn"===l){if(!Array.isArray(t))return()=>!0;const e=new Set(t);return t=>{const l=r(t[n],t),i=Array.isArray(l)?l:null!=l?[l]:[];return 0===i.length?!e.has(a):!i.some(t=>e.has(t))}}if(!Array.isArray(t))return()=>!1;const i=new Set(t);return e=>{const t=r(e[n],e),l=Array.isArray(t)?t:null!=t?[t]:[];return 0===l.length?i.has(a):l.some(e=>i.has(e))}}if("notIn"===l){if(!Array.isArray(e.value))return()=>!0;const t=new Set(e.value);return e=>{const r=e[n];return null==r||""===r?!t.has(a):!t.has(r)}}if("in"===l){if(!Array.isArray(e.value))return()=>!1;const t=new Set(e.value);return e=>{const r=e[n];return null==r||""===r?t.has(a):t.has(r)}}const o="number"===e.type&&!r,c=e=>null==e||""===e||"number"==typeof e&&isNaN(e);if("greaterThan"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r>t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n>t}}if("greaterThanOrEqual"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r>=t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n>=t}}if("lessThan"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r<t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n<t}}if("lessThanOrEqual"===l){const t=s(e.value);return o?e=>{const r=e[n];return!c(r)&&r<=t}:e=>{const r=i(e);if(c(r))return!1;const n=s(r);return!isNaN(n)&&n<=t}}if("between"===l){const t=s(e.value),r=s(e.valueTo);return o?e=>{const l=e[n];return!c(l)&&(l>=t&&l<=r)}:e=>{const n=i(e);if(c(n))return!1;const l=s(n);return!isNaN(l)&&l>=t&&l<=r}}const d=t?String(e.value):String(e.value).toLowerCase();return"contains"===l?t?e=>{const t=i(e);return null!=t&&String(t).includes(d)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().includes(d)}:"notContains"===l?t?e=>{const t=i(e);return null!=t&&!String(t).includes(d)}:e=>{const t=i(e);return null!=t&&!String(t).toLowerCase().includes(d)}:"equals"===l?t?e=>{const t=i(e);return null!=t&&String(t)===d}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()===d}:"notEquals"===l?t?e=>{const t=i(e);return null!=t&&String(t)!==d}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase()!==d}:"startsWith"===l?t?e=>{const t=i(e);return null!=t&&String(t).startsWith(d)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().startsWith(d)}:"endsWith"===l?t?e=>{const t=i(e);return null!=t&&String(t).endsWith(d)}:e=>{const t=i(e);return null!=t&&String(t).toLowerCase().endsWith(d)}:()=>!0}(e,r,n?.get(e.field)));return 1===l.length?e.filter(l[0]):e.filter(e=>{for(let t=0;t<l.length;t++)if(!l[t](e))return!1;return!0})}function c(e,t,r){const n=new Set;let l=!1;for(const i of e){const e=i[t];if(r){const t=r(e,i);if(Array.isArray(t)){0===t.length&&(l=!0);for(const e of t)null!=e&&n.add(e)}else null!=t?n.add(t):l=!0}else null!=e&&""!==e?n.add(e):l=!0}return l&&n.add(a),[...n].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t)))}function d(e){return e?e.toISOString().split("T")[0]:""}function u(e){return e?"string"==typeof e?e:"number"==typeof e?d(new Date(e)):"":""}function p(e,t,r,n,l,a){const{field:s,column:o}=t,c=function(e){if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-filter-item-height");if(t&&t.trim()){const e=parseFloat(t);if(!isNaN(e)&&e>0)return e}}return 28}(e),d=e=>{if(null==e)return"(Blank)";if(o.format&&!o.filterValue){const t=o.format(e,void 0);if(t)return t}return String(e)};r=r.slice().sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t)));const u=document.createElement("div");u.className="tbw-filter-search";const p=document.createElement("input");p.type="text",p.placeholder="Search...",p.className="tbw-filter-search-input",p.value=a.get(s)??"",u.appendChild(p),e.appendChild(u);const f=document.createElement("div");f.className="tbw-filter-actions";const h=document.createElement("label");h.className="tbw-filter-value-item",h.style.padding="0",h.style.margin="0";const b=document.createElement("input");b.type="checkbox",b.className="tbw-filter-checkbox";const g=document.createElement("span");g.textContent="Select All",h.appendChild(b),h.appendChild(g),f.appendChild(h);const m=new Map;r.forEach(e=>{const t=null==e?"__null__":String(e);m.set(t,!n.has(e))});const v=()=>{const e=[...m.values()],t=e.every(e=>e),r=e.every(e=>!e);b.checked=t,b.indeterminate=!t&&!r};b.addEventListener("change",()=>{const e=b.checked;for(const t of m.keys())m.set(t,e);v(),k()}),v(),e.appendChild(f);const w=document.createElement("div");w.className="tbw-filter-values";const y=document.createElement("div");y.className="tbw-filter-values-spacer",w.appendChild(y);const x=document.createElement("div");x.className="tbw-filter-values-content",w.appendChild(x);let C=[];const E=(e,t)=>{const r=d(e),n=null==e?"__null__":String(e),l=document.createElement("label");l.className="tbw-filter-value-item",l.style.position="absolute",l.style.top=`calc(var(--tbw-filter-item-height, 28px) * ${t})`,l.style.left="0",l.style.right="0",l.style.boxSizing="border-box";const i=document.createElement("input");i.type="checkbox",i.className="tbw-filter-checkbox",i.checked=m.get(n)??!0,i.dataset.value=n,i.addEventListener("change",()=>{m.set(n,i.checked),v()});const a=document.createElement("span");return a.textContent=r,l.appendChild(i),l.appendChild(a),l},k=()=>{const e=C.length,t=w.clientHeight,r=w.scrollTop;if(y.style.height=e*c+"px",i.shouldBypassVirtualization(e,50/3))return x.innerHTML="",x.style.transform="translateY(0px)",void C.forEach((e,t)=>{x.appendChild(E(e,t))});const n=i.computeVirtualWindow({totalRows:e,viewportHeight:t,scrollTop:r,rowHeight:c,overscan:3});x.style.transform=`translateY(${n.offsetY}px)`,x.innerHTML="";for(let l=n.start;l<n.end;l++)x.appendChild(E(C[l],l-n.start))},S=e=>{const t=l.caseSensitive??!1,n=t?e:e.toLowerCase();if(C=r.filter(r=>{const l=d(r),i=t?l:l.toLowerCase();return!e||i.includes(n)}),C.sort((e,t)=>{const r=null==e?"__null__":String(e),n=null==t?"__null__":String(t),l=m.get(r)??!0;return l!==(m.get(n)??!0)?l?-1:1:"number"==typeof e&&"number"==typeof t?e-t:d(e).localeCompare(d(t))}),0===C.length){y.style.height="0px",x.innerHTML="";const e=document.createElement("div");return e.className="tbw-filter-no-match",e.textContent="No matching values",void x.appendChild(e)}k()};let F;w.addEventListener("scroll",()=>{C.length>0&&k()},{passive:!0}),S(p.value),e.appendChild(w),p.addEventListener("input",()=>{clearTimeout(F),F=setTimeout(()=>{a.set(s,p.value),S(p.value)},l.debounceMs??150)});const N=document.createElement("div");N.className="tbw-filter-buttons";const A=document.createElement("button");A.type="button",A.className="tbw-filter-apply-btn",A.textContent="Apply",A.addEventListener("click",()=>{const e=[];for(const[t,n]of m)if(!n)if("__null__"===t)e.push(null);else{const n=r.find(e=>String(e)===t);e.push(void 0!==n?n:t)}t.applySetFilter(e)}),N.appendChild(A);const T=document.createElement("button");T.type="button",T.className="tbw-filter-clear-btn",T.textContent="Clear Filter",T.addEventListener("click",()=>{t.clearFilter()}),N.appendChild(T),e.appendChild(N)}function f(e,t){if("number"==typeof e)return e;if("string"==typeof e){const r=parseFloat(e);return isNaN(r)?t:r}return t}class h extends n.BaseGridPlugin{static manifest={events:[{type:"filter-change",description:"Emitted when filter criteria change. Broadcast to both DOM consumers and plugin bus."}],queries:[{type:"getContextMenuItems",description:"Contributes filter-related items to the header context menu"}]};name="filtering";styles='@layer tbw-plugins{tbw-grid .tbw-quick-filter-input{flex:1;max-width:300px;height:var(--tbw-input-height, 1.75rem);padding:var(--tbw-input-padding, 0 .5rem);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);background:var(--tbw-color-bg);color:var(--tbw-color-fg);font-size:var(--tbw-font-size-sm, .8125rem)}tbw-grid .tbw-quick-filter-input:focus{outline:none;border-color:var(--tbw-color-accent)}tbw-grid .header-cell.filtered:before{content:"";position:absolute;top:var(--tbw-spacing-xs, .25rem);right:var(--tbw-spacing-xs, .25rem);width:var(--tbw-indicator-size, .375rem);height:var(--tbw-indicator-size, .375rem);background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border-radius:50%}tbw-grid .tbw-filter-btn{display:var(--tbw-filter-btn-display, inline-flex);visibility:var(--tbw-filter-btn-visibility, visible);align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;padding:2px;margin-left:var(--tbw-spacing-xs, .25rem);opacity:.4;transition:opacity .15s,visibility 0s,display 0s allow-discrete;color:inherit;vertical-align:middle;transition-behavior:allow-discrete}tbw-grid .tbw-filter-btn:hover,tbw-grid .tbw-filter-btn.active{opacity:1;visibility:visible;display:inline-flex}tbw-grid .tbw-filter-btn.active{color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6))}tbw-grid .header-row .cell:hover .tbw-filter-btn,tbw-grid .header-row .cell.filtered .tbw-filter-btn{display:inline-flex;visibility:visible}}';get defaultConfig(){return{debounceMs:300,caseSensitive:!1}}isFilteringEnabled(){return!1!==this.grid.effectiveConfig?.filterable}isColumnFilterable(e){return!!this.isFilteringEnabled()&&!1!==e.filterable}getDataRows(){const e=this.sourceRows;if(e.length>0)return e;const t=this.rows;return 0===t.length?t:t.filter(e=>null!=e&&!0!==e.__loading)}getFilterValues(){const e=this.grid.effectiveConfig?.columns;if(!e)return;let t;for(const n of e)if(n.field)if(n.filterValue)t||(t=new Map),t.set(n.field,n.filterValue);else if(n.valueAccessor){t||(t=new Map);const e=n;t.set(n.field,(t,n)=>r.resolveCellValue(n,e))}return t}filters=new Map;cachedResult=null;cacheKey=null;cachedInputSpot=null;openPanelField=null;panelElement=null;panelAnchorElement=null;panelButtonElement=null;searchText=new Map;excludedValues=new Map;panelAbortController=null;globalStylesInjected=!1;columnLookup=null;columnLookupRef=null;getColumnByField(e){const t=this.grid.effectiveConfig?.columns;if(!t)return;let r=this.columnLookup;if(t!==this.columnLookupRef||!r){r=new Map;for(const e of t)e.field&&r.set(e.field,e);this.columnLookup=r,this.columnLookupRef=t}return r.get(e)}computeSelected(){const e={},t=[];for(const[n,l]of this.filters)if("set"===l.type)if("in"===l.operator&&Array.isArray(l.value))e[n]=l.value;else if("notIn"===l.operator){const e=this.getColumnByField(n),l=e?.filterValue??(e?.valueAccessor?(t,n)=>r.resolveCellValue(n,e):void 0);t.push({field:n,filterValue:l})}if(t.length>0){const r=function(e,t){const r=new Map;for(const{field:l,filterValue:i}of t)r.set(l,{values:new Set,hasBlank:!1,hasExtractor:!!i});for(const l of e)for(const{field:e,filterValue:n}of t){const t=r.get(e),i=l[e];if(n){const e=n(i,l);if(Array.isArray(e)){0===e.length&&(t.hasBlank=!0);for(const r of e)null!=r&&t.values.add(r)}else null!=e?t.values.add(e):t.hasBlank=!0}else null!=i&&""!==i?t.values.add(i):t.hasBlank=!0}const n=new Map;for(const[l,{values:i,hasBlank:s}]of r)s&&i.add(a),n.set(l,[...i].sort((e,t)=>"number"==typeof e&&"number"==typeof t?e-t:String(e).localeCompare(String(t))));return n}(this.getDataRows(),t);for(const{field:n}of t){const t=this.excludedValues.get(n),l=r.get(n)??[];e[n]=t?l.filter(e=>!t.has(e)):l}}return e}syncExcludedValues(e,t){if(t)if("set"===t.type&&"notIn"===t.operator&&Array.isArray(t.value))this.excludedValues.set(e,new Set(t.value));else if("set"===t.type&&"in"===t.operator&&Array.isArray(t.value)){const r=this.getDataRows();if(!r||0===r.length)return void this.excludedValues.delete(e);const n=t.value,l=new Set(n.map(e=>null==e?a:e)),i=this.getUniqueValues(e),s=new Set(i.filter(e=>!l.has(e)));this.excludedValues.set(e,s)}else"set"===t.type&&this.excludedValues.delete(e);else this.excludedValues.delete(e)}attach(e){super.attach(e),this.injectGlobalStyles()}detach(){this.filters.clear(),this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null,this.columnLookup=null,this.columnLookupRef=null,this.openPanelField=null,this.panelElement&&(this.panelElement.remove(),this.panelElement=null),this.searchText.clear(),this.excludedValues.clear(),this.panelAbortController?.abort(),this.panelAbortController=null}handleQuery(e){if("filter:get-model"===e.type){if(!this.filters.size)return;return Object.fromEntries(this.filters)}if("getContextMenuItems"===e.type){const t=e.context;if(!t.isHeader)return;const r=t.column;if(!r?.field)return;if(!this.isFilteringEnabled())return;if(!this.isColumnFilterable(r))return;const n=[],l=this.isFieldFiltered(r.field),i=this.filters.size>0;return l&&n.push({id:"filtering/clear-column-filter",label:"Clear Filter",icon:"✕",order:20,action:()=>this.clearFieldFilter(r.field)}),i&&n.push({id:"filtering/clear-all-filters",label:"Clear All Filters",icon:"✕",order:21,disabled:!i,action:()=>this.clearAllFilters()}),n.length>0?n:void 0}}processRows(e){if(!this.filters.size)return e;const t=[...this.filters.values()];if(this.config.filterHandler)return this.cachedResult?this.cachedResult:e;const r=(n=t,JSON.stringify(n.map(e=>({field:e.field,operator:e.operator,value:e.value,valueTo:e.valueTo}))));var n;const l={len:e.length,first:e[0],mid:e[Math.floor(e.length/2)],last:e[e.length-1]},i=null!=this.cachedInputSpot&&l.len===this.cachedInputSpot.len&&l.first===this.cachedInputSpot.first&&l.mid===this.cachedInputSpot.mid&&l.last===this.cachedInputSpot.last;if(this.cacheKey===r&&this.cachedResult&&i)return this.cachedResult;if(!i)for(const[s,o]of this.filters)"set"===o.type&&"in"===o.operator&&this.syncExcludedValues(s,o);const a=o(e,t,this.config.caseSensitive,this.getFilterValues());return this.cachedResult=a,this.cacheKey=r,this.cachedInputSpot=l,a}afterRender(){const e=this.gridElement;if(!e)return;e.querySelectorAll('[part~="header-cell"]').forEach(e=>{const t=e.getAttribute("data-col");if(null===t)return;const r=this.visibleColumns[parseInt(t,10)];if(!r||!this.isColumnFilterable(r))return;if(l.isUtilityColumn(r))return;const n=r.field;if(!n)return;const i=this.filters.has(n);let a=e.querySelector(".tbw-filter-btn");if(a){const t=a.classList.contains("active");return a.classList.toggle("active",i),e.classList.toggle("filtered",i),i?e.setAttribute("aria-description","Filtered"):e.removeAttribute("aria-description"),void(t!==i&&this.setIcon(a,i?"filterActive":"filter"))}a=document.createElement("button"),a.type="button",a.className="tbw-filter-btn",a.setAttribute("aria-label",`Filter ${r.header??n}`),this.setIcon(a,i?"filterActive":"filter"),i&&(a.classList.add("active"),e.classList.add("filtered"),e.setAttribute("aria-description","Filtered")),a.addEventListener("click",e=>{e.stopPropagation(),this.toggleFilterPanel(n,r,a)});const s=e.querySelector(".resize-handle");s?e.insertBefore(a,s):e.appendChild(a)})}setFilter(e,r,n){if(null===r)this.filters.delete(e),this.syncExcludedValues(e,null);else{const t={...r,field:e};this.filters.set(e,t),this.syncExcludedValues(e,t)}if(this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null,n?.silent)this.emitPluginEvent("filter-change",{filters:[...this.filters.values()]});else{this.broadcast("filter-change",{filters:[...this.filters.values()],filteredRowCount:0,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.();const n=this.getColumnByField(e)?.header??e;t.announce(this.gridElement,null===r?t.getA11yMessage(this.gridElement,"filterCleared",n):t.getA11yMessage(this.gridElement,"filterApplied",n))}this.requestRender()}getFilter(e){return this.filters.get(e)}getFilters(){return[...this.filters.values()]}getFilterModel(){return this.getFilters()}setFilterModel(e,t){this.filters.clear(),this.excludedValues.clear();for(const r of e)this.filters.set(r.field,r),this.syncExcludedValues(r.field,r);this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null,t?.silent?this.emitPluginEvent("filter-change",{filters:[...this.filters.values()]}):(this.broadcast("filter-change",{filters:[...this.filters.values()],filteredRowCount:0,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.()),this.requestRender()}clearAllFilters(e){this.filters.clear(),this.excludedValues.clear(),this.searchText.clear(),this.applyFiltersInternal(e?.silent),e?.silent||t.announce(this.gridElement,t.getA11yMessage(this.gridElement,"allFiltersCleared"))}clearFieldFilter(e,r){if(this.filters.delete(e),this.excludedValues.delete(e),this.searchText.delete(e),this.applyFiltersInternal(r?.silent),!r?.silent){const r=this.getColumnByField(e)?.header??e;t.announce(this.gridElement,t.getA11yMessage(this.gridElement,"filterCleared",r))}}isFieldFiltered(e){return this.filters.has(e)}getFilteredRowCount(){return this.cachedResult?.length??this.rows.length}getActiveFilters(){return this.getFilters()}getUniqueValues(e){const t=this.getColumnByField(e),r=t?.filterValue;return c(this.getDataRows(),e,r)}getStaleFilters(){const e=[];for(const[t,r]of this.filters){if("set"!==r.type)continue;const n=this.getUniqueValues(t);if("notIn"===r.operator&&Array.isArray(r.value)){const t=new Set(r.value);0===n.filter(e=>!t.has(e)).length&&e.push(r)}else if("in"===r.operator&&Array.isArray(r.value)){const t=new Set(r.value);0===n.filter(e=>t.has(e)).length&&e.push(r)}}return e}getBlankMode(e){const t=this.filters.get(e);return"blank"===t?.operator?"blanksOnly":"notBlank"===t?.operator?"nonBlanksOnly":"all"}toggleBlankFilter(e,t){if("all"===t){const t=this.filters.get(e);if(t?.valueTo&&"object"==typeof t.valueTo){const r=t.valueTo;this.setFilter(e,r)}else this.setFilter(e,null);return}const r=this.filters.get(e),n=r&&"blank"!==r.operator&&"notBlank"!==r.operator?{type:r.type,operator:r.operator,value:r.value,valueTo:r.valueTo}:r?.valueTo;this.setFilter(e,{type:r?.type??"text",operator:"blanksOnly"===t?"blank":"notBlank",value:"",valueTo:n})}copyGridThemeContext(e){const t=this.gridElement;if(!t)return;for(const n of t.classList)n.startsWith("tbw-")||"selecting"===n||e.classList.add(n);const r=t.dataset.theme;r&&(e.dataset.theme=r)}injectGlobalStyles(){if(this.globalStylesInjected)return;if(document.getElementById("tbw-filter-panel-styles"))return void(this.globalStylesInjected=!0);const e=document.createElement("style");e.id="tbw-filter-panel-styles",e.textContent="@layer tbw-plugins{.tbw-filter-panel{position:fixed;background:var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));color:var(--tbw-filter-panel-fg, var(--tbw-color-fg, light-dark(#222222, #eeeeee)));border:1px solid var(--tbw-filter-panel-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-panel-radius, var(--tbw-border-radius, .25rem));box-shadow:0 4px 16px var(--tbw-filter-panel-shadow, var(--tbw-color-shadow, light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3))));padding:var(--tbw-panel-padding, var(--tbw-spacing-lg, .75rem));z-index:10000;min-width:200px;max-width:280px;max-height:350px;display:flex;flex-direction:column;font-family:var(--tbw-font-family, system-ui, sans-serif);font-size:var(--tbw-font-size, .8125rem);transform-origin:top center}.tbw-filter-panel.tbw-filter-panel-above{transform-origin:bottom center}.tbw-filter-panel.tbw-filter-panel-animated{animation:tbw-filter-panel-enter var(--tbw-animation-duration, .15s) var(--tbw-animation-easing, ease-out)}.tbw-filter-panel.tbw-filter-panel-above.tbw-filter-panel-animated{animation:tbw-filter-panel-enter-above var(--tbw-animation-duration, .15s) var(--tbw-animation-easing, ease-out)}@keyframes tbw-filter-panel-enter{0%{opacity:0;transform:scaleY(.3) translateY(-10px)}to{opacity:1;transform:scaleY(1) translateY(0)}}@keyframes tbw-filter-panel-enter-above{0%{opacity:0;transform:scaleY(.3) translateY(10px)}to{opacity:1;transform:scaleY(1) translateY(0)}}@supports (anchor-name: --test){.tbw-filter-panel{position-anchor:--tbw-filter-anchor;top:anchor(bottom);right:anchor(right);margin-top:4px;position-try-fallbacks:flip-inline,flip-block,flip-block flip-inline}}.tbw-filter-search{margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));min-height:var(--tbw-filter-item-height, 28px)}.tbw-filter-search-input{height:var(--tbw-filter-item-height, 28px);width:100%;padding:var(--tbw-filter-search-padding, var(--tbw-spacing-sm, .375rem) var(--tbw-spacing-md, .5rem));background:var(--tbw-filter-input-bg, var(--tbw-color-bg, transparent));color:inherit;border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-input-radius, var(--tbw-border-radius, .25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-search-input:focus{outline:none;border-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6)) r g b / 15%)}.tbw-filter-actions{display:flex;padding:var(--tbw-button-padding-sm, .25rem .125rem);margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border-bottom:1px solid var(--tbw-filter-divider, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));min-height:var(--tbw-filter-item-height, 28px)}.tbw-filter-actions .tbw-filter-value-item{flex:1}.tbw-filter-values{flex:1;overflow-y:auto;margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));max-height:180px;position:relative}.tbw-filter-values-spacer{width:1px}.tbw-filter-values-content{position:absolute;top:0;left:0;right:0}.tbw-filter-value-item{display:flex;align-items:center;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding:var(--tbw-button-padding-sm, .25rem .125rem);cursor:pointer;border-radius:3px;height:var(--tbw-filter-item-height, 28px)}.tbw-filter-value-item:hover{background:var(--tbw-filter-hover, var(--tbw-color-row-hover, light-dark(#f0f6ff, #1c1c1c)))}.tbw-filter-checkbox{margin:0;cursor:pointer;accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6))}.tbw-filter-no-match{color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));padding:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem)) 0;text-align:center;font-style:italic}.tbw-filter-buttons{display:flex;gap:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));padding-top:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem));border-top:1px solid var(--tbw-filter-divider, var(--tbw-color-border, light-dark(#d0d0d4, #454545)))}.tbw-filter-apply-btn{flex:1;padding:var(--tbw-filter-btn-padding, var(--tbw-button-padding, .375rem .75rem));background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));color:var(--tbw-filter-accent-fg, var(--tbw-color-accent-fg, light-dark(#ffffff, #000000)));border:none;border-radius:var(--tbw-border-radius, .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);font-weight:var(--tbw-filter-btn-font-weight, 500);min-height:var(--tbw-filter-btn-min-height, auto)}.tbw-filter-apply-btn:hover{filter:brightness(.9)}.tbw-filter-clear-btn{flex:1;padding:var(--tbw-filter-btn-padding, var(--tbw-button-padding, .375rem .75rem));background:transparent;color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-border-radius, .25rem);cursor:pointer;font-size:var(--tbw-font-size-sm, .8125rem);font-weight:var(--tbw-filter-btn-font-weight, 500);min-height:var(--tbw-filter-btn-min-height, auto)}.tbw-filter-clear-btn:hover{background:var(--tbw-filter-hover, var(--tbw-color-row-hover, light-dark(#f0f6ff, #1c1c1c)))}.tbw-filter-range-inputs,.tbw-filter-date-range{display:flex;align-items:flex-end;gap:var(--tbw-spacing-sm, .375rem);margin-bottom:var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-filter-range-group,.tbw-filter-date-group{display:flex;flex-direction:column;gap:var(--tbw-spacing-xs, .25rem);flex:1}.tbw-filter-range-label{font-size:var(--tbw-font-size-xs, .75rem);color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)))}.tbw-filter-range-input,.tbw-filter-date-input{width:100%;height:var(--tbw-filter-item-height, 28px);padding:var(--tbw-spacing-xs, .25rem) var(--tbw-spacing-sm, .375rem);background:var(--tbw-filter-input-bg, var(--tbw-color-bg, transparent));color:inherit;border:1px solid var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:var(--tbw-filter-input-radius, var(--tbw-border-radius, .25rem));font-size:inherit;box-sizing:border-box}.tbw-filter-range-input:focus,.tbw-filter-date-input:focus{outline:none;border-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));box-shadow:0 0 0 2px rgba(from var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6)) r g b / 15%)}.tbw-filter-range-separator{color:var(--tbw-filter-muted, var(--tbw-color-fg-muted, light-dark(#555555, #aaaaaa)));padding-bottom:var(--tbw-spacing-xs, .25rem)}.tbw-filter-blank-option{display:flex;align-items:center;gap:var(--tbw-spacing-sm, .375rem);padding:var(--tbw-spacing-xs, .25rem) 0;margin-bottom:var(--tbw-spacing-xs, .25rem);font-size:var(--tbw-font-size-sm, .8125rem);cursor:pointer;-webkit-user-select:none;user-select:none}.tbw-filter-blank-checkbox{accent-color:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));margin:0;cursor:pointer}.tbw-filter-date-range.tbw-filter-disabled,.tbw-filter-range-inputs.tbw-filter-disabled,.tbw-filter-range-slider.tbw-filter-disabled{opacity:.4;pointer-events:none}.tbw-filter-range-slider{position:relative;height:24px;margin:var(--tbw-spacing-md, .5rem) 0 var(--tbw-panel-gap, var(--tbw-spacing-md, .5rem))}.tbw-filter-range-track{position:absolute;top:50%;left:0;right:0;height:4px;background:var(--tbw-filter-input-border, var(--tbw-color-border, light-dark(#d0d0d4, #454545)));border-radius:2px;transform:translateY(-50%)}.tbw-filter-range-fill{position:absolute;top:50%;height:4px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border-radius:2px;transform:translateY(-50%)}.tbw-filter-range-thumb{position:absolute;top:0;width:100%;height:100%;background:none;pointer-events:none;-webkit-appearance:none;appearance:none}.tbw-filter-range-thumb::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border:2px solid var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));border-radius:50%;cursor:pointer;pointer-events:all;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-moz-range-thumb{width:16px;height:16px;background:var(--tbw-filter-accent, var(--tbw-color-accent, #3b82f6));border:2px solid var(--tbw-filter-panel-bg, var(--tbw-color-panel-bg, light-dark(#eeeeee, #222222)));border-radius:50%;cursor:pointer;pointer-events:all;box-shadow:0 1px 3px #0003}.tbw-filter-range-thumb::-webkit-slider-thumb:hover{transform:scale(1.1)}.tbw-filter-range-thumb::-moz-range-thumb:hover{transform:scale(1.1)}}",document.head.appendChild(e),this.globalStylesInjected=!0}toggleFilterPanel(e,t,n){if(this.openPanelField===e)return void this.closeFilterPanel();this.closeFilterPanel();const l=document.createElement("div");if(l.className="tbw-filter-panel",this.copyGridThemeContext(l),this.isAnimationEnabled&&l.classList.add("tbw-filter-panel-animated"),this.panelElement=l,this.openPanelField=e,n.classList.add("active"),this.panelButtonElement=n,this.config.valuesHandler)return l.innerHTML='<div class="tbw-filter-loading">Loading...</div>',document.body.appendChild(l),this.positionPanel(l,n),this.setupPanelCloseHandler(l,n),void this.config.valuesHandler(e,t).then(r=>{this.openPanelField===e&&this.panelElement&&(l.innerHTML="",this.renderPanelContent(e,t,l,r))});const i=t.filterValue??(t.valueAccessor?(e,n)=>r.resolveCellValue(n,t):void 0),a=c(this.getDataRows(),e,i);document.body.appendChild(l),this.positionPanel(l,n),this.renderPanelContent(e,t,l,a),this.setupPanelCloseHandler(l,n)}renderPanelContent(e,t,r,n){const l=this.filters.get(e);if("in"===l?.operator&&"set"===l.type&&Array.isArray(l.value)&&!this.excludedValues.has(e)){const t=l.value,r=new Set(t.map(e=>null==e?a:e)),i=new Set(n.filter(e=>!r.has(e)));this.excludedValues.set(e,i)}let i=this.excludedValues.get(e);i||(i=new Set,this.excludedValues.set(e,i));const s=this.searchText.get(e)??"",o={field:e,column:t,uniqueValues:n,excludedValues:i,searchText:s,currentFilter:this.filters.get(e),applySetFilter:(t,r)=>{this.applySetFilter(e,t,r),this.closeFilterPanel()},applyTextFilter:(t,r,n)=>{this.applyTextFilter(e,t,r,n),this.closeFilterPanel()},clearFilter:()=>{this.clearFieldFilter(e),this.closeFilterPanel()},closePanel:()=>this.closeFilterPanel()};let c=!1;if(this.config.filterPanelRenderer&&(this.config.filterPanelRenderer(r,o),c=r.children.length>0),!c&&t.type){const e=this.grid.effectiveConfig.typeDefaults?.[t.type];e?.filterPanelRenderer&&(e.filterPanelRenderer(r,o),c=r.children.length>0)}if(!c){const e=t.filterType??t.type;"number"===e?function(e,t,r,n){const{field:l,column:i}=t,a=i.filterParams,s=i.editorParams,o=r.filter(e=>"number"==typeof e&&!isNaN(e)),c=o.length>0?Math.min(...o):0,d=o.length>0?Math.max(...o):100,u=f(a?.min??s?.min,c),p=f(a?.max??s?.max,d),h=a?.step??s?.step??1,b=n.get(l);let g=u,m=p;const v="blank"===b?.operator;"between"===b?.operator?(g=f(b.value,u),m=f(b.valueTo,p)):"greaterThanOrEqual"===b?.operator?g=f(b.value,u):"lessThanOrEqual"===b?.operator&&(m=f(b.value,p));const w=document.createElement("div");w.className="tbw-filter-range-inputs";const y=document.createElement("div");y.className="tbw-filter-range-group";const x=document.createElement("label");x.textContent="Min",x.className="tbw-filter-range-label";const C=document.createElement("input");C.type="number",C.className="tbw-filter-range-input",C.min=String(u),C.max=String(p),C.step=String(h),C.value=String(g),y.appendChild(x),y.appendChild(C),w.appendChild(y);const E=document.createElement("span");E.className="tbw-filter-range-separator",E.textContent="–",w.appendChild(E);const k=document.createElement("div");k.className="tbw-filter-range-group";const S=document.createElement("label");S.textContent="Max",S.className="tbw-filter-range-label";const F=document.createElement("input");F.type="number",F.className="tbw-filter-range-input",F.min=String(u),F.max=String(p),F.step=String(h),F.value=String(m),k.appendChild(S),k.appendChild(F),w.appendChild(k),e.appendChild(w);const N=document.createElement("div");N.className="tbw-filter-range-slider";const A=document.createElement("div");A.className="tbw-filter-range-track";const T=document.createElement("div");T.className="tbw-filter-range-fill";const L=document.createElement("input");L.type="range",L.className="tbw-filter-range-thumb tbw-filter-range-thumb-min",L.min=String(u),L.max=String(p),L.step=String(h),L.value=String(g);const P=document.createElement("input");P.type="range",P.className="tbw-filter-range-thumb tbw-filter-range-thumb-max",P.min=String(u),P.max=String(p),P.step=String(h),P.value=String(m),N.appendChild(A),N.appendChild(T),N.appendChild(L),N.appendChild(P),e.appendChild(N);const R=document.createElement("label");R.className="tbw-filter-blank-option";const V=document.createElement("input");V.type="checkbox",V.className="tbw-filter-blank-checkbox",V.checked=v;const M=document.createTextNode("Blank");R.appendChild(V),R.appendChild(M);const B=e=>{C.disabled=e,F.disabled=e,L.disabled=e,P.disabled=e,w.classList.toggle("tbw-filter-disabled",e),N.classList.toggle("tbw-filter-disabled",e)};B(v),V.addEventListener("change",()=>{B(V.checked)}),e.appendChild(R);const q=()=>{const e=parseFloat(L.value),t=parseFloat(P.value),r=p-u,n=(e-u)/r*100,l=(t-u)/r*100;T.style.left=`${n}%`,T.style.width=l-n+"%"};L.addEventListener("input",()=>{const e=Math.min(parseFloat(L.value),parseFloat(P.value));L.value=String(e),C.value=String(e),q()}),P.addEventListener("input",()=>{const e=Math.max(parseFloat(P.value),parseFloat(L.value));P.value=String(e),F.value=String(e),q()}),C.addEventListener("input",()=>{const e=parseFloat(C.value);let t=Number.isFinite(e)?e:u;t=Math.max(u,Math.min(t,parseFloat(F.value))),L.value=String(t),q()}),F.addEventListener("input",()=>{const e=parseFloat(F.value);let t=Number.isFinite(e)?e:p;t=Math.min(p,Math.max(t,parseFloat(C.value))),P.value=String(t),q()}),q();const I=document.createElement("div");I.className="tbw-filter-buttons";const z=document.createElement("button");z.type="button",z.className="tbw-filter-apply-btn",z.textContent="Apply",z.addEventListener("click",()=>{if(V.checked)return void t.applyTextFilter("blank","");const e=parseFloat(C.value),r=parseFloat(F.value),n=Number.isFinite(e)?e:u,l=Number.isFinite(r)?r:p;n!==u||l!==p?t.applyTextFilter("between",n,l):t.clearFilter()}),I.appendChild(z);const _=document.createElement("button");_.type="button",_.className="tbw-filter-clear-btn",_.textContent="Clear Filter",_.addEventListener("click",()=>{t.clearFilter()}),I.appendChild(_),e.appendChild(I)}(r,o,n,this.filters):"date"===e?function(e,t,r,n){const{field:l,column:i}=t,a=i.filterParams,s=i.editorParams,o=r.filter(e=>e instanceof Date||"string"==typeof e&&!isNaN(Date.parse(e))).map(e=>e instanceof Date?e:new Date(e)).filter(e=>!isNaN(e.getTime())),c=o.length>0?new Date(Math.min(...o.map(e=>e.getTime()))):null,p=o.length>0?new Date(Math.max(...o.map(e=>e.getTime()))):null,f=u(a?.min)||u(s?.min)||d(c),h=u(a?.max)||u(s?.max)||d(p),b=n.get(l);let g="",m="";const v="blank"===b?.operator;"between"===b?.operator?(g=u(b.value)||"",m=u(b.valueTo)||""):"greaterThanOrEqual"===b?.operator?g=u(b.value)||"":"lessThanOrEqual"===b?.operator&&(m=u(b.value)||"");const w=document.createElement("div");w.className="tbw-filter-date-range";const y=document.createElement("div");y.className="tbw-filter-date-group";const x=document.createElement("label");x.textContent="From",x.className="tbw-filter-range-label";const C=document.createElement("input");C.type="date",C.className="tbw-filter-date-input",f&&(C.min=f),h&&(C.max=h),C.value=g,y.appendChild(x),y.appendChild(C),w.appendChild(y);const E=document.createElement("span");E.className="tbw-filter-range-separator",E.textContent="–",w.appendChild(E);const k=document.createElement("div");k.className="tbw-filter-date-group";const S=document.createElement("label");S.textContent="To",S.className="tbw-filter-range-label";const F=document.createElement("input");F.type="date",F.className="tbw-filter-date-input",f&&(F.min=f),h&&(F.max=h),F.value=m,k.appendChild(S),k.appendChild(F),w.appendChild(k),e.appendChild(w);const N=document.createElement("label");N.className="tbw-filter-blank-option";const A=document.createElement("input");A.type="checkbox",A.className="tbw-filter-blank-checkbox",A.checked=v;const T=document.createTextNode("Show only blank");N.appendChild(A),N.appendChild(T);const L=e=>{C.disabled=e,F.disabled=e,w.classList.toggle("tbw-filter-disabled",e)};L(v),A.addEventListener("change",()=>{L(A.checked)}),e.appendChild(N);const P=document.createElement("div");P.className="tbw-filter-buttons";const R=document.createElement("button");R.type="button",R.className="tbw-filter-apply-btn",R.textContent="Apply",R.addEventListener("click",()=>{if(A.checked)return void t.applyTextFilter("blank","");const e=C.value,r=F.value;e&&r?t.applyTextFilter("between",e,r):e?t.applyTextFilter("greaterThanOrEqual",e):r?t.applyTextFilter("lessThanOrEqual",r):t.clearFilter()}),P.appendChild(R);const V=document.createElement("button");V.type="button",V.className="tbw-filter-clear-btn",V.textContent="Clear Filter",V.addEventListener("click",()=>{t.clearFilter()}),P.appendChild(V),e.appendChild(P)}(r,o,n,this.filters):p(r,o,n,i,{caseSensitive:this.config.caseSensitive,debounceMs:this.config.debounceMs},this.searchText)}}setupPanelCloseHandler(e,t){this.panelAbortController=new AbortController;const{signal:r}=this.panelAbortController;setTimeout(()=>{r.aborted||document.addEventListener("click",r=>{e.contains(r.target)||r.target===t||this.closeFilterPanel()},{signal:r})},0)}closeFilterPanel(){const e=this.panelElement;if(e&&(e.remove(),this.panelElement=null),this.panelAnchorElement&&(this.panelAnchorElement.style.anchorName="",this.panelAnchorElement=null),this.panelButtonElement){const e=this.openPanelField;e&&this.filters.has(e)||this.panelButtonElement.classList.remove("active"),this.panelButtonElement=null}this.openPanelField=null,this.panelAbortController?.abort(),this.panelAbortController=null}static supportsAnchorPositioning=null;static checkAnchorPositioningSupport(){return null===h.supportsAnchorPositioning&&(h.supportsAnchorPositioning=CSS.supports("anchor-name","--test")),h.supportsAnchorPositioning}positionPanel(e,t){const r=t.closest(".header-row")??t;if(r.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=r,h.checkAnchorPositioningSupport()){r.style.anchorName="",t.style.anchorName="--tbw-filter-anchor",this.panelAnchorElement=t;const n=r.getBoundingClientRect().bottom-t.getBoundingClientRect().bottom;return e.style.marginTop=`${n+4}px`,void requestAnimationFrame(()=>{const r=e.getBoundingClientRect(),n=t.getBoundingClientRect();r.top<n.top&&e.classList.add("tbw-filter-panel-above")})}const n=r.getBoundingClientRect(),l=t.getBoundingClientRect();e.style.position="fixed",e.style.top=`${n.bottom+4}px`,e.style.left=`${l.right}px`,requestAnimationFrame(()=>{const t=e.getBoundingClientRect();e.style.left=l.right-t.width+"px";l.right-t.width<8&&(e.style.left=`${l.left}px`),t.bottom>window.innerHeight-8&&(e.style.top=n.top-t.height-4+"px",e.classList.add("tbw-filter-panel-above"))})}applySetFilter(e,t,r){if(this.excludedValues.set(e,new Set(t)),0===t.length)this.filters.delete(e);else{const n=this.filters.get(e);if("in"===n?.operator){const n=this.getUniqueValues(e),l=new Set(t),i=n.filter(e=>!l.has(e));this.filters.set(e,{field:e,type:"set",operator:"in",value:i,...void 0!==r&&{valueTo:r}})}else this.filters.set(e,{field:e,type:"set",operator:"notIn",value:t,...void 0!==r&&{valueTo:r}})}this.applyFiltersInternal()}applyTextFilter(e,t,r,n){const l=this.getColumnByField(e),i=l?.filterType??l?.type??"text";this.filters.set(e,{field:e,type:i,operator:t,value:r,valueTo:n}),this.applyFiltersInternal()}applyFiltersInternal(e){this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null;const t=[...this.filters.values()];if(this.config.filterHandler){this.gridElement.setAttribute("aria-busy","true");const r=this.config.filterHandler(t,this.sourceRows),n=r=>{this.gridElement.removeAttribute("aria-busy"),this.cachedResult=r,this.grid.rows=r,e?this.emitPluginEvent("filter-change",{filters:t}):(this.broadcast("filter-change",{filters:t,filteredRowCount:r.length,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.()),this.requestRender()};return void(r&&"function"==typeof r.then?r.then(n):n(r))}e?this.emitPluginEvent("filter-change",{filters:t}):(this.broadcast("filter-change",{filters:t,filteredRowCount:0,selected:this.computeSelected()}),this.config.trackColumnState&&this.grid.requestStateChange?.()),this.requestRender()}getColumnState(e){if(!this.config.trackColumnState)return;const t=this.filters.get(e);return t?{filter:{type:t.type,operator:t.operator,value:t.value,valueTo:t.valueTo}}:void 0}applyColumnState(e,t){if(!this.config.trackColumnState)return;if(!t.filter)return void this.filters.delete(e);const r={field:e,type:t.filter.type,operator:t.filter.operator,value:t.filter.value,valueTo:t.filter.valueTo};this.filters.set(e,r),this.cachedResult=null,this.cacheKey=null,this.cachedInputSpot=null}}e.BLANK_FILTER_VALUE=a,e.FilteringPlugin=h,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=filtering.umd.js.map
|