@gp-grid/vue 0.19.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,6 +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";
3
-
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";
4
3
  //#region src/types.d.ts
5
4
  /** Row data alias — core's generic defaults to `unknown`, this preserves the name. */
6
5
  type Row = unknown;
@@ -56,6 +55,8 @@ interface GpGridProps<TData = unknown> {
56
55
  loadingComponent?: Component<{
57
56
  isLoading: boolean;
58
57
  }>;
58
+ /** Override any user-visible grid label. Unspecified labels fall back to English defaults. */
59
+ labels?: Partial<GridLabels$1>;
59
60
  }
60
61
  //#endregion
61
62
  //#region src/GpGrid.vue.d.ts
@@ -69,26 +70,39 @@ type __VLS_Props = {
69
70
  rowLoading?: RowLoadingOptions$1;
70
71
  sortingEnabled?: boolean;
71
72
  darkMode?: boolean;
72
- wheelDampening?: number; /** Max accumulated touch-fling velocity (logical px/ms) when scroll virtualization is active. Pair higher values with overscan 10-12. Default: 20 × rowHeight (~20,000 rows/s) */
73
+ wheelDampening?: number;
74
+ /** Max accumulated touch-fling velocity (logical px/ms) when scroll virtualization is active. Pair higher values with overscan 10-12. Default: 20 × rowHeight (~20,000 rows/s) */
73
75
  maxFlingVelocity?: number;
74
76
  cellRenderers?: Record<string, VueCellRenderer>;
75
77
  editRenderers?: Record<string, VueEditRenderer>;
76
78
  headerRenderers?: Record<string, VueHeaderRenderer>;
77
79
  cellRenderer?: VueCellRenderer;
78
80
  editRenderer?: VueEditRenderer;
79
- headerRenderer?: VueHeaderRenderer; /** Initial viewport width for SSR (pixels). ResizeObserver takes over on client. */
80
- initialWidth?: number; /** Initial viewport height for SSR (pixels). ResizeObserver takes over on client. */
81
- initialHeight?: number; /** Row/column/cell highlighting configuration */
82
- highlighting?: HighlightingOptions<Row>; /** Function to extract unique ID from row. Required when onCellValueChanged is provided. */
83
- getRowId?: (row: Row) => RowId$1; /** Called when a cell value is changed via editing, fill drag, or paste. Requires getRowId. */
84
- onCellValueChanged?: (event: CellValueChangedEvent$1<Row>) => void; /** Custom loading component to render instead of default spinner */
81
+ headerRenderer?: VueHeaderRenderer;
82
+ /** Initial viewport width for SSR (pixels). ResizeObserver takes over on client. */
83
+ initialWidth?: number;
84
+ /** Initial viewport height for SSR (pixels). ResizeObserver takes over on client. */
85
+ initialHeight?: number;
86
+ /** Row/column/cell highlighting configuration */
87
+ highlighting?: HighlightingOptions<Row>;
88
+ /** Function to extract unique ID from row. Required when onCellValueChanged is provided. */
89
+ getRowId?: (row: Row) => RowId$1;
90
+ /** Called when a cell value is changed via editing, fill drag, or paste. Requires getRowId. */
91
+ onCellValueChanged?: (event: CellValueChangedEvent$1<Row>) => void;
92
+ /** Custom loading component to render instead of default spinner */
85
93
  loadingComponent?: Component<{
86
94
  isLoading: boolean;
87
- }>; /** Whether clicking and dragging any cell in a row drags the entire row. Default: false */
88
- rowDragEntireRow?: boolean; /** Called when a row is dropped after dragging. Consumer handles data reordering. */
89
- onRowDragEnd?: (sourceIndex: number, targetIndex: number) => void; /** Called when a column is resized. */
90
- onColumnResized?: (colIndex: number, newWidth: number) => void; /** Called when a column is moved/reordered. */
95
+ }>;
96
+ /** Whether clicking and dragging any cell in a row drags the entire row. Default: false */
97
+ rowDragEntireRow?: boolean;
98
+ /** Called when a row is dropped after dragging. Consumer handles data reordering. */
99
+ onRowDragEnd?: (sourceIndex: number, targetIndex: number) => void;
100
+ /** Called when a column is resized. */
101
+ onColumnResized?: (colIndex: number, newWidth: number) => void;
102
+ /** Called when a column is moved/reordered. */
91
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>;
92
106
  };
