@gp-grid/vue 0.16.1 → 0.17.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/README.md +3 -3
- package/dist/index.js +1 -1
- package/dist/styles.css +249 -86
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
<a href="https://www.gp-grid.io">
|
|
5
5
|
<picture>
|
|
6
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://
|
|
7
|
-
<source media="(prefers-color-scheme: light)" srcset="https://
|
|
8
|
-
<img width="50%" alt="
|
|
6
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://www.gp-grid.io/logo-light.svg"/>
|
|
7
|
+
<source media="(prefers-color-scheme: light)" srcset="https://www.gp-grid.io/logo-dark.svg"/>
|
|
8
|
+
<img width="50%" alt="gp-grid Logo" src="https://www.gp-grid.io/logo-dark.svg"/>
|
|
9
9
|
</picture>
|
|
10
10
|
</a>
|
|
11
11
|
<div align="center">
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Fragment as e,computed as t,createBlock as n,createCommentVNode as r,createElementBlock as i,createElementVNode as a,createTextVNode as o,createVNode as s,defineComponent as c,h as l,normalizeClass as u,normalizeStyle as d,onMounted as f,onUnmounted as p,openBlock as m,ref as h,renderList as g,resolveDynamicComponent as _,shallowRef as v,toDisplayString as y,unref as b,vModelText as x,watch as S,watchEffect as C,withDirectives as w,withModifiers as T}from"vue";import{GridCore as E,GridCore as D,applyInstruction as O,buildCellClasses as k,buildCellClasses as A,calculateColumnPositions as j,calculateFillHandlePosition as M,calculateFilterPopupPosition as N,calculateScaledColumnPositions as P,createClientDataSource as F,createClientDataSource as I,createDataSourceFromArray as L,createDataSourceFromArray as R,createInitialState as z,createInitialState as B,createMutableClientDataSource as V,createMutableClientDataSource as ee,createServerDataSource as te,findColumnAtX as ne,formatCellValue as re,getFieldValue as ie,getFieldValue as H,getTotalWidth as ae,getTotalWidth as oe,gridStyles as U,isCellActive as W,isCellActive as G,isCellEditing as K,isCellEditing as q,isCellInFillPreview as se,isCellInFillPreview as J,isCellSelected as ce,isCellSelected as Y,isRowVisible as le,scrollCellIntoView as ue}from"@gp-grid/core";function X(e){let t=v(B(e));return{state:t,applyInstructions:e=>{let n=t.value,r=new Map(n.slots),i=new Map(n.headers),a={pendingScrollTop:null};for(let t of e){let e=O(t,r,i);e&&Object.assign(a,e)}a.slots=r,a.headers=i,t.value={...n,...a}},reset:()=>{t.value=B()}}}function Z(e,t){let n=h(null);function r(r,i){n.value&&clearInterval(n.value),n.value=setInterval(()=>{let n=e.value;n&&(n.scrollTop+=i,n.scrollLeft+=r,t?.())},16)}function i(){n.value&&=(clearInterval(n.value),null)}return p(()=>{i()}),{startAutoScroll:r,stopAutoScroll:i}}function de(e,t,n,r){let{activeCell:i,selectionRange:a,editingCell:o,filterPopupOpen:s,rowHeight:c,headerHeight:l,columnPositions:u,visibleColumnsWithIndices:d,slots:f,rowsWrapperOffset:m}=r,g=h({isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null}),_=null,v=null,y=null,b=null,x=null,C=e=>{e.preventDefault()},{startAutoScroll:w,stopAutoScroll:T}=Z(t,()=>{let t=e.value;if(_&&t?.input){let e=E();e&&(t.input.handleDragMove(_,e),g.value=t.input.getDragState())}});S([()=>l,()=>c,u,d],()=>{let t=e.value;if(t?.input){let e=d.value;t.input.updateDeps({getHeaderHeight:()=>l,getRowHeight:()=>c,getColumnPositions:()=>u.value,getColumnCount:()=>e.length,getOriginalColumnIndex:t=>{let n=e[t];return n?n.originalIndex:t}})}},{immediate:!0});function E(){let e=t.value;if(!e)return null;let n=e.getBoundingClientRect();return{top:n.top,left:n.left,width:n.width,height:n.height,scrollTop:e.scrollTop,scrollLeft:e.scrollLeft}}function D(e){return{clientX:e.clientX,clientY:e.clientY,button:e.button,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,pointerId:e.pointerId,pointerType:e.pointerType}}function O(){v?.();let n=t=>{t.preventDefault();let n=e.value,r=E();if(!n?.input||!r)return;let i=D(t);_=i;let a=n.input.handleDragMove(i,r);a&&(a.autoScroll?w(a.autoScroll.dx,a.autoScroll.dy):T(),g.value=n.input.getDragState())},r=()=>{try{let t=e.value;t?.input&&t.input.handleDragEnd()}finally{let i=e.value;g.value=i?.input?i.input.getDragState():{isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null},_=null,T(),document.removeEventListener(`touchmove`,C),x!==null&&t.value&&(t.value.style.overflow=x,x=null),document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r),v=null}};document.addEventListener(`pointermove`,n,{passive:!1}),document.addEventListener(`pointerup`,r),document.addEventListener(`pointercancel`,r),v=()=>{document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r)}}function k(){y!==null&&(clearTimeout(y),y=null,e.value?.input?.cancelPendingRowDrag()),b=null}function A(n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleCellMouseDown(n,r,D(i));if(o.focusContainer&&t.value?.focus(),o.startDrag===`selection`)a.input.startSelectionDrag(),g.value=a.input.getDragState(),O();else if(o.startDrag===`row-drag`)g.value=a.input.getDragState(),O();else if(o.startDrag===`row-drag-pending`){k(),b={pointerId:i.pointerId,target:i.currentTarget??i.target};let e=i.clientX,n=i.clientY,r=t=>{let r=t.clientX-e,i=t.clientY-n;(Math.abs(r)>10||Math.abs(i)>10)&&(k(),s())},o=()=>{k(),s()},s=()=>{document.removeEventListener(`pointermove`,r),document.removeEventListener(`pointerup`,o),document.removeEventListener(`pointercancel`,o)};document.addEventListener(`pointermove`,r),document.addEventListener(`pointerup`,o,{once:!0}),document.addEventListener(`pointercancel`,o,{once:!0}),y=setTimeout(()=>{y=null,s();let e=b;if(b=null,a.input.confirmPendingRowDrag()){if(t.value&&(x=t.value.style.overflow,t.value.style.overflow=`hidden`),document.addEventListener(`touchmove`,C,{passive:!1}),e)try{e.target.setPointerCapture(e.pointerId)}catch{}g.value=a.input.getDragState(),O()}},300)}}function j(t,n){let r=e.value;r?.input&&r.input.handleCellDoubleClick(t,n)}function M(t){let n=e.value;if(!n?.input)return;let r=n.input.handleFillHandleMouseDown(i.value,a.value,D(t));if(r.preventDefault&&t.preventDefault(),r.stopPropagation&&t.stopPropagation(),r.startDrag===`fill`){try{t.target.setPointerCapture(t.pointerId)}catch{}g.value=n.input.getDragState(),O()}}function N(t,r){let i=e.value;if(!i?.input)return;let a=n.value[t];if(!a)return;let o=a.colId??a.field;i.input.handleHeaderClick(o,r.shiftKey)}function P(t,n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleHeaderMouseDown(t,n,r,D(i));if(o.preventDefault&&i.preventDefault(),o.stopPropagation&&i.stopPropagation(),o.startDrag===`column-move`){try{i.target.setPointerCapture(i.pointerId)}catch{}g.value=a.input.getDragState(),O()}}function F(t,n,r){let i=e.value;if(!i?.input)return;let a=i.input.handleHeaderResizeMouseDown(t,n,D(r));a.preventDefault&&r.preventDefault(),a.stopPropagation&&r.stopPropagation(),a.startDrag===`column-resize`&&(g.value=i.input.getDragState(),O())}function I(n){let r=e.value,a=t.value;if(!r?.input)return;let l=r.input.handleKeyDown({key:n.key,shiftKey:n.shiftKey,ctrlKey:n.ctrlKey,metaKey:n.metaKey},i.value,o.value,s.value);l.preventDefault&&n.preventDefault(),l.scrollToCell&&a&&ue(r,a,l.scrollToCell.row,c,f.value,m.value)}function L(t){let n=e.value;if(n===null||o.value!==null||s.value)return;let r=t.clipboardData?.getData(`text/plain`)??``;n.pasteClipboardText(r)&&t.preventDefault()}function R(n,r){let i=e.value,a=t.value;if(!i?.input||!a)return;let o=i.input.handleWheel(n.deltaY,n.deltaX,r);o&&(n.preventDefault(),a.scrollTop+=o.dy,a.scrollLeft+=o.dx)}return p(()=>{v?.(),v=null,k(),T(),document.removeEventListener(`touchmove`,C),x!==null&&t.value&&(t.value.style.overflow=x,x=null)}),{handleCellMouseDown:A,handleCellDoubleClick:j,handleFillHandleMouseDown:M,handleHeaderClick:N,handleHeaderMouseDown:P,handleHeaderResizeMouseDown:F,handleKeyDown:I,handlePaste:L,handleWheel:R,dragState:g}}const fe=e=>{let{activeCell:n,selectionRange:r,slots:i,columns:a,visibleColumnsWithIndices:o,columnPositions:s,columnWidths:c,rowHeight:l}=e;return{fillHandlePosition:t(()=>M({activeCell:n.value,selectionRange:r.value,slots:i.value,columns:a.value,visibleColumnsWithIndices:o.value,columnPositions:s.value,columnWidths:c.value,rowHeight:l}))}};function pe(e,t){let{onClose:n,ignoreSelector:r=`.gp-grid-filter-icon`}=t,i=null,a=null;f(()=>{i=t=>{let i=t.target;r&&i.closest(r)||e.value&&!e.value.contains(i)&&n()},a=e=>{e.key===`Escape`&&n()},requestAnimationFrame(()=>{i&&document.addEventListener(`pointerdown`,i),a&&document.addEventListener(`keydown`,a)})}),p(()=>{i&&document.removeEventListener(`pointerdown`,i),a&&document.removeEventListener(`keydown`,a)})}function Q(e,t=`and`){let n=h([...e]);return{conditions:n,combination:h(t),updateCondition:(e,t)=>{let r=[...n.value];r[e]={...r[e],...t},n.value=r},addCondition:e=>{n.value=[...n.value,{operator:e,value:``,valueTo:``,nextOperator:`and`}]},removeCondition:e=>{n.value=n.value.filter((t,n)=>n!==e)}}}const me={class:`gp-grid-filter-content gp-grid-filter-text`},he={key:0,class:`gp-grid-filter-mode-toggle`},ge={key:1,class:`gp-grid-filter-info`},_e={class:`gp-grid-filter-actions`},ve=[`disabled`],ye={class:`gp-grid-filter-list`},be={key:0,class:`gp-grid-filter-option`},xe=[`checked`],Se=[`checked`,`onChange`],Ce={key:0,class:`gp-grid-filter-combination`},we=[`onClick`],Te=[`onClick`],Ee={class:`gp-grid-filter-row`},De=[`value`,`autofocus`,`onChange`],Oe=[`value`],ke=[`value`,`onInput`],Ae=[`onClick`],je=c({__name:`TextFilterContent`,props:{distinctValues:{},valueFormatter:{type:Function},currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`contains`,label:`Contains`},{value:`notContains`,label:`Does not contain`},{value:`equals`,label:`Equals`},{value:`notEquals`,label:`Does not equal`},{value:`startsWith`,label:`Starts with`},{value:`endsWith`,label:`Ends with`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Is not blank`}],c=n,l=o;function d(e){return c.valueFormatter?c.valueFormatter(e):Array.isArray(e)?e.join(`, `):String(e??``)}function f(e){return d(e)}let p=t(()=>{let e=new Set,t=[];for(let n of c.distinctValues){if(n==null||n===``||Array.isArray(n)&&n.length===0)continue;let r=d(n);e.has(r)||(e.add(r),t.push({key:r,label:f(n)}))}return t.sort((e,t)=>{let n=parseFloat(e.label),r=parseFloat(t.label);return!isNaN(n)&&!isNaN(r)?n-r:e.label.localeCompare(t.label,void 0,{numeric:!0,sensitivity:`base`})}),t}),_=t(()=>p.value.length>100),v=h(t(()=>{if(!c.currentFilter?.conditions[0])return _.value?`condition`:`values`;let e=c.currentFilter.conditions[0];return e.selectedValues&&e.selectedValues.size>0?`values`:`condition`}).value),S=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].selectedValues??new Set:new Set),C=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].includeBlank??!0:!0),T=h(``),E=h(new Set(S.value)),D=h(C.value),{conditions:O,combination:k,updateCondition:A,addCondition:j,removeCondition:M}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.conditions[0];if(e.selectedValues&&e.selectedValues.size>0)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let t=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(e=>{let n=e;return{operator:n.operator,value:n.value??``,valueTo:``,nextOperator:n.nextOperator??t}})}).value,c.currentFilter?.combination??`and`),N=t(()=>{if(!T.value)return p.value;let e=T.value.toLowerCase();return p.value.filter(t=>t.label.toLowerCase().includes(e))}),P=t(()=>c.distinctValues.some(e=>e==null||e===``)),F=t(()=>N.value.every(e=>E.value.has(e.key))&&(!P.value||D.value));function I(){E.value=new Set(N.value.map(e=>e.key)),P.value&&(D.value=!0)}function L(){E.value=new Set,D.value=!1}function R(e){let t=new Set(E.value);t.has(e)?t.delete(e):t.add(e),E.value=t}function z(){if(v.value===`values`){if(p.value.every(e=>E.value.has(e.key))&&(!P.value||D.value)){l(`apply`,null);return}l(`apply`,{conditions:[{type:`text`,operator:`equals`,selectedValues:E.value,includeBlank:D.value}],combination:`and`})}else{let e=O.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.value.trim()!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`text`,operator:e.operator,value:e.value,nextOperator:e.nextOperator})),combination:`and`})}}function B(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,me,[r(` Mode toggle - only show if not too many values `),_.value?r(`v-if`,!0):(m(),i(`div`,he,[a(`button`,{type:`button`,class:u({active:v.value===`values`}),onClick:n[0]||=e=>v.value=`values`},` Values `,2),a(`button`,{type:`button`,class:u({active:v.value===`condition`}),onClick:n[1]||=e=>v.value=`condition`},` Condition `,2)])),r(` Too many values message `),_.value&&v.value===`condition`?(m(),i(`div`,ge,` Too many unique values (`+y(p.value.length)+`). Use conditions to filter. `,1)):r(`v-if`,!0),r(` VALUES MODE `),v.value===`values`?(m(),i(e,{key:2},[r(` Search input `),w(a(`input`,{"onUpdate:modelValue":n[2]||=e=>T.value=e,class:`gp-grid-filter-search`,type:`text`,placeholder:`Search...`,autofocus:``},null,512),[[x,T.value]]),r(` Select all / Deselect all `),a(`div`,_e,[a(`button`,{type:`button`,disabled:F.value,onClick:I},` Select All `,8,ve),a(`button`,{type:`button`,onClick:L},` Deselect All `)]),r(` Checkbox list `),a(`div`,ye,[r(` Blanks option `),P.value?(m(),i(`label`,be,[a(`input`,{type:`checkbox`,checked:D.value,onChange:n[3]||=e=>D.value=!D.value},null,40,xe),n[5]||=a(`span`,{class:`gp-grid-filter-blank`},`(Blanks)`,-1)])):r(`v-if`,!0),r(` Values `),(m(!0),i(e,null,g(N.value,e=>(m(),i(`label`,{key:e.key,class:`gp-grid-filter-option`},[a(`input`,{type:`checkbox`,checked:E.value.has(e.key),onChange:t=>R(e.key)},null,40,Se),a(`span`,null,y(e.label),1)]))),128))])],64)):r(`v-if`,!0),r(` CONDITION MODE `),v.value===`condition`?(m(),i(e,{key:3},[(m(!0),i(e,null,g(b(O),(t,n)=>(m(),i(`div`,{key:n,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),n>0?(m(),i(`div`,Ce,[a(`button`,{type:`button`,class:u({active:b(O)[n-1]?.nextOperator===`and`}),onClick:e=>b(A)(n-1,{nextOperator:`and`})},` AND `,10,we),a(`button`,{type:`button`,class:u({active:b(O)[n-1]?.nextOperator===`or`}),onClick:e=>b(A)(n-1,{nextOperator:`or`})},` OR `,10,Te)])):r(`v-if`,!0),a(`div`,Ee,[r(` Operator select `),a(`select`,{value:t.operator,autofocus:n===0,onChange:e=>b(A)(n,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,Oe)),64))],40,De),r(` Text input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`text`,value:t.value,placeholder:`Value`,class:`gp-grid-filter-text-input`,onInput:e=>b(A)(n,{value:e.target.value})},null,40,ke)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(O).length>1?(m(),i(`button`,{key:1,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(M)(n)},` × `,8,Ae)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[4]||=e=>b(j)(`contains`)},` + Add condition `)],64)):r(`v-if`,!0),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:B},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:z},` Apply `)])]))}}),Me={class:`gp-grid-filter-content gp-grid-filter-number`},Ne={key:0,class:`gp-grid-filter-combination`},Pe=[`onClick`],Fe=[`onClick`],Ie={class:`gp-grid-filter-row`},Le=[`value`,`onChange`],Re=[`value`],ze=[`value`,`onInput`],Be=[`value`,`onInput`],Ve=[`onClick`],He=c({__name:`NumberFilterContent`,props:{currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`=`,label:`=`},{value:`!=`,label:`≠`},{value:`>`,label:`>`},{value:`<`,label:`<`},{value:`>=`,label:`≥`},{value:`<=`,label:`≤`},{value:`between`,label:`↔`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Not blank`}],c=n,l=o,{conditions:d,combination:f,updateCondition:p,addCondition:h,removeCondition:_}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:n.value==null?``:String(n.value),valueTo:n.valueTo==null?``:String(n.valueTo),nextOperator:n.nextOperator??e}})}).value,c.currentFilter?.combination??`and`);function v(){let e=d.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.operator===`between`?e.value!==``&&e.valueTo!==``:e.value!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`number`,operator:e.operator,value:e.value?parseFloat(e.value):void 0,valueTo:e.valueTo?parseFloat(e.valueTo):void 0,nextOperator:e.nextOperator})),combination:`and`})}function x(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Me,[(m(!0),i(e,null,g(b(d),(t,o)=>(m(),i(`div`,{key:o,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),o>0?(m(),i(`div`,Ne,[a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`and`}),onClick:e=>b(p)(o-1,{nextOperator:`and`})},` AND `,10,Pe),a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`or`}),onClick:e=>b(p)(o-1,{nextOperator:`or`})},` OR `,10,Fe)])):r(`v-if`,!0),a(`div`,Ie,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(p)(o,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,Re)),64))],40,Le),r(` Number input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`number`,value:t.value,placeholder:`Value`,onInput:e=>b(p)(o,{value:e.target.value})},null,40,ze)):r(`v-if`,!0),r(` Second number input for "between" `),t.operator===`between`?(m(),i(e,{key:1},[n[1]||=a(`span`,{class:`gp-grid-filter-to`},`to`,-1),a(`input`,{type:`number`,value:t.valueTo,placeholder:`Value`,onInput:e=>b(p)(o,{valueTo:e.target.value})},null,40,Be)],64)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(d).length>1?(m(),i(`button`,{key:2,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(_)(o)},` × `,8,Ve)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[0]||=e=>b(h)(`=`)},` + Add condition `),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:x},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:v},` Apply `)])]))}}),Ue={class:`gp-grid-filter-content gp-grid-filter-date`},We={key:0,class:`gp-grid-filter-combination`},Ge=[`onClick`],Ke=[`onClick`],qe={class:`gp-grid-filter-row`},Je=[`value`,`onChange`],Ye=[`value`],Xe=[`value`,`onInput`],Ze=[`value`,`onInput`],Qe=[`onClick`],$e=c({__name:`DateFilterContent`,props:{currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`=`,label:`=`},{value:`!=`,label:`≠`},{value:`>`,label:`>`},{value:`<`,label:`<`},{value:`between`,label:`↔`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Not blank`}],c=n,l=o;function d(e){if(!e)return``;let t=typeof e==`string`?new Date(e):e;return isNaN(t.getTime())?``:t.toISOString().split(`T`)[0]}let{conditions:f,combination:p,updateCondition:h,addCondition:_,removeCondition:v}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:d(n.value),valueTo:d(n.valueTo),nextOperator:n.nextOperator??e}})}).value,c.currentFilter?.combination??`and`);function x(){let e=f.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.operator===`between`?e.value!==``&&e.valueTo!==``:e.value!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`date`,operator:e.operator,value:e.value||void 0,valueTo:e.valueTo||void 0,nextOperator:e.nextOperator})),combination:`and`})}function S(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Ue,[(m(!0),i(e,null,g(b(f),(t,o)=>(m(),i(`div`,{key:o,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),o>0?(m(),i(`div`,We,[a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`and`}),onClick:e=>b(h)(o-1,{nextOperator:`and`})},` AND `,10,Ge),a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`or`}),onClick:e=>b(h)(o-1,{nextOperator:`or`})},` OR `,10,Ke)])):r(`v-if`,!0),a(`div`,qe,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(h)(o,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,Ye)),64))],40,Je),r(` Date input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`date`,value:t.value,onInput:e=>b(h)(o,{value:e.target.value})},null,40,Xe)):r(`v-if`,!0),r(` Second date input for "between" `),t.operator===`between`?(m(),i(e,{key:1},[n[1]||=a(`span`,{class:`gp-grid-filter-to`},`to`,-1),a(`input`,{type:`date`,value:t.valueTo,onInput:e=>b(h)(o,{valueTo:e.target.value})},null,40,Ze)],64)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(f).length>1?(m(),i(`button`,{key:2,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(v)(o)},` × `,8,Qe)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[0]||=e=>b(_)(`=`)},` + Add condition `),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:S},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:x},` Apply `)])]))}}),et={class:`gp-grid-filter-header`},tt=c({__name:`FilterPopup`,props:{column:{},colIndex:{},containerRef:{},distinctValues:{},currentFilter:{}},emits:[`apply`,`close`],setup(o,{emit:c}){let l=o,u=c,g=h(null),_=h(0),v=h(0),b=h(200),x=h(!1);pe(g,{onClose:()=>u(`close`),ignoreSelector:`.gp-grid-filter-icon`});let S=t(()=>l.column.colId??l.column.field);function w(e){u(`apply`,S.value,e),u(`close`)}function T(){u(`close`)}let E=t(()=>l.column.cellDataType);t(()=>E.value===`text`||E.value===`object`);let D=t(()=>E.value===`number`),O=t(()=>E.value===`date`||E.value===`dateString`||E.value===`dateTime`||E.value===`dateTimeString`),k=null,A=()=>{let e=l.containerRef,t=g.value;if(!e||!t)return;let n=e.querySelector(`[data-col-index="${l.colIndex}"]`);if(!n)return;let r=N(n,t);_.value=r.top,v.value=r.left,b.value=r.minWidth,x.value=!0},j=()=>{k===null&&(k=requestAnimationFrame(()=>{k=null,A()}))};C(()=>{l.colIndex,A()},{flush:`post`}),f(()=>{window.addEventListener(`scroll`,j,{passive:!0,capture:!0}),window.addEventListener(`resize`,j)}),p(()=>{window.removeEventListener(`scroll`,j,{capture:!0}),window.removeEventListener(`resize`,j),k!==null&&cancelAnimationFrame(k)});let M=t(()=>({position:`fixed`,top:`${_.value}px`,left:`${v.value}px`,minWidth:`${b.value}px`,zIndex:1e4,visibility:x.value?`visible`:`hidden`}));return(t,c)=>(m(),i(`div`,{ref_key:`popupRef`,ref:g,class:`gp-grid-filter-popup`,style:d(M.value)},[a(`div`,et,` Filter: `+y(o.column.headerName??o.column.field),1),r(` Number filter `),D.value?(m(),n(He,{key:0,"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`current-filter`])):O.value?(m(),i(e,{key:1},[r(` Date filter `),s($e,{"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`current-filter`])],2112)):(m(),i(e,{key:2},[r(` Text filter (default) `),s(je,{"distinct-values":o.distinctValues,"value-formatter":o.column.valueFormatter,"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`distinct-values`,`value-formatter`,`current-filter`])],2112))],4))}}),nt=e=>e==null||e===``?o(``):typeof e==`string`?o(e):e,$=(e,t)=>typeof e==`function`?nt(e(t)):l(e,t);function rt(t){let{column:n,colIndex:r,sortDirection:i,sortIndex:a,sortable:o,filterable:s,hasFilter:c,core:u,container:d,headerRenderers:f,globalHeaderRenderer:p}=t,m={column:n,colIndex:r,sortDirection:i,sortIndex:a,sortable:o,filterable:s,hasFilter:c,onSort:(e,t)=>{u&&o&&u.setSort(n.colId??n.field,e,t)},onFilterClick:()=>{if(u&&s){let e=d?.querySelector(`[data-col-index="${r}"]`);if(e){let t=e.getBoundingClientRect();u.openFilterPopup(r,{top:t.top,left:t.left,width:t.width,height:t.height})}}}};if(n.headerRenderer!=null)if(typeof n.headerRenderer==`string`){let e=f[n.headerRenderer];if(e)return $(e,m)}else return $(n.headerRenderer,m);if(p)return $(p,m);let h=[l(`span`,{class:`gp-grid-header-text`},n.headerName??n.field)],g=[];if(o){let e=[l(`span`,{class:`gp-grid-sort-arrows-stack`},[l(`svg`,{class:`gp-grid-sort-arrow-up${i===`asc`?` active`:``}`,width:`8`,height:`6`,viewBox:`0 0 8 6`},[l(`path`,{d:`M4 0L8 6H0L4 0Z`,fill:`currentColor`})]),l(`svg`,{class:`gp-grid-sort-arrow-down${i===`desc`?` active`:``}`,width:`8`,height:`6`,viewBox:`0 0 8 6`},[l(`path`,{d:`M4 6L0 0H8L4 6Z`,fill:`currentColor`})])])];a!==void 0&&a>0&&e.push(l(`span`,{class:`gp-grid-sort-index`},String(a))),g.push(l(`span`,{class:`gp-grid-sort-arrows`},e))}return s&&g.push(l(`span`,{class:`gp-grid-filter-icon${c?` active`:``}`,onPointerdown:e=>{e.stopPropagation(),e.preventDefault(),m.onFilterClick()},onClick:e=>{e.stopPropagation()}},[l(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`},[l(`path`,{d:`M4 4h16l-6 8v5l-4 2v-7L4 4z`})])])),g.length>0&&h.push(l(`span`,{class:`gp-grid-header-icons`},g)),l(e,h)}const it=[`data-col-index`,`onPointerdown`],at=[`onPointerdown`],ot=c({__name:`GridHeader`,props:{headerHeight:{},scrollLeft:{},contentWidth:{},totalWidth:{},isLoading:{type:Boolean},visibleColumnsWithIndices:{},columnPositions:{},columnWidths:{},headers:{},sortingEnabled:{type:Boolean},onHeaderMouseDown:{type:Function},onHeaderResizeMouseDown:{type:Function},coreRef:{},outerContainerRef:{},headerRenderers:{},globalHeaderRenderer:{type:Function}},setup(t){let o=t;return(t,s)=>(m(),i(`div`,{class:u([`gp-grid-header`,{"gp-grid-header--loading":o.isLoading}]),style:d({height:`${o.headerHeight}px`})},[a(`div`,{style:d({position:`absolute`,top:0,left:0,transform:`translateX(${-o.scrollLeft}px)`,width:`${Math.max(o.contentWidth,o.totalWidth)}px`,height:`${o.headerHeight}px`})},[(m(!0),i(e,null,g(o.visibleColumnsWithIndices,({column:e,originalIndex:t},a)=>(m(),i(`div`,{key:e.colId??e.field,class:`gp-grid-header-cell`,"data-col-index":t,style:d({left:`${o.columnPositions[a]}px`,width:`${o.columnWidths[a]}px`,height:`${o.headerHeight}px`}),onPointerdown:e=>o.onHeaderMouseDown(t,o.columnWidths[a]??0,o.headerHeight,e)},[(m(),n(_(b(rt)({column:e,colIndex:t,sortDirection:o.headers.get(t)?.sortDirection,sortIndex:o.headers.get(t)?.sortIndex,sortable:e.sortable!==!1&&o.sortingEnabled,filterable:e.filterable!==!1,hasFilter:o.headers.get(t)?.hasFilter??!1,core:o.coreRef,container:o.outerContainerRef,headerRenderers:o.headerRenderers,globalHeaderRenderer:o.globalHeaderRenderer})))),e.resizable===!1?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-header-resize-handle`,onPointerdown:T(e=>o.onHeaderResizeMouseDown(t,o.columnWidths[a]??0,e),[`stop`])},null,40,at))],44,it))),128))],4)],6))}});function st(e){let{column:t,rowData:n,rowIndex:r,colIndex:i,isActive:a,isSelected:s,isEditing:c,cellRenderers:l,globalCellRenderer:u}=e,d=ie(n,t.field),f={value:t.valueFormatter?t.valueFormatter(d):d,rowData:n,column:t,rowIndex:r,colIndex:i,isActive:a,isSelected:s,isEditing:c};if(t.cellRenderer!=null)if(typeof t.cellRenderer==`string`){let e=l[t.cellRenderer];if(e)return $(e,f)}else return $(t.cellRenderer,f);return u?$(u,f):o(re(d,t.valueFormatter))}function ct(e){let{column:t,rowData:n,rowIndex:r,colIndex:i,initialValue:a,core:s,editRenderers:c,globalEditRenderer:u}=e;if(!s)return o(``);let d=H(n,t.field),f={value:t.valueFormatter?t.valueFormatter(d):d,rowData:n,column:t,rowIndex:r,colIndex:i,isActive:!0,isSelected:!0,isEditing:!0,initialValue:a,onValueChange:e=>s.updateEditValue(e),onCommit:()=>s.commitEdit(),onCancel:()=>s.cancelEdit()};if(t.editRenderer!=null)if(typeof t.editRenderer==`string`){let e=c[t.editRenderer];if(e)return $(e,f)}else return $(t.editRenderer,f);return u?$(u,f):l(`input`,{class:`gp-grid-edit-input`,type:`text`,value:a==null?``:String(a),autofocus:!0,onFocus:e=>e.target.select(),onInput:e=>s.updateEditValue(e.target.value),onKeydown:e=>{e.stopPropagation(),e.key===`Enter`?s.commitEdit():e.key===`Escape`?s.cancelEdit():e.key===`Tab`&&(e.preventDefault(),s.commitEdit(),s.selection.moveFocus(e.shiftKey?`left`:`right`,!1))},onBlur:()=>s.commitEdit()})}const lt=[`onPointerdown`,`onDblclick`,`onMouseenter`],ut={key:0,class:`gp-grid-error`},dt={key:1,class:`gp-grid-empty`},ft=c({__name:`GridBody`,props:{rowHeight:{},totalHeaderHeight:{},contentWidth:{},contentHeight:{},totalWidth:{},rowsWrapperOffset:{},activeCell:{},selectionRange:{},editingCell:{},hoverPosition:{},error:{},isLoading:{type:Boolean},totalRows:{},slotsArray:{},visibleColumnsWithIndices:{},columnPositions:{},columnWidths:{},fillHandlePosition:{},dragState:{},onScroll:{type:Function},onWheel:{type:Function},wheelDampening:{},onCellMouseDown:{type:Function},onCellDoubleClick:{type:Function},onCellMouseEnter:{type:Function},onCellMouseLeave:{type:Function},onFillHandleMouseDown:{type:Function},coreRef:{},cellRenderers:{},editRenderers:{},globalCellRenderer:{},globalEditRenderer:{}},setup(t,{expose:o}){let s=t,c=h(null),l=e=>[`gp-grid-row`,...s.coreRef?.highlight?.computeRowClasses(e.rowIndex,e.rowData)??[]].filter(Boolean).join(` `),f=(e,t,n,r,i)=>{let a=q(e,t,s.editingCell),o=A(G(e,t,s.activeCell),Y(e,t,s.selectionRange),a,J(e,t,s.dragState.dragType===`fill`,s.dragState.fillSourceRange,s.dragState.fillTarget)),c=s.coreRef?.highlight?.computeCombinedCellClasses(e,t,n,r)??[],l=n.rowDrag===!0;return[o,...c,l?`gp-grid-cell--row-drag-handle`:``].filter(Boolean).join(` `)};return o({bodyRef:c}),(t,o)=>(m(),i(`div`,{ref_key:`bodyRef`,ref:c,style:{flex:`1`,overflow:`auto`,position:`relative`},onScroll:o[2]||=(...e)=>s.onScroll&&s.onScroll(...e),onWheel:o[3]||=e=>s.onWheel(e,s.wheelDampening)},[r(` Content sizer - provides scroll range `),a(`div`,{style:d({width:`${Math.max(s.contentWidth,s.totalWidth)}px`,height:`${Math.max(s.contentHeight-s.totalHeaderHeight,0)}px`,position:`relative`,minWidth:`100%`})},[r(` Rows wrapper `),a(`div`,{class:`gp-grid-rows-wrapper`,style:d({width:`${Math.max(s.contentWidth,s.totalWidth)}px`,transform:`translateY(${s.rowsWrapperOffset}px)`})},[r(` Row slots `),(m(!0),i(e,null,g(s.slotsArray.filter(e=>e.rowIndex>=0),t=>(m(),i(`div`,{key:t.slotId,class:u(l(t)),style:d({position:`absolute`,top:0,left:0,transform:`translateY(${t.translateY}px)`,width:`${Math.max(s.contentWidth,s.totalWidth)}px`,height:`${s.rowHeight}px`})},[(m(!0),i(e,null,g(s.visibleColumnsWithIndices,({column:a,originalIndex:c},l)=>(m(),i(`div`,{key:`${t.slotId}-${a.colId??a.field}`,class:u(f(t.rowIndex,c,a,t.rowData,s.hoverPosition)),style:d({position:`absolute`,left:`${s.columnPositions[l]}px`,top:0,width:`${s.columnWidths[l]}px`,height:`${s.rowHeight}px`}),onPointerdown:e=>s.onCellMouseDown(t.rowIndex,c,e),onDblclick:()=>s.onCellDoubleClick(t.rowIndex,c),onMouseenter:()=>s.onCellMouseEnter(t.rowIndex,c),onMouseleave:o[0]||=(...e)=>s.onCellMouseLeave&&s.onCellMouseLeave(...e)},[r(` Edit mode `),b(q)(t.rowIndex,c,s.editingCell)&&s.editingCell?(m(),n(_(b(ct)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,initialValue:s.editingCell.initialValue,core:s.coreRef,editRenderers:s.editRenderers,globalEditRenderer:s.globalEditRenderer})),{key:0})):(m(),i(e,{key:1},[r(` View mode `),(m(),n(_(b(st)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,isActive:b(G)(t.rowIndex,c,s.activeCell),isSelected:b(Y)(t.rowIndex,c,s.selectionRange),isEditing:!1,cellRenderers:s.cellRenderers,globalCellRenderer:s.globalCellRenderer}))))],64))],46,lt))),128))],6))),128)),r(` Fill handle `),s.fillHandlePosition&&!s.editingCell?(m(),i(`div`,{key:0,class:`gp-grid-fill-handle`,style:d({top:`${s.fillHandlePosition.top}px`,left:`${s.fillHandlePosition.left}px`}),onPointerdown:o[1]||=(...e)=>s.onFillHandleMouseDown&&s.onFillHandleMouseDown(...e)},null,36)):r(`v-if`,!0),r(` Row drop indicator `),s.dragState.dragType===`row-drag`&&s.dragState.rowDrag?.dropTargetIndex!==null?(m(),i(`div`,{key:1,class:`gp-grid-row-drop-indicator`,style:d({transform:`translateY(${s.dragState.rowDrag.dropIndicatorY}px)`,width:`${Math.max(s.contentWidth,s.totalWidth)}px`})},null,4)):r(`v-if`,!0)],4)],4),r(` Error message `),s.error?(m(),i(`div`,ut,` Error: `+y(s.error),1)):r(`v-if`,!0),r(` Empty state `),!s.isLoading&&!s.error&&s.totalRows===0?(m(),i(`div`,dt,` No data to display `)):r(`v-if`,!0)],544))}}),pt={key:1,class:`gp-grid-loading`},mt=c({__name:`GpGrid`,props:{columns:{},dataSource:{},rowData:{},rowHeight:{},headerHeight:{},overscan:{default:3},rowLoading:{},sortingEnabled:{type:Boolean,default:!0},darkMode:{type:Boolean,default:!1},wheelDampening:{default:.1},cellRenderers:{default:()=>({})},editRenderers:{default:()=>({})},headerRenderers:{default:()=>({})},cellRenderer:{},editRenderer:{},headerRenderer:{},initialWidth:{},initialHeight:{},highlighting:{},getRowId:{},onCellValueChanged:{},loadingComponent:{},rowDragEntireRow:{type:Boolean},onRowDragEnd:{},onColumnResized:{},onColumnMoved:{}},setup(o,{expose:c}){let l=o,g=h(null),x=h(null),C=t(()=>x.value?.bodyRef??null),w=v(null),T=v(null),E=v(null),O=h(0),{state:k,applyInstructions:A,reset:j}=X({initialWidth:l.initialWidth,initialHeight:l.initialHeight}),M=t(()=>l.headerHeight??l.rowHeight),N=t(()=>k.value.columns??l.columns),F=t(()=>N.value.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),L=t(()=>P(F.value.map(e=>e.column),k.value.viewportWidth)),z=t(()=>L.value.positions),B=t(()=>L.value.widths),V=t(()=>oe(z.value)),ee=t(()=>Array.from(k.value.slots.values())),{handleCellMouseDown:te,handleCellDoubleClick:ne,handleFillHandleMouseDown:re,handleHeaderClick:ie,handleHeaderMouseDown:H,handleHeaderResizeMouseDown:ae,handleKeyDown:U,handlePaste:W,handleWheel:G,dragState:K}=de(w,C,N,{activeCell:t(()=>k.value.activeCell),selectionRange:t(()=>k.value.selectionRange),editingCell:t(()=>k.value.editingCell),filterPopupOpen:t(()=>k.value.filterPopup?.isOpen??!1),rowHeight:l.rowHeight,headerHeight:M.value,columnPositions:z,visibleColumnsWithIndices:F,slots:t(()=>k.value.slots),rowsWrapperOffset:t(()=>k.value.rowsWrapperOffset)}),{fillHandlePosition:q}=fe({activeCell:t(()=>k.value.activeCell),selectionRange:t(()=>k.value.selectionRange),slots:t(()=>k.value.slots),columns:N,visibleColumnsWithIndices:F,columnPositions:z,columnWidths:B,rowHeight:l.rowHeight});function se(){let e=C.value,t=w.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)}function J(){let e=C.value;e&&(O.value=e.scrollLeft),se()}function ce(e,t){let n=w.value;n&&n.setFilter(e,t)}function Y(){let e=w.value;e&&e.closeFilterPopup()}function le(e,t){w.value?.input.handleCellMouseEnter(e,t)}function ue(){w.value?.input.handleCellMouseLeave()}function Z(){return l.dataSource??(l.rowData?R(l.rowData):I([]))}function pe(e){E.value&&=(E.value(),null),w.value&&w.value.destroy();let t=new D({columns:l.columns,dataSource:e,rowHeight:l.rowHeight,headerHeight:M.value,overscan:l.overscan,rowLoading:l.rowLoading,sortingEnabled:l.sortingEnabled,highlighting:l.highlighting,getRowId:l.getRowId,onCellValueChanged:l.onCellValueChanged?e=>l.onCellValueChanged?.(e):void 0,rowDragEntireRow:l.rowDragEntireRow??!1,onRowDragEnd:(e,t)=>l.onRowDragEnd?.(e,t),onColumnResized:(e,t)=>l.onColumnResized?.(e,t),onColumnMoved:(e,t)=>l.onColumnMoved?.(e,t)});w.value=t,E.value=t.onBatchInstruction(e=>{A(e)}),t.initialize();let n=C.value;n&&t.setViewport(n.scrollTop,n.scrollLeft,n.clientWidth,n.clientHeight)}return f(()=>{let e=Z();T.value=e,pe(e);let t=C.value;if(t&&typeof ResizeObserver<`u`){let e=new ResizeObserver(()=>{w.value?.setViewport(t.scrollTop,t.scrollLeft,t.clientWidth,t.clientHeight)});e.observe(t),p(()=>{e.disconnect()})}p(()=>{E.value&&=(E.value(),null),w.value&&=(w.value.destroy(),null),T.value&&=(T.value.destroy?.(),null)})}),S([()=>l.dataSource,()=>l.rowData],()=>{l.rowData&&l.rowData.length>1e4&&T.value&&console.warn(`[gp-grid] rowData prop changed with ${l.rowData.length} rows — this triggers a full rebuild. Use useGridData() for efficient updates.`);let e=Z(),t=T.value;t&&t!==e?(t.destroy?.(),T.value=e,w.value?.setDataSource(e)):t||(T.value=e)}),S(()=>l.dataSource,e=>{if(e){let t=e;if(t.subscribe){let e=t.subscribe(()=>{w.value?.refreshFromTransaction()});p(()=>e())}}},{immediate:!0}),S(()=>k.value.pendingScrollTop,e=>{if(e!==null){let t=C.value;t&&(t.scrollTop=e)}},{flush:`post`}),S(()=>l.highlighting,e=>{w.value?.highlight&&e&&w.value.highlight.updateOptions(e)}),c({core:w}),(t,c)=>(m(),i(`div`,{ref_key:`outerContainerRef`,ref:g,class:u([`gp-grid-container`,{"gp-grid-container--dark":o.darkMode}]),style:{width:`100%`,height:`100%`,position:`relative`,display:`flex`,"flex-direction":`column`},tabindex:`0`,onKeydown:c[0]||=(...e)=>b(U)&&b(U)(...e),onPaste:c[1]||=(...e)=>b(W)&&b(W)(...e)},[s(ot,{"header-height":M.value,"scroll-left":O.value,"content-width":b(k).contentWidth,"total-width":V.value,"is-loading":b(k).isLoading,"visible-columns-with-indices":F.value,"column-positions":z.value,"column-widths":B.value,headers:b(k).headers,"sorting-enabled":o.sortingEnabled,"on-header-mouse-down":b(H),"on-header-resize-mouse-down":b(ae),"core-ref":w.value,"outer-container-ref":g.value,"header-renderers":o.headerRenderers??{},"global-header-renderer":o.headerRenderer},null,8,[`header-height`,`scroll-left`,`content-width`,`total-width`,`is-loading`,`visible-columns-with-indices`,`column-positions`,`column-widths`,`headers`,`sorting-enabled`,`on-header-mouse-down`,`on-header-resize-mouse-down`,`core-ref`,`outer-container-ref`,`header-renderers`,`global-header-renderer`]),s(ft,{ref_key:`gridBodyComp`,ref:x,"row-height":o.rowHeight,"total-header-height":M.value,"content-width":b(k).contentWidth,"content-height":b(k).contentHeight,"total-width":V.value,"rows-wrapper-offset":b(k).rowsWrapperOffset,"active-cell":b(k).activeCell,"selection-range":b(k).selectionRange,"editing-cell":b(k).editingCell,"hover-position":b(k).hoverPosition,error:b(k).error,"is-loading":b(k).isLoading,"total-rows":b(k).totalRows,"slots-array":ee.value,"visible-columns-with-indices":F.value,"column-positions":z.value,"column-widths":B.value,"fill-handle-position":b(q),"drag-state":b(K),"on-scroll":J,"on-wheel":b(G),"wheel-dampening":o.wheelDampening,"on-cell-mouse-down":b(te),"on-cell-double-click":b(ne),"on-cell-mouse-enter":le,"on-cell-mouse-leave":ue,"on-fill-handle-mouse-down":b(re),"core-ref":w.value,"cell-renderers":o.cellRenderers??{},"edit-renderers":o.editRenderers??{},"global-cell-renderer":o.cellRenderer,"global-edit-renderer":o.editRenderer},null,8,`row-height.total-header-height.content-width.content-height.total-width.rows-wrapper-offset.active-cell.selection-range.editing-cell.hover-position.error.is-loading.total-rows.slots-array.visible-columns-with-indices.column-positions.column-widths.fill-handle-position.drag-state.on-wheel.wheel-dampening.on-cell-mouse-down.on-cell-double-click.on-fill-handle-mouse-down.core-ref.cell-renderers.edit-renderers.global-cell-renderer.global-edit-renderer`.split(`.`)),r(` Loading overlay - positioned outside scrollable area to avoid Firefox sticky issues `),b(k).isLoading?(m(),i(`div`,{key:0,style:d({position:`absolute`,top:`${M.value}px`,left:0,right:0,bottom:0,zIndex:50,pointerEvents:`none`})},[c[3]||=a(`div`,{class:`gp-grid-loading-overlay`},null,-1),l.loadingComponent?(m(),n(_(l.loadingComponent),{key:0,"is-loading":!0})):(m(),i(`div`,pt,[...c[2]||=[a(`div`,{class:`gp-grid-loading-spinner`},null,-1)]]))],4)):r(`v-if`,!0),r(` Filter Popup `),b(k).filterPopup?.isOpen&&b(k).filterPopup.column?(m(),n(tt,{key:1,column:b(k).filterPopup.column,"col-index":b(k).filterPopup.colIndex,"container-ref":g.value,"distinct-values":b(k).filterPopup.distinctValues,"current-filter":b(k).filterPopup.currentFilter,onApply:ce,onClose:Y},null,8,[`column`,`col-index`,`container-ref`,`distinct-values`,`current-filter`])):r(`v-if`,!0),r(` Column resize line `),b(K).dragType===`column-resize`&&b(K).columnResize?(m(),i(`div`,{key:2,class:`gp-grid-column-resize-line`,style:d({left:`${(z.value[F.value.findIndex(e=>e.originalIndex===b(K).columnResize.colIndex)]??0)+b(K).columnResize.currentWidth-O.value}px`})},null,4)):r(`v-if`,!0),r(` Column move ghost `),b(K).dragType===`column-move`&&b(K).columnMove?(m(),i(e,{key:3},[a(`div`,{class:`gp-grid-column-move-ghost`,style:d({left:`${b(K).columnMove.currentX-b(K).columnMove.ghostWidth/2}px`,top:`${b(K).columnMove.currentY-b(K).columnMove.ghostHeight/2}px`,width:`${b(K).columnMove.ghostWidth}px`,height:`${b(K).columnMove.ghostHeight}px`})},y(N.value[b(K).columnMove.sourceColIndex]?.headerName??N.value[b(K).columnMove.sourceColIndex]?.field??``),5),b(K).columnMove.dropTargetIndex===null?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-column-drop-indicator`,style:d({left:`${(z.value[b(K).columnMove.dropTargetIndex]??0)-O.value}px`,height:`${M.value}px`})},null,4))],64)):r(`v-if`,!0),r(` Row drag ghost (fixed position, follows cursor) `),b(K).dragType===`row-drag`&&b(K).rowDrag?(m(),i(`div`,{key:4,class:`gp-grid-row-drag-ghost`,style:d({left:`${b(K).rowDrag.currentX+12}px`,top:`${b(K).rowDrag.currentY-o.rowHeight/2}px`,width:`${Math.min(300,V.value)}px`,height:`${o.rowHeight}px`})},null,4)):r(`v-if`,!0)],34))}});function ht(e){let n=h(null),r=h(null),{state:i,applyInstructions:a}=X(),o=t(()=>e.headerHeight??e.rowHeight),s=t(()=>e.columns.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),c=t(()=>P(s.value.map(e=>e.column),i.value.viewportWidth)),l=t(()=>c.value.positions),u=t(()=>c.value.widths),d=t(()=>oe(l.value)),m=t(()=>Array.from(i.value.slots.values())),{handleCellMouseDown:g,handleCellDoubleClick:_,handleFillHandleMouseDown:v,handleHeaderClick:y,handleKeyDown:b,handlePaste:x,handleWheel:C,dragState:w}=de(r,n,t(()=>e.columns),{activeCell:t(()=>i.value.activeCell),selectionRange:t(()=>i.value.selectionRange),editingCell:t(()=>i.value.editingCell),filterPopupOpen:t(()=>i.value.filterPopup?.isOpen??!1),rowHeight:e.rowHeight,headerHeight:o.value,columnPositions:l,visibleColumnsWithIndices:s,slots:t(()=>i.value.slots),rowsWrapperOffset:t(()=>i.value.rowsWrapperOffset)}),T=()=>{let e=n.value,t=r.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)},E=(e,t)=>{let n=r.value;n&&n.setFilter(e,t)},O=()=>{let e=r.value;e&&e.closeFilterPopup()},k=(e,t)=>{r.value?.input.handleCellMouseEnter(e,t)},j=()=>{r.value?.input.handleCellMouseLeave()};f(()=>{let t=e.dataSource??(e.rowData?R(e.rowData):I([])),i=new D({columns:e.columns,dataSource:t,rowHeight:e.rowHeight,headerHeight:o.value,overscan:e.overscan??3,rowLoading:e.rowLoading,sortingEnabled:e.sortingEnabled??!0,highlighting:e.highlighting,getRowId:e.getRowId,onCellValueChanged:e.onCellValueChanged?t=>e.onCellValueChanged?.(t):void 0});r.value=i;let s=i.onBatchInstruction(e=>{a(e)});i.initialize();let c=n.value;if(c){i.setViewport(c.scrollTop,c.scrollLeft,c.clientWidth,c.clientHeight);let e=new ResizeObserver(()=>{i.setViewport(c.scrollTop,c.scrollLeft,c.clientWidth,c.clientHeight)});e.observe(c),p(()=>{e.disconnect(),s(),r.value=null})}}),S(()=>i.value.pendingScrollTop,e=>{if(e!==null){let t=n.value;t&&(t.scrollTop=e)}},{flush:`post`}),S(()=>e.dataSource,e=>{if(e){let t=e;if(t.subscribe){let e=t.subscribe(()=>{r.value?.refresh()});p(()=>e())}}},{immediate:!0}),S(()=>e.highlighting,e=>{r.value?.highlight&&e&&r.value.highlight.updateOptions(e)});let{fillHandlePosition:M}=fe({activeCell:t(()=>i.value.activeCell),selectionRange:t(()=>i.value.selectionRange),slots:t(()=>i.value.slots),columns:t(()=>e.columns),visibleColumnsWithIndices:s,columnPositions:l,columnWidths:u,rowHeight:e.rowHeight});return{containerRef:n,coreRef:r,state:i,slotsArray:m,totalHeaderHeight:o,columnPositions:l,columnWidths:u,totalWidth:d,fillHandlePosition:M,handleScroll:T,handleCellMouseDown:g,handleCellDoubleClick:_,handleFillHandleMouseDown:v,handleHeaderClick:y,handleKeyDown:b,handlePaste:x,handleWheel:C,handleFilterApply:E,handleFilterPopupClose:O,handleCellMouseEnter:k,handleCellMouseLeave:j,dragState:w,isCellSelected:Y,isCellActive:G,isCellEditing:q,isCellInFillPreview:J,buildCellClasses:A}}const gt=(e,t)=>{let n=ee(e,{getRowId:t.getRowId,debounceMs:t.debounceMs,useWorker:t.useWorker,parallelSort:t.parallelSort});return p(()=>{n.clear()}),{dataSource:n,updateRow:n.updateRow,addRows:n.addRows,removeRows:n.removeRows,updateCell:n.updateCell,clear:n.clear,getRowById:n.getRowById,getTotalRowCount:n.getTotalRowCount,flushTransactions:n.flushTransactions}};export{mt as GpGrid,mt as default,E as GridCore,k as buildCellClasses,j as calculateColumnPositions,F as createClientDataSource,L as createDataSourceFromArray,z as createInitialState,V as createMutableClientDataSource,te as createServerDataSource,ne as findColumnAtX,H as getCellValue,ae as getTotalWidth,U as gridStyles,W as isCellActive,K as isCellEditing,se as isCellInFillPreview,ce as isCellSelected,le as isRowVisible,st as renderCell,ct as renderEditCell,rt as renderHeader,Z as useAutoScroll,fe as useFillHandle,Q as useFilterConditions,pe as useFilterPopup,ht as useGpGrid,gt as useGridData,X as useGridState,de as useInputHandler};
|
|
1
|
+
import{Fragment as e,computed as t,createBlock as n,createCommentVNode as r,createElementBlock as i,createElementVNode as a,createTextVNode as o,createVNode as s,defineComponent as c,h as l,normalizeClass as u,normalizeStyle as d,onMounted as f,onUnmounted as p,openBlock as m,ref as h,renderList as g,resolveDynamicComponent as _,shallowRef as v,toDisplayString as y,unref as b,vModelText as x,watch as S,watchEffect as C,withDirectives as w,withModifiers as T}from"vue";import{GridCore as E,GridCore as D,applyInstruction as O,bindPeekSelectAll as k,buildCellClasses as A,buildCellClasses as j,calculateColumnPositions as M,calculateFillHandlePosition as N,calculateFilterPopupPosition as P,calculateScaledColumnPositions as F,createClientDataSource as I,createClientDataSource as L,createDataSourceFromArray as R,createDataSourceFromArray as ee,createInitialState as z,createInitialState as B,createMutableClientDataSource as V,createMutableClientDataSource as te,createServerDataSource as ne,findColumnAtX as re,formatCellValue as ie,getFieldValue as ae,getFieldValue as oe,getTotalWidth as se,getTotalWidth as ce,gridStyles as H,isCellActive as le,isCellActive as U,isCellEditing as ue,isCellEditing as W,isCellInFillPreview as de,isCellInFillPreview as G,isCellSelected as fe,isCellSelected as K,isRowVisible as q,scrollCellIntoView as pe}from"@gp-grid/core";function J(e){let t=v(B(e));return{state:t,applyInstructions:e=>{let n=t.value,r=new Map(n.slots),i=new Map(n.headers),a={pendingScrollTop:null};for(let t of e){let e=O(t,r,i);e&&Object.assign(a,e)}a.slots=r,a.headers=i,t.value={...n,...a}},reset:()=>{t.value=B()}}}function Y(e,t){let n=h(null);function r(r,i){n.value&&clearInterval(n.value),n.value=setInterval(()=>{let n=e.value;n&&(n.scrollTop+=i,n.scrollLeft+=r,t?.())},16)}function i(){n.value&&=(clearInterval(n.value),null)}return p(()=>{i()}),{startAutoScroll:r,stopAutoScroll:i}}function X(e,t,n,r){let{activeCell:i,selectionRange:a,editingCell:o,filterPopupOpen:s,rowHeight:c,headerHeight:l,columnPositions:u,visibleColumnsWithIndices:d,slots:f,rowsWrapperOffset:m}=r,g=h({isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null}),_=null,v=null,y=null,b=null,x=null,C=e=>{e.preventDefault()},{startAutoScroll:w,stopAutoScroll:T}=Y(t,()=>{let t=e.value;if(_&&t?.input){let e=E();e&&(t.input.handleDragMove(_,e),g.value=t.input.getDragState())}});S([()=>l,()=>c,u,d],()=>{let t=e.value;if(t?.input){let e=d.value;t.input.updateDeps({getHeaderHeight:()=>l,getRowHeight:()=>c,getColumnPositions:()=>u.value,getColumnCount:()=>e.length,getOriginalColumnIndex:t=>{let n=e[t];return n?n.originalIndex:t}})}},{immediate:!0});function E(){let e=t.value;if(!e)return null;let n=e.getBoundingClientRect();return{top:n.top,left:n.left,width:n.width,height:n.height,scrollTop:e.scrollTop,scrollLeft:e.scrollLeft}}function D(e){return{clientX:e.clientX,clientY:e.clientY,button:e.button,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,pointerId:e.pointerId,pointerType:e.pointerType}}function O(){v?.();let n=t=>{t.preventDefault();let n=e.value,r=E();if(!n?.input||!r)return;let i=D(t);_=i;let a=n.input.handleDragMove(i,r);a&&(a.autoScroll?w(a.autoScroll.dx,a.autoScroll.dy):T(),g.value=n.input.getDragState())},r=()=>{try{let t=e.value;t?.input&&t.input.handleDragEnd()}finally{let i=e.value;g.value=i?.input?i.input.getDragState():{isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null},_=null,T(),document.removeEventListener(`touchmove`,C),x!==null&&t.value&&(t.value.style.overflow=x,x=null),document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r),v=null}};document.addEventListener(`pointermove`,n,{passive:!1}),document.addEventListener(`pointerup`,r),document.addEventListener(`pointercancel`,r),v=()=>{document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r)}}function k(){y!==null&&(clearTimeout(y),y=null,e.value?.input?.cancelPendingRowDrag()),b=null}function A(n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleCellMouseDown(n,r,D(i));if(o.focusContainer&&t.value?.focus(),o.startDrag===`selection`)a.input.startSelectionDrag(),g.value=a.input.getDragState(),O();else if(o.startDrag===`row-drag`)g.value=a.input.getDragState(),O();else if(o.startDrag===`row-drag-pending`){k(),b={pointerId:i.pointerId,target:i.currentTarget??i.target};let e=i.clientX,n=i.clientY,r=t=>{let r=t.clientX-e,i=t.clientY-n;(Math.abs(r)>10||Math.abs(i)>10)&&(k(),s())},o=()=>{k(),s()},s=()=>{document.removeEventListener(`pointermove`,r),document.removeEventListener(`pointerup`,o),document.removeEventListener(`pointercancel`,o)};document.addEventListener(`pointermove`,r),document.addEventListener(`pointerup`,o,{once:!0}),document.addEventListener(`pointercancel`,o,{once:!0}),y=setTimeout(()=>{y=null,s();let e=b;if(b=null,a.input.confirmPendingRowDrag()){if(t.value&&(x=t.value.style.overflow,t.value.style.overflow=`hidden`),document.addEventListener(`touchmove`,C,{passive:!1}),e)try{e.target.setPointerCapture(e.pointerId)}catch{}g.value=a.input.getDragState(),O()}},300)}}function j(t,n){let r=e.value;r?.input&&r.input.handleCellDoubleClick(t,n)}function M(t){let n=e.value;if(!n?.input)return;let r=n.input.handleFillHandleMouseDown(i.value,a.value,D(t));if(r.preventDefault&&t.preventDefault(),r.stopPropagation&&t.stopPropagation(),r.startDrag===`fill`){try{t.target.setPointerCapture(t.pointerId)}catch{}g.value=n.input.getDragState(),O()}}function N(t,r){let i=e.value;if(!i?.input)return;let a=n.value[t];if(!a)return;let o=a.colId??a.field;i.input.handleHeaderClick(o,r.shiftKey)}function P(t,n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleHeaderMouseDown(t,n,r,D(i));if(o.preventDefault&&i.preventDefault(),o.stopPropagation&&i.stopPropagation(),o.startDrag===`column-move`){try{i.target.setPointerCapture(i.pointerId)}catch{}g.value=a.input.getDragState(),O()}}function F(t,n,r){let i=e.value;if(!i?.input)return;let a=i.input.handleHeaderResizeMouseDown(t,n,D(r));a.preventDefault&&r.preventDefault(),a.stopPropagation&&r.stopPropagation(),a.startDrag===`column-resize`&&(g.value=i.input.getDragState(),O())}function I(n){let r=e.value,a=t.value;if(!r?.input)return;let l=r.input.handleKeyDown({key:n.key,shiftKey:n.shiftKey,ctrlKey:n.ctrlKey,metaKey:n.metaKey},i.value,o.value,s.value);l.preventDefault&&n.preventDefault(),l.scrollToCell&&a&&pe(r,a,l.scrollToCell.row,c,f.value,m.value)}function L(t){let n=e.value;if(n===null||o.value!==null||s.value)return;let r=t.clipboardData?.getData(`text/plain`)??``;n.pasteClipboardText(r)&&t.preventDefault()}function R(n,r){let i=e.value,a=t.value;if(!i?.input||!a)return;let o=i.input.handleWheel(n.deltaY,n.deltaX,r);o&&(n.preventDefault(),a.scrollTop+=o.dy,a.scrollLeft+=o.dx)}return p(()=>{v?.(),v=null,k(),T(),document.removeEventListener(`touchmove`,C),x!==null&&t.value&&(t.value.style.overflow=x,x=null)}),{handleCellMouseDown:A,handleCellDoubleClick:j,handleFillHandleMouseDown:M,handleHeaderClick:N,handleHeaderMouseDown:P,handleHeaderResizeMouseDown:F,handleKeyDown:I,handlePaste:L,handleWheel:R,dragState:g}}const me=e=>{let{activeCell:n,selectionRange:r,slots:i,columns:a,visibleColumnsWithIndices:o,columnPositions:s,columnWidths:c,rowHeight:l}=e;return{fillHandlePosition:t(()=>N({activeCell:n.value,selectionRange:r.value,slots:i.value,columns:a.value,visibleColumnsWithIndices:o.value,columnPositions:s.value,columnWidths:c.value,rowHeight:l}))}};function Z(e,t){let{onClose:n,ignoreSelector:r=`.gp-grid-filter-icon`}=t,i=null,a=null;f(()=>{i=t=>{let i=t.target;r&&i.closest(r)||e.value&&!e.value.contains(i)&&n()},a=e=>{e.key===`Escape`&&n()},requestAnimationFrame(()=>{i&&document.addEventListener(`pointerdown`,i),a&&document.addEventListener(`keydown`,a)})}),p(()=>{i&&document.removeEventListener(`pointerdown`,i),a&&document.removeEventListener(`keydown`,a)})}function Q(e,t=`and`){let n=h([...e]);return{conditions:n,combination:h(t),updateCondition:(e,t)=>{let r=[...n.value];r[e]={...r[e],...t},n.value=r},addCondition:e=>{n.value=[...n.value,{operator:e,value:``,valueTo:``,nextOperator:`and`}]},removeCondition:e=>{n.value=n.value.filter((t,n)=>n!==e)}}}const he={class:`gp-grid-filter-content gp-grid-filter-text`},ge={key:0,class:`gp-grid-filter-mode-toggle`},_e={key:1,class:`gp-grid-filter-info`},ve={class:`gp-grid-filter-actions`},ye=[`disabled`],be={class:`gp-grid-filter-list`},xe={key:0,class:`gp-grid-filter-option`},Se=[`checked`],Ce=[`checked`,`onChange`],we={key:0,class:`gp-grid-filter-combination`},Te=[`onClick`],Ee=[`onClick`],De={class:`gp-grid-filter-row`},Oe=[`value`,`autofocus`,`onChange`],ke=[`value`],Ae=[`value`,`onInput`],je=[`onClick`],Me=c({__name:`TextFilterContent`,props:{distinctValues:{},valueFormatter:{type:Function},currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`contains`,label:`Contains`},{value:`notContains`,label:`Does not contain`},{value:`equals`,label:`Equals`},{value:`notEquals`,label:`Does not equal`},{value:`startsWith`,label:`Starts with`},{value:`endsWith`,label:`Ends with`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Is not blank`}],c=n,l=o;function d(e){return c.valueFormatter?c.valueFormatter(e):Array.isArray(e)?e.join(`, `):String(e??``)}function f(e){return d(e)}let p=t(()=>{let e=new Set,t=[];for(let n of c.distinctValues){if(n==null||n===``||Array.isArray(n)&&n.length===0)continue;let r=d(n);e.has(r)||(e.add(r),t.push({key:r,label:f(n)}))}return t.sort((e,t)=>{let n=parseFloat(e.label),r=parseFloat(t.label);return!isNaN(n)&&!isNaN(r)?n-r:e.label.localeCompare(t.label,void 0,{numeric:!0,sensitivity:`base`})}),t}),_=t(()=>p.value.length>100),v=h(t(()=>{if(!c.currentFilter?.conditions[0])return _.value?`condition`:`values`;let e=c.currentFilter.conditions[0];return e.selectedValues&&e.selectedValues.size>0?`values`:`condition`}).value),S=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].selectedValues??new Set:new Set),C=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].includeBlank??!0:!0),T=h(``),E=h(new Set(S.value)),D=h(C.value),{conditions:O,combination:k,updateCondition:A,addCondition:j,removeCondition:M}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.conditions[0];if(e.selectedValues&&e.selectedValues.size>0)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let t=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(e=>{let n=e;return{operator:n.operator,value:n.value??``,valueTo:``,nextOperator:n.nextOperator??t}})}).value,c.currentFilter?.combination??`and`),N=t(()=>{if(!T.value)return p.value;let e=T.value.toLowerCase();return p.value.filter(t=>t.label.toLowerCase().includes(e))}),P=t(()=>c.distinctValues.some(e=>e==null||e===``)),F=t(()=>N.value.every(e=>E.value.has(e.key))&&(!P.value||D.value));function I(){E.value=new Set(N.value.map(e=>e.key)),P.value&&(D.value=!0)}function L(){E.value=new Set,D.value=!1}function R(e){let t=new Set(E.value);t.has(e)?t.delete(e):t.add(e),E.value=t}function ee(){if(v.value===`values`){if(p.value.every(e=>E.value.has(e.key))&&(!P.value||D.value)){l(`apply`,null);return}l(`apply`,{conditions:[{type:`text`,operator:`equals`,selectedValues:E.value,includeBlank:D.value}],combination:`and`})}else{let e=O.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.value.trim()!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`text`,operator:e.operator,value:e.value,nextOperator:e.nextOperator})),combination:`and`})}}function z(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,he,[r(` Mode toggle - only show if not too many values `),_.value?r(`v-if`,!0):(m(),i(`div`,ge,[a(`button`,{type:`button`,class:u({active:v.value===`values`}),onClick:n[0]||=e=>v.value=`values`},` Values `,2),a(`button`,{type:`button`,class:u({active:v.value===`condition`}),onClick:n[1]||=e=>v.value=`condition`},` Condition `,2)])),r(` Too many values message `),_.value&&v.value===`condition`?(m(),i(`div`,_e,` Too many unique values (`+y(p.value.length)+`). Use conditions to filter. `,1)):r(`v-if`,!0),r(` VALUES MODE `),v.value===`values`?(m(),i(e,{key:2},[r(` Search input `),w(a(`input`,{"onUpdate:modelValue":n[2]||=e=>T.value=e,class:`gp-grid-filter-search`,type:`text`,placeholder:`Search...`,autofocus:``},null,512),[[x,T.value]]),r(` Select all / Deselect all `),a(`div`,ve,[a(`button`,{type:`button`,disabled:F.value,onClick:I},` Select All `,8,ye),a(`button`,{type:`button`,onClick:L},` Deselect All `)]),r(` Checkbox list `),a(`div`,be,[r(` Blanks option `),P.value?(m(),i(`label`,xe,[a(`input`,{type:`checkbox`,checked:D.value,onChange:n[3]||=e=>D.value=!D.value},null,40,Se),n[5]||=a(`span`,{class:`gp-grid-filter-blank`},`(Blanks)`,-1)])):r(`v-if`,!0),r(` Values `),(m(!0),i(e,null,g(N.value,e=>(m(),i(`label`,{key:e.key,class:`gp-grid-filter-option`},[a(`input`,{type:`checkbox`,checked:E.value.has(e.key),onChange:t=>R(e.key)},null,40,Ce),a(`span`,null,y(e.label),1)]))),128))])],64)):r(`v-if`,!0),r(` CONDITION MODE `),v.value===`condition`?(m(),i(e,{key:3},[(m(!0),i(e,null,g(b(O),(t,n)=>(m(),i(`div`,{key:n,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),n>0?(m(),i(`div`,we,[a(`button`,{type:`button`,class:u({active:b(O)[n-1]?.nextOperator===`and`}),onClick:e=>b(A)(n-1,{nextOperator:`and`})},` AND `,10,Te),a(`button`,{type:`button`,class:u({active:b(O)[n-1]?.nextOperator===`or`}),onClick:e=>b(A)(n-1,{nextOperator:`or`})},` OR `,10,Ee)])):r(`v-if`,!0),a(`div`,De,[r(` Operator select `),a(`select`,{value:t.operator,autofocus:n===0,onChange:e=>b(A)(n,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,ke)),64))],40,Oe),r(` Text input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`text`,value:t.value,placeholder:`Value`,class:`gp-grid-filter-text-input`,onInput:e=>b(A)(n,{value:e.target.value})},null,40,Ae)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(O).length>1?(m(),i(`button`,{key:1,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(M)(n)},` × `,8,je)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[4]||=e=>b(j)(`contains`)},` + Add condition `)],64)):r(`v-if`,!0),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:z},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:ee},` Apply `)])]))}}),Ne={class:`gp-grid-filter-content gp-grid-filter-number`},Pe={key:0,class:`gp-grid-filter-combination`},Fe=[`onClick`],Ie=[`onClick`],Le={class:`gp-grid-filter-row`},Re=[`value`,`onChange`],ze=[`value`],Be=[`value`,`onInput`],Ve=[`value`,`onInput`],He=[`onClick`],Ue=c({__name:`NumberFilterContent`,props:{currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`=`,label:`=`},{value:`!=`,label:`≠`},{value:`>`,label:`>`},{value:`<`,label:`<`},{value:`>=`,label:`≥`},{value:`<=`,label:`≤`},{value:`between`,label:`↔`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Not blank`}],c=n,l=o,{conditions:d,combination:f,updateCondition:p,addCondition:h,removeCondition:_}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:n.value==null?``:String(n.value),valueTo:n.valueTo==null?``:String(n.valueTo),nextOperator:n.nextOperator??e}})}).value,c.currentFilter?.combination??`and`);function v(){let e=d.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.operator===`between`?e.value!==``&&e.valueTo!==``:e.value!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`number`,operator:e.operator,value:e.value?parseFloat(e.value):void 0,valueTo:e.valueTo?parseFloat(e.valueTo):void 0,nextOperator:e.nextOperator})),combination:`and`})}function x(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Ne,[(m(!0),i(e,null,g(b(d),(t,o)=>(m(),i(`div`,{key:o,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),o>0?(m(),i(`div`,Pe,[a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`and`}),onClick:e=>b(p)(o-1,{nextOperator:`and`})},` AND `,10,Fe),a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`or`}),onClick:e=>b(p)(o-1,{nextOperator:`or`})},` OR `,10,Ie)])):r(`v-if`,!0),a(`div`,Le,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(p)(o,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,ze)),64))],40,Re),r(` Number input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`number`,value:t.value,placeholder:`Value`,onInput:e=>b(p)(o,{value:e.target.value})},null,40,Be)):r(`v-if`,!0),r(` Second number input for "between" `),t.operator===`between`?(m(),i(e,{key:1},[n[1]||=a(`span`,{class:`gp-grid-filter-to`},`to`,-1),a(`input`,{type:`number`,value:t.valueTo,placeholder:`Value`,onInput:e=>b(p)(o,{valueTo:e.target.value})},null,40,Ve)],64)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(d).length>1?(m(),i(`button`,{key:2,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(_)(o)},` × `,8,He)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[0]||=e=>b(h)(`=`)},` + Add condition `),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:x},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:v},` Apply `)])]))}}),We={class:`gp-grid-filter-content gp-grid-filter-date`},Ge={key:0,class:`gp-grid-filter-combination`},Ke=[`onClick`],qe=[`onClick`],Je={class:`gp-grid-filter-row`},Ye=[`value`,`onChange`],Xe=[`value`],Ze=[`value`,`onInput`],Qe=[`value`,`onInput`],$e=[`onClick`],et=c({__name:`DateFilterContent`,props:{currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`=`,label:`=`},{value:`!=`,label:`≠`},{value:`>`,label:`>`},{value:`<`,label:`<`},{value:`between`,label:`↔`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Not blank`}],c=n,l=o;function d(e){if(!e)return``;let t=typeof e==`string`?new Date(e):e;return isNaN(t.getTime())?``:t.toISOString().split(`T`)[0]}let{conditions:f,combination:p,updateCondition:h,addCondition:_,removeCondition:v}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:d(n.value),valueTo:d(n.valueTo),nextOperator:n.nextOperator??e}})}).value,c.currentFilter?.combination??`and`);function x(){let e=f.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.operator===`between`?e.value!==``&&e.valueTo!==``:e.value!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`date`,operator:e.operator,value:e.value||void 0,valueTo:e.valueTo||void 0,nextOperator:e.nextOperator})),combination:`and`})}function S(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,We,[(m(!0),i(e,null,g(b(f),(t,o)=>(m(),i(`div`,{key:o,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),o>0?(m(),i(`div`,Ge,[a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`and`}),onClick:e=>b(h)(o-1,{nextOperator:`and`})},` AND `,10,Ke),a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`or`}),onClick:e=>b(h)(o-1,{nextOperator:`or`})},` OR `,10,qe)])):r(`v-if`,!0),a(`div`,Je,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(h)(o,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,Xe)),64))],40,Ye),r(` Date input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`date`,value:t.value,onInput:e=>b(h)(o,{value:e.target.value})},null,40,Ze)):r(`v-if`,!0),r(` Second date input for "between" `),t.operator===`between`?(m(),i(e,{key:1},[n[1]||=a(`span`,{class:`gp-grid-filter-to`},`to`,-1),a(`input`,{type:`date`,value:t.valueTo,onInput:e=>b(h)(o,{valueTo:e.target.value})},null,40,Qe)],64)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(f).length>1?(m(),i(`button`,{key:2,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(v)(o)},` × `,8,$e)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[0]||=e=>b(_)(`=`)},` + Add condition `),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:S},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:x},` Apply `)])]))}}),tt={class:`gp-grid-filter-header`},nt=c({__name:`FilterPopup`,props:{column:{},colIndex:{},containerRef:{},distinctValues:{},currentFilter:{}},emits:[`apply`,`close`],setup(o,{emit:c}){let l=o,u=c,g=h(null),_=h(0),v=h(0),b=h(200),x=h(!1);Z(g,{onClose:()=>u(`close`),ignoreSelector:`.gp-grid-filter-icon`});let S=t(()=>l.column.colId??l.column.field);function w(e){u(`apply`,S.value,e),u(`close`)}function T(){u(`close`)}let E=t(()=>l.column.cellDataType);t(()=>E.value===`text`||E.value===`object`);let D=t(()=>E.value===`number`),O=t(()=>E.value===`date`||E.value===`dateString`||E.value===`dateTime`||E.value===`dateTimeString`),k=null,A=()=>{let e=l.containerRef,t=g.value;if(!e||!t)return;let n=e.querySelector(`[data-col-index="${l.colIndex}"]`);if(!n)return;let r=P(n,t);_.value=r.top,v.value=r.left,b.value=r.minWidth,x.value=!0},j=()=>{k===null&&(k=requestAnimationFrame(()=>{k=null,A()}))};C(()=>{l.colIndex,A()},{flush:`post`}),f(()=>{window.addEventListener(`scroll`,j,{passive:!0,capture:!0}),window.addEventListener(`resize`,j)}),p(()=>{window.removeEventListener(`scroll`,j,{capture:!0}),window.removeEventListener(`resize`,j),k!==null&&cancelAnimationFrame(k)});let M=t(()=>({position:`fixed`,top:`${_.value}px`,left:`${v.value}px`,minWidth:`${b.value}px`,zIndex:1e4,visibility:x.value?`visible`:`hidden`}));return(t,c)=>(m(),i(`div`,{ref_key:`popupRef`,ref:g,class:`gp-grid-filter-popup`,style:d(M.value)},[a(`div`,tt,` Filter: `+y(o.column.headerName??o.column.field),1),r(` Number filter `),D.value?(m(),n(Ue,{key:0,"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`current-filter`])):O.value?(m(),i(e,{key:1},[r(` Date filter `),s(et,{"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`current-filter`])],2112)):(m(),i(e,{key:2},[r(` Text filter (default) `),s(Me,{"distinct-values":o.distinctValues,"value-formatter":o.column.valueFormatter,"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`distinct-values`,`value-formatter`,`current-filter`])],2112))],4))}}),rt=e=>e==null||e===``?o(``):typeof e==`string`?o(e):e,$=(e,t)=>typeof e==`function`?rt(e(t)):l(e,t);function it(t){let{column:n,colIndex:r,sortDirection:i,sortIndex:a,sortable:o,filterable:s,hasFilter:c,core:u,container:d,headerRenderers:f,globalHeaderRenderer:p}=t,m={column:n,colIndex:r,sortDirection:i,sortIndex:a,sortable:o,filterable:s,hasFilter:c,onSort:(e,t)=>{u&&o&&u.setSort(n.colId??n.field,e,t)},onFilterClick:()=>{if(u&&s){let e=d?.querySelector(`[data-col-index="${r}"]`);if(e){let t=e.getBoundingClientRect();u.openFilterPopup(r,{top:t.top,left:t.left,width:t.width,height:t.height})}}}};if(n.headerRenderer!=null)if(typeof n.headerRenderer==`string`){let e=f[n.headerRenderer];if(e)return $(e,m)}else return $(n.headerRenderer,m);if(p)return $(p,m);let h=[l(`span`,{class:`gp-grid-header-text`},n.headerName??n.field)],g=[];if(o){let e=[l(`span`,{class:`gp-grid-sort-arrows-stack`},[l(`svg`,{class:`gp-grid-sort-arrow-up${i===`asc`?` active`:``}`,width:`8`,height:`6`,viewBox:`0 0 8 6`},[l(`path`,{d:`M4 0L8 6H0L4 0Z`,fill:`currentColor`})]),l(`svg`,{class:`gp-grid-sort-arrow-down${i===`desc`?` active`:``}`,width:`8`,height:`6`,viewBox:`0 0 8 6`},[l(`path`,{d:`M4 6L0 0H8L4 6Z`,fill:`currentColor`})])])];a!==void 0&&a>0&&e.push(l(`span`,{class:`gp-grid-sort-index`},String(a))),g.push(l(`span`,{class:`gp-grid-sort-arrows`},e))}return s&&g.push(l(`span`,{class:`gp-grid-filter-icon${c?` active`:``}`,onPointerdown:e=>{e.stopPropagation(),e.preventDefault(),m.onFilterClick()},onClick:e=>{e.stopPropagation()}},[l(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`},[l(`path`,{d:`M4 4h16l-6 8v5l-4 2v-7L4 4z`})])])),g.length>0&&h.push(l(`span`,{class:`gp-grid-header-icons`},g)),l(e,h)}const at=[`data-col-index`,`onPointerdown`],ot=[`onPointerdown`],st=c({__name:`GridHeader`,props:{headerHeight:{},scrollLeft:{},contentWidth:{},totalWidth:{},isLoading:{type:Boolean},visibleColumnsWithIndices:{},columnPositions:{},columnWidths:{},headers:{},sortingEnabled:{type:Boolean},onHeaderMouseDown:{type:Function},onHeaderResizeMouseDown:{type:Function},coreRef:{},outerContainerRef:{},headerRenderers:{},globalHeaderRenderer:{type:Function}},setup(t){let o=t;return(t,s)=>(m(),i(`div`,{class:u([`gp-grid-header`,{"gp-grid-header--loading":o.isLoading}]),style:d({height:`${o.headerHeight}px`})},[a(`div`,{style:d({position:`absolute`,top:0,left:0,transform:`translateX(${-o.scrollLeft}px)`,width:`${Math.max(o.contentWidth,o.totalWidth)}px`,height:`${o.headerHeight}px`})},[(m(!0),i(e,null,g(o.visibleColumnsWithIndices,({column:e,originalIndex:t},a)=>(m(),i(`div`,{key:e.colId??e.field,class:`gp-grid-header-cell`,"data-col-index":t,style:d({left:`${o.columnPositions[a]}px`,width:`${o.columnWidths[a]}px`,height:`${o.headerHeight}px`}),onPointerdown:e=>o.onHeaderMouseDown(t,o.columnWidths[a]??0,o.headerHeight,e)},[(m(),n(_(b(it)({column:e,colIndex:t,sortDirection:o.headers.get(t)?.sortDirection,sortIndex:o.headers.get(t)?.sortIndex,sortable:e.sortable!==!1&&o.sortingEnabled,filterable:e.filterable!==!1,hasFilter:o.headers.get(t)?.hasFilter??!1,core:o.coreRef,container:o.outerContainerRef,headerRenderers:o.headerRenderers,globalHeaderRenderer:o.globalHeaderRenderer})))),e.resizable===!1?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-header-resize-handle`,onPointerdown:T(e=>o.onHeaderResizeMouseDown(t,o.columnWidths[a]??0,e),[`stop`])},null,40,ot))],44,at))),128))],4)],6))}});function ct(e){let{column:t,rowData:n,rowIndex:r,colIndex:i,isActive:a,isSelected:s,isEditing:c,cellRenderers:l,globalCellRenderer:u}=e,d=ae(n,t.field),f={value:t.valueFormatter?t.valueFormatter(d):d,rowData:n,column:t,rowIndex:r,colIndex:i,isActive:a,isSelected:s,isEditing:c};if(t.cellRenderer!=null)if(typeof t.cellRenderer==`string`){let e=l[t.cellRenderer];if(e)return $(e,f)}else return $(t.cellRenderer,f);return u?$(u,f):o(ie(d,t.valueFormatter))}function lt(e){let{column:t,rowData:n,rowIndex:r,colIndex:i,initialValue:a,core:s,editRenderers:c,globalEditRenderer:u}=e;if(!s)return o(``);let d=oe(n,t.field),f={value:t.valueFormatter?t.valueFormatter(d):d,rowData:n,column:t,rowIndex:r,colIndex:i,isActive:!0,isSelected:!0,isEditing:!0,initialValue:a,onValueChange:e=>s.updateEditValue(e),onCommit:()=>s.commitEdit(),onCancel:()=>s.cancelEdit()};if(t.editRenderer!=null)if(typeof t.editRenderer==`string`){let e=c[t.editRenderer];if(e)return $(e,f)}else return $(t.editRenderer,f);return u?$(u,f):l(`input`,{class:`gp-grid-edit-input`,type:`text`,value:a==null?``:String(a),autofocus:!0,onFocus:e=>e.target.select(),onInput:e=>s.updateEditValue(e.target.value),onKeydown:e=>{e.stopPropagation(),e.key===`Enter`?s.commitEdit():e.key===`Escape`?s.cancelEdit():e.key===`Tab`&&(e.preventDefault(),s.commitEdit(),s.selection.moveFocus(e.shiftKey?`left`:`right`,!1))},onBlur:()=>s.commitEdit()})}const ut=[`data-cell-row`,`data-cell-col`,`onPointerdown`,`onDblclick`,`onMouseenter`],dt={key:0,class:`gp-grid-error`},ft={key:1,class:`gp-grid-empty`},pt=c({__name:`GridBody`,props:{rowHeight:{},totalHeaderHeight:{},contentWidth:{},contentHeight:{},totalWidth:{},rowsWrapperOffset:{},activeCell:{},selectionRange:{},editingCell:{},hoverPosition:{},error:{},isLoading:{type:Boolean},totalRows:{},slotsArray:{},visibleColumnsWithIndices:{},columnPositions:{},columnWidths:{},fillHandlePosition:{},dragState:{},onScroll:{type:Function},onWheel:{type:Function},wheelDampening:{},onCellMouseDown:{type:Function},onCellDoubleClick:{type:Function},onCellMouseEnter:{type:Function},onCellMouseLeave:{type:Function},onFillHandleMouseDown:{type:Function},coreRef:{},cellRenderers:{},editRenderers:{},globalCellRenderer:{},globalEditRenderer:{}},setup(t,{expose:o}){let s=t,c=h(null),l=e=>[`gp-grid-row`,...s.coreRef?.highlight?.computeRowClasses(e.rowIndex,e.rowData)??[]].filter(Boolean).join(` `),f=(e,t,n,r,i)=>{let a=W(e,t,s.editingCell),o=j(U(e,t,s.activeCell),K(e,t,s.selectionRange),a,G(e,t,s.dragState.dragType===`fill`,s.dragState.fillSourceRange,s.dragState.fillTarget)),c=s.coreRef?.highlight?.computeCombinedCellClasses(e,t,n,r)??[],l=n.rowDrag===!0;return[o,...c,l?`gp-grid-cell--row-drag-handle`:``].filter(Boolean).join(` `)};return o({bodyRef:c}),(t,o)=>(m(),i(`div`,{ref_key:`bodyRef`,ref:c,style:{flex:`1`,overflow:`auto`,position:`relative`},onScroll:o[2]||=(...e)=>s.onScroll&&s.onScroll(...e),onWheel:o[3]||=e=>s.onWheel(e,s.wheelDampening)},[r(` Content sizer - provides scroll range `),a(`div`,{style:d({width:`${Math.max(s.contentWidth,s.totalWidth)}px`,height:`${Math.max(s.contentHeight-s.totalHeaderHeight,0)}px`,position:`relative`,minWidth:`100%`})},[r(` Rows wrapper `),a(`div`,{class:`gp-grid-rows-wrapper`,style:d({width:`${Math.max(s.contentWidth,s.totalWidth)}px`,transform:`translateY(${s.rowsWrapperOffset}px)`})},[r(` Row slots `),(m(!0),i(e,null,g(s.slotsArray.filter(e=>e.rowIndex>=0),t=>(m(),i(`div`,{key:t.slotId,class:u(l(t)),style:d({position:`absolute`,top:0,left:0,transform:`translateY(${t.translateY}px)`,width:`${Math.max(s.contentWidth,s.totalWidth)}px`,height:`${s.rowHeight}px`})},[(m(!0),i(e,null,g(s.visibleColumnsWithIndices,({column:a,originalIndex:c},l)=>(m(),i(`div`,{key:`${t.slotId}-${a.colId??a.field}`,class:u(f(t.rowIndex,c,a,t.rowData,s.hoverPosition)),"data-cell-row":t.rowIndex,"data-cell-col":c,style:d({position:`absolute`,left:`${s.columnPositions[l]}px`,top:0,width:`${s.columnWidths[l]}px`,height:`${s.rowHeight}px`}),onPointerdown:e=>s.onCellMouseDown(t.rowIndex,c,e),onDblclick:()=>s.onCellDoubleClick(t.rowIndex,c),onMouseenter:()=>s.onCellMouseEnter(t.rowIndex,c),onMouseleave:o[0]||=(...e)=>s.onCellMouseLeave&&s.onCellMouseLeave(...e)},[r(` Edit mode `),b(W)(t.rowIndex,c,s.editingCell)&&s.editingCell?(m(),n(_(b(lt)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,initialValue:s.editingCell.initialValue,core:s.coreRef,editRenderers:s.editRenderers,globalEditRenderer:s.globalEditRenderer})),{key:0})):(m(),i(e,{key:1},[r(` View mode `),(m(),n(_(b(ct)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,isActive:b(U)(t.rowIndex,c,s.activeCell),isSelected:b(K)(t.rowIndex,c,s.selectionRange),isEditing:!1,cellRenderers:s.cellRenderers,globalCellRenderer:s.globalCellRenderer}))))],64))],46,ut))),128))],6))),128)),r(` Fill handle `),s.fillHandlePosition&&!s.editingCell?(m(),i(`div`,{key:0,class:`gp-grid-fill-handle`,style:d({top:`${s.fillHandlePosition.top}px`,left:`${s.fillHandlePosition.left}px`}),onPointerdown:o[1]||=(...e)=>s.onFillHandleMouseDown&&s.onFillHandleMouseDown(...e)},null,36)):r(`v-if`,!0),r(` Row drop indicator `),s.dragState.dragType===`row-drag`&&s.dragState.rowDrag?.dropTargetIndex!==null?(m(),i(`div`,{key:1,class:`gp-grid-row-drop-indicator`,style:d({transform:`translateY(${s.dragState.rowDrag.dropIndicatorY}px)`,width:`${Math.max(s.contentWidth,s.totalWidth)}px`})},null,4)):r(`v-if`,!0)],4)],4),r(` Error message `),s.error?(m(),i(`div`,dt,` Error: `+y(s.error),1)):r(`v-if`,!0),r(` Empty state `),!s.isLoading&&!s.error&&s.totalRows===0?(m(),i(`div`,ft,` No data to display `)):r(`v-if`,!0)],544))}}),mt=c({__name:`CellPeek`,props:{peekCell:{},column:{},rowData:{},containerRef:{},cellRenderers:{},globalCellRenderer:{}},emits:[`close`],setup(e,{emit:r}){let a=e,o=r,s=h(null),c=h(0),l=h(0),u=h(0),g=h(!1),v=null,y=()=>{let e=a.containerRef,t=s.value;if(!e||!t)return;let n=e.querySelector(`[data-cell-row="${a.peekCell.row}"][data-cell-col="${a.peekCell.col}"]`);if(!n){o(`close`);return}let r=n.getBoundingClientRect();c.value=r.top,l.value=r.left,u.value=r.width,g.value=!0},b=()=>{v===null&&(v=requestAnimationFrame(()=>{v=null,y()}))},x=e=>{let t=e.target;s.value?.contains(t)||o(`close`)},C=null,w=null;f(()=>{y(),window.addEventListener(`scroll`,b,{passive:!0,capture:!0}),window.addEventListener(`resize`,b),s.value&&(w=k(s.value)),C=requestAnimationFrame(()=>{document.addEventListener(`pointerdown`,x)})}),p(()=>{window.removeEventListener(`scroll`,b,{capture:!0}),window.removeEventListener(`resize`,b),document.removeEventListener(`pointerdown`,x),w?.(),v!==null&&cancelAnimationFrame(v),C!==null&&cancelAnimationFrame(C)}),S(()=>[a.peekCell.row,a.peekCell.col],()=>y(),{flush:`post`});let T=t(()=>({position:`fixed`,top:`${c.value}px`,left:`${l.value}px`,width:`${u.value}px`,visibility:g.value?`visible`:`hidden`})),E=t(()=>ct({column:a.column,rowData:a.rowData,rowIndex:a.peekCell.row,colIndex:a.peekCell.col,isActive:!0,isSelected:!1,isEditing:!1,cellRenderers:a.cellRenderers,globalCellRenderer:a.globalCellRenderer}));return(e,t)=>(m(),i(`div`,{ref_key:`overlayRef`,ref:s,class:`gp-grid-cell-peek`,style:d(T.value)},[(m(),n(_(E.value)))],4))}}),ht={key:1,class:`gp-grid-loading`},gt=c({__name:`GpGrid`,props:{columns:{},dataSource:{},rowData:{},rowHeight:{},headerHeight:{},overscan:{default:3},rowLoading:{},sortingEnabled:{type:Boolean,default:!0},darkMode:{type:Boolean,default:!1},wheelDampening:{default:.1},cellRenderers:{default:()=>({})},editRenderers:{default:()=>({})},headerRenderers:{default:()=>({})},cellRenderer:{},editRenderer:{},headerRenderer:{},initialWidth:{},initialHeight:{},highlighting:{},getRowId:{},onCellValueChanged:{},loadingComponent:{},rowDragEntireRow:{type:Boolean},onRowDragEnd:{},onColumnResized:{},onColumnMoved:{}},setup(o,{expose:c}){let l=o,g=h(null),x=h(null),C=t(()=>x.value?.bodyRef??null),w=v(null),T=v(null),E=v(null),O=h(0),{state:k,applyInstructions:A,reset:j}=J({initialWidth:l.initialWidth,initialHeight:l.initialHeight}),M=t(()=>l.headerHeight??l.rowHeight),N=t(()=>k.value.columns??l.columns),P=t(()=>N.value.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),I=t(()=>F(P.value.map(e=>e.column),k.value.viewportWidth)),R=t(()=>I.value.positions),z=t(()=>I.value.widths),B=t(()=>ce(R.value)),V=t(()=>Array.from(k.value.slots.values())),{handleCellMouseDown:te,handleCellDoubleClick:ne,handleFillHandleMouseDown:re,handleHeaderClick:ie,handleHeaderMouseDown:ae,handleHeaderResizeMouseDown:oe,handleKeyDown:se,handlePaste:H,handleWheel:le,dragState:U}=X(w,C,N,{activeCell:t(()=>k.value.activeCell),selectionRange:t(()=>k.value.selectionRange),editingCell:t(()=>k.value.editingCell),filterPopupOpen:t(()=>k.value.filterPopup?.isOpen??!1),rowHeight:l.rowHeight,headerHeight:M.value,columnPositions:R,visibleColumnsWithIndices:P,slots:t(()=>k.value.slots),rowsWrapperOffset:t(()=>k.value.rowsWrapperOffset)}),{fillHandlePosition:ue}=me({activeCell:t(()=>k.value.activeCell),selectionRange:t(()=>k.value.selectionRange),slots:t(()=>k.value.slots),columns:N,visibleColumnsWithIndices:P,columnPositions:R,columnWidths:z,rowHeight:l.rowHeight});function W(){let e=C.value,t=w.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)}function de(){let e=C.value;e&&(O.value=e.scrollLeft),W()}function G(e,t){let n=w.value;n&&n.setFilter(e,t)}function fe(){let e=w.value;e&&e.closeFilterPopup()}function K(){w.value?.stopPeek()}let q=t(()=>{let e=k.value.peekCell;if(!e)return null;let t=N.value[e.col],n=V.value.find(t=>t.rowIndex===e.row);return!t||!n?null:{peek:e,column:t,rowData:n.rowData}});function pe(e,t){w.value?.input.handleCellMouseEnter(e,t)}function Y(){w.value?.input.handleCellMouseLeave()}function Z(){return l.dataSource??(l.rowData?ee(l.rowData):L([]))}function Q(e){E.value&&=(E.value(),null),w.value&&w.value.destroy();let t=new D({columns:l.columns,dataSource:e,rowHeight:l.rowHeight,headerHeight:M.value,overscan:l.overscan,rowLoading:l.rowLoading,sortingEnabled:l.sortingEnabled,highlighting:l.highlighting,getRowId:l.getRowId,onCellValueChanged:l.onCellValueChanged?e=>l.onCellValueChanged?.(e):void 0,rowDragEntireRow:l.rowDragEntireRow??!1,onRowDragEnd:(e,t)=>l.onRowDragEnd?.(e,t),onColumnResized:(e,t)=>l.onColumnResized?.(e,t),onColumnMoved:(e,t)=>l.onColumnMoved?.(e,t)});w.value=t,E.value=t.onBatchInstruction(e=>{A(e)}),t.initialize();let n=C.value;n&&t.setViewport(n.scrollTop,n.scrollLeft,n.clientWidth,n.clientHeight)}return f(()=>{let e=Z();T.value=e,Q(e);let t=C.value;if(t&&typeof ResizeObserver<`u`){let e=new ResizeObserver(()=>{w.value?.setViewport(t.scrollTop,t.scrollLeft,t.clientWidth,t.clientHeight)});e.observe(t),p(()=>{e.disconnect()})}p(()=>{E.value&&=(E.value(),null),w.value&&=(w.value.destroy(),null),T.value&&=(T.value.destroy?.(),null)})}),S([()=>l.dataSource,()=>l.rowData],()=>{l.rowData&&l.rowData.length>1e4&&T.value&&console.warn(`[gp-grid] rowData prop changed with ${l.rowData.length} rows — this triggers a full rebuild. Use useGridData() for efficient updates.`);let e=Z(),t=T.value;t&&t!==e?(t.destroy?.(),T.value=e,w.value?.setDataSource(e)):t||(T.value=e)}),S(()=>l.dataSource,e=>{if(e){let t=e;if(t.subscribe){let e=t.subscribe(()=>{w.value?.refreshFromTransaction()});p(()=>e())}}},{immediate:!0}),S(()=>k.value.pendingScrollTop,e=>{if(e!==null){let t=C.value;t&&(t.scrollTop=e)}},{flush:`post`}),S(()=>l.highlighting,e=>{w.value?.highlight&&e&&w.value.highlight.updateOptions(e)}),c({core:w}),(t,c)=>(m(),i(`div`,{ref_key:`outerContainerRef`,ref:g,class:u([`gp-grid-container`,{"gp-grid-container--dark":o.darkMode}]),style:{width:`100%`,height:`100%`,position:`relative`,display:`flex`,"flex-direction":`column`},tabindex:`0`,onKeydown:c[0]||=(...e)=>b(se)&&b(se)(...e),onPaste:c[1]||=(...e)=>b(H)&&b(H)(...e)},[s(st,{"header-height":M.value,"scroll-left":O.value,"content-width":b(k).contentWidth,"total-width":B.value,"is-loading":b(k).isLoading,"visible-columns-with-indices":P.value,"column-positions":R.value,"column-widths":z.value,headers:b(k).headers,"sorting-enabled":o.sortingEnabled,"on-header-mouse-down":b(ae),"on-header-resize-mouse-down":b(oe),"core-ref":w.value,"outer-container-ref":g.value,"header-renderers":o.headerRenderers??{},"global-header-renderer":o.headerRenderer},null,8,[`header-height`,`scroll-left`,`content-width`,`total-width`,`is-loading`,`visible-columns-with-indices`,`column-positions`,`column-widths`,`headers`,`sorting-enabled`,`on-header-mouse-down`,`on-header-resize-mouse-down`,`core-ref`,`outer-container-ref`,`header-renderers`,`global-header-renderer`]),s(pt,{ref_key:`gridBodyComp`,ref:x,"row-height":o.rowHeight,"total-header-height":M.value,"content-width":b(k).contentWidth,"content-height":b(k).contentHeight,"total-width":B.value,"rows-wrapper-offset":b(k).rowsWrapperOffset,"active-cell":b(k).activeCell,"selection-range":b(k).selectionRange,"editing-cell":b(k).editingCell,"hover-position":b(k).hoverPosition,error:b(k).error,"is-loading":b(k).isLoading,"total-rows":b(k).totalRows,"slots-array":V.value,"visible-columns-with-indices":P.value,"column-positions":R.value,"column-widths":z.value,"fill-handle-position":b(ue),"drag-state":b(U),"on-scroll":de,"on-wheel":b(le),"wheel-dampening":o.wheelDampening,"on-cell-mouse-down":b(te),"on-cell-double-click":b(ne),"on-cell-mouse-enter":pe,"on-cell-mouse-leave":Y,"on-fill-handle-mouse-down":b(re),"core-ref":w.value,"cell-renderers":o.cellRenderers??{},"edit-renderers":o.editRenderers??{},"global-cell-renderer":o.cellRenderer,"global-edit-renderer":o.editRenderer},null,8,`row-height.total-header-height.content-width.content-height.total-width.rows-wrapper-offset.active-cell.selection-range.editing-cell.hover-position.error.is-loading.total-rows.slots-array.visible-columns-with-indices.column-positions.column-widths.fill-handle-position.drag-state.on-wheel.wheel-dampening.on-cell-mouse-down.on-cell-double-click.on-fill-handle-mouse-down.core-ref.cell-renderers.edit-renderers.global-cell-renderer.global-edit-renderer`.split(`.`)),r(` Loading overlay - positioned outside scrollable area to avoid Firefox sticky issues `),b(k).isLoading?(m(),i(`div`,{key:0,style:d({position:`absolute`,top:`${M.value}px`,left:0,right:0,bottom:0,zIndex:50,pointerEvents:`none`})},[c[3]||=a(`div`,{class:`gp-grid-loading-overlay`},null,-1),l.loadingComponent?(m(),n(_(l.loadingComponent),{key:0,"is-loading":!0})):(m(),i(`div`,ht,[...c[2]||=[a(`div`,{class:`gp-grid-loading-spinner`},null,-1)]]))],4)):r(`v-if`,!0),r(` Filter Popup `),b(k).filterPopup?.isOpen&&b(k).filterPopup.column?(m(),n(nt,{key:1,column:b(k).filterPopup.column,"col-index":b(k).filterPopup.colIndex,"container-ref":g.value,"distinct-values":b(k).filterPopup.distinctValues,"current-filter":b(k).filterPopup.currentFilter,onApply:G,onClose:fe},null,8,[`column`,`col-index`,`container-ref`,`distinct-values`,`current-filter`])):r(`v-if`,!0),r(` Cell Peek (read-only multi-line overlay on dblclick of non-editable cell) `),q.value?(m(),n(mt,{key:2,"peek-cell":q.value.peek,column:q.value.column,"row-data":q.value.rowData,"container-ref":g.value,"cell-renderers":o.cellRenderers??{},"global-cell-renderer":o.cellRenderer,onClose:K},null,8,[`peek-cell`,`column`,`row-data`,`container-ref`,`cell-renderers`,`global-cell-renderer`])):r(`v-if`,!0),r(` Column resize line `),b(U).dragType===`column-resize`&&b(U).columnResize?(m(),i(`div`,{key:3,class:`gp-grid-column-resize-line`,style:d({left:`${(R.value[P.value.findIndex(e=>e.originalIndex===b(U).columnResize.colIndex)]??0)+b(U).columnResize.currentWidth-O.value}px`})},null,4)):r(`v-if`,!0),r(` Column move ghost `),b(U).dragType===`column-move`&&b(U).columnMove?(m(),i(e,{key:4},[a(`div`,{class:`gp-grid-column-move-ghost`,style:d({left:`${b(U).columnMove.currentX-b(U).columnMove.ghostWidth/2}px`,top:`${b(U).columnMove.currentY-b(U).columnMove.ghostHeight/2}px`,width:`${b(U).columnMove.ghostWidth}px`,height:`${b(U).columnMove.ghostHeight}px`})},y(N.value[b(U).columnMove.sourceColIndex]?.headerName??N.value[b(U).columnMove.sourceColIndex]?.field??``),5),b(U).columnMove.dropTargetIndex===null?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-column-drop-indicator`,style:d({left:`${(R.value[b(U).columnMove.dropTargetIndex]??0)-O.value}px`,height:`${M.value}px`})},null,4))],64)):r(`v-if`,!0),r(` Row drag ghost (fixed position, follows cursor) `),b(U).dragType===`row-drag`&&b(U).rowDrag?(m(),i(`div`,{key:5,class:`gp-grid-row-drag-ghost`,style:d({left:`${b(U).rowDrag.currentX+12}px`,top:`${b(U).rowDrag.currentY-o.rowHeight/2}px`,width:`${Math.min(300,B.value)}px`,height:`${o.rowHeight}px`})},null,4)):r(`v-if`,!0)],34))}});function _t(e){let n=h(null),r=h(null),{state:i,applyInstructions:a}=J(),o=t(()=>e.headerHeight??e.rowHeight),s=t(()=>e.columns.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),c=t(()=>F(s.value.map(e=>e.column),i.value.viewportWidth)),l=t(()=>c.value.positions),u=t(()=>c.value.widths),d=t(()=>ce(l.value)),m=t(()=>Array.from(i.value.slots.values())),{handleCellMouseDown:g,handleCellDoubleClick:_,handleFillHandleMouseDown:v,handleHeaderClick:y,handleKeyDown:b,handlePaste:x,handleWheel:C,dragState:w}=X(r,n,t(()=>e.columns),{activeCell:t(()=>i.value.activeCell),selectionRange:t(()=>i.value.selectionRange),editingCell:t(()=>i.value.editingCell),filterPopupOpen:t(()=>i.value.filterPopup?.isOpen??!1),rowHeight:e.rowHeight,headerHeight:o.value,columnPositions:l,visibleColumnsWithIndices:s,slots:t(()=>i.value.slots),rowsWrapperOffset:t(()=>i.value.rowsWrapperOffset)}),T=()=>{let e=n.value,t=r.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)},E=(e,t)=>{let n=r.value;n&&n.setFilter(e,t)},O=()=>{let e=r.value;e&&e.closeFilterPopup()},k=(e,t)=>{r.value?.input.handleCellMouseEnter(e,t)},A=()=>{r.value?.input.handleCellMouseLeave()};f(()=>{let t=e.dataSource??(e.rowData?ee(e.rowData):L([])),i=new D({columns:e.columns,dataSource:t,rowHeight:e.rowHeight,headerHeight:o.value,overscan:e.overscan??3,rowLoading:e.rowLoading,sortingEnabled:e.sortingEnabled??!0,highlighting:e.highlighting,getRowId:e.getRowId,onCellValueChanged:e.onCellValueChanged?t=>e.onCellValueChanged?.(t):void 0});r.value=i;let s=i.onBatchInstruction(e=>{a(e)});i.initialize();let c=n.value;if(c){i.setViewport(c.scrollTop,c.scrollLeft,c.clientWidth,c.clientHeight);let e=new ResizeObserver(()=>{i.setViewport(c.scrollTop,c.scrollLeft,c.clientWidth,c.clientHeight)});e.observe(c),p(()=>{e.disconnect(),s(),r.value=null})}}),S(()=>i.value.pendingScrollTop,e=>{if(e!==null){let t=n.value;t&&(t.scrollTop=e)}},{flush:`post`}),S(()=>e.dataSource,e=>{if(e){let t=e;if(t.subscribe){let e=t.subscribe(()=>{r.value?.refresh()});p(()=>e())}}},{immediate:!0}),S(()=>e.highlighting,e=>{r.value?.highlight&&e&&r.value.highlight.updateOptions(e)});let{fillHandlePosition:M}=me({activeCell:t(()=>i.value.activeCell),selectionRange:t(()=>i.value.selectionRange),slots:t(()=>i.value.slots),columns:t(()=>e.columns),visibleColumnsWithIndices:s,columnPositions:l,columnWidths:u,rowHeight:e.rowHeight});return{containerRef:n,coreRef:r,state:i,slotsArray:m,totalHeaderHeight:o,columnPositions:l,columnWidths:u,totalWidth:d,fillHandlePosition:M,handleScroll:T,handleCellMouseDown:g,handleCellDoubleClick:_,handleFillHandleMouseDown:v,handleHeaderClick:y,handleKeyDown:b,handlePaste:x,handleWheel:C,handleFilterApply:E,handleFilterPopupClose:O,handleCellMouseEnter:k,handleCellMouseLeave:A,dragState:w,isCellSelected:K,isCellActive:U,isCellEditing:W,isCellInFillPreview:G,buildCellClasses:j}}const vt=(e,t)=>{let n=te(e,{getRowId:t.getRowId,debounceMs:t.debounceMs,useWorker:t.useWorker,parallelSort:t.parallelSort});return p(()=>{n.clear()}),{dataSource:n,updateRow:n.updateRow,addRows:n.addRows,removeRows:n.removeRows,updateCell:n.updateCell,clear:n.clear,getRowById:n.getRowById,getTotalRowCount:n.getTotalRowCount,flushTransactions:n.flushTransactions}};export{gt as GpGrid,gt as default,E as GridCore,A as buildCellClasses,M as calculateColumnPositions,I as createClientDataSource,R as createDataSourceFromArray,z as createInitialState,V as createMutableClientDataSource,ne as createServerDataSource,re as findColumnAtX,oe as getCellValue,se as getTotalWidth,H as gridStyles,le as isCellActive,ue as isCellEditing,de as isCellInFillPreview,fe as isCellSelected,q as isRowVisible,ct as renderCell,lt as renderEditCell,it as renderHeader,Y as useAutoScroll,me as useFillHandle,Q as useFilterConditions,Z as useFilterPopup,_t as useGpGrid,vt as useGridData,J as useGridState,X as useInputHandler};
|
package/dist/styles.css
CHANGED
|
@@ -88,9 +88,15 @@
|
|
|
88
88
|
GP Grid - Clean Flat Design
|
|
89
89
|
============================================================================= */
|
|
90
90
|
|
|
91
|
-
/* Grid Container */
|
|
91
|
+
/* Grid Container - structural */
|
|
92
92
|
.gp-grid-container {
|
|
93
93
|
outline: none;
|
|
94
|
+
user-select: none;
|
|
95
|
+
-webkit-user-select: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* Visual properties - :where() for zero specificity, consumers can override with a single class */
|
|
99
|
+
:where(.gp-grid-container) {
|
|
94
100
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
95
101
|
font-size: 13px;
|
|
96
102
|
line-height: 1.5;
|
|
@@ -98,12 +104,13 @@
|
|
|
98
104
|
background-color: var(--gp-grid-bg);
|
|
99
105
|
border: 1px solid var(--gp-grid-border);
|
|
100
106
|
border-radius: 6px;
|
|
101
|
-
user-select: none;
|
|
102
|
-
-webkit-user-select: none;
|
|
103
107
|
}
|
|
104
108
|
|
|
105
109
|
.gp-grid-container:focus {
|
|
106
110
|
outline: none;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
:where(.gp-grid-container:focus) {
|
|
107
114
|
border-color: var(--gp-grid-primary);
|
|
108
115
|
}
|
|
109
116
|
|
|
@@ -116,39 +123,43 @@
|
|
|
116
123
|
position: sticky;
|
|
117
124
|
top: 0;
|
|
118
125
|
left: 0;
|
|
119
|
-
/* z-index set inline (100) to ensure header stays above rows wrapper */
|
|
120
|
-
background-color: var(--gp-grid-header-bg);
|
|
121
|
-
border-bottom: 1px solid var(--gp-grid-border);
|
|
122
126
|
flex-shrink: 0;
|
|
123
127
|
z-index: 11;
|
|
124
128
|
overflow: hidden;
|
|
125
129
|
}
|
|
126
130
|
|
|
131
|
+
:where(.gp-grid-header) {
|
|
132
|
+
background-color: var(--gp-grid-header-bg);
|
|
133
|
+
border-bottom: 1px solid var(--gp-grid-border);
|
|
134
|
+
}
|
|
135
|
+
|
|
127
136
|
.gp-grid-container .gp-grid-header-cell {
|
|
128
137
|
position: absolute;
|
|
129
138
|
box-sizing: border-box;
|
|
139
|
+
user-select: none;
|
|
140
|
+
display: flex;
|
|
141
|
+
top: 0;
|
|
142
|
+
touch-action: none;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
:where(.gp-grid-header-cell) {
|
|
146
|
+
align-items: center;
|
|
147
|
+
padding: 0 12px;
|
|
130
148
|
border-right: 1px solid var(--gp-grid-border);
|
|
131
149
|
font-weight: 600;
|
|
132
150
|
font-size: 12px;
|
|
133
151
|
letter-spacing: 0.5px;
|
|
134
152
|
color: var(--gp-grid-header-text);
|
|
135
153
|
cursor: pointer;
|
|
136
|
-
user-select: none;
|
|
137
|
-
display: flex;
|
|
138
|
-
align-items: center;
|
|
139
|
-
padding: 0 12px;
|
|
140
154
|
background-color: transparent;
|
|
141
155
|
transition: background-color 0.1s ease;
|
|
142
|
-
top: 0;
|
|
143
|
-
background: transparent;
|
|
144
|
-
touch-action: none;
|
|
145
156
|
}
|
|
146
157
|
|
|
147
|
-
.gp-grid-
|
|
158
|
+
:where(.gp-grid-header-cell:hover) {
|
|
148
159
|
background-color: var(--gp-grid-hover);
|
|
149
160
|
}
|
|
150
161
|
|
|
151
|
-
.gp-grid-
|
|
162
|
+
:where(.gp-grid-header-cell:active) {
|
|
152
163
|
background-color: var(--gp-grid-border-light);
|
|
153
164
|
}
|
|
154
165
|
|
|
@@ -157,6 +168,9 @@
|
|
|
157
168
|
overflow: hidden;
|
|
158
169
|
text-overflow: ellipsis;
|
|
159
170
|
white-space: nowrap;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
:where(.gp-grid-header-text) {
|
|
160
174
|
color: var(--gp-grid-header-text);
|
|
161
175
|
}
|
|
162
176
|
|
|
@@ -184,20 +198,20 @@
|
|
|
184
198
|
gap: 2px;
|
|
185
199
|
}
|
|
186
200
|
|
|
187
|
-
.gp-grid-sort-arrow-up,
|
|
188
|
-
.gp-grid-sort-arrow-down {
|
|
201
|
+
:where(.gp-grid-sort-arrow-up),
|
|
202
|
+
:where(.gp-grid-sort-arrow-down) {
|
|
189
203
|
opacity: 0.35;
|
|
190
204
|
transition: opacity 0.15s ease, color 0.15s ease;
|
|
191
205
|
color: var(--gp-grid-text);
|
|
192
206
|
}
|
|
193
207
|
|
|
194
|
-
.gp-grid-sort-arrow-up.active,
|
|
195
|
-
.gp-grid-sort-arrow-down.active {
|
|
208
|
+
:where(.gp-grid-sort-arrow-up.active),
|
|
209
|
+
:where(.gp-grid-sort-arrow-down.active) {
|
|
196
210
|
opacity: 1;
|
|
197
211
|
color: var(--gp-grid-primary);
|
|
198
212
|
}
|
|
199
213
|
|
|
200
|
-
.gp-grid-sort-index {
|
|
214
|
+
:where(.gp-grid-sort-index) {
|
|
201
215
|
font-size: 9px;
|
|
202
216
|
color: var(--gp-grid-primary);
|
|
203
217
|
font-weight: 600;
|
|
@@ -210,6 +224,9 @@
|
|
|
210
224
|
justify-content: center;
|
|
211
225
|
width: 20px;
|
|
212
226
|
height: 20px;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
:where(.gp-grid-filter-icon) {
|
|
213
230
|
border-radius: 4px;
|
|
214
231
|
cursor: pointer;
|
|
215
232
|
color: var(--gp-grid-text-secondary);
|
|
@@ -217,12 +234,12 @@
|
|
|
217
234
|
margin-left: 2px;
|
|
218
235
|
}
|
|
219
236
|
|
|
220
|
-
.gp-grid-filter-icon:hover {
|
|
237
|
+
:where(.gp-grid-filter-icon:hover) {
|
|
221
238
|
background-color: var(--gp-grid-hover);
|
|
222
239
|
color: var(--gp-grid-primary);
|
|
223
240
|
}
|
|
224
241
|
|
|
225
|
-
.gp-grid-filter-icon.active {
|
|
242
|
+
:where(.gp-grid-filter-icon.active) {
|
|
226
243
|
color: var(--gp-grid-primary);
|
|
227
244
|
background-color: var(--gp-grid-primary-light);
|
|
228
245
|
}
|
|
@@ -234,6 +251,8 @@
|
|
|
234
251
|
min-height: 44px;
|
|
235
252
|
width: 44px;
|
|
236
253
|
height: 44px;
|
|
254
|
+
}
|
|
255
|
+
:where(.gp-grid-filter-icon) {
|
|
237
256
|
margin-left: 0;
|
|
238
257
|
}
|
|
239
258
|
|
|
@@ -246,6 +265,9 @@
|
|
|
246
265
|
/* Disabled header state during data loading */
|
|
247
266
|
.gp-grid-header--loading .gp-grid-header-cell {
|
|
248
267
|
pointer-events: none;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
:where(.gp-grid-header--loading .gp-grid-header-cell) {
|
|
249
271
|
opacity: 0.6;
|
|
250
272
|
cursor: default;
|
|
251
273
|
}
|
|
@@ -265,8 +287,8 @@
|
|
|
265
287
|
touch-action: none;
|
|
266
288
|
}
|
|
267
289
|
|
|
268
|
-
.gp-grid-header-resize-handle:hover,
|
|
269
|
-
.gp-grid-header-resize-handle--active {
|
|
290
|
+
:where(.gp-grid-header-resize-handle:hover),
|
|
291
|
+
:where(.gp-grid-header-resize-handle--active) {
|
|
270
292
|
background-color: var(--gp-grid-primary);
|
|
271
293
|
opacity: 0.4;
|
|
272
294
|
}
|
|
@@ -284,11 +306,14 @@
|
|
|
284
306
|
top: 0;
|
|
285
307
|
width: 2px;
|
|
286
308
|
height: 100%;
|
|
287
|
-
background-color: var(--gp-grid-primary);
|
|
288
309
|
z-index: 1000;
|
|
289
310
|
pointer-events: none;
|
|
290
311
|
}
|
|
291
312
|
|
|
313
|
+
:where(.gp-grid-column-resize-line) {
|
|
314
|
+
background-color: var(--gp-grid-primary);
|
|
315
|
+
}
|
|
316
|
+
|
|
292
317
|
/* =============================================================================
|
|
293
318
|
Column Move
|
|
294
319
|
============================================================================= */
|
|
@@ -296,23 +321,26 @@
|
|
|
296
321
|
.gp-grid-column-move-ghost {
|
|
297
322
|
position: fixed;
|
|
298
323
|
pointer-events: none;
|
|
299
|
-
opacity: 0.7;
|
|
300
324
|
z-index: 2000;
|
|
325
|
+
display: flex;
|
|
326
|
+
align-items: center;
|
|
327
|
+
box-sizing: border-box;
|
|
328
|
+
overflow: hidden;
|
|
329
|
+
white-space: nowrap;
|
|
330
|
+
text-overflow: ellipsis;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
:where(.gp-grid-column-move-ghost) {
|
|
334
|
+
opacity: 0.7;
|
|
301
335
|
background-color: var(--gp-grid-header-bg);
|
|
302
336
|
border: 2px solid var(--gp-grid-primary);
|
|
303
337
|
border-radius: 4px;
|
|
304
338
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
305
|
-
display: flex;
|
|
306
|
-
align-items: center;
|
|
307
339
|
padding: 0 12px;
|
|
308
340
|
font-weight: 600;
|
|
309
341
|
font-size: 12px;
|
|
310
342
|
letter-spacing: 0.5px;
|
|
311
343
|
color: var(--gp-grid-header-text);
|
|
312
|
-
box-sizing: border-box;
|
|
313
|
-
overflow: hidden;
|
|
314
|
-
white-space: nowrap;
|
|
315
|
-
text-overflow: ellipsis;
|
|
316
344
|
}
|
|
317
345
|
|
|
318
346
|
.gp-grid-column-drop-indicator {
|
|
@@ -321,9 +349,12 @@
|
|
|
321
349
|
left: 0;
|
|
322
350
|
width: 3px;
|
|
323
351
|
height: 100%;
|
|
324
|
-
background-color: var(--gp-grid-primary);
|
|
325
352
|
z-index: 1000;
|
|
326
353
|
pointer-events: none;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
:where(.gp-grid-column-drop-indicator) {
|
|
357
|
+
background-color: var(--gp-grid-primary);
|
|
327
358
|
border-radius: 2px;
|
|
328
359
|
}
|
|
329
360
|
|
|
@@ -359,7 +390,6 @@
|
|
|
359
390
|
top: 0;
|
|
360
391
|
box-sizing: border-box;
|
|
361
392
|
display: flex;
|
|
362
|
-
align-items: center;
|
|
363
393
|
overflow: hidden;
|
|
364
394
|
text-overflow: ellipsis;
|
|
365
395
|
white-space: nowrap;
|
|
@@ -369,6 +399,7 @@
|
|
|
369
399
|
|
|
370
400
|
/* Visual properties - :where() for zero specificity, so user highlight classes always win */
|
|
371
401
|
:where(.gp-grid-cell) {
|
|
402
|
+
align-items: center;
|
|
372
403
|
padding: 0 12px;
|
|
373
404
|
cursor: cell;
|
|
374
405
|
color: var(--gp-grid-text);
|
|
@@ -411,17 +442,20 @@
|
|
|
411
442
|
position: absolute;
|
|
412
443
|
width: 8px;
|
|
413
444
|
height: 8px;
|
|
414
|
-
background-color: var(--gp-grid-primary);
|
|
415
|
-
border: 2px solid var(--gp-grid-bg);
|
|
416
|
-
cursor: crosshair;
|
|
417
445
|
z-index: 11;
|
|
418
446
|
pointer-events: auto;
|
|
419
447
|
box-sizing: border-box;
|
|
420
|
-
border-radius: 1px;
|
|
421
448
|
touch-action: none;
|
|
422
449
|
}
|
|
423
450
|
|
|
424
|
-
.gp-grid-fill-handle
|
|
451
|
+
:where(.gp-grid-fill-handle) {
|
|
452
|
+
background-color: var(--gp-grid-primary);
|
|
453
|
+
border: 2px solid var(--gp-grid-bg);
|
|
454
|
+
cursor: crosshair;
|
|
455
|
+
border-radius: 1px;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
:where(.gp-grid-fill-handle:hover) {
|
|
425
459
|
transform: scale(1.2);
|
|
426
460
|
}
|
|
427
461
|
|
|
@@ -429,13 +463,15 @@
|
|
|
429
463
|
.gp-grid-fill-handle {
|
|
430
464
|
width: 24px;
|
|
431
465
|
height: 24px;
|
|
466
|
+
}
|
|
467
|
+
:where(.gp-grid-fill-handle) {
|
|
432
468
|
border-width: 3px;
|
|
433
469
|
border-radius: 3px;
|
|
434
470
|
}
|
|
435
471
|
}
|
|
436
472
|
|
|
437
473
|
/* Fill preview (cells being filled) */
|
|
438
|
-
.gp-grid-cell.gp-grid-cell--fill-preview {
|
|
474
|
+
:where(.gp-grid-cell.gp-grid-cell--fill-preview) {
|
|
439
475
|
background-color: var(--gp-grid-primary-light);
|
|
440
476
|
border: 1px dashed var(--gp-grid-primary);
|
|
441
477
|
}
|
|
@@ -447,6 +483,9 @@
|
|
|
447
483
|
.gp-grid-edit-input {
|
|
448
484
|
width: 100%;
|
|
449
485
|
height: 100%;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
:where(.gp-grid-edit-input) {
|
|
450
489
|
padding: 0 11px;
|
|
451
490
|
font-family: inherit;
|
|
452
491
|
font-size: inherit;
|
|
@@ -459,6 +498,38 @@
|
|
|
459
498
|
outline: none;
|
|
460
499
|
}
|
|
461
500
|
|
|
501
|
+
/* =============================================================================
|
|
502
|
+
Cell Peek (read-only multi-line overlay on dblclick of non-editable cell)
|
|
503
|
+
============================================================================= */
|
|
504
|
+
|
|
505
|
+
/* Structural: positioned absolutely by the framework wrapper; must sit above
|
|
506
|
+
selection (z:5), editing (z:10), fill handle (z:11). */
|
|
507
|
+
.gp-grid-cell-peek {
|
|
508
|
+
position: absolute;
|
|
509
|
+
z-index: 20;
|
|
510
|
+
box-sizing: border-box;
|
|
511
|
+
overflow: auto;
|
|
512
|
+
max-height: 320px;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
:where(.gp-grid-cell-peek) {
|
|
516
|
+
padding: 8px 11px;
|
|
517
|
+
background-color: var(--gp-grid-bg);
|
|
518
|
+
color: var(--gp-grid-text);
|
|
519
|
+
border: 2px solid var(--gp-grid-primary);
|
|
520
|
+
border-radius: 3px;
|
|
521
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
522
|
+
font-family: inherit;
|
|
523
|
+
font-size: inherit;
|
|
524
|
+
line-height: 1.4;
|
|
525
|
+
white-space: pre-wrap;
|
|
526
|
+
overflow-wrap: anywhere;
|
|
527
|
+
cursor: text;
|
|
528
|
+
user-select: text;
|
|
529
|
+
-webkit-user-select: text;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
|
|
462
533
|
|
|
463
534
|
/* =============================================================================
|
|
464
535
|
Loading & Error States
|
|
@@ -481,12 +552,15 @@
|
|
|
481
552
|
top: 0;
|
|
482
553
|
left: 0;
|
|
483
554
|
width: 100%;
|
|
484
|
-
height: 100%;
|
|
555
|
+
height: 100%;
|
|
485
556
|
pointer-events: none;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
:where(.gp-grid-loading-overlay) {
|
|
486
560
|
background-color: var(--gp-grid-loading-overlay-bg, rgba(255, 255, 255, 0.4));
|
|
487
561
|
}
|
|
488
562
|
|
|
489
|
-
.gp-grid-container--dark .gp-grid-loading-overlay {
|
|
563
|
+
:where(.gp-grid-container--dark .gp-grid-loading-overlay) {
|
|
490
564
|
background-color: var(--gp-grid-loading-overlay-bg, rgba(0, 0, 0, 0.3));
|
|
491
565
|
}
|
|
492
566
|
|
|
@@ -496,6 +570,13 @@
|
|
|
496
570
|
top: 50%;
|
|
497
571
|
left: 50%;
|
|
498
572
|
transform: translate(-50%, -50%);
|
|
573
|
+
z-index: 1000;
|
|
574
|
+
display: flex;
|
|
575
|
+
pointer-events: auto;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
:where(.gp-grid-loading) {
|
|
579
|
+
align-items: center;
|
|
499
580
|
padding: 12px 20px;
|
|
500
581
|
background-color: var(--gp-grid-loading-bg);
|
|
501
582
|
color: var(--gp-grid-loading-text);
|
|
@@ -503,20 +584,19 @@
|
|
|
503
584
|
border: 1px solid var(--gp-grid-border);
|
|
504
585
|
font-weight: 500;
|
|
505
586
|
font-size: 13px;
|
|
506
|
-
z-index: 1000;
|
|
507
|
-
display: flex;
|
|
508
|
-
align-items: center;
|
|
509
587
|
gap: 10px;
|
|
510
|
-
pointer-events: auto;
|
|
511
588
|
}
|
|
512
589
|
|
|
513
590
|
.gp-grid-loading-spinner {
|
|
514
591
|
width: 16px;
|
|
515
592
|
height: 16px;
|
|
593
|
+
animation: gp-grid-spin 0.7s linear infinite;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
:where(.gp-grid-loading-spinner) {
|
|
516
597
|
border: 2px solid var(--gp-grid-border);
|
|
517
598
|
border-top-color: var(--gp-grid-primary);
|
|
518
599
|
border-radius: 50%;
|
|
519
|
-
animation: gp-grid-spin 0.7s linear infinite;
|
|
520
600
|
}
|
|
521
601
|
|
|
522
602
|
@keyframes gp-grid-spin {
|
|
@@ -530,6 +610,12 @@
|
|
|
530
610
|
top: 50%;
|
|
531
611
|
left: 50%;
|
|
532
612
|
transform: translate(-50%, -50%);
|
|
613
|
+
z-index: 1000;
|
|
614
|
+
user-select: text;
|
|
615
|
+
-webkit-user-select: text;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
:where(.gp-grid-error) {
|
|
533
619
|
padding: 12px 20px;
|
|
534
620
|
background-color: var(--gp-grid-error-bg);
|
|
535
621
|
color: var(--gp-grid-error-text);
|
|
@@ -537,11 +623,8 @@
|
|
|
537
623
|
border: 1px solid var(--gp-grid-error-text);
|
|
538
624
|
font-weight: 500;
|
|
539
625
|
font-size: 13px;
|
|
540
|
-
z-index: 1000;
|
|
541
626
|
max-width: 80%;
|
|
542
627
|
text-align: center;
|
|
543
|
-
user-select: text;
|
|
544
|
-
-webkit-user-select: text;
|
|
545
628
|
cursor: text;
|
|
546
629
|
}
|
|
547
630
|
|
|
@@ -554,6 +637,9 @@
|
|
|
554
637
|
top: 50%;
|
|
555
638
|
left: 50%;
|
|
556
639
|
transform: translate(-50%, -50%);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
:where(.gp-grid-empty) {
|
|
557
643
|
color: var(--gp-grid-text-muted);
|
|
558
644
|
font-size: 14px;
|
|
559
645
|
text-align: center;
|
|
@@ -569,20 +655,20 @@
|
|
|
569
655
|
height: 8px;
|
|
570
656
|
}
|
|
571
657
|
|
|
572
|
-
.gp-grid-container::-webkit-scrollbar-track {
|
|
658
|
+
:where(.gp-grid-container)::-webkit-scrollbar-track {
|
|
573
659
|
background-color: var(--gp-grid-scrollbar-track);
|
|
574
660
|
}
|
|
575
661
|
|
|
576
|
-
.gp-grid-container::-webkit-scrollbar-thumb {
|
|
662
|
+
:where(.gp-grid-container)::-webkit-scrollbar-thumb {
|
|
577
663
|
background-color: var(--gp-grid-scrollbar-thumb);
|
|
578
664
|
border-radius: 4px;
|
|
579
665
|
}
|
|
580
666
|
|
|
581
|
-
.gp-grid-container::-webkit-scrollbar-thumb:hover {
|
|
667
|
+
:where(.gp-grid-container)::-webkit-scrollbar-thumb:hover {
|
|
582
668
|
background-color: var(--gp-grid-scrollbar-thumb-hover);
|
|
583
669
|
}
|
|
584
670
|
|
|
585
|
-
.gp-grid-container::-webkit-scrollbar-corner {
|
|
671
|
+
:where(.gp-grid-container)::-webkit-scrollbar-corner {
|
|
586
672
|
background-color: var(--gp-grid-scrollbar-track);
|
|
587
673
|
}
|
|
588
674
|
|
|
@@ -592,17 +678,21 @@
|
|
|
592
678
|
============================================================================= */
|
|
593
679
|
|
|
594
680
|
.gp-grid-filter-popup {
|
|
681
|
+
max-height: 400px;
|
|
682
|
+
max-width: min(360px, calc(100vw - 16px));
|
|
683
|
+
display: flex;
|
|
684
|
+
flex-direction: column;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
:where(.gp-grid-filter-popup) {
|
|
595
688
|
background-color: var(--gp-grid-bg);
|
|
596
689
|
border: 1px solid var(--gp-grid-border);
|
|
597
690
|
border-radius: 6px;
|
|
598
691
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
599
|
-
max-height: 400px;
|
|
600
|
-
display: flex;
|
|
601
|
-
flex-direction: column;
|
|
602
692
|
font-size: 13px;
|
|
603
693
|
}
|
|
604
694
|
|
|
605
|
-
.gp-grid-filter-header {
|
|
695
|
+
:where(.gp-grid-filter-header) {
|
|
606
696
|
padding: 10px 12px;
|
|
607
697
|
font-weight: 600;
|
|
608
698
|
border-bottom: 1px solid var(--gp-grid-border-light);
|
|
@@ -610,17 +700,23 @@
|
|
|
610
700
|
}
|
|
611
701
|
|
|
612
702
|
.gp-grid-filter-content {
|
|
613
|
-
padding: 10px 12px;
|
|
614
703
|
display: flex;
|
|
615
704
|
flex-direction: column;
|
|
616
|
-
gap: 10px;
|
|
617
705
|
overflow-y: auto;
|
|
618
706
|
min-height: 0;
|
|
619
707
|
}
|
|
620
708
|
|
|
709
|
+
:where(.gp-grid-filter-content) {
|
|
710
|
+
padding: 10px 12px;
|
|
711
|
+
gap: 10px;
|
|
712
|
+
}
|
|
713
|
+
|
|
621
714
|
/* Mode toggle (Values / Condition) */
|
|
622
715
|
.gp-grid-filter-mode-toggle {
|
|
623
716
|
display: flex;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
:where(.gp-grid-filter-mode-toggle) {
|
|
624
720
|
gap: 4px;
|
|
625
721
|
background-color: var(--gp-grid-bg-alt);
|
|
626
722
|
border-radius: 4px;
|
|
@@ -629,6 +725,9 @@
|
|
|
629
725
|
|
|
630
726
|
.gp-grid-filter-mode-toggle button {
|
|
631
727
|
flex: 1;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
:where(.gp-grid-filter-mode-toggle button) {
|
|
632
731
|
padding: 6px 10px;
|
|
633
732
|
font-size: 11px;
|
|
634
733
|
font-family: inherit;
|
|
@@ -640,18 +739,18 @@
|
|
|
640
739
|
transition: background-color 0.15s ease, color 0.15s ease;
|
|
641
740
|
}
|
|
642
741
|
|
|
643
|
-
.gp-grid-filter-mode-toggle button:hover {
|
|
742
|
+
:where(.gp-grid-filter-mode-toggle button:hover) {
|
|
644
743
|
color: var(--gp-grid-text);
|
|
645
744
|
}
|
|
646
745
|
|
|
647
|
-
.gp-grid-filter-mode-toggle button.active {
|
|
746
|
+
:where(.gp-grid-filter-mode-toggle button.active) {
|
|
648
747
|
background-color: var(--gp-grid-bg);
|
|
649
748
|
color: var(--gp-grid-text);
|
|
650
749
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
651
750
|
}
|
|
652
751
|
|
|
653
752
|
/* Info message for too many values */
|
|
654
|
-
.gp-grid-filter-info {
|
|
753
|
+
:where(.gp-grid-filter-info) {
|
|
655
754
|
font-size: 11px;
|
|
656
755
|
color: var(--gp-grid-text-secondary);
|
|
657
756
|
padding: 6px 8px;
|
|
@@ -663,6 +762,10 @@
|
|
|
663
762
|
.gp-grid-filter-search {
|
|
664
763
|
width: 100%;
|
|
665
764
|
height: 30px;
|
|
765
|
+
box-sizing: border-box;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
:where(.gp-grid-filter-search) {
|
|
666
769
|
padding: 0 10px;
|
|
667
770
|
font-family: inherit;
|
|
668
771
|
font-size: 12px;
|
|
@@ -670,10 +773,9 @@
|
|
|
670
773
|
border-radius: 4px;
|
|
671
774
|
background-color: var(--gp-grid-input-bg);
|
|
672
775
|
color: var(--gp-grid-text);
|
|
673
|
-
box-sizing: border-box;
|
|
674
776
|
}
|
|
675
777
|
|
|
676
|
-
.gp-grid-filter-search:focus {
|
|
778
|
+
:where(.gp-grid-filter-search:focus) {
|
|
677
779
|
outline: none;
|
|
678
780
|
border-color: var(--gp-grid-primary);
|
|
679
781
|
}
|
|
@@ -681,11 +783,17 @@
|
|
|
681
783
|
/* Select All / Deselect All actions */
|
|
682
784
|
.gp-grid-filter-actions {
|
|
683
785
|
display: flex;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
:where(.gp-grid-filter-actions) {
|
|
684
789
|
gap: 8px;
|
|
685
790
|
}
|
|
686
791
|
|
|
687
792
|
.gp-grid-filter-actions button {
|
|
688
793
|
flex: 1;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
:where(.gp-grid-filter-actions button) {
|
|
689
797
|
padding: 4px 8px;
|
|
690
798
|
font-size: 11px;
|
|
691
799
|
font-family: inherit;
|
|
@@ -696,11 +804,11 @@
|
|
|
696
804
|
cursor: pointer;
|
|
697
805
|
}
|
|
698
806
|
|
|
699
|
-
.gp-grid-filter-actions button:hover:not(:disabled) {
|
|
807
|
+
:where(.gp-grid-filter-actions button:hover:not(:disabled)) {
|
|
700
808
|
background-color: var(--gp-grid-hover);
|
|
701
809
|
}
|
|
702
810
|
|
|
703
|
-
.gp-grid-filter-actions button:disabled {
|
|
811
|
+
:where(.gp-grid-filter-actions button:disabled) {
|
|
704
812
|
opacity: 0.5;
|
|
705
813
|
cursor: not-allowed;
|
|
706
814
|
}
|
|
@@ -711,6 +819,9 @@
|
|
|
711
819
|
overflow-y: auto;
|
|
712
820
|
display: flex;
|
|
713
821
|
flex-direction: column;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
:where(.gp-grid-filter-list) {
|
|
714
825
|
gap: 4px;
|
|
715
826
|
border: 1px solid var(--gp-grid-border-light);
|
|
716
827
|
border-radius: 4px;
|
|
@@ -720,18 +831,24 @@
|
|
|
720
831
|
.gp-grid-filter-option {
|
|
721
832
|
display: flex;
|
|
722
833
|
align-items: center;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
:where(.gp-grid-filter-option) {
|
|
723
837
|
gap: 8px;
|
|
724
838
|
padding: 4px 6px;
|
|
725
839
|
border-radius: 3px;
|
|
726
840
|
cursor: pointer;
|
|
727
841
|
}
|
|
728
842
|
|
|
729
|
-
.gp-grid-filter-option:hover {
|
|
843
|
+
:where(.gp-grid-filter-option:hover) {
|
|
730
844
|
background-color: var(--gp-grid-hover);
|
|
731
845
|
}
|
|
732
846
|
|
|
733
847
|
.gp-grid-filter-option input[type="checkbox"] {
|
|
734
848
|
margin: 0;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
:where(.gp-grid-filter-option input[type="checkbox"]) {
|
|
735
852
|
cursor: pointer;
|
|
736
853
|
}
|
|
737
854
|
|
|
@@ -742,7 +859,7 @@
|
|
|
742
859
|
white-space: nowrap;
|
|
743
860
|
}
|
|
744
861
|
|
|
745
|
-
.gp-grid-filter-blank {
|
|
862
|
+
:where(.gp-grid-filter-blank) {
|
|
746
863
|
font-style: italic;
|
|
747
864
|
color: var(--gp-grid-text-muted);
|
|
748
865
|
}
|
|
@@ -751,17 +868,26 @@
|
|
|
751
868
|
.gp-grid-filter-condition {
|
|
752
869
|
display: flex;
|
|
753
870
|
flex-direction: column;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
:where(.gp-grid-filter-condition) {
|
|
754
874
|
gap: 6px;
|
|
755
875
|
}
|
|
756
876
|
|
|
757
877
|
.gp-grid-filter-row {
|
|
758
878
|
display: flex;
|
|
759
879
|
align-items: center;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
:where(.gp-grid-filter-row) {
|
|
760
883
|
gap: 6px;
|
|
761
884
|
}
|
|
762
885
|
|
|
763
886
|
.gp-grid-filter-row select {
|
|
764
887
|
height: 30px;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
:where(.gp-grid-filter-row select) {
|
|
765
891
|
padding: 0 6px;
|
|
766
892
|
font-family: inherit;
|
|
767
893
|
font-size: 12px;
|
|
@@ -778,6 +904,14 @@
|
|
|
778
904
|
.gp-grid-filter-text-input {
|
|
779
905
|
flex: 1;
|
|
780
906
|
height: 30px;
|
|
907
|
+
min-width: 0;
|
|
908
|
+
box-sizing: border-box;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
:where(.gp-grid-filter-row input[type="number"]),
|
|
912
|
+
:where(.gp-grid-filter-row input[type="date"]),
|
|
913
|
+
:where(.gp-grid-filter-row input[type="text"]),
|
|
914
|
+
:where(.gp-grid-filter-text-input) {
|
|
781
915
|
padding: 0 8px;
|
|
782
916
|
font-family: inherit;
|
|
783
917
|
font-size: 12px;
|
|
@@ -785,16 +919,14 @@
|
|
|
785
919
|
border-radius: 4px;
|
|
786
920
|
background-color: var(--gp-grid-input-bg);
|
|
787
921
|
color: var(--gp-grid-text);
|
|
788
|
-
min-width: 0;
|
|
789
|
-
box-sizing: border-box;
|
|
790
922
|
}
|
|
791
923
|
|
|
792
|
-
.gp-grid-filter-row input:focus {
|
|
924
|
+
:where(.gp-grid-filter-row input:focus) {
|
|
793
925
|
outline: none;
|
|
794
926
|
border-color: var(--gp-grid-primary);
|
|
795
927
|
}
|
|
796
928
|
|
|
797
|
-
.gp-grid-filter-to {
|
|
929
|
+
:where(.gp-grid-filter-to) {
|
|
798
930
|
font-size: 11px;
|
|
799
931
|
color: var(--gp-grid-text-secondary);
|
|
800
932
|
}
|
|
@@ -802,6 +934,9 @@
|
|
|
802
934
|
.gp-grid-filter-remove {
|
|
803
935
|
width: 24px;
|
|
804
936
|
height: 24px;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
:where(.gp-grid-filter-remove) {
|
|
805
940
|
padding: 0;
|
|
806
941
|
font-size: 16px;
|
|
807
942
|
line-height: 1;
|
|
@@ -812,7 +947,7 @@
|
|
|
812
947
|
cursor: pointer;
|
|
813
948
|
}
|
|
814
949
|
|
|
815
|
-
.gp-grid-filter-remove:hover {
|
|
950
|
+
:where(.gp-grid-filter-remove:hover) {
|
|
816
951
|
background-color: var(--gp-grid-error-bg);
|
|
817
952
|
color: var(--gp-grid-error-text);
|
|
818
953
|
}
|
|
@@ -820,12 +955,18 @@
|
|
|
820
955
|
/* AND/OR combination toggle */
|
|
821
956
|
.gp-grid-filter-combination {
|
|
822
957
|
display: flex;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
:where(.gp-grid-filter-combination) {
|
|
823
961
|
gap: 4px;
|
|
824
962
|
margin-bottom: 4px;
|
|
825
963
|
}
|
|
826
964
|
|
|
827
965
|
.gp-grid-filter-combination button {
|
|
828
966
|
flex: 1;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
:where(.gp-grid-filter-combination button) {
|
|
829
970
|
padding: 4px 8px;
|
|
830
971
|
font-size: 10px;
|
|
831
972
|
font-family: inherit;
|
|
@@ -836,7 +977,7 @@
|
|
|
836
977
|
cursor: pointer;
|
|
837
978
|
}
|
|
838
979
|
|
|
839
|
-
.gp-grid-filter-combination button.active {
|
|
980
|
+
:where(.gp-grid-filter-combination button.active) {
|
|
840
981
|
background-color: var(--gp-grid-primary);
|
|
841
982
|
border-color: var(--gp-grid-primary);
|
|
842
983
|
color: #fff;
|
|
@@ -845,6 +986,9 @@
|
|
|
845
986
|
/* Add condition button */
|
|
846
987
|
.gp-grid-filter-add {
|
|
847
988
|
width: 100%;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
:where(.gp-grid-filter-add) {
|
|
848
992
|
padding: 6px;
|
|
849
993
|
font-size: 11px;
|
|
850
994
|
font-family: inherit;
|
|
@@ -855,7 +999,7 @@
|
|
|
855
999
|
cursor: pointer;
|
|
856
1000
|
}
|
|
857
1001
|
|
|
858
|
-
.gp-grid-filter-add:hover {
|
|
1002
|
+
:where(.gp-grid-filter-add:hover) {
|
|
859
1003
|
background-color: var(--gp-grid-hover);
|
|
860
1004
|
border-color: var(--gp-grid-primary);
|
|
861
1005
|
color: var(--gp-grid-primary);
|
|
@@ -864,6 +1008,9 @@
|
|
|
864
1008
|
/* Apply / Clear buttons */
|
|
865
1009
|
.gp-grid-filter-buttons {
|
|
866
1010
|
display: flex;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
:where(.gp-grid-filter-buttons) {
|
|
867
1014
|
gap: 8px;
|
|
868
1015
|
padding-top: 8px;
|
|
869
1016
|
border-top: 1px solid var(--gp-grid-border-light);
|
|
@@ -872,6 +1019,10 @@
|
|
|
872
1019
|
.gp-grid-filter-btn-clear,
|
|
873
1020
|
.gp-grid-filter-btn-apply {
|
|
874
1021
|
flex: 1;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
:where(.gp-grid-filter-btn-clear),
|
|
1025
|
+
:where(.gp-grid-filter-btn-apply) {
|
|
875
1026
|
padding: 8px 12px;
|
|
876
1027
|
font-size: 12px;
|
|
877
1028
|
font-family: inherit;
|
|
@@ -879,23 +1030,23 @@
|
|
|
879
1030
|
cursor: pointer;
|
|
880
1031
|
}
|
|
881
1032
|
|
|
882
|
-
.gp-grid-filter-btn-clear {
|
|
1033
|
+
:where(.gp-grid-filter-btn-clear) {
|
|
883
1034
|
border: 1px solid var(--gp-grid-input-border);
|
|
884
1035
|
background-color: var(--gp-grid-bg);
|
|
885
1036
|
color: var(--gp-grid-text);
|
|
886
1037
|
}
|
|
887
1038
|
|
|
888
|
-
.gp-grid-filter-btn-clear:hover {
|
|
1039
|
+
:where(.gp-grid-filter-btn-clear:hover) {
|
|
889
1040
|
background-color: var(--gp-grid-hover);
|
|
890
1041
|
}
|
|
891
1042
|
|
|
892
|
-
.gp-grid-filter-btn-apply {
|
|
1043
|
+
:where(.gp-grid-filter-btn-apply) {
|
|
893
1044
|
border: 1px solid var(--gp-grid-primary);
|
|
894
1045
|
background-color: var(--gp-grid-primary);
|
|
895
1046
|
color: #fff;
|
|
896
1047
|
}
|
|
897
1048
|
|
|
898
|
-
.gp-grid-filter-btn-apply:hover {
|
|
1049
|
+
:where(.gp-grid-filter-btn-apply:hover) {
|
|
899
1050
|
opacity: 0.9;
|
|
900
1051
|
}
|
|
901
1052
|
|
|
@@ -905,11 +1056,14 @@
|
|
|
905
1056
|
============================================================================= */
|
|
906
1057
|
|
|
907
1058
|
.gp-grid-cell--row-drag-handle {
|
|
908
|
-
cursor: grab;
|
|
909
1059
|
touch-action: none;
|
|
910
1060
|
}
|
|
911
1061
|
|
|
912
|
-
.gp-grid-cell--row-drag-handle
|
|
1062
|
+
:where(.gp-grid-cell--row-drag-handle) {
|
|
1063
|
+
cursor: grab;
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
:where(.gp-grid-cell--row-drag-handle:active) {
|
|
913
1067
|
cursor: grabbing;
|
|
914
1068
|
}
|
|
915
1069
|
|
|
@@ -919,6 +1073,9 @@
|
|
|
919
1073
|
justify-content: center;
|
|
920
1074
|
width: 100%;
|
|
921
1075
|
height: 100%;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
:where(.gp-grid-row-drag-icon) {
|
|
922
1079
|
color: var(--gp-grid-text-secondary);
|
|
923
1080
|
}
|
|
924
1081
|
|
|
@@ -930,14 +1087,17 @@
|
|
|
930
1087
|
.gp-grid-row-drag-ghost {
|
|
931
1088
|
position: fixed;
|
|
932
1089
|
pointer-events: none;
|
|
933
|
-
opacity: 0.8;
|
|
934
1090
|
z-index: 2000;
|
|
1091
|
+
overflow: hidden;
|
|
1092
|
+
box-sizing: border-box;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
:where(.gp-grid-row-drag-ghost) {
|
|
1096
|
+
opacity: 0.8;
|
|
935
1097
|
background-color: var(--gp-grid-bg, #fff);
|
|
936
1098
|
border: 2px solid var(--gp-grid-primary);
|
|
937
1099
|
border-radius: 4px;
|
|
938
1100
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
939
|
-
overflow: hidden;
|
|
940
|
-
box-sizing: border-box;
|
|
941
1101
|
}
|
|
942
1102
|
|
|
943
1103
|
.gp-grid-row-drop-indicator {
|
|
@@ -945,8 +1105,11 @@
|
|
|
945
1105
|
left: 0;
|
|
946
1106
|
width: 100%;
|
|
947
1107
|
height: 3px;
|
|
948
|
-
background-color: var(--gp-grid-primary);
|
|
949
1108
|
z-index: 1000;
|
|
950
1109
|
pointer-events: none;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
:where(.gp-grid-row-drop-indicator) {
|
|
1113
|
+
background-color: var(--gp-grid-primary);
|
|
951
1114
|
border-radius: 2px;
|
|
952
1115
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gp-grid/vue",
|
|
3
3
|
"description": "A high-performance Vue 3 data grid component with virtual scrolling, cell selection, sorting, filtering, and Excel-like editing",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.17.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"nuxt3"
|
|
51
51
|
],
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@gp-grid/core": "0.
|
|
53
|
+
"@gp-grid/core": "0.17.0"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"vue": "^3.4.0"
|