@gp-grid/vue 0.20.0 → 0.21.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/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Component, ComputedRef, Ref, ShallowRef, VNode } from "vue";
2
- import { CellDataType, CellPosition, CellPosition as CellPosition$1, CellRange, CellRange as CellRange$1, CellRendererParams, CellRendererParams as CellRendererParams$1, CellValue, CellValue as CellValue$1, CellValueChangedEvent, CellValueChangedEvent as CellValueChangedEvent$1, ColumnDefinition as ColumnDefinition$1, ColumnFilterModel, ColumnFilterModel as ColumnFilterModel$1, ContainerBounds, DataSource, DataSource as DataSource$1, DataSourceLoadMode, DataSourceRange, DataSourceRequest, DataSourceResponse, DateFilterCondition, DragState, DragState as DragState$1, EditRendererParams, EditRendererParams as EditRendererParams$1, FillHandlePosition, FilterCondition, FilterModel, FilterPopupState, GridCore, GridCore as GridCore$1, GridInstruction, GridInstruction as GridInstruction$1, GridState, GridState as GridState$1, HeaderData, HeaderRendererParams, HeaderRendererParams as HeaderRendererParams$1, HighlightingOptions, KeyEventData, MutableDataSource, MutableDataSource as MutableDataSource$1, NumberFilterCondition, ParallelSortOptions, PointerEventData, RowCacheEviction, RowCacheOptions, RowId, RowId as RowId$1, RowLoadingMode, RowLoadingOptions, RowLoadingOptions as RowLoadingOptions$1, SelectionState, SlotData, SlotData as SlotData$1, SortDirection, SortDirection as SortDirection$1, SortModel, TextFilterCondition, VisibleColumnInfo, buildCellClasses, buildCellClasses as buildCellClasses$1, calculateColumnPositions, createClientDataSource, createDataSourceFromArray, createInitialState, createMutableClientDataSource, createServerDataSource, findColumnAtX, getFieldValue as getCellValue, getTotalWidth, gridStyles, isCellActive, isCellActive as isCellActive$1, isCellEditing, isCellEditing as isCellEditing$1, isCellInFillPreview, isCellInFillPreview as isCellInFillPreview$1, isCellSelected, isCellSelected as isCellSelected$1, isRowVisible } from "@gp-grid/core";
2
+ import { CellDataType, CellPosition, CellPosition as CellPosition$1, CellRange, CellRange as CellRange$1, CellRendererParams, CellRendererParams as CellRendererParams$1, CellValue, CellValue as CellValue$1, CellValueChangedEvent, CellValueChangedEvent as CellValueChangedEvent$1, ColumnDefinition as ColumnDefinition$1, ColumnFilterModel, ColumnFilterModel as ColumnFilterModel$1, ContainerBounds, DataSource, DataSource as DataSource$1, DataSourceLoadMode, DataSourceRange, DataSourceRequest, DataSourceResponse, DateFilterCondition, DragState, DragState as DragState$1, EditRendererParams, EditRendererParams as EditRendererParams$1, FillHandlePosition, FilterCondition, FilterModel, FilterPopupState, GridCore, GridCore as GridCore$1, GridFilterOperatorLabels, GridInstruction, GridInstruction as GridInstruction$1, GridLabels, GridLabels as GridLabels$1, GridState, GridState as GridState$1, HeaderData, HeaderRendererParams, HeaderRendererParams as HeaderRendererParams$1, HighlightingOptions, KeyEventData, MutableDataSource, MutableDataSource as MutableDataSource$1, NumberFilterCondition, ParallelSortOptions, PointerEventData, RowCacheEviction, RowCacheOptions, RowId, RowId as RowId$1, RowLoadingMode, RowLoadingOptions, RowLoadingOptions as RowLoadingOptions$1, SelectionState, SlotData, SlotData as SlotData$1, SortDirection, SortDirection as SortDirection$1, SortModel, TextFilterCondition, VisibleColumnInfo, buildCellClasses, buildCellClasses as buildCellClasses$1, calculateColumnPositions, createClientDataSource, createDataSourceFromArray, createInitialState, createMutableClientDataSource, createServerDataSource, findColumnAtX, getFieldValue as getCellValue, getTotalWidth, gridStyles, isCellActive, isCellActive as isCellActive$1, isCellEditing, isCellEditing as isCellEditing$1, isCellInFillPreview, isCellInFillPreview as isCellInFillPreview$1, isCellSelected, isCellSelected as isCellSelected$1, isRowVisible } from "@gp-grid/core";
3
3
  //#region src/types.d.ts
4
4
  /** Row data alias — core's generic defaults to `unknown`, this preserves the name. */
5
5
  type Row = unknown;
@@ -55,6 +55,8 @@ interface GpGridProps<TData = unknown> {
55
55
  loadingComponent?: Component<{
56
56
  isLoading: boolean;
57
57
  }>;
58
+ /** Override any user-visible grid label. Unspecified labels fall back to English defaults. */
59
+ labels?: Partial<GridLabels$1>;
58
60
  }
59
61
  //#endregion
60
62
  //#region src/GpGrid.vue.d.ts
@@ -99,6 +101,8 @@ type __VLS_Props = {
99
101
  onColumnResized?: (colIndex: number, newWidth: number) => void;
100
102
  /** Called when a column is moved/reordered. */
101
103
  onColumnMoved?: (fromIndex: number, toIndex: number) => void;
104
+ /** Override any user-visible grid label. Unspecified labels fall back to English defaults. */
105
+ labels?: Partial<GridLabels$1>;
102
106
  };
103
107
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
104
108
  core: import("vue").ShallowRef<GridCore$1<unknown> | null, GridCore$1<unknown> | null>;