93
107
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
94
108
  core: import("vue").ShallowRef<GridCore$1<unknown> | null, GridCore$1<unknown> | null>;
@@ -385,4 +399,4 @@ interface RenderHeaderOptions {
385
399
  */
386
400
  declare function renderHeader(options: RenderHeaderOptions): VNode;
387
401
  //#endregion
388
- 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 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,getFieldValue as oe,getFieldValue as G,getTotalWidth as se,getTotalWidth as ce,gridStyles as K,isCellActive as le,isCellActive as q,isCellEditing as ue,isCellEditing as J,isCellInFillPreview as de,isCellInFillPreview as fe,isCellSelected as Y,isCellSelected as X,isRowVisible as pe,scrollCellIntoView as me}from"@gp-grid/core";function he(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 ge(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 _e(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}=ge(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;_.value=i?.input?i.input.getDragState():{isDragging:!1,dragType:null,fillSourceRange:null,fillTarget:null,columnResize:null,columnMove:null,rowDrag:null},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&&me(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 Z=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 ve(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 ye={class:`gp-grid-filter-content gp-grid-filter-text`},be={key:0,class:`gp-grid-filter-mode-toggle`},xe={key:1,class:`gp-grid-filter-info`},Se={class:`gp-grid-filter-actions`},Ce=[`disabled`],we={class:`gp-grid-filter-list`},Te={key:0,class:`gp-grid-filter-option`},Ee=[`checked`],De=[`checked`,`onChange`],Oe={key:0,class:`gp-grid-filter-combination`},ke=[`onClick`],Ae=[`onClick`],je={class:`gp-grid-filter-row`},Me=[`value`,`autofocus`,`onChange`],Ne=[`value`],Pe=[`value`,`onInput`],Fe=[`onClick`],Ie=c({__name:`TextFilterContent`,props:{distinctValues:{},valueFormatter:{type:Function},currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`contains`,label:`Contains`},{value:`notContains`,label:`Does not contain`},{value:`equals`,label:`Equals`},{value:`notEquals`,label:`Does not equal`},{value:`startsWith`,label:`Starts with`},{value:`endsWith`,label:`Ends with`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Is not blank`}],c=n,l=o;function d(e){return c.valueFormatter?c.valueFormatter(e):Array.isArray(e)?e.join(`, `):String(e??``)}function f(e){return d(e)}let p=t(()=>{let e=new Set,t=[];for(let n of c.distinctValues){if(n==null||n===``||Array.isArray(n)&&n.length===0)continue;let r=d(n);e.has(r)||(e.add(r),t.push({key:r,label:f(n)}))}return t.sort((e,t)=>{let n=parseFloat(e.label),r=parseFloat(t.label);return!isNaN(n)&&!isNaN(r)?n-r:e.label.localeCompare(t.label,void 0,{numeric:!0,sensitivity:`base`})}),t}),_=t(()=>p.value.length>100),v=h(t(()=>{if(!c.currentFilter?.conditions[0])return _.value?`condition`:`values`;let e=c.currentFilter.conditions[0];return e.selectedValues&&e.selectedValues.size>0?`values`:`condition`}).value),S=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].selectedValues??new Set:new Set),C=t(()=>c.currentFilter?.conditions[0]?c.currentFilter.conditions[0].includeBlank??!0:!0),T=h(``),E=h(new Set(S.value)),D=h(C.value),{conditions:O,combination:k,updateCondition:A,addCondition:j,removeCondition:M}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.conditions[0];if(e.selectedValues&&e.selectedValues.size>0)return[{operator:`contains`,value:``,valueTo:``,nextOperator:`and`}];let t=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(e=>{let n=e;return{operator:n.operator,value:n.value??``,valueTo:``,nextOperator:n.nextOperator??t}})}).value,c.currentFilter?.combination??`and`),N=t(()=>{if(!T.value)return p.value;let e=T.value.toLowerCase();return p.value.filter(t=>t.label.toLowerCase().includes(e))}),P=t(()=>c.distinctValues.some(e=>e==null||e===``)),F=t(()=>N.value.every(e=>E.value.has(e.key))&&(!P.value||D.value));function I(){E.value=new Set(N.value.map(e=>e.key)),P.value&&(D.value=!0)}function L(){E.value=new Set,D.value=!1}function R(e){let t=new Set(E.value);t.has(e)?t.delete(e):t.add(e),E.value=t}function z(){if(v.value===`values`){if(p.value.every(e=>E.value.has(e.key))&&(!P.value||D.value)){l(`apply`,null);return}l(`apply`,{conditions:[{type:`text`,operator:`equals`,selectedValues:E.value,includeBlank:D.value}],combination:`and`})}else{let e=O.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.value.trim()!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`text`,operator:e.operator,value:e.value,nextOperator:e.nextOperator})),combination:`and`})}}function B(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,ye,[r(` Mode toggle - only show if not too many values `),_.value?r(`v-if`,!0):(m(),i(`div`,be,[a(`button`,{type:`button`,class:u({active:v.value===`values`}),onClick:n[0]||=e=>v.value=`values`},` Values `,2),a(`button`,{type:`button`,class:u({active:v.value===`condition`}),onClick:n[1]||=e=>v.value=`condition`},` Condition `,2)])),r(` Too many values message `),_.value&&v.value===`condition`?(m(),i(`div`,xe,` Too many unique values (`+y(p.value.length)+`). Use conditions to filter. `,1)):r(`v-if`,!0),r(` VALUES MODE `),v.value===`values`?(m(),i(e,{key:2},[r(` Search input `),w(a(`input`,{"onUpdate:modelValue":n[2]||=e=>T.value=e,class:`gp-grid-filter-search`,type:`text`,placeholder:`Search...`,autofocus:``},null,512),[[x,T.value]]),r(` Select all / Deselect all `),a(`div`,Se,[a(`button`,{type:`button`,disabled:F.value,onClick:I},` Select All `,8,Ce),a(`button`,{type:`button`,onClick:L},` Deselect All `)]),r(` Checkbox list `),a(`div`,we,[r(` Blanks option `),P.value?(m(),i(`label`,Te,[a(`input`,{type:`checkbox`,checked:D.value,onChange:n[3]||=e=>D.value=!D.value},null,40,Ee),n[5]||=a(`span`,{class:`gp-grid-filter-blank`},`(Blanks)`,-1)])):r(`v-if`,!0),r(` Values `),(m(!0),i(e,null,g(N.value,e=>(m(),i(`label`,{key:e.key,class:`gp-grid-filter-option`},[a(`input`,{type:`checkbox`,checked:E.value.has(e.key),onChange:t=>R(e.key)},null,40,De),a(`span`,null,y(e.label),1)]))),128))])],64)):r(`v-if`,!0),r(` CONDITION MODE `),v.value===`condition`?(m(),i(e,{key:3},[(m(!0),i(e,null,g(b(O),(t,n)=>(m(),i(`div`,{key:n,class:`gp-grid-filter-condition`},[r(` Combination toggle (AND/OR) for conditions after the first `),n>0?(m(),i(`div`,Oe,[a(`button`,{type:`button`,class:u({active:b(O)[n-1]?.nextOperator===`and`}),onClick:e=>b(A)(n-1,{nextOperator:`and`})},` AND `,10,ke),a(`button`,{type:`button`,class:u({active:b(O)[n-1]?.nextOperator===`or`}),onClick:e=>b(A)(n-1,{nextOperator:`or`})},` OR `,10,Ae)])):r(`v-if`,!0),a(`div`,je,[r(` Operator select `),a(`select`,{value:t.operator,autofocus:n===0,onChange:e=>b(A)(n,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,Ne)),64))],40,Me),r(` Text input (hidden for blank/notBlank) `),t.operator!==`blank`&&t.operator!==`notBlank`?(m(),i(`input`,{key:0,type:`text`,value:t.value,placeholder:`Value`,class:`gp-grid-filter-text-input`,onInput:e=>b(A)(n,{value:e.target.value})},null,40,Pe)):r(`v-if`,!0),r(` Remove button (only if more than one condition) `),b(O).length>1?(m(),i(`button`,{key:1,type:`button`,class:`gp-grid-filter-remove`,onClick:e=>b(M)(n)},` × `,8,Fe)):r(`v-if`,!0)])]))),128)),r(` Add condition button `),a(`button`,{type:`button`,class:`gp-grid-filter-add`,onClick:n[4]||=e=>b(j)(`contains`)},` + Add condition `)],64)):r(`v-if`,!0),r(` Apply/Clear buttons `),a(`div`,{class:`gp-grid-filter-buttons`},[a(`button`,{type:`button`,class:`gp-grid-filter-btn-clear`,onClick:B},` Clear `),a(`button`,{type:`button`,class:`gp-grid-filter-btn-apply`,onClick:z},` Apply `)])]))}}),Le={class:`gp-grid-filter-content gp-grid-filter-number`},Re={key:0,class:`gp-grid-filter-combination`},ze=[`onClick`],Be=[`onClick`],Ve={class:`gp-grid-filter-row`},He=[`value`,`onChange`],Ue=[`value`],We=[`value`,`onInput`],Ge=[`value`,`onInput`],Ke=[`onClick`],qe=c({__name:`NumberFilterContent`,props:{currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`=`,label:`=`},{value:`!=`,label:`≠`},{value:`>`,label:`>`},{value:`<`,label:`<`},{value:`>=`,label:`≥`},{value:`<=`,label:`≤`},{value:`between`,label:`↔`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Not blank`}],c=n,l=o,{conditions:d,combination:f,updateCondition:p,addCondition:h,removeCondition:_}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:n.value==null?``:String(n.value),valueTo:n.valueTo==null?``:String(n.valueTo),nextOperator:n.nextOperator??e}})}).value,c.currentFilter?.combination??`and`);function v(){let e=d.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.operator===`between`?e.value!==``&&e.valueTo!==``:e.value!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`number`,operator:e.operator,value:e.value?parseFloat(e.value):void 0,valueTo:e.valueTo?parseFloat(e.valueTo):void 0,nextOperator:e.nextOperator})),combination:`and`})}function x(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Le,[(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`,Re,[a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`and`}),onClick:e=>b(p)(o-1,{nextOperator:`and`})},` AND `,10,ze),a(`button`,{type:`button`,class:u({active:b(d)[o-1]?.nextOperator===`or`}),onClick:e=>b(p)(o-1,{nextOperator:`or`})},` OR `,10,Be)])):r(`v-if`,!0),a(`div`,Ve,[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,Ue)),64))],40,He),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,We)):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,Ge)],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,Ke)):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 `)])]))}}),Je={class:`gp-grid-filter-content gp-grid-filter-date`},Ye={key:0,class:`gp-grid-filter-combination`},Xe=[`onClick`],Ze=[`onClick`],Qe={class:`gp-grid-filter-row`},$e=[`value`,`onChange`],et=[`value`],tt=[`value`,`onInput`],nt=[`value`,`onInput`],rt=[`onClick`],it=c({__name:`DateFilterContent`,props:{currentFilter:{}},emits:[`apply`,`close`],setup(n,{emit:o}){let s=[{value:`=`,label:`=`},{value:`!=`,label:`≠`},{value:`>`,label:`>`},{value:`<`,label:`<`},{value:`between`,label:`↔`},{value:`blank`,label:`Is blank`},{value:`notBlank`,label:`Not blank`}],c=n,l=o;function d(e){if(!e)return``;let t=typeof e==`string`?new Date(e):e;return isNaN(t.getTime())?``:t.toISOString().split(`T`)[0]}let{conditions:f,combination:p,updateCondition:h,addCondition:_,removeCondition:v}=Q(t(()=>{if(!c.currentFilter?.conditions.length)return[{operator:`=`,value:``,valueTo:``,nextOperator:`and`}];let e=c.currentFilter.combination??`and`;return c.currentFilter.conditions.map(t=>{let n=t;return{operator:n.operator,value:d(n.value),valueTo:d(n.valueTo),nextOperator:n.nextOperator??e}})}).value,c.currentFilter?.combination??`and`);function x(){let e=f.value.filter(e=>e.operator===`blank`||e.operator===`notBlank`?!0:e.operator===`between`?e.value!==``&&e.valueTo!==``:e.value!==``);if(e.length===0){l(`apply`,null);return}l(`apply`,{conditions:e.map(e=>({type:`date`,operator:e.operator,value:e.value||void 0,valueTo:e.valueTo||void 0,nextOperator:e.nextOperator})),combination:`and`})}function S(){l(`apply`,null)}return(t,n)=>(m(),i(`div`,Je,[(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`,Ye,[a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`and`}),onClick:e=>b(h)(o-1,{nextOperator:`and`})},` AND `,10,Xe),a(`button`,{type:`button`,class:u({active:b(f)[o-1]?.nextOperator===`or`}),onClick:e=>b(h)(o-1,{nextOperator:`or`})},` OR `,10,Ze)])):r(`v-if`,!0),a(`div`,Qe,[r(` Operator select `),a(`select`,{value:t.operator,onChange:e=>b(h)(o,{operator:e.target.value})},[(m(),i(e,null,g(s,e=>a(`option`,{key:e.value,value:e.value},y(e.label),9,et)),64))],40,$e),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,tt)):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,nt)],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,rt)):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 `)])]))}}),at={class:`gp-grid-filter-header`},ot=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);ve(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`,at,` Filter: `+y(o.column.headerName??o.column.field),1),r(` Number filter `),D.value?(m(),n(qe,{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(it,{"current-filter":o.currentFilter,onApply:w,onClose:T},null,8,[`current-filter`])],2112)):(m(),i(e,{key:2},[r(` Text filter (default) `),s(Ie,{"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))}}),st=e=>e==null||e===``?o(``):typeof e==`string`?o(e):e,$=(e,t)=>typeof e==`function`?st(e(t)):l(e,t),ct=e=>{let t=e.cellDataType;return t===`text`||t===`boolean`||t===`object`};function lt(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},ct(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 ut=[`data-col-index`,`onPointerdown`],dt=[`onPointerdown`],ft=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(lt)({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,ut))),128))],4)],6))}});function pt(e){let{column:t,rowData:n,rowIndex:r,colIndex:i,isActive:a,isSelected:s,isEditing:c,cellRenderers:l,globalCellRenderer:u}=e,d=oe(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(ae(d,t.valueFormatter))}function mt(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=G(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 ht=[`data-cell-row`,`data-cell-col`,`onPointerdown`,`onDblclick`,`onMouseenter`],gt={key:0,class:`gp-grid-error`},_t={key:1,class:`gp-grid-empty`},vt=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=J(e,t,s.editingCell),o=F(q(e,t,s.activeCell),X(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(J)(t.rowIndex,c,s.editingCell)&&s.editingCell?(m(),n(_(b(mt)({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(pt)({column:a,rowData:t.rowData,rowIndex:t.rowIndex,colIndex:c,isActive:b(q)(t.rowIndex,c,s.activeCell),isSelected:b(X)(t.rowIndex,c,s.selectionRange),isEditing:!1,cellRenderers:s.cellRenderers,globalCellRenderer:s.globalCellRenderer}))))],64))],46,ht))),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`,gt,` Error: `+y(s.error),1)):r(`v-if`,!0),r(` Empty state `),!s.isLoading&&!s.error&&s.totalRows===0?(m(),i(`div`,_t,` No data to display `)):r(`v-if`,!0)],544))}}),yt=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(()=>pt({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))}}),bt={key:1,class:`gp-grid-loading`},xt=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}=he({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),V=t(()=>ce(R.value)),U=t(()=>Array.from(A.value.slots.values())),{handleCellMouseDown:W,handleCellDoubleClick:te,handleFillHandleMouseDown:ne,handleHeaderClick:re,handleHeaderMouseDown:ie,handleHeaderResizeMouseDown:ae,handleKeyDown:oe,handlePaste:G,handleWheel:se,dragState:K}=_e(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:le}=Z({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 q(){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),q()}function J(e,t){let n=w.value;n&&n.setFilter(e,t)}function de(){let e=w.value;e&&e.closeFilterPopup()}function fe(){w.value?.stopPeek()}let Y=t(()=>{let e=A.value.peekCell;if(!e)return null;let t=F.value[e.col],n=U.value.find(t=>t.rowIndex===e.row);return!t||!n?null:{peek:e,column:t,rowData:n.rowData}});function X(e,t){w.value?.input.handleCellMouseEnter(e,t)}function pe(){w.value?.input.handleCellMouseLeave()}function me(){return l.dataSource??(l.rowData?H(l.rowData):ee([]))}function ge(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=me();T.value=e,ge(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=me(),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(G)&&b(G)(...e)},[s(ft,{"header-height":P.value,"scroll-left":k.value,"content-width":b(A).contentWidth,"total-width":V.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(ie),"on-header-resize-mouse-down":b(ae),"core-ref":w.value,"outer-container-ref":g.value,"header-renderers":o.headerRenderers??{},"global-header-renderer":o.headerRenderer},null,8,[`header-height`,`scroll-left`,`content-width`,`total-width`,`is-loading`,`visible-columns-with-indices`,`column-positions`,`column-widths`,`headers`,`sorting-enabled`,`on-header-mouse-down`,`on-header-resize-mouse-down`,`core-ref`,`outer-container-ref`,`header-renderers`,`global-header-renderer`]),s(vt,{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":V.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":U.value,"visible-columns-with-indices":I.value,"column-positions":R.value,"column-widths":B.value,"fill-handle-position":b(le),"drag-state":b(K),"on-scroll":ue,"on-wheel":b(se),"wheel-dampening":o.wheelDampening,"on-cell-mouse-down":b(W),"on-cell-double-click":b(te),"on-cell-mouse-enter":X,"on-cell-mouse-leave":pe,"on-fill-handle-mouse-down":b(ne),"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`,bt,[...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(ot,{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) `),Y.value?(m(),n(yt,{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:fe},null,8,[`peek-cell`,`column`,`row-data`,`container-ref`,`cell-renderers`,`global-cell-renderer`])):r(`v-if`,!0),r(` Column resize line `),b(K).dragType===`column-resize`&&b(K).columnResize?(m(),i(`div`,{key:3,class:`gp-grid-column-resize-line`,style:d({left:`${(R.value[I.value.findIndex(e=>e.originalIndex===b(K).columnResize.colIndex)]??0)+b(K).columnResize.currentWidth-k.value}px`})},null,4)):r(`v-if`,!0),r(` Column move ghost `),b(K).dragType===`column-move`&&b(K).columnMove?(m(),i(e,{key:4},[a(`div`,{class:`gp-grid-column-move-ghost`,style:d({left:`${b(K).columnMove.currentX-b(K).columnMove.ghostWidth/2}px`,top:`${b(K).columnMove.currentY-b(K).columnMove.ghostHeight/2}px`,width:`${b(K).columnMove.ghostWidth}px`,height:`${b(K).columnMove.ghostHeight}px`})},y(F.value[b(K).columnMove.sourceColIndex]?.headerName??F.value[b(K).columnMove.sourceColIndex]?.field??``),5),b(K).columnMove.dropTargetIndex===null?r(`v-if`,!0):(m(),i(`div`,{key:0,class:`gp-grid-column-drop-indicator`,style:d({left:`${(R.value[b(K).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(K).dragType===`row-drag`&&b(K).rowDrag?(m(),i(`div`,{key:5,class:`gp-grid-row-drag-ghost`,style:d({left:`${b(K).rowDrag.currentX+12}px`,top:`${b(K).rowDrag.currentY-o.rowHeight/2}px`,width:`${Math.min(300,V.value)}px`,height:`${o.rowHeight}px`})},null,4)):r(`v-if`,!0)],34))}});function St(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}=he(),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(()=>ce(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}=_e(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}=Z({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:X,isCellActive:q,isCellEditing:J,isCellInFillPreview:fe,buildCellClasses:F}}const Ct=(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{xt as GpGrid,xt 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,G as getCellValue,se as getTotalWidth,K as gridStyles,le as isCellActive,ue as isCellEditing,de as isCellInFillPreview,Y as isCellSelected,pe as isRowVisible,pt as renderCell,mt as renderEditCell,lt as renderHeader,ge as useAutoScroll,Z as useFillHandle,Q as useFilterConditions,ve as useFilterPopup,St as useGpGrid,Ct as useGridData,he as useGridState,_e 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.19.0",
4
+ "version": "0.21.0",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -50,13 +50,13 @@
50
50
  "nuxt3"
51
51
  ],
52
52
  "dependencies": {
53
- "@gp-grid/core": "0.19.0"
53
+ "@gp-grid/core": "0.21.0"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "vue": "^3.4.0"
57
57
  },
58
58
  "devDependencies": {
59
- "tsdown": "^0.22.0",
59
+ "tsdown": "^0.22.5",
60
60
  "typescript": "~5.9.0",
61
61
  "unplugin-vue": "^7.1.0",
62
62
  "vue": "^3.5.13",