@@ -395,4 +399,4 @@ interface RenderHeaderOptions {
395
399
  */
396
400
  declare function renderHeader(options: RenderHeaderOptions): VNode;
397
401
  //#endregion
398
- export { type CellDataType, type CellPosition, type CellRange, type CellRendererParams, type CellValue, type CellValueChangedEvent, type ColumnDefinition, type ColumnFilterModel, type ContainerBounds, type DataSource, type DataSourceLoadMode, type DataSourceRange, type DataSourceRequest, type DataSourceResponse, type DateFilterCondition, type DragState, type EditRendererParams, type FilterCondition, type FilterModel, type FilterPopupState, _default as GpGrid, _default as default, type GpGridProps, GridCore, type GridInstruction, type GridState, type HeaderData, type HeaderRendererParams, type KeyEventData, type LocalFilterCondition, type MutableDataSource, type NumberFilterCondition, type PointerEventData, type RowCacheEviction, type RowCacheOptions, type RowId, type RowLoadingMode, type RowLoadingOptions, type SelectionState, type SlotData, type SortDirection, type SortModel, type TextFilterCondition, type UseFillHandleOptions, type UseFillHandleResult, type UseFilterConditionsResult, type UseFilterPopupOptions, type UseGpGridOptions, type UseGpGridResult, type UseGridDataOptions, type UseGridDataResult, type UseInputHandlerOptions, type UseInputHandlerResult, type VueCellRenderer, type VueEditRenderer, type VueHeaderRenderer, buildCellClasses, calculateColumnPositions, createClientDataSource, createDataSourceFromArray, createInitialState, createMutableClientDataSource, createServerDataSource, findColumnAtX, getCellValue, getTotalWidth, gridStyles, isCellActive, isCellEditing, isCellInFillPreview, isCellSelected, isRowVisible, renderCell, renderEditCell, renderHeader, useAutoScroll, useFillHandle, useFilterConditions, useFilterPopup, useGpGrid, useGridData, useGridState, useInputHandler };
402
+ export { type CellDataType, type CellPosition, type CellRange, type CellRendererParams, type CellValue, type CellValueChangedEvent, type ColumnDefinition, type ColumnFilterModel, type ContainerBounds, type DataSource, type DataSourceLoadMode, type DataSourceRange, type DataSourceRequest, type DataSourceResponse, type DateFilterCondition, type DragState, type EditRendererParams, type FilterCondition, type FilterModel, type FilterPopupState, _default as GpGrid, _default as default, type GpGridProps, GridCore, type GridFilterOperatorLabels, type GridInstruction, type GridLabels, type GridState, type HeaderData, type HeaderRendererParams, type KeyEventData, type LocalFilterCondition, type MutableDataSource, type NumberFilterCondition, type PointerEventData, type RowCacheEviction, type RowCacheOptions, type RowId, type RowLoadingMode, type RowLoadingOptions, type SelectionState, type SlotData, type SortDirection, type SortModel, type TextFilterCondition, type UseFillHandleOptions, type UseFillHandleResult, type UseFilterConditionsResult, type UseFilterPopupOptions, type UseGpGridOptions, type UseGpGridResult, type UseGridDataOptions, type UseGridDataResult, type UseInputHandlerOptions, type UseInputHandlerResult, type VueCellRenderer, type VueEditRenderer, type VueHeaderRenderer, buildCellClasses, calculateColumnPositions, createClientDataSource, createDataSourceFromArray, createInitialState, createMutableClientDataSource, createServerDataSource, findColumnAtX, getCellValue, getTotalWidth, gridStyles, isCellActive, isCellEditing, isCellInFillPreview, isCellSelected, isRowVisible, renderCell, renderEditCell, renderHeader, useAutoScroll, useFillHandle, useFilterConditions, useFilterPopup, useGpGrid, useGridData, useGridState, useInputHandler };
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,PendingCellTapController as O,ROW_DRAG_HOLD_MS as k,TAP_SLOP_PX as A,TouchScrollController as j,applyInstruction as M,bindPeekSelectAll as N,buildCellClasses as P,buildCellClasses as F,calculateColumnPositions as I,calculateFillHandlePosition as L,calculateFilterPopupPosition as R,calculateScaledColumnPositions as z,createClientDataSource as B,createClientDataSource as V,createDataSourceFromArray as H,createDataSourceFromArray as U,createInitialState as W,createInitialState as G,createMutableClientDataSource as ee,createMutableClientDataSource as te,createServerDataSource as ne,findColumnAtX as re,formatCellValue as ie,getFieldValue as ae,getFieldValue as K,getTotalWidth as oe,getTotalWidth as se,gridStyles as q,groupDistinctValues as ce,isBlankCellValue as le,isCellActive as ue,isCellActive as J,isCellEditing as de,isCellEditing as Y,isCellInFillPreview as X,isCellInFillPreview as fe,isCellSelected as pe,isCellSelected as Z,isRowVisible as me,labelsForSelectedValues as he,rawValuesForLabels as ge,scrollCellIntoView as _e}from"@gp-grid/core";function ve(e){let t=v(G(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=M(t,r,i);e&&Object.assign(a,e)}a.slots=r,a.headers=i,t.value={...n,...a}},reset:()=>{t.value=G()}}}function ye(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 be(e,t,n,r){let{activeCell:i,selectionRange:a,editingCell:o,filterPopupOpen:s,rowHeight:c,headerHeight:l,columnPositions:u,columnWidths:d,visibleColumnsWithIndices:f,slots:m,rowsWrapperOffset:g}=r,_=h({isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null}),v=null,y=null,b=null,x=null,C=null,w=e=>{e.preventDefault()},T=new O({getCore:()=>e.value,isBrowser:typeof window<`u`,onTapConfirmed:()=>t.value?.focus()}),{startAutoScroll:E,stopAutoScroll:D}=ye(t,()=>{let t=e.value;if(v&&t?.input){let e=j();e&&(t.input.handleDragMove(v,e),_.value=t.input.getDragState())}});S([()=>l,()=>c,u,f],()=>{let t=e.value;if(t?.input){let e=f.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 j(){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 M(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 N(){y?.();let n=t=>{t.preventDefault();let n=e.value,r=j();if(!n?.input||!r)return;let i=M(t);v=i;let a=n.input.handleDragMove(i,r);a&&(a.autoScroll?E(a.autoScroll.dx,a.autoScroll.dy):D(),_.value=n.input.getDragState())},r=()=>{try{let t=e.value;t?.input&&t.input.handleDragEnd()}finally{let i=e.value,a=i?.input?i.input.getDragState():{isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null};_.value=a,v=null,D(),document.removeEventListener(`touchmove`,w),C!==null&&t.value&&(t.value.style.overflow=C,C=null),document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r),y=null}};document.addEventListener(`pointermove`,n,{passive:!1}),document.addEventListener(`pointerup`,r),document.addEventListener(`pointercancel`,r),y=()=>{document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r)}}function P(){b!==null&&(clearTimeout(b),b=null,e.value?.input?.cancelPendingRowDrag()),x=null}function F(n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleCellMouseDown(n,r,M(i));if(o.focusContainer&&t.value?.focus(),o.startTap&&T.start(i),o.startDrag===`selection`)a.input.startSelectionDrag(),_.value=a.input.getDragState(),N();else if(o.startDrag===`row-drag`)_.value=a.input.getDragState(),N();else if(o.startDrag===`row-drag-pending`){P(),x={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)>A||Math.abs(i)>A)&&(P(),s())},o=()=>{P(),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}),b=setTimeout(()=>{b=null,s();let e=x;if(x=null,a.input.confirmPendingRowDrag()){if(t.value&&(C=t.value.style.overflow,t.value.style.overflow=`hidden`),document.addEventListener(`touchmove`,w,{passive:!1}),e)try{e.target.setPointerCapture(e.pointerId)}catch{}_.value=a.input.getDragState(),N()}},k)}}function I(t,n){let r=e.value;r?.input&&r.input.handleCellDoubleClick(t,n)}function L(t){let n=e.value;if(!n?.input)return;let r=n.input.handleFillHandleMouseDown(i.value,a.value,M(t));if(r.preventDefault&&t.preventDefault(),r.stopPropagation&&t.stopPropagation(),r.startDrag===`fill`){try{t.target.setPointerCapture(t.pointerId)}catch{}_.value=n.input.getDragState(),N()}}function R(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 z(t,n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleHeaderMouseDown(t,n,r,M(i));if(o.preventDefault&&i.preventDefault(),o.stopPropagation&&i.stopPropagation(),o.startDrag===`column-move`){try{i.target.setPointerCapture(i.pointerId)}catch{}_.value=a.input.getDragState(),N()}}function B(t,n,r){let i=e.value;if(!i?.input)return;let a=i.input.handleHeaderResizeMouseDown(t,n,M(r));a.preventDefault&&r.preventDefault(),a.stopPropagation&&r.stopPropagation(),a.startDrag===`column-resize`&&(_.value=i.input.getDragState(),N())}function V(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&&_e(r,a,l.scrollToCell.row,c,m.value,g.value,{colIndex:l.scrollToCell.col,visibleColumns:f.value,columnPositions:u.value,columnWidths:d.value})}function H(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 U(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(()=>{y?.(),y=null,P(),T.cancel(),D(),document.removeEventListener(`touchmove`,w),C!==null&&t.value&&(t.value.style.overflow=C,C=null)}),{handleCellMouseDown:F,handleCellDoubleClick:I,handleFillHandleMouseDown:L,handleHeaderClick:R,handleHeaderMouseDown:z,handleHeaderResizeMouseDown:B,handleKeyDown:V,handlePaste:H,handleWheel:U,dragState:_}}const xe=e=>{let{activeCell:n,selectionRange:r,slots:i,columns:a,visibleColumnsWithIndices:o,columnPositions:s,columnWidths:c,rowHeight:l}=e;return{fillHandlePosition:t(()=>L({activeCell:n.value,selectionRange:r.value,slots:i.value,columns:a.value,visibleColumnsWithIndices:o.value,columnPositions:s.value,columnWidths:c.value,rowHeight:l}))}};function Se(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 Ce={class:`gp-grid-filter-content gp-grid-filter-text`},we={key:0,class:`gp-grid-filter-mode-toggle`},Te={key:1,class:`gp-grid-filter-info`},Ee={class:`gp-grid-filter-actions`},De=[`disabled`],Oe={class:`gp-grid-filter-list`},ke={key:0,class:`gp-grid-filter-option`},Ae=[`checked`],je=[`checked`,`onChange`],Me={key:0,class:`gp-grid-filter-combination`},Ne=[`onClick`],Pe=[`onClick`],Fe={class:`gp-grid-filter-row`},Ie=[`value`,`autofocus`,`onChange`],Le=[`value`],Re=[`value`,`onInput`],ze=[`onClick`],Be=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,d=t(()=>ce(c.distinctValues,c.valueFormatter)),f=t(()=>d.value.length>100),p=h(t(()=>{if(!c.currentFilter?.conditions[0])return f.value?`condition`:`values`;let e=c.currentFilter.conditions[0];return e.selectedValues&&e.selectedValues.size>0?`values`:`condition`}).value),_=t(()=>{if(!c.currentFilter?.conditions[0])return new Set;let e=c.currentFilter.conditions[0];return e.selectedValues?he(d.value,e.selectedValues):new Set}),v=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].includeBlank??!0:!0),S=h(``),C=h(new Set(_.value)),T=h(v.value),{conditions:E,combination:D,updateCondition:O,addCondition:k,removeCondition:A}=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`),j=t(()=>{if(!S.value)return d.value;let e=S.value.toLowerCase();return d.value.filter(t=>t.label.toLowerCase().includes(e))}),M=t(()=>c.distinctValues.some(le)),N=t(()=>j.value.every(e=>C.value.has(e.label))&&(!M.value||T.value));function P(){C.value=new Set(j.value.map(e=>e.label)),M.value&&(T.value=!0)}function F(){C.value=new Set,T.value=!1}function I(e){let t=new Set(C.value);t.has(e)?t.delete(e):t.add(e),C.value=t}function L(){if(p.value===`values`){if(d.value.every(e=>C.value.has(e.label))&&(!M.value||T.value)){l(`apply`,null);return}let e={conditions:[{type:`text`,operator:`equals`,selectedValues:ge(d.value,C.value),includeBlank:T.value}],combination:`and`};l(`apply`,e)}else{let e=E.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`||e.value.trim()!==``);if(e.length===0){l(`apply`,null);return}let t={conditions:e.map(e=>({type:`text`,operator:e.operator,value:e.value,nextOperator:e.nextOperator})),combination:`and`};l(`apply`,t)}}function R(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Ce,[r(` Mode toggle - only show if not too many values `),f.value?r(`v-if`,!0):(m(),i(`div`,we,[a(`button`,{type:`button`,class:u({active:p.value===`values`}),onClick:n[0]||=e=>p.value=`values`},` Values `,2),a(`button`,{type:`button`,class:u({active:p.value===`condition`}),onClick:n[1]||=e=>p.value=`condition`},` Condition `,2)])),r(` Too many values message `),f.value&&p.value===`condition`?(m(),i(`div`,Te,` Too many unique values (`+y(d.value.length)+`). Use conditions to filter. `,1)):r(`v-if`,!0),r(` VALUES MODE `),p.value===`values`?(m(),i(e,{key:2},[r(` Search input `),w(a(`input`,{"onUpdate:modelValue":n[2]||=e=>S.value=e,class:`gp-grid-filter-search`,type:`text`,placeholder:`Search...`,autofocus:``},null,512),[[x,S.value]]),r(` Select all / Deselect all `),a(`div`,Ee,[a(`button`,{type:`button`,disabled:N.value,onClick:P},` Select All `,8,De),a(`button`,{type:`button`,onClick:F},` Deselect All `)]),r(` Checkbox list `),a(`div`,Oe,[r(` Blanks option `),M.value?(m(),i(`label`,ke,[a(`input`,{type:`checkbox`,checked:T.value,onChange:n[3]||=e=>T.value=!T.value},null,40,Ae),n[5]||=a(`span`,{class:`gp-grid-filter-blank`},`(Blanks)`,-1)])):r(`v-if`,!0),r(` Values `),(m(!0),i(e,null,g(j.value,e=>(m(),i(`label`,{key:e.label,class:`gp-grid-filter-option`},[a(`input`,{type:`checkbox`,checked:C.value.has(e.label),onChange:t=>I(e.label)},null,40,je),a(`span`,null,y(e.label),1)]))),128))])],64)):r(`v-if`,!0),r(` CONDITION MODE `),p.value===`condition`?(m(),i(e,{key:3},[(m(!0),i(e,null,g(b(E),(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`,Me,[a(`button`,{type:`button`,class:u({active:b(E)[n-1]?.nextOperator===`and`}),onClick:e=>b(O)(n-1,{nextOperator:`and`})},` AND `,10,Ne),a(`button`,{type:`button`,class:u({active:b(E)[n-1]?.nextOperator===`or`}),onClick:e=>b(O)(n-1,{nextOperator:`or`})},` OR `,10,Pe)])):r(`v-if`,!0),a(`div`,Fe,[r(` Operator select `),a(`select`,{value:t.operator,autofocus:n===0,onChange:e=>b(O)(n,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,Le)),64))],40,Ie),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(O)(n,{value:e.target.value})},null,40,Re)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(E).length>1?(m(),i(`button`,{key:1,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(A)(n)},` × `,8,ze)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[4]||=e=>b(k)(`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:R},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:L},` Apply `)])]))}}),Ve={class:`gp-grid-filter-content gp-grid-filter-number`},He={key:0,class:`gp-grid-filter-combination`},Ue=[`onClick`],We=[`onClick`],Ge={class:`gp-grid-filter-row`},Ke=[`value`,`onChange`],qe=[`value`],Je=[`value`,`onInput`],Ye=[`value`,`onInput`],Xe=[`onClick`],Ze=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}let t={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`};l(`apply`,t)}function x(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Ve,[(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`,He,[a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`and`}),onClick:e=>b(p)(o-1,{nextOperator:`and`})},` AND `,10,Ue),a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`or`}),onClick:e=>b(p)(o-1,{nextOperator:`or`})},` OR `,10,We)])):r(`v-if`,!0),a(`div`,Ge,[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,qe)),64))],40,Ke),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,Je)):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,Ye)],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,Xe)):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 `)])]))}}),Qe={class:`gp-grid-filter-content gp-grid-filter-date`},$e={key:0,class:`gp-grid-filter-combination`},et=[`onClick`],tt=[`onClick`],nt={class:`gp-grid-filter-row`},rt=[`value`,`onChange`],it=[`value`],at=[`value`,`onInput`],ot=[`value`,`onInput`],st=[`onClick`],ct=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}let t={conditions:e.map(e=>({type:`date`,operator:e.operator,value:e.value||void 0,valueTo:e.valueTo||void 0,nextOperator:e.nextOperator})),combination:`and`};l(`apply`,t)}function S(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Qe,[(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`,$e,[a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`and`}),onClick:e=>b(h)(o-1,{nextOperator:`and`})},` AND `,10,et),a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`or`}),onClick:e=>b(h)(o-1,{nextOperator:`or`})},` OR `,10,tt)])):r(`v-if`,!0),a(`div`,nt,[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,it)),64))],40,rt),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,at)):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,ot)],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,st)):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 `)])]))}}),lt={class:`gp-grid-filter-header`},ut=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);Se(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=R(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`,lt,` Filter: `+y(o.column.headerName??o.column.field),1),r(` Number filter `),D.value?(m(),n(Ze,{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(ct,{"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`current-filter`])],2112)):(m(),i(e,{key:2},[r(` Text filter (default) `),s(Be,{"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))}}),dt=e=>e==null||e===``?o(``):typeof e==`string`?o(e):e,$=(e,t)=>typeof e==`function`?dt(e(t)):l(e,t),ft=e=>{let t=e.cellDataType;return t===`text`||t===`boolean`||t===`object`};function pt(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},ft(n))}}}};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 mt=[`data-col-index`,`onPointerdown`],ht=[`onPointerdown`],gt=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(pt)({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,ht))],44,mt))),128))],4)],6))}});function _t(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 vt(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=K(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 yt=[`data-cell-row`,`data-cell-col`,`onPointerdown`,`onDblclick`,`onMouseenter`],bt={key:0,class:`gp-grid-error`},xt={key:1,class:`gp-grid-empty`},St=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=Y(e,t,s.editingCell),o=F(J(e,t,s.activeCell),Z(e,t,s.selectionRange),a,fe(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(Y)(t.rowIndex,c,s.editingCell)&&s.editingCell?(m(),n(_(b(vt)({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(_t)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,isActive:b(J)(t.rowIndex,c,s.activeCell),isSelected:b(Z)(t.rowIndex,c,s.selectionRange),isEditing:!1,cellRenderers:s.cellRenderers,globalCellRenderer:s.globalCellRenderer}))))],64))],46,yt))),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`,bt,` Error: `+y(s.error),1)):r(`v-if`,!0),r(` Empty state `),!s.isLoading&&!s.error&&s.totalRows===0?(m(),i(`div`,xt,` No data to display `)):r(`v-if`,!0)],544))}}),Ct=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=N(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(()=>_t({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))}}),wt={key:1,class:`gp-grid-loading`},Tt=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},maxFlingVelocity:{},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=new j({getCore:()=>w.value,getScrollEl:()=>C.value,isBrowser:typeof window<`u`}),k=h(0),{state:A,applyInstructions:M,reset:N}=ve({initialWidth:l.initialWidth,initialHeight:l.initialHeight}),P=t(()=>l.headerHeight??l.rowHeight),F=t(()=>A.value.columns??l.columns),I=t(()=>F.value.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),L=t(()=>z(I.value.map(e=>e.column),A.value.viewportWidth)),R=t(()=>L.value.positions),B=t(()=>L.value.widths),H=t(()=>se(R.value)),W=t(()=>Array.from(A.value.slots.values())),{handleCellMouseDown:G,handleCellDoubleClick:ee,handleFillHandleMouseDown:te,handleHeaderClick:ne,handleHeaderMouseDown:re,handleHeaderResizeMouseDown:ie,handleKeyDown:ae,handlePaste:K,handleWheel:oe,dragState:q}=be(w,C,F,{activeCell:t(()=>A.value.activeCell),selectionRange:t(()=>A.value.selectionRange),editingCell:t(()=>A.value.editingCell),filterPopupOpen:t(()=>A.value.filterPopup?.isOpen??!1),rowHeight:l.rowHeight,headerHeight:P.value,columnPositions:R,columnWidths:B,visibleColumnsWithIndices:I,slots:t(()=>A.value.slots),rowsWrapperOffset:t(()=>A.value.rowsWrapperOffset)}),{fillHandlePosition:ce}=xe({activeCell:t(()=>A.value.activeCell),selectionRange:t(()=>A.value.selectionRange),slots:t(()=>A.value.slots),columns:F,visibleColumnsWithIndices:I,columnPositions:R,columnWidths:B,rowHeight:l.rowHeight});function le(){let e=C.value,t=w.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)}function ue(){let e=C.value;e&&(k.value=e.scrollLeft),le()}function J(e,t){let n=w.value;n&&n.setFilter(e,t)}function de(){let e=w.value;e&&e.closeFilterPopup()}function Y(){w.value?.stopPeek()}let X=t(()=>{let e=A.value.peekCell;if(!e)return null;let t=F.value[e.col],n=W.value.find(t=>t.rowIndex===e.row);return!t||!n?null:{peek:e,column:t,rowData:n.rowData}});function fe(e,t){w.value?.input.handleCellMouseEnter(e,t)}function pe(){w.value?.input.handleCellMouseLeave()}function Z(){return l.dataSource??(l.rowData?U(l.rowData):V([]))}function me(e){E.value&&=(E.value(),null),w.value&&w.value.destroy();let t=new D({columns:l.columns,dataSource:e,rowHeight:l.rowHeight,headerHeight:P.value,overscan:l.overscan,maxFlingVelocity:l.maxFlingVelocity,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,O.syncCore(),E.value=t.onBatchInstruction(e=>{M(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,me(e),O.attach();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(()=>{O.detach(),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(()=>A.value.pendingScrollTop,e=>{if(e!==null){let t=C.value;t&&(O.stop(),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(ae)&&b(ae)(...e),onPaste:c[1]||=(...e)=>b(K)&&b(K)(...e)},[s(gt,{"header-height":P.value,"scroll-left":k.value,"content-width":b(A).contentWidth,"total-width":H.value,"is-loading":b(A).isLoading,"visible-columns-with-indices":I.value,"column-positions":R.value,"column-widths":B.value,headers:b(A).headers,"sorting-enabled":o.sortingEnabled,"on-header-mouse-down":b(re),"on-header-resize-mouse-down":b(ie),"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(St,{ref_key:`gridBodyComp`,ref:x,"row-height":o.rowHeight,"total-header-height":P.value,"content-width":b(A).contentWidth,"content-height":b(A).contentHeight,"total-width":H.value,"rows-wrapper-offset":b(A).rowsWrapperOffset,"active-cell":b(A).activeCell,"selection-range":b(A).selectionRange,"editing-cell":b(A).editingCell,"hover-position":b(A).hoverPosition,error:b(A).error,"is-loading":b(A).isLoading,"total-rows":b(A).totalRows,"slots-array":W.value,"visible-columns-with-indices":I.value,"column-positions":R.value,"column-widths":B.value,"fill-handle-position":b(ce),"drag-state":b(q),"on-scroll":ue,"on-wheel":b(oe),"wheel-dampening":o.wheelDampening,"on-cell-mouse-down":b(G),"on-cell-double-click":b(ee),"on-cell-mouse-enter":fe,"on-cell-mouse-leave":pe,"on-fill-handle-mouse-down":b(te),"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(A).isLoading?(m(),i(`div`,{key:0,style:d({position:`absolute`,top:`${P.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`,wt,[...c[2]||=[a(`div`,{class:`gp-grid-loading-spinner`},null,-1)]]))],4)):r(`v-if`,!0),r(` Filter Popup `),b(A).filterPopup?.isOpen&&b(A).filterPopup.column?(m(),n(ut,{key:1,column:b(A).filterPopup.column,"col-index":b(A).filterPopup.colIndex,"container-ref":g.value,"distinct-values":b(A).filterPopup.distinctValues,"current-filter":b(A).filterPopup.currentFilter,onApply:J,onClose:de},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) `),X.value?(m(),n(Ct,{key:2,"peek-cell":X.value.peek,column:X.value.column,"row-data":X.value.rowData,"container-ref":g.value,"cell-renderers":o.cellRenderers??{},"global-cell-renderer":o.cellRenderer,onClose:Y},null,8,[`peek-cell`,`column`,`row-data`,`container-ref`,`cell-renderers`,`global-cell-renderer`])):r(`v-if`,!0),r(` Column resize line `),b(q).dragType===`column-resize`&&b(q).columnResize?(m(),i(`div`,{key:3,class:`gp-grid-column-resize-line`,style:d({left:`${(R.value[I.value.findIndex(e=>e.originalIndex===b(q).columnResize.colIndex)]??0)+b(q).columnResize.currentWidth-k.value}px`})},null,4)):r(`v-if`,!0),r(` Column move ghost `),b(q).dragType===`column-move`&&b(q).columnMove?(m(),i(e,{key:4},[a(`div`,{class:`gp-grid-column-move-ghost`,style:d({left:`${b(q).columnMove.currentX-b(q).columnMove.ghostWidth/2}px`,top:`${b(q).columnMove.currentY-b(q).columnMove.ghostHeight/2}px`,width:`${b(q).columnMove.ghostWidth}px`,height:`${b(q).columnMove.ghostHeight}px`})},y(F.value[b(q).columnMove.sourceColIndex]?.headerName??F.value[b(q).columnMove.sourceColIndex]?.field??``),5),b(q).columnMove.dropTargetIndex===null?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-column-drop-indicator`,style:d({left:`${(R.value[b(q).columnMove.dropTargetIndex]??0)-k.value}px`,height:`${P.value}px`})},null,4))],64)):r(`v-if`,!0),r(` Row drag ghost (fixed position, follows cursor) `),b(q).dragType===`row-drag`&&b(q).rowDrag?(m(),i(`div`,{key:5,class:`gp-grid-row-drag-ghost`,style:d({left:`${b(q).rowDrag.currentX+12}px`,top:`${b(q).rowDrag.currentY-o.rowHeight/2}px`,width:`${Math.min(300,H.value)}px`,height:`${o.rowHeight}px`})},null,4)):r(`v-if`,!0)],34))}});function Et(e){let n=h(null),r=h(null),i=new j({getCore:()=>r.value,getScrollEl:()=>n.value,isBrowser:typeof window<`u`}),{state:a,applyInstructions:o}=ve(),s=t(()=>e.headerHeight??e.rowHeight),c=t(()=>e.columns.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),l=t(()=>z(c.value.map(e=>e.column),a.value.viewportWidth)),u=t(()=>l.value.positions),d=t(()=>l.value.widths),m=t(()=>se(u.value)),g=t(()=>Array.from(a.value.slots.values())),{handleCellMouseDown:_,handleCellDoubleClick:v,handleFillHandleMouseDown:y,handleHeaderClick:b,handleKeyDown:x,handlePaste:C,handleWheel:w,dragState:T}=be(r,n,t(()=>e.columns),{activeCell:t(()=>a.value.activeCell),selectionRange:t(()=>a.value.selectionRange),editingCell:t(()=>a.value.editingCell),filterPopupOpen:t(()=>a.value.filterPopup?.isOpen??!1),rowHeight:e.rowHeight,headerHeight:s.value,columnPositions:u,columnWidths:d,visibleColumnsWithIndices:c,slots:t(()=>a.value.slots),rowsWrapperOffset:t(()=>a.value.rowsWrapperOffset)}),E=()=>{let e=n.value,t=r.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)},O=(e,t)=>{let n=r.value;n&&n.setFilter(e,t)},k=()=>{let e=r.value;e&&e.closeFilterPopup()},A=(e,t)=>{r.value?.input.handleCellMouseEnter(e,t)},M=()=>{r.value?.input.handleCellMouseLeave()};f(()=>{let t=e.dataSource??(e.rowData?U(e.rowData):V([])),a=new D({columns:e.columns,dataSource:t,rowHeight:e.rowHeight,headerHeight:s.value,overscan:e.overscan??3,maxFlingVelocity:e.maxFlingVelocity,rowLoading:e.rowLoading,sortingEnabled:e.sortingEnabled??!0,highlighting:e.highlighting,getRowId:e.getRowId,onCellValueChanged:e.onCellValueChanged?t=>e.onCellValueChanged?.(t):void 0});r.value=a,i.syncCore();let c=a.onBatchInstruction(e=>{o(e)});a.initialize(),i.attach(),p(()=>i.detach());let l=n.value;if(l){a.setViewport(l.scrollTop,l.scrollLeft,l.clientWidth,l.clientHeight);let e=new ResizeObserver(()=>{a.setViewport(l.scrollTop,l.scrollLeft,l.clientWidth,l.clientHeight)});e.observe(l),p(()=>{e.disconnect(),c(),r.value=null})}}),S(()=>a.value.pendingScrollTop,e=>{if(e!==null){let t=n.value;t&&(i.stop(),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:N}=xe({activeCell:t(()=>a.value.activeCell),selectionRange:t(()=>a.value.selectionRange),slots:t(()=>a.value.slots),columns:t(()=>e.columns),visibleColumnsWithIndices:c,columnPositions:u,columnWidths:d,rowHeight:e.rowHeight});return{containerRef:n,coreRef:r,state:a,slotsArray:g,totalHeaderHeight:s,columnPositions:u,columnWidths:d,totalWidth:m,fillHandlePosition:N,handleScroll:E,handleCellMouseDown:_,handleCellDoubleClick:v,handleFillHandleMouseDown:y,handleHeaderClick:b,handleKeyDown:x,handlePaste:C,handleWheel:w,handleFilterApply:O,handleFilterPopupClose:k,handleCellMouseEnter:A,handleCellMouseLeave:M,dragState:T,isCellSelected:Z,isCellActive:J,isCellEditing:Y,isCellInFillPreview:fe,buildCellClasses:F}}const Dt=(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{Tt as GpGrid,Tt as default,E as GridCore,P as buildCellClasses,I as calculateColumnPositions,B as createClientDataSource,H as createDataSourceFromArray,W as createInitialState,ee as createMutableClientDataSource,ne as createServerDataSource,re as findColumnAtX,K as getCellValue,oe as getTotalWidth,q as gridStyles,ue as isCellActive,de as isCellEditing,X as isCellInFillPreview,pe as isCellSelected,me as isRowVisible,_t as renderCell,vt as renderEditCell,pt as renderHeader,ye as useAutoScroll,xe as useFillHandle,Q as useFilterConditions,Se as useFilterPopup,Et as useGpGrid,Dt as useGridData,ve as useGridState,be 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,PendingCellTapController as O,ROW_DRAG_HOLD_MS as k,TAP_SLOP_PX as A,TouchScrollController as j,applyInstruction as M,bindPeekSelectAll as N,buildCellClasses as P,buildCellClasses as F,calculateColumnPositions as I,calculateFillHandlePosition as L,calculateFilterPopupPosition as R,calculateScaledColumnPositions as z,createClientDataSource as B,createClientDataSource as ee,createDataSourceFromArray as V,createDataSourceFromArray as H,createInitialState as U,createInitialState as W,createMutableClientDataSource as te,createMutableClientDataSource as ne,createServerDataSource as re,findColumnAtX as ie,formatCellValue as ae,formatLabel as G,getDateOperatorOptions as oe,getFieldValue as K,getFieldValue as q,getNumberOperatorOptions as J,getTextOperatorOptions as se,getTotalWidth as ce,getTotalWidth as le,gridStyles as ue,groupDistinctValues as de,isBlankCellValue as fe,isCellActive as pe,isCellActive as Y,isCellEditing as me,isCellEditing as X,isCellInFillPreview as Z,isCellInFillPreview as he,isCellSelected as ge,isCellSelected as _e,isRowVisible as ve,labelsForSelectedValues as ye,rawValuesForLabels as be,resolveGridLabels as xe,scrollCellIntoView as Se}from"@gp-grid/core";function Ce(e){let t=v(W(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=M(t,r,i);e&&Object.assign(a,e)}a.slots=r,a.headers=i,t.value={...n,...a}},reset:()=>{t.value=W()}}}function we(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 Te(e,t,n,r){let{activeCell:i,selectionRange:a,editingCell:o,filterPopupOpen:s,rowHeight:c,headerHeight:l,columnPositions:u,columnWidths:d,visibleColumnsWithIndices:f,slots:m,rowsWrapperOffset:g}=r,_=h({isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null}),v=null,y=null,b=null,x=null,C=null,w=e=>{e.preventDefault()},T=new O({getCore:()=>e.value,isBrowser:typeof window<`u`,onTapConfirmed:()=>t.value?.focus()}),{startAutoScroll:E,stopAutoScroll:D}=we(t,()=>{let t=e.value;if(v&&t?.input){let e=j();e&&(t.input.handleDragMove(v,e),_.value=t.input.getDragState())}});S([()=>l,()=>c,u,f],()=>{let t=e.value;if(t?.input){let e=f.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 j(){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 M(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 N(){y?.();let n=t=>{t.preventDefault();let n=e.value,r=j();if(!n?.input||!r)return;let i=M(t);v=i;let a=n.input.handleDragMove(i,r);a&&(a.autoScroll?E(a.autoScroll.dx,a.autoScroll.dy):D(),_.value=n.input.getDragState())},r=()=>{try{let t=e.value;t?.input&&t.input.handleDragEnd()}finally{let i=e.value,a=i?.input?i.input.getDragState():{isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null};_.value=a,v=null,D(),document.removeEventListener(`touchmove`,w),C!==null&&t.value&&(t.value.style.overflow=C,C=null),document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r),y=null}};document.addEventListener(`pointermove`,n,{passive:!1}),document.addEventListener(`pointerup`,r),document.addEventListener(`pointercancel`,r),y=()=>{document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),document.removeEventListener(`pointercancel`,r)}}function P(){b!==null&&(clearTimeout(b),b=null,e.value?.input?.cancelPendingRowDrag()),x=null}function F(n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleCellMouseDown(n,r,M(i));if(o.focusContainer&&t.value?.focus(),o.startTap&&T.start(i),o.startDrag===`selection`)a.input.startSelectionDrag(),_.value=a.input.getDragState(),N();else if(o.startDrag===`row-drag`)_.value=a.input.getDragState(),N();else if(o.startDrag===`row-drag-pending`){P(),x={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)>A||Math.abs(i)>A)&&(P(),s())},o=()=>{P(),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}),b=setTimeout(()=>{b=null,s();let e=x;if(x=null,a.input.confirmPendingRowDrag()){if(t.value&&(C=t.value.style.overflow,t.value.style.overflow=`hidden`),document.addEventListener(`touchmove`,w,{passive:!1}),e)try{e.target.setPointerCapture(e.pointerId)}catch{}_.value=a.input.getDragState(),N()}},k)}}function I(t,n){let r=e.value;r?.input&&r.input.handleCellDoubleClick(t,n)}function L(t){let n=e.value;if(!n?.input)return;let r=n.input.handleFillHandleMouseDown(i.value,a.value,M(t));if(r.preventDefault&&t.preventDefault(),r.stopPropagation&&t.stopPropagation(),r.startDrag===`fill`){try{t.target.setPointerCapture(t.pointerId)}catch{}_.value=n.input.getDragState(),N()}}function R(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 z(t,n,r,i){let a=e.value;if(!a?.input)return;let o=a.input.handleHeaderMouseDown(t,n,r,M(i));if(o.preventDefault&&i.preventDefault(),o.stopPropagation&&i.stopPropagation(),o.startDrag===`column-move`){try{i.target.setPointerCapture(i.pointerId)}catch{}_.value=a.input.getDragState(),N()}}function B(t,n,r){let i=e.value;if(!i?.input)return;let a=i.input.handleHeaderResizeMouseDown(t,n,M(r));a.preventDefault&&r.preventDefault(),a.stopPropagation&&r.stopPropagation(),a.startDrag===`column-resize`&&(_.value=i.input.getDragState(),N())}function ee(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&&Se(r,a,l.scrollToCell.row,c,m.value,g.value,{colIndex:l.scrollToCell.col,visibleColumns:f.value,columnPositions:u.value,columnWidths:d.value})}function V(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 H(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(()=>{y?.(),y=null,P(),T.cancel(),D(),document.removeEventListener(`touchmove`,w),C!==null&&t.value&&(t.value.style.overflow=C,C=null)}),{handleCellMouseDown:F,handleCellDoubleClick:I,handleFillHandleMouseDown:L,handleHeaderClick:R,handleHeaderMouseDown:z,handleHeaderResizeMouseDown:B,handleKeyDown:ee,handlePaste:V,handleWheel:H,dragState:_}}const Ee=e=>{let{activeCell:n,selectionRange:r,slots:i,columns:a,visibleColumnsWithIndices:o,columnPositions:s,columnWidths:c,rowHeight:l}=e;return{fillHandlePosition:t(()=>L({activeCell:n.value,selectionRange:r.value,slots:i.value,columns:a.value,visibleColumnsWithIndices:o.value,columnPositions:s.value,columnWidths:c.value,rowHeight:l}))}};function De(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 Oe={class:`gp-grid-filter-content gp-grid-filter-text`},ke={key:0,class:`gp-grid-filter-mode-toggle`},Ae={key:1,class:`gp-grid-filter-info`},je=[`placeholder`],Me={class:`gp-grid-filter-actions`},Ne=[`disabled`],Pe={class:`gp-grid-filter-list`},Fe={key:0,class:`gp-grid-filter-option`},Ie=[`checked`],Le={class:`gp-grid-filter-blank`},Re=[`checked`,`onChange`],ze={key:0,class:`gp-grid-filter-combination`},Be=[`onClick`],Ve=[`onClick`],He={class:`gp-grid-filter-row`},Ue=[`value`,`autofocus`,`onChange`],We=[`value`],Ge=[`value`,`placeholder`,`onInput`],Ke=[`onClick`],qe={class:`gp-grid-filter-buttons`},Je=c({__name:`TextFilterContent`,props:{distinctValues:{},valueFormatter:{type:Function},currentFilter:{},labels:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=n,c=o,l=t(()=>se(s.labels)),d=t(()=>de(s.distinctValues,s.valueFormatter)),f=t(()=>d.value.length>100),p=h(t(()=>{if(!s.currentFilter?.conditions[0])return f.value?`condition`:`values`;let e=s.currentFilter.conditions[0];return e.selectedValues&&e.selectedValues.size>0?`values`:`condition`}).value),_=t(()=>{if(!s.currentFilter?.conditions[0])return new Set;let e=s.currentFilter.conditions[0];return e.selectedValues?ye(d.value,e.selectedValues):new Set}),v=t(()=>s.currentFilter?.conditions[0]?s.currentFilter.conditions[0].includeBlank??!0:!0),S=h(``),C=h(new Set(_.value)),T=h(v.value),{conditions:E,combination:D,updateCondition:O,addCondition:k,removeCondition:A}=Q(t(()=>{if(!s.currentFilter?.conditions.length)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let e=s.currentFilter.conditions[0];if(e.selectedValues&&e.selectedValues.size>0)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let t=s.currentFilter.combination??`and`;return s.currentFilter.conditions.map(e=>{let n=e;return{operator:n.operator,value:n.value??``,valueTo:``,nextOperator:n.nextOperator??t}})}).value,s.currentFilter?.combination??`and`),j=t(()=>{if(!S.value)return d.value;let e=S.value.toLowerCase();return d.value.filter(t=>t.label.toLowerCase().includes(e))}),M=t(()=>s.distinctValues.some(fe)),N=t(()=>j.value.every(e=>C.value.has(e.label))&&(!M.value||T.value));function P(){C.value=new Set(j.value.map(e=>e.label)),M.value&&(T.value=!0)}function F(){C.value=new Set,T.value=!1}function I(e){let t=new Set(C.value);t.has(e)?t.delete(e):t.add(e),C.value=t}function L(){if(p.value===`values`){if(d.value.every(e=>C.value.has(e.label))&&(!M.value||T.value)){c(`apply`,null);return}let e={conditions:[{type:`text`,operator:`equals`,selectedValues:be(d.value,C.value),includeBlank:T.value}],combination:`and`};c(`apply`,e)}else{let e=E.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`||e.value.trim()!==``);if(e.length===0){c(`apply`,null);return}let t={conditions:e.map(e=>({type:`text`,operator:e.operator,value:e.value,nextOperator:e.nextOperator})),combination:`and`};c(`apply`,t)}}function R(){c(`apply`,null)}return(t,o)=>(m(),i(`div`,Oe,[r(` Mode toggle - only show if not too many values `),f.value?r(`v-if`,!0):(m(),i(`div`,ke,[a(`button`,{type:`button`,class:u({active:p.value===`values`}),onClick:o[0]||=e=>p.value=`values`},y(n.labels.valuesMode),3),a(`button`,{type:`button`,class:u({active:p.value===`condition`}),onClick:o[1]||=e=>p.value=`condition`},y(n.labels.conditionMode),3)])),r(` Too many values message `),f.value&&p.value===`condition`?(m(),i(`div`,Ae,y(b(G)(n.labels.tooManyValues,{count:d.value.length})),1)):r(`v-if`,!0),r(` VALUES MODE `),p.value===`values`?(m(),i(e,{key:2},[r(` Search input `),w(a(`input`,{"onUpdate:modelValue":o[2]||=e=>S.value=e,class:`gp-grid-filter-search`,type:`text`,placeholder:n.labels.searchPlaceholder,autofocus:``},null,8,je),[[x,S.value]]),r(` Select all / Deselect all `),a(`div`,Me,[a(`button`,{type:`button`,disabled:N.value,onClick:P},y(n.labels.selectAll),9,Ne),a(`button`,{type:`button`,onClick:F},y(n.labels.deselectAll),1)]),r(` Checkbox list `),a(`div`,Pe,[r(` Blanks option `),M.value?(m(),i(`label`,Fe,[a(`input`,{type:`checkbox`,checked:T.value,onChange:o[3]||=e=>T.value=!T.value},null,40,Ie),a(`span`,Le,y(n.labels.blanks),1)])):r(`v-if`,!0),r(` Values `),(m(!0),i(e,null,g(j.value,e=>(m(),i(`label`,{key:e.label,class:`gp-grid-filter-option`},[a(`input`,{type:`checkbox`,checked:C.value.has(e.label),onChange:t=>I(e.label)},null,40,Re),a(`span`,null,y(e.label),1)]))),128))])],64)):r(`v-if`,!0),r(` CONDITION MODE `),p.value===`condition`?(m(),i(e,{key:3},[(m(!0),i(e,null,g(b(E),(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`,ze,[a(`button`,{type:`button`,class:u({active:b(E)[o-1]?.nextOperator===`and`}),onClick:e=>b(O)(o-1,{nextOperator:`and`})},y(n.labels.and),11,Be),a(`button`,{type:`button`,class:u({active:b(E)[o-1]?.nextOperator===`or`}),onClick:e=>b(O)(o-1,{nextOperator:`or`})},y(n.labels.or),11,Ve)])):r(`v-if`,!0),a(`div`,He,[r(` Operator select `),a(`select`,{value:t.operator,autofocus:o===0,onChange:e=>b(O)(o,{operator:e.target.value})},[(m(!0),i(e,null,g(l.value,e=>(m(),i(`option`,{key:e.value,value:e.value},y(e.label),9,We))),128))],40,Ue),r(` Text input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`text`,value:t.value,placeholder:n.labels.valuePlaceholder,class:`gp-grid-filter-text-input`,onInput:e=>b(O)(o,{value:e.target.value})},null,40,Ge)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(E).length>1?(m(),i(`button`,{key:1,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(A)(o)},y(n.labels.removeCondition),9,Ke)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:o[4]||=e=>b(k)(`contains`)},y(n.labels.addCondition),1)],64)):r(`v-if`,!0),r(` Apply/Clear buttons `),a(`div`,qe,[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:R},y(n.labels.clear),1),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:L},y(n.labels.apply),1)])]))}}),Ye={class:`gp-grid-filter-content gp-grid-filter-number`},Xe={key:0,class:`gp-grid-filter-combination`},Ze=[`onClick`],Qe=[`onClick`],$e={class:`gp-grid-filter-row`},et=[`value`,`onChange`],tt=[`value`],nt=[`value`,`placeholder`,`onInput`],rt={class:`gp-grid-filter-to`},it=[`value`,`placeholder`,`onInput`],at=[`onClick`],ot={class:`gp-grid-filter-buttons`},st=c({__name:`NumberFilterContent`,props:{currentFilter:{},labels:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=n,c=o,l=t(()=>J(s.labels)),{conditions:d,combination:f,updateCondition:p,addCondition:h,removeCondition:_}=Q(t(()=>{if(!s.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=s.currentFilter.combination??`and`;return s.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,s.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){c(`apply`,null);return}let t={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`};c(`apply`,t)}function x(){c(`apply`,null)}return(t,o)=>(m(),i(`div`,Ye,[(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`,Xe,[a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`and`}),onClick:e=>b(p)(o-1,{nextOperator:`and`})},y(n.labels.and),11,Ze),a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`or`}),onClick:e=>b(p)(o-1,{nextOperator:`or`})},y(n.labels.or),11,Qe)])):r(`v-if`,!0),a(`div`,$e,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(p)(o,{operator:e.target.value})},[(m(!0),i(e,null,g(l.value,e=>(m(),i(`option`,{key:e.value,value:e.value},y(e.label),9,tt))),128))],40,et),r(` Number input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`number`,value:t.value,placeholder:n.labels.valuePlaceholder,onInput:e=>b(p)(o,{value:e.target.value})},null,40,nt)):r(`v-if`,!0),r(` Second number input for "between" `),t.operator===`between`?(m(),i(e,{key:1},[a(`span`,rt,y(n.labels.betweenSeparator),1),a(`input`,{type:`number`,value:t.valueTo,placeholder:n.labels.valuePlaceholder,onInput:e=>b(p)(o,{valueTo:e.target.value})},null,40,it)],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)},y(n.labels.removeCondition),9,at)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:o[0]||=e=>b(h)(`=`)},y(n.labels.addCondition),1),r(` Apply/Clear buttons `),a(`div`,ot,[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:x},y(n.labels.clear),1),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:v},y(n.labels.apply),1)])]))}}),ct={class:`gp-grid-filter-content gp-grid-filter-date`},lt={key:0,class:`gp-grid-filter-combination`},ut=[`onClick`],dt=[`onClick`],ft={class:`gp-grid-filter-row`},pt=[`value`,`onChange`],mt=[`value`],ht=[`value`,`onInput`],gt={class:`gp-grid-filter-to`},_t=[`value`,`onInput`],vt=[`onClick`],yt={class:`gp-grid-filter-buttons`},bt=c({__name:`DateFilterContent`,props:{currentFilter:{},labels:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=n,c=o,l=t(()=>oe(s.labels));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(!s.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=s.currentFilter.combination??`and`;return s.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:d(n.value),valueTo:d(n.valueTo),nextOperator:n.nextOperator??e}})}).value,s.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){c(`apply`,null);return}let t={conditions:e.map(e=>({type:`date`,operator:e.operator,value:e.value||void 0,valueTo:e.valueTo||void 0,nextOperator:e.nextOperator})),combination:`and`};c(`apply`,t)}function S(){c(`apply`,null)}return(t,o)=>(m(),i(`div`,ct,[(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`,lt,[a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`and`}),onClick:e=>b(h)(o-1,{nextOperator:`and`})},y(n.labels.and),11,ut),a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`or`}),onClick:e=>b(h)(o-1,{nextOperator:`or`})},y(n.labels.or),11,dt)])):r(`v-if`,!0),a(`div`,ft,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(h)(o,{operator:e.target.value})},[(m(!0),i(e,null,g(l.value,e=>(m(),i(`option`,{key:e.value,value:e.value},y(e.label),9,mt))),128))],40,pt),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,ht)):r(`v-if`,!0),r(` Second date input for "between" `),t.operator===`between`?(m(),i(e,{key:1},[a(`span`,gt,y(n.labels.betweenSeparator),1),a(`input`,{type:`date`,value:t.valueTo,onInput:e=>b(h)(o,{valueTo:e.target.value})},null,40,_t)],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)},y(n.labels.removeCondition),9,vt)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:o[0]||=e=>b(_)(`=`)},y(n.labels.addCondition),1),r(` Apply/Clear buttons `),a(`div`,yt,[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:S},y(n.labels.clear),1),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:x},y(n.labels.apply),1)])]))}}),xt={class:`gp-grid-filter-header`},St=c({__name:`FilterPopup`,props:{column:{},colIndex:{},containerRef:{},distinctValues:{},currentFilter:{},labels:{}},emits:[`apply`,`close`],setup(o,{emit:c}){let l=o,u=c,g=h(null),_=h(0),v=h(0),x=h(200),S=h(!1);De(g,{onClose:()=>u(`close`),ignoreSelector:`.gp-grid-filter-icon`});let w=t(()=>l.column.colId??l.column.field);function T(e){u(`apply`,w.value,e),u(`close`)}function E(){u(`close`)}let D=t(()=>l.column.cellDataType);t(()=>D.value===`text`||D.value===`object`);let O=t(()=>D.value===`number`),k=t(()=>D.value===`date`||D.value===`dateString`||D.value===`dateTime`||D.value===`dateTimeString`),A=null,j=()=>{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=R(n,t);_.value=r.top,v.value=r.left,x.value=r.minWidth,S.value=!0},M=()=>{A===null&&(A=requestAnimationFrame(()=>{A=null,j()}))};C(()=>{l.colIndex,j()},{flush:`post`}),f(()=>{window.addEventListener(`scroll`,M,{passive:!0,capture:!0}),window.addEventListener(`resize`,M)}),p(()=>{window.removeEventListener(`scroll`,M,{capture:!0}),window.removeEventListener(`resize`,M),A!==null&&cancelAnimationFrame(A)});let N=t(()=>({position:`fixed`,top:`${_.value}px`,left:`${v.value}px`,minWidth:`${x.value}px`,zIndex:1e4,visibility:S.value?`visible`:`hidden`}));return(t,c)=>(m(),i(`div`,{ref_key:`popupRef`,ref:g,class:`gp-grid-filter-popup`,style:d(N.value)},[a(`div`,xt,y(b(G)(o.labels.filterTitle,{column:o.column.headerName??o.column.field})),1),r(` Number filter `),O.value?(m(),n(st,{key:0,"current-filter":o.currentFilter,labels:o.labels,onApply:T,onClose:E},null,8,[`current-filter`,`labels`])):k.value?(m(),i(e,{key:1},[r(` Date filter `),s(bt,{"current-filter":o.currentFilter,labels:o.labels,onApply:T,onClose:E},null,8,[`current-filter`,`labels`])],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,labels:o.labels,onApply:T,onClose:E},null,8,[`distinct-values`,`value-formatter`,`current-filter`,`labels`])],2112))],4))}}),Ct=e=>e==null||e===``?o(``):typeof e==`string`?o(e):e,$=(e,t)=>typeof e==`function`?Ct(e(t)):l(e,t),wt=e=>{let t=e.cellDataType;return t===`text`||t===`boolean`||t===`object`};function Tt(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},wt(n))}}}};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 Et=[`data-col-index`,`onPointerdown`],Dt=[`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(Tt)({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,Dt))],44,Et))),128))],4)],6))}});function kt(e){let{column:t,rowData:n,rowIndex:r,colIndex:i,isActive:a,isSelected:o,isEditing:s,cellRenderers:c,globalCellRenderer:u}=e,d=K(n,t.field),f={value:t.valueFormatter?t.valueFormatter(d):d,rowData:n,column:t,rowIndex:r,colIndex:i,isActive:a,isSelected:o,isEditing:s};if(t.cellRenderer!=null)if(typeof t.cellRenderer==`string`){let e=c[t.cellRenderer];if(e)return $(e,f)}else return $(t.cellRenderer,f);return u?$(u,f):l(`span`,{class:`gp-grid-cell-content`},ae(d,t.valueFormatter))}function At(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=q(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 jt=[`data-cell-row`,`data-cell-col`,`onPointerdown`,`onDblclick`,`onMouseenter`],Mt={key:0,class:`gp-grid-error`},Nt={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:{},labels:{},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=X(e,t,s.editingCell),o=F(Y(e,t,s.activeCell),_e(e,t,s.selectionRange),a,he(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,u=n.wrapText===!0&&!a;return[o,...c,l?`gp-grid-cell--row-drag-handle`:``,u?`gp-grid-cell--wrap`:``].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(X)(t.rowIndex,c,s.editingCell)&&s.editingCell?(m(),n(_(b(At)({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(kt)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,isActive:b(Y)(t.rowIndex,c,s.activeCell),isSelected:b(_e)(t.rowIndex,c,s.selectionRange),isEditing:!1,cellRenderers:s.cellRenderers,globalCellRenderer:s.globalCellRenderer}))))],64))],46,jt))),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`,Mt,y(b(G)(s.labels.errorPrefix,{message:s.error})),1)):r(`v-if`,!0),r(` Empty state `),!s.isLoading&&!s.error&&s.totalRows===0?(m(),i(`div`,Nt,y(s.labels.emptyState),1)):r(`v-if`,!0)],544))}}),Ft=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=N(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(()=>kt({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))}}),It={key:1,class:`gp-grid-loading`},Lt=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},maxFlingVelocity:{},cellRenderers:{default:()=>({})},editRenderers:{default:()=>({})},headerRenderers:{default:()=>({})},cellRenderer:{},editRenderer:{},headerRenderer:{},initialWidth:{},initialHeight:{},highlighting:{},getRowId:{},onCellValueChanged:{},loadingComponent:{},rowDragEntireRow:{type:Boolean},onRowDragEnd:{},onColumnResized:{},onColumnMoved:{},labels:{}},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=new j({getCore:()=>w.value,getScrollEl:()=>C.value,isBrowser:typeof window<`u`}),k=h(0),{state:A,applyInstructions:M,reset:N}=Ce({initialWidth:l.initialWidth,initialHeight:l.initialHeight}),P=t(()=>l.headerHeight??l.rowHeight),F=t(()=>xe(l.labels)),I=t(()=>A.value.columns??l.columns),L=t(()=>I.value.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),R=t(()=>z(L.value.map(e=>e.column),A.value.viewportWidth)),B=t(()=>R.value.positions),V=t(()=>R.value.widths),U=t(()=>le(B.value)),W=t(()=>Array.from(A.value.slots.values())),{handleCellMouseDown:te,handleCellDoubleClick:ne,handleFillHandleMouseDown:re,handleHeaderClick:ie,handleHeaderMouseDown:ae,handleHeaderResizeMouseDown:G,handleKeyDown:oe,handlePaste:K,handleWheel:q,dragState:J}=Te(w,C,I,{activeCell:t(()=>A.value.activeCell),selectionRange:t(()=>A.value.selectionRange),editingCell:t(()=>A.value.editingCell),filterPopupOpen:t(()=>A.value.filterPopup?.isOpen??!1),rowHeight:l.rowHeight,headerHeight:P.value,columnPositions:B,columnWidths:V,visibleColumnsWithIndices:L,slots:t(()=>A.value.slots),rowsWrapperOffset:t(()=>A.value.rowsWrapperOffset)}),{fillHandlePosition:se}=Ee({activeCell:t(()=>A.value.activeCell),selectionRange:t(()=>A.value.selectionRange),slots:t(()=>A.value.slots),columns:I,visibleColumnsWithIndices:L,columnPositions:B,columnWidths:V,rowHeight:l.rowHeight});function ce(){let e=C.value,t=w.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)}function ue(){let e=C.value;e&&(k.value=e.scrollLeft),ce()}function de(e,t){let n=w.value;n&&n.setFilter(e,t)}function fe(){let e=w.value;e&&e.closeFilterPopup()}function pe(){w.value?.stopPeek()}let Y=t(()=>{let e=A.value.peekCell;if(!e)return null;let t=I.value[e.col],n=W.value.find(t=>t.rowIndex===e.row);return!t||!n?null:{peek:e,column:t,rowData:n.rowData}});function me(e,t){w.value?.input.handleCellMouseEnter(e,t)}function X(){w.value?.input.handleCellMouseLeave()}function Z(){return l.dataSource??(l.rowData?H(l.rowData):ee([]))}function he(e){E.value&&=(E.value(),null),w.value&&w.value.destroy();let t=new D({columns:l.columns,dataSource:e,rowHeight:l.rowHeight,headerHeight:P.value,overscan:l.overscan,maxFlingVelocity:l.maxFlingVelocity,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,O.syncCore(),E.value=t.onBatchInstruction(e=>{M(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,he(e),O.attach();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(()=>{O.detach(),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(()=>A.value.pendingScrollTop,e=>{if(e!==null){let t=C.value;t&&(O.stop(),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(oe)&&b(oe)(...e),onPaste:c[1]||=(...e)=>b(K)&&b(K)(...e)},[s(Ot,{"header-height":P.value,"scroll-left":k.value,"content-width":b(A).contentWidth,"total-width":U.value,"is-loading":b(A).isLoading,"visible-columns-with-indices":L.value,"column-positions":B.value,"column-widths":V.value,headers:b(A).headers,"sorting-enabled":o.sortingEnabled,"on-header-mouse-down":b(ae),"on-header-resize-mouse-down":b(G),"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":P.value,"content-width":b(A).contentWidth,"content-height":b(A).contentHeight,"total-width":U.value,"rows-wrapper-offset":b(A).rowsWrapperOffset,"active-cell":b(A).activeCell,"selection-range":b(A).selectionRange,"editing-cell":b(A).editingCell,"hover-position":b(A).hoverPosition,error:b(A).error,"is-loading":b(A).isLoading,"total-rows":b(A).totalRows,labels:F.value,"slots-array":W.value,"visible-columns-with-indices":L.value,"column-positions":B.value,"column-widths":V.value,"fill-handle-position":b(se),"drag-state":b(J),"on-scroll":ue,"on-wheel":b(q),"wheel-dampening":o.wheelDampening,"on-cell-mouse-down":b(te),"on-cell-double-click":b(ne),"on-cell-mouse-enter":me,"on-cell-mouse-leave":X,"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.labels.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(A).isLoading?(m(),i(`div`,{key:0,style:d({position:`absolute`,top:`${P.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`,It,[...c[2]||=[a(`div`,{class:`gp-grid-loading-spinner`},null,-1)]]))],4)):r(`v-if`,!0),r(` Filter Popup `),b(A).filterPopup?.isOpen&&b(A).filterPopup.column?(m(),n(St,{key:1,column:b(A).filterPopup.column,"col-index":b(A).filterPopup.colIndex,"container-ref":g.value,"distinct-values":b(A).filterPopup.distinctValues,"current-filter":b(A).filterPopup.currentFilter,labels:F.value,onApply:de,onClose:fe},null,8,[`column`,`col-index`,`container-ref`,`distinct-values`,`current-filter`,`labels`])):r(`v-if`,!0),r(` Cell Peek (read-only multi-line overlay on dblclick of non-editable cell) `),Y.value?(m(),n(Ft,{key:2,"peek-cell":Y.value.peek,column:Y.value.column,"row-data":Y.value.rowData,"container-ref":g.value,"cell-renderers":o.cellRenderers??{},"global-cell-renderer":o.cellRenderer,onClose:pe},null,8,[`peek-cell`,`column`,`row-data`,`container-ref`,`cell-renderers`,`global-cell-renderer`])):r(`v-if`,!0),r(` Column resize line `),b(J).dragType===`column-resize`&&b(J).columnResize?(m(),i(`div`,{key:3,class:`gp-grid-column-resize-line`,style:d({left:`${(B.value[L.value.findIndex(e=>e.originalIndex===b(J).columnResize.colIndex)]??0)+b(J).columnResize.currentWidth-k.value}px`})},null,4)):r(`v-if`,!0),r(` Column move ghost `),b(J).dragType===`column-move`&&b(J).columnMove?(m(),i(e,{key:4},[a(`div`,{class:`gp-grid-column-move-ghost`,style:d({left:`${b(J).columnMove.currentX-b(J).columnMove.ghostWidth/2}px`,top:`${b(J).columnMove.currentY-b(J).columnMove.ghostHeight/2}px`,width:`${b(J).columnMove.ghostWidth}px`,height:`${b(J).columnMove.ghostHeight}px`})},y(I.value[b(J).columnMove.sourceColIndex]?.headerName??I.value[b(J).columnMove.sourceColIndex]?.field??``),5),b(J).columnMove.dropTargetIndex===null?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-column-drop-indicator`,style:d({left:`${(B.value[b(J).columnMove.dropTargetIndex]??0)-k.value}px`,height:`${P.value}px`})},null,4))],64)):r(`v-if`,!0),r(` Row drag ghost (fixed position, follows cursor) `),b(J).dragType===`row-drag`&&b(J).rowDrag?(m(),i(`div`,{key:5,class:`gp-grid-row-drag-ghost`,style:d({left:`${b(J).rowDrag.currentX+12}px`,top:`${b(J).rowDrag.currentY-o.rowHeight/2}px`,width:`${Math.min(300,U.value)}px`,height:`${o.rowHeight}px`})},null,4)):r(`v-if`,!0)],34))}});function Rt(e){let n=h(null),r=h(null),i=new j({getCore:()=>r.value,getScrollEl:()=>n.value,isBrowser:typeof window<`u`}),{state:a,applyInstructions:o}=Ce(),s=t(()=>e.headerHeight??e.rowHeight),c=t(()=>e.columns.map((e,t)=>({column:e,originalIndex:t})).filter(({column:e})=>!e.hidden)),l=t(()=>z(c.value.map(e=>e.column),a.value.viewportWidth)),u=t(()=>l.value.positions),d=t(()=>l.value.widths),m=t(()=>le(u.value)),g=t(()=>Array.from(a.value.slots.values())),{handleCellMouseDown:_,handleCellDoubleClick:v,handleFillHandleMouseDown:y,handleHeaderClick:b,handleKeyDown:x,handlePaste:C,handleWheel:w,dragState:T}=Te(r,n,t(()=>e.columns),{activeCell:t(()=>a.value.activeCell),selectionRange:t(()=>a.value.selectionRange),editingCell:t(()=>a.value.editingCell),filterPopupOpen:t(()=>a.value.filterPopup?.isOpen??!1),rowHeight:e.rowHeight,headerHeight:s.value,columnPositions:u,columnWidths:d,visibleColumnsWithIndices:c,slots:t(()=>a.value.slots),rowsWrapperOffset:t(()=>a.value.rowsWrapperOffset)}),E=()=>{let e=n.value,t=r.value;!e||!t||t.setViewport(e.scrollTop,e.scrollLeft,e.clientWidth,e.clientHeight)},O=(e,t)=>{let n=r.value;n&&n.setFilter(e,t)},k=()=>{let e=r.value;e&&e.closeFilterPopup()},A=(e,t)=>{r.value?.input.handleCellMouseEnter(e,t)},M=()=>{r.value?.input.handleCellMouseLeave()};f(()=>{let t=e.dataSource??(e.rowData?H(e.rowData):ee([])),a=new D({columns:e.columns,dataSource:t,rowHeight:e.rowHeight,headerHeight:s.value,overscan:e.overscan??3,maxFlingVelocity:e.maxFlingVelocity,rowLoading:e.rowLoading,sortingEnabled:e.sortingEnabled??!0,highlighting:e.highlighting,getRowId:e.getRowId,onCellValueChanged:e.onCellValueChanged?t=>e.onCellValueChanged?.(t):void 0});r.value=a,i.syncCore();let c=a.onBatchInstruction(e=>{o(e)});a.initialize(),i.attach(),p(()=>i.detach());let l=n.value;if(l){a.setViewport(l.scrollTop,l.scrollLeft,l.clientWidth,l.clientHeight);let e=new ResizeObserver(()=>{a.setViewport(l.scrollTop,l.scrollLeft,l.clientWidth,l.clientHeight)});e.observe(l),p(()=>{e.disconnect(),c(),r.value=null})}}),S(()=>a.value.pendingScrollTop,e=>{if(e!==null){let t=n.value;t&&(i.stop(),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:N}=Ee({activeCell:t(()=>a.value.activeCell),selectionRange:t(()=>a.value.selectionRange),slots:t(()=>a.value.slots),columns:t(()=>e.columns),visibleColumnsWithIndices:c,columnPositions:u,columnWidths:d,rowHeight:e.rowHeight});return{containerRef:n,coreRef:r,state:a,slotsArray:g,totalHeaderHeight:s,columnPositions:u,columnWidths:d,totalWidth:m,fillHandlePosition:N,handleScroll:E,handleCellMouseDown:_,handleCellDoubleClick:v,handleFillHandleMouseDown:y,handleHeaderClick:b,handleKeyDown:x,handlePaste:C,handleWheel:w,handleFilterApply:O,handleFilterPopupClose:k,handleCellMouseEnter:A,handleCellMouseLeave:M,dragState:T,isCellSelected:_e,isCellActive:Y,isCellEditing:X,isCellInFillPreview:he,buildCellClasses:F}}const zt=(e,t)=>{let n=ne(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{Lt as GpGrid,Lt as default,E as GridCore,P as buildCellClasses,I as calculateColumnPositions,B as createClientDataSource,V as createDataSourceFromArray,U as createInitialState,te as createMutableClientDataSource,re as createServerDataSource,ie as findColumnAtX,q as getCellValue,ce as getTotalWidth,ue as gridStyles,pe as isCellActive,me as isCellEditing,Z as isCellInFillPreview,ge as isCellSelected,ve as isRowVisible,kt as renderCell,At as renderEditCell,Tt as renderHeader,we as useAutoScroll,Ee as useFillHandle,Q as useFilterConditions,De as useFilterPopup,Rt as useGpGrid,zt as useGridData,Ce as useGridState,Te as useInputHandler};
package/dist/styles.css CHANGED
@@ -391,12 +391,34 @@
391
391
  box-sizing: border-box;
392
392
  display: flex;
393
393
  overflow: hidden;
394
- text-overflow: ellipsis;
395
394
  white-space: nowrap;
396
395
  user-select: none;
397
396
  -webkit-user-select: none;
398
397
  }
399
398
 
399
+ /* Default cell content wrapper - the framework adapters wrap plain-text values
400
+ in this element so text-overflow can apply (it has no effect on the flex
401
+ container itself, which previously caused long text to hard-clip). */
402
+ .gp-grid-cell-content {
403
+ min-width: 0;
404
+ flex: 1 1 auto;
405
+ overflow: hidden;
406
+ text-overflow: ellipsis;
407
+ white-space: nowrap;
408
+ }
409
+
410
+ /* Wrapped cell content - ColumnDefinition.wrapText: true.
411
+ Text flows onto additional lines and is clipped to the fixed row height. */
412
+ .gp-grid-cell--wrap {
413
+ align-items: flex-start;
414
+ }
415
+
416
+ .gp-grid-cell--wrap .gp-grid-cell-content {
417
+ white-space: normal;
418
+ overflow-wrap: anywhere;
419
+ text-overflow: clip;
420
+ }
421
+
400
422
  /* Visual properties - :where() for zero specificity, so user highlight classes always win */
401
423
  :where(.gp-grid-cell) {
402
424
  align-items: center;
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.20.0",
4
+ "version": "0.21.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.20.0"
53
+ "@gp-grid/core": "0.21.0"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "vue": "^3.4.0"