argus-table 0.2.0 → 0.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"argus-table.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","e","h","o","n","r","l","c","u","d","f","v","m","p","M","j","s","i","t","e","r","o","t","o","e","t","r","n","t","e","i","o","r","e","n","t","ReactiveElement","templateContent","_decorate","property","customElement","n","i","e","r","s","t","memo","orderByColumnPinning","orderByColumnPinning","o","c","u","s","t","r","l","p","h","v","o","i","n","f","e","nothing","styleMap","repeat","nothing","repeat","repeat","nothing","nothing","repeat","nothing","styleMap","LitElement","_decorate","property","customElement","t$4","e$4","s$3","o$6","n$5","o","t","e","s","r$4","i$6","S$1","n","c$4","i$5","e$3","h$2","r$3","o$5","n$4","a$1","c$3","l$2","p$2","d$2","u$3","i","f$2","b$1","y$1","h","r","t$3","i$4","s$2","e$2","h$1","o$4","n$3","r$2","l$1","c$2","a","u$2","d$1","f$1","v$1","_","m$1","p$1","g","$","y","b","E","A","C","P","V","N","l","c","u","d","f","x","S","v","I","L","z","H","M$1","R","k","Z","j$1","B","D","s$1","i$3","\"finalized\"","o$3","t$2","o$2","r$1","n$2","t$1","e$1","i$2","o$1","__decorate","target","desc","key","decorators","watchers","watchColumns","host","onChange","unwatchColumns","notify","parent","widthConverter","value","text","match","flagConverter","ArgusColumn","_args","#parent","#children","#def","template","n$1","i$1","pathCache","readPath","keys","path","source","finite","resolveColumns","seen","defs","def","index","minWidth","maxWidth","clamp","px","pin","flex","width","auto","fixed","base","getValue","accessor","row","groupOf","column","normalizeOrder","byId","columns","listed","groups","id","order","moveColumn","columnId","to","current","pinOf","group","first","last","next","functionalUpdate","updater","input","cloneState","proto","copy","makeObjectMap","hasOwn","obj","makeStateUpdater","instance","old","isPlainContainer","getEnumerableOwnKeys","MAX_STATE_COMPARE_DEPTH","stateSlicesEqual","stateSlicesEqualAtDepth","depth","keysA","keysB","recordA","recordB","setStateSlice","onChangeKey","isEqual","isFunction","flattenBy","flat","recurse","subArr","item","children","getChildren","arr","memo$1","deps","result","onBeforeCompare","newDeps","memoDeps","depArgs","depsChanged","onAfterCompare","onBeforeUpdate","fn","onAfterUpdate","skipFirstRun","hasRun","tableMemo","memoOptions","debugOptions","table","schedule","untrack","getFunctionNameInfo","parentName","fnKey","staticFnName","splitBy","assignTableAPIs","apis","assignPrototypeAPIs","memoKey","args","self","callMemoOrStaticFn","staticFn","cell_getValue","cell","cell_renderValue","cell_getContext","coreCellsFeature","prototype","getColumnPrototype","features","constructColumn","resolvedColumnDef","columnDef","accessorKey","accessorKeyString","accessorFn","originalRow","columnPrototype","initFns","getIsColumnVisible","getVisibleLeafColumns","getVisibleCells","getVisibleCellsByColumnId","orderLeafColumns","orderedTable","leafColumns","orderByColumnPinning$1","items","getColumnId","getItemsByColumnId","getPinnedVisibleLeafColumns","position","expandRowModel","rowModel","autoResetExpanded","autoResetPageIndex","autoResetSorting","autoResetCellSelection","column_getFlatColumns","col","column_getLeafColumns","table_getDefaultColumnDef","props","feature","constructColumns","columnDefs","groupingColumnDef","table_getAllColumns","table_getAllFlatColumns","table_getAllFlatColumnsById","flatColumns","table_getAllLeafColumns","table_getAllLeafColumnsById","table_getColumn","coreColumnsFeature","getHeaderPrototype","constructHeader","headerPrototype","header","options","getMaxHeaderDepth","maxDepth","formatHeaderGroupId","headerFamily","formatHeaderId","childHeaderId","countPendingHeadersForColumn","count","headers","constructHeaderGroup","headerGroup","pendingParentHeaders","headersToGroup","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","headerGroupInitFns","headerGroups","updateHeaderSpans","colSpan","j","child","rowSpan","chainChild","buildHeaderGroups","allColumns","bottomHeaders","columnsToGroup","collectLeafHeaders","leafHeaders","header_getLeafHeaders","header_getContext","table_getHeaderGroups","table_getFooterGroups","table_getFlatHeaders","table_getLeafHeaders","topHeaders","coreHeadersFeature","getRowPrototype","constructRow","rowPrototype","rowIndex","original","parentId","subRows","createCoreRowModel","_createCoreRowModel","accessRows","rows","originalRows","parentRow","data","table_getCoreRowModel","table_getPreFilteredRowModel","table_getFilteredRowModel","table_getPreGroupedRowModel","table_getGroupedRowModel","table_getPreSortedRowModel","table_getSortedRowModel","table_getPreExpandedRowModel","table_getExpandedRowModel","table_getPrePaginatedRowModel","table_getPaginatedRowModel","table_getRowModel","coreRowModelsFeature","getCellPrototype","constructCell","cellPrototype","row_getDisplayIndex","displayIndex","table_getRowsInDisplayOrder","row_getValue","row_getUniqueValues","row_renderValue","row_getLeafRows","table_getMaxSubRowDepth","row_getParentRow","row_getParentRows","parentRows","currentRow","row_getAllCells","cache","cells","row_getAllCellsByColumnId","table_getRowId","table_getRow","searchAll","rowId","coreRowsFeature","table_syncExternalStateToBaseAtoms","currentState","externalState","state","capturedState","baseAtom","rawExternalState","compare","table_publishExternalState","table_reset","snap","table_mergeOptions","newOptions","mergedOptions","descriptors","atoms","initialState","table_setOptions","coreFeatures","tableFeatures","atomToStore","store","atom","createReactiveSystem","link","prevDep","sub","dep","nextDep","version","prevSub","newLink","unlink","nextSub","unwatched","propagate","stack","flags","isValidLink","subSubs","checkDirty","checkDepth","dirty","update","subs","shallowPropagate","firstSub","hasMultipleSubs","checkLink","toObserver","isObserver","nextHandler","errorHandler","completionHandler","queuedEffects","cycle","effect","purgeDeps","notifyIndex","queuedEffectsLength","activeSub","batchDepth","batch","flush","depsTail","createAtom","isComputed","valueOrFn","getter","obs","observerOrFn","observed","oldValue","newValue","run","effectObj","shallow","objA","objB","getOwnKeys","getInitialTableState","constructTable","_reactivity","tableOptions","_columnMeta","_filterMeta","_tableMeta","featuresList","atomKey","_atom","wrappedAtom","syncExternal","syncAtomToWrappedSub","syncWrappedToAtomSub","stateKeys","externalAtom","reactiveState","controlledState","controlledValue","snapshot","getDefaultColumnPinningState","column_pin","columnIds","table_setColumnPinning","column_getCanPin","leafColumn","column_getIsPinned","start","end","column_getPinnedIndex","row_getCenterVisibleCells","allCells","startAndEnd","row_getStartVisibleCells","allVisibleCells","row_getEndVisibleCells","table_resetColumnPinning","defaultState","table_getIsSomeColumnsPinned","pinningState","table_getStartHeaderGroups","leafColumnsById","orderedLeafColumns","table_getEndHeaderGroups","table_getCenterHeaderGroups","table_getStartFooterGroups","table_getEndFooterGroups","table_getCenterFooterGroups","table_getStartFlatHeaders","leftHeaderGroups","table_getEndFlatHeaders","rightHeaderGroups","table_getCenterFlatHeaders","centerHeaderGroups","table_getStartLeafHeaders","table_getEndLeafHeaders","table_getCenterLeafHeaders","table_getStartLeafColumns","table_getEndLeafColumns","table_getCenterLeafColumns","table_getPinnedLeafColumns","table_getStartVisibleLeafColumns","table_getEndVisibleLeafColumns","table_getCenterVisibleLeafColumns","table_getPinnedVisibleLeafColumns","orderByColumnPinning","columnPinning","itemsByColumnId","ordered","columnPinningFeature","getDefaultColumnSizingState","getDefaultColumnSizingColumnDef","column_getSize","defaultSizes","columnSizing","columnSize","buildColumnOffsets","starts","afters","sizes","size","after","table_getColumnOffsets","toOffsetsKey","column_getStart","column_getAfter","column_resetSize","table_setColumnSizing","rest","sumHeaderSize","sum","header_getSize","header_getStart","prevSiblingHeader","table_resetColumnSizing","sumColumnSizes","table_getTotalSize","table_getStartTotalSize","table_getCenterTotalSize","table_getEndTotalSize","columnSizingFeature","reSplitAlphaNumeric","constructSortFn","sortFn","dataValueA","rowA","dataValueB","rowB","resolveDataValue","sortFn_alphanumeric","toString","dataValue","compareAlphanumeric","sortFn_text","compareBasic","sortFn_datetime","toDateSortValue","sortFn_basic","ai","bi","aLen","aStr","bLen","bStr","aIsNumeric","isDigit","bIsNumeric","aEnd","findChunkEnd","bEnd","stringComparison","compareStringChunks","numericComparison","compareNumericChunks","countRemainingChunks","charCode","str","isNumeric","aLength","aStart","bLength","bStart","minLength","aCode","bCode","aSignificantStart","bSignificantStart","aSignificantLength","bSignificantLength","an","parseSmallInt","bn","getDefaultSortingState","table_setSorting","table_resetSorting","table_autoResetSorting","column_getAutoSortFn","sortFns","firstRows","sortFnName","isString","column_getAutoSortDir","column_getSortFn","column_toggleSorting","nextSortingOrder","column_getNextSortingOrder","multi","column_getCanMultiSort","hasManualValue","existingIndex","existingSorting","newSorting","sortAction","nextDesc","isMultiMode","column_getFirstSortDir","firstSortDirection","isSorted","column_getIsSorted","column_getCanSort","columnSort","column_getSortIndex","column_clearSorting","column_getToggleSortingHandler","canSort","rowSortingFeature","storeReactivityBindings","sortedRowModel","sorting","prev","model","sortRows","sortKeys","read","resolve","sortUndefined","sorted","sign","defaultRowId","toTanStack","createTableModel","initial","resolved","tanStackById","views","sizing","sizingState","merged","orderState","rowViews","indexById","orderedColumns","pinned","side","buildViews","center","view","sort","entry","clamped","RowLayout","top","body","bottom","section","ariaRowIndex","controllable","controlled","RowPool","#size","#pinned","#slots","keep","ids","slot","#free","entries","ScrollScale","logical","#logical","cap","#cap","#landed","range","physical","landed","total","max","PageCache","#getRowId","#rowCount","#totalKnown","#pages","#indexById","#failed","pages","page","#inFlight","asked","#drop","#setCount","known","region","announce","doc","message","measureColumns","wanted","widths","root","AutoWidths","#state","#fontsPending","#requestUpdate","requestUpdate","kept","due","hasLoadedRows","measured","fontsLoading","#remeasureAfterFonts","any","ColumnChildrenController","#host","#dirty","#defs","DataController","#timer","#abortAll","#range","#cache","#config","#reset","moved","#load","errors","#errors","carry","controller","#requests","margin","#fetch","pending","error","response","SETTLE_MS","PinScrollController","#scroller","scroller","#attach","#attached","#onScroll","#resize","shadow","#left","dropTarget","from","slots","draggedId","gap","direction","at","THRESHOLD","EDGE","MAX_SPEED","INTERACTIVE","canStartReorder","down","startReorderDrag","startX","startY","dragging","frame","same","tick","area","speed","listeners","cleanup","event","move","up","swallowClick","cancel","listen","stop","remove","released","startResizeDrag","onWidth","startWidth","handle","TableController","getMeasurementKey","createLazyMeasurementsView","prop","receiver","memo","opts","isInitial","memoizedFunction","getDeps","notUndefined","msg","approxEqual","debounce","timeoutId","targetWindow","ms","classifyScrollEvent","isScrolling","pendingWrite","offset","scrollOffset","elementMax","holdOffset","clampedMaxAtWrite","isAnimating","phase","externalRetiresCommand","kind","command","FLING_WINDOW_MS","flingSpedUp","samples","mid","recent","before","flingCaught","_isIOSResult","isIOSWebKit","mtp","_iosMomentumOverridesWritesResult","iosMomentumOverridesWrites","momentumOverridesWrites","touchListenerOptions","IosGesture","ownReadBack","external","win","onTouchStart","onTouchEnd","tail","getRect","element","clientWidth","clientHeight","createFrameQueue","defaultKeyExtractor","defaultRangeExtractor","overscan","len","observeElementRect","handler","rect","cb","height","frames","observer","addEventListenerOptions","supportsScrollend","observeOffset","registerScrollendEvent","fallback","readOffset","createHandler","endHandler","observeElementOffset","horizontal","el","isRtl","measureElement","box","cachedSize","elementScroll","_a","adjustedOffset","adjustments","isRtlElement","scrollElement","initialScrollPhase","behavior","atTarget","isSmoothScroll","isAppendWithTrim","nextCount","firstKey","getNextKey","removedKeys","removedCount","prevCount","getPreviousKey","retainedCount","Virtualizer","now","_b","_ro","_frames","delivering","observeQueued","pendingObservations","get","measureEntry","node","cacheKey","cachedNode","opts2","prevOptions","anchor","followOnAppend","edgeKeysChanged","measurements","previousItems","prevFirstKey","prevLastKey","anchorDelta","anchorKey","anchorOffset","newMeasurements","idx","getItemKey","anchorItem","newOffset","sync","cached","wasOverscrolled","elementOffset","prevOffset","prevDirection","queued","sample","maxAtWrite","lanes","itemSizeCache","enabled","min","need","runningStart","paddingStart","scrollMargin","prevIdx","measuredSize","laneLastIndex","laneEnds","filledLanes","m","cachedLane","lane","shouldCacheLane","laneAssignmentMode","prevIndex","prevInLane","bestLane","bestEnd","bestIdx","outerSize","maxScrollOffset","listEnd","calculateRangeImpl","startIndex","endIndex","rangeExtractor","attributeName","indexStr","scrollIndex","bufferSize","minIndex","maxIndex","key2","prevNode","_c","itemStart","itemSize","delta","wasAtEnd","prevTotalSize","defaultShouldAdjust","shouldAdjustScroll","adjustedSync","virtualItems","indexes","measurement","hold","useFlat","findNearestBinarySearch","write","lowMaxes","done","property","style","priority","crossSize","crossSizeBefore","threshold","align","toOffset","maxOffset","toOffset2","initialAlign","offsetInfo","lastIdx","endByLane","val","writtenOffset","targetOffset","STABLE_FRAMES","targetChanged","viewport","distance","keepSmooth","low","high","middle","currentValue","getCurrentValue","findNearestBinarySearchFlat","lastIndex","startIndex2","endIndex2","limit","endPerLane","pos","startPerLane","VirtualizerControllerBase","changed","partial","VirtualizerController","VirtualController","#getScrollElement","getScrollElement","#virtual","#element","report","#standIn","#top","#scale","#write","scale","round","wasScaled","#anchor","scaled","shift","#pool","rowHeight","RANGE_CHANGE","SORT_CHANGE","COLUMN_RESIZE","COLUMN_REORDER","ROW_CLICK","CELL_CLICK","LOAD_ERROR","fire","name","HEIGHTS","SAFE_HEIGHT","MARGIN","dpr","onResize","listener","maxElementHeight","probe","bodyCap","extra","watchMaxElementHeight","u$1","p","M","p$3","h$3","v$2","w","toChild","content","formatValue","cellSlot","colIndex","headerSlot","pinnedSlot","cellParts","parts","pinnedRow","ariaSort","pinStyle","renderBody","totalSize","renderRow","active","firstRowIndex","loading","retry","renderCell","activeCol","placeholder","tabStop","retryLabel","renderLightDom","headerContent","pinnedContent","cellContent","pinnedCell","context","renderHeader","handlers","headerParts","drag","resizeHandle","renderPinnedRows","baseStyles","attachGridInternals","internals","sortColumnOf","RESIZE_STEP","HEADER","layoutOf","gridCell","role","gridRowOf","layout","pinShadow","rowPx","track","ArgusTable","#columnsProp","#dataProp","#overscan","#sorting","#sizing","#order","#appliedReorders","#appliedResizes","#autoWidths","#autoWidthsChanged","#internals","#table","#columns","#columnsChanged","#warnedColumns","#data","#scrollToTop","#pinScroll","#rowPx","#window","#focusPending","#lastRange","#onRetry","button","#headerHandlers","#requestSort","#direction","#requestResize","#startReorder","#requestResizes","#onKeydown","inHeader","arrow","towardEnd","#moveByKey","#currentWidth","corner","#activate","bodyFirst","bodyLast","fit","#moveTo","#onFocusin","#active","#gridRowId","#onClick","#observeProbe","#unwatchMaxHeight","#probeObserver","#contentEnd","targets","#effectiveColumns","autoWidths","#pushedAutoWidths","#reconcileActive","unknownTotal","#rowId","pinnedWidth","activeIn","firstIndex","#drag","#loading","#measureRowHeight","#lightDomEnd","#measureAutoWidths","#focusActive","details","detail","#announceMove","#announceMoved","#appliedSort","over","loaded","firstByPage","#placeholderId","found","unloaded","sized","applied","#requestReorder","step","#dropSlots","#scrollArea","ltr","left"],"sources":["../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js","../../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/template-content.js","../../src/argus-column.ts","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js","../../../core/src/columns/resolve-columns.ts","../../../core/src/columns/column-order.ts","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/columns/constructColumn.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/featureStubs.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/constructHeader.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/buildHeaderGroups.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/rows/constructRow.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/row-models/createCoreRowModel.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/cells/constructCell.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/coreFeatures.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/helpers/tableFeatures.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/reactivity/coreReactivityFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/alien.js","../../../../node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/atom.js","../../../../node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/shallow.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/table/constructTable.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-pinning/columnPinningFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-pinning/orderByColumnPinning.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-pinning/columnPinningFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/row-sorting/sortFns.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/row-sorting/rowSortingFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/row-sorting/rowSortingFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/store-reactivity-bindings.js","../../../core/src/table/sorted-row-model.ts","../../../core/src/table/create-table.ts","../../../core/src/grid/row-layout.ts","../../../core/src/state/controllable.ts","../../../core/src/virtual/row-pool.ts","../../../core/src/virtual/scroll-scale.ts","../../../core/src/data/page-cache.ts","../../src/announce.ts","../../src/controllers/auto-width.ts","../../src/controllers/column-children.ts","../../src/controllers/data-controller.ts","../../src/controllers/pin-scroll-controller.ts","../../src/controllers/reorder-drag.ts","../../src/controllers/resize-drag.ts","../../src/controllers/table-controller.ts","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/scroll-classifier.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/ios-gesture.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../../node_modules/.pnpm/@tanstack+lit-virtual@3.15.3_lit@3.3.3/node_modules/@tanstack/lit-virtual/dist/esm/index.js","../../src/controllers/virtual-controller.ts","../../src/events.ts","../../src/max-height.ts","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive-helpers.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/repeat.js","../../src/render/content.ts","../../src/render/body.ts","../../src/render/cells.ts","../../src/render/header.ts","../../src/render/pinned-rows.ts","../../src/styles/base.ts","../../src/argus-table.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as r,Directive as e,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=r(class extends e{constructor(t){if(super(t),t.type!==n.CHILD)throw Error(\"templateContent can only be used in child bindings\")}render(r){return this.vt===r?t:(this.vt=r,document.importNode(r.content,!0))}});export{o as templateContent};\n//# sourceMappingURL=template-content.js.map\n","import { html, ReactiveElement, type ComplexAttributeConverter } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { templateContent } from 'lit/directives/template-content.js';\nimport type {\n CellContent,\n CellContext,\n ColumnAlign,\n ColumnDef,\n ColumnPin,\n ColumnWidth,\n} from './types.js';\n\n/**\n * Tables watching their `<argus-column>` children, by table element. Columns\n * call their parent's entry when they connect, disconnect or change, so the\n * table needs no MutationObserver on its own children (which would fire on\n * every light-DOM cell render while scrolling).\n */\nconst watchers = new WeakMap<Element, () => void>();\n\n/** Calls `onChange` whenever an `<argus-column>` child of `host` is added, removed, moved or changed. */\nexport function watchColumns(host: Element, onChange: () => void): void {\n watchers.set(host, onChange);\n}\n\nexport function unwatchColumns(host: Element): void {\n watchers.delete(host);\n}\n\nfunction notify(parent: Element | null): void {\n if (parent) watchers.get(parent)?.();\n}\n\n/** `width` attribute: `\"90\"` or `\"90px\"` → 90, `\"auto\"`, `\"2fr\"` → `{ flex: 2 }`. */\nconst widthConverter: ComplexAttributeConverter<ColumnWidth | undefined> = {\n fromAttribute(value) {\n if (value === null) return undefined;\n const text = value.trim().toLowerCase();\n if (text === 'auto') return 'auto';\n const match = /^(\\d*\\.?\\d+)(px|fr)?$/.exec(text);\n if (!match) return undefined;\n const n = Number(match[1]);\n return match[2] === 'fr' ? { flex: n } : n;\n },\n};\n\n/**\n * Boolean attribute with a default that may be `true`: absent → unset (the\n * default applies), `\"false\"` → `false`, anything else → `true`.\n */\nconst flagConverter: ComplexAttributeConverter<boolean | undefined> = {\n fromAttribute(value) {\n return value === null ? undefined : value.trim().toLowerCase() !== 'false';\n },\n};\n\n/**\n * One column of the parent `<argus-table>`, written as markup instead of an entry in\n * its `columns` property. It is data only and renders nothing.\n *\n * Only direct children of the table count, in document order. A non-empty `columns`\n * property wins over the children. Adding, removing, moving or changing a column\n * updates the table; sizes, order and sorting are kept by `column-id`.\n *\n * A `<template>` child is the content of every cell in the column (static: the same\n * for each row). Set the `cell` property for content that depends on the row.\n *\n * @summary Declarative column of an `<argus-table>`.\n */\n@customElement('argus-column')\nexport class ArgusColumn<T = unknown> extends ReactiveElement {\n /** Stable key, used in state objects, events and persistence. Must be unique within the table. */\n @property({ attribute: 'column-id' })\n columnId = '';\n\n /** Header content: text as an attribute; a Lit template, a node or a function as a property. */\n @property()\n header?: CellContent | (() => CellContent);\n\n /**\n * How to read the cell value: a property path such as `customer.name`, or (as a\n * property) a function of the row and its index.\n */\n @property()\n accessor?: string | ((row: T, index: number) => unknown);\n\n /** Cell content from the row: `(row, context) => content`. Property only; wins over a `<template>` child. */\n @property({ attribute: false })\n cell?: (row: T, context: CellContext<T>) => CellContent;\n\n /** Width: `90` (px), `auto` to fit the content, or `2fr` for a share of the free space. Default: 150 px. */\n @property({ converter: widthConverter })\n width?: ColumnWidth;\n\n /** Lower bound for resizing and for flex columns, in px. Default: 40. */\n @property({ attribute: 'min-width', type: Number })\n minWidth?: number;\n\n /** Upper bound for resizing, in px. Default: no limit. */\n @property({ attribute: 'max-width', type: Number })\n maxWidth?: number;\n\n /** Pins the column to the `start` or `end` side. */\n @property()\n pin?: ColumnPin;\n\n /** Text alignment: `start`, `center` or `end`. Default: `start`. */\n @property()\n align?: ColumnAlign;\n\n /** Whether the header can be clicked to sort. Default: `false`. */\n @property({ converter: flagConverter })\n sortable?: boolean;\n\n /** Whether the column can be resized. Default: `true`; `resizable=\"false\"` turns it off. */\n @property({ converter: flagConverter })\n resizable?: boolean;\n\n /** Whether the column can be moved. Default: `true`; `reorderable=\"false\"` turns it off. */\n @property({ converter: flagConverter })\n reorderable?: boolean;\n\n #parent: Element | null = null;\n #def: ColumnDef<T> | undefined;\n readonly #children = new MutationObserver(() => {\n this.#def = undefined;\n this.requestUpdate();\n });\n\n /** Data only: no shadow root, nothing rendered. */\n protected override createRenderRoot(): HTMLElement {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#children.observe(this, { childList: true });\n this.#parent = this.parentElement;\n notify(this.#parent);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#children.disconnect();\n const parent = this.#parent;\n this.#parent = null;\n notify(parent);\n }\n\n /**\n * The column as the table reads it. Unset fields stay `undefined`, which the\n * table reads as its defaults. An unknown `pin` is ignored and an unknown\n * `align` falls back to `start`.\n */\n toColumnDef(): ColumnDef<T> {\n if (this.#def) return this.#def;\n const template = [...this.children].find((c) => c instanceof HTMLTemplateElement);\n return (this.#def = {\n id: this.columnId,\n header: this.header,\n accessor: this.accessor,\n cell: this.cell ?? (template && (() => html`${templateContent(template)}`)),\n width: this.width,\n minWidth: this.minWidth,\n maxWidth: this.maxWidth,\n pin: this.pin,\n align: this.align,\n sortable: this.sortable,\n resizable: this.resizable,\n reorderable: this.reorderable,\n });\n }\n\n protected override willUpdate(): void {\n this.#def = undefined;\n }\n\n protected override updated(): void {\n notify(this.#parent);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'argus-column': ArgusColumn;\n }\n}\n","import{noChange as t}from\"../lit-html.js\";import{directive as e,Directive as r,PartType as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const n=\"important\",i=\" !\"+n,o=e(class extends r{constructor(t){if(super(t),t.type!==s.ATTRIBUTE||\"style\"!==t.name||t.strings?.length>2)throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\")}render(t){return Object.keys(t).reduce((e,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes(\"-\")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${s};`},\"\")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes(\"-\")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r=\"string\"==typeof e&&e.endsWith(i);t.includes(\"-\")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:\"\"):s[t]=e}}return t}});export{o as styleMap};\n//# sourceMappingURL=style-map.js.map\n","import type { ColumnAlign, ColumnDef, ColumnPin } from '../types.js';\n\n/** Width used when a column sets none. */\nexport const DEFAULT_WIDTH = 150;\n/** Lower bound used when a column sets no `minWidth`. */\nexport const DEFAULT_MIN_WIDTH = 40;\n\n/** A column after defaults, bounds and the accessor have been resolved. */\nexport interface ResolvedColumn<TData, TContent> {\n id: string;\n /** Position in the `columns` array. */\n index: number;\n header: ColumnDef<TData, TContent>['header'];\n cell: ColumnDef<TData, TContent>['cell'];\n /** Reads the cell value; returns `undefined` when the column has no accessor. */\n getValue: (row: TData, index: number) => unknown;\n hasAccessor: boolean;\n /** Base width in px. For a flex column this is its minimum track size. */\n width: number;\n /** Share of free space for `{ flex }` columns, otherwise `undefined`. Pinned columns never flex. */\n flex: number | undefined;\n /** `true` for `width: 'auto'`: the table measures the content and passes the width in. */\n auto: boolean;\n minWidth: number;\n maxWidth: number;\n pin: ColumnPin | undefined;\n sortable: boolean;\n resizable: boolean;\n reorderable: boolean;\n align: ColumnAlign;\n}\n\nconst pathCache = new Map<string, readonly string[]>();\n\n/**\n * Reads a dotted property path such as `'customer.name'`. Returns `undefined`\n * as soon as a step is `null` or `undefined`, like optional chaining.\n */\nexport function readPath(source: unknown, path: string): unknown {\n let keys = pathCache.get(path);\n if (!keys) {\n keys = path.split('.');\n pathCache.set(path, keys);\n }\n let value: unknown = source;\n for (const key of keys) {\n if (value === null || value === undefined) return undefined;\n value = (value as Record<string, unknown>)[key];\n }\n return value;\n}\n\nfunction finite(value: number | undefined): number | undefined {\n return value !== undefined && Number.isFinite(value) ? value : undefined;\n}\n\n/**\n * Normalizes `ColumnDef`s: checks ids, applies defaults and clamps widths.\n *\n * @throws if an id is empty or used twice, because state and events are keyed by id.\n */\nexport function resolveColumns<TData, TContent>(\n defs: readonly ColumnDef<TData, TContent>[],\n): ResolvedColumn<TData, TContent>[] {\n const seen = new Set<string>();\n return defs.map((def, index) => {\n if (typeof def.id !== 'string' || def.id === '') {\n throw new Error(`argus-table: column at index ${String(index)} needs a non-empty string id.`);\n }\n if (seen.has(def.id)) {\n throw new Error(`argus-table: column id '${def.id}' is used more than once.`);\n }\n seen.add(def.id);\n\n const minWidth = Math.max(0, finite(def.minWidth) ?? DEFAULT_MIN_WIDTH);\n const maxWidth = Math.max(minWidth, finite(def.maxWidth) ?? Number.POSITIVE_INFINITY);\n const clamp = (px: number) => Math.min(maxWidth, Math.max(minWidth, px));\n\n const pin = def.pin === 'start' || def.pin === 'end' ? def.pin : undefined;\n const { width } = def;\n // Pinned columns need a known width for their sticky offsets, so they never flex.\n const flex =\n pin === undefined &&\n typeof width === 'object' &&\n Number.isFinite(width.flex) &&\n width.flex > 0\n ? width.flex\n : undefined;\n const auto = width === 'auto';\n // An auto column shows the default width until it is measured.\n const fixed = typeof width === 'number' ? finite(width) : undefined;\n const base = flex !== undefined ? minWidth : clamp(fixed ?? DEFAULT_WIDTH);\n\n const { accessor } = def;\n const getValue: ResolvedColumn<TData, TContent>['getValue'] =\n typeof accessor === 'function'\n ? accessor\n : typeof accessor === 'string'\n ? (row) => readPath(row, accessor)\n : () => undefined;\n\n return {\n id: def.id,\n index,\n header: def.header,\n cell: def.cell,\n getValue,\n hasAccessor: accessor !== undefined,\n width: base,\n flex,\n auto,\n minWidth,\n maxWidth,\n pin,\n sortable: def.sortable === true,\n resizable: def.resizable !== false,\n reorderable: def.reorderable !== false,\n align: def.align ?? 'start',\n };\n });\n}\n","import type { ColumnOrderState, ColumnPin } from '../types.js';\n\n/** What ordering needs to know about a column. */\nexport interface OrderableColumn {\n id: string;\n pin: ColumnPin | undefined;\n reorderable: boolean;\n}\n\ntype Group = ColumnPin | 'center';\n\nconst groupOf = (column: OrderableColumn): Group => column.pin ?? 'center';\n\n/**\n * The order the table shows: start-pinned, scrolling, end-pinned columns, each\n * group in the sequence of `order`. Unknown and repeated ids are dropped; columns\n * the order doesn't list follow the listed ones of their group, in `columns` order.\n */\nexport function normalizeOrder(\n order: readonly string[],\n columns: readonly OrderableColumn[],\n): ColumnOrderState {\n const byId = new Map(columns.map((c) => [c.id, c]));\n const listed = new Set<string>();\n const groups: Record<Group, string[]> = { start: [], center: [], end: [] };\n for (const id of order) {\n const column = byId.get(id);\n if (!column || listed.has(id)) continue;\n listed.add(id);\n groups[groupOf(column)].push(id);\n }\n for (const column of columns) {\n if (!listed.has(column.id)) groups[groupOf(column)].push(column.id);\n }\n return [...groups.start, ...groups.center, ...groups.end];\n}\n\n/**\n * The order after moving a column to position `to` (0-based, in the whole order\n * as the table shows it, counted after the move). `undefined` if the column can't\n * move, `to` is outside the column's group, or nothing changes.\n */\nexport function moveColumn(\n order: readonly string[],\n columns: readonly OrderableColumn[],\n columnId: string,\n to: number,\n): ColumnOrderState | undefined {\n const column = columns.find((c) => c.id === columnId);\n if (!column?.reorderable || !Number.isInteger(to)) return undefined;\n const current = normalizeOrder(order, columns);\n const from = current.indexOf(columnId);\n if (to === from) return undefined;\n const pinOf = new Map(columns.map((c) => [c.id, groupOf(c)]));\n const group = groupOf(column);\n const first = current.findIndex((id) => pinOf.get(id) === group);\n const last = current.findLastIndex((id) => pinOf.get(id) === group);\n if (to < first || to > last) return undefined;\n const next = current.filter((id) => id !== columnId);\n next.splice(to, 0, columnId);\n return next;\n}\n","//#region src/utils.ts\n/**\n* Applies a TanStack updater to a value.\n*\n* If the updater is a function it is called with the previous value; otherwise the updater value is returned directly.\n*/\nfunction functionalUpdate(updater, input) {\n\treturn typeof updater === \"function\" ? updater(input) : updater;\n}\n/**\n* Clones table state values while preserving non-plain objects.\n*\n* Plain objects and arrays are copied recursively so state updates can avoid mutating existing references.\n*/\nfunction cloneState(value) {\n\tif (Array.isArray(value)) return value.map(cloneState);\n\tif (value && typeof value === \"object\") {\n\t\tconst proto = Object.getPrototypeOf(value);\n\t\tif (proto !== Object.prototype && proto !== null) return value;\n\t\tconst copy = proto === null ? makeObjectMap() : {};\n\t\tconst keys = Object.keys(value);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\tObject.defineProperty(copy, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: cloneState(value[key]),\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t\treturn copy;\n\t}\n\treturn value;\n}\n/**\n* Copies prototype-instance own properties without carrying over lazy memo\n* closures or the per-row cell cache, both of which are bound to the source\n* instance (cached cells reference the source row).\n*/\nfunction copyInstancePropertiesWithoutMemos(target, source) {\n\tconst keys = Object.keys(source);\n\tconst targetRecord = target;\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tif (!key.startsWith(\"_memo_\") && key !== \"_cellsCache\") targetRecord[key] = source[key];\n\t}\n\treturn target;\n}\n/**\n* Creates an object intended only for string-keyed dictionary lookups.\n*\n* The null prototype keeps user-controlled ids such as `__proto__` and\n* `hasOwnProperty` as plain data keys.\n*/\nfunction makeObjectMap() {\n\treturn Object.create(null);\n}\n/**\n* Checks whether an object owns a key, including null-prototype dictionaries.\n*/\nfunction hasOwn(obj, key) {\n\treturn Object.prototype.hasOwnProperty.call(obj, key);\n}\n/**\n* Creates a table state updater for a single state slice.\n*\n* The updater writes through the table base atom for the slice and supports both value and functional updater forms.\n*/\nfunction makeStateUpdater(key, instance) {\n\treturn (updater) => {\n\t\t(instance.options.atoms?.[key] ?? instance.baseAtoms[key]).set((old) => functionalUpdate(updater, old));\n\t};\n}\n/**\n* Checks whether a value is an array or a plain (or null-prototype) object.\n* Class instances, dates, and other exotic values compare by reference only,\n* mirroring the `cloneState` plain-object policy.\n*/\nfunction isPlainContainer(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (Array.isArray(value)) return true;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n/**\n* Returns every enumerable own key, including symbols and non-index array\n* properties. Keeping key presence explicit distinguishes sparse array holes\n* from entries whose value is `undefined`.\n*/\nfunction getEnumerableOwnKeys(value) {\n\treturn Reflect.ownKeys(value).filter((key) => Object.prototype.propertyIsEnumerable.call(value, key));\n}\nconst MAX_STATE_COMPARE_DEPTH = 3;\n/**\n* Structurally compares two state slice values as deeply as stock feature\n* state can nest and no deeper.\n*\n* Three container levels cover flat maps and arrays, arrays of state objects,\n* array-valued filter values, and `columnResizing.columnSizingStart` tuples.\n* Deeper containers and non-plain values compare by reference. A `false`\n* result is always safe: the state update simply proceeds.\n*/\nfunction stateSlicesEqual(a, b) {\n\treturn stateSlicesEqualAtDepth(a, b, MAX_STATE_COMPARE_DEPTH);\n}\nfunction stateSlicesEqualAtDepth(a, b, depth) {\n\tif (Object.is(a, b)) return true;\n\tif (depth <= 0 || !isPlainContainer(a) || !isPlainContainer(b)) return false;\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\t}\n\tconst keysA = getEnumerableOwnKeys(a);\n\tconst keysB = getEnumerableOwnKeys(b);\n\tif (keysA.length !== keysB.length) return false;\n\tconst recordA = a;\n\tconst recordB = b;\n\tfor (let i = 0; i < keysA.length; i++) {\n\t\tconst key = keysA[i];\n\t\tif (!Object.prototype.propertyIsEnumerable.call(b, key)) return false;\n\t\tif (!stateSlicesEqualAtDepth(recordA[key], recordB[key], depth - 1)) return false;\n\t}\n\treturn true;\n}\n/**\n* Routes a state slice update through the slice's `on<State>Change` handler,\n* preserving the owner's current reference for structural no-ops.\n*\n* Equality is evaluated inside the updater received by the state owner, never\n* against the table's potentially stale controlled snapshot. This keeps\n* same-tick updates composable in queued host containers such as React state,\n* evaluates the original updater only when the owner applies it, and lets atom\n* owners suppress notifications by returning their existing reference.\n*\n* A user-provided change handler is still invoked for a no-op because only that\n* handler's state container can know its latest queued value. The guarded\n* updater returns that container's previous reference, preventing a state write\n* or render in state containers with identity bailout semantics.\n*\n* Hot-path slices that skip guarding entirely (selection maps that scale with\n* row count, pointer-frequency resize state) call their change handler\n* directly instead of routing through this util. Custom feature slices with a\n* cheaper or semantic-aware comparison can pass `isEqual` to override the\n* structural default.\n*/\nfunction setStateSlice(instance, key, updater, isEqual = stateSlicesEqual) {\n\tconst onChangeKey = `on${key.charAt(0).toUpperCase()}${key.slice(1)}Change`;\n\tconst onChange = instance.options[onChangeKey];\n\tif (!onChange) return;\n\tonChange((current) => {\n\t\tconst next = functionalUpdate(updater, current);\n\t\treturn isEqual(current, next) ? current : next;\n\t});\n}\n/**\n* Returns whether a value is a function.\n*/\nfunction isFunction(d) {\n\treturn d instanceof Function;\n}\n/**\n* Flattens a tree of nodes by recursively reading child nodes.\n*\n* The original nodes are preserved in depth-first order.\n*/\nfunction flattenBy(arr, getChildren) {\n\tconst flat = [];\n\tconst recurse = (subArr) => {\n\t\tsubArr.forEach((item) => {\n\t\t\tflat.push(item);\n\t\t\tconst children = getChildren(item);\n\t\t\tif (children.length) recurse(children);\n\t\t});\n\t};\n\trecurse(arr);\n\treturn flat;\n}\n/**\n* Creates a dependency-tracked memoized function for table internals.\n*\n* The memo recomputes only when its dependency tuple changes and can emit debug timing information.\n*/\nconst memo = ({ fn, memoDeps, onAfterCompare, onAfterUpdate, onBeforeCompare, onBeforeUpdate }) => {\n\tlet deps = [];\n\tlet result;\n\tconst memoizedFn = (depArgs) => {\n\t\tonBeforeCompare?.();\n\t\tconst newDeps = memoDeps?.(depArgs);\n\t\tlet depsChanged = !newDeps || newDeps.length !== deps?.length;\n\t\tif (!depsChanged && newDeps) {\n\t\t\tfor (let i = 0; i < newDeps.length; i++) if (newDeps[i] !== deps[i]) {\n\t\t\t\tdepsChanged = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tonAfterCompare?.(depsChanged);\n\t\tif (!depsChanged) return result;\n\t\tdeps = newDeps;\n\t\tonBeforeUpdate?.();\n\t\tresult = fn(...newDeps ?? []);\n\t\tonAfterUpdate?.(result);\n\t\treturn result;\n\t};\n\treturn memoizedFn;\n};\n/**\n* Wraps a callback so that its first invocation is skipped.\n*\n* Row-model `onAfterUpdate` hooks schedule auto-resets when their inputs\n* change. The initial computation of a row model is not a change, so state\n* resets must not fire for it — otherwise merely reading a row model on mount\n* would wipe initial or controlled state.\n*/\nfunction skipFirstRun(fn) {\n\tlet hasRun = false;\n\treturn () => {\n\t\tif (!hasRun) {\n\t\t\thasRun = true;\n\t\t\treturn;\n\t\t}\n\t\tfn();\n\t};\n}\nconst pad = (str, num) => {\n\tstr = String(str);\n\twhile (str.length < num) str = \" \" + str;\n\treturn str;\n};\n/**\n* Creates a table-aware memoized function.\n*\n* This wraps `memo` with table debug options and feature metadata so row models and derived APIs can share consistent diagnostics.\n*/\nfunction tableMemo({ feature, fnName, objectId, onAfterUpdate, table, ...memoOptions }) {\n\tlet startCalcTime;\n\tlet endCalcTime;\n\tlet runCount = 0;\n\tlet debug;\n\tif (process.env.NODE_ENV === \"development\") {\n\t\tconst { debugAll } = table.options;\n\t\tconst { parentName } = getFunctionNameInfo(fnName, \".\");\n\t\tconst debugByParent = table.options[`debug${(parentName != \"table\" ? parentName + \"s\" : parentName).replace(parentName, parentName.charAt(0).toUpperCase() + parentName.slice(1))}`];\n\t\tconst debugByFeature = feature ? table.options[`debug${feature.charAt(0).toUpperCase() + feature.slice(1)}`] : false;\n\t\tdebug = debugAll || debugByParent || debugByFeature;\n\t}\n\tfunction logTime(time, depsChanged) {\n\t\tconst runType = runCount === 0 ? \"(1st run)\" : depsChanged ? \"(rerun #\" + runCount + \")\" : \"(cache)\";\n\t\trunCount++;\n\t\tconsole.groupCollapsed(`%c⏱ ${pad(`${time.toFixed(1)} ms`, 12)} %c${runType}%c ${fnName}%c ${objectId ? `(${fnName.split(\".\")[0]}Id: ${objectId})` : \"\"}`, `font-size: .6rem; font-weight: bold; ${depsChanged ? `color: hsl(\n ${Math.max(0, Math.min(120 - Math.log10(time) * 60, 120))}deg 100% 31%);` : \"\"} `, `color: ${runCount < 2 ? \"#FF00FF\" : \"#FF1493\"}`, \"color: #666\", \"color: #87CEEB\");\n\t\tconsole.info({\n\t\t\tfeature,\n\t\t\tstate: table.store.state,\n\t\t\tdeps: memoOptions.memoDeps?.toString()\n\t\t});\n\t\tconsole.trace();\n\t\tconsole.groupEnd();\n\t}\n\tconst onAfterUpdateHandler = onAfterUpdate ? () => {\n\t\tconst { schedule, untrack } = table._reactivity;\n\t\tschedule(() => untrack(() => onAfterUpdate()));\n\t} : void 0;\n\tconst debugOptions = process.env.NODE_ENV === \"development\" ? {\n\t\tonBeforeCompare: () => {},\n\t\tonAfterCompare: (depsChanged) => {},\n\t\tonBeforeUpdate: () => {\n\t\t\tif (debug) startCalcTime = performance.now();\n\t\t},\n\t\tonAfterUpdate: () => {\n\t\t\tif (debug) {\n\t\t\t\tendCalcTime = performance.now();\n\t\t\t\tlogTime(Math.round((endCalcTime - startCalcTime) * 100) / 100, true);\n\t\t\t}\n\t\t\tonAfterUpdateHandler?.();\n\t\t}\n\t} : { onAfterUpdate: onAfterUpdateHandler };\n\treturn memo({\n\t\t...memoOptions,\n\t\t...debugOptions\n\t});\n}\n/**\n* Assumes that a function name is in the format of `parentName_fnKey` and returns the `fnKey` and `fnName` in the format of `parentName.fnKey`.\n*\n* Splits on the first separator only, so an internal API name such as\n* `table__expandRows` has the `fnKey` `_expandRows`.\n*/\nfunction getFunctionNameInfo(staticFnName, splitBy = \"_\") {\n\tconst [parentName, fnKey] = staticFnName.replace(splitBy, \" \").split(\" \");\n\treturn {\n\t\tfnKey,\n\t\tfnName: `${parentName}.${fnKey}`,\n\t\tparentName\n\t};\n}\n/**\n* Assigns Table API methods directly to the table instance.\n* Unlike row/cell/column/header, the table is a singleton so methods are assigned directly.\n*/\nfunction assignTableAPIs(feature, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\ttable[fnKey] = memoDeps ? tableMemo({\n\t\t\tmemoDeps,\n\t\t\tfn,\n\t\t\tfnName,\n\t\t\ttable,\n\t\t\tfeature\n\t\t}) : fn;\n\t}\n}\n/**\n* Assigns API methods to a prototype object for memory-efficient method sharing.\n* All instances created with this prototype will share the same method references.\n*\n* For memoized methods, the memo state is lazily created and stored on each instance.\n* This provides the best of both worlds: shared method code + per-instance caching.\n*/\nfunction assignPrototypeAPIs(feature, prototype, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\tif (memoDeps) {\n\t\t\tconst memoKey = `_memo_${fnKey}`;\n\t\t\tprototype[fnKey] = function(...args) {\n\t\t\t\tif (!this[memoKey]) {\n\t\t\t\t\tconst self = this;\n\t\t\t\t\tthis[memoKey] = tableMemo({\n\t\t\t\t\t\tmemoDeps: (depArgs) => memoDeps(self, depArgs),\n\t\t\t\t\t\tfn: (...deps) => fn(self, ...deps),\n\t\t\t\t\t\tfnName,\n\t\t\t\t\t\tobjectId: self.id,\n\t\t\t\t\t\ttable,\n\t\t\t\t\t\tfeature\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this[memoKey](...args);\n\t\t\t};\n\t\t} else prototype[fnKey] = function(...args) {\n\t\t\treturn fn(this, ...args);\n\t\t};\n\t}\n}\n/**\n* Looks to run the memoized function with the builder pattern on the object if it exists, otherwise fall back to the static method passed in.\n*/\nfunction callMemoOrStaticFn(obj, fnKey, staticFn, ...args) {\n\treturn obj[fnKey]?.(...args) ?? staticFn(obj, ...args);\n}\n\n//#endregion\nexport { assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, cloneState, copyInstancePropertiesWithoutMemos, flattenBy, functionalUpdate, getFunctionNameInfo, hasOwn, isFunction, makeObjectMap, makeStateUpdater, memo, setStateSlice, skipFirstRun, stateSlicesEqual, tableMemo };","//#region src/core/cells/coreCellsFeature.utils.ts\n/**\n* Reads this cell's accessor value from its owning row and column.\n*\n* This is the standalone implementation behind `cell.getValue()`, useful when\n* importing static APIs instead of calling methods from the cell prototype.\n*\n* @example\n* ```ts\n* const value = cell_getValue(cell)\n* ```\n*/\nfunction cell_getValue(cell) {\n\treturn cell.row.getValue(cell.column.id);\n}\n/**\n* Reads the value that should be rendered for this cell.\n*\n* Nullish accessor values are replaced with `table.options.renderFallbackValue`,\n* matching the behavior of `cell.renderValue()`.\n*\n* @example\n* ```ts\n* const rendered = cell_renderValue(cell)\n* ```\n*/\nfunction cell_renderValue(cell) {\n\treturn cell.getValue() ?? cell.table.options.renderFallbackValue;\n}\n/**\n* Builds the render context passed to a column's `cell` template.\n*\n* The returned object includes stable references to the table, row, column, and\n* cell, plus bound `getValue` and `renderValue` helpers for render functions.\n*\n* @example\n* ```ts\n* const context = cell_getContext(cell)\n* ```\n*/\nfunction cell_getContext(cell) {\n\treturn {\n\t\ttable: cell.table,\n\t\tcolumn: cell.column,\n\t\trow: cell.row,\n\t\tcell,\n\t\tgetValue: () => cell.getValue(),\n\t\trenderValue: () => cell.renderValue()\n\t};\n}\n\n//#endregion\nexport { cell_getContext, cell_getValue, cell_renderValue };","import { assignPrototypeAPIs } from \"../../utils.js\";\nimport { cell_getContext, cell_getValue, cell_renderValue } from \"./coreCellsFeature.utils.js\";\n\n//#region src/core/cells/coreCellsFeature.ts\n/**\n* Core feature that adds cell value, render, and context APIs.\n*/\nconst coreCellsFeature = { assignCellPrototype: (prototype, table) => {\n\tassignPrototypeAPIs(\"coreCellsFeature\", prototype, table, {\n\t\tcell_getValue: { fn: (cell) => cell_getValue(cell) },\n\t\tcell_renderValue: { fn: (cell) => cell_renderValue(cell) },\n\t\tcell_getContext: {\n\t\t\tfn: (cell) => cell_getContext(cell),\n\t\t\tmemoDeps: (cell) => [cell]\n\t\t}\n\t});\n} };\n\n//#endregion\nexport { coreCellsFeature };","//#region src/core/columns/constructColumn.ts\n/**\n* Creates or retrieves the column prototype for a table.\n* The prototype is cached on the table and shared by all column instances.\n*/\nfunction getColumnPrototype(table) {\n\tif (!table._columnPrototype) {\n\t\ttable._columnPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignColumnPrototype?.(table._columnPrototype, table);\n\t}\n\treturn table._columnPrototype;\n}\n/**\n* Constructs a column instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructColumn(table, columnDef, depth, parent) {\n\tconst resolvedColumnDef = {\n\t\t...table.getDefaultColumnDef(),\n\t\t...columnDef\n\t};\n\tconst accessorKey = resolvedColumnDef.accessorKey;\n\tconst accessorKeyString = accessorKey === void 0 ? void 0 : String(accessorKey);\n\tconst id = resolvedColumnDef.id ?? accessorKeyString?.replaceAll(\".\", \"_\") ?? (typeof resolvedColumnDef.header === \"string\" ? resolvedColumnDef.header : void 0);\n\tlet accessorFn;\n\tif (resolvedColumnDef.accessorFn) accessorFn = resolvedColumnDef.accessorFn;\n\telse if (accessorKey !== void 0) {\n\t\tif (typeof accessorKey === \"string\" && accessorKey.includes(\".\")) {\n\t\t\tconst keys = accessorKey.split(\".\");\n\t\t\taccessorFn = (originalRow) => {\n\t\t\t\tlet result = originalRow;\n\t\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t\tconst key = keys[i];\n\t\t\t\t\tresult = result?.[key];\n\t\t\t\t\tif (process.env.NODE_ENV === \"development\" && result === void 0) console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t} else accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey];\n\t}\n\tif (!id) {\n\t\tif (process.env.NODE_ENV === \"development\") throw new Error(resolvedColumnDef.accessorFn ? `coreColumnsFeature require an id when using an accessorFn` : `coreColumnsFeature require an id when using a non-string header`);\n\t\tthrow new Error();\n\t}\n\tconst columnPrototype = getColumnPrototype(table);\n\tconst column = Object.create(columnPrototype);\n\tcolumn.accessorFn = accessorFn;\n\tcolumn.columnDef = resolvedColumnDef;\n\tcolumn.columns = [];\n\tcolumn.depth = depth;\n\tcolumn.id = `${String(id)}`;\n\tcolumn.parent = parent;\n\tconst initFns = table._columnInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](column);\n\treturn column;\n}\n\n//#endregion\nexport { constructColumn };","//#region src/core/featureStubs.ts\n/**\n* Stubs for optional features, used by the core and by any feature or row\n* model that reads another feature.\n*\n* Importing a feature's code from shared code would bundle that feature into\n* every table that uses the shared code, registered or not. A stub instead\n* calls a member the feature declares on its table, column, or row type and\n* assigns when it is registered, and otherwise behaves as if the feature were\n* absent. Members that only other features use are `_`-prefixed and marked\n* `@internal`, such as `table._expandRows`.\n*\n* How code in this package reaches other code:\n*\n* - Its own feature: call the static function, or `callMemoOrStaticFn` to use\n* the feature's memoized API.\n* - The core: import it. Every table bundles the core.\n* - Another feature's state: read `table.atoms.<slice>?.get()`.\n* - Another feature's APIs: call a stub from this file, adding one if needed.\n* - A feature it requires, such as column resizing requiring column sizing:\n* import it.\n*\n* Features assign functions, internal ones included, with `assignTableAPIs` or\n* `assignPrototypeAPIs`, and keep the `init*InstanceData` hooks for mutable\n* per-instance state. The `import/no-restricted-paths` lint rule rejects value\n* imports between feature folders outside an explicit list.\n*\n* Internal: not exported from any package entry point.\n*/\n/** Whether a column is visible; every column is without the feature. */\nfunction getIsColumnVisible(column) {\n\treturn column.getIsVisible?.() ?? true;\n}\n/** Visible leaf columns; all leaf columns without the feature. */\nfunction getVisibleLeafColumns(table) {\n\treturn table.getVisibleLeafColumns?.() ?? table.getAllLeafColumns();\n}\n/**\n* A row's visible cells; all cells, in leaf column order, without the\n* feature.\n*/\nfunction getVisibleCells(row) {\n\treturn row.getVisibleCells?.() ?? row.getAllCells();\n}\n/** A row's visible cells by column id; all cells without the feature. */\nfunction getVisibleCellsByColumnId(row) {\n\treturn row.getVisibleCellsByColumnId?.() ?? row.getAllCellsByColumnId();\n}\n/**\n* Orders leaf columns for display. The column ordering feature applies\n* `columnOrder` and moves grouped columns. Without it, the grouping feature\n* still moves grouped columns, and without either the order is unchanged.\n*/\nfunction orderLeafColumns(table, columns) {\n\tconst orderedTable = table;\n\tconst leafColumns = columns;\n\treturn orderedTable.getOrderColumnsFn?.()(leafColumns) ?? orderedTable._orderGroupedColumns?.(leafColumns) ?? columns;\n}\n/**\n* Orders items that each belong to a leaf column, such as visible leaf columns\n* or a row's visible cells, with start-pinned items first and end-pinned items\n* last. Without the feature, nothing is pinned and the order is unchanged.\n*/\nfunction orderByColumnPinning(table, items, getColumnId, getItemsByColumnId) {\n\treturn table._orderByColumnPinning?.(items, getColumnId, getItemsByColumnId) ?? items;\n}\n/**\n* Visible leaf columns in a pinning region. Without the feature, nothing is\n* pinned: the start and end regions are empty, and the center region and the\n* full list (`position` omitted) hold every visible leaf column.\n*/\nfunction getPinnedVisibleLeafColumns(table, position) {\n\treturn table.getPinnedVisibleLeafColumns?.(position) ?? (position && position !== \"center\" ? [] : getVisibleLeafColumns(table));\n}\n/** The resolved global filter function, if the feature is registered. */\nfunction getGlobalFilterFn(table) {\n\treturn table.getGlobalFilterFn?.();\n}\n/** Whether a column takes part in global filtering; none do without the feature. */\nfunction getCanGlobalFilter(column) {\n\treturn column.getCanGlobalFilter?.() ?? false;\n}\n/**\n* Lists expanded sub-rows inline below their parents. Without the feature no\n* row is expanded, so the row model is returned as is.\n*/\nfunction expandRowModel(table, rowModel) {\n\treturn table._expandRows?.(rowModel) ?? rowModel;\n}\n/**\n* Whether every parent of a row is expanded. Without the feature no row is\n* expanded, so only a top-level row qualifies.\n*/\nfunction getIsAllParentsExpanded(row) {\n\treturn row.getIsAllParentsExpanded?.() ?? !row.parentId;\n}\n/** Resets expanded state if row expanding is registered. */\nfunction autoResetExpanded(table) {\n\ttable.autoResetExpanded?.();\n}\n/** Resets the page index if row pagination is registered. */\nfunction autoResetPageIndex(table) {\n\ttable.autoResetPageIndex?.();\n}\n/** Resets sorting if row sorting is registered. */\nfunction autoResetSorting(table) {\n\ttable.autoResetSorting?.();\n}\n/** Resets cell selection if cell selection is registered. */\nfunction autoResetCellSelection(table) {\n\ttable.autoResetCellSelection?.();\n}\n/**\n* The aggregation executor `rowAggregationFeature` assigns to the table, or\n* `undefined` when the feature is not registered.\n*/\nfunction getAggregateColumnValue(table) {\n\treturn table._aggregateColumnValue;\n}\n\n//#endregion\nexport { autoResetCellSelection, autoResetExpanded, autoResetPageIndex, autoResetSorting, expandRowModel, getAggregateColumnValue, getCanGlobalFilter, getGlobalFilterFn, getIsAllParentsExpanded, getIsColumnVisible, getPinnedVisibleLeafColumns, getVisibleCells, getVisibleCellsByColumnId, getVisibleLeafColumns, orderByColumnPinning, orderLeafColumns };","import { makeObjectMap } from \"../../utils.js\";\nimport { orderLeafColumns } from \"../featureStubs.js\";\nimport { constructColumn } from \"./constructColumn.js\";\n\n//#region src/core/columns/coreColumnsFeature.utils.ts\n/**\n* Flattens this column and every descendant column into a single array.\n*\n* Group columns appear before their child columns, which matches the normalized\n* column hierarchy produced during table construction.\n*\n* @example\n* ```ts\n* const flatColumns = column_getFlatColumns(column)\n* ```\n*/\nfunction column_getFlatColumns(column) {\n\treturn [column, ...column.columns.flatMap((col) => col.getFlatColumns())];\n}\n/**\n* Collects the terminal leaf columns below this column.\n*\n* Group columns return their ordered descendants. Non-group columns return an\n* array containing only the column itself.\n*\n* @example\n* ```ts\n* const leafColumns = column_getLeafColumns(column)\n* ```\n*/\nfunction column_getLeafColumns(column) {\n\tif (column.columns.length) {\n\t\tconst leafColumns = column.columns.flatMap((col) => col.getLeafColumns());\n\t\treturn orderLeafColumns(column.table, leafColumns);\n\t}\n\treturn [column];\n}\n/**\n* Merges built-in, feature, and user default column definitions.\n*\n* Built-in defaults provide a header and fallback cell renderer, feature\n* defaults can add feature-specific column options, and\n* `options.defaultColumn` wins last.\n*\n* @example\n* ```ts\n* const defaultColumn = table_getDefaultColumnDef(table)\n* ```\n*/\nfunction table_getDefaultColumnDef(table) {\n\treturn {\n\t\theader: (props) => {\n\t\t\tconst resolvedColumnDef = props.header.column.columnDef;\n\t\t\tif (resolvedColumnDef.accessorKey) return resolvedColumnDef.accessorKey;\n\t\t\tif (resolvedColumnDef.accessorFn) return resolvedColumnDef.id;\n\t\t\treturn null;\n\t\t},\n\t\tcell: (props) => props.renderValue()?.toString?.() ?? null,\n\t\t...Object.values(table._features).reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultColumnDef?.());\n\t\t}, {}),\n\t\t...table.options.defaultColumn\n\t};\n}\nfunction constructColumns(table, columnDefs, parent, depth = 0) {\n\tconst columns = new Array(columnDefs.length);\n\tfor (let i = 0; i < columnDefs.length; i++) {\n\t\tif (!(i in columnDefs)) continue;\n\t\tconst columnDef = columnDefs[i];\n\t\tconst column = constructColumn(table, columnDef, depth, parent);\n\t\tconst groupingColumnDef = columnDef;\n\t\tcolumn.columns = groupingColumnDef.columns ? constructColumns(table, groupingColumnDef.columns, column, depth + 1) : [];\n\t\tcolumns[i] = column;\n\t}\n\treturn columns;\n}\n/**\n* Normalizes `options.columns` into the table's nested column tree.\n*\n* Each column definition is constructed with its parent and depth, and group\n* column children are recursively constructed.\n*\n* @example\n* ```ts\n* const columns = table_getAllColumns(table)\n* ```\n*/\nfunction table_getAllColumns(table) {\n\treturn constructColumns(table, table.options.columns);\n}\n/**\n* Flattens every table column, including group columns and leaf columns.\n*\n* Use this when parent/group columns must be included in addition to data leaf\n* columns.\n*\n* @example\n* ```ts\n* const flatColumns = table_getAllFlatColumns(table)\n* ```\n*/\nfunction table_getAllFlatColumns(table) {\n\treturn table.getAllColumns().flatMap((column) => column.getFlatColumns());\n}\n/**\n* Builds an id lookup for every flat column in the table.\n*\n* Group columns and leaf columns are included. Later columns with the same id\n* replace earlier entries.\n*\n* @example\n* ```ts\n* const columnsById = table_getAllFlatColumnsById(table)\n* ```\n*/\nfunction table_getAllFlatColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst flatColumns = table.getAllFlatColumns();\n\tfor (let i = 0; i < flatColumns.length; i++) {\n\t\tconst column = flatColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Collects all terminal leaf columns in their current table order.\n*\n* Column ordering features can reorder the collected leaves before the result\n* is returned.\n*\n* @example\n* ```ts\n* const leafColumns = table_getAllLeafColumns(table)\n* ```\n*/\nfunction table_getAllLeafColumns(table) {\n\tconst leafColumns = table.getAllColumns().flatMap((c) => c.getLeafColumns());\n\treturn orderLeafColumns(table, leafColumns);\n}\n/**\n* Builds an id lookup for terminal leaf columns only.\n*\n* Parent/group columns are excluded, making this lookup appropriate for row\n* cells and feature state keyed by data columns.\n*\n* @example\n* ```ts\n* const leavesById = table_getAllLeafColumnsById(table)\n* ```\n*/\nfunction table_getAllLeafColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst leafColumns = table.getAllLeafColumns();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst column = leafColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Looks up a column by id from the flat column map.\n*\n* The lookup can return group columns or leaf columns. In development, a\n* missing id logs a warning to help catch stale column references.\n*\n* @example\n* ```ts\n* const column = table_getColumn(table, 'firstName')\n* ```\n*/\nfunction table_getColumn(table, columnId) {\n\tconst column = table.getAllFlatColumnsById()[columnId];\n\tif (process.env.NODE_ENV === \"development\" && !column) console.warn(`[Table] Column with id '${columnId}' does not exist.`);\n\treturn column;\n}\n\n//#endregion\nexport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef } from \"./coreColumnsFeature.utils.js\";\n\n//#region src/core/columns/coreColumnsFeature.ts\n/**\n* Core feature that builds the column tree and exposes table/column APIs.\n*/\nconst coreColumnsFeature = {\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreColumnsFeature\", prototype, table, {\n\t\t\tcolumn_getFlatColumns: {\n\t\t\t\tfn: (column) => column_getFlatColumns(column),\n\t\t\t\tmemoDeps: (column) => [column.table.options.columns]\n\t\t\t},\n\t\t\tcolumn_getLeafColumns: {\n\t\t\t\tfn: (column) => column_getLeafColumns(column),\n\t\t\t\tmemoDeps: (column) => [\n\t\t\t\t\tcolumn.table.atoms.columnOrder?.get(),\n\t\t\t\t\tcolumn.table.atoms.grouping?.get(),\n\t\t\t\t\tcolumn.table.options.columns,\n\t\t\t\t\tcolumn.table.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreColumnsFeature\", table, {\n\t\t\ttable_getDefaultColumnDef: {\n\t\t\t\tfn: () => table_getDefaultColumnDef(table),\n\t\t\t\tmemoDeps: () => [table.options.defaultColumn]\n\t\t\t},\n\t\t\ttable_getAllColumns: {\n\t\t\t\tfn: () => table_getAllColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumns: {\n\t\t\t\tfn: () => table_getAllFlatColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumnsById: {\n\t\t\t\tfn: () => table_getAllFlatColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllLeafColumns: {\n\t\t\t\tfn: () => table_getAllLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getAllLeafColumnsById: {\n\t\t\t\tfn: () => table_getAllLeafColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.getAllLeafColumns()]\n\t\t\t},\n\t\t\ttable_getColumn: { fn: (columnId) => table_getColumn(table, columnId) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreColumnsFeature };","//#region src/core/headers/constructHeader.ts\n/**\n* Creates or retrieves the header prototype for a table.\n* The prototype is cached on the table and shared by all header instances.\n*/\nfunction getHeaderPrototype(table) {\n\tif (!table._headerPrototype) {\n\t\ttable._headerPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignHeaderPrototype?.(table._headerPrototype, table);\n\t}\n\treturn table._headerPrototype;\n}\n/**\n* Constructs a header instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructHeader(table, column, options) {\n\tconst headerPrototype = getHeaderPrototype(table);\n\tconst header = Object.create(headerPrototype);\n\theader.colSpan = 0;\n\theader.column = column;\n\theader.depth = options.depth;\n\theader.headerGroup = null;\n\theader.id = options.id ?? column.id;\n\theader.index = options.index;\n\theader.isPlaceholder = !!options.isPlaceholder;\n\theader.placeholderId = options.placeholderId;\n\theader.rowSpan = 0;\n\theader.subHeaders = [];\n\tconst initFns = table._headerInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](header);\n\treturn header;\n}\n\n//#endregion\nexport { constructHeader };","import { getIsColumnVisible } from \"../featureStubs.js\";\nimport { constructHeader } from \"./constructHeader.js\";\n\n//#region src/core/headers/buildHeaderGroups.ts\nfunction getMaxHeaderDepth(columns, depth = 1) {\n\tlet maxDepth = depth;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tif (getIsColumnVisible(column) && column.columns.length) maxDepth = Math.max(maxDepth, getMaxHeaderDepth(column.columns, depth + 1));\n\t}\n\treturn maxDepth;\n}\nfunction formatHeaderGroupId(headerFamily, depth) {\n\treturn headerFamily ? `${headerFamily}_${depth}` : String(depth);\n}\nfunction formatHeaderId(headerFamily, depth, columnId, childHeaderId) {\n\tlet id = headerFamily ?? \"\";\n\tif (depth) id = id ? `${id}_${depth}` : String(depth);\n\tif (columnId) id = id ? `${id}_${columnId}` : columnId;\n\tif (childHeaderId) id = id ? `${id}_${childHeaderId}` : childHeaderId;\n\treturn id;\n}\nfunction countPendingHeadersForColumn(headers, column) {\n\tlet count = 0;\n\tfor (let i = 0; i < headers.length; i++) if (headers[i].column === column) count++;\n\treturn count;\n}\nfunction constructHeaderGroup(headersToGroup, depth, table, headerFamily, headerGroups, headerGroupInitFns) {\n\tconst headerGroup = {\n\t\tdepth,\n\t\tid: formatHeaderGroupId(headerFamily, depth),\n\t\theaders: []\n\t};\n\tconst pendingParentHeaders = [];\n\tfor (let i = 0; i < headersToGroup.length; i++) {\n\t\tif (!(i in headersToGroup)) continue;\n\t\tconst headerToGroup = headersToGroup[i];\n\t\tconst latestPendingParentHeader = pendingParentHeaders[pendingParentHeaders.length - 1];\n\t\tconst isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n\t\tlet column;\n\t\tlet isPlaceholder = false;\n\t\tif (isLeafHeader && headerToGroup.column.parent) column = headerToGroup.column.parent;\n\t\telse {\n\t\t\tcolumn = headerToGroup.column;\n\t\t\tisPlaceholder = true;\n\t\t}\n\t\tif (latestPendingParentHeader && latestPendingParentHeader.column === column) latestPendingParentHeader.subHeaders.push(headerToGroup);\n\t\telse {\n\t\t\tconst header = constructHeader(table, column, {\n\t\t\t\tid: formatHeaderId(headerFamily, depth, column.id, headerToGroup.id),\n\t\t\t\tisPlaceholder,\n\t\t\t\tplaceholderId: isPlaceholder ? String(countPendingHeadersForColumn(pendingParentHeaders, column)) : void 0,\n\t\t\t\tdepth,\n\t\t\t\tindex: pendingParentHeaders.length\n\t\t\t});\n\t\t\theader.subHeaders.push(headerToGroup);\n\t\t\tpendingParentHeaders.push(header);\n\t\t}\n\t\theaderGroup.headers.push(headerToGroup);\n\t\theaderToGroup.headerGroup = headerGroup;\n\t}\n\tfor (let i = 0; i < headerGroupInitFns.length; i++) headerGroupInitFns[i](headerGroup);\n\theaderGroups.push(headerGroup);\n\tif (depth > 0) constructHeaderGroup(pendingParentHeaders, depth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n}\nfunction updateHeaderSpans(headers) {\n\tfor (let i = 0; i < headers.length; i++) {\n\t\tconst header = headers[i];\n\t\tif (!getIsColumnVisible(header.column)) continue;\n\t\tlet colSpan = 0;\n\t\tif (header.subHeaders.length) {\n\t\t\tupdateHeaderSpans(header.subHeaders);\n\t\t\tfor (let j = 0; j < header.subHeaders.length; j++) {\n\t\t\t\tconst child = header.subHeaders[j];\n\t\t\t\tif (!getIsColumnVisible(child.column)) continue;\n\t\t\t\tcolSpan += child.colSpan;\n\t\t\t}\n\t\t} else colSpan = 1;\n\t\theader.colSpan = colSpan;\n\t\tif (header.isPlaceholder && header.subHeaders.length === 1 && header.subHeaders[0].column === header.column) {\n\t\t\tlet rowSpan = 1;\n\t\t\tlet chainChild = header.subHeaders[0];\n\t\t\twhile (chainChild) {\n\t\t\t\tchainChild.rowSpan = 0;\n\t\t\t\trowSpan++;\n\t\t\t\tchainChild = chainChild.subHeaders.length === 1 && chainChild.subHeaders[0].column === header.column ? chainChild.subHeaders[0] : void 0;\n\t\t\t}\n\t\t\theader.rowSpan = rowSpan;\n\t\t} else header.rowSpan = 1;\n\t}\n}\n/**\n* Builds the nested header group structure for a table.\n*\n* The result accounts for visible leaf columns, pinned column groups, and placeholder headers needed to render multi-level headers.\n*/\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n\tconst maxDepth = getMaxHeaderDepth(allColumns);\n\tconst headerGroups = [];\n\tconst headerGroupInitFns = table._headerGroupInstanceInitFns;\n\tconst bottomHeaders = new Array(columnsToGroup.length);\n\tfor (let i = 0; i < columnsToGroup.length; i++) {\n\t\tif (!(i in columnsToGroup)) continue;\n\t\tbottomHeaders[i] = constructHeader(table, columnsToGroup[i], {\n\t\t\tdepth: maxDepth,\n\t\t\tindex: i\n\t\t});\n\t}\n\tconstructHeaderGroup(bottomHeaders, maxDepth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n\theaderGroups.reverse();\n\tupdateHeaderSpans(headerGroups[0]?.headers ?? []);\n\treturn headerGroups;\n}\n\n//#endregion\nexport { buildHeaderGroups };","import { getVisibleLeafColumns, orderByColumnPinning } from \"../featureStubs.js\";\nimport { buildHeaderGroups } from \"./buildHeaderGroups.js\";\n\n//#region src/core/headers/coreHeadersFeature.utils.ts\nfunction collectLeafHeaders(header, leafHeaders) {\n\tfor (let i = 0; i < header.subHeaders.length; i++) collectLeafHeaders(header.subHeaders[i], leafHeaders);\n\tleafHeaders.push(header);\n}\n/**\n* Walks a header tree and collects all descendant leaf headers.\n*\n* The header itself is included after its descendants, matching the recursive\n* shape used by nested header groups.\n*\n* @example\n* ```ts\n* const leafHeaders = header_getLeafHeaders(header)\n* ```\n*/\nfunction header_getLeafHeaders(header) {\n\tconst leafHeaders = [];\n\tcollectLeafHeaders(header, leafHeaders);\n\treturn leafHeaders;\n}\n/**\n* Builds the render context passed to a column's `header` or `footer` template.\n*\n* The context contains the header, its column, and the owning table instance.\n*\n* @example\n* ```ts\n* const context = header_getContext(header)\n* ```\n*/\nfunction header_getContext(header) {\n\treturn {\n\t\tcolumn: header.column,\n\t\theader,\n\t\ttable: header.column.table\n\t};\n}\n/**\n* Builds visible header groups for the current column tree.\n*\n* Column visibility and pinning are applied before groups are built. When no\n* columns are pinned, the fast path skips pin partitioning.\n*\n* @example\n* ```ts\n* const headerGroups = table_getHeaderGroups(table)\n* ```\n*/\nfunction table_getHeaderGroups(table) {\n\treturn buildHeaderGroups(table.getAllColumns(), orderByColumnPinning(table, getVisibleLeafColumns(table), (column) => column.id), table);\n}\n/**\n* Builds footer groups by reversing the current header groups.\n*\n* Footer rendering uses the same header objects and grouping structure, but\n* renders them from leaf level back toward the root.\n*\n* @example\n* ```ts\n* const footerGroups = table_getFooterGroups(table)\n* ```\n*/\nfunction table_getFooterGroups(table) {\n\treturn [...table.getHeaderGroups()].reverse();\n}\n/**\n* Flattens every header from every header group into one array.\n*\n* The result includes parent headers and placeholder headers, in header-group\n* order from top to bottom.\n*\n* @example\n* ```ts\n* const flatHeaders = table_getFlatHeaders(table)\n* ```\n*/\nfunction table_getFlatHeaders(table) {\n\tconst headerGroups = table.getHeaderGroups();\n\tconst result = [];\n\tfor (let i = 0; i < headerGroups.length; i++) {\n\t\tconst headers = headerGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects only the leaf headers from the current header tree.\n*\n* Parent/group headers are skipped, making the result suitable for rendering\n* one header per visible leaf column.\n*\n* @example\n* ```ts\n* const leafHeaders = table_getLeafHeaders(table)\n* ```\n*/\nfunction table_getLeafHeaders(table) {\n\tconst topHeaders = table.getHeaderGroups()[0]?.headers ?? [];\n\tconst result = [];\n\tfor (let i = 0; i < topHeaders.length; i++) {\n\t\tconst leafHeaders = topHeaders[i].getLeafHeaders();\n\t\tfor (let j = 0; j < leafHeaders.length; j++) result.push(leafHeaders[j]);\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders } from \"./coreHeadersFeature.utils.js\";\n\n//#region src/core/headers/coreHeadersFeature.ts\n/**\n* Core feature that builds header groups and exposes header context APIs.\n*/\nconst coreHeadersFeature = {\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreHeadersFeature\", prototype, table, {\n\t\t\theader_getLeafHeaders: {\n\t\t\t\tfn: (header) => header_getLeafHeaders(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t},\n\t\t\theader_getContext: {\n\t\t\t\tfn: (header) => header_getContext(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreHeadersFeature\", table, {\n\t\t\ttable_getHeaderGroups: {\n\t\t\t\tfn: () => table_getHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getFooterGroups: {\n\t\t\t\tfn: () => table_getFooterGroups(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getFlatHeaders: {\n\t\t\t\tfn: () => table_getFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getLeafHeaders: {\n\t\t\t\tfn: () => table_getLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreHeadersFeature };","import { makeObjectMap } from \"../../utils.js\";\n\n//#region src/core/rows/constructRow.ts\n/**\n* Creates or retrieves the row prototype for a table.\n* The prototype is cached on the table and shared by all row instances.\n*/\nfunction getRowPrototype(table) {\n\tif (!table._rowPrototype) {\n\t\ttable._rowPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignRowPrototype?.(table._rowPrototype, table);\n\t}\n\treturn table._rowPrototype;\n}\n/**\n* Constructs a row instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nconst constructRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n\tconst rowPrototype = getRowPrototype(table);\n\tconst row = Object.create(rowPrototype);\n\trow._displayIndexCache = -1;\n\trow._uniqueValuesCache = makeObjectMap();\n\trow._valuesCache = makeObjectMap();\n\trow.depth = depth;\n\trow.id = id;\n\trow.index = rowIndex;\n\trow.original = original;\n\trow.parentId = parentId;\n\trow.subRows = subRows ?? [];\n\tconst initFns = table._rowInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](row);\n\treturn row;\n};\n\n//#endregion\nexport { constructRow };","import { makeObjectMap, skipFirstRun, tableMemo } from \"../../utils.js\";\nimport { autoResetCellSelection, autoResetExpanded, autoResetPageIndex, autoResetSorting } from \"../featureStubs.js\";\nimport { constructRow } from \"../rows/constructRow.js\";\n\n//#region src/core/row-models/createCoreRowModel.ts\n/**\n* Creates a memoized core row model factory.\n*\n* The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n*/\nfunction createCoreRowModel() {\n\treturn (table) => {\n\t\treturn tableMemo({\n\t\t\tfeature: \"coreRowModelsFeature\",\n\t\t\ttable,\n\t\t\tfnName: \"table.getCoreRowModel\",\n\t\t\tmemoDeps: () => [table.options.data],\n\t\t\tfn: () => _createCoreRowModel(table, table.options.data),\n\t\t\tonAfterUpdate: skipFirstRun(() => {\n\t\t\t\tautoResetExpanded(table);\n\t\t\t\tautoResetPageIndex(table);\n\t\t\t\tautoResetSorting(table);\n\t\t\t\tautoResetCellSelection(table);\n\t\t\t})\n\t\t});\n\t};\n}\nfunction accessRows(table, rowModel, originalRows, depth = 0, parentRow) {\n\tconst rows = [];\n\tfor (let i = 0; i < originalRows.length; i++) {\n\t\tconst originalRow = originalRows[i];\n\t\tconst row = constructRow(table, table.getRowId(originalRow, i, parentRow), originalRow, i, depth, void 0, parentRow?.id);\n\t\trowModel.flatRows.push(row);\n\t\trowModel.rowsById[row.id] = row;\n\t\trows.push(row);\n\t\tif (table.options.getSubRows) {\n\t\t\trow.originalSubRows = table.options.getSubRows(originalRow, i);\n\t\t\tif (row.originalSubRows?.length) row.subRows = accessRows(table, rowModel, row.originalSubRows, depth + 1, row);\n\t\t}\n\t}\n\treturn rows;\n}\nfunction _createCoreRowModel(table, data) {\n\tconst rowModel = {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\trowModel.rows = accessRows(table, rowModel, data);\n\treturn rowModel;\n}\n\n//#endregion\nexport { createCoreRowModel };","import { createCoreRowModel } from \"./createCoreRowModel.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.utils.ts\n/**\n* Resolves the table's unmodified core row model.\n*\n* The factory is created once per table, either from the `coreRowModel` slot on the `features` option\n* or the built-in `createCoreRowModel()`, then reused for later calls.\n*\n* @example\n* ```ts\n* const coreRows = table_getCoreRowModel(table)\n* ```\n*/\nfunction table_getCoreRowModel(table) {\n\tif (!table._rowModels.coreRowModel) table._rowModels.coreRowModel = table.options.features.coreRowModel?.(table) ?? createCoreRowModel()(table);\n\treturn table._rowModels.coreRowModel();\n}\n/**\n* Reads the row model immediately before column/global filtering.\n*\n* Filtering is the first derived row-model stage, so this currently aliases\n* `table.getCoreRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeFiltering = table_getPreFilteredRowModel(table)\n* ```\n*/\nfunction table_getPreFilteredRowModel(table) {\n\treturn table.getCoreRowModel();\n}\n/**\n* Resolves the row model after column and global filtering.\n*\n* When `manualFiltering` is enabled, or no filtered row-model factory was\n* registered, this returns the pre-filtered row model because filtering is\n* expected to happen outside the table.\n*\n* @example\n* ```ts\n* const filteredRows = table_getFilteredRowModel(table)\n* ```\n*/\nfunction table_getFilteredRowModel(table) {\n\tif (!table._rowModels.filteredRowModel) table._rowModels.filteredRowModel = table.options.features.filteredRowModel?.(table);\n\tif (table.options.manualFiltering || !table._rowModels.filteredRowModel) return table.getPreFilteredRowModel();\n\treturn table._rowModels.filteredRowModel();\n}\n/**\n* Reads the row model immediately before grouping.\n*\n* Grouping runs after filtering, so this aliases `table.getFilteredRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeGrouping = table_getPreGroupedRowModel(table)\n* ```\n*/\nfunction table_getPreGroupedRowModel(table) {\n\treturn table.getFilteredRowModel();\n}\n/**\n* Resolves the row model after grouping has produced grouped rows.\n*\n* When `manualGrouping` is enabled, or no grouped row-model factory was\n* registered, this returns the pre-grouped row model unchanged.\n*\n* @example\n* ```ts\n* const groupedRows = table_getGroupedRowModel(table)\n* ```\n*/\nfunction table_getGroupedRowModel(table) {\n\tif (!table._rowModels.groupedRowModel) table._rowModels.groupedRowModel = table.options.features.groupedRowModel?.(table);\n\tif (table.options.manualGrouping || !table._rowModels.groupedRowModel) return table.getPreGroupedRowModel();\n\treturn table._rowModels.groupedRowModel();\n}\n/**\n* Reads the row model immediately before sorting.\n*\n* Sorting runs after grouping, so this aliases `table.getGroupedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeSorting = table_getPreSortedRowModel(table)\n* ```\n*/\nfunction table_getPreSortedRowModel(table) {\n\treturn table.getGroupedRowModel();\n}\n/**\n* Resolves the row model after sorting has been applied.\n*\n* When `manualSorting` is enabled, or no sorted row-model factory was\n* registered, this returns the pre-sorted row model because sorted data is\n* expected to be supplied by the caller.\n*\n* @example\n* ```ts\n* const sortedRows = table_getSortedRowModel(table)\n* ```\n*/\nfunction table_getSortedRowModel(table) {\n\tif (!table._rowModels.sortedRowModel) table._rowModels.sortedRowModel = table.options.features.sortedRowModel?.(table);\n\tif (table.options.manualSorting || !table._rowModels.sortedRowModel) return table.getPreSortedRowModel();\n\treturn table._rowModels.sortedRowModel();\n}\n/**\n* Reads the row model immediately before row expansion.\n*\n* Expansion runs after sorting, so this aliases `table.getSortedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeExpansion = table_getPreExpandedRowModel(table)\n* ```\n*/\nfunction table_getPreExpandedRowModel(table) {\n\treturn table.getSortedRowModel();\n}\n/**\n* Resolves the row model after expanded rows have been flattened into view.\n*\n* When `manualExpanding` is enabled, or no expanded row-model factory was\n* registered, this returns the pre-expanded row model unchanged.\n*\n* @example\n* ```ts\n* const expandedRows = table_getExpandedRowModel(table)\n* ```\n*/\nfunction table_getExpandedRowModel(table) {\n\tif (!table._rowModels.expandedRowModel) table._rowModels.expandedRowModel = table.options.features.expandedRowModel?.(table);\n\tif (table.options.manualExpanding || !table._rowModels.expandedRowModel) return table.getPreExpandedRowModel();\n\treturn table._rowModels.expandedRowModel();\n}\n/**\n* Reads the row model immediately before pagination.\n*\n* Pagination is the final built-in row-model stage, so this aliases\n* `table.getExpandedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforePagination = table_getPrePaginatedRowModel(table)\n* ```\n*/\nfunction table_getPrePaginatedRowModel(table) {\n\treturn table.getExpandedRowModel();\n}\n/**\n* Resolves the row model after pagination has sliced rows for the current page.\n*\n* When `manualPagination` is enabled, or no paginated row-model factory was\n* registered, this returns the pre-paginated row model because pagination is\n* expected to happen before data reaches the table.\n*\n* @example\n* ```ts\n* const pageRows = table_getPaginatedRowModel(table)\n* ```\n*/\nfunction table_getPaginatedRowModel(table) {\n\tif (!table._rowModels.paginatedRowModel) table._rowModels.paginatedRowModel = table.options.features.paginatedRowModel?.(table);\n\tif (table.options.manualPagination || !table._rowModels.paginatedRowModel) return table.getPrePaginatedRowModel();\n\treturn table._rowModels.paginatedRowModel();\n}\n/**\n* Resolves the final row model consumed by renderers.\n*\n* This is the end of the built-in row-model pipeline: core -> filtering ->\n* grouping -> sorting -> expanding -> pagination.\n*\n* @example\n* ```ts\n* const visibleRows = table_getRowModel(table)\n* ```\n*/\nfunction table_getRowModel(table) {\n\treturn table.getPaginatedRowModel();\n}\n\n//#endregion\nexport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel } from \"./coreRowModelsFeature.utils.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.ts\n/**\n* Core feature that wires table row-model accessors and row-model caches.\n*/\nconst coreRowModelsFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreRowModelsFeature\", table, {\n\t\ttable_getCoreRowModel: { fn: () => table_getCoreRowModel(table) },\n\t\ttable_getPreFilteredRowModel: { fn: () => table_getPreFilteredRowModel(table) },\n\t\ttable_getFilteredRowModel: { fn: () => table_getFilteredRowModel(table) },\n\t\ttable_getPreGroupedRowModel: { fn: () => table_getPreGroupedRowModel(table) },\n\t\ttable_getGroupedRowModel: { fn: () => table_getGroupedRowModel(table) },\n\t\ttable_getPreSortedRowModel: { fn: () => table_getPreSortedRowModel(table) },\n\t\ttable_getSortedRowModel: { fn: () => table_getSortedRowModel(table) },\n\t\ttable_getPreExpandedRowModel: { fn: () => table_getPreExpandedRowModel(table) },\n\t\ttable_getExpandedRowModel: { fn: () => table_getExpandedRowModel(table) },\n\t\ttable_getPrePaginatedRowModel: { fn: () => table_getPrePaginatedRowModel(table) },\n\t\ttable_getPaginatedRowModel: { fn: () => table_getPaginatedRowModel(table) },\n\t\ttable_getRowModel: { fn: () => table_getRowModel(table) }\n\t});\n} };\n\n//#endregion\nexport { coreRowModelsFeature };","//#region src/core/cells/constructCell.ts\n/**\n* Creates or retrieves the cell prototype for a table.\n* The prototype is cached on the table and shared by all cell instances.\n*/\nfunction getCellPrototype(table) {\n\tif (!table._cellPrototype) {\n\t\ttable._cellPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignCellPrototype?.(table._cellPrototype, table);\n\t}\n\treturn table._cellPrototype;\n}\n/**\n* Constructs a cell instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructCell(column, row, table) {\n\tconst cellPrototype = getCellPrototype(table);\n\tconst cell = Object.create(cellPrototype);\n\tcell.column = column;\n\tcell.id = `${row.id}_${column.id}`;\n\tcell.row = row;\n\tconst initFns = table._cellInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](cell);\n\treturn cell;\n}\n\n//#endregion\nexport { constructCell };","import { flattenBy, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { expandRowModel } from \"../featureStubs.js\";\nimport { constructCell } from \"../cells/constructCell.js\";\n\n//#region src/core/rows/coreRowsFeature.utils.ts\n/**\n* Returns this row's zero-based position in the current pre-pagination row\n* model. Rows outside that model return `-1`.\n*/\nfunction row_getDisplayIndex(row) {\n\tconst rows = row.table.getRowsInDisplayOrder();\n\tconst displayIndex = row._displayIndexCache;\n\treturn rows[displayIndex] === row ? displayIndex : -1;\n}\n/**\n* Returns the rows in the current display order after assigning their\n* zero-based display indexes.\n*\n* When expanded rows bypass pagination, expanded descendants are inserted into\n* the returned order even though they are absent from the pre-pagination row\n* model.\n*/\nfunction table_getRowsInDisplayOrder(table) {\n\tconst rowModel = table.getPrePaginatedRowModel();\n\tconst rows = table.options.paginateExpandedRows === false ? expandRowModel(table, rowModel).rows : rowModel.rows;\n\tfor (let i = 0; i < rows.length; i++) rows[i]._displayIndexCache = i;\n\treturn rows;\n}\n/**\n* Reads and caches this row's value for a column.\n*\n* The value is produced by the column accessor. Missing columns or display\n* columns without an accessor return `undefined`.\n*\n* @example\n* ```ts\n* const firstName = row_getValue(row, 'firstName')\n* ```\n*/\nfunction row_getValue(row, columnId) {\n\tif (hasOwn(row._valuesCache, columnId)) return row._valuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\trow._valuesCache[columnId] = column.accessorFn(row.original, row.index);\n\treturn row._valuesCache[columnId];\n}\n/**\n* Reads and caches the values used by faceting/grouping for a column.\n*\n* If the column defines `getUniqueValues`, that result is used. Otherwise the\n* row's accessor value is wrapped in a single-item array.\n*\n* @example\n* ```ts\n* const values = row_getUniqueValues(row, 'tags')\n* ```\n*/\nfunction row_getUniqueValues(row, columnId) {\n\tif (hasOwn(row._uniqueValuesCache, columnId)) return row._uniqueValuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\tif (!column.columnDef.getUniqueValues) {\n\t\trow._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n\t\treturn row._uniqueValuesCache[columnId];\n\t}\n\trow._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, row.index);\n\treturn row._uniqueValuesCache[columnId];\n}\n/**\n* Returns a renderable row value for a column.\n*\n* If the accessor value is nullish, the table's `renderFallbackValue` is used\n* instead.\n*\n* @example\n* ```ts\n* const value = row_renderValue(row, 'firstName')\n* ```\n*/\nfunction row_renderValue(row, columnId) {\n\treturn row.getValue(columnId) ?? row.table.options.renderFallbackValue;\n}\n/**\n* Flattens this row's descendant tree into leaf rows.\n*\n* The row itself is not included; only nested `subRows` are walked.\n*\n* @example\n* ```ts\n* const descendants = row_getLeafRows(row)\n* ```\n*/\nfunction row_getLeafRows(row) {\n\treturn flattenBy(row.subRows, (d) => d.subRows);\n}\n/**\n* Returns the deepest structural row depth in the core row model.\n* Root rows are depth `0`, their direct sub-rows are depth `1`, and so on.\n*/\nfunction table_getMaxSubRowDepth(table) {\n\tconst rows = table.getCoreRowModel().flatRows;\n\tlet maxDepth = 0;\n\tfor (let i = 0; i < rows.length; i++) maxDepth = Math.max(maxDepth, rows[i].depth);\n\treturn maxDepth;\n}\n/**\n* Looks up this row's direct parent, if it has one.\n*\n* Parent lookup prefers the core row model for structural parents, then falls\n* back to the pre-pagination row model for generated parent rows.\n*\n* @example\n* ```ts\n* const parent = row_getParentRow(row)\n* ```\n*/\nfunction row_getParentRow(row) {\n\tif (!row.parentId) return;\n\treturn row.table.getCoreRowModel().rowsById[row.parentId] ?? row.table.getRow(row.parentId, true);\n}\n/**\n* Collects this row's ancestor chain from root to direct parent.\n*\n* The current row is not included. Rows without a parent return an empty array.\n*\n* @example\n* ```ts\n* const ancestors = row_getParentRows(row)\n* ```\n*/\nfunction row_getParentRows(row) {\n\tconst parentRows = [];\n\tlet currentRow = row;\n\twhile (true) {\n\t\tconst parentRow = currentRow.getParentRow();\n\t\tif (!parentRow) break;\n\t\tparentRows.push(parentRow);\n\t\tcurrentRow = parentRow;\n\t}\n\treturn parentRows.reverse();\n}\n/**\n* Constructs one cell for each leaf column in this row.\n*\n* The result follows `table.getAllLeafColumns()` order and includes hidden\n* columns; visibility-specific APIs filter this list later.\n*\n* @example\n* ```ts\n* const cells = row_getAllCells(row)\n* ```\n*/\nfunction row_getAllCells(row) {\n\tconst columns = row.table.getAllLeafColumns();\n\tlet cache = row._cellsCache;\n\tif (!cache) cache = row._cellsCache = /* @__PURE__ */ new WeakMap();\n\tconst cells = new Array(columns.length);\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tlet cell = cache.get(column);\n\t\tif (!cell) {\n\t\t\tcell = constructCell(column, row, row.table);\n\t\t\tcache.set(column, cell);\n\t\t}\n\t\tcells[i] = cell;\n\t}\n\treturn cells;\n}\n/**\n* Builds a lookup map of this row's cells keyed by column id.\n*\n* This is the static implementation behind `row.getAllCellsByColumnId()`.\n*\n* @example\n* ```ts\n* const cellsById = row_getAllCellsByColumnId(row)\n* ```\n*/\nfunction row_getAllCellsByColumnId(row) {\n\tconst result = makeObjectMap();\n\tconst cells = row.getAllCells();\n\tfor (let i = 0; i < cells.length; i++) {\n\t\tconst cell = cells[i];\n\t\tresult[cell.column.id] = cell;\n\t}\n\treturn result;\n}\n/**\n* Resolves the stable id for a row.\n*\n* `options.getRowId` wins when provided. Otherwise root rows use their index\n* and child rows append their index to the parent id, such as `0.2`.\n*\n* @example\n* ```ts\n* const id = table_getRowId(originalRow, table, index, parentRow)\n* ```\n*/\nfunction table_getRowId(originalRow, table, index, parent) {\n\treturn table.options.getRowId?.(originalRow, index, parent) ?? (parent ? `${parent.id}.${index}` : String(index));\n}\n/**\n* Looks up a row by id from the current or full row model.\n*\n* By default this searches `table.getRowModel()`. Passing `searchAll` searches\n* the pre-pagination model first, then falls back to the core model.\n*\n* @example\n* ```ts\n* const row = table_getRow(table, rowId, true)\n* ```\n*/\nfunction table_getRow(table, rowId, searchAll) {\n\tlet row = (searchAll ? table.getPrePaginatedRowModel() : table.getRowModel()).rowsById[rowId];\n\tif (!row) {\n\t\trow = table.getCoreRowModel().rowsById[rowId];\n\t\tif (!row) {\n\t\t\tif (process.env.NODE_ENV === \"development\") throw new Error(`getRow could not find row with ID: ${rowId}`);\n\t\t\tthrow new Error();\n\t\t}\n\t}\n\treturn row;\n}\n\n//#endregion\nexport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder } from \"./coreRowsFeature.utils.js\";\n\n//#region src/core/rows/coreRowsFeature.ts\n/**\n* Core feature that creates row APIs for values, cells, and tree traversal.\n*/\nconst coreRowsFeature = {\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreRowsFeature\", prototype, table, {\n\t\t\trow_getDisplayIndex: { fn: (row) => row_getDisplayIndex(row) },\n\t\t\trow_getAllCellsByColumnId: {\n\t\t\t\tfn: (row) => row_getAllCellsByColumnId(row),\n\t\t\t\tmemoDeps: (row) => [row.getAllCells()]\n\t\t\t},\n\t\t\trow_getAllCells: {\n\t\t\t\tfn: (row) => row_getAllCells(row),\n\t\t\t\tmemoDeps: (row) => [row.table.getAllLeafColumns()]\n\t\t\t},\n\t\t\trow_getLeafRows: {\n\t\t\t\tfn: (row) => row_getLeafRows(row),\n\t\t\t\tmemoDeps: (row) => [row.subRows]\n\t\t\t},\n\t\t\trow_getParentRow: { fn: (row) => row_getParentRow(row) },\n\t\t\trow_getParentRows: { fn: (row) => row_getParentRows(row) },\n\t\t\trow_getUniqueValues: { fn: (row, columnId) => row_getUniqueValues(row, columnId) },\n\t\t\trow_getValue: { fn: (row, columnId) => row_getValue(row, columnId) },\n\t\t\trow_renderValue: { fn: (row, columnId) => row_renderValue(row, columnId) }\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreRowsFeature\", table, {\n\t\t\ttable_getRowsInDisplayOrder: {\n\t\t\t\tfn: () => table_getRowsInDisplayOrder(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getPrePaginatedRowModel().rows,\n\t\t\t\t\ttable.options.paginateExpandedRows,\n\t\t\t\t\ttable.options.paginateExpandedRows === false ? table.atoms.expanded?.get() : void 0\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getRowId: { fn: (originalRow, index, parent) => table_getRowId(originalRow, table, index, parent) },\n\t\t\ttable_getRow: { fn: (id, searchAll) => table_getRow(table, id, searchAll) },\n\t\t\ttable_getMaxSubRowDepth: {\n\t\t\t\tfn: () => table_getMaxSubRowDepth(table),\n\t\t\t\tmemoDeps: () => [table.getCoreRowModel()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreRowsFeature };","import { cloneState, functionalUpdate } from \"../../utils.js\";\n\n//#region src/core/table/coreTablesFeature.utils.ts\n/**\n* Synchronizes externally controlled state slices into the table's base atoms.\n*\n* This keeps `options.state` values mirrored in the atom graph so derived\n* atoms, stores, and table APIs read a consistent snapshot.\n*\n* Adapters that update options during their host's render phase pass the\n* state snapshot captured by the committed render as `capturedState` — the\n* shared options object may already hold values from a newer render that\n* never commits. Pass `null` to publish nothing (a captured \"no controlled\n* state\"); omitting the argument reads the current `table.options.state`\n* instead. An optional `compare` suppresses semantically unchanged slice\n* writes; the default remains reference equality.\n*\n* @example\n* ```ts\n* table_syncExternalStateToBaseAtoms(table)\n* table_syncExternalStateToBaseAtoms(table, capturedState ?? null, shallow)\n* ```\n*/\nfunction table_syncExternalStateToBaseAtoms(table, capturedState, compare = (currentState, externalState) => currentState === externalState) {\n\tconst state = capturedState === void 0 ? table.options.state : capturedState;\n\ttable._reactivity.batch(() => {\n\t\tif (state) for (const key in state) {\n\t\t\tconst baseAtom = table.baseAtoms[key];\n\t\t\tif (!baseAtom) continue;\n\t\t\tconst rawExternalState = state[key];\n\t\t\tconst externalState = rawExternalState === void 0 ? table.initialState[key] : rawExternalState;\n\t\t\tif (!compare(table._reactivity.untrack(() => baseAtom.get()), externalState)) baseAtom.set(() => externalState);\n\t\t}\n\t});\n}\n/**\n* Publishes captured controlled state after a host framework commits.\n*\n* Render-phase adapters stage options without synchronizing base atoms, then\n* pass the state captured by the committed render here. The commit signal also\n* invalidates ownership changes when no base atom was written.\n*/\nfunction table_publishExternalState(table, state, compare = (currentState, externalState) => currentState === externalState) {\n\ttable._reactivity.batch(() => {\n\t\ttable_syncExternalStateToBaseAtoms(table, state, compare);\n\t\ttable._reactivity.commit?.();\n\t});\n}\n/**\n* Resets all internal table base atoms to `table.initialState`, then clears\n* transient instance data through registered feature reset hooks.\n*\n* This resets internally owned state slices in a single reactivity batch. Use\n* feature-specific reset APIs when a slice may be externally owned.\n*\n* @example\n* ```ts\n* table_reset(table)\n* ```\n*/\nfunction table_reset(table) {\n\tconst snap = cloneState(table.initialState);\n\ttable._reactivity.batch(() => {\n\t\tconst keys = Object.keys(snap);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\ttable.baseAtoms[key].set(snap[key]);\n\t\t}\n\t});\n\tconst features = Object.values(table._features);\n\tfor (let i = 0; i < features.length; i++) features[i].resetTableInstanceData?.(table);\n}\n/**\n* Merges new table options with the current resolved options.\n*\n* If `options.mergeOptions` is provided, it owns the merge behavior; otherwise\n* options are shallow-merged. Static options that should never change after\n* initialization are restored on a fresh object so framework merge helpers may\n* return readonly getter/proxy objects.\n*\n* @example\n* ```ts\n* const options = table_mergeOptions(table, nextOptions)\n* ```\n*/\nfunction table_mergeOptions(table, newOptions) {\n\tconst { features, atoms, initialState } = table.options;\n\tif (!table.options.mergeOptions) return {\n\t\t...table.options,\n\t\t...newOptions,\n\t\tfeatures,\n\t\tatoms,\n\t\tinitialState\n\t};\n\tconst mergedOptions = table.options.mergeOptions(table.options, newOptions);\n\tconst descriptors = { ...Object.getOwnPropertyDescriptors(mergedOptions) };\n\treturn Object.defineProperties(Object.create(Object.getPrototypeOf(mergedOptions)), {\n\t\t...descriptors,\n\t\tfeatures: {\n\t\t\tvalue: features,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tatoms: {\n\t\t\tvalue: atoms,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tinitialState: {\n\t\t\tvalue: initialState,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t}\n\t});\n}\n/**\n* Updates the table options object.\n*\n* The updater receives the current resolved options and the merged result is\n* immediately assigned to the table instance.\n*\n* @example\n* ```ts\n* table_setOptions(table, (old) => old)\n* table_setOptions(table, (old) => old, { syncExternalState: false })\n* ```\n*/\nfunction table_setOptions(table, updater, options) {\n\tconst mergedOptions = table_mergeOptions(table, functionalUpdate(updater, table.options));\n\tif (table.optionsStore) table.optionsStore.set(() => mergedOptions);\n\telse table.options = mergedOptions;\n\tif (options?.syncExternalState !== false) table_publishExternalState(table, mergedOptions.state ?? null);\n}\n\n//#endregion\nexport { table_mergeOptions, table_publishExternalState, table_reset, table_setOptions, table_syncExternalStateToBaseAtoms };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_reset, table_setOptions } from \"./coreTablesFeature.utils.js\";\n\n//#region src/core/table/coreTablesFeature.ts\n/**\n* Core feature that adds base table instance APIs such as reset and setOptions.\n*/\nconst coreTablesFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreTablesFeature\", table, {\n\t\ttable_reset: { fn: () => table_reset(table) },\n\t\ttable_setOptions: { fn: (updater) => table_setOptions(table, updater) }\n\t});\n} };\n\n//#endregion\nexport { coreTablesFeature };","import { coreCellsFeature } from \"./cells/coreCellsFeature.js\";\nimport { coreColumnsFeature } from \"./columns/coreColumnsFeature.js\";\nimport { coreHeadersFeature } from \"./headers/coreHeadersFeature.js\";\nimport { coreRowModelsFeature } from \"./row-models/coreRowModelsFeature.js\";\nimport { coreRowsFeature } from \"./rows/coreRowsFeature.js\";\nimport { coreTablesFeature } from \"./table/coreTablesFeature.js\";\n\n//#region src/core/coreFeatures.ts\n/**\n* The built-in core feature set required by every table.\n*\n* These features provide table, column, row, header, cell, and core row-model behavior before optional feature plugins are added.\n*/\nconst coreFeatures = {\n\tcoreCellsFeature,\n\tcoreColumnsFeature,\n\tcoreHeadersFeature,\n\tcoreRowModelsFeature,\n\tcoreRowsFeature,\n\tcoreTablesFeature\n};\n\n//#endregion\nexport { coreFeatures };","//#region src/helpers/tableFeatures.ts\n/**\n* A helper function to help define the features that are to be imported and applied to a table instance.\n* Use this utility to make it easier to have the correct type inference for the features that are being imported.\n* **Note:** It is recommended to use this utility statically outside of a component.\n*\n* Alongside feature modules, this object carries everything else that is\n* statically stitched into the table:\n*\n* - Row model factories (`sortedRowModel`, `filteredRowModel`, etc.)\n* - Row model function registries (`sortFns`, `filterFns`, `aggregationFns`),\n* whose keys become the valid string values for `sortFn`, `filterFn`,\n* `globalFilterFn`, and `aggregationFn` with full inference\n* - Type-only `tableMeta`/`columnMeta` slots for declaring per-table meta types\n* instead of using global declaration merging. The values are phantom\n* (ignored and stripped at runtime); only their types are used.\n* @example\n* ```\n* import {\n* columnFilteringFeature,\n* createFilteredRowModel,\n* createSortedRowModel,\n* filterFn_includesString,\n* rowSortingFeature,\n* sortFn_alphanumeric,\n* sortFn_text,\n* tableFeatures,\n* } from '@tanstack/react-table'\n* const features = tableFeatures({\n* columnFilteringFeature,\n* rowSortingFeature,\n* filteredRowModel: createFilteredRowModel(),\n* sortedRowModel: createSortedRowModel(),\n* filterFns: { includesString: filterFn_includesString, myCustomFilterFn },\n* sortFns: { alphanumeric: sortFn_alphanumeric, text: sortFn_text },\n* tableMeta: {} as { updateData: (rowIndex: number, columnId: string, value: unknown) => void },\n* columnMeta: {} as { align?: 'left' | 'right' },\n* });\n* const table = useTable({ features, columns, data });\n* ```\n*/\nfunction tableFeatures(features) {\n\treturn features;\n}\n\n//#endregion\nexport { tableFeatures };","//#region src/core/reactivity/coreReactivityFeature.utils.ts\n/**\n* Bridges atom instances to the `Store`/`ReadonlyStore` API by exposing\n* a `state` getter backed by `atom.get()`, and wiring `setState` for\n* writable atoms.\n*\n* @example\n* ```ts\n* const store = atomToStore(atom)\n* ```\n*/\nfunction atomToStore(atom) {\n\tconst store = atom;\n\tObject.defineProperty(atom, \"state\", { get() {\n\t\treturn atom.get();\n\t} });\n\tif (\"set\" in atom) store.setState = atom.set.bind(atom);\n\treturn store;\n}\n\n//#endregion\nexport { atomToStore };","//#region src/alien.ts\nconst NONE = 0;\nconst MUTABLE = 1;\nconst WATCHING = 2;\nconst RECURSED_CHECK = 4;\nconst RECURSED = 8;\nconst DIRTY = 16;\nconst PENDING = 32;\n/* @__NO_SIDE_EFFECTS__ */\nfunction createReactiveSystem({ update, notify, unwatched }) {\n\treturn {\n\t\tlink,\n\t\tunlink,\n\t\tpropagate,\n\t\tcheckDirty,\n\t\tshallowPropagate\n\t};\n\tfunction link(dep, sub, version) {\n\t\tconst prevDep = sub.depsTail;\n\t\tif (prevDep !== void 0 && prevDep.dep === dep) return;\n\t\tconst nextDep = prevDep !== void 0 ? prevDep.nextDep : sub.deps;\n\t\tif (nextDep !== void 0 && nextDep.dep === dep) {\n\t\t\tnextDep.version = version;\n\t\t\tsub.depsTail = nextDep;\n\t\t\treturn;\n\t\t}\n\t\tconst prevSub = dep.subsTail;\n\t\tif (prevSub !== void 0 && prevSub.version === version && prevSub.sub === sub) return;\n\t\tconst newLink = sub.depsTail = dep.subsTail = {\n\t\t\tversion,\n\t\t\tdep,\n\t\t\tsub,\n\t\t\tprevDep,\n\t\t\tnextDep,\n\t\t\tprevSub,\n\t\t\tnextSub: void 0\n\t\t};\n\t\tif (nextDep !== void 0) nextDep.prevDep = newLink;\n\t\tif (prevDep !== void 0) prevDep.nextDep = newLink;\n\t\telse sub.deps = newLink;\n\t\tif (prevSub !== void 0) prevSub.nextSub = newLink;\n\t\telse dep.subs = newLink;\n\t}\n\tfunction unlink(link, sub = link.sub) {\n\t\tconst dep = link.dep;\n\t\tconst prevDep = link.prevDep;\n\t\tconst nextDep = link.nextDep;\n\t\tconst nextSub = link.nextSub;\n\t\tconst prevSub = link.prevSub;\n\t\tif (nextDep !== void 0) nextDep.prevDep = prevDep;\n\t\telse sub.depsTail = prevDep;\n\t\tif (prevDep !== void 0) prevDep.nextDep = nextDep;\n\t\telse sub.deps = nextDep;\n\t\tif (nextSub !== void 0) nextSub.prevSub = prevSub;\n\t\telse dep.subsTail = prevSub;\n\t\tif (prevSub !== void 0) prevSub.nextSub = nextSub;\n\t\telse if ((dep.subs = nextSub) === void 0) unwatched(dep);\n\t\treturn nextDep;\n\t}\n\tfunction propagate(link) {\n\t\tlet next = link.nextSub;\n\t\tlet stack;\n\t\ttop: do {\n\t\t\tconst sub = link.sub;\n\t\t\tlet flags = sub.flags;\n\t\t\tif (!(flags & 60)) sub.flags = flags | 32;\n\t\t\telse if (!(flags & (4 | 8))) flags = 0;\n\t\t\telse if (!(flags & 4)) sub.flags = flags & ~8 | 32;\n\t\t\telse if (!(flags & (16 | 32)) && isValidLink(link, sub)) {\n\t\t\t\tsub.flags = flags | (8 | 32);\n\t\t\t\tflags &= 1;\n\t\t\t} else flags = 0;\n\t\t\tif (flags & 2) notify(sub);\n\t\t\tif (flags & 1) {\n\t\t\t\tconst subSubs = sub.subs;\n\t\t\t\tif (subSubs !== void 0) {\n\t\t\t\t\tconst nextSub = (link = subSubs).nextSub;\n\t\t\t\t\tif (nextSub !== void 0) {\n\t\t\t\t\t\tstack = {\n\t\t\t\t\t\t\tvalue: next,\n\t\t\t\t\t\t\tprev: stack\n\t\t\t\t\t\t};\n\t\t\t\t\t\tnext = nextSub;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((link = next) !== void 0) {\n\t\t\t\tnext = link.nextSub;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\twhile (stack !== void 0) {\n\t\t\t\tlink = stack.value;\n\t\t\t\tstack = stack.prev;\n\t\t\t\tif (link !== void 0) {\n\t\t\t\t\tnext = link.nextSub;\n\t\t\t\t\tcontinue top;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t} while (true);\n\t}\n\tfunction checkDirty(link, sub) {\n\t\tlet stack;\n\t\tlet checkDepth = 0;\n\t\tlet dirty = false;\n\t\ttop: do {\n\t\t\tconst dep = link.dep;\n\t\t\tconst flags = dep.flags;\n\t\t\tif (sub.flags & 16) dirty = true;\n\t\t\telse if ((flags & (1 | 16)) === (1 | 16)) {\n\t\t\t\tif (update(dep)) {\n\t\t\t\t\tconst subs = dep.subs;\n\t\t\t\t\tif (subs.nextSub !== void 0) shallowPropagate(subs);\n\t\t\t\t\tdirty = true;\n\t\t\t\t}\n\t\t\t} else if ((flags & (1 | 32)) === (1 | 32)) {\n\t\t\t\tif (link.nextSub !== void 0 || link.prevSub !== void 0) stack = {\n\t\t\t\t\tvalue: link,\n\t\t\t\t\tprev: stack\n\t\t\t\t};\n\t\t\t\tlink = dep.deps;\n\t\t\t\tsub = dep;\n\t\t\t\t++checkDepth;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!dirty) {\n\t\t\t\tconst nextDep = link.nextDep;\n\t\t\t\tif (nextDep !== void 0) {\n\t\t\t\t\tlink = nextDep;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (checkDepth--) {\n\t\t\t\tconst firstSub = sub.subs;\n\t\t\t\tconst hasMultipleSubs = firstSub.nextSub !== void 0;\n\t\t\t\tif (hasMultipleSubs) {\n\t\t\t\t\tlink = stack.value;\n\t\t\t\t\tstack = stack.prev;\n\t\t\t\t} else link = firstSub;\n\t\t\t\tif (dirty) {\n\t\t\t\t\tif (update(sub)) {\n\t\t\t\t\t\tif (hasMultipleSubs) shallowPropagate(firstSub);\n\t\t\t\t\t\tsub = link.sub;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdirty = false;\n\t\t\t\t} else sub.flags &= ~32;\n\t\t\t\tsub = link.sub;\n\t\t\t\tconst nextDep = link.nextDep;\n\t\t\t\tif (nextDep !== void 0) {\n\t\t\t\t\tlink = nextDep;\n\t\t\t\t\tcontinue top;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dirty;\n\t\t} while (true);\n\t}\n\tfunction shallowPropagate(link) {\n\t\tdo {\n\t\t\tconst sub = link.sub;\n\t\t\tconst flags = sub.flags;\n\t\t\tif ((flags & (32 | 16)) === 32) {\n\t\t\t\tsub.flags = flags | 16;\n\t\t\t\tif ((flags & (2 | 4)) === 2) notify(sub);\n\t\t\t}\n\t\t} while ((link = link.nextSub) !== void 0);\n\t}\n\tfunction isValidLink(checkLink, sub) {\n\t\tlet link = sub.depsTail;\n\t\twhile (link !== void 0) {\n\t\t\tif (link === checkLink) return true;\n\t\t\tlink = link.prevDep;\n\t\t}\n\t\treturn false;\n\t}\n}\n\n//#endregion\nexport { createReactiveSystem };\n//# sourceMappingURL=alien.js.map","import { createReactiveSystem } from \"./alien.js\";\n\n//#region src/atom.ts\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n\tconst isObserver = typeof nextHandler === \"object\";\n\tconst self = isObserver ? nextHandler : void 0;\n\treturn {\n\t\tnext: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n\t\terror: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n\t\tcomplete: (isObserver ? nextHandler.complete : completionHandler)?.bind(self)\n\t};\n}\nconst queuedEffects = [];\nlet cycle = 0;\nconst { link, unlink, propagate, checkDirty, shallowPropagate } = /* @__PURE__ */ createReactiveSystem({\n\tupdate(atom) {\n\t\treturn atom._update();\n\t},\n\tnotify(effect) {\n\t\tqueuedEffects[queuedEffectsLength++] = effect;\n\t\teffect.flags &= ~2;\n\t},\n\tunwatched(atom) {\n\t\tif (atom.depsTail !== void 0) {\n\t\t\tatom.depsTail = void 0;\n\t\t\tatom.flags = 1 | 16;\n\t\t\tpurgeDeps(atom);\n\t\t}\n\t}\n});\nlet notifyIndex = 0;\nlet queuedEffectsLength = 0;\nlet activeSub;\nlet batchDepth = 0;\nfunction batch(fn) {\n\ttry {\n\t\t++batchDepth;\n\t\tfn();\n\t} finally {\n\t\tif (!--batchDepth) flush();\n\t}\n}\nfunction purgeDeps(sub) {\n\tconst depsTail = sub.depsTail;\n\tlet dep = depsTail !== void 0 ? depsTail.nextDep : sub.deps;\n\twhile (dep !== void 0) dep = unlink(dep, sub);\n}\nfunction flush() {\n\tif (batchDepth > 0) return;\n\twhile (notifyIndex < queuedEffectsLength) {\n\t\tconst effect = queuedEffects[notifyIndex];\n\t\tqueuedEffects[notifyIndex++] = void 0;\n\t\teffect.notify();\n\t}\n\tnotifyIndex = 0;\n\tqueuedEffectsLength = 0;\n}\nfunction createAsyncAtom(getValue, options) {\n\tconst ref = {};\n\tconst atom = createAtom(() => {\n\t\tgetValue().then((data) => {\n\t\t\tconst internalAtom = ref.current;\n\t\t\tif (internalAtom._update({\n\t\t\t\tstatus: \"done\",\n\t\t\t\tdata\n\t\t\t})) {\n\t\t\t\tconst subs = internalAtom.subs;\n\t\t\t\tif (subs !== void 0) {\n\t\t\t\t\tpropagate(subs);\n\t\t\t\t\tshallowPropagate(subs);\n\t\t\t\t\tflush();\n\t\t\t\t}\n\t\t\t}\n\t\t}, (error) => {\n\t\t\tconst internalAtom = ref.current;\n\t\t\tif (internalAtom._update({\n\t\t\t\tstatus: \"error\",\n\t\t\t\terror\n\t\t\t})) {\n\t\t\t\tconst subs = internalAtom.subs;\n\t\t\t\tif (subs !== void 0) {\n\t\t\t\t\tpropagate(subs);\n\t\t\t\t\tshallowPropagate(subs);\n\t\t\t\t\tflush();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn { status: \"pending\" };\n\t}, options);\n\tref.current = atom;\n\treturn atom;\n}\nfunction createAtom(valueOrFn, options) {\n\tconst isComputed = typeof valueOrFn === \"function\";\n\tconst getter = valueOrFn;\n\tconst atom = {\n\t\t_snapshot: isComputed ? void 0 : valueOrFn,\n\t\tsubs: void 0,\n\t\tsubsTail: void 0,\n\t\tdeps: void 0,\n\t\tdepsTail: void 0,\n\t\tflags: isComputed ? 0 : 1,\n\t\tget() {\n\t\t\tif (activeSub !== void 0) link(atom, activeSub, cycle);\n\t\t\treturn atom._snapshot;\n\t\t},\n\t\tsubscribe(observerOrFn) {\n\t\t\tconst obs = toObserver(observerOrFn);\n\t\t\tconst observed = { current: false };\n\t\t\tconst e = effect(() => {\n\t\t\t\tatom.get();\n\t\t\t\tif (!observed.current) observed.current = true;\n\t\t\t\telse {\n\t\t\t\t\tactiveSub = void 0;\n\t\t\t\t\tobs.next?.(atom._snapshot);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn { unsubscribe: () => {\n\t\t\t\te.stop();\n\t\t\t} };\n\t\t},\n\t\t_update(getValue) {\n\t\t\tconst prevSub = activeSub;\n\t\t\tconst compare = options?.compare ?? Object.is;\n\t\t\tif (isComputed) {\n\t\t\t\tactiveSub = atom;\n\t\t\t\t++cycle;\n\t\t\t\tatom.depsTail = void 0;\n\t\t\t} else if (getValue === void 0) return false;\n\t\t\tif (isComputed) atom.flags = 1 | 4;\n\t\t\ttry {\n\t\t\t\tconst oldValue = atom._snapshot;\n\t\t\t\tconst newValue = typeof getValue === \"function\" ? getValue(oldValue) : getValue === void 0 && isComputed ? getter(oldValue) : getValue;\n\t\t\t\tif (oldValue === void 0 || !compare(oldValue, newValue)) {\n\t\t\t\t\tatom._snapshot = newValue;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} finally {\n\t\t\t\tactiveSub = prevSub;\n\t\t\t\tif (isComputed) atom.flags &= ~4;\n\t\t\t\tpurgeDeps(atom);\n\t\t\t}\n\t\t}\n\t};\n\tif (isComputed) {\n\t\tatom.flags = 1 | 16;\n\t\tatom.get = function() {\n\t\t\tconst flags = atom.flags;\n\t\t\tif (flags & 16 || flags & 32 && checkDirty(atom.deps, atom)) {\n\t\t\t\tif (atom._update()) {\n\t\t\t\t\tconst subs = atom.subs;\n\t\t\t\t\tif (subs !== void 0) shallowPropagate(subs);\n\t\t\t\t}\n\t\t\t} else if (flags & 32) atom.flags = flags & ~32;\n\t\t\tif (activeSub !== void 0) link(atom, activeSub, cycle);\n\t\t\treturn atom._snapshot;\n\t\t};\n\t} else atom.set = function(valueOrFn) {\n\t\tif (atom._update(valueOrFn)) {\n\t\t\tconst subs = atom.subs;\n\t\t\tif (subs !== void 0) {\n\t\t\t\tpropagate(subs);\n\t\t\t\tshallowPropagate(subs);\n\t\t\t\tflush();\n\t\t\t}\n\t\t}\n\t};\n\treturn atom;\n}\nfunction effect(fn) {\n\tconst run = () => {\n\t\tconst prevSub = activeSub;\n\t\tactiveSub = effectObj;\n\t\t++cycle;\n\t\teffectObj.depsTail = void 0;\n\t\teffectObj.flags = 2 | 4;\n\t\ttry {\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tactiveSub = prevSub;\n\t\t\teffectObj.flags &= ~4;\n\t\t\tpurgeDeps(effectObj);\n\t\t}\n\t};\n\tconst effectObj = {\n\t\tdeps: void 0,\n\t\tdepsTail: void 0,\n\t\tsubs: void 0,\n\t\tsubsTail: void 0,\n\t\tflags: 2 | 4,\n\t\tnotify() {\n\t\t\tconst flags = this.flags;\n\t\t\tif (flags & 16 || flags & 32 && checkDirty(this.deps, this)) run();\n\t\t\telse this.flags = 2;\n\t\t},\n\t\tstop() {\n\t\t\tthis.flags = 0;\n\t\t\tthis.depsTail = void 0;\n\t\t\tpurgeDeps(this);\n\t\t}\n\t};\n\trun();\n\treturn effectObj;\n}\n\n//#endregion\nexport { batch, createAsyncAtom, createAtom, flush, toObserver };\n//# sourceMappingURL=atom.js.map","//#region src/shallow.ts\nfunction shallow(objA, objB) {\n\tif (Object.is(objA, objB)) return true;\n\tif (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) return false;\n\tif (objA instanceof Map && objB instanceof Map) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const [k, v] of objA) if (!objB.has(k) || !Object.is(v, objB.get(k))) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Set && objB instanceof Set) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const v of objA) if (!objB.has(v)) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Date && objB instanceof Date) {\n\t\tif (objA.getTime() !== objB.getTime()) return false;\n\t\treturn true;\n\t}\n\tconst keysA = getOwnKeys(objA);\n\tif (keysA.length !== getOwnKeys(objB).length) return false;\n\tfor (let i = 0; i < keysA.length; i++) if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) return false;\n\treturn true;\n}\nfunction getOwnKeys(obj) {\n\treturn Object.keys(obj).concat(Object.getOwnPropertySymbols(obj));\n}\n\n//#endregion\nexport { shallow };\n//# sourceMappingURL=shallow.js.map","import { cloneState, hasOwn } from \"../../utils.js\";\nimport { table_syncExternalStateToBaseAtoms } from \"./coreTablesFeature.utils.js\";\nimport { coreFeatures } from \"../coreFeatures.js\";\nimport { atomToStore } from \"../reactivity/coreReactivityFeature.utils.js\";\nimport { shallow } from \"@tanstack/store\";\n\n//#region src/core/table/constructTable.ts\n/**\n* Builds the initial table state from registered features and user initial state.\n*\n* Each feature contributes its default state before user-provided `initialState` values are merged in.\n*/\nfunction getInitialTableState(features, initialState = {}) {\n\tObject.values(features).forEach((feature) => {\n\t\tinitialState = feature.getInitialState?.(initialState) ?? initialState;\n\t});\n\treturn cloneState(initialState);\n}\n/**\n* Constructs a table instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructTable(tableOptions) {\n\tconst _reactivity = tableOptions.features.coreReactivityFeature;\n\tconst { aggregationFns, columnMeta: _columnMeta, coreRowModel, expandedRowModel, facetedMinMaxValues, facetedRowModel, facetedUniqueValues, filterFns, filterMeta: _filterMeta, filteredRowModel, groupedRowModel, paginatedRowModel, sortFns, sortedRowModel, tableMeta: _tableMeta, ...features } = tableOptions.features;\n\tconst table = {\n\t\t_cellInstanceInitFns: [],\n\t\t_columnInstanceInitFns: [],\n\t\t_features: {\n\t\t\t...coreFeatures,\n\t\t\t...features\n\t\t},\n\t\t_headerGroupInstanceInitFns: [],\n\t\t_headerInstanceInitFns: [],\n\t\t_reactivity,\n\t\t_rowInstanceInitFns: [],\n\t\t_rowModelFns: {\n\t\t\taggregationFns,\n\t\t\tfilterFns,\n\t\t\tsortFns\n\t\t},\n\t\t_rowModels: {},\n\t\tatoms: {},\n\t\tbaseAtoms: {}\n\t};\n\tconst featuresList = Object.values(table._features);\n\tconst mergedOptions = {\n\t\t...featuresList.reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultTableOptions?.(table));\n\t\t}, {}),\n\t\t...tableOptions\n\t};\n\tif (_reactivity.wrapExternalAtoms && mergedOptions.atoms) for (const [atomKey, _atom] of Object.entries(mergedOptions.atoms)) {\n\t\tconst atom = _atom;\n\t\tconst wrappedAtom = _reactivity.createWritableAtom(atom.get(), { debugName: `externalAtom/${atomKey}` });\n\t\tmergedOptions.atoms[atomKey] = wrappedAtom;\n\t\tlet syncExternal = false;\n\t\tconst syncAtomToWrappedSub = atom.subscribe((value) => {\n\t\t\tif (syncExternal) return;\n\t\t\twrappedAtom.set(value);\n\t\t});\n\t\tconst syncWrappedToAtomSub = wrappedAtom.subscribe((value) => {\n\t\t\tsyncExternal = true;\n\t\t\tatom.set(value);\n\t\t\tsyncExternal = false;\n\t\t});\n\t\t_reactivity.addSubscription(syncAtomToWrappedSub);\n\t\t_reactivity.addSubscription(syncWrappedToAtomSub);\n\t}\n\tif (_reactivity.createOptionsStore) {\n\t\ttable.optionsStore = _reactivity.createWritableAtom(mergedOptions, { debugName: \"table/optionsStore\" });\n\t\tObject.defineProperty(table, \"options\", {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\treturn table.optionsStore.get();\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\ttable.optionsStore.set(() => value);\n\t\t\t}\n\t\t});\n\t} else table.options = mergedOptions;\n\ttable.initialState = getInitialTableState(table._features, table.options.initialState);\n\tconst stateKeys = Object.keys(table.initialState);\n\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\tconst key = stateKeys[i];\n\t\ttable.baseAtoms[key] = _reactivity.createWritableAtom(table.initialState[key], { debugName: `table/baseAtoms/${key}` });\n\t\ttable.atoms[key] = _reactivity.createReadonlyAtom(() => {\n\t\t\tconst options = table.options;\n\t\t\tconst externalAtom = options.atoms?.[key];\n\t\t\tconst reactiveState = externalAtom ? externalAtom.get() : table.baseAtoms[key].get();\n\t\t\tif (externalAtom) return reactiveState;\n\t\t\tconst controlledState = options.state;\n\t\t\tif (controlledState && hasOwn(controlledState, key)) {\n\t\t\t\tconst controlledValue = controlledState[key];\n\t\t\t\treturn controlledValue === void 0 ? table.initialState[key] : controlledValue;\n\t\t\t}\n\t\t\treturn reactiveState;\n\t\t}, { debugName: `table/atoms/${key}` });\n\t}\n\ttable_syncExternalStateToBaseAtoms(table);\n\ttable.store = atomToStore(_reactivity.createReadonlyAtom(() => {\n\t\tconst snapshot = {};\n\t\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\t\tconst key = stateKeys[i];\n\t\t\tsnapshot[key] = table.atoms[key].get();\n\t\t}\n\t\treturn snapshot;\n\t}, {\n\t\tcompare: shallow,\n\t\tdebugName: \"table/store\"\n\t}));\n\tfor (let i = 0; i < featuresList.length; i++) {\n\t\tconst feature = featuresList[i];\n\t\tfeature.initTableInstanceData?.(table);\n\t\tif (feature.initCellInstanceData) table._cellInstanceInitFns.push(feature.initCellInstanceData.bind(feature));\n\t\tif (feature.initColumnInstanceData) table._columnInstanceInitFns.push(feature.initColumnInstanceData.bind(feature));\n\t\tif (feature.initHeaderGroupInstanceData) table._headerGroupInstanceInitFns.push(feature.initHeaderGroupInstanceData.bind(feature));\n\t\tif (feature.initHeaderInstanceData) table._headerInstanceInitFns.push(feature.initHeaderInstanceData.bind(feature));\n\t\tif (feature.initRowInstanceData) table._rowInstanceInitFns.push(feature.initRowInstanceData.bind(feature));\n\t\tfeature.constructTableAPIs?.(table);\n\t}\n\tif (process.env.NODE_ENV === \"development\" && (tableOptions.debugAll || tableOptions.debugTable)) {\n\t\tconst features = Object.keys(table._features);\n\t\tconst rowModels = Object.entries({\n\t\t\tcoreRowModel,\n\t\t\tfilteredRowModel,\n\t\t\tgroupedRowModel,\n\t\t\tsortedRowModel,\n\t\t\texpandedRowModel,\n\t\t\tpaginatedRowModel,\n\t\t\tfacetedRowModel,\n\t\t\tfacetedMinMaxValues,\n\t\t\tfacetedUniqueValues\n\t\t}).filter(([, factory]) => factory).map(([key]) => key);\n\t\tconst states = Object.keys(table.initialState);\n\t\tconsole.log(`Constructing Table Instance\n\n Features: ${features.join(\"\\n \")}\n\n Row Models: ${rowModels.length ? rowModels.join(\"\\n \") : \"(none)\"}\n\n States: ${states.join(\"\\n \")}\\n`, { table });\n\t}\n\treturn table;\n}\n\n//#endregion\nexport { constructTable, getInitialTableState };","import { callMemoOrStaticFn, cloneState, setStateSlice } from \"../../utils.js\";\nimport { getIsColumnVisible, getVisibleCells, getVisibleCellsByColumnId, getVisibleLeafColumns } from \"../../core/featureStubs.js\";\nimport { buildHeaderGroups } from \"../../core/headers/buildHeaderGroups.js\";\n\n//#region src/features/column-pinning/columnPinningFeature.utils.ts\n/**\n* Creates the default column pinning state.\n*\n* Both pinning regions start empty. Reset APIs use this value when\n* `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const pinning = getDefaultColumnPinningState()\n* ```\n*/\nfunction getDefaultColumnPinningState() {\n\treturn {\n\t\tstart: [],\n\t\tend: []\n\t};\n}\n/**\n* Moves this column's leaf column ids into a pinning region.\n*\n* Pinning a group column pins all of its leaves. The leaf ids are first removed\n* from both regions, then appended to the requested `'start'` or `'end'`\n* region. Passing `false` unpins them back to the center.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* column_pin(column, 'start')\n* ```\n*/\nfunction column_pin(column, position) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst columnIds = [];\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst id = leafColumns[i].id;\n\t\tif (id) columnIds.push(id);\n\t}\n\ttable_setColumnPinning(column.table, (old) => {\n\t\tif (position === \"end\") return {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: [...old.end.filter((d) => !columnIds.includes(d)), ...columnIds]\n\t\t};\n\t\tif (position === \"start\") return {\n\t\t\tstart: [...old.start.filter((d) => !columnIds.includes(d)), ...columnIds],\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t\treturn {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t});\n}\n/**\n* Checks whether this column or any of its leaf columns can be pinned.\n*\n* Column-level `enablePinning` and table `enableColumnPinning` both default to\n* `true`; at least one leaf column must allow pinning.\n*\n* @example\n* ```ts\n* const canPin = column_getCanPin(column)\n* ```\n*/\nfunction column_getCanPin(column) {\n\treturn column.getLeafColumns().some((leafColumn) => (leafColumn.columnDef.enablePinning ?? true) && (column.table.options.enableColumnPinning ?? true));\n}\n/**\n* Reads this column's current pinning region.\n*\n* Group columns report `'start'` or `'end'` when any leaf column is pinned in\n* that region. Unpinned columns return `false`.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const position = column_getIsPinned(column)\n* ```\n*/\nfunction column_getIsPinned(column) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst { start, end } = column.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tfor (let i = 0; i < leafColumns.length; i++) if (start.includes(leafColumns[i].id)) return \"start\";\n\tfor (let i = 0; i < leafColumns.length; i++) if (end.includes(leafColumns[i].id)) return \"end\";\n\treturn false;\n}\n/**\n* Finds this column's index within its pinned region.\n*\n* Unpinned columns return `0`; pinned columns return their position in\n* `state.columnPinning.start` or `state.columnPinning.end`.\n*\n* @example\n* ```ts\n* const index = column_getPinnedIndex(column)\n* ```\n*/\nfunction column_getPinnedIndex(column) {\n\tconst position = column_getIsPinned(column);\n\treturn position ? column.table.atoms.columnPinning?.get()?.[position].indexOf(column.id) ?? -1 : 0;\n}\n/**\n* Collects visible cells whose columns are not pinned start or end.\n*\n* The result preserves the row's visible-cell order for center columns.\n*\n* @example\n* ```ts\n* const centerCells = row_getCenterVisibleCells(row)\n* ```\n*/\nfunction row_getCenterVisibleCells(row) {\n\tconst allCells = getVisibleCells(row);\n\tconst { start, end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return allCells;\n\tconst startAndEnd = [...start, ...end];\n\treturn allCells.filter((d) => !startAndEnd.includes(d.column.id));\n}\n/**\n* Collects visible cells for columns pinned to the start region.\n*\n* Cells are returned in `state.columnPinning.start` order and are marked with\n* `cell.position = 'start'`.\n*\n* @example\n* ```ts\n* const startCells = row_getStartVisibleCells(row)\n* ```\n*/\nfunction row_getStartVisibleCells(row) {\n\tconst { start } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length) return [];\n\tconst allVisibleCells = getVisibleCellsByColumnId(row);\n\tconst cells = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst cell = allVisibleCells[start[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"start\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Collects visible cells for columns pinned to the end region.\n*\n* Cells are returned in `state.columnPinning.end` order and are marked with\n* `cell.position = 'end'`.\n*\n* @example\n* ```ts\n* const endCells = row_getEndVisibleCells(row)\n* ```\n*/\nfunction row_getEndVisibleCells(row) {\n\tconst { end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!end.length) return [];\n\tconst allVisibleCells = getVisibleCellsByColumnId(row);\n\tconst cells = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst cell = allVisibleCells[end[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"end\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Routes a column pinning updater through the table's pinning change handler.\n*\n* The updater may be a next `{ start, end }` state or a function of the\n* previous state, matching the instance `table.setColumnPinning` behavior.\n*\n* @example\n* ```ts\n* table_setColumnPinning(table, (old) => ({ ...old, start: ['select'] }))\n* ```\n*/\nfunction table_setColumnPinning(table, updater) {\n\tsetStateSlice(table, \"columnPinning\", updater);\n}\n/**\n* Resets `columnPinning` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnPinning` when it\n* exists. Passing `true` ignores initial state and resets to empty start/end\n* arrays.\n*\n* @example\n* ```ts\n* table_resetColumnPinning(table)\n* table_resetColumnPinning(table, true)\n* ```\n*/\nfunction table_resetColumnPinning(table, defaultState) {\n\ttable_setColumnPinning(table, defaultState ? getDefaultColumnPinningState() : cloneState(table.initialState.columnPinning ?? getDefaultColumnPinningState()));\n}\n/**\n* Checks whether any columns are pinned.\n*\n* Omit `position` to check both sides, or pass `'start'`/`'end'` to inspect a\n* single pinning region.\n*\n* @example\n* ```ts\n* const hasPinnedColumns = table_getIsSomeColumnsPinned(table)\n* ```\n*/\nfunction table_getIsSomeColumnsPinned(table, position) {\n\tconst pinningState = table.atoms.columnPinning?.get();\n\tif (!position) return Boolean(pinningState?.start.length || pinningState?.end.length);\n\treturn Boolean(pinningState?.[position].length);\n}\n/**\n* Builds header groups for visible columns pinned to the start region.\n*\n* The leaf columns are read in `state.columnPinning.start` order and then passed\n* through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getStartHeaderGroups(table)\n* ```\n*/\nfunction table_getStartHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column && getIsColumnVisible(column)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"start\");\n}\n/**\n* Builds header groups for visible columns pinned to the end region.\n*\n* The leaf columns are read in `state.columnPinning.end` order and then\n* passed through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getEndHeaderGroups(table)\n* ```\n*/\nfunction table_getEndHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column && getIsColumnVisible(column)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"end\");\n}\n/**\n* Builds header groups for visible columns that are not pinned.\n*\n* Start- and end-pinned column ids are removed from the visible leaf column\n* list before header groups are built for the center region.\n*\n* @example\n* ```ts\n* const headerGroups = table_getCenterHeaderGroups(table)\n* ```\n*/\nfunction table_getCenterHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tlet leafColumns = getVisibleLeafColumns(table);\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (start.length || end.length) {\n\t\tconst startAndEnd = [...start, ...end];\n\t\tleafColumns = leafColumns.filter((column) => !startAndEnd.includes(column.id));\n\t}\n\treturn buildHeaderGroups(allColumns, leafColumns, table, \"center\");\n}\n/**\n* Builds footer groups for the start pinned region.\n*\n* Footer groups reuse the start header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getStartFooterGroups(table)\n* ```\n*/\nfunction table_getStartFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the end pinned region.\n*\n* Footer groups reuse the end header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getEndFooterGroups(table)\n* ```\n*/\nfunction table_getEndFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the center, unpinned region.\n*\n* Footer groups reuse the center header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getCenterFooterGroups(table)\n* ```\n*/\nfunction table_getCenterFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)].reverse();\n}\n/**\n* Flattens every header from the start pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getStartFlatHeaders(table)\n* ```\n*/\nfunction table_getStartFlatHeaders(table) {\n\tconst leftHeaderGroups = callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < leftHeaderGroups.length; i++) {\n\t\tconst headers = leftHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the end pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getEndFlatHeaders(table)\n* ```\n*/\nfunction table_getEndFlatHeaders(table) {\n\tconst rightHeaderGroups = callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < rightHeaderGroups.length; i++) {\n\t\tconst headers = rightHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the center header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getCenterFlatHeaders(table)\n* ```\n*/\nfunction table_getCenterFlatHeaders(table) {\n\tconst centerHeaderGroups = callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < centerHeaderGroups.length; i++) {\n\t\tconst headers = centerHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects leaf headers for the start pinned region.\n*\n* Parent headers are filtered out from the start flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getStartLeafHeaders(table)\n* ```\n*/\nfunction table_getStartLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getStartFlatHeaders\", table_getStartFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the end pinned region.\n*\n* Parent headers are filtered out from the end flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getEndLeafHeaders(table)\n* ```\n*/\nfunction table_getEndLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getEndFlatHeaders\", table_getEndFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the center, unpinned region.\n*\n* Parent headers are filtered out from the center flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getCenterLeafHeaders(table)\n* ```\n*/\nfunction table_getCenterLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterFlatHeaders\", table_getCenterFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Resolves leaf columns pinned to the start region.\n*\n* The result follows `state.columnPinning.start` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getStartLeafColumns(table)\n* ```\n*/\nfunction table_getStartLeafColumns(table) {\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns pinned to the end region.\n*\n* The result follows `state.columnPinning.end` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getEndLeafColumns(table)\n* ```\n*/\nfunction table_getEndLeafColumns(table) {\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns that are not pinned to either logical side.\n*\n* Start- and end-pinned ids are removed from `table.getAllLeafColumns()`.\n*\n* @example\n* ```ts\n* const columns = table_getCenterLeafColumns(table)\n* ```\n*/\nfunction table_getCenterLeafColumns(table) {\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return table.getAllLeafColumns();\n\tconst startAndEnd = [...start, ...end];\n\treturn table.getAllLeafColumns().filter((d) => !startAndEnd.includes(d.id));\n}\n/**\n* Resolves leaf columns for a requested pinning region.\n*\n* Pass `'start'`, `'center'`, or `'end'` for a partition, or pass `false` to\n* read all leaf columns without partitioning.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedLeafColumns(table, 'center')\n* ```\n*/\nfunction table_getPinnedLeafColumns(table, position) {\n\treturn !position ? table.getAllLeafColumns() : position === \"start\" ? callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns) : callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns);\n}\n/**\n* Resolves visible leaf columns pinned to the start region.\n*\n* Hidden pinned columns are filtered out after the start pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getStartVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getStartVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns).filter((column) => getIsColumnVisible(column));\n}\n/**\n* Resolves visible leaf columns pinned to the end region.\n*\n* Hidden pinned columns are filtered out after the end pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getEndVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getEndVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns).filter((column) => getIsColumnVisible(column));\n}\n/**\n* Resolves visible leaf columns that are not pinned.\n*\n* This is the center partition used by layouts that render pinned columns\n* separately from the scrollable middle region.\n*\n* @example\n* ```ts\n* const columns = table_getCenterVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getCenterVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns).filter((column) => getIsColumnVisible(column));\n}\n/**\n* Resolves visible leaf columns for a requested pinning region.\n*\n* Omit `position` to get all visible leaf columns, or pass `'start'`, `'center'`,\n* or `'end'` to get one partition.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedVisibleLeafColumns(table, 'start')\n* ```\n*/\nfunction table_getPinnedVisibleLeafColumns(table, position) {\n\treturn !position ? getVisibleLeafColumns(table) : position === \"start\" ? callMemoOrStaticFn(table, \"getStartVisibleLeafColumns\", table_getStartVisibleLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndVisibleLeafColumns\", table_getEndVisibleLeafColumns) : callMemoOrStaticFn(table, \"getCenterVisibleLeafColumns\", table_getCenterVisibleLeafColumns);\n}\n\n//#endregion\nexport { column_getCanPin, column_getIsPinned, column_getPinnedIndex, column_pin, getDefaultColumnPinningState, row_getCenterVisibleCells, row_getEndVisibleCells, row_getStartVisibleCells, table_getCenterFlatHeaders, table_getCenterFooterGroups, table_getCenterHeaderGroups, table_getCenterLeafColumns, table_getCenterLeafHeaders, table_getCenterVisibleLeafColumns, table_getEndFlatHeaders, table_getEndFooterGroups, table_getEndHeaderGroups, table_getEndLeafColumns, table_getEndLeafHeaders, table_getEndVisibleLeafColumns, table_getIsSomeColumnsPinned, table_getPinnedLeafColumns, table_getPinnedVisibleLeafColumns, table_getStartFlatHeaders, table_getStartFooterGroups, table_getStartHeaderGroups, table_getStartLeafColumns, table_getStartLeafHeaders, table_getStartVisibleLeafColumns, table_resetColumnPinning, table_setColumnPinning };","import { makeObjectMap } from \"../../utils.js\";\n\n//#region src/features/column-pinning/orderByColumnPinning.ts\n/**\n* Display order for column pinning, shared through the `orderByColumnPinning`\n* feature stub so that the core headers, row visible cells, and cell selection\n* don't bundle it when the column pinning feature is not registered.\n*\n* Internal: not exported from any package entry point.\n*/\n/**\n* Orders items that each belong to a leaf column, such as visible leaf\n* columns or a row's visible cells: start-pinned items in pinning order, then\n* unpinned items in their given order, then end-pinned items in pinning order.\n* Pinned ids that match no item are skipped.\n*\n* `getItemsByColumnId` can return an existing lookup of the same items, which\n* is only read when something is pinned.\n*/\nfunction orderByColumnPinning(table, items, getColumnId, getItemsByColumnId) {\n\tconst columnPinning = table.atoms.columnPinning?.get();\n\tif (!columnPinning || !columnPinning.start.length && !columnPinning.end.length) return items;\n\tconst { start, end } = columnPinning;\n\tlet itemsByColumnId = getItemsByColumnId?.();\n\tif (!itemsByColumnId) {\n\t\titemsByColumnId = makeObjectMap();\n\t\tfor (let i = 0; i < items.length; i++) itemsByColumnId[getColumnId(items[i])] = items[i];\n\t}\n\tconst ordered = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst item = itemsByColumnId[start[i]];\n\t\tif (item) ordered.push(item);\n\t}\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst columnId = getColumnId(items[i]);\n\t\tif (!start.includes(columnId) && !end.includes(columnId)) ordered.push(items[i]);\n\t}\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst item = itemsByColumnId[end[i]];\n\t\tif (item) ordered.push(item);\n\t}\n\treturn ordered;\n}\n\n//#endregion\nexport { orderByColumnPinning };","import { assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, makeStateUpdater } from \"../../utils.js\";\nimport { getVisibleLeafColumns } from \"../../core/featureStubs.js\";\nimport { column_getCanPin, column_getIsPinned, column_getPinnedIndex, column_pin, getDefaultColumnPinningState, row_getCenterVisibleCells, row_getEndVisibleCells, row_getStartVisibleCells, table_getCenterFlatHeaders, table_getCenterFooterGroups, table_getCenterHeaderGroups, table_getCenterLeafColumns, table_getCenterLeafHeaders, table_getCenterVisibleLeafColumns, table_getEndFlatHeaders, table_getEndFooterGroups, table_getEndHeaderGroups, table_getEndLeafColumns, table_getEndLeafHeaders, table_getEndVisibleLeafColumns, table_getIsSomeColumnsPinned, table_getPinnedLeafColumns, table_getPinnedVisibleLeafColumns, table_getStartFlatHeaders, table_getStartFooterGroups, table_getStartHeaderGroups, table_getStartLeafColumns, table_getStartLeafHeaders, table_getStartVisibleLeafColumns, table_resetColumnPinning, table_setColumnPinning } from \"./columnPinningFeature.utils.js\";\nimport { orderByColumnPinning } from \"./orderByColumnPinning.js\";\n\n//#region src/features/column-pinning/columnPinningFeature.ts\n/**\n* Feature that adds column pinning state and APIs for logical start, center,\n* and end regions.\n*\n* In LTR languages/layouts, start usually corresponds to left and end to\n* right. In RTL languages/layouts, start usually corresponds to right and end\n* to left.\n*/\nconst columnPinningFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnPinning: {\n\t\t\t\t...getDefaultColumnPinningState(),\n\t\t\t\t...initialState.columnPinning\n\t\t\t},\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnPinningChange: makeStateUpdater(\"columnPinning\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnPinningFeature\", prototype, table, {\n\t\t\tcolumn_pin: { fn: (column, position) => column_pin(column, position) },\n\t\t\tcolumn_getCanPin: { fn: (column) => column_getCanPin(column) },\n\t\t\tcolumn_getPinnedIndex: { fn: (column) => column_getPinnedIndex(column) },\n\t\t\tcolumn_getIsPinned: { fn: (column) => column_getIsPinned(column) }\n\t\t});\n\t},\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnPinningFeature\", prototype, table, {\n\t\t\trow_getCenterVisibleCells: {\n\t\t\t\tfn: (row) => row_getCenterVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\trow.table.atoms.columnPinning?.get(),\n\t\t\t\t\trow.table.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getStartVisibleCells: {\n\t\t\t\tfn: (row) => row_getStartVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\trow.table.atoms.columnPinning?.get()?.start,\n\t\t\t\t\trow.table.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getEndVisibleCells: {\n\t\t\t\tfn: (row) => row_getEndVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\trow.table.atoms.columnPinning?.get()?.end,\n\t\t\t\t\trow.table.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnPinningFeature\", table, {\n\t\t\ttable_setColumnPinning: { fn: (updater) => table_setColumnPinning(table, updater) },\n\t\t\ttable_resetColumnPinning: { fn: (defaultState) => table_resetColumnPinning(table, defaultState) },\n\t\t\ttable_getIsSomeColumnsPinned: { fn: (position) => table_getIsSomeColumnsPinned(table, position) },\n\t\t\ttable__orderByColumnPinning: { fn: (items, getColumnId, getItemsByColumnId) => orderByColumnPinning(table, items, getColumnId, getItemsByColumnId) },\n\t\t\ttable_getStartHeaderGroups: {\n\t\t\t\tfn: () => table_getStartHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getAllColumns(),\n\t\t\t\t\tgetVisibleLeafColumns(table),\n\t\t\t\t\ttable.atoms.columnPinning?.get()?.start,\n\t\t\t\t\ttable.atoms.columnOrder?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getCenterHeaderGroups: {\n\t\t\t\tfn: () => table_getCenterHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getAllColumns(),\n\t\t\t\t\tgetVisibleLeafColumns(table),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getEndHeaderGroups: {\n\t\t\t\tfn: () => table_getEndHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getAllColumns(),\n\t\t\t\t\tgetVisibleLeafColumns(table),\n\t\t\t\t\ttable.atoms.columnPinning?.get()?.end,\n\t\t\t\t\ttable.atoms.columnOrder?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getStartFooterGroups: {\n\t\t\t\tfn: () => table_getStartFooterGroups(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getCenterFooterGroups: {\n\t\t\t\tfn: () => table_getCenterFooterGroups(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getEndFooterGroups: {\n\t\t\t\tfn: () => table_getEndFooterGroups(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getStartFlatHeaders: {\n\t\t\t\tfn: () => table_getStartFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getEndFlatHeaders: {\n\t\t\t\tfn: () => table_getEndFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getCenterFlatHeaders: {\n\t\t\t\tfn: () => table_getCenterFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getStartLeafHeaders: {\n\t\t\t\tfn: () => table_getStartLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getEndLeafHeaders: {\n\t\t\t\tfn: () => table_getEndLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getCenterLeafHeaders: {\n\t\t\t\tfn: () => table_getCenterLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getStartLeafColumns: {\n\t\t\t\tfn: () => table_getStartLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getEndLeafColumns: {\n\t\t\t\tfn: () => table_getEndLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getCenterLeafColumns: {\n\t\t\t\tfn: () => table_getCenterLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getPinnedLeafColumns: { fn: (position) => table_getPinnedLeafColumns(table, position) },\n\t\t\ttable_getStartVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getStartVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getCenterVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getCenterVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getEndVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getEndVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getPinnedVisibleLeafColumns: { fn: (position) => table_getPinnedVisibleLeafColumns(table, position) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnPinningFeature };","import { callMemoOrStaticFn, cloneState, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { getPinnedVisibleLeafColumns } from \"../../core/featureStubs.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.utils.ts\n/**\n* Creates the default committed column sizing state.\n*\n* The feature default is an empty map, so columns fall back to their column def\n* size or the built-in sizing defaults.\n*\n* @example\n* ```ts\n* const sizing = getDefaultColumnSizingState()\n* ```\n*/\nfunction getDefaultColumnSizingState() {\n\treturn makeObjectMap();\n}\n/**\n* Creates the built-in sizing defaults for column definitions.\n*\n* Columns default to `size: 150`, `minSize: 20`, and\n* `maxSize: Number.MAX_SAFE_INTEGER` unless overridden by column definitions or\n* table defaults.\n*\n* @example\n* ```ts\n* const defaults = getDefaultColumnSizingColumnDef()\n* ```\n*/\nfunction getDefaultColumnSizingColumnDef() {\n\treturn {\n\t\tsize: 150,\n\t\tminSize: 20,\n\t\tmaxSize: Number.MAX_SAFE_INTEGER\n\t};\n}\n/**\n* Resolves a column's current pixel size.\n*\n* Committed `state.columnSizing[column.id]` wins over `columnDef.size`, then the\n* built-in default size. The result is clamped between min and max size.\n*\n* @example\n* ```ts\n* const width = column_getSize(column)\n* ```\n*/\nfunction column_getSize(column) {\n\tconst defaultSizes = getDefaultColumnSizingColumnDef();\n\tconst columnSizing = column.table.atoms.columnSizing?.get();\n\tconst columnSize = columnSizing && hasOwn(columnSizing, column.id) ? columnSizing[column.id] : void 0;\n\treturn Math.min(Math.max(column.columnDef.minSize ?? defaultSizes.minSize, columnSize ?? column.columnDef.size ?? defaultSizes.size), column.columnDef.maxSize ?? defaultSizes.maxSize);\n}\nfunction buildColumnOffsets(columns) {\n\tconst starts = makeObjectMap();\n\tconst afters = makeObjectMap();\n\tconst sizes = new Array(columns.length);\n\tlet start = 0;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tconst size = callMemoOrStaticFn(column, \"getSize\", column_getSize);\n\t\tsizes[i] = size;\n\t\tstarts[column.id] = start;\n\t\tstart += size;\n\t}\n\tlet after = 0;\n\tfor (let i = columns.length - 1; i >= 0; i--) {\n\t\tafters[columns[i].id] = after;\n\t\tafter += sizes[i];\n\t}\n\treturn {\n\t\tstarts,\n\t\tafters\n\t};\n}\n/**\n* Builds start and after offset maps for every visible leaf column, computed\n* once per pinning region plus the full visible list.\n*\n* A single table-level memo of this result backs all `column.getStart()` and\n* `column.getAfter()` calls with O(1) lookups.\n*\n* @example\n* ```ts\n* const offsets = table_getColumnOffsets(table)\n* const startOffset = offsets.start.starts[column.id]\n* ```\n*/\nfunction table_getColumnOffsets(table) {\n\treturn {\n\t\tall: buildColumnOffsets(getPinnedVisibleLeafColumns(table)),\n\t\tcenter: buildColumnOffsets(getPinnedVisibleLeafColumns(table, \"center\")),\n\t\tstart: buildColumnOffsets(getPinnedVisibleLeafColumns(table, \"start\")),\n\t\tend: buildColumnOffsets(getPinnedVisibleLeafColumns(table, \"end\"))\n\t};\n}\nfunction toOffsetsKey(position) {\n\treturn position === \"start\" ? \"start\" : position === \"end\" ? \"end\" : position === \"center\" ? \"center\" : \"all\";\n}\n/**\n* Computes the offset from the start edge of a pinning region to this column.\n*\n* The value is the sum of all previous visible leaf column sizes in the\n* requested `'start'`, `'center'`, or `'end'` region.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const startOffset = column_getStart(column, 'start')\n* ```\n*/\nfunction column_getStart(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].starts[column.id] ?? 0;\n}\n/**\n* Computes the offset from the end edge of a pinning region after this column.\n*\n* The value is the sum of all following visible leaf column sizes in the\n* requested region.\n*\n* @example\n* ```ts\n* const endOffset = column_getAfter(column, 'end')\n* ```\n*/\nfunction column_getAfter(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].afters[column.id] ?? 0;\n}\n/**\n* Removes this column's committed size override.\n*\n* After reset, the column resolves size from `columnDef.size` or built-in\n* defaults again.\n*\n* @example\n* ```ts\n* column_resetSize(column)\n* ```\n*/\nfunction column_resetSize(column) {\n\ttable_setColumnSizing(column.table, (old) => {\n\t\tconst rest = makeObjectMap();\n\t\tconst columnIds = Object.keys(old);\n\t\tfor (let i = 0; i < columnIds.length; i++) {\n\t\t\tconst columnId = columnIds[i];\n\t\t\tif (columnId !== column.id) rest[columnId] = old[columnId];\n\t\t}\n\t\treturn rest;\n\t});\n}\nfunction sumHeaderSize(header) {\n\tif (!header.subHeaders.length) return column_getSize(header.column);\n\tlet sum = 0;\n\tfor (let i = 0; i < header.subHeaders.length; i++) sum += sumHeaderSize(header.subHeaders[i]);\n\treturn sum;\n}\n/**\n* Computes a header's rendered size from its leaf headers.\n*\n* Group headers sum the sizes of all descendant leaf columns. Leaf headers use\n* their column's current size.\n*\n* @example\n* ```ts\n* const width = header_getSize(header)\n* ```\n*/\nfunction header_getSize(header) {\n\treturn sumHeaderSize(header);\n}\n/**\n* Computes a header's offset from the start of its header group.\n*\n* The offset is the previous sibling header's start plus size, or `0` for the\n* first header in the group.\n*\n* @example\n* ```ts\n* const offset = header_getStart(header)\n* ```\n*/\nfunction header_getStart(header) {\n\tif (header.index > 0) {\n\t\tconst prevSiblingHeader = header.headerGroup?.headers[header.index - 1];\n\t\tif (prevSiblingHeader) return callMemoOrStaticFn(prevSiblingHeader, \"getStart\", header_getStart) + callMemoOrStaticFn(prevSiblingHeader, \"getSize\", header_getSize);\n\t}\n\treturn 0;\n}\n/**\n* Routes a committed column sizing updater through the table's sizing handler.\n*\n* The updater may be a next size map or a function of the previous map,\n* matching the instance `table.setColumnSizing` behavior.\n*\n* @example\n* ```ts\n* table_setColumnSizing(table, (old) => ({ ...old, age: 96 }))\n* ```\n*/\nfunction table_setColumnSizing(table, updater) {\n\ttable.options.onColumnSizingChange?.(updater);\n}\n/**\n* Resets `columnSizing` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnSizing` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetColumnSizing(table)\n* table_resetColumnSizing(table, true)\n* ```\n*/\nfunction table_resetColumnSizing(table, defaultState) {\n\ttable_setColumnSizing(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.columnSizing ?? {})));\n}\nfunction sumColumnSizes(columns) {\n\tlet sum = 0;\n\tfor (let i = 0; i < columns.length; i++) sum += callMemoOrStaticFn(columns[i], \"getSize\", column_getSize);\n\treturn sum;\n}\n/**\n* Sums the rendered size of the full table header row.\n*\n* This includes start, center, and end columns in the main header group.\n*\n* @example\n* ```ts\n* const width = table_getTotalSize(table)\n* ```\n*/\nfunction table_getTotalSize(table) {\n\treturn table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the sizes of the visible leaf columns pinned to the logical start\n* region.\n*\n* An empty start pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getStartTotalSize(table)\n* ```\n*/\nfunction table_getStartTotalSize(table) {\n\treturn sumColumnSizes(getPinnedVisibleLeafColumns(table, \"start\"));\n}\n/**\n* Sums the sizes of the visible leaf columns that are not pinned.\n*\n* An empty center region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getCenterTotalSize(table)\n* ```\n*/\nfunction table_getCenterTotalSize(table) {\n\treturn sumColumnSizes(getPinnedVisibleLeafColumns(table, \"center\"));\n}\n/**\n* Sums the sizes of the visible leaf columns pinned to the logical end region.\n*\n* An empty end pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getEndTotalSize(table)\n* ```\n*/\nfunction table_getEndTotalSize(table) {\n\treturn sumColumnSizes(getPinnedVisibleLeafColumns(table, \"end\"));\n}\n\n//#endregion\nexport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing } from \"./columnSizingFeature.utils.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.ts\n/**\n* Feature that adds column sizing state, defaults, and size measurement APIs.\n*/\nconst columnSizingFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnSizing: getDefaultColumnSizingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultColumnDef: () => {\n\t\treturn getDefaultColumnSizingColumnDef();\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnSizingChange: makeStateUpdater(\"columnSizing\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\tcolumn_getSize: {\n\t\t\t\tfn: (column) => column_getSize(column),\n\t\t\t\tmemoDeps: (column) => [table.options.columns, table.atoms.columnSizing?.get()?.[column.id]]\n\t\t\t},\n\t\t\tcolumn_getStart: { fn: (column, position) => column_getStart(column, position) },\n\t\t\tcolumn_getAfter: { fn: (column, position) => column_getAfter(column, position) },\n\t\t\tcolumn_resetSize: { fn: (column) => column_resetSize(column) }\n\t\t});\n\t},\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\theader_getSize: {\n\t\t\t\tfn: (header) => header_getSize(header),\n\t\t\t\tmemoDeps: (header) => [table.options.columns, header.column.columns.length > 0 ? table.atoms.columnSizing?.get() : table.atoms.columnSizing?.get()?.[header.column.id]]\n\t\t\t},\n\t\t\theader_getStart: {\n\t\t\t\tfn: (header) => header_getStart(header),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnSizingFeature\", table, {\n\t\t\ttable_getColumnOffsets: {\n\t\t\t\tfn: () => table_getColumnOffsets(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_setColumnSizing: { fn: (updater) => table_setColumnSizing(table, updater) },\n\t\t\ttable_resetColumnSizing: { fn: (defaultState) => table_resetColumnSizing(table, defaultState) },\n\t\t\ttable_getTotalSize: {\n\t\t\t\tfn: () => table_getTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getStartTotalSize: {\n\t\t\t\tfn: () => table_getStartTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getCenterTotalSize: {\n\t\t\t\tfn: () => table_getCenterTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getEndTotalSize: {\n\t\t\t\tfn: () => table_getEndTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnSizingFeature };","//#region src/features/row-sorting/sortFns.ts\n/**\n* Regular expression used to split mixed text and numeric chunks.\n*\n* The alphanumeric sort functions use these chunks for natural sorting of\n* strings like `item2` before `item10`.\n*/\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\n/**\n* Builds a `SortFn` from a value-level comparator plus an optional\n* `resolveDataValue` normalizer.\n*\n* The `sort` comparator receives both rows' data values, each already passed\n* through `resolveDataValue` when one is defined. Keeping normalization in the\n* resolver means a variant of an existing sorting function only has to swap\n* the resolver, not re-implement the comparison.\n*\n* The definition is attached to the returned function, so a variant can be\n* created by spreading a built-in sorting function and overriding what\n* differs:\n*\n* ```ts\n* const stripDiacritics = (value: string) =>\n* value.normalize('NFD').replace(/\\p{Diacritic}/gu, '')\n*\n* const alphanumericIgnoreDiacritics = constructSortFn({\n* ...sortFn_alphanumeric,\n* resolveDataValue: (value) =>\n* stripDiacritics(sortFn_alphanumeric.resolveDataValue!(value)),\n* })\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction constructSortFn(def) {\n\tconst sortFn = Object.assign((rowA, rowB, columnId) => {\n\t\tlet dataValueA = rowA.getValue(columnId);\n\t\tlet dataValueB = rowB.getValue(columnId);\n\t\tconst resolveDataValue = sortFn.resolveDataValue;\n\t\tif (resolveDataValue) {\n\t\t\tdataValueA = resolveDataValue(dataValueA);\n\t\t\tdataValueB = resolveDataValue(dataValueB);\n\t\t}\n\t\treturn sortFn.sort(dataValueA, dataValueB, rowA, rowB, columnId);\n\t}, def);\n\treturn sortFn;\n}\n/**\n* Sorts rows with the built-in alphanumeric strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_alphanumeric = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue).toLowerCase(),\n\tsort: (dataValueA, dataValueB) => compareAlphanumeric(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in alphanumeric case sensitive strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_alphanumericCaseSensitive = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue),\n\tsort: (dataValueA, dataValueB) => compareAlphanumeric(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in text strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_text = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue).toLowerCase(),\n\tsort: (dataValueA, dataValueB) => compareBasic(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in text case sensitive strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_textCaseSensitive = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue),\n\tsort: (dataValueA, dataValueB) => compareBasic(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in datetime strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_datetime = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toDateSortValue(dataValue),\n\tsort: (dataValueA, dataValueB) => dataValueA > dataValueB ? 1 : dataValueA < dataValueB ? -1 : 0\n});\n/**\n* Sorts rows with the built-in basic strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_basic = /* @__PURE__ */ constructSortFn({ sort: (dataValueA, dataValueB) => compareBasic(dataValueA, dataValueB) });\nfunction compareBasic(a, b) {\n\treturn a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toDateSortValue(value) {\n\treturn value instanceof Date ? value.getTime() : value;\n}\nfunction toString(a) {\n\tif (typeof a === \"number\") {\n\t\tif (isNaN(a) || a === Infinity || a === -Infinity) return \"\";\n\t\treturn String(a);\n\t}\n\tif (typeof a === \"string\") return a;\n\treturn \"\";\n}\nfunction compareAlphanumeric(aStr, bStr) {\n\tlet ai = 0;\n\tlet bi = 0;\n\tconst aLen = aStr.length;\n\tconst bLen = bStr.length;\n\twhile (ai < aLen && bi < bLen) {\n\t\tconst aIsNumeric = isDigit(aStr.charCodeAt(ai));\n\t\tconst bIsNumeric = isDigit(bStr.charCodeAt(bi));\n\t\tconst aEnd = findChunkEnd(aStr, ai, aIsNumeric);\n\t\tconst bEnd = findChunkEnd(bStr, bi, bIsNumeric);\n\t\tif (!aIsNumeric && !bIsNumeric) {\n\t\t\tconst stringComparison = compareStringChunks(aStr, ai, aEnd, bStr, bi, bEnd);\n\t\t\tif (stringComparison) return stringComparison;\n\t\t\tai = aEnd;\n\t\t\tbi = bEnd;\n\t\t\tcontinue;\n\t\t}\n\t\tif (aIsNumeric !== bIsNumeric) return aIsNumeric ? 1 : -1;\n\t\tconst numericComparison = compareNumericChunks(aStr, ai, aEnd, bStr, bi, bEnd);\n\t\tif (numericComparison) return numericComparison;\n\t\tai = aEnd;\n\t\tbi = bEnd;\n\t}\n\treturn countRemainingChunks(aStr, ai) - countRemainingChunks(bStr, bi);\n}\nfunction isDigit(charCode) {\n\treturn charCode >= 48 && charCode <= 57;\n}\nfunction findChunkEnd(str, start, isNumeric) {\n\tlet end = start + 1;\n\twhile (end < str.length && isDigit(str.charCodeAt(end)) === isNumeric) end++;\n\treturn end;\n}\nfunction compareStringChunks(aStr, aStart, aEnd, bStr, bStart, bEnd) {\n\tconst aLength = aEnd - aStart;\n\tconst bLength = bEnd - bStart;\n\tconst minLength = aLength < bLength ? aLength : bLength;\n\tfor (let i = 0; i < minLength; i++) {\n\t\tconst aCode = aStr.charCodeAt(aStart + i);\n\t\tconst bCode = bStr.charCodeAt(bStart + i);\n\t\tif (aCode > bCode) return 1;\n\t\tif (bCode > aCode) return -1;\n\t}\n\tif (aLength > bLength) return 1;\n\tif (bLength > aLength) return -1;\n\treturn 0;\n}\nfunction compareNumericChunks(aStr, aStart, aEnd, bStr, bStart, bEnd) {\n\tlet aSignificantStart = aStart;\n\twhile (aSignificantStart < aEnd && aStr.charCodeAt(aSignificantStart) === 48) aSignificantStart++;\n\tlet bSignificantStart = bStart;\n\twhile (bSignificantStart < bEnd && bStr.charCodeAt(bSignificantStart) === 48) bSignificantStart++;\n\tconst aSignificantLength = aEnd - aSignificantStart;\n\tconst bSignificantLength = bEnd - bSignificantStart;\n\tif (aSignificantLength === 0 && bSignificantLength === 0) return 0;\n\tif (aSignificantLength <= 15 && bSignificantLength <= 15) {\n\t\tconst an = parseSmallInt(aStr, aSignificantStart, aEnd);\n\t\tconst bn = parseSmallInt(bStr, bSignificantStart, bEnd);\n\t\tif (an > bn) return 1;\n\t\tif (bn > an) return -1;\n\t\treturn 0;\n\t}\n\tconst an = parseInt(aStr.slice(aStart, aEnd), 10);\n\tconst bn = parseInt(bStr.slice(bStart, bEnd), 10);\n\tif (an > bn) return 1;\n\tif (bn > an) return -1;\n\treturn 0;\n}\nfunction parseSmallInt(str, start, end) {\n\tlet result = 0;\n\tfor (let i = start; i < end; i++) result = result * 10 + str.charCodeAt(i) - 48;\n\treturn result;\n}\nfunction countRemainingChunks(str, start) {\n\tlet count = 0;\n\tlet index = start;\n\twhile (index < str.length) {\n\t\tcount++;\n\t\tindex = findChunkEnd(str, index, isDigit(str.charCodeAt(index)));\n\t}\n\treturn count;\n}\n/**\n* The built-in sorting function registry.\n*\n* Registering this full object opts out of tree-shaking: every built-in\n* sorting function ends up in your bundle. Prefer importing the `sortFn_*`\n* functions you actually use and registering just those in the `sortFns`\n* slot, or passing them directly to the `sortFn` column option.\n*\n* @deprecated Import individual `sortFn_*` functions instead for a smaller\n* bundle. This export still works and is not going away in v9, but built-in\n* name resolution (including `sortFn: 'auto'`) only finds functions you\n* register yourself.\n*/\nconst sortFns = {\n\talphanumeric: sortFn_alphanumeric,\n\talphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,\n\tbasic: sortFn_basic,\n\tdatetime: sortFn_datetime,\n\ttext: sortFn_text,\n\ttextCaseSensitive: sortFn_textCaseSensitive\n};\n\n//#endregion\nexport { constructSortFn, reSplitAlphaNumeric, sortFn_alphanumeric, sortFn_alphanumericCaseSensitive, sortFn_basic, sortFn_datetime, sortFn_text, sortFn_textCaseSensitive, sortFns };","import { cloneState, isFunction, setStateSlice } from \"../../utils.js\";\nimport { reSplitAlphaNumeric, sortFn_basic } from \"./sortFns.js\";\n\n//#region src/features/row-sorting/rowSortingFeature.utils.ts\n/**\n* Creates the default sorting state.\n*\n* The feature default is an empty array, meaning no columns are sorted. Reset\n* APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const sorting = getDefaultSortingState()\n* ```\n*/\nfunction getDefaultSortingState() {\n\treturn [];\n}\n/**\n* Routes a sorting updater through the table's sorting change handler.\n*\n* The updater may be a next `SortingState` array or a function of the previous\n* sorting state, matching the instance `table.setSorting` behavior. State\n* owners receive an equality-guarded updater so structurally equal sorting\n* values preserve the owner's existing reference.\n*\n* @example\n* ```ts\n* table_setSorting(table, (old) => [...old, { id: 'age', desc: true }])\n* ```\n*/\nfunction table_setSorting(table, updater) {\n\tsetStateSlice(table, \"sorting\", updater);\n}\n/**\n* Resets `sorting` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.sorting` when it\n* exists. Passing `true` ignores initial state and resets to `[]`.\n*\n* @example\n* ```ts\n* table_resetSorting(table)\n* table_resetSorting(table, true)\n* ```\n*/\nfunction table_resetSorting(table, defaultState) {\n\ttable_setSorting(table, defaultState ? [] : cloneState(table.initialState.sorting ?? []));\n}\n/**\n* Resets sorting after the table data changes when explicitly enabled.\n*\n* Unlike other auto-reset behaviors, sorting is preserved by default. An\n* explicit `autoResetAll` value takes precedence over `autoResetSorting`.\n*\n* @example\n* ```ts\n* table_autoResetSorting(table)\n* ```\n*/\nfunction table_autoResetSorting(table) {\n\tif (!table.atoms.sorting) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetSorting ?? false) table_resetSorting(table);\n}\n/**\n* Chooses a built-in sorting function from sampled filtered row values.\n*\n* Date-like values use `datetime`, mixed text/numeric strings use\n* `alphanumeric`, plain strings use `text`, and unknown values fall back to\n* `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getAutoSortFn(column)\n* ```\n*/\nfunction column_getAutoSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tlet sortFnName;\n\tlet isString = false;\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (Object.prototype.toString.call(value) === \"[object Date]\") {\n\t\t\tsortFnName = \"datetime\";\n\t\t\tbreak;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\tisString = true;\n\t\t\tif (value.split(reSplitAlphaNumeric).length > 1) {\n\t\t\t\tsortFnName = \"alphanumeric\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!sortFnName && isString) sortFnName = \"text\";\n\tif (sortFnName) {\n\t\tlet sortFn = sortFns?.[sortFnName];\n\t\tif (!sortFn) {\n\t\t\tif (process.env.NODE_ENV === \"development\") console.warn(`sortFn '${sortFnName}' (auto) for column '${column.id}' is not registered`);\n\t\t\tif (sortFnName === \"alphanumeric\") sortFn = sortFns?.text;\n\t\t}\n\t\tif (sortFn) return sortFn;\n\t}\n\treturn sortFn_basic;\n}\n/**\n* Chooses the default first sort direction from sampled filtered row values.\n*\n* The first non-nullish value among the sampled rows decides: string columns\n* start ascending so alphabetical order is natural; other value types (or\n* columns with no non-nullish sample) start descending. Sampling past leading\n* nullish values keeps the toggle cycle stable when sorting or a data swap\n* moves an empty value into the first row.\n*\n* @example\n* ```ts\n* const direction = column_getAutoSortDir(column)\n* ```\n*/\nfunction column_getAutoSortDir(column) {\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (value == null) continue;\n\t\treturn typeof value === \"string\" ? \"asc\" : \"desc\";\n\t}\n\treturn \"desc\";\n}\n/**\n* Resolves the sorting function configured for a column.\n*\n* Function-valued `columnDef.sortFn` is returned directly, `'auto'` delegates\n* to `column_getAutoSortFn`, and string values are looked up in the table's\n* sorting function registry before falling back to `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getSortFn(column)\n* ```\n*/\nfunction column_getSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tif (isFunction(column.columnDef.sortFn)) return column.columnDef.sortFn;\n\tif (column.columnDef.sortFn === \"auto\") return column_getAutoSortFn(column);\n\tconst sortFn = sortFns?.[column.columnDef.sortFn];\n\tif (process.env.NODE_ENV === \"development\" && !sortFn) console.warn(`sortFn '${String(column.columnDef.sortFn)}' for column '${column.id}' is not registered`);\n\treturn sortFn ?? sortFn_basic;\n}\n/**\n* Applies the next sorting state for this column.\n*\n* The toggle can add, replace, flip, or remove this column's sort entry. Multi\n* sorting respects `enableMultiSort`, `enableMultiRemove`,\n* `maxMultiSortColCount`, and the `multi` argument.\n*\n* @example\n* ```ts\n* column_toggleSorting(column, undefined, true)\n* ```\n*/\nfunction column_toggleSorting(column, desc, multi) {\n\tconst nextSortingOrder = column_getNextSortingOrder(column, multi && column_getCanMultiSort(column));\n\tconst hasManualValue = typeof desc !== \"undefined\";\n\ttable_setSorting(column.table, (old) => {\n\t\tconst existingIndex = old.findIndex((d) => d.id === column.id);\n\t\tconst existingSorting = existingIndex === -1 ? void 0 : old[existingIndex];\n\t\tlet newSorting = [];\n\t\tlet sortAction;\n\t\tconst nextDesc = hasManualValue ? desc : nextSortingOrder === \"desc\";\n\t\tconst isMultiMode = !!(old.length && column_getCanMultiSort(column) && multi);\n\t\tif (isMultiMode) {\n\t\t\tif (existingSorting) sortAction = \"toggle\";\n\t\t\telse sortAction = \"add\";\n\t\t} else if (existingSorting) sortAction = \"toggle\";\n\t\telse sortAction = \"replace\";\n\t\tif (sortAction === \"toggle\") {\n\t\t\tif (!hasManualValue) {\n\t\t\t\tif (!nextSortingOrder) sortAction = \"remove\";\n\t\t\t}\n\t\t}\n\t\tif (sortAction === \"add\") {\n\t\t\tnewSorting = [...old, {\n\t\t\t\tid: column.id,\n\t\t\t\tdesc: nextDesc\n\t\t\t}];\n\t\t\tnewSorting.splice(0, newSorting.length - (column.table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER));\n\t\t} else if (sortAction === \"toggle\") newSorting = isMultiMode ? old.map((d) => {\n\t\t\tif (d.id === column.id) return {\n\t\t\t\t...d,\n\t\t\t\tdesc: nextDesc\n\t\t\t};\n\t\t\treturn d;\n\t\t}) : [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\telse if (sortAction === \"remove\") newSorting = isMultiMode ? old.filter((d) => d.id !== column.id) : [];\n\t\telse newSorting = [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\treturn newSorting;\n\t});\n}\n/**\n* Resolves the first direction used when this column begins sorting.\n*\n* Column-level `sortDescFirst` wins, then table-level `sortDescFirst`, then the\n* auto direction inferred from sampled values.\n*\n* @example\n* ```ts\n* const firstDirection = column_getFirstSortDir(column)\n* ```\n*/\nfunction column_getFirstSortDir(column) {\n\treturn column.columnDef.sortDescFirst ?? column.table.options.sortDescFirst ?? column_getAutoSortDir(column) === \"desc\" ? \"desc\" : \"asc\";\n}\n/**\n* Resolves the next sort order for this column's toggle cycle.\n*\n* The cycle starts with the first sort direction, flips between `asc` and\n* `desc`, and can return `false` when sorting removal is enabled.\n*\n* @example\n* ```ts\n* const nextOrder = column_getNextSortingOrder(column)\n* ```\n*/\nfunction column_getNextSortingOrder(column, multi) {\n\tconst firstSortDirection = column_getFirstSortDir(column);\n\tconst isSorted = column_getIsSorted(column);\n\tif (!isSorted) return firstSortDirection;\n\tif (isSorted !== firstSortDirection && (column.table.options.enableSortingRemoval ?? true) && (multi ? column.table.options.enableMultiRemove ?? true : true)) return false;\n\treturn isSorted === \"desc\" ? \"asc\" : \"desc\";\n}\n/**\n* Checks whether this accessor column can participate in sorting.\n*\n* The column must have an accessor and sorting must be enabled by both the\n* column definition and table options.\n*\n* @example\n* ```ts\n* const canSort = column_getCanSort(column)\n* ```\n*/\nfunction column_getCanSort(column) {\n\treturn (column.columnDef.enableSorting ?? true) && (column.table.options.enableSorting ?? true) && !!column.accessorFn;\n}\n/**\n* Checks whether this column can be added to a multi-sort state.\n*\n* Column-level `enableMultiSort` wins over table-level `enableMultiSort`; if\n* neither is set, accessor columns can multi-sort by default.\n*\n* @example\n* ```ts\n* const canMultiSort = column_getCanMultiSort(column)\n* ```\n*/\nfunction column_getCanMultiSort(column) {\n\treturn column.columnDef.enableMultiSort ?? column.table.options.enableMultiSort ?? !!column.accessorFn;\n}\n/**\n* Reads this column's current sort direction.\n*\n* The result is `false` when the column is not sorted, otherwise `'asc'` or\n* `'desc'` based on the column's entry in `state.sorting`.\n*\n* @example\n* ```ts\n* const direction = column_getIsSorted(column)\n* ```\n*/\nfunction column_getIsSorted(column) {\n\tconst columnSort = column.table.atoms.sorting?.get()?.find((d) => d.id === column.id);\n\treturn !columnSort ? false : columnSort.desc ? \"desc\" : \"asc\";\n}\n/**\n* Finds this column's position in the ordered `state.sorting` array.\n*\n* The result is `-1` when the column is not sorted.\n*\n* @example\n* ```ts\n* const index = column_getSortIndex(column)\n* ```\n*/\nfunction column_getSortIndex(column) {\n\treturn column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ?? -1;\n}\n/**\n* Removes this column from the sorting state.\n*\n* Other sorted columns are preserved, including their relative order.\n*\n* @example\n* ```ts\n* column_clearSorting(column)\n* ```\n*/\nfunction column_clearSorting(column) {\n\ttable_setSorting(column.table, (old) => old.length ? old.filter((d) => d.id !== column.id) : []);\n}\n/**\n* Creates a header event handler that toggles this column's sorting.\n*\n* The handler ignores events when the column cannot sort, and asks\n* `options.isMultiSortEvent` whether the event should add to a multi-sort.\n*\n* @example\n* ```ts\n* const onClick = column_getToggleSortingHandler(column)\n* ```\n*/\nfunction column_getToggleSortingHandler(column) {\n\tconst canSort = column_getCanSort(column);\n\treturn (e) => {\n\t\tif (!canSort) return;\n\t\tcolumn_toggleSorting(column, void 0, column_getCanMultiSort(column) ? column.table.options.isMultiSortEvent?.(e) : false);\n\t};\n}\n\n//#endregion\nexport { column_clearSorting, column_getAutoSortDir, column_getAutoSortFn, column_getCanMultiSort, column_getCanSort, column_getFirstSortDir, column_getIsSorted, column_getNextSortingOrder, column_getSortFn, column_getSortIndex, column_getToggleSortingHandler, column_toggleSorting, getDefaultSortingState, table_autoResetSorting, table_resetSorting, table_setSorting };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_clearSorting, column_getAutoSortDir, column_getAutoSortFn, column_getCanMultiSort, column_getCanSort, column_getFirstSortDir, column_getIsSorted, column_getNextSortingOrder, column_getSortFn, column_getSortIndex, column_getToggleSortingHandler, column_toggleSorting, getDefaultSortingState, table_autoResetSorting, table_resetSorting, table_setSorting } from \"./rowSortingFeature.utils.js\";\n\n//#region src/features/row-sorting/rowSortingFeature.ts\n/**\n* Feature that adds row sorting state, defaults, and column/table sorting APIs.\n*/\nconst rowSortingFeature = {\n\tgetInitialState(initialState) {\n\t\treturn {\n\t\t\tsorting: getDefaultSortingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultColumnDef() {\n\t\treturn {\n\t\t\tsortFn: \"auto\",\n\t\t\tsortUndefined: 1\n\t\t};\n\t},\n\tgetDefaultTableOptions(table) {\n\t\treturn {\n\t\t\tautoResetSorting: false,\n\t\t\tonSortingChange: makeStateUpdater(\"sorting\", table),\n\t\t\tisMultiSortEvent: (e) => {\n\t\t\t\treturn e.shiftKey;\n\t\t\t}\n\t\t};\n\t},\n\tassignColumnPrototype(prototype, table) {\n\t\tassignPrototypeAPIs(\"rowSortingFeature\", prototype, table, {\n\t\t\tcolumn_getAutoSortFn: { fn: (column) => column_getAutoSortFn(column) },\n\t\t\tcolumn_getAutoSortDir: { fn: (column) => column_getAutoSortDir(column) },\n\t\t\tcolumn_getSortFn: { fn: (column) => column_getSortFn(column) },\n\t\t\tcolumn_toggleSorting: { fn: (column, desc, multi) => column_toggleSorting(column, desc, multi) },\n\t\t\tcolumn_getFirstSortDir: { fn: (column) => column_getFirstSortDir(column) },\n\t\t\tcolumn_getNextSortingOrder: { fn: (column, multi) => column_getNextSortingOrder(column, multi) },\n\t\t\tcolumn_getCanSort: { fn: (column) => column_getCanSort(column) },\n\t\t\tcolumn_getCanMultiSort: { fn: (column) => column_getCanMultiSort(column) },\n\t\t\tcolumn_getIsSorted: { fn: (column) => column_getIsSorted(column) },\n\t\t\tcolumn_getSortIndex: { fn: (column) => column_getSortIndex(column) },\n\t\t\tcolumn_clearSorting: { fn: (column) => column_clearSorting(column) },\n\t\t\tcolumn_getToggleSortingHandler: { fn: (column) => column_getToggleSortingHandler(column) }\n\t\t});\n\t},\n\tconstructTableAPIs(table) {\n\t\tassignTableAPIs(\"rowSortingFeature\", table, {\n\t\t\ttable_autoResetSorting: { fn: () => table_autoResetSorting(table) },\n\t\t\ttable_setSorting: { fn: (updater) => table_setSorting(table, updater) },\n\t\t\ttable_resetSorting: { fn: (defaultState) => table_resetSorting(table, defaultState) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { rowSortingFeature };","import { batch, createAtom } from \"@tanstack/store\";\n\n//#region src/store-reactivity-bindings.ts\n/**\n* TanStack Store–based reactivity for vanilla / non-framework use of `constructTable`,\n* with `createOptionsStore: true` so `table.optionsStore` is available for subscriptions.\n*\n* @example\n* ```ts\n* import { constructTable, tableFeatures } from '@tanstack/table-core'\n* import { storeReactivityBindings } from '@tanstack/table-core/store-reactivity-bindings'\n*\n* const table = constructTable({\n* features: tableFeatures({ coreReactivityFeature: storeReactivityBindings() }),\n* // ...\n* })\n* ```\n*/\nfunction storeReactivityBindings() {\n\treturn {\n\t\tcreateOptionsStore: true,\n\t\twrapExternalAtoms: false,\n\t\taddSubscription: () => {\n\t\t\tthrow new Error(\"Feature not supported in current reactivity implementation\");\n\t\t},\n\t\tunmount: () => {\n\t\t\tthrow new Error(\"Feature not supported in current reactivity implementation\");\n\t\t},\n\t\tbatch,\n\t\tschedule: (fn) => queueMicrotask(fn),\n\t\tuntrack: (fn) => fn(),\n\t\tcreateReadonlyAtom: (fn, options) => {\n\t\t\treturn createAtom(() => fn(), { compare: options?.compare });\n\t\t},\n\t\tcreateWritableAtom: (value, options) => {\n\t\t\treturn createAtom(value, { compare: options?.compare });\n\t\t}\n\t};\n}\n\n//#endregion\nexport { storeReactivityBindings };","import type {\n ColumnDef_RowSorting,\n RowData,\n RowModel,\n SortFnDef,\n Table,\n TableFeatures,\n} from '@tanstack/table-core';\nimport { column_getCanSort, column_getSortFn } from '@tanstack/table-core/static-functions';\n\ntype Sorting = readonly { id: string; desc: boolean }[];\n\ninterface SortKey {\n /** Each row's value by its position in the unsorted rows, resolved for `compare`. */\n keys: unknown[];\n compare: (a: unknown, b: unknown) => number;\n /** -1 flips `compare` (descending, inverted). */\n sign: number;\n sortUndefined: false | -1 | 1 | 'first' | 'last' | undefined;\n}\n\n/**\n * The sorted row model, in place of TanStack's `createSortedRowModel()`, giving the\n * same order: the same sort functions (`auto` included), `sortUndefined`,\n * `invertSorting`, ties by row index.\n *\n * It reads each row's value once, through the column's accessor, and sorts the row\n * positions by those values. TanStack's model calls `row.getValue()` four times per\n * comparison, and its row methods take rest arguments (`function (...args)`): in\n * Firefox that slows a large sort down by orders of magnitude (750k rows: 176 s\n * against 0.9 s for the same comparator without rest arguments). Reading values\n * once is also faster everywhere, most of all for text, which is lowercased once\n * per row instead of twice per comparison.\n *\n * The registered sort functions come from `constructSortFn`: each carries a value\n * comparator (`sort`, which compares values only) and a normalizer\n * (`resolveDataValue`). The rows are flat (no sub-rows), so there is nothing to\n * sort below them.\n */\nexport function sortedRowModel<TFeatures extends TableFeatures, TData extends RowData>() {\n return (table: Table<TFeatures, TData>) => {\n let last:\n | { sorting: unknown; source: RowModel<TFeatures, TData>; model: RowModel<TFeatures, TData> }\n | undefined;\n return (): RowModel<TFeatures, TData> => {\n const source = table.getPreSortedRowModel();\n const sorting = (table.options.state as { sorting?: Sorting } | undefined)?.sorting;\n const prev = last;\n if (prev && prev.sorting === sorting && prev.source === source) return prev.model;\n const model = sortRows(table, source, sorting ?? []);\n last = { sorting, source, model };\n return model;\n };\n };\n}\n\nfunction sortRows<TFeatures extends TableFeatures, TData extends RowData>(\n table: Table<TFeatures, TData>,\n source: RowModel<TFeatures, TData>,\n sorting: Sorting,\n): RowModel<TFeatures, TData> {\n const rows = source.rows;\n const sortKeys: SortKey[] = [];\n for (const { id, desc } of sorting) {\n const column = table.getColumn(id);\n if (!column || !column_getCanSort(column)) continue;\n const fn = column_getSortFn(column) as unknown as SortFnDef<TFeatures, TData>;\n const def = column.columnDef as ColumnDef_RowSorting<TFeatures, TData>;\n const read = column.accessorFn;\n const resolve = fn.resolveDataValue;\n const sortUndefined = def.sortUndefined;\n sortKeys.push({\n keys: rows.map((row) => {\n const value = read?.(row.original, row.index);\n // Undefined stays undefined where `sortUndefined` places it.\n return resolve && !(value === undefined && sortUndefined)\n ? (resolve(value) as unknown)\n : value;\n }),\n compare: fn.sort as (a: unknown, b: unknown) => number,\n sign: (desc ? -1 : 1) * (def.invertSorting ? -1 : 1),\n sortUndefined,\n });\n }\n if (!sortKeys.length || !rows.length) return source;\n\n const compare = (i: number, j: number): number => {\n for (const { keys, compare, sign, sortUndefined } of sortKeys) {\n const a = keys[i];\n const b = keys[j];\n let result = 0;\n if (sortUndefined && (a === undefined || b === undefined)) {\n if (a === undefined && b === undefined) continue;\n if (sortUndefined === 'first') return a === undefined ? -1 : 1;\n if (sortUndefined === 'last') return a === undefined ? 1 : -1;\n result = a === undefined ? sortUndefined : -sortUndefined;\n }\n if (result === 0) result = compare(a, b);\n if (result !== 0) return result * sign;\n }\n return (rows[i]?.index ?? i) - (rows[j]?.index ?? j);\n };\n\n const sorted = rows\n .map((_, i) => i)\n .sort(compare)\n .map((i) => rows[i])\n .filter((row) => row !== undefined);\n return { rows: sorted, flatRows: sorted, rowsById: source.rowsById };\n}\n","import {\n columnPinningFeature,\n columnSizingFeature,\n constructTable,\n rowSortingFeature,\n sortFn_alphanumeric,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n tableFeatures,\n type Column,\n type ColumnDef as TanStackColumnDef,\n type Row,\n type Table,\n type TableOptions,\n} from '@tanstack/table-core';\nimport { storeReactivityBindings } from '@tanstack/table-core/store-reactivity-bindings';\nimport { moveColumn, normalizeOrder } from '../columns/column-order.js';\nimport { resolveColumns, type ResolvedColumn } from '../columns/resolve-columns.js';\nimport { sortedRowModel } from './sorted-row-model.js';\nimport type {\n CellContext,\n ColumnAlign,\n ColumnDef,\n ColumnOrderState,\n ColumnPin,\n ColumnSizingState,\n PinnedRows,\n RowPin,\n SortState,\n} from '../types.js';\n\n// The TanStack adapter. Everything TanStack stays in this module: callers only see\n// the view types below, so TanStack can be upgraded or replaced without touching\n// `argus-table`'s public API.\n\nconst features = tableFeatures({\n // Vanilla (framework-free) reactivity; required by `constructTable`.\n coreReactivityFeature: storeReactivityBindings(),\n columnPinningFeature,\n columnSizingFeature,\n rowSortingFeature,\n // Our own: TanStack's is very slow in Firefox at scale (see sorted-row-model.ts).\n sortedRowModel: sortedRowModel(),\n // Registered by name so `sortFn: 'auto'` can pick one by value type.\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n basic: sortFn_basic,\n datetime: sortFn_datetime,\n text: sortFn_text,\n },\n});\ntype Features = typeof features;\ntype AnyRow = Record<string, unknown>;\n\n/** Sort direction of a column, or `false` when it isn't sorted. */\nexport type SortDirection = 'asc' | 'desc' | false;\n\n/** A column as the renderer sees it, in visual order: start-pinned, scrolling, end-pinned. */\nexport interface ColumnView<TData, TContent> {\n id: string;\n /** 1-based position in visual order, for `aria-colindex`. */\n colIndex: number;\n pin: ColumnPin | undefined;\n /**\n * Sticky inset in px: from the start edge for `'start'` columns, from the end edge\n * for `'end'` columns. For scrolling columns, the start within the scrolling area.\n */\n offset: number;\n /** `true` on the pinned column next to the scrolling area (one per pinned side). */\n pinEdge: boolean;\n /** Current width in px (a resized width wins over the column's own). */\n width: number;\n /** Share of free space, or `undefined` for a fixed width. A resized column stops flexing. */\n flex: number | undefined;\n /**\n * `true` for a `width: 'auto'` column that hasn't been resized: the table measures\n * its content and passes the width in as `autoWidths`.\n */\n auto: boolean;\n minWidth: number;\n maxWidth: number;\n sortable: boolean;\n resizable: boolean;\n reorderable: boolean;\n align: ColumnAlign;\n sorted: SortDirection;\n header: ColumnDef<TData, TContent>['header'];\n cell: ColumnDef<TData, TContent>['cell'];\n hasAccessor: boolean;\n}\n\n/** A row of the current (sorted) row model. */\nexport interface RowView<TData> {\n id: string;\n /** Index in the current row model, 0-based. */\n index: number;\n original: TData;\n}\n\n/**\n * Rows that live outside the model, loaded page by page (`dataSource`). The\n * source sorts them, so the model reads them as they are. `PageCache` implements it.\n */\nexport interface RemoteRows<TData> {\n readonly rowCount: number;\n /** The loaded row at an index, with its id; `undefined` while it isn't loaded. */\n entryAt(index: number): { id: string; row: TData } | undefined;\n /** The index of a loaded row's id, or `undefined`. */\n indexOf(rowId: string): number | undefined;\n}\n\nexport interface TableModelOptions<TData, TContent> {\n columns: readonly ColumnDef<TData, TContent>[];\n data: readonly TData[];\n /**\n * Remote rows. When set, rows come from here instead of `data`, and the model\n * doesn't sort them (the source does).\n */\n remote?: RemoteRows<TData> | undefined;\n /** Row id function. Default: the row's index in `data`, as a string. */\n getRowId: ((row: TData, index: number) => string) | undefined;\n /** Current sort state; its owner is the caller (see `controllable`). */\n sorting: SortState;\n /** Current resized widths; its owner is the caller. */\n columnSizing: ColumnSizingState;\n /**\n * Current column order; its owner is the caller. Each pin group follows it; an\n * empty array (the default) keeps the order of `columns`.\n */\n columnOrder?: ColumnOrderState | undefined;\n /**\n * Measured widths of `width: 'auto'` columns, in px by id. Clamped to the column's\n * bounds; a resized width wins. Ids of other columns are ignored.\n */\n autoWidths?: ColumnSizingState | undefined;\n /** Rows fixed above or below the body. They stay out of the row model: never sorted, not counted. */\n pinnedRows?: PinnedRows<TData> | undefined;\n}\n\nexport interface TableModel<TData, TContent> {\n /** Updates any subset of the options. Unchanged references are ignored. */\n update(options: Partial<TableModelOptions<TData, TContent>>): void;\n /** Columns in visual order. */\n readonly columns: readonly ColumnView<TData, TContent>[];\n /** Number of rows in the current row model. */\n readonly rowCount: number;\n /** Sum of all column widths in px (flex columns count their minimum). */\n readonly totalWidth: number;\n /** The row at an index of the current row model; `undefined` for a remote row not loaded yet. */\n rowAt(index: number): RowView<TData> | undefined;\n /** The index of a row id in the current row model (after sorting), or `undefined`. */\n indexOf(rowId: string): number | undefined;\n /** The value a column reads from the row at `index`. */\n valueAt(index: number, columnId: string): unknown;\n /** What a column's `cell` function receives for the row at `index`. */\n cellContext(index: number, columnId: string): CellContext<TData> | undefined;\n /**\n * The sort state that clicking this column's header would produce:\n * asc → desc → unsorted, one column at a time. `undefined` if it can't sort.\n */\n nextSorting(columnId: string): SortState | undefined;\n /**\n * The sizing state after setting a column to `width` px, clamped to its bounds.\n * `undefined` if the column can't be resized.\n */\n nextSizing(columnId: string, width: number): ColumnSizingState | undefined;\n /**\n * The full column order as the table shows it: start-pinned, scrolling and\n * end-pinned ids. `base` defaults to the current `columnOrder`.\n */\n orderOf(base?: readonly string[]): ColumnOrderState;\n /**\n * The order after moving a column to position `to` (0-based, in the whole order,\n * counted after the move), starting from `base` (default: the current order).\n * `undefined` if the column can't move, `to` is outside its pin group, or nothing changes.\n */\n nextOrder(columnId: string, to: number, base?: readonly string[]): ColumnOrderState | undefined;\n /** Number of rows pinned to a side. */\n pinnedCount(side: RowPin): number;\n /**\n * A pinned row, `index` counted within its side. Its id comes from `getRowId`,\n * else it is `'top-{index}'` or `'bottom-{index}'`, apart from the data rows' index ids.\n */\n pinnedRowAt(side: RowPin, index: number): RowView<TData> | undefined;\n /** The value a column reads from a pinned row. */\n pinnedValueAt(side: RowPin, index: number, columnId: string): unknown;\n /** What a column's `cell` function receives for a pinned row (with `pinned` set). */\n pinnedCellContext(side: RowPin, index: number, columnId: string): CellContext<TData> | undefined;\n}\n\nconst defaultRowId = (_row: unknown, index: number) => String(index);\n\nfunction toTanStack<TData, TContent>(\n column: ResolvedColumn<TData, TContent>,\n): TanStackColumnDef<Features, AnyRow> {\n return {\n id: column.id,\n accessorFn: column.getValue as (row: AnyRow, index: number) => unknown,\n size: column.width,\n minSize: column.minWidth,\n maxSize: column.maxWidth,\n enableSorting: column.sortable,\n sortUndefined: 'last',\n };\n}\n\n/**\n * Creates the table model over TanStack Table. It owns no state: sorting, sizing and order\n * come in through `update()`, and `nextSorting()`, `nextSizing()` and `nextOrder()` only propose\n * changes, so the caller decides (controlled or uncontrolled) whether to apply them.\n */\nexport function createTableModel<TData, TContent>(\n initial: TableModelOptions<TData, TContent>,\n): TableModel<TData, TContent> {\n let options = initial;\n let resolved = resolveColumns(options.columns);\n let byId = new Map(resolved.map((c) => [c.id, c]));\n // TanStack column defs by id, kept between updates that don't change `columns`.\n let tanStackById = new Map(resolved.map((c) => [c.id, toTanStack(c)]));\n let views: ColumnView<TData, TContent>[] | undefined;\n // TanStack's sizing state: measured auto widths under the resized ones. Kept stable\n // between updates that don't touch either.\n let sizing: ColumnSizingState | undefined;\n const sizingState = (): ColumnSizingState => {\n if (sizing) return sizing;\n const auto = options.autoWidths;\n if (!auto) return (sizing = options.columnSizing);\n const merged: ColumnSizingState = {};\n for (const column of resolved) {\n const px = auto[column.id];\n if (!column.auto || px === undefined || !Number.isFinite(px)) continue;\n merged[column.id] = Math.min(column.maxWidth, Math.max(column.minWidth, px));\n }\n return (sizing = { ...merged, ...options.columnSizing });\n };\n // The normalized order, kept stable between updates that touch neither columns nor order.\n let order: ColumnOrderState | undefined;\n const orderState = (): ColumnOrderState =>\n (order ??= normalizeOrder(options.columnOrder ?? [], resolved));\n const rowViews = new WeakMap<Row<Features, AnyRow>, RowView<TData>>();\n // Built lazily per row model (sorting or new data gives a new array).\n let indexById: { rows: readonly Row<Features, AnyRow>[]; map: Map<string, number> } | undefined;\n\n // The order reaches TanStack as the order of its column defs (the scrolling\n // columns follow it) and of the pinning arrays (the pinned ones do). Rebuilt only\n // when the order changes: a new columns array makes TanStack rebuild its columns,\n // though not its row models, which depend on data and sorting alone.\n let ordered:\n | {\n order: ColumnOrderState;\n columns: TanStackColumnDef<Features, AnyRow>[];\n pinning: { start: string[]; end: string[] };\n }\n | undefined;\n const orderedColumns = () => {\n const current = orderState();\n if (ordered?.order !== current) {\n const pinOf = (id: string) => byId.get(id)?.pin;\n ordered = {\n order: current,\n columns: current.flatMap((id) => tanStackById.get(id) ?? []),\n pinning: {\n start: current.filter((id) => pinOf(id) === 'start'),\n end: current.filter((id) => pinOf(id) === 'end'),\n },\n };\n }\n return ordered;\n };\n\n const tableOptions = (): TableOptions<Features, AnyRow> => ({\n features,\n columns: orderedColumns().columns,\n // Remote rows bypass TanStack's row models; it still handles columns and state.\n data: (options.remote ? [] : options.data) as AnyRow[],\n getRowId: (options.getRowId ?? defaultRowId) as (row: AnyRow, index: number) => string,\n state: {\n sorting: options.sorting,\n columnSizing: sizingState(),\n columnPinning: orderedColumns().pinning,\n },\n // State is owned by the caller; TanStack's own setters must not change it.\n onSortingChange: () => undefined,\n onColumnSizingChange: () => undefined,\n onColumnPinningChange: () => undefined,\n });\n\n const table: Table<Features, AnyRow> = constructTable(tableOptions());\n\n const rows = () => table.getRowModel().rows;\n const pinned = (side: RowPin): readonly TData[] => options.pinnedRows?.[side] ?? [];\n\n const buildViews = (): ColumnView<TData, TContent>[] => {\n const start = table.getStartLeafColumns();\n const center = table.getCenterLeafColumns();\n const end = table.getEndLeafColumns();\n const sorting = options.sorting;\n const view = (\n column: Column<Features, AnyRow>,\n colIndex: number,\n offset: number,\n pinEdge: boolean,\n ): ColumnView<TData, TContent> => {\n const def = byId.get(column.id);\n if (!def) throw new Error(`argus-table: unknown column '${column.id}'.`);\n const sort = sorting.find((s) => s.id === column.id);\n return {\n id: def.id,\n colIndex,\n pin: def.pin,\n offset,\n pinEdge,\n width: column.getSize(),\n flex: options.columnSizing[def.id] === undefined ? def.flex : undefined,\n auto: def.auto && options.columnSizing[def.id] === undefined,\n minWidth: def.minWidth,\n maxWidth: def.maxWidth,\n sortable: def.sortable,\n resizable: def.resizable,\n reorderable: def.reorderable,\n align: def.align,\n sorted: sort ? (sort.desc ? 'desc' : 'asc') : false,\n header: def.header,\n cell: def.cell,\n hasAccessor: def.hasAccessor,\n };\n };\n return [\n ...start.map((c, i) => view(c, i + 1, c.getStart('start'), i === start.length - 1)),\n ...center.map((c, i) => view(c, start.length + i + 1, c.getStart('center'), false)),\n ...end.map((c, i) =>\n view(c, start.length + center.length + i + 1, c.getAfter('end'), i === 0),\n ),\n ];\n };\n\n return {\n update(next) {\n const merged = { ...options, ...next };\n const changed = (Object.keys(next) as (keyof typeof next)[]).some(\n (key) => next[key] !== options[key],\n );\n if (!changed) return;\n if (next.columns && next.columns !== options.columns) {\n resolved = resolveColumns(next.columns);\n byId = new Map(resolved.map((c) => [c.id, c]));\n tanStackById = new Map(resolved.map((c) => [c.id, toTanStack(c)]));\n }\n if (\n merged.columns !== options.columns ||\n merged.columnSizing !== options.columnSizing ||\n merged.autoWidths !== options.autoWidths\n ) {\n sizing = undefined;\n }\n if (merged.columns !== options.columns || merged.columnOrder !== options.columnOrder) {\n order = undefined;\n }\n options = merged;\n views = undefined;\n table.setOptions((prev) => ({ ...prev, ...tableOptions() }));\n },\n\n get columns() {\n return (views ??= buildViews());\n },\n\n get rowCount() {\n return options.remote?.rowCount ?? rows().length;\n },\n\n get totalWidth() {\n return table.getTotalSize();\n },\n\n rowAt(index) {\n if (options.remote) {\n const entry = options.remote.entryAt(index);\n return entry && { id: entry.id, index, original: entry.row };\n }\n const row = rows()[index];\n if (!row) return undefined;\n let view = rowViews.get(row);\n if (view?.index !== index) {\n view = { id: row.id, index, original: row.original as TData };\n rowViews.set(row, view);\n }\n return view;\n },\n\n indexOf(rowId) {\n if (options.remote) return options.remote.indexOf(rowId);\n const current = rows();\n if (indexById?.rows !== current) {\n indexById = { rows: current, map: new Map(current.map((r, i) => [r.id, i])) };\n }\n return indexById.map.get(rowId);\n },\n\n valueAt(index, columnId) {\n if (options.remote) {\n const entry = options.remote.entryAt(index);\n return entry && byId.get(columnId)?.getValue(entry.row, index);\n }\n return rows()[index]?.getValue(columnId);\n },\n\n cellContext(index, columnId) {\n if (options.remote) {\n const entry = options.remote.entryAt(index);\n const column = byId.get(columnId);\n if (!entry || !column) return undefined;\n return {\n row: entry.row,\n rowId: entry.id,\n index,\n columnId,\n value: column.getValue(entry.row, index),\n };\n }\n const row = rows()[index];\n if (!row || !byId.has(columnId)) return undefined;\n return {\n row: row.original as TData,\n rowId: row.id,\n index,\n columnId,\n value: row.getValue(columnId),\n };\n },\n\n nextSorting(columnId) {\n if (byId.get(columnId)?.sortable !== true) return undefined;\n const current = options.sorting.find((s) => s.id === columnId);\n if (!current) return [{ id: columnId, desc: false }];\n return current.desc ? [] : [{ id: columnId, desc: true }];\n },\n\n nextSizing(columnId, width) {\n const column = byId.get(columnId);\n if (!column?.resizable || !Number.isFinite(width)) return undefined;\n const clamped = Math.round(Math.min(column.maxWidth, Math.max(column.minWidth, width)));\n return { ...options.columnSizing, [columnId]: clamped };\n },\n\n orderOf(base) {\n return base === undefined ? orderState() : normalizeOrder(base, resolved);\n },\n\n nextOrder(columnId, to, base) {\n return moveColumn(base ?? orderState(), resolved, columnId, to);\n },\n\n pinnedCount(side) {\n return pinned(side).length;\n },\n\n pinnedRowAt(side, index) {\n if (index < 0 || index >= pinned(side).length) return undefined;\n const row = pinned(side)[index] as TData;\n const id = options.getRowId ? options.getRowId(row, index) : `${side}-${String(index)}`;\n return { id, index, original: row };\n },\n\n pinnedValueAt(side, index, columnId) {\n if (index < 0 || index >= pinned(side).length) return undefined;\n return byId.get(columnId)?.getValue(pinned(side)[index] as TData, index);\n },\n\n pinnedCellContext(side, index, columnId) {\n const row = this.pinnedRowAt(side, index);\n const column = byId.get(columnId);\n if (!row || !column) return undefined;\n return {\n row: row.original,\n rowId: row.id,\n index,\n columnId,\n value: column.getValue(row.original, index),\n pinned: side,\n };\n },\n };\n}\n","/** The row groups of the grid, top to bottom. */\nexport type GridSection = 'header' | 'top' | 'body' | 'bottom';\n\n/** A row of the grid: its section and its index within it (the header is index 0). */\nexport interface GridRow {\n section: GridSection;\n index: number;\n}\n\n/**\n * Where each row sits in the grid as a whole: the header row, then the rows\n * pinned to the top, the body rows, and the rows pinned to the bottom. The\n * position is 0-based and `aria-rowindex` is one more. Keyboard navigation\n * steps through positions, so it crosses sections without special cases.\n */\nexport class RowLayout {\n readonly top: number;\n readonly body: number;\n readonly bottom: number;\n\n constructor(top: number, body: number, bottom: number) {\n this.top = top;\n this.body = body;\n this.bottom = bottom;\n }\n\n /** Number of rows, the header included (`aria-rowcount`). */\n get total(): number {\n return 1 + this.top + this.body + this.bottom;\n }\n\n /** 0-based position of a row in the grid. */\n position({ section, index }: GridRow): number {\n switch (section) {\n case 'header':\n return 0;\n case 'top':\n return 1 + index;\n case 'body':\n return 1 + this.top + index;\n case 'bottom':\n return 1 + this.top + this.body + index;\n }\n }\n\n /** The row at a 0-based position, or `undefined` outside the grid. */\n at(position: number): GridRow | undefined {\n if (!Number.isInteger(position) || position < 0 || position >= this.total) return undefined;\n if (position === 0) return { section: 'header', index: 0 };\n let index = position - 1;\n if (index < this.top) return { section: 'top', index };\n index -= this.top;\n if (index < this.body) return { section: 'body', index };\n return { section: 'bottom', index: index - this.body };\n }\n\n ariaRowIndex(row: GridRow): number {\n return this.position(row) + 1;\n }\n\n fromAriaRowIndex(ariaRowIndex: number): GridRow | undefined {\n return this.at(ariaRowIndex - 1);\n }\n}\n","/**\n * State that works like a form input: uncontrolled until the host sets it,\n * controlled from then on. See `docs/plan/code-architecture/04-state-and-events.md`.\n *\n * - **Uncontrolled:** `request()` applies the change. The caller then fires the change event.\n * - **Controlled:** `request()` changes nothing and returns the proposed value for the\n * event. The value only changes when the host calls `set()` again.\n * - `set(undefined)` hands ownership back to the table and keeps the last value.\n */\nexport interface Controllable<T> {\n /** The current value. */\n readonly value: T;\n /** `true` once the host has set a value (and not handed it back with `undefined`). */\n readonly controlled: boolean;\n /** Called when the host sets the property. */\n set(value: T | undefined): void;\n /**\n * Called when the table wants to change the state, for example after a header click.\n * Returns the proposed value and whether it was applied.\n */\n request(next: T): { value: T; applied: boolean };\n}\n\nexport function controllable<T>(initial: T): Controllable<T> {\n let value = initial;\n let controlled = false;\n return {\n get value() {\n return value;\n },\n get controlled() {\n return controlled;\n },\n set(next) {\n if (next === undefined) {\n controlled = false;\n return;\n }\n controlled = true;\n value = next;\n },\n request(next) {\n if (!controlled) value = next;\n return { value: next, applied: !controlled };\n },\n };\n}\n","/** A rendered row and the pool slot whose DOM it uses. */\nexport interface PoolEntry {\n id: string;\n slot: number;\n}\n\n/**\n * Assigns pool slots to rendered rows (ADR 0001).\n *\n * A row keeps its slot while it stays rendered. A row entering the window takes a\n * slot freed by a row that left, so its DOM is updated in place rather than created.\n * Rows are returned in slot order (\"pool order\"); the ADR 0001 addendum ruled out\n * re-sorting them by row index, so assistive tech gets row positions from\n * `aria-rowindex` instead.\n */\nexport class RowPool {\n #slots = new Map<string, number>();\n #free: number[] = [];\n #size = 0;\n #pinned: string | undefined;\n\n /** Number of slots created so far: the most rows rendered at once. */\n get size(): number {\n return this.#size;\n }\n\n /** The row id whose slot is kept while it is out of range, if any. */\n get pinned(): string | undefined {\n return this.#pinned;\n }\n\n /**\n * Keeps one row's slot, and keeps it rendered, while it is outside the rendered\n * range. Used for the row holding focus. `undefined` releases it.\n */\n pin(id: string | undefined): void {\n this.#pinned = id;\n }\n\n /** The slot a row holds, or `undefined` when it isn't rendered. */\n slotOf(id: string): number | undefined {\n return this.#slots.get(id);\n }\n\n /**\n * Updates the pool for the rows that should be rendered and returns them, plus the\n * pinned row if it isn't among them, in slot order.\n */\n update(ids: Iterable<string>): PoolEntry[] {\n const keep = new Set(ids);\n if (this.#pinned !== undefined) keep.add(this.#pinned);\n\n for (const [id, slot] of this.#slots) {\n if (!keep.has(id)) {\n this.#slots.delete(id);\n this.#free.push(slot);\n }\n }\n for (const id of keep) {\n if (!this.#slots.has(id)) this.#slots.set(id, this.#free.pop() ?? this.#size++);\n }\n\n const entries: PoolEntry[] = [];\n for (const [id, slot] of this.#slots) entries.push({ id, slot });\n return entries.sort((a, b) => a.slot - b.slot);\n }\n\n /** Frees every slot, for example when the data is replaced. */\n clear(): void {\n this.#slots.clear();\n this.#free = [];\n this.#size = 0;\n this.#pinned = undefined;\n }\n}\n","/**\n * Maps the scroll position of a body that is too tall to render onto the rows.\n *\n * Engines limit an element's height (about 33.5M px in Chromium and WebKit, less\n * when zoomed; about 17.9M px in Firefox, which drops a taller element to 0). A\n * body taller than `cap` renders `cap` px tall, and the scroll position is scaled\n * linearly: the top of the physical scroll range is the first row, its bottom the\n * last. Offsets the virtualizer works with are logical (unscaled) px; the\n * scroller's `scrollTop` is physical. Under the cap the mapping is the identity.\n *\n * The scroll range is the scroller's: the body plus what scrolls with it (header,\n * pinned rows) minus the viewport, so pass the physical range,\n * `scrollHeight - clientHeight`. The logical range is longer by `excess`.\n */\nexport class ScrollScale {\n #logical = 0;\n #cap = Infinity;\n /** The logical offset last written and the physical offset it landed on. */\n #landed: { physical: number; logical: number } | undefined;\n\n /**\n * `logical`: the height of all body rows in px. `cap`: the tallest body the\n * engine renders. Returns whether anything changed.\n */\n configure(logical: number, cap: number): boolean {\n if (logical === this.#logical && cap === this.#cap) return false;\n this.#logical = logical;\n this.#cap = cap;\n this.#landed = undefined;\n return true;\n }\n\n /** Whether the body is taller than the cap, so offsets are scaled. */\n get scaled(): boolean {\n return this.#logical > this.#cap;\n }\n\n /** The body's rendered height in px. */\n get size(): number {\n return Math.min(this.#logical, this.#cap);\n }\n\n /** How much longer the logical scroll range is than the physical one. */\n get excess(): number {\n return this.#logical - this.size;\n }\n\n /** The logical offset for a physical one, given the physical scroll range. */\n toLogical(physical: number, range: number): number {\n if (!this.scaled || range <= 0) return physical;\n const landed = this.#landed;\n if (landed?.physical === physical) return landed.logical;\n return (clamp(physical, range) * (range + this.excess)) / range;\n }\n\n /** The physical offset for a logical one, given the physical scroll range. */\n toPhysical(logical: number, range: number): number {\n if (!this.scaled || range <= 0) return logical;\n const total = range + this.excess;\n return (clamp(logical, total) * range) / total;\n }\n\n /**\n * Records that a write of the logical offset `logical` left the scroller at\n * `physical` (read back, after the engine's rounding), so reading that physical\n * offset gives the exact logical one again. Without it a scaled offset could be\n * off by up to the scale ratio, and a row scrolled to the top would sit under\n * the header by a few px.\n */\n land(logical: number, physical: number): void {\n this.#landed = this.scaled ? { physical, logical } : undefined;\n }\n}\n\nconst clamp = (value: number, max: number) => Math.min(Math.max(value, 0), max);\n","/** Whether a row's data is there: loaded, still to come, or its page failed. */\nexport type RowState = 'loaded' | 'loading' | 'error';\n\n/** A loaded row and its id. */\nexport interface CachedRow<TData> {\n id: string;\n row: TData;\n}\n\nexport interface PageCacheOptions<TData> {\n /** Rows per page, at least 1. */\n pageSize: number;\n /** Row id function, given the absolute index. Default: the index as a string. */\n getRowId?: ((row: TData, index: number) => string) | undefined;\n /** Row count to start with (carried over from a previous cache). Default: one page. */\n rowCount?: number;\n /** Whether `rowCount` is the real total. Default: `false`. */\n totalKnown?: boolean;\n}\n\n/**\n * Pages kept loaded on each side of the requested range; pages further away are\n * dropped, so memory stays bounded however far the table scrolls.\n */\nexport const KEEP_PAGES = 10;\n\n/**\n * The row cache behind `dataSource`: which pages are loaded, in flight or failed,\n * and how many rows the table has. Bookkeeping only: no timers and no fetching,\n * so the caller (the element's DataController) decides when to load.\n *\n * Without a known total, the row count stays one page past the last loaded row,\n * so the next page shows as skeletons and loads when it scrolls into view. A page\n * shorter than asked for marks the end.\n */\nexport class PageCache<TData> {\n readonly pageSize: number;\n readonly #getRowId: (row: TData, index: number) => string;\n readonly #pages = new Map<number, CachedRow<TData>[]>();\n /** In-flight pages and the `end` they asked for. */\n readonly #inFlight = new Map<number, number>();\n readonly #failed = new Set<number>();\n readonly #indexById = new Map<string, number>();\n #rowCount: number;\n #totalKnown: boolean;\n\n constructor(options: PageCacheOptions<TData>) {\n this.pageSize = Math.max(1, Math.floor(options.pageSize));\n this.#getRowId = options.getRowId ?? ((_row, index) => String(index));\n this.#rowCount = Math.max(0, Math.floor(options.rowCount ?? this.pageSize));\n this.#totalKnown = options.totalKnown ?? false;\n }\n\n /** Number of rows, loaded or not. */\n get rowCount(): number {\n return this.#rowCount;\n }\n\n /** `true` once the total is known (given by the server, or found from a short page). */\n get totalKnown(): boolean {\n return this.#totalKnown;\n }\n\n pageOf(index: number): number {\n return Math.floor(index / this.pageSize);\n }\n\n /** The loaded row at an index, with its id; `undefined` until its page has loaded. */\n entryAt(index: number): CachedRow<TData> | undefined {\n if (index < 0 || index >= this.#rowCount) return undefined;\n return this.#pages.get(this.pageOf(index))?.[index % this.pageSize];\n }\n\n /** The index of a loaded row's id, or `undefined`. */\n indexOf(rowId: string): number | undefined {\n return this.#indexById.get(rowId);\n }\n\n stateAt(index: number): RowState {\n if (this.entryAt(index)) return 'loaded';\n return this.#failed.has(this.pageOf(index)) ? 'error' : 'loading';\n }\n\n /** Pages touching the rows `start` to `end` (exclusive) that still need a request. */\n missingPages(start: number, end: number): number[] {\n const last = Math.min(end, this.#rowCount) - 1;\n const pages: number[] = [];\n if (last < 0) return pages;\n for (let page = this.pageOf(Math.max(0, start)); page <= this.pageOf(last); page++) {\n if (!this.#pages.has(page) && !this.#inFlight.has(page) && !this.#failed.has(page)) {\n pages.push(page);\n }\n }\n return pages;\n }\n\n /** Marks a page as in flight and returns the rows to ask for. */\n begin(page: number): { start: number; end: number } {\n const start = page * this.pageSize;\n let end = start + this.pageSize;\n if (this.#totalKnown) end = Math.min(end, this.#rowCount);\n this.#failed.delete(page);\n this.#inFlight.set(page, end);\n return { start, end };\n }\n\n /** Stores a page's rows and updates the row count. Ignored unless the page is in flight. */\n resolve(page: number, rows: readonly TData[], total?: number): boolean {\n const end = this.#inFlight.get(page);\n if (end === undefined) return false;\n this.#inFlight.delete(page);\n const start = page * this.pageSize;\n const asked = end - start;\n const entries = rows.slice(0, asked).map((row, i) => ({\n id: this.#getRowId(row, start + i),\n row,\n }));\n this.#drop(page);\n if (entries.length > 0) this.#pages.set(page, entries);\n entries.forEach((entry, i) => this.#indexById.set(entry.id, start + i));\n\n if (total !== undefined && Number.isFinite(total) && total >= 0) {\n this.#setCount(Math.floor(total), true);\n } else if (entries.length < asked) {\n this.#setCount(start + entries.length, true);\n } else if (!this.#totalKnown) {\n this.#setCount(Math.max(this.#rowCount, end + this.pageSize), false);\n }\n return true;\n }\n\n /** Marks an in-flight page as failed. Ignored unless the page is in flight. */\n fail(page: number): boolean {\n if (!this.#inFlight.delete(page)) return false;\n this.#failed.add(page);\n return true;\n }\n\n /** Lets a failed page be requested again. */\n retry(page: number): void {\n this.#failed.delete(page);\n }\n\n /** Forgets an in-flight page (its request was aborted), so it can be requested again. */\n cancel(page: number): void {\n this.#inFlight.delete(page);\n }\n\n /** `true` if a page failed and hasn't been retried or evicted since. */\n isFailed(page: number): boolean {\n return this.#failed.has(page);\n }\n\n /** In-flight pages entirely outside rows `start` to `end` (exclusive). */\n inFlightOutside(start: number, end: number): number[] {\n const first = this.pageOf(Math.max(0, start));\n const last = this.pageOf(Math.max(0, end - 1));\n return [...this.#inFlight.keys()].filter((page) => page < first || page > last);\n }\n\n /**\n * Drops loaded and failed pages more than `KEEP_PAGES` pages away from rows\n * `start` to `end` (exclusive). Failed pages that come back into view load again.\n */\n evictOutside(start: number, end: number): void {\n const first = this.pageOf(Math.max(0, start)) - KEEP_PAGES;\n const last = this.pageOf(Math.max(0, end - 1)) + KEEP_PAGES;\n for (const page of [...this.#pages.keys()]) {\n if (page < first || page > last) this.#drop(page);\n }\n for (const page of [...this.#failed]) {\n if (page < first || page > last) this.#failed.delete(page);\n }\n }\n\n /** Number of pages holding rows: bounded by eviction. */\n get loadedPages(): number {\n return this.#pages.size;\n }\n\n #setCount(count: number, known: boolean): void {\n this.#rowCount = count;\n this.#totalKnown = known;\n // Rows past the end are gone; drop pages that start there.\n for (const page of [...this.#pages.keys()]) {\n if (page * this.pageSize >= count) this.#drop(page);\n }\n }\n\n #drop(page: number): void {\n const entries = this.#pages.get(page);\n if (!entries) return;\n const start = page * this.pageSize;\n entries.forEach((entry, i) => {\n if (this.#indexById.get(entry.id) === start + i) this.#indexById.delete(entry.id);\n });\n this.#pages.delete(page);\n }\n}\n","let region: HTMLElement | undefined;\n\n/**\n * Says something to screen readers through a polite live region. The region\n * lives in the document body, not in the table: a grid may only own rows, so a\n * status element inside it would break the grid's structure. One region serves\n * every table on the page. It is visually hidden with inline styles, so page\n * CSS can't reveal it.\n */\nexport function announce(doc: Document, message: string): void {\n if (!region?.isConnected || region.ownerDocument !== doc) {\n region = doc.createElement('div');\n region.setAttribute('aria-live', 'polite');\n region.setAttribute('aria-atomic', 'true');\n region.dataset.argusAnnouncer = '';\n region.style.cssText =\n 'position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap';\n doc.body.append(region);\n }\n const target = region;\n // A new text node each time, so the same message twice is still announced.\n target.textContent = '';\n setTimeout(() => {\n target.textContent = message;\n }, 50);\n}\n","import type { ColumnSizingState } from '@argus-table/core';\n\n/**\n * The width each column's content needs, in px, from the cells rendered now:\n * the header, the pinned rows and the rendered body rows. Rows that haven't\n * loaded are skipped (their skeleton bars say nothing about the content).\n *\n * Every cell of the columns gets `data-measure`, which sizes it to its\n * `max-content` (base styles), so the browser accounts for padding, the sort\n * indicator and whatever the content is. One forced layout, no paint: the\n * attribute is gone before the frame ends. A column with nothing laid out\n * (the table is hidden) is left out.\n */\nexport function measureColumns(root: ParentNode, ids: Iterable<string>): Map<string, number> {\n const wanted = new Set(ids);\n const widths = new Map<string, number>();\n if (wanted.size === 0) return widths;\n const cells = [...root.querySelectorAll<HTMLElement>('[data-col]')].filter(\n (cell) =>\n wanted.has(cell.dataset.col ?? '') && !cell.parentElement?.matches('[part~=\"row-loading\"]'),\n );\n for (const cell of cells) cell.setAttribute('data-measure', '');\n for (const cell of cells) {\n const id = cell.dataset.col ?? '';\n const px = Math.ceil(cell.getBoundingClientRect().width);\n if (px > 0 && px > (widths.get(id) ?? 0)) widths.set(id, px);\n }\n for (const cell of cells) cell.removeAttribute('data-measure');\n return widths;\n}\n\n/**\n * - `provisional`: measured without loaded body rows (the header and pinned rows only).\n * - `final`: measured with loaded rows; kept until the column goes away.\n * - `fonts`: measured while web fonts were loading; measured again once they are ready.\n */\ntype State = 'provisional' | 'final' | 'fonts';\n\n/**\n * Widths of `width: 'auto'` columns. A column measures once its first loaded\n * rows render, and before that fits the header and pinned rows. So each column\n * is measured at most twice (three times if fonts were still loading), and a\n * table that stays empty doesn't measure on every update. State is keyed by\n * column id, so new `columns` arrays with the same ids don't measure again.\n */\nexport class AutoWidths {\n /** Measured widths by column id; a new object whenever one changes. */\n widths: ColumnSizingState = {};\n readonly #state = new Map<string, State>();\n #fontsPending = false;\n readonly #requestUpdate: () => void;\n\n constructor(requestUpdate: () => void) {\n this.#requestUpdate = requestUpdate;\n }\n\n /** Forgets columns that are gone or no longer `'auto'`, given the ids of the auto columns. */\n sync(ids: Iterable<string>): void {\n const auto = new Set(ids);\n for (const id of this.#state.keys()) {\n if (!auto.has(id)) this.#state.delete(id);\n }\n const kept = Object.entries(this.widths).filter(([id]) => auto.has(id));\n if (kept.length !== Object.keys(this.widths).length) this.widths = Object.fromEntries(kept);\n }\n\n /**\n * Measures the auto columns that need it. Returns `true` if a width changed;\n * the caller then renders again (the one extra pass of the render cycle).\n */\n measure(\n root: ParentNode,\n columns: readonly { id: string; auto: boolean }[],\n hasLoadedRows: boolean,\n ): boolean {\n const due = columns\n .filter((c) => c.auto)\n .map((c) => c.id)\n .filter((id) => {\n const state = this.#state.get(id);\n return state === undefined || (state === 'provisional' && hasLoadedRows);\n });\n if (due.length === 0) return false;\n const measured = measureColumns(root, due);\n const fontsLoading = typeof document !== 'undefined' && document.fonts.status === 'loading';\n let next: ColumnSizingState | undefined;\n for (const [id, px] of measured) {\n this.#state.set(id, fontsLoading ? 'fonts' : hasLoadedRows ? 'final' : 'provisional');\n if (this.widths[id] !== px) (next ??= { ...this.widths })[id] = px;\n }\n if (fontsLoading && measured.size > 0) this.#remeasureAfterFonts();\n if (next) this.widths = next;\n return next !== undefined;\n }\n\n /** Once web fonts are ready, columns measured meanwhile measure again. */\n #remeasureAfterFonts(): void {\n if (this.#fontsPending) return;\n this.#fontsPending = true;\n void document.fonts.ready.then(() => {\n this.#fontsPending = false;\n let any = false;\n for (const [id, state] of this.#state) {\n if (state === 'fonts') {\n this.#state.delete(id);\n any = true;\n }\n }\n if (any) this.#requestUpdate();\n });\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { ArgusColumn, unwatchColumns, watchColumns } from '../argus-column.js';\nimport type { ColumnDef } from '../types.js';\n\n/**\n * Reads the host's `<argus-column>` children into `ColumnDef`s. The columns tell\n * the host when they change (`watchColumns`); the list is rebuilt only then, so\n * `defs` keeps its identity between changes.\n */\nexport class ColumnChildrenController<T> implements ReactiveController {\n readonly #host: ReactiveControllerHost & HTMLElement;\n #defs: readonly ColumnDef<T>[] = [];\n #dirty = true;\n\n constructor(host: ReactiveControllerHost & HTMLElement) {\n this.#host = host;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#dirty = true;\n watchColumns(this.#host, () => {\n this.#dirty = true;\n this.#host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n unwatchColumns(this.#host);\n }\n\n /** Whether the host has any `<argus-column>` child. */\n get present(): boolean {\n return this.defs.length > 0;\n }\n\n /** The children's columns, in document order. */\n get defs(): readonly ColumnDef<T>[] {\n if (this.#dirty) {\n this.#dirty = false;\n this.#defs = [...this.#host.children]\n .filter((c): c is ArgusColumn<T> => c instanceof ArgusColumn)\n .map((c) => c.toColumnDef());\n }\n return this.#defs;\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport {\n PageCache,\n type DataSource,\n type LoadErrorDetail,\n type RowState,\n type SortState,\n} from '@argus-table/core';\n\n/** Rows per request when the data source sets no `pageSize`. */\nexport const DEFAULT_PAGE_SIZE = 100;\n\n/** Quiet time after the last range change before pages load, so fast scrolling loads only where it stops. */\nexport const LOAD_DEBOUNCE_MS = 50;\n\nexport interface DataConfig<T> {\n source: DataSource<T> | undefined;\n sorting: SortState;\n getRowId: ((row: T, index: number) => string) | undefined;\n}\n\n/**\n * Loads `dataSource` pages for the rendered rows (infinite loading). It owns the\n * page cache: a new source, sort order or row id function starts a fresh one, and\n * answers for an old cache are dropped. Requests wait until the range has been\n * quiet for `LOAD_DEBOUNCE_MS`; pages that scrolled away are aborted.\n */\nexport class DataController<T> implements ReactiveController {\n readonly #host: ReactiveControllerHost;\n #config: DataConfig<T> = { source: undefined, sorting: [], getRowId: undefined };\n #cache: PageCache<T> | undefined;\n readonly #requests = new Map<number, AbortController>();\n #range: { start: number; end: number } | undefined;\n #timer: ReturnType<typeof setTimeout> | undefined;\n #errors: LoadErrorDetail[] = [];\n\n constructor(host: ReactiveControllerHost) {\n this.#host = host;\n host.addController(this);\n }\n\n hostDisconnected(): void {\n clearTimeout(this.#timer);\n this.#timer = undefined;\n this.#abortAll();\n }\n\n hostConnected(): void {\n // Requests aborted on disconnect load again on the next range request.\n this.#range = undefined;\n }\n\n /** The page cache, while a data source is set: the model reads rows from it. */\n get rows(): PageCache<T> | undefined {\n return this.#cache;\n }\n\n /**\n * Takes the source, sort order and row id function. Any change starts a fresh\n * cache; a sort or row id change keeps the row count (the rows are the same).\n */\n configure(next: DataConfig<T>): void {\n const prev = this.#config;\n this.#config = next;\n if (!next.source) {\n this.#reset(undefined);\n return;\n }\n if (next.source !== prev.source || !this.#cache) {\n this.#reset({ rowCount: undefined, totalKnown: false });\n } else if (next.sorting !== prev.sorting || next.getRowId !== prev.getRowId) {\n this.#reset({ rowCount: this.#cache.rowCount, totalKnown: this.#cache.totalKnown });\n }\n }\n\n /** Drops every loaded page and loads the rendered ones again. The row count stays until pages answer. */\n refresh(): void {\n if (!this.#cache) return;\n this.#reset({ rowCount: this.#cache.rowCount, totalKnown: false });\n this.#host.requestUpdate();\n }\n\n stateAt(index: number): RowState {\n return this.#cache?.stateAt(index) ?? 'loaded';\n }\n\n /**\n * The rendered rows, `start` to `end` (exclusive). Loads what's missing once the\n * range has been quiet for a moment. Call after every update.\n */\n request(start: number, end: number): void {\n const cache = this.#cache;\n if (!cache) return;\n const prev = this.#range;\n const moved = prev?.start !== start || prev.end !== end;\n this.#range = { start, end };\n if (moved) {\n clearTimeout(this.#timer);\n } else if (this.#timer !== undefined || cache.missingPages(start, end).length === 0) {\n return;\n }\n this.#timer = setTimeout(() => {\n this.#timer = undefined;\n this.#load();\n }, LOAD_DEBOUNCE_MS);\n }\n\n /** Requests the failed page holding row `index` again (the Retry button, or Enter on a failed row). */\n retry(index: number): void {\n const cache = this.#cache;\n const page = cache?.pageOf(index);\n if (!cache || page === undefined || !cache.isFailed(page)) return;\n cache.retry(page);\n this.#range = undefined;\n this.#host.requestUpdate();\n }\n\n /** Load errors since the last call, to fire as `argus-load-error` after the update. */\n takeErrors(): LoadErrorDetail[] {\n const errors = this.#errors;\n this.#errors = [];\n return errors;\n }\n\n #reset(carry: { rowCount: number | undefined; totalKnown: boolean } | undefined): void {\n clearTimeout(this.#timer);\n this.#timer = undefined;\n this.#abortAll();\n this.#range = undefined;\n this.#errors = [];\n const { source, getRowId } = this.#config;\n this.#cache =\n source && carry\n ? new PageCache<T>({\n pageSize: source.pageSize ?? DEFAULT_PAGE_SIZE,\n getRowId,\n rowCount: carry.rowCount,\n totalKnown: carry.totalKnown,\n })\n : undefined;\n }\n\n #abortAll(): void {\n for (const [page, controller] of this.#requests) {\n controller.abort();\n this.#cache?.cancel(page);\n }\n this.#requests.clear();\n }\n\n #load(): void {\n const cache = this.#cache;\n const range = this.#range;\n if (!cache || !range) return;\n // Keep a page of margin, so a small scroll back doesn't abort a page about to land.\n const margin = cache.pageSize;\n for (const page of cache.inFlightOutside(range.start - margin, range.end + margin)) {\n this.#requests.get(page)?.abort();\n this.#requests.delete(page);\n cache.cancel(page);\n }\n cache.evictOutside(range.start, range.end);\n for (const page of cache.missingPages(range.start, range.end)) this.#fetch(cache, page);\n }\n\n #fetch(cache: PageCache<T>, page: number): void {\n const source = this.#config.source;\n if (!source) return;\n const { start, end } = cache.begin(page);\n const controller = new AbortController();\n this.#requests.set(page, controller);\n const current = () => !controller.signal.aborted && cache === this.#cache;\n let pending: Promise<unknown>;\n try {\n pending = Promise.resolve(\n source.getRows({ start, end, sorting: this.#config.sorting, signal: controller.signal }),\n );\n } catch (error) {\n pending = Promise.reject(error instanceof Error ? error : new Error(String(error)));\n }\n pending\n .then((response) => {\n if (!current()) return;\n const { rows, total } = (response ?? {}) as { rows?: unknown; total?: unknown };\n if (!Array.isArray(rows)) {\n throw new TypeError('argus-table: getRows() must resolve to { rows: [], total? }.');\n }\n this.#requests.delete(page);\n cache.resolve(page, rows as T[], typeof total === 'number' ? total : undefined);\n this.#host.requestUpdate();\n })\n .catch((error: unknown) => {\n if (!current()) return;\n this.#requests.delete(page);\n cache.fail(page);\n this.#errors.push({ error, start, end });\n this.#host.requestUpdate();\n });\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/** How long after the last sideways scroll pinned cells stay sticky. */\nconst SETTLE_MS = 150;\n\n/**\n * Keeps pinned body cells in place without making them sticky while the table\n * only scrolls up and down.\n *\n * Safari gives every sticky element a compositing layer of its own and moves\n * each one on every scroll frame; with a sticky cell per pinned column per row\n * that is dozens of layers, and vertical scrolling stutters (ADR 0001, \"Pinned\n * columns in Safari\"). At rest, pinned body cells are plain cells shifted by the\n * horizontal scroll offset (`--_sx`, and `--_max-x` for the end side), which\n * only changes when the table scrolls sideways. While it does, the scroller\n * carries `data-hscroll` and the cells are sticky, so they don't lag behind\n * the scroll; once it settles they go back to the transform, at the same place.\n * It also sizes the pinned edges' shadow overlays (`.pin-shadow`) to the\n * scroller's visible area.\n */\nexport class PinScrollController implements ReactiveController {\n readonly #scroller: () => HTMLElement | null;\n #attached: HTMLElement | undefined;\n #left = 0;\n #timer: ReturnType<typeof setTimeout> | undefined;\n #resize: ResizeObserver | undefined;\n\n constructor(host: ReactiveControllerHost, scroller: () => HTMLElement | null) {\n this.#scroller = scroller;\n host.addController(this);\n }\n\n hostConnected(): void {\n // After a move in the DOM; before the first render there is no scroller yet.\n this.#attach();\n }\n\n hostUpdated(): void {\n this.#attach();\n }\n\n hostDisconnected(): void {\n this.#attached?.removeEventListener('scroll', this.#onScroll);\n this.#resize?.disconnect();\n clearTimeout(this.#timer);\n this.#attached = undefined;\n }\n\n /** Re-reads how far the table scrolls sideways: call when column widths change. */\n measure(): void {\n const s = this.#attached;\n if (!s) return;\n s.style.setProperty('--_max-x', `${String(Math.max(0, s.scrollWidth - s.clientWidth))}px`);\n // The edge shadows sit over the scroller, clear of its scrollbars.\n for (const shadow of s.parentNode?.querySelectorAll<HTMLElement>(':scope > .pin-shadow') ??\n []) {\n shadow.style.setProperty('--_view-h', `${String(s.clientHeight)}px`);\n shadow.style.setProperty('--_sb-x', `${String(s.offsetWidth - s.clientWidth)}px`);\n }\n this.#left = s.scrollLeft;\n s.style.setProperty('--_sx', `${String(this.#left)}px`);\n }\n\n #attach(): void {\n const s = this.#scroller();\n if (!s || s === this.#attached) return;\n this.#attached = s;\n s.addEventListener('scroll', this.#onScroll, { passive: true });\n this.#resize ??= new ResizeObserver(() => {\n this.measure();\n });\n this.#resize.observe(s);\n this.measure();\n }\n\n readonly #onScroll = () => {\n const s = this.#attached;\n if (!s || s.scrollLeft === this.#left) return;\n this.#left = s.scrollLeft;\n s.toggleAttribute('data-hscroll', true);\n clearTimeout(this.#timer);\n this.#timer = setTimeout(() => {\n this.measure();\n s.removeAttribute('data-hscroll');\n }, SETTLE_MS);\n };\n}\n","/** Where a dragged column would land: its new position and the header that shows the drop line. */\nexport interface DropTarget {\n /** Position in the whole column order after the move, 0-based. */\n to: number;\n /** The header that draws the drop line. */\n columnId: string;\n /** The edge of that header the line is on, in logical terms. */\n edge: 'start' | 'end';\n}\n\n/** A header of the dragged column's group, in visual order. */\nexport interface DropSlot {\n id: string;\n /** Its position in the whole column order, 0-based. */\n index: number;\n rect: { left: number; right: number };\n}\n\n/**\n * The drop target for a pointer at `x`: the gap between headers nearest to it,\n * decided by each header's midpoint. `undefined` where the column would stay\n * put. `direction` is 1 in LTR and -1 in RTL, where the group runs right to left.\n */\nexport function dropTarget(\n slots: readonly DropSlot[],\n draggedId: string,\n x: number,\n direction: 1 | -1,\n): DropTarget | undefined {\n const from = slots.findIndex((s) => s.id === draggedId);\n const first = slots[0];\n const last = slots.at(-1);\n if (from < 0 || !first || !last) return undefined;\n // The gap before the first header whose middle is past the pointer, in reading order.\n let gap = slots.findIndex((s) => (x - (s.rect.left + s.rect.right) / 2) * direction < 0);\n if (gap < 0) gap = slots.length;\n if (gap === from || gap === from + 1) return undefined;\n const to = first.index + (gap > from ? gap - 1 : gap);\n const at = slots[gap];\n return at ? { to, columnId: at.id, edge: 'start' } : { to, columnId: last.id, edge: 'end' };\n}\n\nexport interface ReorderDragOptions {\n /** The scroll container: it scrolls while the pointer is near its edges. */\n scroller: HTMLElement;\n /** The drop target for a pointer at `x` (client coordinates). */\n targetAt: (x: number) => DropTarget | undefined;\n /**\n * Where the dragged column's group is visible, in client x, if it can scroll\n * (the scrolling columns). Near these edges the scroller scrolls with the drag.\n */\n scrollArea: () => { left: number; right: number } | undefined;\n onStart: () => void;\n /** The target changed (`undefined`: the column would stay put). */\n onTarget: (target: DropTarget | undefined) => void;\n /** The pointer was released over a target, or `undefined` when it would stay put. */\n onDrop: (target: DropTarget | undefined) => void;\n /** Escape, a cancelled pointer, or a release without a drag. */\n onCancel: () => void;\n}\n\n/** Movement before a press becomes a drag, so a click still sorts. */\nconst THRESHOLD = 4;\n/** Width of the band at the scroll area's edges that scrolls, and the top speed there. */\nconst EDGE = 40;\nconst MAX_SPEED = 16;\n\nconst INTERACTIVE = 'button,input,select,textarea,a[href],label,[contenteditable]';\n\n/**\n * Whether a press on a header may start a reorder drag: the primary button of a\n * mouse or pen (a touch pans the table instead), not on a resize handle, and not\n * in interactive content slotted into the header.\n */\nexport function canStartReorder(down: PointerEvent, cell: HTMLElement): boolean {\n if (down.button !== 0 || down.pointerType === 'touch') return false;\n for (const target of down.composedPath()) {\n if (target === cell) return true;\n if (!(target instanceof Element)) continue;\n if (target instanceof HTMLElement && target.dataset.resizeCol !== undefined) return false;\n if (target.matches(INTERACTIVE)) return false;\n }\n return false;\n}\n\n/**\n * One pointer drag of a column header. It becomes a drag after a few pixels of\n * movement; until then the press is a click. While dragging, the pointer is\n * captured by the header, the target follows the pointer once per frame, and the\n * scroll area scrolls near its edges. Escape cancels. The click that ends a drag\n * is swallowed, so it neither sorts nor counts as a cell click.\n */\nexport function startReorderDrag(\n cell: HTMLElement,\n down: PointerEvent,\n options: ReorderDragOptions,\n): void {\n const view = cell.ownerDocument.defaultView ?? window;\n const startX = down.clientX;\n const startY = down.clientY;\n let x = startX;\n let dragging = false;\n let frame = 0;\n let target: DropTarget | undefined;\n\n const same = (a: DropTarget | undefined, b: DropTarget | undefined) =>\n a?.to === b?.to && a?.columnId === b?.columnId && a?.edge === b?.edge;\n\n const tick = () => {\n frame = 0;\n if (!dragging) return;\n const area = options.scrollArea();\n if (area) {\n const speed =\n x < area.left + EDGE\n ? -Math.min(1, (area.left + EDGE - x) / EDGE)\n : x > area.right - EDGE\n ? Math.min(1, (x - (area.right - EDGE)) / EDGE)\n : 0;\n // A visual delta: scrollLeft runs the same way in LTR and RTL.\n if (speed !== 0) options.scroller.scrollLeft += Math.round(speed * MAX_SPEED);\n // Targets past the visible part would be hidden under pinned columns.\n x = Math.min(Math.max(x, area.left), area.right);\n }\n const next = options.targetAt(x);\n if (!same(next, target)) {\n target = next;\n options.onTarget(target);\n }\n // Keep running while dragging: the view may still be scrolling.\n frame = view.requestAnimationFrame(tick);\n };\n\n const listeners = new AbortController();\n const cleanup = (event?: PointerEvent) => {\n if (frame) view.cancelAnimationFrame(frame);\n frame = 0;\n listeners.abort();\n if (event && cell.hasPointerCapture(event.pointerId)) {\n cell.releasePointerCapture(event.pointerId);\n }\n };\n\n const move = (event: PointerEvent) => {\n if (event.pointerId !== down.pointerId) return;\n x = event.clientX;\n if (!dragging) {\n if (Math.hypot(x - startX, event.clientY - startY) < THRESHOLD) return;\n dragging = true;\n try {\n cell.setPointerCapture(event.pointerId);\n } catch {\n // Synthetic pointers can't be captured; the window listeners still see the moves.\n }\n options.onStart();\n }\n // No text selection while dragging.\n event.preventDefault();\n frame ||= view.requestAnimationFrame(tick);\n };\n\n const up = (event: PointerEvent) => {\n if (event.pointerId !== down.pointerId) return;\n cleanup(event);\n if (!dragging) return;\n x = event.clientX;\n const area = options.scrollArea();\n if (area) x = Math.min(Math.max(x, area.left), area.right);\n swallowClick(view);\n options.onDrop(options.targetAt(x));\n };\n\n const cancel = (event: PointerEvent) => {\n if (event.pointerId !== down.pointerId) return;\n cleanup(event);\n if (dragging) options.onCancel();\n };\n\n const key = (event: KeyboardEvent) => {\n if (!dragging || event.key !== 'Escape') return;\n event.preventDefault();\n event.stopPropagation();\n cleanup();\n // The pointer is still down: its release must not count as a click.\n swallowClick(view, false);\n options.onCancel();\n };\n\n const listen = { capture: true, signal: listeners.signal };\n view.addEventListener('pointermove', move, listen);\n view.addEventListener('pointerup', up, listen);\n view.addEventListener('pointercancel', cancel, listen);\n view.addEventListener('keydown', key, listen);\n}\n\n/**\n * Stops the click that follows the release of a drag, if one comes. It comes in\n * the same task as the release, so the guard goes once that task is over. After\n * Escape the pointer is still down (`released: false`): the guard waits for its release.\n */\nfunction swallowClick(view: Window, released = true): void {\n const stop = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const remove = () => {\n setTimeout(() => {\n view.removeEventListener('click', stop, { capture: true });\n });\n };\n view.addEventListener('click', stop, { capture: true, once: true });\n if (released) remove();\n else view.addEventListener('pointerup', remove, { capture: true, once: true });\n}\n","/**\n * One pointer drag on a resize handle. The pointer is captured, so the drag keeps\n * working outside the handle, and moves are batched to one `onWidth` call per\n * animation frame (TanStack's `onChange` mode: the width updates while dragging).\n *\n * `direction` is 1 in LTR and -1 in RTL: the handle sits on the inline-end edge,\n * so moving toward the inline end always grows the column.\n */\nexport function startResizeDrag(\n handle: HTMLElement,\n down: PointerEvent,\n startWidth: number,\n direction: 1 | -1,\n onWidth: (width: number) => void,\n): void {\n const startX = down.clientX;\n let frame = 0;\n let pending: number | undefined;\n\n const flush = () => {\n frame = 0;\n if (pending !== undefined) onWidth(pending);\n pending = undefined;\n };\n // A press and release without moving (or the clicks of a double-click) changes nothing.\n let moved = false;\n const move = (event: PointerEvent) => {\n moved ||= event.clientX !== startX;\n if (!moved) return;\n pending = startWidth + (event.clientX - startX) * direction;\n frame ||= requestAnimationFrame(flush);\n };\n const end = (event: PointerEvent) => {\n if (event.type === 'pointerup') move(event);\n if (frame) cancelAnimationFrame(frame);\n flush();\n handle.removeAttribute('data-active');\n handle.removeEventListener('pointermove', move);\n handle.removeEventListener('pointerup', end);\n handle.removeEventListener('pointercancel', end);\n if (handle.hasPointerCapture(event.pointerId)) handle.releasePointerCapture(event.pointerId);\n };\n\n down.preventDefault();\n try {\n handle.setPointerCapture(down.pointerId);\n } catch {\n // Synthetic or already released pointers can't be captured; moves on the handle still work.\n }\n handle.setAttribute('data-active', '');\n handle.addEventListener('pointermove', move);\n handle.addEventListener('pointerup', end);\n handle.addEventListener('pointercancel', end);\n}\n","import { createTableModel, type TableModel, type TableModelOptions } from '@argus-table/core';\nimport type { CellContent } from '../types.js';\n\n/**\n * Owns the table model (core's TanStack adapter). The element pushes its\n * properties in from `willUpdate`; render functions read `model`. It needs no\n * lifecycle hooks yet: the model is pull-based and owns no state.\n */\nexport class TableController<T> {\n readonly model: TableModel<T, CellContent>;\n\n constructor() {\n this.model = createTableModel<T, CellContent>({\n columns: [],\n data: [],\n getRowId: undefined,\n sorting: [],\n columnSizing: {},\n columnOrder: [],\n });\n }\n\n update(options: Partial<TableModelOptions<T, CellContent>>): void {\n this.model.update(options);\n }\n}\n","function getMeasurementKey(item) {\n return typeof item === \"object\" ? item.key : item;\n}\nfunction createLazyMeasurementsView(cache, flat) {\n const count = cache.length;\n return new Proxy(cache, {\n get(target, prop, receiver) {\n if (typeof prop === \"string\") {\n const c = prop.charCodeAt(0);\n if (c >= 48 && c <= 57) {\n const i = +prop;\n if (Number.isInteger(i) && i >= 0 && i < count) {\n let v = target[i];\n if (typeof v !== \"object\") {\n const s = flat[i * 2];\n v = target[i] = {\n index: i,\n key: v,\n start: s,\n size: flat[i * 2 + 1],\n end: s + flat[i * 2 + 1],\n lane: 0\n };\n }\n return v;\n }\n }\n if (prop === \"length\") return count;\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nexport {\n createLazyMeasurementsView,\n getMeasurementKey\n};\n//# sourceMappingURL=lazy-measurements.js.map\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a;\n const debugEnabled = process.env.NODE_ENV !== \"production\" && !!opts.key && !!((_a = opts.debug) == null ? void 0 : _a.call(opts));\n let depTime = 0;\n if (debugEnabled) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime = 0;\n if (debugEnabled) resultTime = Date.now();\n result = fn(...newDeps);\n if (debugEnabled) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return Object.assign(\n function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n },\n {\n // The handle is closure-local, so a caller that has already\n // unsubscribed has no way to stop a queued call. Teardown paths use\n // this to drop the pending invocation instead of letting it land.\n cancel: () => {\n targetWindow.clearTimeout(timeoutId);\n }\n }\n );\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { approxEqual } from \"./utils.js\";\nfunction classifyScrollEvent({\n offset,\n isScrolling,\n elementMax,\n holdOffset,\n scrollOffset,\n pendingWrite,\n clampedMaxAtWrite\n}) {\n var _a;\n if (isScrolling && pendingWrite === null && offset === scrollOffset) {\n return \"spurious\";\n }\n if (pendingWrite !== null && Math.abs(offset - pendingWrite.target) < 1.5) {\n return \"readBack\";\n }\n if (pendingWrite !== null && !pendingWrite.smooth && elementMax !== null && pendingWrite.target > elementMax + holdOffset + 0.5 && Math.abs(offset - (elementMax + holdOffset)) < 1.5) {\n return \"clampedReadBack\";\n }\n if (pendingWrite !== null && !pendingWrite.smooth && ((_a = pendingWrite.lowMaxes) == null ? void 0 : _a.some((max) => Math.abs(offset - max) < 1.5))) {\n return \"clampedReadBack\";\n }\n if (clampedMaxAtWrite !== null && Math.abs(offset - clampedMaxAtWrite) < 1.5) {\n return \"clampedEcho\";\n }\n return \"external\";\n}\nconst isAnimating = (phase) => phase === \"smooth\" || phase === \"smoothFinishing\";\nfunction externalRetiresCommand({\n kind,\n offset,\n command,\n target\n}) {\n return kind !== \"spurious\" && kind !== \"readBack\" && // Our own write, clamped (`clampedReadBack`, #1310): the command is not\n // retired by it, and reconcile retargets below the new max.\n kind !== \"clampedReadBack\" && (command == null ? void 0 : command.index) != null && // Nothing has been written for a command waiting for the tail; these\n // are the fling's events.\n command.phase !== \"queued\" && // A non-smooth write lands at once, so any other scroll event is the\n // user's, even before reconcile saw the target reached (the target may\n // keep moving, or iOS ignored the write under a finger). A write the\n // browser clamped because the sizer hasn't grown yet reads back at the\n // max, which is also where the fresh target clamps, so the check below\n // keeps it reconciling (#1294). While a smooth scroll's animation may\n // still report, its events look like a user's, so it yields only once it\n // has landed.\n !isAnimating(command.phase) && !approxEqual(offset, command.lastTargetOffset) && !approxEqual(offset, target()) && // A compensation write's clamped echo (#1258) keeps the command. The\n // order is deliberate, not tidiness: this clause stays after `target()`\n // (and `clampedReadBack` before it) because `target()` can rebuild the\n // measurements, so it must run for exactly the events it always did.\n kind !== \"clampedEcho\";\n}\nconst FLING_WINDOW_MS = 40;\nfunction flingSpedUp(samples) {\n const last = samples[samples.length - 1];\n if (last === void 0) return false;\n let j = samples.length - 2;\n while (j >= 0 && last.t - samples[j].t < FLING_WINDOW_MS) j--;\n if (j < 0) return false;\n const mid = samples[j];\n let k = j - 1;\n while (k >= 0 && mid.t - samples[k].t < FLING_WINDOW_MS) k--;\n if (k < 0) return false;\n const first = samples[k];\n const recent = (last.offset - mid.offset) / (last.t - mid.t);\n const before = (mid.offset - first.offset) / (mid.t - first.t);\n return recent * before >= 0 && Math.abs(recent) >= 2 * Math.abs(before) && Math.abs(recent) - Math.abs(before) >= 0.8;\n}\nfunction flingCaught(samples) {\n const last = samples[samples.length - 1];\n if (last === void 0) return false;\n let j = samples.length - 2;\n while (j >= 0 && last.t - samples[j].t < FLING_WINDOW_MS) j--;\n if (j < 0) return false;\n const from = samples[j];\n return Math.abs(last.offset - from.offset) / (last.t - from.t) >= 0.05;\n}\nexport {\n classifyScrollEvent,\n externalRetiresCommand,\n flingCaught,\n flingSpedUp\n};\n//# sourceMappingURL=scroll-classifier.js.map\n","let _isIOSResult;\nconst isIOSWebKit = () => {\n if (_isIOSResult !== void 0) return _isIOSResult;\n if (typeof navigator === \"undefined\") return _isIOSResult = false;\n if (/iP(hone|od|ad)/.test(navigator.userAgent)) return _isIOSResult = true;\n const mtp = navigator.maxTouchPoints;\n return _isIOSResult = navigator.platform === \"MacIntel\" && mtp !== void 0 && mtp > 0;\n};\nlet _iosMomentumOverridesWritesResult;\nconst iosMomentumOverridesWrites = () => {\n if (_iosMomentumOverridesWritesResult !== void 0) {\n return _iosMomentumOverridesWritesResult;\n }\n return _iosMomentumOverridesWritesResult = isIOSWebKit() && typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\" && CSS.supports(\"overflow-anchor: auto\");\n};\nconst momentumOverridesWrites = () => !isIOSWebKit() || iosMomentumOverridesWrites();\nconst _resetIOSDetectionForTests = () => {\n _isIOSResult = void 0;\n _iosMomentumOverridesWritesResult = void 0;\n};\nconst touchListenerOptions = {\n capture: true,\n passive: true\n};\nclass IosGesture {\n constructor(host) {\n this.host = host;\n this._touch = null;\n this.inMotion = () => this._touch !== null && this._touch.phase !== \"lateFling\";\n this.dragging = () => {\n var _a;\n return ((_a = this._touch) == null ? void 0 : _a.phase) === \"down\" && this._touch.moved;\n };\n this.tail = () => {\n var _a;\n return ((_a = this._touch) == null ? void 0 : _a.phase) === \"tail\" ? this._touch.moved ? \"fling\" : \"tap\" : null;\n };\n this.onScroll = ({\n isScrolling,\n ownReadBack,\n moved,\n external\n }) => {\n var _a, _b, _c;\n if (isScrolling && ((_a = this._touch) == null ? void 0 : _a.phase) === \"tail\") {\n this._openTail(this._touch.moved || !ownReadBack, false);\n } else if (((_b = this._touch) == null ? void 0 : _b.phase) === \"lateFling\") {\n if (this.host.now() > this._touch.until) {\n this._touch = null;\n } else if (external && isScrolling && moved) {\n this._openTail(true, false);\n }\n }\n if (!ownReadBack && isScrolling && moved && ((_c = this._touch) == null ? void 0 : _c.phase) === \"down\") {\n this._touch.moved = true;\n return true;\n }\n return false;\n };\n this.touchStart = () => {\n this.end();\n this._touch = { phase: \"down\", moved: false };\n };\n this.touchEnd = () => {\n var _a;\n const moved = ((_a = this._touch) == null ? void 0 : _a.phase) === \"down\" && this._touch.moved;\n this.end();\n this._openTail(moved, moved);\n };\n this.end = () => {\n var _a;\n const win = this.host.getWindow();\n if (((_a = this._touch) == null ? void 0 : _a.phase) === \"tail\" && win != null) {\n win.clearTimeout(this._touch.timerId);\n }\n this._touch = null;\n };\n this.listen = (target) => {\n const onTouchStart = () => this.touchStart();\n const onTouchEnd = () => this.touchEnd();\n target.addEventListener(\"touchstart\", onTouchStart, touchListenerOptions);\n target.addEventListener(\"touchend\", onTouchEnd, touchListenerOptions);\n target.addEventListener(\"touchcancel\", onTouchEnd, touchListenerOptions);\n return () => {\n target.removeEventListener(\n \"touchstart\",\n onTouchStart,\n touchListenerOptions\n );\n target.removeEventListener(\"touchend\", onTouchEnd, touchListenerOptions);\n target.removeEventListener(\n \"touchcancel\",\n onTouchEnd,\n touchListenerOptions\n );\n this.end();\n };\n };\n this._openTail = (moved, awaitingFling) => {\n const win = this.host.getWindow();\n if (win == null) return;\n this.end();\n const tail = {\n phase: \"tail\",\n moved,\n awaitingFling,\n // Only fires while this tail is current: `end` clears it otherwise.\n timerId: win.setTimeout(() => {\n if (this.host.tailStillMoving()) {\n this._openTail(tail.moved, tail.awaitingFling);\n return;\n }\n this._touch = tail.awaitingFling ? { phase: \"lateFling\", until: this.host.now() + 1e3 } : null;\n this.host.onTailClosed();\n }, 150)\n };\n this._touch = tail;\n };\n }\n get touch() {\n return this._touch;\n }\n}\nexport {\n IosGesture,\n _resetIOSDetectionForTests,\n iosMomentumOverridesWrites,\n isIOSWebKit,\n momentumOverridesWrites\n};\n//# sourceMappingURL=ios-gesture.js.map\n","import { createLazyMeasurementsView, getMeasurementKey } from \"./lazy-measurements.js\";\nimport { memo, approxEqual, notUndefined, debounce } from \"./utils.js\";\nimport { flingCaught, externalRetiresCommand, flingSpedUp, classifyScrollEvent } from \"./scroll-classifier.js\";\nimport { IosGesture, isIOSWebKit, momentumOverridesWrites } from \"./ios-gesture.js\";\nimport { _resetIOSDetectionForTests } from \"./ios-gesture.js\";\nconst getRect = (element) => {\n const { clientWidth, clientHeight } = element;\n return { width: clientWidth, height: clientHeight };\n};\nconst createFrameQueue = (targetWindow) => {\n const ids = /* @__PURE__ */ new Set();\n return {\n schedule: (fn) => {\n const id = targetWindow.requestAnimationFrame(() => {\n ids.delete(id);\n fn();\n });\n ids.add(id);\n },\n cancel: () => {\n ids.forEach((id) => targetWindow.cancelAnimationFrame(id));\n ids.clear();\n }\n };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const overscan = range.overscan * Math.max(range.lanes ?? 1, 1);\n const start = Math.max(range.startIndex - overscan, 0);\n const end = Math.min(range.endIndex + overscan, range.count - 1);\n const len = end - start + 1;\n const arr = new Array(len);\n for (let i = 0; i < len; i++) {\n arr[i] = start + i;\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const frames = createFrameQueue(targetWindow);\n const observer = new targetWindow.ResizeObserver(() => {\n const run = () => {\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? frames.schedule(run) : run();\n });\n observer.observe(element, { box: \"content-box\" });\n return () => {\n observer.unobserve(element);\n frames.cancel();\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeOffset = (instance, cb, readOffset) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n let offset = 0;\n const fallback = registerScrollendEvent ? null : debounce(\n targetWindow,\n () => cb(readOffset(element), false),\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = readOffset(element);\n fallback == null ? void 0 : fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n fallback == null ? void 0 : fallback.cancel();\n };\n};\nconst observeElementOffset = (instance, cb) => observeOffset(instance, cb, (el) => {\n const { horizontal, isRtl } = instance.options;\n return horizontal ? el.scrollLeft * (isRtl && -1 || 1) : el.scrollTop;\n});\nconst observeWindowOffset = (instance, cb) => observeOffset(\n instance,\n cb,\n (win) => instance.options.horizontal ? win.scrollX : win.scrollY\n);\nconst measureElement = (element, entry, instance) => {\n if (instance.options.useCachedMeasurements) {\n const index = instance.indexFromElement(element);\n const key = instance.options.getItemKey(index);\n return instance.itemSizeCache.get(key) ?? instance.options.estimateSize(index);\n }\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n if (!entry) {\n const index = instance.indexFromElement(element);\n const key = instance.options.getItemKey(index);\n const cachedSize = instance.itemSizeCache.get(key);\n if (cachedSize !== void 0) {\n return cachedSize;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst scrollWithAdjustments = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a;\n const { scrollElement, options } = instance;\n const adjustedOffset = offset + adjustments;\n const isRtlElement = options.horizontal && options.isRtl && scrollElement !== null && \"ownerDocument\" in scrollElement;\n (_a = scrollElement == null ? void 0 : scrollElement.scrollTo) == null ? void 0 : _a.call(scrollElement, {\n [options.horizontal ? \"left\" : \"top\"]: isRtlElement ? -adjustedOffset : adjustedOffset,\n behavior\n });\n};\nconst windowScroll = scrollWithAdjustments;\nconst elementScroll = scrollWithAdjustments;\nconst initialScrollPhase = (behavior, atTarget) => behavior === \"smooth\" ? atTarget ? \"smoothLanded\" : \"smooth\" : \"instant\";\nconst isSmoothScroll = (state) => (state == null ? void 0 : state.phase) === \"smooth\" || (state == null ? void 0 : state.phase) === \"smoothLanded\";\nfunction isAppendWithTrim(prevCount, nextCount, getPreviousKey, getNextKey) {\n if (nextCount === 0) return false;\n const firstKey = getNextKey(0);\n const removedKeys = /* @__PURE__ */ new Set();\n let removedCount = 0;\n while (removedCount < prevCount) {\n const key = getPreviousKey(removedCount);\n if (key === firstKey) break;\n removedKeys.add(key);\n removedCount++;\n }\n const retainedCount = prevCount - removedCount;\n if (retainedCount === 0 || retainedCount >= nextCount) return false;\n for (let i = 0; i < retainedCount; i++) {\n if (getNextKey(i) !== getPreviousKey(removedCount + i)) return false;\n }\n for (let i = retainedCount; i < nextCount; i++) {\n if (removedKeys.has(getNextKey(i))) return false;\n }\n return true;\n}\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.scrollState = null;\n this.measurementsCache = [];\n this._singleLaneMeasurements = null;\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.itemSizeCacheVersion = 0;\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMin = null;\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.pendingScrollAnchor = null;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this._holdOffset = 0;\n this._reportedOverscroll = false;\n this._iosGesture = new IosGesture({\n getWindow: () => this.targetWindow,\n now: () => this.now(),\n // The end of a fling can move less than a pixel per scroll event, so\n // events can stop for 150ms while the fling is still running (seen on\n // an iPhone, 27.0.1). A command waiting for it would then be written\n // into the fling and overridden. The element having moved since the\n // last event means it has not ended: wait again. Not while our own\n // write has yet to report: that moved it.\n tailStillMoving: () => {\n const state = this.scrollState;\n if ((state == null ? void 0 : state.phase) !== \"queued\" || this.pendingWrite !== null) {\n return false;\n }\n const now = this._readElementOffset();\n if (now === null || this._lastElementOffset === null || Math.abs(now - this._lastElementOffset) < 1) {\n return false;\n }\n this._lastElementOffset = now;\n state.samples = [...state.samples ?? [], { t: this.now(), offset: now }];\n return true;\n },\n onTailClosed: () => {\n const state = this.scrollState;\n if ((state == null ? void 0 : state.phase) === \"queued\" && flingCaught(state.samples ?? [])) {\n this.scrollState = null;\n }\n this._flushHoldIfReady(true);\n this._writeAwaitingCommand();\n this._retryClampedAdjustment();\n }\n });\n this._lastElementOffset = null;\n this.pendingWrite = null;\n this._clampedAdjustment = null;\n this.elementsCache = /* @__PURE__ */ new Map();\n this._resizeBatch = null;\n this.now = () => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();\n };\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n let _frames = null;\n let delivering = false;\n let observeQueued = false;\n const pendingObservations = /* @__PURE__ */ new Set();\n const get = () => {\n if (_ro) {\n return _ro;\n }\n const targetWindow = this.targetWindow;\n if (!targetWindow || !targetWindow.ResizeObserver) {\n return null;\n }\n const frames = _frames = createFrameQueue(targetWindow);\n return _ro = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const batch = { sync: false };\n this._resizeBatch = batch;\n try {\n entries.forEach(measureEntry);\n } finally {\n this._resizeBatch = null;\n if (batch.notify) {\n this.notify(batch.sync);\n this._noteClampMax();\n this._flushHoldIfReady(true);\n this._retryClampedAdjustment();\n this.measureElement(null);\n }\n }\n };\n if (this.options.useAnimationFrameWithResizeObserver) {\n frames.schedule(run);\n } else {\n delivering = true;\n try {\n run();\n } finally {\n delivering = false;\n }\n }\n });\n };\n const measureEntry = (entry) => {\n const node = entry.target;\n const index = this.indexFromElement(node);\n if (!node.isConnected) {\n this.observer.unobserve(node);\n for (const [cacheKey, cachedNode] of this.elementsCache) {\n if (cachedNode === node) {\n this.elementsCache.delete(cacheKey);\n break;\n }\n }\n return;\n }\n if (!this.isIndexInRange(index)) return;\n if (this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _frames == null ? void 0 : _frames.cancel();\n pendingObservations.clear();\n observeQueued = false;\n _ro = null;\n _frames = null;\n },\n observe: (target) => {\n const observer = get();\n if (!observer) return;\n if (!delivering) {\n observer.observe(target, { box: \"border-box\" });\n return;\n }\n pendingObservations.add(target);\n if (!observeQueued) {\n observeQueued = true;\n _frames == null ? void 0 : _frames.schedule(() => {\n observeQueued = false;\n pendingObservations.forEach((node) => {\n if (node.isConnected) _ro == null ? void 0 : _ro.observe(node, { box: \"border-box\" });\n });\n pendingObservations.clear();\n });\n }\n },\n unobserve: (target) => {\n var _a;\n pendingObservations.delete(target);\n (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n var _a;\n const merged = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n anchorTo: \"start\",\n followOnAppend: false,\n scrollEndThreshold: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n laneAssignmentMode: \"estimate\",\n useCachedMeasurements: false\n };\n for (const key in opts2) {\n const v = opts2[key];\n if (v !== void 0) merged[key] = v;\n }\n const prevOptions = this.options;\n let anchor = null;\n let followOnAppend = null;\n let edgeKeysChanged = false;\n if (prevOptions !== void 0 && prevOptions.enabled && merged.enabled && merged.anchorTo === \"end\" && this.scrollElement !== null) {\n const prevCount = prevOptions.count;\n const nextCount = merged.count;\n const measurements = this.getMeasurements();\n const previousItems = ((_a = this._singleLaneMeasurements) == null ? void 0 : _a.items) ?? measurements;\n const getPreviousKey = (index) => getMeasurementKey(previousItems[index]);\n const prevFirstKey = prevCount > 0 ? getPreviousKey(0) : null;\n const prevLastKey = prevCount > 0 ? getPreviousKey(prevCount - 1) : null;\n const didCountChange = nextCount !== prevCount;\n const didEdgeKeysChange = didCountChange || prevCount > 0 && nextCount > 0 && (merged.getItemKey(0) !== prevFirstKey || merged.getItemKey(nextCount - 1) !== prevLastKey);\n if (didEdgeKeysChange) {\n edgeKeysChanged = true;\n const item = prevCount > 0 ? this.getVirtualItemForOffset(this.getScrollOffset()) ?? measurements[0] : null;\n if (item) {\n anchor = [item.key, this.getScrollOffset() - item.start];\n }\n const behavior = merged.followOnAppend === true ? \"auto\" : merged.followOnAppend || null;\n if (behavior && nextCount > 0 && this.isAtEnd(prevOptions.scrollEndThreshold) && (prevCount === 0 || merged.getItemKey(nextCount - 1) !== prevLastKey)) {\n if (nextCount > prevCount || isAppendWithTrim(\n prevCount,\n nextCount,\n getPreviousKey,\n merged.getItemKey\n )) {\n followOnAppend = behavior;\n }\n }\n }\n }\n this.options = merged;\n if (edgeKeysChanged) {\n this.pendingMin = 0;\n this.itemSizeCacheVersion++;\n }\n let anchorDelta = null;\n if (anchor && this.scrollOffset !== null && !this._awaitingCommandReadBack()) {\n const [anchorKey, anchorOffset] = anchor;\n const newMeasurements = this.getMeasurements();\n const { count, getItemKey } = this.options;\n let idx = 0;\n while (idx < count && getItemKey(idx) !== anchorKey) {\n idx++;\n }\n if (idx < count) {\n const anchorItem = newMeasurements[idx];\n if (anchorItem) {\n const newOffset = Math.max(0, anchorItem.start + anchorOffset);\n if (!followOnAppend && newOffset !== this.scrollOffset) {\n anchorDelta = newOffset - this.scrollOffset;\n this.scrollOffset = newOffset;\n }\n }\n }\n }\n if (followOnAppend) {\n this.pendingScrollAnchor = { kind: \"follow\", behavior: followOnAppend };\n } else if (anchorDelta !== null) {\n if (this._canWriteScroll()) {\n this.pendingScrollAnchor = { kind: \"anchor\", delta: anchorDelta };\n } else {\n this._holdOffset += anchorDelta;\n this._followOffsetTarget(anchorDelta);\n }\n }\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n var _a;\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n (_a = this._momentumStop) == null ? void 0 : _a.restore();\n this._momentumStop = null;\n this.isScrolling = false;\n this.scrollDirection = null;\n this._holdOffset = 0;\n this._reportedOverscroll = false;\n this._clampedAdjustment = null;\n this.pendingWrite = null;\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n var _a2, _b, _c, _d;\n const elementMax = isScrolling ? this._elementMaxScrollOffset() : null;\n const wasOverscrolled = this._reportedOverscroll;\n this._reportedOverscroll = offset < 0 || elementMax !== null && offset > elementMax + 1;\n const elementOffset = offset;\n this._lastElementOffset = elementOffset;\n offset = this._toLayoutOffset(offset);\n const kind = this._classifyScrollEvent(\n offset,\n isScrolling,\n elementMax\n );\n if (kind === \"spurious\") return;\n if (kind === \"readBack\") {\n offset = this.pendingWrite.target;\n } else if (kind === \"clampedReadBack\" && ((_a2 = this.scrollState) == null ? void 0 : _a2.index) != null && // Not `elementMax`: an adapter can report the read-back at rest.\n offset < this.getMaxScrollOffset() - 1.5) {\n this.scrollState.lastTargetOffset = offset;\n } else if (externalRetiresCommand({\n kind,\n offset,\n command: this.scrollState,\n target: () => this.getScrollStateTarget(this.scrollState)\n })) {\n this.scrollState = null;\n }\n this.pendingWrite = null;\n if (this._clampedAdjustment !== null && Math.abs(offset - this._clampedAdjustment.maxAtWrite) >= 1.5) {\n this._clampedAdjustment = null;\n }\n const prevOffset = this.getScrollOffset();\n const prevDirection = this.scrollDirection;\n this.scrollDirection = isScrolling ? prevOffset === offset ? this.scrollDirection : prevOffset < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n const queued = this.scrollState;\n if ((queued == null ? void 0 : queued.phase) === \"queued\" && kind === \"external\" && isScrolling) {\n if (wasOverscrolled || this._reportedOverscroll) {\n queued.samples = [];\n } else {\n const t = this.now();\n queued.samples = [\n ...(queued.samples ?? []).filter(\n (sample) => t - sample.t <= 200\n ),\n { t, offset: elementOffset }\n ];\n if (prevDirection !== null && this.scrollDirection !== prevDirection || flingSpedUp(queued.samples)) {\n this.scrollState = null;\n }\n }\n }\n if (this._iosGesture.onScroll({\n isScrolling,\n ownReadBack: kind === \"readBack\",\n moved: offset !== prevOffset,\n // Neither our write's read-back nor a frame of our smooth\n // animation: the user or a fling moved it.\n external: kind === \"external\" && ((_b = this.scrollState) == null ? void 0 : _b.phase) !== \"smooth\" && ((_c = this.scrollState) == null ? void 0 : _c.phase) !== \"smoothFinishing\"\n }) && // The user scrolls: a command still waiting for the tail is\n // theirs to override, like a written one would be.\n ((_d = this.scrollState) == null ? void 0 : _d.phase) === \"queued\") {\n this.scrollState = null;\n }\n this._flushHoldIfReady(true);\n if (this.scrollState) {\n this.scheduleScrollReconcile();\n }\n this.maybeNotify();\n })\n );\n if (\"addEventListener\" in this.scrollElement) {\n this.unsubs.push(\n this._iosGesture.listen(this.scrollElement)\n );\n }\n this._scrollToOffset(this.getScrollOffset());\n }\n this._noteClampMax();\n const anchor = this.pendingScrollAnchor;\n this.pendingScrollAnchor = null;\n if (anchor && this.scrollElement && this.options.enabled) {\n if (anchor.kind === \"anchor\") {\n if (!this._canWriteScroll()) {\n this._holdOffset += anchor.delta;\n this._followOffsetTarget(anchor.delta);\n this.notify(false);\n } else if (isSmoothScroll(this.scrollState) && !approxEqual(\n this.getScrollOffset() - anchor.delta,\n this.scrollState.lastTargetOffset\n )) ;\n else {\n this._followOffsetTarget(anchor.delta);\n this._scrollToOffset(this.getScrollOffset());\n }\n } else {\n this.scrollToEnd({ behavior: anchor.behavior });\n }\n }\n this._flushHoldIfReady(false);\n this._retryClampedAdjustment();\n };\n this._classifyScrollEvent = (offset, isScrolling, elementMax) => {\n var _a;\n return classifyScrollEvent({\n offset,\n isScrolling,\n elementMax,\n holdOffset: this._holdOffset,\n scrollOffset: this.scrollOffset,\n pendingWrite: this.pendingWrite,\n clampedMaxAtWrite: ((_a = this._clampedAdjustment) == null ? void 0 : _a.maxAtWrite) ?? null\n });\n };\n this._retryClampedAdjustment = () => {\n if (this._clampedAdjustment === null || !this.scrollElement || !this.options.enabled || !this._canWriteScroll()) {\n return;\n }\n const { target, maxAtWrite } = this._clampedAdjustment;\n const max = this.getMaxScrollOffset();\n if (max > maxAtWrite + 0.5) {\n this._clampedAdjustment = target > max + 0.5 ? { target, maxAtWrite: max } : null;\n this._scrollToOffset(target);\n }\n };\n this._writeAwaitingCommand = () => {\n const state = this.scrollState;\n if (state === null || state.phase !== \"queued\") return;\n const { behavior } = state;\n this.getMeasurements();\n const offset = this.getScrollStateTarget(state);\n state.lastTargetOffset = offset;\n this._clampedAdjustment = null;\n state.phase = initialScrollPhase(\n behavior,\n state.index != null && approxEqual(offset, this.getScrollOffset())\n );\n this._scrollToOffset(offset, { behavior });\n this.scheduleScrollReconcile();\n };\n this._readElementOffset = () => {\n const el = this.scrollElement;\n if (el == null) return null;\n const { horizontal, isRtl } = this.options;\n if (typeof el.scrollTop === \"number\") {\n return horizontal ? el.scrollLeft * (isRtl && -1 || 1) : el.scrollTop;\n }\n if (typeof el.scrollY === \"number\") {\n return horizontal ? el.scrollX : el.scrollY;\n }\n return null;\n };\n this._canWriteScroll = () => !(isIOSWebKit() && this._iosGesture.inMotion()) && !this._reportedOverscroll;\n this._flushHoldIfReady = (sync) => {\n var _a;\n if (this._holdOffset === 0) return;\n if (!this.scrollElement || !this.options.enabled) return;\n if (!this._canWriteScroll()) return;\n if (((_a = this.scrollState) == null ? void 0 : _a.phase) === \"smooth\") return;\n this._holdOffset = 0;\n if (this.scrollOffset !== null && this.scrollOffset < 0) {\n this.scrollOffset = 0;\n }\n this.notify(sync);\n const target = this.getCommandWrittenOffset() ?? this.getScrollOffset();\n this._clampedAdjustment = this._clampedBy(target);\n this._scrollToOffset(target);\n };\n this.rafId = null;\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes,\n this.options.laneAssignmentMode,\n this.options.gap\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode, gap) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMin = null;\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap\n };\n },\n {\n key: false\n }\n );\n this.isIndexInRange = (index) => index >= 0 && index < this.options.count;\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCacheVersion],\n ({\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap\n }, _itemSizeCacheVersion) => {\n var _a;\n const itemSizeCache = this.itemSizeCache;\n if (!enabled) {\n this.measurementsCache = [];\n this._singleLaneMeasurements = null;\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this._singleLaneMeasurements = null;\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMin = null;\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMin ?? 0;\n this.pendingMin = null;\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n if (lanes === 1) {\n const need = count * 2;\n let flat = (_a = this._singleLaneMeasurements) == null ? void 0 : _a.flat;\n if (!flat || flat.length < need) {\n const next = new Float64Array(need);\n if (flat && min > 0) next.set(flat.subarray(0, min * 2));\n flat = next;\n }\n const items = min === 0 ? new Array(count) : this._singleLaneMeasurements.items.slice();\n let runningStart;\n if (min === 0) {\n runningStart = paddingStart + scrollMargin;\n } else {\n const prevIdx = min - 1;\n runningStart = flat[prevIdx * 2] + flat[prevIdx * 2 + 1] + gap;\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n items[i] = key;\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n flat[i * 2] = runningStart;\n flat[i * 2 + 1] = size;\n runningStart += size + gap;\n }\n this._singleLaneMeasurements = { flat, items };\n const view = createLazyMeasurementsView(items, flat);\n this.measurementsCache = view;\n return view;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n const laneEnds = new Float64Array(lanes);\n let filledLanes = 0;\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n if (laneLastIndex[item.lane] === void 0) filledLanes++;\n laneLastIndex[item.lane] = m;\n laneEnds[item.lane] = item.end;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n const shouldCacheLane = laneAssignmentMode === \"estimate\" || itemSizeCache.has(key);\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + gap : paddingStart + scrollMargin;\n } else if (filledLanes === lanes) {\n let bestLane = 0;\n let bestEnd = laneEnds[0];\n let bestIdx = laneLastIndex[0];\n for (let l = 1; l < lanes; l++) {\n const e = laneEnds[l];\n if (e < bestEnd || e === bestEnd && laneLastIndex[l] < bestIdx) {\n bestLane = l;\n bestEnd = e;\n bestIdx = laneLastIndex[l];\n }\n }\n lane = bestLane;\n start = bestEnd + gap;\n if (shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n } else {\n lane = i % this.options.lanes;\n start = paddingStart + scrollMargin;\n if (shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n if (laneLastIndex[lane] === void 0) filledLanes++;\n laneLastIndex[lane] = i;\n laneEnds[lane] = end;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes,\n // scrollOffset is measured in the scroll element and the layout total\n // from the list start, so the list ends scrollMargin further down.\n this._getLayoutTotalSize() + this.options.scrollMargin\n ],\n (measurements, outerSize, scrollOffset, lanes, listEnd) => {\n if (measurements.length === 0 || outerSize === 0) {\n this.range = null;\n return null;\n }\n const maxScrollOffset = Math.max(listEnd - outerSize, 0);\n this.range = calculateRangeImpl(\n measurements,\n outerSize,\n Math.min(scrollOffset, maxScrollOffset),\n lanes,\n // Pass the typed array so binary search + forward-walk can read\n // start/end directly from Float64Array, skipping the Proxy traps.\n lanes === 1 && this._singleLaneMeasurements !== null ? this._singleLaneMeasurements.flat : null\n );\n return this.range;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex,\n this.options.lanes\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex, lanes) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count,\n lanes\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this.shouldMeasureDuringScroll = (index) => {\n var _a;\n if (!isSmoothScroll(this.scrollState)) {\n return true;\n }\n const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);\n if (scrollIndex !== void 0 && this.range) {\n const bufferSize = Math.max(\n this.options.overscan,\n Math.ceil((this.range.endIndex - this.range.startIndex) / 2)\n );\n const minIndex = Math.max(0, scrollIndex - bufferSize);\n const maxIndex = Math.min(\n this.options.count - 1,\n scrollIndex + bufferSize\n );\n return index >= minIndex && index <= maxIndex;\n }\n return true;\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key2) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key2);\n }\n });\n return;\n }\n const index = this.indexFromElement(node);\n if (!this.isIndexInRange(index)) return;\n const key = this.options.getItemKey(index);\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected && (!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, void 0, this));\n }\n };\n this.resizeItem = (index, size) => {\n var _a, _b, _c;\n if (!this.isIndexInRange(index)) return;\n if ((_a = this._resizeBatch) == null ? void 0 : _a.sync) this.getMeasurements();\n let cachedSize;\n let itemStart;\n let key;\n const flat = (_b = this._singleLaneMeasurements) == null ? void 0 : _b.flat;\n if (this.options.lanes === 1 && flat != null) {\n key = this.options.getItemKey(index);\n itemStart = flat[index * 2];\n cachedSize = flat[index * 2 + 1];\n } else {\n const item = this.measurementsCache[index];\n if (!item) return;\n key = item.key;\n itemStart = item.start;\n cachedSize = item.size;\n }\n const itemSize = this.itemSizeCache.get(key) ?? cachedSize;\n const delta = size - itemSize;\n if (delta !== 0) {\n const wasAtEnd = this.options.anchorTo === \"end\" && !isSmoothScroll(this.scrollState) && this.getVirtualDistanceFromEnd() <= this.options.scrollEndThreshold;\n const prevTotalSize = wasAtEnd ? this._getLayoutTotalSize() : 0;\n const scrollOffset = this.getScrollOffset();\n const isFirstMeasure = !this.itemSizeCache.has(key);\n const defaultShouldAdjust = isFirstMeasure ? (\n // First measurement: compensate any item whose top sits above the\n // fold — the estimate→actual delta must be corrected regardless of\n // scroll direction, since the whole estimated block was above it.\n itemStart < scrollOffset\n ) : (\n // Re-measurement: only compensate an item that is ENTIRELY above the\n // fold. An item that merely *spans* the fold (top above, bottom\n // below — e.g. a streaming chat message growing at its bottom)\n // changes size *below* the anchor point, so shifting scrollTop by the\n // delta would drag the viewport downward on every growth (#1218).\n // Also skip during backward scroll to avoid the \"items jump while\n // scrolling up\" cascade.\n itemStart + itemSize <= scrollOffset && this.scrollDirection !== \"backward\"\n );\n const shouldAdjustScroll = !isSmoothScroll(this.scrollState) && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(\n // The callback expects a VirtualItem; build one lazily only\n // when the consumer actually supplied a custom predicate.\n this.measurementsCache[index] ?? {\n index,\n key,\n start: itemStart,\n size: cachedSize,\n end: itemStart + cachedSize,\n lane: 0\n },\n delta,\n this\n ) : defaultShouldAdjust);\n if (this.pendingMin === null || index < this.pendingMin) {\n this.pendingMin = index;\n }\n this.itemSizeCache.set(key, size);\n this.itemSizeCacheVersion++;\n let adjustedSync = false;\n if (!this._awaitingCommandReadBack()) {\n if (wasAtEnd) {\n adjustedSync = this.applyScrollAdjustment(\n this._getLayoutTotalSize() - prevTotalSize\n );\n } else if (shouldAdjustScroll) {\n adjustedSync = this.applyScrollAdjustment(delta);\n }\n }\n if (this._resizeBatch) {\n this._resizeBatch.notify = true;\n (_c = this._resizeBatch).sync || (_c.sync = adjustedSync);\n return;\n }\n this.notify(adjustedSync);\n this._noteClampMax();\n this._flushHoldIfReady(true);\n this._retryClampedAdjustment();\n }\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements(), this._holdOffset],\n (indexes, measurements, hold) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(\n hold === 0 ? measurement : {\n ...measurement,\n start: measurement.start - hold,\n end: measurement.end - hold\n }\n );\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n var _a;\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n const flat = (_a = this._singleLaneMeasurements) == null ? void 0 : _a.flat;\n const useFlat = this.options.lanes === 1 && flat != null;\n const idx = findNearestBinarySearch(\n 0,\n measurements.length - 1,\n useFlat ? (i) => flat[i * 2] : (i) => notUndefined(measurements[i]).start,\n offset\n );\n return notUndefined(measurements[idx]);\n };\n this._noteClampMax = () => {\n if (!this._awaitingCommandReadBack()) return;\n const elementMax = this._elementMaxScrollOffset();\n if (elementMax === null) return;\n const write = this.pendingWrite;\n const max = Math.max(elementMax, 0) + this._holdOffset;\n if (max >= write.target) return;\n const lowMaxes = write.lowMaxes ?? (write.lowMaxes = []);\n if (lowMaxes[lowMaxes.length - 1] !== max) lowMaxes.push(max);\n };\n this.getMaxScrollOffset = () => (this._elementMaxScrollOffset() ?? 0) + this._holdOffset;\n this._toLayoutOffset = (elementOffset) => {\n var _a;\n let offset = elementOffset + this._holdOffset;\n if (((_a = this.pendingScrollAnchor) == null ? void 0 : _a.kind) === \"anchor\") {\n offset += this.pendingScrollAnchor.delta;\n }\n return offset;\n };\n this._elementMaxScrollOffset = () => {\n const el = this.scrollElement;\n if (el === null) return null;\n if (\"scrollHeight\" in el) {\n return this.options.horizontal ? el.scrollWidth - el.clientWidth : el.scrollHeight - el.clientHeight;\n }\n if (\"document\" in el) {\n const doc = el.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - el.innerWidth : doc.scrollHeight - el.innerHeight;\n }\n return null;\n };\n this._momentumStop = null;\n this._stopMomentum = (done) => {\n const el = this.scrollElement;\n const win = this.targetWindow;\n if (el === null || win === null) return;\n const scroller = \"document\" in el ? el.document.scrollingElement : el;\n if (!(scroller == null ? void 0 : scroller.style)) return;\n if (this._momentumStop) {\n this._momentumStop.done = done;\n return;\n }\n const { style } = scroller;\n const property = this.options.horizontal ? \"overflow-x\" : \"overflow-y\";\n const value = style.getPropertyValue(property);\n const priority = style.getPropertyPriority(property);\n const crossSize = () => this.options.horizontal ? scroller.clientHeight : scroller.clientWidth;\n const crossSizeBefore = crossSize();\n style.setProperty(property, \"hidden\", \"important\");\n if (crossSize() !== crossSizeBefore) {\n style.setProperty(property, value, priority);\n return;\n }\n const stop = {\n // False when the app replaced the hidden value: the fling may not\n // have stopped.\n restore: () => {\n if (style.getPropertyValue(property) !== \"hidden\" || style.getPropertyPriority(property) !== \"important\") {\n return false;\n }\n style.setProperty(property, value, priority);\n return true;\n },\n done\n };\n this._momentumStop = stop;\n win.requestAnimationFrame(\n () => win.requestAnimationFrame(() => {\n if (this._momentumStop !== stop) return;\n this._momentumStop = null;\n if (stop.restore()) stop.done();\n })\n );\n };\n this._clampedBy = (target) => {\n const elementMax = this._elementMaxScrollOffset();\n if (elementMax === null) return null;\n const maxAtWrite = elementMax + this._holdOffset;\n return target > maxAtWrite + 0.5 ? { target, maxAtWrite } : null;\n };\n this.getVirtualDistanceFromEnd = () => {\n return Math.max(\n this._getLayoutTotalSize() + this.options.scrollMargin - this.getSize() - this.getScrollOffset(),\n 0\n );\n };\n this.getDistanceFromEnd = () => {\n return Math.max(this.getMaxScrollOffset() - this.getScrollOffset(), 0);\n };\n this.isAtEnd = (threshold = this.options.scrollEndThreshold) => {\n return this.getDistanceFromEnd() <= threshold;\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n const item = this.getMeasurements()[index];\n if (!item) return;\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n const maxOffset = this.getMaxScrollOffset();\n const toOffset2 = maxOffset - this.options.paddingEnd + this.options.scrollPaddingEnd;\n return [Math.max(Math.min(toOffset2, maxOffset), 0), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.scrollToOffset = (toOffset, { align = \"start\", behavior = \"auto\" } = {}) => {\n this._startScroll(\n { index: null, align },\n this.getOffsetForAlignment(toOffset, align),\n behavior,\n \"absolute\"\n );\n };\n this.scrollToIndex = (index, {\n align: initialAlign = \"auto\",\n behavior = \"auto\"\n } = {}) => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const offsetInfo = this.getOffsetForIndex(index, initialAlign);\n if (!offsetInfo) return;\n const [offset, align] = offsetInfo;\n this._startScroll({ index, align }, offset, behavior, \"absolute\");\n };\n this.scrollBy = (delta, { behavior = \"auto\" } = {}) => {\n const offset = this.getOffsetForAlignment(\n (this.getCommandWrittenOffset() ?? this.getScrollOffset()) + delta,\n \"start\"\n );\n this._startScroll(\n { index: null, align: \"start\" },\n offset,\n behavior,\n \"relative\"\n );\n };\n this.scrollToEnd = ({ behavior = \"auto\" } = {}) => {\n if (this.options.count > 0) {\n this._startScroll(\n { index: this.options.count - 1, align: \"end\", toEnd: true },\n Math.max(this.getMaxScrollOffset(), 0),\n behavior,\n \"absolute\"\n );\n return;\n }\n this.scrollToOffset(Math.max(this.getTotalSize() - this.getSize(), 0), {\n behavior\n });\n };\n this.cancelScroll = () => {\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n };\n this.getTotalSize = () => Math.max(this._getLayoutTotalSize() - this._holdOffset, 0);\n this._getLayoutTotalSize = () => {\n var _a, _b;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n const lastIdx = measurements.length - 1;\n const flat = (_a = this._singleLaneMeasurements) == null ? void 0 : _a.flat;\n if (flat != null) {\n end = flat[lastIdx * 2] + flat[lastIdx * 2 + 1];\n } else {\n end = ((_b = measurements[lastIdx]) == null ? void 0 : _b.end) ?? 0;\n }\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this.takeSnapshot = () => {\n const snapshot = [];\n if (this.itemSizeCache.size === 0) return snapshot;\n const m = this.getMeasurements();\n for (const item of m) {\n if (item && this.itemSizeCache.has(item.key)) {\n snapshot.push({\n index: item.index,\n key: item.key,\n start: item.start,\n size: item.size,\n end: item.end,\n lane: item.lane\n });\n }\n }\n return snapshot;\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n } = {}) => {\n const write = {\n target: offset + (adjustments ?? 0),\n smooth: behavior === \"smooth\"\n };\n this.pendingWrite = write;\n this.options.scrollToFn(\n offset - this._holdOffset,\n { behavior, adjustments },\n this\n );\n return write;\n };\n this.getCommandWrittenOffset = () => this.scrollState !== null && this.pendingWrite !== null && !this.pendingWrite.smooth ? this.pendingWrite.target : null;\n this._awaitingCommandReadBack = () => {\n const writtenOffset = this.getCommandWrittenOffset();\n return !(isIOSWebKit() && this._iosGesture.dragging()) && writtenOffset !== null && !approxEqual(writtenOffset, this.getScrollOffset());\n };\n this._followOffsetTarget = (delta) => {\n if (this.scrollState !== null && this.scrollState.index == null) {\n this.scrollState.lastTargetOffset += delta;\n }\n };\n this.measure = () => {\n this.pendingMin = null;\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.itemSizeCacheVersion++;\n this.notify(false);\n };\n this.setOptions(opts);\n }\n /**\n * @deprecated Always 0: a scroll correction is folded into `scrollOffset`\n * at once, so there is never an outstanding adjustment to add to it. Read\n * `scrollOffset` alone.\n */\n get scrollAdjustments() {\n return 0;\n }\n // Returns `true` when it performed a synchronous `scrollTop` write this\n // tick, `false` when the delta was zero or the write was deferred (iOS).\n // `resizeItem` uses that to decide whether the follow-up `notify` must be\n // synchronous so the grown transforms commit in the same paint (#1227).\n applyScrollAdjustment(delta, behavior) {\n if (delta === 0) return false;\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._followOffsetTarget(delta);\n if (!this._canWriteScroll()) {\n this._holdOffset += delta;\n if (this.scrollOffset !== null) this.scrollOffset += delta;\n return true;\n } else {\n const offset = this.getScrollOffset();\n this._clampedAdjustment = this._clampedBy(offset + delta);\n const write = this._scrollToOffset(offset, {\n adjustments: delta,\n behavior\n });\n if (this.scrollOffset !== null) {\n if (this.pendingWrite === write) this.scrollOffset += delta;\n if (this.scrollOffset < 0) this.scrollOffset = 0;\n }\n return true;\n }\n }\n scheduleScrollReconcile() {\n if (!this.targetWindow) {\n this.scrollState = null;\n return;\n }\n if (this.rafId != null) return;\n this.rafId = this.targetWindow.requestAnimationFrame(() => {\n this.rafId = null;\n this.reconcileScroll();\n });\n }\n getScrollStateTarget(state) {\n const offsetInfo = state.toEnd ? [Math.max(this.getMaxScrollOffset(), 0)] : state.index != null ? this.getOffsetForIndex(state.index, state.align) : void 0;\n return offsetInfo ? offsetInfo[0] : state.lastTargetOffset;\n }\n reconcileScroll() {\n if (!this.scrollState) return;\n const el = this.scrollElement;\n if (!el) return;\n const MAX_RECONCILE_MS = 5e3;\n if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {\n this.scrollState = null;\n return;\n }\n if (this.scrollState.phase === \"queued\") {\n this.scheduleScrollReconcile();\n return;\n }\n this.getMeasurements();\n const targetOffset = this.getScrollStateTarget(this.scrollState);\n const STABLE_FRAMES = this.scrollState.index == null ? 1 : this.options.useAnimationFrameWithResizeObserver ? 3 : 2;\n const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;\n if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {\n if (this.scrollState.phase === \"smooth\") {\n this.scrollState.phase = \"smoothLanded\";\n } else if (this.scrollState.phase === \"smoothFinishing\") {\n this.scrollState.phase = \"instant\";\n }\n this.scrollState.stableFrames++;\n if (this.scrollState.stableFrames >= STABLE_FRAMES) {\n if (this.getScrollOffset() !== targetOffset) {\n this._scrollToOffset(targetOffset, { behavior: \"auto\" });\n }\n this.scrollState = null;\n return;\n }\n } else {\n this.scrollState.stableFrames = 0;\n if (targetChanged) {\n const viewport = this.getSize() || 600;\n const distance = Math.abs(targetOffset - this.getScrollOffset());\n const keepSmooth = isSmoothScroll(this.scrollState) && distance > viewport;\n this.scrollState.lastTargetOffset = targetOffset;\n if (keepSmooth) {\n this.scrollState.phase = \"smooth\";\n } else if (this.scrollState.phase === \"smooth\") {\n this.scrollState.phase = \"smoothFinishing\";\n } else if (this.scrollState.phase === \"smoothLanded\") {\n this.scrollState.phase = \"instant\";\n }\n this._scrollToOffset(targetOffset, {\n behavior: keepSmooth ? \"smooth\" : \"auto\"\n });\n }\n }\n this.scheduleScrollReconcile();\n }\n // Every scroll command starts here: it becomes the in-flight command,\n // writes its first target and leaves reconcile to retarget and retire it.\n //\n // Targets are layout offsets. A held correction is not dropped by a\n // command: the write lands the element `_holdOffset` short of the target,\n // under the rows exposed shifted by the same amount, and the flush moves\n // both together once a write is possible.\n //\n // An index or end target that is already at its offset starts a smooth\n // scroll as landed; an offset target never does, so its first scroll\n // event is read as the user's (see the scroll handler in `_willUpdate`).\n _startScroll(target, offset, behavior, kind) {\n this.pendingScrollAnchor = null;\n this._clampedAdjustment = null;\n const tail = this._iosGesture.tail();\n if (kind === \"absolute\" && tail !== null) {\n if (tail === \"fling\" && momentumOverridesWrites()) {\n this._stopMomentum(() => {\n const state = this.scrollState;\n if ((state == null ? void 0 : state.phase) !== \"queued\" || // A finger came down: it owns the scroll until it lifts.\n this._iosGesture.tail() !== \"fling\" || // In a bounce WebKit can drop the write (#1287): the tail\n // decides, as without the stop. (Not `flingCaught`: our stop\n // also ends the fling at speed, so a slow frame would read as\n // a catch and the tail would drop the command.)\n this._reportedOverscroll) {\n return;\n }\n this._iosGesture.end();\n this._flushHoldIfReady(true);\n this._writeAwaitingCommand();\n });\n this.scrollState = {\n ...target,\n startedAt: this.now(),\n lastTargetOffset: offset,\n stableFrames: 0,\n phase: \"queued\",\n behavior,\n samples: []\n };\n this.scheduleScrollReconcile();\n return;\n }\n this._iosGesture.end();\n }\n this.scrollState = {\n ...target,\n startedAt: this.now(),\n lastTargetOffset: offset,\n stableFrames: 0,\n behavior,\n phase: initialScrollPhase(\n behavior,\n target.index != null && approxEqual(offset, this.getScrollOffset())\n )\n };\n this._scrollToOffset(offset, { behavior });\n this.scheduleScrollReconcile();\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction findNearestBinarySearchFlat(flat, high, value) {\n let low = 0;\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = flat[middle * 2];\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n return low > 0 ? low - 1 : 0;\n}\nfunction calculateRangeImpl(measurements, outerSize, scrollOffset, lanes, flat) {\n const lastIndex = measurements.length - 1;\n if (measurements.length <= lanes) {\n return { startIndex: 0, endIndex: lastIndex };\n }\n if (lanes === 1 && flat !== null) {\n const startIndex2 = findNearestBinarySearchFlat(\n flat,\n lastIndex,\n scrollOffset\n );\n let endIndex2 = startIndex2;\n const limit = scrollOffset + outerSize;\n while (endIndex2 < lastIndex && flat[endIndex2 * 2] + flat[endIndex2 * 2 + 1] < limit) {\n endIndex2++;\n }\n return { startIndex: startIndex2, endIndex: endIndex2 };\n }\n const getStart = (index) => measurements[index].start;\n let startIndex = findNearestBinarySearch(0, lastIndex, getStart, scrollOffset);\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n _resetIOSDetectionForTests,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect, Virtualizer } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nclass VirtualizerControllerBase {\n constructor(host, options) {\n this.cleanup = () => {\n };\n this.host = host;\n this.options = { ...options };\n this.virtualizer = new Virtualizer(this.resolveOptions(this.options));\n this.host.addController(this);\n }\n getVirtualizer() {\n return this.virtualizer;\n }\n /**\n * Merge a partial options update into the options this controller already\n * holds, push them to the virtualizer, and request a host update. Lit folds\n * a request made from `willUpdate` into the update already in progress.\n *\n * Keys set to `undefined` are ignored, matching core `setOptions`, so a\n * partial update cannot wipe an option stored earlier. Defaults supplied by\n * `VirtualizerController` / `WindowVirtualizerController` stay in place\n * unless a later call replaces them.\n */\n setOptions(options) {\n if (!this.applyOptions(options)) return;\n this.virtualizer.setOptions(this.resolveOptions(this.options));\n this.virtualizer._willUpdate();\n this.host.requestUpdate();\n }\n hostConnected() {\n this.cleanup = this.virtualizer._didMount();\n this.virtualizer._willUpdate();\n this.host.requestUpdate();\n }\n hostUpdated() {\n this.virtualizer._willUpdate();\n }\n hostDisconnected() {\n this.cleanup();\n }\n applyOptions(partial) {\n const next = {\n ...this.options\n };\n let changed = false;\n for (const key in partial) {\n if (!Object.prototype.hasOwnProperty.call(partial, key)) continue;\n const value = partial[key];\n if (value === void 0) continue;\n if (!Object.is(next[key], value)) {\n changed = true;\n Object.assign(next, { [key]: value });\n }\n }\n if (changed) this.options = next;\n return changed;\n }\n resolveOptions(options) {\n return {\n ...options,\n onChange: (instance, sync) => {\n var _a;\n this.host.updateComplete.then(() => this.host.requestUpdate());\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance, sync);\n }\n };\n }\n}\nclass VirtualizerController extends VirtualizerControllerBase {\n constructor(host, options) {\n super(host, {\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n }\n}\nclass WindowVirtualizerController extends VirtualizerControllerBase {\n constructor(host, options) {\n super(host, {\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n }\n}\nexport {\n VirtualizerController,\n WindowVirtualizerController\n};\n//# sourceMappingURL=index.js.map\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { VirtualizerController } from '@tanstack/lit-virtual';\nimport { RowPool, ScrollScale } from '@argus-table/core';\n\n/** A rendered body row: its pool slot, its index in the row model and its offset. */\nexport interface WindowRow {\n slot: number;\n index: number;\n /** Offset in the rendered body, in px (scaled bodies: relative to the scroll position). */\n start: number;\n}\n\nexport interface VirtualWindow {\n /** Rendered rows, in pool order (ADR 0001 addendum). */\n rows: WindowRow[];\n /** Rendered height of the body in px: all rows, or the cap. */\n totalSize: number;\n /** Visible rows, without overscan; `null` before the first layout. */\n range: { start: number; end: number } | null;\n}\n\nexport interface VirtualConfig {\n count: number;\n rowHeight: number;\n overscan: number;\n /** Row id at an index of the row model; pool slots follow row ids. */\n rowIdAt: (index: number) => string;\n /**\n * The row to keep rendered outside the range (the one holding the grid's tab\n * stop), so its DOM and focus survive scrolling. `undefined`: none.\n */\n keep?: { id: string; index: number } | undefined;\n /** The tallest the body may render (`bodyCap()`); a taller one scrolls scaled. */\n cap: number;\n}\n\n/**\n * Row virtualization (TanStack Virtual) plus the row pool: which rows render,\n * where, and which pool slot's DOM each one uses. The virtualizer registers itself\n * with the host and requests updates on scroll.\n *\n * Scroll scaling: engines limit an element's height, so a body taller than the\n * cap renders at the cap and its scroll position maps linearly onto the rows\n * (`ScrollScale`). The virtualizer works in logical offsets: it gets a stand-in\n * for the scroller whose `scrollTop`, `scrollHeight` and `scrollTo()` are\n * logical, and everything else passes through. Rows render relative to the\n * scroll position (`start` minus the difference between the logical and the\n * physical offset). Scroll through this controller (`scrollBy`, `reveal`,\n * `scrollToIndex`): physical px no longer match rows once the body is scaled.\n */\nexport class VirtualController implements ReactiveController {\n readonly #virtual: VirtualizerController<HTMLElement, Element>;\n readonly #pool = new RowPool();\n readonly #scale = new ScrollScale();\n readonly #host: ReactiveControllerHost;\n readonly #getScrollElement: () => HTMLElement | null;\n #element: HTMLElement | undefined;\n #standIn: HTMLElement | undefined;\n #config: VirtualConfig = {\n count: 0,\n rowHeight: 40,\n overscan: 6,\n rowIdAt: String,\n cap: Infinity,\n };\n /** A logical offset to restore after the update, once the body has its new height. */\n #anchor: number | undefined;\n\n constructor(host: ReactiveControllerHost, getScrollElement: () => HTMLElement | null) {\n this.#host = host;\n this.#getScrollElement = getScrollElement;\n this.#virtual = new VirtualizerController<HTMLElement, Element>(host, {\n count: 0,\n getScrollElement: () => this.#scroller(),\n // The real element: a ResizeObserver can't observe the stand-in.\n observeElementRect: (_instance, cb) => {\n const element = this.#element;\n if (!element) return undefined;\n const report = () => {\n cb({ width: element.clientWidth, height: element.clientHeight });\n };\n report();\n const observer = new ResizeObserver(report);\n observer.observe(element);\n return () => {\n observer.disconnect();\n };\n },\n estimateSize: () => this.#config.rowHeight,\n overscan: this.#config.overscan,\n });\n host.addController(this);\n }\n\n /** The scroller's stand-in for the virtualizer: vertical offsets and height in logical px. */\n #scroller(): HTMLElement | null {\n const element = this.#getScrollElement();\n if (!element) return null;\n if (this.#element !== element || !this.#standIn) {\n this.#element = element;\n this.#standIn = new Proxy(element, {\n get: (target, key) => {\n if (key === 'scrollTop') return this.#top(target);\n if (key === 'scrollHeight') return target.scrollHeight + this.#scale.excess;\n if (key === 'scrollTo') {\n return (options: ScrollToOptions) => {\n if (options.top === undefined) target.scrollTo(options);\n else this.#write(target, options.top, options.behavior);\n };\n }\n const value: unknown = Reflect.get(target, key);\n // Methods run on the element itself (DOM methods reject the proxy).\n return typeof value === 'function'\n ? (value as (...args: unknown[]) => unknown).bind(target)\n : value;\n },\n });\n }\n return this.#standIn;\n }\n\n /** The scroller's logical offset. */\n #top(element: HTMLElement): number {\n const top = element.scrollTop;\n const scale = this.#scale;\n return scale.scaled ? scale.toLogical(top, element.scrollHeight - element.clientHeight) : top;\n }\n\n /**\n * Scrolls to a logical offset. `round` rounds the physical one, so that a\n * scaled offset moves the scroller at all.\n */\n #write(\n element: HTMLElement,\n logical: number,\n behavior?: ScrollBehavior,\n round?: (px: number) => number,\n ): void {\n const scale = this.#scale;\n if (!scale.scaled) {\n element.scrollTo({ top: logical, behavior });\n return;\n }\n const range = element.scrollHeight - element.clientHeight;\n const target = Math.min(Math.max(logical, 0), range + scale.excess);\n const physical = scale.toPhysical(target, range);\n element.scrollTo({ top: round ? round(physical) : physical, behavior });\n if (behavior !== 'smooth') scale.land(target, element.scrollTop);\n }\n\n configure(next: VirtualConfig): void {\n const prev = this.#config;\n this.#config = next;\n if (\n next.count !== prev.count ||\n next.overscan !== prev.overscan ||\n next.rowHeight !== prev.rowHeight\n ) {\n this.#virtual.setOptions({ count: next.count, overscan: next.overscan });\n if (next.rowHeight !== prev.rowHeight) this.#virtual.getVirtualizer().measure();\n }\n // Not `scaled`: TypeScript would take it for unchanged after `configure()`.\n const wasScaled = this.#scale.excess > 0;\n const offset = this.#virtual.getVirtualizer().scrollOffset;\n if (this.#scale.configure(next.count * next.rowHeight, next.cap)) {\n // A new mapping would move the rows under a scaled scroll position (a data\n // source growing, a zoom change): keep the logical offset once the body\n // has its new height.\n if ((wasScaled || this.#scale.scaled) && offset !== null && offset > 0) {\n this.#anchor = offset;\n }\n }\n }\n\n hostUpdated(): void {\n const anchor = this.#anchor;\n if (anchor === undefined) return;\n this.#anchor = undefined;\n if (this.#element) this.#write(this.#element, anchor);\n // The logical offset is the same, so the virtualizer sees no change; the\n // rows still have to move to the new physical one.\n this.#host.requestUpdate();\n }\n\n /**\n * Computes the rendered window and updates the pool. Call once per render.\n */\n computeWindow(): VirtualWindow {\n const v = this.#virtual.getVirtualizer();\n const items = v.getVirtualItems();\n // Scaled: rows render relative to the scroll position. The physical offset is\n // read now, so rows for the virtualizer's offset fill the view even if the\n // scroller has moved on since its last scroll event.\n const scaled = this.#scale.scaled;\n const size = this.#scale.size;\n const shift = scaled ? (v.scrollOffset ?? 0) - (this.#element?.scrollTop ?? 0) : 0;\n const byId = new Map<string, { index: number; start: number }>();\n for (const item of items) {\n byId.set(this.#config.rowIdAt(item.index), { index: item.index, start: item.start - shift });\n }\n const { keep, rowHeight } = this.#config;\n this.#pool.pin(keep?.id);\n if (keep && !byId.has(keep.id)) {\n // Fixed row heights: the virtualizer would place it here too. Scaled, it is\n // out of view: keep it inside the body (or just above it, under the header),\n // so it doesn't stretch the scroll range past the cap.\n const start = keep.index * rowHeight - shift;\n byId.set(keep.id, {\n index: keep.index,\n start: scaled ? Math.min(Math.max(start, -rowHeight), size) : start,\n });\n }\n const rows: WindowRow[] = [];\n for (const { id, slot } of this.#pool.update(byId.keys())) {\n const item = byId.get(id);\n if (item) rows.push({ slot, ...item });\n }\n const range = v.range;\n return {\n rows,\n totalSize: scaled ? size : v.getTotalSize(),\n range: range ? { start: range.startIndex, end: range.endIndex } : null,\n };\n }\n\n /** Number of pool slots created so far: bounded by the most rows rendered at once. */\n get poolSize(): number {\n return this.#pool.size;\n }\n\n /** Whether the body is taller than the cap and scrolls scaled. */\n get scaled(): boolean {\n return this.#scale.scaled;\n }\n\n /** `'start'` puts the row at the top; `'auto'` scrolls only as far as needed to show it. */\n scrollToIndex(index: number, align: 'start' | 'auto' = 'start'): void {\n this.#virtual.getVirtualizer().scrollToIndex(index, { align });\n }\n\n /** Scrolls by `delta` px of rows (logical px). */\n scrollBy(delta: number): void {\n const element = this.#element;\n if (element) this.#write(element, this.#top(element) + delta);\n }\n\n /**\n * Scrolls the least distance that shows row `index` in full, between the\n * content above the body (`before` px: the header and top pinned rows) and\n * below it (`after` px). Returns whether the rows are yet to move there (with\n * the update after the scroll event): until then the row's DOM isn't where it\n * will be.\n */\n reveal(index: number, before: number, after: number): boolean {\n const element = this.#element;\n if (!element) return false;\n const { rowHeight } = this.#config;\n const offset = this.#top(element);\n const view = element.clientHeight - before - after;\n const start = index * rowHeight;\n let target: number;\n let round: ((px: number) => number) | undefined;\n if (start < offset) {\n target = start;\n round = Math.floor;\n } else if (start + rowHeight > offset + view) {\n target = start + rowHeight - view;\n round = Math.ceil;\n } else {\n target = offset;\n }\n if (target !== offset) this.#write(element, target, undefined, round);\n // Rendered for an offset the scroller has since left: they move with the\n // update after the scroll event.\n return this.#virtual.getVirtualizer().scrollOffset !== this.#top(element);\n }\n}\n","import type {\n CellClickDetail,\n ColumnReorderDetail,\n ColumnResizeDetail,\n LoadErrorDetail,\n RangeChangeDetail,\n RowClickDetail,\n SortChangeDetail,\n} from '@argus-table/core';\n\n/** Fired after an update when the visible row range changed. */\nexport const RANGE_CHANGE = 'argus-range-change';\n\n/** Fired after the sort order changed (uncontrolled), or with the proposed order (controlled). */\nexport const SORT_CHANGE = 'argus-sort-change';\n\n/** Fired when a column was resized (uncontrolled), or with the proposed widths (controlled). */\nexport const COLUMN_RESIZE = 'argus-column-resize';\n\n/** Fired when a column was moved (uncontrolled), or with the proposed order (controlled). */\nexport const COLUMN_REORDER = 'argus-column-reorder';\n\n/** Fired when a body row was clicked, after `argus-cell-click`. */\nexport const ROW_CLICK = 'argus-row-click';\n\n/** Fired when a body cell was clicked, before `argus-row-click`. */\nexport const CELL_CLICK = 'argus-cell-click';\n\n/** Fired after the update when a `dataSource` page failed to load. */\nexport const LOAD_ERROR = 'argus-load-error';\n\ndeclare global {\n interface HTMLElementEventMap {\n 'argus-range-change': CustomEvent<RangeChangeDetail>;\n 'argus-sort-change': CustomEvent<SortChangeDetail>;\n 'argus-column-resize': CustomEvent<ColumnResizeDetail>;\n 'argus-column-reorder': CustomEvent<ColumnReorderDetail>;\n 'argus-row-click': CustomEvent<RowClickDetail<unknown>>;\n 'argus-cell-click': CustomEvent<CellClickDetail<unknown>>;\n 'argus-load-error': CustomEvent<LoadErrorDetail>;\n }\n}\n\n/** Dispatches a bubbling, composed `CustomEvent`, the shape of every public event. */\nexport function fire(host: HTMLElement, name: string, detail: unknown): boolean {\n return host.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n}\n","/**\n * The tallest element the engine renders, measured once per page.\n *\n * Chromium and WebKit clamp a taller element at about 33.5M px (fewer CSS px\n * when the page is zoomed in), and Firefox drops anything over about 17.9M px\n * to 0. A hidden probe tries a few heights and keeps the first that renders at\n * full size. A zoom change (a new `devicePixelRatio` on resize) measures again\n * and tells the tables, so a scaled body stays within the new limit.\n */\nconst HEIGHTS = [32_000_000, 16_000_000, 8_000_000, 4_000_000, 2_000_000];\n\n/** Content below this never needs the probe: every engine renders it. */\nconst SAFE_HEIGHT = 2_000_000;\n/** Room left for the scrollbar and rounding. */\nconst MARGIN = 1000;\n\nlet measured: number | undefined;\nlet forced: number | undefined;\nlet dpr = 0;\nconst listeners = new Set<() => void>();\n\nfunction onResize() {\n if (window.devicePixelRatio === dpr) return;\n dpr = window.devicePixelRatio;\n measured = undefined;\n for (const listener of listeners) listener();\n}\n\n/** The tallest element height in px the engine renders. */\nfunction maxElementHeight(): number {\n if (forced !== undefined) return forced;\n if (measured !== undefined) return measured;\n // Fixed, so the probe never makes the page scroll.\n const probe = document.createElement('div');\n probe.setAttribute('aria-hidden', 'true');\n probe.style.cssText =\n 'position:fixed;inset-block-start:0;inset-inline-start:0;inline-size:1px;visibility:hidden;pointer-events:none';\n document.body.append(probe);\n measured =\n HEIGHTS.find((height) => {\n probe.style.blockSize = `${String(height)}px`;\n return probe.offsetHeight >= height - 1;\n }) ?? SAFE_HEIGHT;\n probe.remove();\n return measured;\n}\n\n/**\n * The tallest the body may render: the engine's maximum less what scrolls with\n * it (`extra`: the header and pinned rows). `Infinity` for a body of `logical`\n * px that is far from any limit, without measuring.\n */\nexport function bodyCap(logical: number, extra: number): number {\n if (forced === undefined && logical + extra < SAFE_HEIGHT) return Infinity;\n return Math.max(maxElementHeight() - extra - MARGIN, 0);\n}\n\n/** Calls `listener` when the maximum may have changed (the page was zoomed). Returns the unsubscribe. */\nexport function watchMaxElementHeight(listener: () => void): () => void {\n if (listeners.size === 0) {\n dpr = window.devicePixelRatio;\n window.addEventListener('resize', onResize, { passive: true });\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) window.removeEventListener('resize', onResize);\n };\n}\n\n/** Tests: pretend the engine renders at most `height` px (`undefined` measures again). */\nexport function setMaxElementHeightForTests(height: number | undefined): void {\n forced = height;\n}\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { nothing } from 'lit';\nimport type { CellContent } from '../types.js';\n\n/** Turns header or cell content into a Lit child. */\nexport function toChild(content: CellContent | null | undefined): unknown {\n if (content === null || content === undefined) return nothing;\n return typeof content === 'number' ? String(content) : content;\n}\n\n/** Default cell text for an accessor value. */\nexport function formatValue(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (value instanceof Date) return value.toLocaleString();\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- objects are handled above\n return typeof value === 'object' ? JSON.stringify(value) : String(value);\n}\n\n/**\n * Private slot names (ADR 0001): cells by pool slot and column, headers by\n * column, pinned rows by side, index and column.\n */\nexport const cellSlot = (slot: number, colIndex: number) => `c-${String(slot)}-${String(colIndex)}`;\nexport const headerSlot = (colIndex: number) => `h-${String(colIndex)}`;\nexport const pinnedSlot = (side: 'top' | 'bottom', index: number, colIndex: number) =>\n `${side === 'top' ? 't' : 'b'}-${String(index)}-${String(colIndex)}`;\n\ninterface Pinnable {\n pin: 'start' | 'end' | undefined;\n pinEdge: boolean;\n}\n\n/**\n * Part list of a body or pinned-row cell: state is in the part name (`::part()`\n * can't take attribute selectors).\n */\nexport function cellParts(\n column: Pinnable & { sorted: 'asc' | 'desc' | false },\n pinnedRow = false,\n): string {\n let parts = pinnedRow ? 'cell cell-pinned-row' : 'cell';\n if (column.pin) parts += column.pinEdge ? ' cell-pinned cell-pinned-edge' : ' cell-pinned';\n if (column.sorted) parts += ' cell-sorted';\n return parts;\n}\n\n/** `aria-sort` for a header: only the sorted column carries it (WAI-ARIA APG). */\nexport function ariaSort(sorted: 'asc' | 'desc' | false): 'ascending' | 'descending' | undefined {\n if (!sorted) return undefined;\n return sorted === 'asc' ? 'ascending' : 'descending';\n}\n\n/** Inline style of a pinned cell: its sticky inset, from the start or the end edge. */\nexport function pinStyle(column: Pinnable & { offset: number }): string | undefined {\n return column.pin ? `--_pin-offset: ${String(column.offset)}px` : undefined;\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport type { ColumnView, RowState } from '@argus-table/core';\nimport type { WindowRow } from '../controllers/virtual-controller.js';\nimport type { CellContent } from '../types.js';\nimport { cellParts, cellSlot, pinStyle } from './content.js';\n\ntype Columns<T> = readonly ColumnView<T, CellContent>[];\n\n/** The cell holding the grid's tab stop: a row index and a column id. */\nexport interface ActiveCell {\n index: number;\n col: string;\n}\n\n/** Row loading state for `dataSource` tables. */\nexport interface Loading {\n /** Whether a row's data is loaded, still loading, or its page failed. */\n stateAt(index: number): RowState;\n /** Rows that show a Retry button (one per failed page in view), with its accessible label. */\n retry: ReadonlyMap<number, string>;\n /** Click handler of the Retry buttons; the button carries the row index in `data-row`. */\n onRetry: (event: Event) => void;\n}\n\n/**\n * The virtualized body. Rows are keyed by pool slot, so a row entering the window\n * reuses the DOM of one that left (ADR 0001), and they stay in pool order: screen\n * readers get the position from `aria-rowindex`. `firstRowIndex` is the\n * `aria-rowindex` of row 0: after the header and the rows pinned to the top.\n */\nexport function renderBody<T>(\n rows: readonly WindowRow[],\n columns: Columns<T>,\n totalSize: number,\n active: ActiveCell | undefined,\n firstRowIndex: number,\n loading?: Loading,\n) {\n return html`<div\n part=\"body\"\n role=\"rowgroup\"\n style=${styleMap({ blockSize: `${String(totalSize)}px` })}\n >\n ${repeat(\n rows,\n (r) => r.slot,\n (r) =>\n renderRow(\n r,\n columns,\n r.index === active?.index ? active.col : undefined,\n firstRowIndex,\n loading,\n ),\n )}\n </div>`;\n}\n\n/**\n * One body row. Every cell is focusable (`tabindex=-1`) so clicks focus it; the\n * active one is the grid's single tab stop (roving tabindex). A row whose data\n * isn't loaded shows skeleton bars, and a Retry button if its page failed.\n */\nfunction renderRow<T>(\n row: WindowRow,\n columns: Columns<T>,\n activeCol: string | undefined,\n firstRowIndex: number,\n loading: Loading | undefined,\n) {\n const state = loading?.stateAt(row.index) ?? 'loaded';\n let parts = row.index % 2 === 0 ? 'row row-even' : 'row row-odd';\n if (state !== 'loaded') parts += ' row-loading';\n const retry = state === 'error' ? loading?.retry.get(row.index) : undefined;\n return html`<div\n part=${parts}\n class=\"row\"\n role=\"row\"\n aria-rowindex=${row.index + firstRowIndex}\n aria-busy=${state === 'loading' ? 'true' : nothing}\n style=${styleMap({ transform: `translateY(${String(row.start)}px)` })}\n >\n ${repeat(\n columns,\n (c) => c.id,\n (c) =>\n renderCell(\n c,\n c.id === activeCol,\n cellSlot(row.slot, c.colIndex),\n false,\n placeholder(state, c.colIndex === 1 ? retry : undefined, row.index, loading),\n ),\n )}\n </div>`;\n}\n\n/**\n * A body or pinned-row cell. Every cell is focusable (`tabindex=-1`) so clicks\n * focus it; `tabStop` marks the grid's single tab stop. `before` goes ahead of\n * the slot (a loading row's skeleton bar or Retry button).\n */\nexport function renderCell<T>(\n c: ColumnView<T, CellContent>,\n tabStop: boolean,\n slot: string,\n pinnedRow: boolean,\n before: unknown = nothing,\n) {\n return html`<div\n part=${cellParts(c, pinnedRow)}\n role=\"gridcell\"\n aria-colindex=${c.colIndex}\n tabindex=${tabStop ? 0 : -1}\n data-col=${c.id}\n data-align=${c.align}\n data-pin=${c.pin ?? nothing}\n style=${pinStyle(c) ?? nothing}\n >\n ${before}<slot name=${slot}></slot>\n </div>`;\n}\n\n/** What an unloaded cell shows: a skeleton bar, or the Retry button in a failed page's first cell. */\nfunction placeholder(\n state: RowState,\n retryLabel: string | undefined,\n index: number,\n loading: Loading | undefined,\n) {\n if (state === 'loaded') return nothing;\n if (retryLabel !== undefined && loading) {\n return html`<button\n part=\"retry\"\n type=\"button\"\n tabindex=\"-1\"\n data-row=${index}\n aria-label=${retryLabel}\n @click=${loading.onRetry}\n >\n Retry\n </button>`;\n }\n return html`<div\n part=${state === 'error' ? 'skeleton skeleton-error' : 'skeleton'}\n aria-hidden=\"true\"\n ></div>`;\n}\n","import { html, render } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ColumnView, RowPin, TableModel } from '@argus-table/core';\nimport type { WindowRow } from '../controllers/virtual-controller.js';\nimport type { CellContent } from '../types.js';\nimport { cellSlot, formatValue, headerSlot, pinnedSlot, toChild } from './content.js';\n\ntype Column<T> = ColumnView<T, CellContent>;\n\n/**\n * Renders header and cell content into the host's light DOM, as direct children\n * (a slot only takes the host's own children). Keyed and ordered by pool slot,\n * so recycled content updates in place instead of moving (ADR 0001). The part\n * ends at `renderBefore`, so the host's other children (`<argus-column>`) stay\n * outside it, wherever they are added.\n */\nexport function renderLightDom<T>(\n host: HTMLElement,\n model: TableModel<T, CellContent>,\n rows: readonly WindowRow[],\n renderBefore: ChildNode,\n): void {\n const columns = model.columns;\n render(\n html`${repeat(\n columns,\n (c) => c.id,\n (c) => html`<div slot=${headerSlot(c.colIndex)}>${headerContent(c)}</div>`,\n )}${pinnedContent(model, 'top')}${repeat(\n rows,\n (r) => r.slot,\n (r) =>\n repeat(\n columns,\n (c) => c.id,\n (c) =>\n html`<div slot=${cellSlot(r.slot, c.colIndex)}>${cellContent(model, r.index, c)}</div>`,\n ),\n )}${pinnedContent(model, 'bottom')}`,\n host,\n { host, renderBefore },\n );\n}\n\nfunction headerContent<T>(column: Column<T>): unknown {\n const { header } = column;\n return toChild(typeof header === 'function' ? header() : header);\n}\n\n/** Content of the rows pinned to one side, slotted by side, index and column. */\nfunction pinnedContent<T>(model: TableModel<T, CellContent>, side: RowPin) {\n const columns = model.columns;\n const rows = Array.from({ length: model.pinnedCount(side) }, (_, i) => i);\n return rows.map((i) =>\n repeat(\n columns,\n (c) => c.id,\n (c) =>\n html`<div slot=${pinnedSlot(side, i, c.colIndex)}>${pinnedCell(model, side, i, c)}</div>`,\n ),\n );\n}\n\nfunction pinnedCell<T>(\n model: TableModel<T, CellContent>,\n side: RowPin,\n index: number,\n column: Column<T>,\n) {\n if (column.cell) {\n const context = model.pinnedCellContext(side, index, column.id);\n return context ? toChild(column.cell(context.row, context)) : '';\n }\n return column.hasAccessor ? formatValue(model.pinnedValueAt(side, index, column.id)) : '';\n}\n\nfunction cellContent<T>(model: TableModel<T, CellContent>, index: number, column: Column<T>) {\n if (column.cell) {\n const context = model.cellContext(index, column.id);\n return context ? toChild(column.cell(context.row, context)) : '';\n }\n return column.hasAccessor ? formatValue(model.valueAt(index, column.id)) : '';\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ColumnView } from '@argus-table/core';\nimport type { DropTarget } from '../controllers/reorder-drag.js';\nimport type { CellContent } from '../types.js';\nimport { ariaSort, headerSlot, pinStyle } from './content.js';\n\n/** A column header being dragged, and where it would land (`undefined`: where it is). */\nexport interface HeaderDrag {\n columnId: string;\n target: DropTarget | undefined;\n}\n\nexport interface HeaderHandlers {\n click: (event: MouseEvent) => void;\n pointerdown: (event: PointerEvent) => void;\n dblclick: (event: MouseEvent) => void;\n}\n\n/**\n * The sticky header row. Header content is slotted from the light DOM. Pinned\n * header cells use the same private `data-pin` hooks as body cells, but no parts.\n * Every header carries `data-col` (its column id) and sortable ones also\n * `data-sort-col`; the element's delegated handlers read them. Headers take part\n * in the grid's roving tabindex: the active one is the tab stop (`activeCol`).\n * Resizable columns get a `resize-handle` on the header's inline-end edge; a\n * double-click on it fits the column to its content. It is not focusable: the\n * focused header resizes with Alt+Arrow.\n *\n * Reorderable columns carry `data-move-col`: a drag on the header moves the\n * column. While one is dragged (`drag`), its header adds `header-cell-dragging`\n * and the target header shows a `drop-indicator` on the edge it would land at.\n */\nexport function renderHeader<T>(\n columns: readonly ColumnView<T, CellContent>[],\n handlers: HeaderHandlers,\n activeCol: string | undefined,\n drag?: HeaderDrag,\n) {\n return html`<div part=\"header\" role=\"rowgroup\">\n <div\n part=\"header-row\"\n class=\"row\"\n role=\"row\"\n aria-rowindex=\"1\"\n @click=${handlers.click}\n @pointerdown=${handlers.pointerdown}\n @dblclick=${handlers.dblclick}\n >\n ${repeat(\n columns,\n (c) => c.id,\n (c) =>\n html`<div\n part=${headerParts(c, drag)}\n role=\"columnheader\"\n aria-colindex=${c.colIndex}\n aria-sort=${ariaSort(c.sorted) ?? nothing}\n data-col=${c.id}\n data-sort-col=${c.sortable ? c.id : nothing}\n data-move-col=${c.reorderable ? c.id : nothing}\n tabindex=${c.id === activeCol ? 0 : -1}\n data-align=${c.align}\n data-pin=${c.pin ?? nothing}\n style=${pinStyle(c) ?? nothing}\n >\n <slot name=${headerSlot(c.colIndex)}></slot>\n ${c.sortable ? html`<span class=\"sort-indicator\" aria-hidden=\"true\"></span>` : nothing}\n ${c.resizable ? resizeHandle(c) : nothing}\n ${\n drag?.target?.columnId === c.id\n ? html`<span\n part=\"drop-indicator\"\n data-edge=${drag.target.edge}\n aria-hidden=\"true\"\n ></span>`\n : nothing\n }\n </div>`,\n )}\n </div>\n </div>`;\n}\n\nfunction headerParts<T>(c: ColumnView<T, CellContent>, drag: HeaderDrag | undefined): string {\n let parts = c.sorted ? 'header-cell header-cell-sorted' : 'header-cell';\n if (drag?.columnId === c.id) parts += ' header-cell-dragging';\n return parts;\n}\n\n/**\n * A vertical separator with the column's width as its value. A flex column has no\n * fixed width until it is resized, so it reports none.\n */\nfunction resizeHandle<T>(c: ColumnView<T, CellContent>) {\n return html`<div\n part=\"resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize column\"\n aria-valuenow=${c.flex === undefined ? Math.round(c.width) : nothing}\n aria-valuemin=${c.minWidth}\n aria-valuemax=${Number.isFinite(c.maxWidth) ? c.maxWidth : nothing}\n data-resize-col=${c.id}\n ></div>`;\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ColumnView, RowPin } from '@argus-table/core';\nimport type { CellContent } from '../types.js';\nimport { renderCell, type ActiveCell } from './body.js';\nimport { pinnedSlot } from './content.js';\n\n/**\n * The rows pinned to one side: a sticky row group below the header (`top`) or\n * at the bottom of the view (`bottom`). They are few and never recycled, so\n * they aren't pooled; content is slotted from the light DOM like body cells.\n * Cells take part in the grid's roving tabindex (`active.index` is the row's\n * index in its list). `firstRowIndex` is the `aria-rowindex` of the first row.\n */\nexport function renderPinnedRows<T>(\n side: RowPin,\n count: number,\n columns: readonly ColumnView<T, CellContent>[],\n firstRowIndex: number,\n active: ActiveCell | undefined,\n) {\n if (count === 0) return nothing;\n const rows = Array.from({ length: count }, (_, i) => i);\n return html`<div class=\"pinned\" data-side=${side} role=\"rowgroup\">\n ${rows.map(\n (i) =>\n html`<div\n part=${`row row-pinned row-pinned-${side}`}\n class=\"row\"\n role=\"row\"\n aria-rowindex=${firstRowIndex + i}\n >\n ${repeat(\n columns,\n (c) => c.id,\n (c) =>\n renderCell(\n c,\n active?.index === i && c.id === active.col,\n pinnedSlot(side, i, c.colIndex),\n true,\n ),\n )}\n </div>`,\n )}\n </div>`;\n}\n","import { css } from 'lit';\n\n/**\n * Base styles. Everything sits in `@layer argus-base`, and every value reads a\n * public token with a neutral fallback, so themes and page CSS always win.\n * `--_*` properties are private.\n */\nexport const baseStyles = css`\n @layer argus-base {\n :host {\n display: block;\n /* A table that virtualizes needs a bounded height; set your own on the element. */\n block-size: 400px;\n box-sizing: border-box;\n contain: content;\n color-scheme: light dark;\n color: var(--argus-fg, CanvasText);\n background: var(--argus-bg, Canvas);\n font: var(--argus-font, inherit);\n /* contain: content clips the header, rows and pinned shadows to the rounded corners. */\n border: var(--argus-outline, none);\n border-radius: var(--argus-radius, 0);\n --_row-height: var(--argus-row-height, 40px);\n --_pad: var(--argus-cell-padding-inline, 12px);\n --_border: var(--argus-border-width, 1px) solid\n var(--argus-border-color, light-dark(#e5e7eb, #374151));\n /* 1 in LTR, -1 in RTL: mirrors the pinned-edge shadow. */\n --_dir: 1;\n }\n :host(:dir(rtl)) {\n --_dir: -1;\n }\n :host([density='compact']) {\n --_row-height: var(--argus-row-height, 32px);\n --_pad: var(--argus-cell-padding-inline, 8px);\n }\n :host([density='spacious']) {\n --_row-height: var(--argus-row-height, 52px);\n --_pad: var(--argus-cell-padding-inline, 16px);\n }\n :host([hidden]) {\n display: none;\n }\n\n [part~='table'] {\n position: relative;\n block-size: 100%;\n overflow: auto;\n overscroll-behavior: contain;\n /*\n * A cell moved to by keyboard scrolls clear of the sticky header, the pinned\n * rows and the pinned columns.\n */\n scroll-padding-block-start: calc((1 + var(--_pin-top-rows, 0)) * var(--_row-height));\n scroll-padding-block-end: calc(var(--_pin-bottom-rows, 0) * var(--_row-height));\n scroll-padding-inline: var(--_pin-start, 0) var(--_pin-end, 0);\n }\n\n .row {\n display: grid;\n grid-template-columns: var(--_cols);\n inline-size: var(--_width);\n min-inline-size: 100%;\n block-size: var(--_row-height);\n box-sizing: border-box;\n }\n\n [part~='header'] {\n position: sticky;\n inset-block-start: 0;\n z-index: 2;\n }\n\n [part~='body'] {\n position: relative;\n contain: layout;\n }\n [part~='body'] > .row {\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 0;\n }\n [part~='row'] {\n --_row-bg: var(--argus-bg, Canvas);\n --_row-surface: var(--_row-bg);\n background: var(--_row-surface);\n }\n [part~='row-odd'] {\n --_row-bg: var(--argus-row-stripe-bg, var(--argus-bg, Canvas));\n }\n [part~='row']:hover {\n --_row-surface: var(--argus-row-hover-bg, var(--_row-bg));\n }\n\n /*\n * Pinned rows: a sticky row group below the header and one at the bottom of\n * the view. The header is one row tall. They keep their place in the flow,\n * so body row i still starts i rows below the top group.\n */\n .pinned {\n position: sticky;\n z-index: 2;\n }\n .pinned[data-side='top'] {\n inset-block-start: var(--_row-height);\n }\n .pinned[data-side='bottom'] {\n inset-block-end: 0;\n }\n [part~='row-pinned'] {\n --_row-bg: var(--argus-pinned-row-bg, var(--argus-bg, Canvas));\n }\n\n [part~='cell'],\n [part~='header-cell'] {\n display: flex;\n align-items: center;\n min-inline-size: 0;\n box-sizing: border-box;\n padding-inline: var(--_pad);\n overflow: hidden;\n white-space: nowrap;\n border-block-end: var(--_border);\n }\n [part~='header-cell'] {\n background: var(--argus-header-bg, light-dark(#f9fafb, #111827));\n color: var(--argus-header-fg, inherit);\n font-weight: 600;\n }\n [part~='header-cell'] {\n position: relative;\n }\n [part~='resize-handle'] {\n position: absolute;\n inset-block: 0;\n inset-inline-end: 0;\n inline-size: 8px;\n z-index: 1;\n cursor: col-resize;\n touch-action: none;\n }\n [part~='resize-handle']::after {\n content: '';\n position: absolute;\n inset-block: 25%;\n inset-inline-end: 0;\n inline-size: 2px;\n background: var(--argus-resize-handle-color, light-dark(#9ca3af, #6b7280));\n opacity: 0;\n }\n [part~='header-cell']:hover [part~='resize-handle']::after,\n [part~='header-cell']:focus-visible [part~='resize-handle']::after,\n [part~='resize-handle'][data-active]::after {\n opacity: 1;\n }\n [data-sort-col] {\n cursor: pointer;\n user-select: none;\n }\n /* A drag on a reorderable header moves the column, so its text isn't selectable. */\n [data-move-col] {\n user-select: none;\n }\n [data-dragging],\n [data-dragging] [part~='header-cell'] {\n cursor: grabbing;\n }\n [part~='header-cell-dragging'] {\n opacity: 0.5;\n }\n /* The line where a dragged column would land, on the target header's logical edge. */\n [part~='drop-indicator'] {\n position: absolute;\n inset-block: 0;\n inline-size: 2px;\n z-index: 2;\n background: var(--argus-drop-indicator-color, Highlight);\n pointer-events: none;\n }\n [part~='drop-indicator'][data-edge='start'] {\n inset-inline-start: 0;\n }\n [part~='drop-indicator'][data-edge='end'] {\n inset-inline-end: 0;\n }\n [part~='header-cell']:focus-visible,\n [part~='cell']:focus-visible {\n outline: var(--argus-focus-ring, 2px solid Highlight);\n outline-offset: -2px;\n }\n /* A small chevron after the header content; only the sorted column shows it. */\n .sort-indicator {\n flex: none;\n inline-size: 0.35em;\n block-size: 0.35em;\n margin-inline-start: 0.4em;\n /* Physical sides on purpose: the chevron is rotated, so it must not mirror in RTL. */\n border-right: 0.12em solid currentColor;\n border-bottom: 0.12em solid currentColor;\n visibility: hidden;\n }\n [aria-sort] .sort-indicator {\n visibility: visible;\n }\n [aria-sort='ascending'] .sort-indicator {\n transform: translateY(0.1em) rotate(-135deg);\n }\n [aria-sort='descending'] .sort-indicator {\n transform: translateY(-0.1em) rotate(45deg);\n }\n [data-align='end'] .sort-indicator {\n order: -1;\n margin-inline: 0 0.4em;\n }\n /*\n * Pinned columns: sticky inside the scroll container, with offsets from the\n * table model. Logical insets make RTL work without extra rules.\n */\n [data-pin] {\n position: sticky;\n z-index: 1;\n }\n [data-pin='start'] {\n inset-inline-start: var(--_pin-offset);\n }\n [data-pin='end'] {\n inset-inline-end: var(--_pin-offset);\n }\n /*\n * Pinned body cells are sticky only while the table scrolls sideways\n * (data-hscroll on the scroller). At rest they are plain cells shifted by the\n * horizontal scroll offset, which vertical scrolling never changes: a sticky\n * cell per row is a compositing layer each, and Safari stutters moving them\n * (PinScrollController). Both place the cells at the same spot.\n */\n [part~='row'] > [data-pin] {\n position: relative;\n inset-inline: auto;\n }\n [part~='row'] > [data-pin='start'] {\n transform: translateX(var(--_sx, 0px));\n }\n [part~='row'] > [data-pin='end'] {\n transform: translateX(calc(var(--_sx, 0px) - var(--_dir) * var(--_max-x, 0px)));\n }\n [data-hscroll] [part~='row'] > [data-pin] {\n position: sticky;\n transform: none;\n }\n [data-hscroll] [part~='row'] > [data-pin='start'] {\n inset-inline-start: var(--_pin-offset);\n }\n [data-hscroll] [part~='row'] > [data-pin='end'] {\n inset-inline-end: var(--_pin-offset);\n }\n [part~='cell-pinned'] {\n background: var(--_row-surface);\n }\n /*\n * The edge shadow, once per pinned side (.pin-shadow, beside the scroller).\n * --argus-pinned-shadow is written for a shadow falling toward the end side;\n * the start edge in RTL and the end edge in LTR mirror it.\n */\n .pin-shadow {\n position: absolute;\n inset-block-start: 0;\n block-size: min(var(--_view-h, 100%), var(--_content-h, 100%));\n z-index: 3;\n pointer-events: none;\n }\n .pin-shadow[data-side='start'] {\n inset-inline-start: 0;\n }\n .pin-shadow[data-side='end'] {\n inset-inline-end: var(--_sb-x, 0px);\n }\n .pin-shadow::after {\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: var(\n --argus-pinned-shadow,\n 4px 0 6px -4px light-dark(rgb(0 0 0 / 0.2), rgb(0 0 0 / 0.6))\n );\n transform: scaleX(var(--_dir));\n }\n .pin-shadow[data-side='end']::after {\n transform: scaleX(calc(-1 * var(--_dir)));\n }\n\n [data-align='center'] {\n justify-content: center;\n text-align: center;\n }\n [data-align='end'] {\n justify-content: flex-end;\n text-align: end;\n }\n ::slotted(*) {\n min-inline-size: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n /* Fitting a column to its content: set for one synchronous measurement, never painted. */\n [data-measure] {\n inline-size: max-content;\n }\n\n /* Rows of a data source that haven't loaded: a bar per cell, pulsing gently. */\n [part~='skeleton'] {\n flex: none;\n inline-size: min(60%, 8em);\n block-size: 0.6em;\n border-radius: 0.3em;\n background: var(--argus-skeleton-bg, color-mix(in srgb, currentColor 12%, transparent));\n animation: argus-skeleton-pulse 1.6s ease-in-out infinite;\n }\n [part~='skeleton-error'] {\n animation: none;\n opacity: 0.5;\n }\n @keyframes argus-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n [part~='skeleton'] {\n animation: none;\n }\n }\n [part~='retry'] {\n font: inherit;\n color: inherit;\n cursor: pointer;\n }\n\n [part~='empty'] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-block-size: calc(\n 100% - (1 + var(--_pin-top-rows, 0) + var(--_pin-bottom-rows, 0)) * var(--_row-height)\n );\n padding: var(--_pad);\n box-sizing: border-box;\n }\n\n /* Measures the resolved row height in px for the virtualizer. */\n .probe {\n position: absolute;\n inset-block-start: 0;\n inline-size: 0;\n block-size: var(--_row-height);\n visibility: hidden;\n pointer-events: none;\n }\n }\n`;\n","import {\n LitElement,\n html,\n nothing,\n type CSSResultGroup,\n type PropertyValues,\n type TemplateResult,\n} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport {\n controllable,\n RowLayout,\n type ColumnReorderDetail,\n type ColumnResizeDetail,\n type ColumnView,\n type GridRow,\n type TableModel,\n} from '@argus-table/core';\nimport { announce } from './announce.js';\nimport { AutoWidths, measureColumns } from './controllers/auto-width.js';\nimport { ColumnChildrenController } from './controllers/column-children.js';\nimport { DataController } from './controllers/data-controller.js';\nimport { PinScrollController } from './controllers/pin-scroll-controller.js';\nimport {\n canStartReorder,\n dropTarget,\n startReorderDrag,\n type DropSlot,\n} from './controllers/reorder-drag.js';\nimport { startResizeDrag } from './controllers/resize-drag.js';\nimport { TableController } from './controllers/table-controller.js';\nimport { VirtualController, type VirtualWindow } from './controllers/virtual-controller.js';\nimport {\n CELL_CLICK,\n COLUMN_REORDER,\n COLUMN_RESIZE,\n fire,\n LOAD_ERROR,\n RANGE_CHANGE,\n ROW_CLICK,\n SORT_CHANGE,\n} from './events.js';\nimport { bodyCap, watchMaxElementHeight } from './max-height.js';\nimport { renderBody, type ActiveCell, type Loading } from './render/body.js';\nimport { renderLightDom } from './render/cells.js';\nimport { renderHeader, type HeaderDrag } from './render/header.js';\nimport { renderPinnedRows } from './render/pinned-rows.js';\nimport { baseStyles } from './styles/base.js';\nimport type {\n CellContent,\n ColumnDef,\n ColumnOrderState,\n ColumnSizingState,\n DataSource,\n Density,\n PinnedRows,\n SortState,\n} from './types.js';\n\n/**\n * The host carries the grid role, so rows rendered in the shadow root become\n * its children in the accessibility tree. ElementInternals sets the default;\n * `connectedCallback` also adds a `role` attribute, because tools such as\n * axe-core can't see the ElementInternals role. A `role` the page sets wins.\n */\nfunction attachGridInternals(host: HTMLElement): ElementInternals {\n const internals = host.attachInternals();\n internals.role = 'grid';\n return internals;\n}\n\n/**\n * The sortable column a header click came from, if any. Works for slotted content\n * too. Clicks on a resize handle never sort, so a click that ends a drag doesn't.\n */\nfunction sortColumnOf(event: Event): string | undefined {\n for (const target of event.composedPath()) {\n if (!(target instanceof HTMLElement)) continue;\n if (target.dataset.resizeCol !== undefined) return undefined;\n if (target.dataset.sortCol !== undefined) return target.dataset.sortCol;\n if (target.getAttribute('part') === 'header-row') return undefined;\n }\n return undefined;\n}\n\nconst RESIZE_STEP = 10;\n\n/**\n * The cell holding the grid's single tab stop: a row (its section, and its index\n * there: in the row model for the body, in its list for a pinned row) and a\n * column. `rowId` keeps it on the same body row when the order changes.\n */\ninterface Active extends GridRow {\n rowId: string | undefined;\n col: string;\n}\n\nconst HEADER: GridRow = { section: 'header', index: 0 };\n\n/** Where the rows sit in the grid: header, pinned top, body, pinned bottom. */\nfunction layoutOf<T>(model: TableModel<T, CellContent>): RowLayout {\n return new RowLayout(model.pinnedCount('top'), model.rowCount, model.pinnedCount('bottom'));\n}\n\n/** The grid cell or column header an element is, if any. */\nfunction gridCell(target: EventTarget): HTMLElement | undefined {\n if (!(target instanceof HTMLElement) || target.dataset.col === undefined) return undefined;\n const role = target.getAttribute('role');\n return role === 'gridcell' || role === 'columnheader' ? target : undefined;\n}\n\n/** The grid row a rendered row element is, from its `aria-rowindex`. */\nfunction gridRowOf(row: Element | null, layout: RowLayout): GridRow | undefined {\n const index = row?.getAttribute('aria-rowindex');\n return index ? layout.fromAriaRowIndex(Number(index)) : undefined;\n}\n\n/**\n * The pinned edge's shadow, drawn once per side over the scroller rather than\n * per row: a shadow on every pinned cell repaints on every scroll frame. It\n * covers the pinned columns and casts `--argus-pinned-shadow` onto the rest;\n * PinScrollController sizes it to the visible area.\n */\nfunction pinShadow(side: 'start' | 'end', width: number, rows: number, rowPx: number) {\n if (width === 0) return nothing;\n return html`<div\n class=\"pin-shadow\"\n data-side=${side}\n aria-hidden=\"true\"\n style=${styleMap({\n inlineSize: `${String(width)}px`,\n '--_content-h': `${String((rows + 1) * rowPx)}px`,\n })}\n ></div>`;\n}\n\n/** CSS grid track for a column: fixed px, or a flex share with the min width as floor. */\nfunction track<T>(column: ColumnView<T, CellContent>): string {\n return column.flex === undefined\n ? `${String(column.width)}px`\n : `minmax(${String(column.minWidth)}px, ${String(column.flex)}fr)`;\n}\n\n/**\n * A virtualized data table.\n *\n * Set `columns`, and `data` or `dataSource`, as properties. Columns can also be\n * written as `<argus-column>` children; a non-empty `columns` wins over them.\n * Header and cell content is rendered into the element's light DOM and slotted\n * into the cells, so page CSS and the page's own components work inside cells.\n *\n * Any number of rows scrolls to the end. Browsers limit an element's height\n * (about 800k rows of 40 px in Chromium and Safari, 400k in Firefox), so a taller\n * body renders shorter and its scroll position is scaled onto the rows: the\n * scrollbar still spans every row, and a wheel step covers a few more of them.\n * Use `scrollToRow()` rather than setting the scroll container's `scrollTop`.\n *\n * @summary Data table with pinned rows and columns and infinite loading.\n *\n * @fires {CustomEvent<SortChangeDetail>} argus-sort-change - A sortable header was clicked, or activated with Enter or Space. `detail: { sorting }`: the new order, or the proposed one when `sorting` is controlled.\n * @fires {CustomEvent<ColumnResizeDetail>} argus-column-resize - A column was resized: by dragging its handle, with Alt+Arrow on its header, by a double-click on its handle (fit to content) or by `autosizeColumns()`. `detail: { columnId, width, sizing }`: the new widths, or the proposed ones when `columnSizing` is controlled. Fires on every frame of a drag, and once per column that `autosizeColumns()` changes.\n * @fires {CustomEvent<ColumnReorderDetail>} argus-column-reorder - A column was moved: by dragging its header, or with Alt+Shift+Arrow on its focused header. Columns move within their own group (start-pinned, scrolling, end-pinned). `detail: { columnId, order }`: the new order, or the proposed one when `columnOrder` is controlled. Fires once per move, on drop.\n * @fires {CustomEvent<CellClickDetail<T>>} argus-cell-click - A body or pinned-row cell was clicked, or Enter was pressed on it. `detail: { row, columnId, value, pinned? }`; `pinned` is `'top'` or `'bottom'` for a pinned row. Fires before `argus-row-click`.\n * @fires {CustomEvent<RowClickDetail<T>>} argus-row-click - A body or pinned row was clicked, or Enter was pressed on one of its cells. `detail: { row, rowId, index, pinned? }`; for a pinned row, `index` is its index in its list.\n * @fires {CustomEvent<RangeChangeDetail>} argus-range-change - The visible rows changed. `detail: { start, end }` (row indices, inclusive).\n * @fires {CustomEvent<LoadErrorDetail>} argus-load-error - A `dataSource` page failed to load: `getRows()` rejected or threw. `detail: { error, start, end }` (`end` exclusive). The rows show a Retry button.\n *\n * @slot empty - Shown instead of the body when there are no rows. Default: \"No rows\".\n *\n * @csspart table - The scroll container that holds header and body.\n * @csspart header - The sticky header row group.\n * @csspart header-row - The header row.\n * @csspart header-cell - Every header cell.\n * @csspart header-cell-sorted - The header of the sorted column. The direction is in `aria-sort`.\n * @csspart header-cell-dragging - Added to `header-cell` on the header being dragged to a new position.\n * @csspart drop-indicator - The line on the edge of the header where a dragged column would land.\n * @csspart resize-handle - The drag handle on the inline-end edge of a resizable column's header. A double-click fits the column to its content.\n * @csspart body - The row group holding the rendered body rows.\n * @csspart row - Every body row.\n * @csspart row-even - Body rows with an even index (0-based).\n * @csspart row-odd - Body rows with an odd index.\n * @csspart row-loading - Body rows whose `dataSource` page hasn't loaded yet, or failed.\n * @csspart row-pinned - Every row from `pinnedRows`, on either side. Also has `row`, but no `row-even`/`row-odd`.\n * @csspart row-pinned-top - The rows pinned below the header.\n * @csspart row-pinned-bottom - The rows pinned to the bottom.\n * @csspart cell-pinned-row - Every cell of a pinned row (next to `cell`).\n * @csspart cell - Every body cell.\n * @csspart cell-sorted - Body cells in the sorted column.\n * @csspart cell-pinned - Body cells in a pinned column, on either side.\n * @csspart cell-pinned-edge - The pinned body cell next to the scrolling columns (one per pinned side).\n * @csspart skeleton - The placeholder bar in each cell of a row that is still loading.\n * @csspart skeleton-error - Added to `skeleton` in a row whose page failed to load.\n * @csspart retry - The Retry button in the first cell of a failed page's first visible row.\n * @csspart empty - The empty-state container.\n *\n * @cssprop [--argus-bg=Canvas] - Background of the table and rows.\n * @cssprop [--argus-fg=CanvasText] - Text colour.\n * @cssprop [--argus-font=inherit] - Font shorthand for the table.\n * @cssprop [--argus-header-bg] - Header background.\n * @cssprop [--argus-header-fg=inherit] - Header text colour.\n * @cssprop [--argus-border-color] - Colour of the row borders.\n * @cssprop [--argus-border-width=1px] - Width of the row borders.\n * @cssprop [--argus-outline=none] - Border around the whole table, as a `border` shorthand (`1px solid …`). Inside the element's size.\n * @cssprop [--argus-radius=0] - Corner radius of the table. Header, rows and pinned columns are clipped to it.\n * @cssprop [--argus-row-height] - Height of a row. Default per density: 32px, 40px, 52px.\n * @cssprop [--argus-cell-padding-inline] - Inline padding of cells. Default per density: 8px, 12px, 16px.\n * @cssprop [--argus-row-stripe-bg] - Background of odd rows. Default: no stripes.\n * @cssprop [--argus-pinned-shadow] - Shadow on the pinned edge, as a `box-shadow` falling toward the end side (`4px 0 6px -4px …`). Mirrored for the end edge and in RTL; `none` removes it.\n * @cssprop [--argus-resize-handle-color] - Colour of the resize handle's line, shown on hover, focus and drag.\n * @cssprop [--argus-focus-ring=2px solid Highlight] - Outline of the focused header or cell.\n * @cssprop [--argus-drop-indicator-color=Highlight] - Colour of the line that marks where a dragged column would land.\n * @cssprop [--argus-row-hover-bg] - Background of the hovered row. Default: no change.\n * @cssprop [--argus-pinned-row-bg=var(--argus-bg)] - Background of the pinned rows, pinned columns included.\n * @cssprop [--argus-skeleton-bg] - Colour of the skeleton bars in rows still loading. Default: the text colour at low opacity.\n * @cssprop [--argus-row-selected-bg] - Reserved for row selection, which comes after v0.1. The table doesn't read it yet.\n */\n@customElement('argus-table')\nexport class ArgusTable<T = unknown> extends LitElement {\n static override styles: CSSResultGroup = baseStyles;\n\n /**\n * Column definitions. Property only: functions can't be attributes. While empty,\n * the table reads its `<argus-column>` children instead. `null` or `undefined`\n * means `[]`.\n */\n @property({ attribute: false })\n get columns(): readonly ColumnDef<T>[] {\n return this.#columnsProp;\n }\n set columns(value: readonly ColumnDef<T>[] | null | undefined) {\n // Framework bindings set `undefined` when a prop goes away.\n this.#columnsProp = value ?? [];\n }\n\n /**\n * The rows to show. Replace the array to update; changes inside it aren't\n * detected. `null` or `undefined` means `[]`.\n */\n @property({ attribute: false })\n get data(): readonly T[] {\n return this.#dataProp;\n }\n set data(value: readonly T[] | null | undefined) {\n this.#dataProp = value ?? [];\n }\n\n /**\n * Loads rows page by page as they scroll into view, instead of `data`:\n * `{ getRows({ start, end, sorting, signal }), pageSize? }`, where `end` is\n * exclusive and `getRows` resolves to `{ rows, total? }`. Without a `total`,\n * the table grows as pages arrive and a short page marks the end. Sorting\n * happens on the server: a new order reloads from the top. While set, it wins\n * over `data`. Replace the object to change `getRows` or `pageSize`.\n */\n @property({ attribute: false })\n dataSource?: DataSource<T>;\n\n /**\n * Rows fixed below the header (`top`) and at the bottom of the view (`bottom`),\n * such as a totals row: `{ top?: T[], bottom?: T[] }`. They are separate\n * objects, not rows of `data`: columns read them the same way, but they are\n * never sorted and work the same with a `dataSource`. A `cell` function gets\n * `pinned: 'top' | 'bottom'` in its context. Replace the object to update.\n */\n @property({ attribute: false })\n pinnedRows?: PinnedRows<T>;\n\n /** Returns a stable id for a row. Default: the row's index (in `data`, or among all `dataSource` rows). */\n @property({ attribute: false })\n getRowId?: (row: T, index: number) => string;\n\n /** Row height in px. Unset: the density (or the `--argus-row-height` token) decides. */\n @property({ attribute: 'row-height', type: Number })\n rowHeight?: number;\n\n /** Row density: `compact`, `comfortable` or `spacious`. */\n @property({ reflect: true })\n density: Density = 'comfortable';\n\n /** Rows rendered above and below the visible ones. `null` or `undefined` means the default, 6. */\n @property({ type: Number })\n get overscan(): number {\n return this.#overscan;\n }\n set overscan(value: number | null | undefined) {\n this.#overscan = value ?? 6;\n }\n\n /**\n * The sort order, e.g. `[{ id: 'total', desc: true }]`; `[]` when unsorted. Unset,\n * the table keeps it itself and header clicks change it. Once set, it is\n * controlled: a click only fires `argus-sort-change` with the proposed order,\n * and nothing changes until you set the property. Set `undefined` to hand it back.\n */\n @property({ attribute: false })\n get sorting(): SortState {\n return this.#sorting.value;\n }\n set sorting(value: SortState | undefined) {\n // Lit wraps this accessor and requests the update with the old value.\n this.#sorting.set(value);\n }\n\n /**\n * Resized widths in px by column id, e.g. `{ name: 240 }`. A resized flex column\n * becomes fixed. Uncontrolled until set, like `sorting`: once set, a resize only\n * fires `argus-column-resize` with the proposed widths. `undefined` hands it back.\n */\n @property({ attribute: false })\n get columnSizing(): ColumnSizingState {\n return this.#sizing.value;\n }\n set columnSizing(value: ColumnSizingState | undefined) {\n this.#sizing.set(value);\n }\n\n /**\n * The column order: column ids as the table shows them, e.g.\n * `['id', 'total', 'customer']`. `[]` (the default) keeps the order of `columns`.\n * Each pin group (start-pinned, scrolling, end-pinned) takes its columns in this\n * order; unknown ids are ignored and columns it doesn't list follow the listed\n * ones of their group. After a move it holds every column id. Uncontrolled\n * until set, like `sorting`: once set, a move only fires `argus-column-reorder`\n * with the proposed order. `undefined` hands it back.\n */\n @property({ attribute: false })\n get columnOrder(): ColumnOrderState {\n return this.#order.value;\n }\n set columnOrder(value: ColumnOrderState | undefined) {\n this.#order.set(value);\n }\n\n #columnsProp: readonly ColumnDef<T>[] = [];\n #dataProp: readonly T[] = [];\n #overscan = 6;\n readonly #sorting = controllable<SortState>([]);\n readonly #sizing = controllable<ColumnSizingState>({});\n readonly #order = controllable<ColumnOrderState>([]);\n /** Moves the table applied itself, by column; their events fire once the update is done. */\n readonly #appliedReorders = new Map<string, ColumnReorderDetail>();\n /** The header being dragged to a new position, if any. */\n #drag: HeaderDrag | undefined;\n /** A move from the keyboard, announced once it has rendered: the column and its old position. */\n #announceMove: { id: string; from: number } | undefined;\n /** Resizes the table applied itself, by column; their events fire once the update is done. */\n readonly #appliedResizes = new Map<string, ColumnResizeDetail>();\n /** Measured widths of `width: 'auto'` columns. */\n readonly #autoWidths = new AutoWidths(() => {\n this.requestUpdate();\n });\n /** The auto widths last passed to the model; a change re-measures the pinned columns' offsets. */\n #pushedAutoWidths: ColumnSizingState | undefined;\n #autoWidthsChanged = false;\n /** A sort the table applied itself; its event fires once the update is done. */\n #appliedSort: SortState | undefined;\n readonly #internals = attachGridInternals(this);\n readonly #table = new TableController<T>();\n readonly #children = new ColumnChildrenController<T>(this);\n /** The columns last passed to the model: `columns`, or the `<argus-column>` children. */\n #columns: readonly ColumnDef<T>[] = [];\n #columnsChanged = false;\n #warnedColumns = false;\n /** End of the light-DOM part holding cell content, so later children stay outside it. */\n #contentEnd: Comment | undefined;\n readonly #data = new DataController<T>(this);\n /** Scroll back to the top after the update (a new sort order for a data source). */\n #scrollToTop = false;\n // Looked up lazily: the virtualizer's hostUpdated runs before firstUpdated.\n readonly #virtual = new VirtualController(this, () =>\n this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]'),\n );\n readonly #pinScroll = new PinScrollController(this, () =>\n this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]'),\n );\n #rowPx = 40;\n #probeObserver?: ResizeObserver;\n #window: VirtualWindow = { rows: [], totalSize: 0, range: null };\n #active: Active | undefined;\n /** Move focus to the active cell after the next update (keyboard navigation). */\n #focusPending = false;\n #lastRange = '';\n #unwatchMaxHeight: (() => void) | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) this.setAttribute('role', 'grid');\n if (this.hasUpdated) this.#observeProbe();\n // A zoom change changes the tallest body the engine renders.\n this.#unwatchMaxHeight = watchMaxElementHeight(() => {\n this.requestUpdate();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#probeObserver?.disconnect();\n this.#unwatchMaxHeight?.();\n this.#unwatchMaxHeight = undefined;\n }\n\n /**\n * `columns` when it has any, otherwise the `<argus-column>` children. Keeps its\n * identity while neither changes, so the model is only rebuilt on a change.\n */\n #effectiveColumns(): readonly ColumnDef<T>[] {\n if (this.columns.length === 0) return this.#children.defs;\n if (!this.#warnedColumns && this.#children.present) {\n this.#warnedColumns = true;\n console.warn(\n 'argus-table: the columns property is set, so <argus-column> children are ignored.',\n );\n }\n return this.columns;\n }\n\n /**\n * The node the light-DOM content is rendered before. Lit's part then ends there,\n * so children appended later (an `<argus-column>`) never land inside it. If the\n * marker was removed (say by `innerHTML`), a new one starts a fresh part.\n */\n #lightDomEnd(): Comment {\n if (this.#contentEnd?.parentNode !== this) {\n this.#contentEnd = document.createComment('');\n this.append(this.#contentEnd);\n }\n return this.#contentEnd;\n }\n\n /**\n * With a `dataSource`, drops every loaded page and loads the rows in view\n * again, keeping the scroll position. With `data`, re-renders the cells (after\n * changing row objects in place). Resolves once the table has re-rendered;\n * reloaded rows arrive as their pages load.\n */\n async refresh(): Promise<void> {\n this.#data.refresh();\n this.requestUpdate();\n await this.updateComplete;\n }\n\n /**\n * Fits columns to their content: the header, the pinned rows and the body rows\n * rendered now (rows out of view aren't measured). It resizes them like a drag\n * would, so `argus-column-resize` fires for each column that changes, and with a\n * controlled `columnSizing` nothing changes until you set it. Without `ids`, fits\n * every resizable column; columns with `resizable: false` keep their width.\n * Resolves once the table has re-rendered.\n */\n async autosizeColumns(ids?: readonly string[]): Promise<void> {\n await this.updateComplete;\n const targets = this.#table.model.columns\n .filter((c) => c.resizable && (ids === undefined || ids.includes(c.id)))\n .map((c) => c.id);\n this.#requestResizes(measureColumns(this.renderRoot, targets));\n await this.updateComplete;\n }\n\n /** Scrolls so that the row at `index` (in the current row order) is at the top. */\n async scrollToRow(index: number): Promise<void> {\n await this.updateComplete;\n this.#virtual.scrollToIndex(index);\n await this.updateComplete;\n }\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n const columns = this.#effectiveColumns();\n this.#columnsChanged = columns !== this.#columns;\n this.#columns = columns;\n if (changed.has('dataSource') || changed.has('sorting') || changed.has('getRowId')) {\n this.#data.configure({\n source: this.dataSource,\n sorting: this.#sorting.value,\n getRowId: this.getRowId,\n });\n // A new order starts over from the first row, so show it.\n if (this.dataSource && this.hasUpdated && changed.has('sorting')) {\n this.#scrollToTop = !changed.has('dataSource');\n }\n }\n if (\n this.#columnsChanged ||\n changed.has('data') ||\n changed.has('getRowId') ||\n changed.has('sorting') ||\n changed.has('columnSizing') ||\n changed.has('columnOrder') ||\n changed.has('pinnedRows')\n ) {\n if (this.#columnsChanged) {\n this.#autoWidths.sync(columns.filter((c) => c.width === 'auto').map((c) => c.id));\n }\n this.#table.update({\n columns,\n data: this.data,\n getRowId: this.getRowId,\n sorting: this.#sorting.value,\n columnSizing: this.#sizing.value,\n columnOrder: this.#order.value,\n pinnedRows: this.pinnedRows,\n });\n }\n // A new page cache (new source, sort order or refresh) or none, and new measured widths.\n const autoWidths = this.#autoWidths.widths;\n this.#autoWidthsChanged = autoWidths !== this.#pushedAutoWidths;\n this.#pushedAutoWidths = autoWidths;\n this.#table.update({ remote: this.#data.rows, autoWidths });\n const model = this.#table.model;\n this.#reconcileActive(model);\n const active = this.#active;\n // -1 tells assistive tech the total is unknown (a data source still growing).\n const unknownTotal = this.#data.rows?.totalKnown === false;\n const layout = layoutOf(model);\n this.#internals.ariaRowCount = unknownTotal ? '-1' : String(layout.total);\n this.#internals.ariaColCount = String(model.columns.length);\n // The header and pinned rows scroll with the body, one row each.\n const extra = (1 + layout.top + layout.bottom) * this.#rowPx;\n this.#virtual.configure({\n count: model.rowCount,\n rowHeight: this.#rowPx,\n cap: bodyCap(model.rowCount * this.#rowPx, extra),\n overscan: Math.max(0, this.overscan),\n rowIdAt: (index) => this.#rowId(model, index),\n // The active body row stays rendered, so the tab stop and focus survive scrolling.\n keep:\n active?.section !== 'body' || active.rowId === undefined\n ? undefined\n : { id: active.rowId, index: active.index },\n });\n }\n\n protected override render(): TemplateResult {\n const model = this.#table.model;\n const columns = model.columns;\n this.#window = this.#virtual.computeWindow();\n const pinnedWidth = (side: 'start' | 'end') =>\n columns.reduce((sum, c) => (c.pin === side ? sum + c.width : sum), 0);\n const pinned = (side: 'start' | 'end') => `${String(pinnedWidth(side))}px`;\n const layout = layoutOf(model);\n const style: Record<string, string> = {\n '--_cols': columns.map(track).join(' '),\n '--_width': `${String(model.totalWidth)}px`,\n '--_pin-start': pinned('start'),\n '--_pin-end': pinned('end'),\n '--_pin-top-rows': String(layout.top),\n '--_pin-bottom-rows': String(layout.bottom),\n };\n const active = this.#active;\n const activeIn = (section: GridRow['section']): ActiveCell | undefined =>\n active?.section === section ? { index: active.index, col: active.col } : undefined;\n const firstIndex = (section: GridRow['section']) => layout.ariaRowIndex({ section, index: 0 });\n if (this.rowHeight !== undefined && this.rowHeight > 0) {\n style['--_row-height'] = `${String(this.rowHeight)}px`;\n }\n return html`<div\n part=\"table\"\n role=\"presentation\"\n style=${styleMap(style)}\n ?data-dragging=${this.#drag !== undefined}\n @keydown=${this.#onKeydown}\n @focusin=${this.#onFocusin}\n @click=${this.#onClick}\n >\n ${renderHeader(columns, this.#headerHandlers, activeIn('header')?.col, this.#drag)}\n ${renderPinnedRows('top', layout.top, columns, firstIndex('top'), activeIn('top'))}\n ${\n model.rowCount === 0\n ? html`<div part=\"empty\"><slot name=\"empty\">No rows</slot></div>`\n : renderBody(\n this.#window.rows,\n columns,\n this.#window.totalSize,\n activeIn('body'),\n firstIndex('body'),\n this.#loading(),\n )\n }\n ${renderPinnedRows('bottom', layout.bottom, columns, firstIndex('bottom'), activeIn('bottom'))}\n <div class=\"probe\" aria-hidden=\"true\"></div>\n </div>\n ${pinShadow('start', pinnedWidth('start'), layout.total - 1, this.#rowPx)}\n ${pinShadow('end', pinnedWidth('end'), layout.total - 1, this.#rowPx)}`;\n }\n\n protected override firstUpdated(): void {\n this.#observeProbe();\n this.#measureRowHeight();\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n const model = this.#table.model;\n renderLightDom(this, model, this.#window.rows, this.#lightDomEnd());\n this.#measureAutoWidths(model);\n if (this.#scrollToTop) {\n this.#scrollToTop = false;\n const scroller = this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]');\n if (scroller) scroller.scrollTop = 0;\n }\n if (\n this.#columnsChanged ||\n changed.has('columnSizing') ||\n changed.has('columnOrder') ||\n this.#autoWidthsChanged\n ) {\n this.#pinScroll.measure();\n }\n if (this.#focusPending) {\n this.#focusPending = false;\n this.#focusActive();\n }\n if (changed.has('density') || changed.has('rowHeight')) this.#measureRowHeight();\n if (this.#appliedResizes.size > 0) {\n const details = [...this.#appliedResizes.values()];\n this.#appliedResizes.clear();\n for (const detail of details) fire(this, COLUMN_RESIZE, detail);\n }\n if (this.#announceMove) {\n this.#announceMoved(model, this.#announceMove);\n this.#announceMove = undefined;\n }\n if (this.#appliedReorders.size > 0) {\n const details = [...this.#appliedReorders.values()];\n this.#appliedReorders.clear();\n for (const detail of details) fire(this, COLUMN_REORDER, detail);\n }\n if (this.#appliedSort) {\n const sorting = this.#appliedSort;\n this.#appliedSort = undefined;\n fire(this, SORT_CHANGE, { sorting });\n }\n const { range } = this.#window;\n const key = range ? `${String(range.start)}:${String(range.end)}` : '';\n if (range && key !== this.#lastRange) {\n this.#lastRange = key;\n fire(this, RANGE_CHANGE, { start: range.start, end: range.end });\n }\n if (range) {\n // The rendered rows: visible plus overscan, end exclusive.\n const over = Math.max(0, this.overscan);\n this.#data.request(Math.max(0, range.start - over), range.end + 1 + over);\n }\n for (const detail of this.#data.takeErrors()) fire(this, LOAD_ERROR, detail);\n }\n\n /**\n * Measures the `width: 'auto'` columns once loaded body rows render, or right\n * away when there are no rows (the header and pinned rows only). While a data\n * source's first rows load, they keep the default width. A changed width\n * renders once more.\n */\n #measureAutoWidths(model: TableModel<T, CellContent>): void {\n const loaded = this.#window.rows.some((r) => model.rowAt(r.index) !== undefined);\n if (!loaded && model.rowCount > 0) return;\n if (this.#autoWidths.measure(this.renderRoot, model.columns, loaded)) this.requestUpdate();\n }\n\n /**\n * Loading state for the body while a data source is set: the state of each\n * row, and a Retry button on the first visible row of each failed page.\n */\n #loading(): Loading | undefined {\n const cache = this.#data.rows;\n if (!cache) return undefined;\n const top = this.#window.range?.start ?? 0;\n const firstByPage = new Map<number, number>();\n for (const { index } of this.#window.rows) {\n if (index < top || cache.stateAt(index) !== 'error') continue;\n const page = cache.pageOf(index);\n const first = firstByPage.get(page);\n if (first === undefined || index < first) firstByPage.set(page, index);\n }\n const retry = new Map<number, string>();\n for (const [page, index] of firstByPage) {\n const start = page * cache.pageSize;\n const end = Math.min(start + cache.pageSize, cache.rowCount);\n retry.set(index, `Retry loading rows ${String(start + 1)} to ${String(end)}`);\n }\n return { stateAt: (index) => cache.stateAt(index), retry, onRetry: this.#onRetry };\n }\n\n readonly #onRetry = (event: Event) => {\n const button = event.currentTarget as HTMLElement;\n // The button goes away with the retry; keep focus in the grid, on its cell.\n if (button.matches(':focus')) button.parentElement?.focus({ preventScroll: true });\n this.#data.retry(Number(button.dataset.row));\n };\n\n /**\n * A row's id. A data source row that hasn't loaded gets a stand-in: the\n * active cell's row id if it sits there (so its DOM and focus stay put), else\n * the index, which is also its real id when there is no `getRowId`.\n */\n #rowId(model: TableModel<T, CellContent>, index: number): string {\n const id = model.rowAt(index)?.id;\n if (id !== undefined) return id;\n const active = this.#active;\n if (active?.index === index && active.rowId !== undefined) return active.rowId;\n return this.#placeholderId(index);\n }\n\n /** The id of an unloaded row: its index, or a reserved string if `getRowId` makes the ids. */\n #placeholderId(index: number): string {\n return this.getRowId ? `\\u0000${String(index)}` : String(index);\n }\n\n readonly #headerHandlers = {\n click: (event: MouseEvent) => {\n const id = sortColumnOf(event);\n if (id !== undefined) this.#requestSort(id);\n },\n pointerdown: (event: PointerEvent) => {\n if (event.button !== 0) return;\n const handle = event.composedPath()[0];\n if (!(handle instanceof HTMLElement)) return;\n const id = handle.dataset.resizeCol;\n const cell = handle.parentElement;\n if (id !== undefined && cell) {\n startResizeDrag(\n handle,\n event,\n cell.getBoundingClientRect().width,\n this.#direction(),\n (w) => {\n this.#requestResize(id, w);\n },\n );\n return;\n }\n this.#startReorder(event);\n },\n /** A double-click on a resize handle fits the column to its rendered content. */\n dblclick: (event: MouseEvent) => {\n const handle = event.composedPath()[0];\n const id = handle instanceof HTMLElement ? handle.dataset.resizeCol : undefined;\n if (id === undefined) return;\n this.#requestResizes(measureColumns(this.renderRoot, [id]));\n },\n };\n\n /**\n * Keys on a focused cell or header: arrows by cell, Home/End along the row,\n * PageUp/PageDown by a page of rows (the view scrolls with it), Ctrl+Home/End\n * (or Cmd) to the first header and the last cell. Keys from content inside a\n * cell (an input, a button) are left to that content.\n */\n readonly #onKeydown = (event: KeyboardEvent) => {\n const cell = gridCell(event.composedPath()[0] ?? event.target ?? this);\n const id = cell?.dataset.col;\n if (!cell || id === undefined) return;\n const scroller = event.currentTarget as HTMLElement;\n if (event.key === 'Tab' && event.shiftKey) {\n // Firefox makes the scroll container a tab stop, so Shift+Tab would stop\n // on it before leaving the grid. Take it out of the tab order for this\n // one move only: a tabindex there for good would expose it as a node of\n // its own between the grid and its rows.\n scroller.tabIndex = -1;\n // Put it back once focus has actually moved (a timer can run first).\n cell.addEventListener(\n 'focusout',\n () => {\n scroller.removeAttribute('tabindex');\n },\n { once: true },\n );\n return;\n }\n const inHeader = cell.getAttribute('role') === 'columnheader';\n const { key } = event;\n const arrow = key === 'ArrowLeft' || key === 'ArrowRight';\n if (inHeader && arrow && event.altKey && event.shiftKey) {\n event.preventDefault();\n // Logical: the arrow pointing toward the inline end moves the column that way.\n const towardEnd = (key === 'ArrowRight') === (this.#direction() === 1);\n this.#moveByKey(id, towardEnd ? 1 : -1);\n return;\n }\n if (inHeader && event.altKey && arrow) {\n event.preventDefault();\n // Logical: the arrow pointing toward the inline end grows the column.\n const towardEnd = (key === 'ArrowRight') === (this.#direction() === 1);\n this.#requestResize(\n id,\n this.#currentWidth(id, cell) + (towardEnd ? RESIZE_STEP : -RESIZE_STEP),\n );\n return;\n }\n if (inHeader && (key === 'Enter' || key === ' ') && cell.dataset.sortCol !== undefined) {\n event.preventDefault();\n this.#requestSort(id);\n return;\n }\n // Ctrl (Cmd on macOS) only goes with Home and End: to the corners.\n const corner = event.ctrlKey || event.metaKey;\n if (event.altKey || event.shiftKey || (corner && key !== 'Home' && key !== 'End')) return;\n const model = this.#table.model;\n const layout = layoutOf(model);\n const from = inHeader ? HEADER : gridRowOf(cell.parentElement, layout);\n if (!from) return;\n if (!inHeader && key === 'Enter') {\n // Enter on a body cell does what a click does; on a failed row, it retries.\n event.preventDefault();\n if (from.section === 'body' && this.#data.stateAt(from.index) === 'error') {\n this.#data.retry(from.index);\n } else {\n this.#activate(event.composedPath());\n }\n return;\n }\n const columns = model.columns;\n // Rows step by grid position: header, pinned top, body, pinned bottom.\n let pos = layout.position(from);\n const last = layout.total - 1;\n const bodyFirst = layout.position({ section: 'body', index: 0 });\n const bodyLast = bodyFirst + layout.body - 1;\n // Whole rows between the sticky header and pinned rows (each one row tall).\n const fit = Math.floor(scroller.clientHeight / this.#rowPx + 0.01);\n const page = Math.max(1, fit - 1 - layout.top - layout.bottom);\n let col = columns.findIndex((c) => c.id === id);\n switch (key) {\n case 'PageDown':\n // Pages through the body: from above it, a page into it; it stops at its last row.\n if (layout.body > 0 && pos <= bodyLast) {\n pos = Math.min(Math.max(pos, bodyFirst - 1) + page, bodyLast);\n }\n break;\n case 'PageUp':\n // Stays in the body; ArrowUp or Ctrl+Home goes on to the rows above it.\n if (layout.body > 0 && pos > bodyFirst) {\n pos = Math.max(Math.min(pos, bodyLast + 1) - page, bodyFirst);\n }\n break;\n case 'ArrowDown':\n pos = Math.min(pos + 1, last);\n break;\n case 'ArrowUp':\n pos = Math.max(pos - 1, 0);\n break;\n case 'ArrowRight':\n col += this.#direction();\n break;\n case 'ArrowLeft':\n col -= this.#direction();\n break;\n case 'Home':\n col = 0;\n if (corner) {\n pos = 0;\n scroller.scrollTop = 0;\n }\n break;\n case 'End':\n col = columns.length - 1;\n if (corner) pos = last;\n break;\n default:\n return;\n }\n event.preventDefault();\n const row = layout.at(pos) ?? HEADER;\n // PageUp/PageDown scroll by as many rows as focus moved, so the focused cell\n // keeps its place on screen. The ends clamp; focusing scrolls the rest of\n // the way. Through the virtualizer: a scaled body's px aren't rows.\n if (key.startsWith('Page') && from.section === 'body' && row.section === 'body') {\n this.#virtual.scrollBy((row.index - from.index) * this.#rowPx);\n }\n // Ctrl+End onto a bottom pinned row: show the end of the body too, as\n // Ctrl+Home shows its start.\n if (corner && key === 'End' && row.section === 'bottom') {\n scroller.scrollTop = scroller.scrollHeight;\n }\n const target = columns[Math.min(Math.max(col, 0), columns.length - 1)];\n if (target) this.#moveTo(row, target.id, model);\n };\n\n /** Focus that lands in a cell (a click, or content inside it) makes that cell active. */\n readonly #onFocusin = (event: FocusEvent) => {\n // Tab into the grid landed on the scroll container (Firefox makes it a tab\n // stop): move on to the grid's one tab stop, the active cell. Only when focus\n // came from outside the grid: coming from inside means the user is leaving,\n // and sending them back would trap the keyboard.\n const scroller = event.currentTarget as HTMLElement;\n if (event.composedPath()[0] === scroller) {\n const from = event.relatedTarget;\n if (!(from instanceof Node && scroller.contains(from))) {\n this.#focusPending = true;\n this.requestUpdate();\n }\n return;\n }\n for (const target of event.composedPath()) {\n const cell = gridCell(target);\n if (cell?.dataset.col !== undefined) {\n const model = this.#table.model;\n const row =\n cell.getAttribute('role') === 'columnheader'\n ? HEADER\n : gridRowOf(cell.parentElement, layoutOf(model));\n const { col } = cell.dataset;\n const prev = this.#active;\n if (\n row &&\n (row.section !== prev?.section || row.index !== prev.index || col !== prev.col)\n ) {\n this.#active = { ...row, rowId: this.#gridRowId(model, row), col };\n this.requestUpdate();\n }\n return;\n }\n if (target === event.currentTarget) return;\n }\n };\n\n /** `argus-cell-click`, then `argus-row-click`, for clicks in the body. */\n readonly #onClick = (event: MouseEvent) => {\n this.#activate(event.composedPath());\n };\n\n /**\n * Fires `argus-cell-click` (when a cell is on the path), then `argus-row-click`,\n * for the body or pinned row on an event path. Clicks and Enter on a cell use\n * it. Rows that haven't loaded and the header fire nothing.\n */\n #activate(path: EventTarget[]): void {\n let columnId: string | undefined;\n for (const target of path) {\n if (!(target instanceof HTMLElement)) continue;\n const role = target.getAttribute('role');\n if (role === 'gridcell') columnId = target.dataset.col;\n if (role !== 'row') continue;\n const model = this.#table.model;\n const at = gridRowOf(target, layoutOf(model));\n if (!at || at.section === 'header') return;\n const { index } = at;\n if (at.section === 'body') {\n const row = model.rowAt(index);\n if (!row) return;\n if (columnId !== undefined) {\n fire(this, CELL_CLICK, {\n row: row.original,\n columnId,\n value: model.valueAt(index, columnId),\n });\n }\n fire(this, ROW_CLICK, { row: row.original, rowId: row.id, index });\n return;\n }\n const pinned = at.section;\n const row = model.pinnedRowAt(pinned, index);\n if (!row) return;\n if (columnId !== undefined) {\n fire(this, CELL_CLICK, {\n row: row.original,\n columnId,\n value: model.pinnedValueAt(pinned, index, columnId),\n pinned,\n });\n }\n fire(this, ROW_CLICK, { row: row.original, rowId: row.id, index, pinned });\n return;\n }\n }\n\n /** The id of a grid row: a body or pinned row's id; none for the header. */\n #gridRowId(model: TableModel<T, CellContent>, row: GridRow): string | undefined {\n switch (row.section) {\n case 'header':\n return undefined;\n case 'body':\n return this.#rowId(model, row.index);\n default:\n return model.pinnedRowAt(row.section, row.index)?.id;\n }\n }\n\n /** Makes a cell active and focuses it after the update. The keep-rendered rule renders its row. */\n #moveTo(row: GridRow, col: string, model: TableModel<T, CellContent>): void {\n this.#active = { ...row, rowId: this.#gridRowId(model, row), col };\n this.#focusPending = true;\n this.requestUpdate();\n }\n\n #focusActive(): void {\n const active = this.#active;\n if (!active) return;\n const col = CSS.escape(active.col);\n // aria-rowindex is unique across the grid: header, pinned and body rows.\n const index = layoutOf(this.#table.model).ariaRowIndex(active);\n const cell = this.renderRoot.querySelector<HTMLElement>(\n `[role='row'][aria-rowindex=\"${String(index)}\"] > [data-col=\"${col}\"]`,\n );\n if (!cell) return;\n cell.focus({ preventScroll: true });\n // A scaled body moves `ratio` px of rows per px scrolled, so the browser can't\n // scroll a body row into view: the virtualizer does, and the next update\n // (from its scroll) shows the row and scrolls sideways.\n if (active.section === 'body' && this.#virtual.scaled) {\n const layout = layoutOf(this.#table.model);\n const before = (1 + layout.top) * this.#rowPx;\n if (this.#virtual.reveal(active.index, before, layout.bottom * this.#rowPx)) {\n this.#focusPending = true;\n return;\n }\n }\n cell.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n\n /**\n * Keeps the active cell valid after columns or rows change. In the body: on the\n * same row id when it still exists (it may have moved), else at the same\n * index, clamped. A data source row that isn't loaded (yet, or any more) keeps\n * its id. A pinned row stays at its index, clamped to its list. A row whose\n * section has no rows left gives way to the header, the default. If its row\n * went away while the grid had focus, focus follows to the replacement.\n */\n #reconcileActive(model: TableModel<T, CellContent>): void {\n const columns = model.columns;\n const first = columns[0];\n if (!first) {\n this.#active = undefined;\n return;\n }\n const prev = this.#active ?? { ...HEADER, rowId: undefined, col: first.id };\n const col = columns.some((c) => c.id === prev.col) ? prev.col : first.id;\n let { section, index, rowId } = prev;\n let moved = false;\n if (section === 'body' && rowId !== undefined) {\n const found = model.indexOf(rowId);\n const unloaded = index < model.rowCount && model.rowAt(index) === undefined;\n if (found !== undefined) {\n index = found;\n } else if (!unloaded) {\n index = Math.min(index, model.rowCount - 1);\n rowId = index >= 0 ? (model.rowAt(index)?.id ?? this.#placeholderId(index)) : undefined;\n moved = true;\n }\n } else if (section === 'top' || section === 'bottom') {\n const count = model.pinnedCount(section);\n if (index >= count) {\n index = count - 1;\n moved = true;\n }\n rowId = index >= 0 ? model.pinnedRowAt(section, index)?.id : undefined;\n }\n if (index < 0) {\n ({ section, index } = HEADER);\n rowId = undefined;\n }\n if (moved && this.matches(':focus-within')) this.#focusPending = true;\n if (\n section !== prev.section ||\n index !== prev.index ||\n rowId !== prev.rowId ||\n col !== prev.col ||\n !this.#active\n ) {\n this.#active = { section, index, rowId, col };\n }\n }\n\n /**\n * The width a resize starts from: the latest requested width (key presses can\n * come faster than renders), else the model's fixed width, else the rendered\n * width of a flex column.\n */\n #currentWidth(columnId: string, cell: HTMLElement): number {\n const sized = this.#sizing.value[columnId];\n if (sized !== undefined) return sized;\n const view = this.#table.model.columns.find((c) => c.id === columnId);\n return view && view.flex === undefined ? view.width : cell.getBoundingClientRect().width;\n }\n\n #direction(): 1 | -1 {\n return getComputedStyle(this).direction === 'rtl' ? -1 : 1;\n }\n\n /** Sets one column's width (clamped by core), through the controlled/uncontrolled rules. */\n #requestResize(columnId: string, width: number): void {\n this.#requestResizes(new Map([[columnId, width]]));\n }\n\n /**\n * Sets column widths (clamped by core) in one change, through the\n * controlled/uncontrolled rules. One `argus-column-resize` per column that\n * changes, each with the whole new sizing.\n */\n #requestResizes(widths: ReadonlyMap<string, number>): void {\n const model = this.#table.model;\n const old = this.#sizing.value;\n const targets: [string, number][] = [];\n for (const [columnId, width] of widths) {\n const target = model.nextSizing(columnId, width)?.[columnId];\n if (target !== undefined && target !== old[columnId]) targets.push([columnId, target]);\n }\n if (targets.length === 0) return;\n const { value, applied } = this.#sizing.request({ ...old, ...Object.fromEntries(targets) });\n const details = targets.map(([columnId, width]) => ({ columnId, width, sizing: value }));\n if (applied) {\n // Only the latest width per column fires, all with the latest sizing.\n for (const detail of this.#appliedResizes.values()) detail.sizing = value;\n for (const detail of details) this.#appliedResizes.set(detail.columnId, detail);\n this.requestUpdate('columnSizing', old);\n } else {\n for (const detail of details) fire(this, COLUMN_RESIZE, detail);\n }\n }\n\n /**\n * Moves a column to position `to` in the whole order (within its pin group),\n * through the controlled/uncontrolled rules. Starts from the latest requested\n * order, so moves can come faster than renders. `false` if it can't move there.\n */\n #requestReorder(columnId: string, to: number): boolean {\n const old = this.#order.value;\n const next = this.#table.model.nextOrder(columnId, to, old);\n if (!next) return false;\n const { value, applied } = this.#order.request(next);\n if (applied) {\n for (const detail of this.#appliedReorders.values()) detail.order = value;\n this.#appliedReorders.set(columnId, { columnId, order: value });\n this.requestUpdate('columnOrder', old);\n } else {\n fire(this, COLUMN_REORDER, { columnId, order: value });\n }\n return true;\n }\n\n /** Alt+Shift+Arrow on a header: one step toward the start (-1) or the end (1). */\n #moveByKey(columnId: string, step: 1 | -1): void {\n const model = this.#table.model;\n const from = model.orderOf(this.#order.value).indexOf(columnId);\n const view = model.columns.find((c) => c.id === columnId);\n if (from < 0 || !view) return;\n if (!this.#requestReorder(columnId, from + step)) return;\n // The header node moves, which drops its focus: focus it again once rendered.\n this.#focusPending = true;\n this.#announceMove ??= { id: columnId, from: view.colIndex };\n this.requestUpdate();\n }\n\n /** Tells screen readers where a column moved from the keyboard went. */\n #announceMoved(model: TableModel<T, CellContent>, move: { id: string; from: number }): void {\n const view = model.columns.find((c) => c.id === move.id);\n if (!view || view.colIndex === move.from) return;\n const header = this.renderRoot.querySelector(\n `[role='columnheader'][data-col=\"${CSS.escape(move.id)}\"] > slot`,\n );\n const name =\n header instanceof HTMLSlotElement\n ? header\n .assignedNodes({ flatten: true })\n .map((n) => n.textContent)\n .join('')\n .trim()\n : '';\n announce(\n this.ownerDocument,\n `${name || move.id} moved to column ${String(view.colIndex)} of ${String(model.columns.length)}`,\n );\n }\n\n /** A press on a reorderable header: becomes a drag once the pointer moves. */\n #startReorder(down: PointerEvent): void {\n const cell = down\n .composedPath()\n .find(\n (t): t is HTMLElement =>\n t instanceof HTMLElement && t.getAttribute('role') === 'columnheader',\n );\n const columnId = cell?.dataset.moveCol;\n if (!cell || columnId === undefined || !canStartReorder(down, cell)) return;\n const scroller = this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]');\n if (!scroller) return;\n const pin = this.#table.model.columns.find((c) => c.id === columnId)?.pin;\n startReorderDrag(cell, down, {\n scroller,\n targetAt: (x) => dropTarget(this.#dropSlots(pin), columnId, x, this.#direction()),\n scrollArea: () => (pin === undefined ? this.#scrollArea(scroller) : undefined),\n onStart: () => {\n this.#drag = { columnId, target: undefined };\n this.requestUpdate();\n },\n onTarget: (target) => {\n this.#drag = { columnId, target };\n this.requestUpdate();\n },\n onDrop: (target) => {\n this.#drag = undefined;\n if (target && this.#requestReorder(columnId, target.to)) {\n // The header node moves, which drops its focus: focus it again once rendered.\n if (this.matches(':focus-within')) this.#focusPending = true;\n }\n this.requestUpdate();\n },\n onCancel: () => {\n this.#drag = undefined;\n this.requestUpdate();\n },\n });\n }\n\n /** The rendered headers of one pin group, with their positions in the whole order. */\n #dropSlots(pin: ColumnView<T, CellContent>['pin']): DropSlot[] {\n const slots: DropSlot[] = [];\n this.#table.model.columns.forEach((c, index) => {\n if (c.pin !== pin) return;\n const cell = this.renderRoot.querySelector(\n `[role='columnheader'][data-col=\"${CSS.escape(c.id)}\"]`,\n );\n if (cell) slots.push({ id: c.id, index, rect: cell.getBoundingClientRect() });\n });\n return slots;\n }\n\n /** Where the scrolling columns show: the scroller's inside, less the pinned columns. */\n #scrollArea(scroller: HTMLElement): { left: number; right: number } {\n const columns = this.#table.model.columns;\n const width = (side: 'start' | 'end') =>\n columns.reduce((sum, c) => (c.pin === side ? sum + c.width : sum), 0);\n const ltr = this.#direction() === 1;\n const left = scroller.getBoundingClientRect().left + scroller.clientLeft;\n return {\n left: left + width(ltr ? 'start' : 'end'),\n right: left + scroller.clientWidth - width(ltr ? 'end' : 'start'),\n };\n }\n\n /** asc → desc → unsorted, through the controlled/uncontrolled rules. */\n #requestSort(columnId: string): void {\n const next = this.#table.model.nextSorting(columnId);\n if (!next) return;\n const old = this.#sorting.value;\n const { value, applied } = this.#sorting.request(next);\n if (applied) {\n this.#appliedSort = value;\n this.requestUpdate('sorting', old);\n } else {\n fire(this, SORT_CHANGE, { sorting: value });\n }\n }\n\n #observeProbe(): void {\n const probe = this.renderRoot.querySelector('.probe');\n if (!probe) return;\n this.#probeObserver ??= new ResizeObserver(() => {\n this.#measureRowHeight();\n });\n this.#probeObserver.observe(probe);\n }\n\n /** Reads the resolved row height, so themes and density change the virtualizer too. */\n #measureRowHeight(): void {\n const probe = this.renderRoot.querySelector('.probe');\n const px = probe?.getBoundingClientRect().height ?? 0;\n if (px > 0 && Math.abs(px - this.#rowPx) > 0.01) {\n this.#rowPx = px;\n this.requestUpdate();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'argus-table': ArgusTable;\n }\n}\n"],"ignoreList":[0,1,2,3,4,5,6,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,63,64,65,66,67,68,72,73],"mappings":"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"}
1
+ {"version":3,"file":"argus-table.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","e","h","o","n","r","l","c","u","d","f","v","m","p","M","j","s","i","t","e","r","o","t","o","e","t","r","n","t","e","i","o","r","e","n","t","ReactiveElement","templateContent","_decorate","property","customElement","n","i","e","r","s","t","memo","orderByColumnPinning","orderByColumnPinning","o","c","u","s","t","r","l","p","h","v","o","i","n","f","e","nothing","styleMap","repeat","nothing","repeat","repeat","nothing","nothing","repeat","nothing","styleMap","LitElement","_decorate","property","customElement","t$4","e$4","s$3","o$6","n$5","o","t","e","s","r$4","i$6","S$1","n","c$4","i$5","e$3","h$2","r$3","o$5","n$4","a$1","c$3","l$2","p$2","d$2","u$3","i","f$2","b$1","y$1","h","r","t$3","i$4","s$2","e$2","h$1","o$4","n$3","r$2","l$1","c$2","a","u$2","d$1","f$1","v$1","_","m$1","p$1","g","$","y","b","E","A","C","P","V","N","l","c","u","d","f","x","S","v","I","L","z","H","M$1","R","k","Z","j$1","B","D","s$1","i$3","\"finalized\"","o$3","t$2","o$2","r$1","n$2","t$1","e$1","i$2","o$1","__decorate","target","desc","key","decorators","watchers","watchColumns","host","onChange","unwatchColumns","notify","parent","widthConverter","value","text","match","flagConverter","ArgusColumn","_args","#parent","#children","#def","template","n$1","i$1","pathCache","readPath","keys","path","source","finite","resolveColumns","seen","defs","def","index","minWidth","maxWidth","clamp","px","pin","flex","width","auto","fixed","base","getValue","accessor","row","groupOf","column","normalizeOrder","byId","columns","listed","groups","id","order","moveColumn","columnId","to","current","pinOf","group","first","last","next","functionalUpdate","updater","input","cloneState","proto","copy","makeObjectMap","hasOwn","obj","makeStateUpdater","instance","old","isPlainContainer","getEnumerableOwnKeys","MAX_STATE_COMPARE_DEPTH","stateSlicesEqual","stateSlicesEqualAtDepth","depth","keysA","keysB","recordA","recordB","setStateSlice","onChangeKey","isEqual","isFunction","flattenBy","flat","recurse","subArr","item","children","getChildren","arr","memo$1","deps","result","onBeforeCompare","newDeps","memoDeps","depArgs","depsChanged","onAfterCompare","onBeforeUpdate","fn","onAfterUpdate","skipFirstRun","hasRun","tableMemo","memoOptions","debugOptions","table","schedule","untrack","getFunctionNameInfo","parentName","fnKey","staticFnName","splitBy","assignTableAPIs","apis","assignPrototypeAPIs","memoKey","args","self","callMemoOrStaticFn","staticFn","cell_getValue","cell","cell_renderValue","cell_getContext","coreCellsFeature","prototype","getColumnPrototype","features","constructColumn","resolvedColumnDef","columnDef","accessorKey","accessorKeyString","accessorFn","originalRow","columnPrototype","initFns","getIsColumnVisible","getVisibleLeafColumns","getVisibleCells","getVisibleCellsByColumnId","orderLeafColumns","orderedTable","leafColumns","orderByColumnPinning$1","items","getColumnId","getItemsByColumnId","getPinnedVisibleLeafColumns","position","expandRowModel","rowModel","autoResetExpanded","autoResetPageIndex","autoResetSorting","autoResetCellSelection","column_getFlatColumns","col","column_getLeafColumns","table_getDefaultColumnDef","props","feature","constructColumns","columnDefs","groupingColumnDef","table_getAllColumns","table_getAllFlatColumns","table_getAllFlatColumnsById","flatColumns","table_getAllLeafColumns","table_getAllLeafColumnsById","table_getColumn","coreColumnsFeature","getHeaderPrototype","constructHeader","headerPrototype","header","options","getMaxHeaderDepth","maxDepth","formatHeaderGroupId","headerFamily","formatHeaderId","childHeaderId","countPendingHeadersForColumn","count","headers","constructHeaderGroup","headerGroup","pendingParentHeaders","headersToGroup","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","headerGroupInitFns","headerGroups","updateHeaderSpans","colSpan","j","child","rowSpan","chainChild","buildHeaderGroups","allColumns","bottomHeaders","columnsToGroup","collectLeafHeaders","leafHeaders","header_getLeafHeaders","header_getContext","table_getHeaderGroups","table_getFooterGroups","table_getFlatHeaders","table_getLeafHeaders","topHeaders","coreHeadersFeature","getRowPrototype","constructRow","rowPrototype","rowIndex","original","parentId","subRows","createCoreRowModel","_createCoreRowModel","accessRows","rows","originalRows","parentRow","data","table_getCoreRowModel","table_getPreFilteredRowModel","table_getFilteredRowModel","table_getPreGroupedRowModel","table_getGroupedRowModel","table_getPreSortedRowModel","table_getSortedRowModel","table_getPreExpandedRowModel","table_getExpandedRowModel","table_getPrePaginatedRowModel","table_getPaginatedRowModel","table_getRowModel","coreRowModelsFeature","getCellPrototype","constructCell","cellPrototype","row_getDisplayIndex","displayIndex","table_getRowsInDisplayOrder","row_getValue","row_getUniqueValues","row_renderValue","row_getLeafRows","table_getMaxSubRowDepth","row_getParentRow","row_getParentRows","parentRows","currentRow","row_getAllCells","cache","cells","row_getAllCellsByColumnId","table_getRowId","table_getRow","searchAll","rowId","coreRowsFeature","table_syncExternalStateToBaseAtoms","currentState","externalState","state","capturedState","baseAtom","rawExternalState","compare","table_publishExternalState","table_reset","snap","table_mergeOptions","newOptions","mergedOptions","descriptors","atoms","initialState","table_setOptions","coreFeatures","tableFeatures","atomToStore","store","atom","createReactiveSystem","link","prevDep","sub","dep","nextDep","version","prevSub","newLink","unlink","nextSub","unwatched","propagate","stack","flags","isValidLink","subSubs","checkDirty","checkDepth","dirty","update","subs","shallowPropagate","firstSub","hasMultipleSubs","checkLink","toObserver","isObserver","nextHandler","errorHandler","completionHandler","queuedEffects","cycle","effect","purgeDeps","notifyIndex","queuedEffectsLength","activeSub","batchDepth","batch","flush","depsTail","createAtom","isComputed","valueOrFn","getter","obs","observerOrFn","observed","oldValue","newValue","run","effectObj","shallow","objA","objB","getOwnKeys","getInitialTableState","constructTable","_reactivity","tableOptions","_columnMeta","_filterMeta","_tableMeta","featuresList","atomKey","_atom","wrappedAtom","syncExternal","syncAtomToWrappedSub","syncWrappedToAtomSub","stateKeys","externalAtom","reactiveState","controlledState","controlledValue","snapshot","getDefaultColumnPinningState","column_pin","columnIds","table_setColumnPinning","column_getCanPin","leafColumn","column_getIsPinned","start","end","column_getPinnedIndex","row_getCenterVisibleCells","allCells","startAndEnd","row_getStartVisibleCells","allVisibleCells","row_getEndVisibleCells","table_resetColumnPinning","defaultState","table_getIsSomeColumnsPinned","pinningState","table_getStartHeaderGroups","leafColumnsById","orderedLeafColumns","table_getEndHeaderGroups","table_getCenterHeaderGroups","table_getStartFooterGroups","table_getEndFooterGroups","table_getCenterFooterGroups","table_getStartFlatHeaders","leftHeaderGroups","table_getEndFlatHeaders","rightHeaderGroups","table_getCenterFlatHeaders","centerHeaderGroups","table_getStartLeafHeaders","table_getEndLeafHeaders","table_getCenterLeafHeaders","table_getStartLeafColumns","table_getEndLeafColumns","table_getCenterLeafColumns","table_getPinnedLeafColumns","table_getStartVisibleLeafColumns","table_getEndVisibleLeafColumns","table_getCenterVisibleLeafColumns","table_getPinnedVisibleLeafColumns","orderByColumnPinning","columnPinning","itemsByColumnId","ordered","columnPinningFeature","getDefaultColumnSizingState","getDefaultColumnSizingColumnDef","column_getSize","defaultSizes","columnSizing","columnSize","buildColumnOffsets","starts","afters","sizes","size","after","table_getColumnOffsets","toOffsetsKey","column_getStart","column_getAfter","column_resetSize","table_setColumnSizing","rest","sumHeaderSize","sum","header_getSize","header_getStart","prevSiblingHeader","table_resetColumnSizing","sumColumnSizes","table_getTotalSize","table_getStartTotalSize","table_getCenterTotalSize","table_getEndTotalSize","columnSizingFeature","reSplitAlphaNumeric","constructSortFn","sortFn","dataValueA","rowA","dataValueB","rowB","resolveDataValue","sortFn_alphanumeric","toString","dataValue","compareAlphanumeric","sortFn_text","compareBasic","sortFn_datetime","toDateSortValue","sortFn_basic","ai","bi","aLen","aStr","bLen","bStr","aIsNumeric","isDigit","bIsNumeric","aEnd","findChunkEnd","bEnd","stringComparison","compareStringChunks","numericComparison","compareNumericChunks","countRemainingChunks","charCode","str","isNumeric","aLength","aStart","bLength","bStart","minLength","aCode","bCode","aSignificantStart","bSignificantStart","aSignificantLength","bSignificantLength","an","parseSmallInt","bn","getDefaultSortingState","table_setSorting","table_resetSorting","table_autoResetSorting","column_getAutoSortFn","sortFns","firstRows","sortFnName","isString","column_getAutoSortDir","column_getSortFn","column_toggleSorting","nextSortingOrder","column_getNextSortingOrder","multi","column_getCanMultiSort","hasManualValue","existingIndex","existingSorting","newSorting","sortAction","nextDesc","isMultiMode","column_getFirstSortDir","firstSortDirection","isSorted","column_getIsSorted","column_getCanSort","columnSort","column_getSortIndex","column_clearSorting","column_getToggleSortingHandler","canSort","rowSortingFeature","storeReactivityBindings","sortedRowModel","sorting","prev","model","sortRows","sortKeys","read","resolve","sortUndefined","sorted","sign","defaultRowId","toTanStack","createTableModel","initial","resolved","tanStackById","views","sizing","sizingState","merged","orderState","rowViews","indexById","orderedColumns","pinned","side","buildViews","center","view","sort","entry","clamped","RowLayout","top","body","bottom","section","ariaRowIndex","controllable","controlled","RowPool","#size","#pinned","#slots","keep","ids","slot","#free","entries","ScrollScale","logical","#logical","cap","#cap","#landed","range","physical","landed","total","max","maxVisibleRows","viewHeight","rowHeight","steadyWindow","visible","maxVisible","endIndex","startIndex","overscan","PageCache","#getRowId","#rowCount","#totalKnown","#pages","#indexById","#failed","pages","page","#inFlight","asked","#drop","#setCount","known","region","announce","doc","message","measureColumns","wanted","widths","root","AutoWidths","#state","#fontsPending","#requestUpdate","requestUpdate","kept","due","hasLoadedRows","measured","fontsLoading","#remeasureAfterFonts","any","ColumnChildrenController","#host","#dirty","#defs","DataController","#timer","#abortAll","#range","#cache","#config","#reset","moved","#load","errors","#errors","carry","controller","#requests","margin","#fetch","pending","error","response","SETTLE_MS","PinScrollController","#scroller","scroller","#attach","#attached","#onScroll","#resize","shadow","#left","dropTarget","from","slots","draggedId","gap","direction","at","THRESHOLD","EDGE","MAX_SPEED","INTERACTIVE","canStartReorder","down","startReorderDrag","startX","startY","dragging","frame","same","tick","area","speed","listeners","cleanup","event","move","up","swallowClick","cancel","listen","stop","remove","released","startResizeDrag","onWidth","startWidth","handle","TableController","getMeasurementKey","createLazyMeasurementsView","prop","receiver","memo","opts","isInitial","memoizedFunction","getDeps","notUndefined","msg","approxEqual","debounce","timeoutId","targetWindow","ms","classifyScrollEvent","isScrolling","pendingWrite","offset","scrollOffset","elementMax","holdOffset","clampedMaxAtWrite","isAnimating","phase","externalRetiresCommand","kind","command","FLING_WINDOW_MS","flingSpedUp","samples","mid","recent","before","flingCaught","_isIOSResult","isIOSWebKit","mtp","_iosMomentumOverridesWritesResult","iosMomentumOverridesWrites","momentumOverridesWrites","touchListenerOptions","IosGesture","ownReadBack","external","win","onTouchStart","onTouchEnd","tail","getRect","element","clientWidth","clientHeight","createFrameQueue","defaultKeyExtractor","defaultRangeExtractor","len","observeElementRect","handler","rect","cb","height","frames","observer","addEventListenerOptions","supportsScrollend","observeOffset","registerScrollendEvent","fallback","readOffset","createHandler","endHandler","observeElementOffset","horizontal","el","isRtl","measureElement","box","cachedSize","elementScroll","_a","adjustedOffset","adjustments","isRtlElement","scrollElement","initialScrollPhase","behavior","atTarget","isSmoothScroll","isAppendWithTrim","nextCount","firstKey","getNextKey","removedKeys","removedCount","prevCount","getPreviousKey","retainedCount","Virtualizer","now","_b","_ro","_frames","delivering","observeQueued","pendingObservations","get","measureEntry","node","cacheKey","cachedNode","opts2","prevOptions","anchor","followOnAppend","edgeKeysChanged","measurements","previousItems","prevFirstKey","prevLastKey","anchorDelta","anchorKey","anchorOffset","newMeasurements","idx","getItemKey","anchorItem","newOffset","sync","cached","wasOverscrolled","elementOffset","prevOffset","prevDirection","queued","sample","maxAtWrite","lanes","itemSizeCache","enabled","min","need","runningStart","paddingStart","scrollMargin","prevIdx","measuredSize","laneLastIndex","laneEnds","filledLanes","m","cachedLane","lane","shouldCacheLane","laneAssignmentMode","prevIndex","prevInLane","bestLane","bestEnd","bestIdx","outerSize","maxScrollOffset","listEnd","calculateRangeImpl","rangeExtractor","attributeName","indexStr","scrollIndex","bufferSize","minIndex","maxIndex","key2","prevNode","_c","itemStart","itemSize","delta","wasAtEnd","prevTotalSize","defaultShouldAdjust","shouldAdjustScroll","adjustedSync","virtualItems","indexes","measurement","hold","useFlat","findNearestBinarySearch","write","lowMaxes","done","property","style","priority","crossSize","crossSizeBefore","threshold","align","toOffset","maxOffset","toOffset2","initialAlign","offsetInfo","lastIdx","endByLane","val","writtenOffset","targetOffset","STABLE_FRAMES","targetChanged","viewport","distance","keepSmooth","low","high","middle","currentValue","getCurrentValue","findNearestBinarySearchFlat","lastIndex","startIndex2","endIndex2","limit","endPerLane","pos","startPerLane","VirtualizerControllerBase","changed","partial","VirtualizerController","VirtualController","#getScrollElement","getScrollElement","#virtual","#element","report","#standIn","#top","#scale","#write","scale","round","wasScaled","#anchor","scaled","shift","#pool","RANGE_CHANGE","SORT_CHANGE","COLUMN_RESIZE","COLUMN_REORDER","ROW_CLICK","CELL_CLICK","LOAD_ERROR","fire","name","HEIGHTS","SAFE_HEIGHT","MARGIN","dpr","onResize","listener","maxElementHeight","probe","bodyCap","extra","watchMaxElementHeight","u$1","p","M","p$3","h$3","v$2","w","toChild","content","formatValue","cellSlot","colIndex","headerSlot","pinnedSlot","cellParts","parts","pinnedRow","ariaSort","pinStyle","renderBody","totalSize","renderRow","active","firstRowIndex","loading","retry","renderCell","activeCol","placeholder","tabStop","retryLabel","renderLightDom","headerContent","pinnedContent","cellContent","pinnedCell","context","renderHeader","handlers","headerParts","drag","resizeHandle","renderPinnedRows","baseStyles","attachGridInternals","internals","sortColumnOf","RESIZE_STEP","HEADER","layoutOf","gridCell","role","gridRowOf","layout","pinShadow","rowPx","track","ArgusTable","#columnsProp","#dataProp","#overscan","#sorting","#sizing","#order","#appliedReorders","#appliedResizes","#autoWidths","#autoWidthsChanged","#internals","#table","#columns","#columnsChanged","#warnedColumns","#data","#scrollToTop","#pinScroll","#rowPx","#window","#focusPending","#lastRange","#onRetry","button","#headerHandlers","#requestSort","#direction","#requestResize","#startReorder","#requestResizes","#onKeydown","inHeader","arrow","towardEnd","#moveByKey","#currentWidth","corner","#activate","bodyFirst","bodyLast","fit","#moveTo","#onFocusin","#active","#gridRowId","#onClick","#observeProbe","#unwatchMaxHeight","#probeObserver","#contentEnd","targets","#effectiveColumns","autoWidths","#pushedAutoWidths","#reconcileActive","unknownTotal","#rowId","pinnedWidth","activeIn","firstIndex","#drag","#loading","#measureRowHeight","#lightDomEnd","#measureAutoWidths","#focusActive","details","detail","#announceMove","#announceMoved","#appliedSort","over","loaded","firstByPage","#placeholderId","found","unloaded","sized","applied","#requestReorder","step","#dropSlots","#scrollArea","ltr","left"],"sources":["../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/lit-html.js","../../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/template-content.js","../../src/argus-column.ts","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/style-map.js","../../../core/src/columns/resolve-columns.ts","../../../core/src/columns/column-order.ts","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/cells/coreCellsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/columns/constructColumn.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/featureStubs.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/columns/coreColumnsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/constructHeader.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/buildHeaderGroups.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/headers/coreHeadersFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/rows/constructRow.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/row-models/createCoreRowModel.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/row-models/coreRowModelsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/cells/constructCell.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/rows/coreRowsFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/table/coreTablesFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/coreFeatures.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/helpers/tableFeatures.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/reactivity/coreReactivityFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/alien.js","../../../../node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/atom.js","../../../../node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/shallow.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/core/table/constructTable.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-pinning/columnPinningFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-pinning/orderByColumnPinning.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-pinning/columnPinningFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/column-sizing/columnSizingFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/row-sorting/sortFns.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/row-sorting/rowSortingFeature.utils.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/features/row-sorting/rowSortingFeature.js","../../../../node_modules/.pnpm/@tanstack+table-core@9.3.1/node_modules/@tanstack/table-core/dist/store-reactivity-bindings.js","../../../core/src/table/sorted-row-model.ts","../../../core/src/table/create-table.ts","../../../core/src/grid/row-layout.ts","../../../core/src/state/controllable.ts","../../../core/src/virtual/row-pool.ts","../../../core/src/virtual/scroll-scale.ts","../../../core/src/virtual/steady-window.ts","../../../core/src/data/page-cache.ts","../../src/announce.ts","../../src/controllers/auto-width.ts","../../src/controllers/column-children.ts","../../src/controllers/data-controller.ts","../../src/controllers/pin-scroll-controller.ts","../../src/controllers/reorder-drag.ts","../../src/controllers/resize-drag.ts","../../src/controllers/table-controller.ts","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/scroll-classifier.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/ios-gesture.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.19.11/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../../node_modules/.pnpm/@tanstack+lit-virtual@3.15.3_lit@3.3.3/node_modules/@tanstack/lit-virtual/dist/esm/index.js","../../src/controllers/virtual-controller.ts","../../src/events.ts","../../src/max-height.ts","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive-helpers.js","../../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/repeat.js","../../src/render/content.ts","../../src/render/body.ts","../../src/render/cells.ts","../../src/render/header.ts","../../src/render/pinned-rows.ts","../../src/styles/base.ts","../../src/argus-table.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as r,Directive as e,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=r(class extends e{constructor(t){if(super(t),t.type!==n.CHILD)throw Error(\"templateContent can only be used in child bindings\")}render(r){return this.vt===r?t:(this.vt=r,document.importNode(r.content,!0))}});export{o as templateContent};\n//# sourceMappingURL=template-content.js.map\n","import { html, ReactiveElement, type ComplexAttributeConverter } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { templateContent } from 'lit/directives/template-content.js';\nimport type {\n CellContent,\n CellContext,\n ColumnAlign,\n ColumnDef,\n ColumnPin,\n ColumnWidth,\n} from './types.js';\n\n/**\n * Tables watching their `<argus-column>` children, by table element. Columns\n * call their parent's entry when they connect, disconnect or change, so the\n * table needs no MutationObserver on its own children (which would fire on\n * every light-DOM cell render while scrolling).\n */\nconst watchers = new WeakMap<Element, () => void>();\n\n/** Calls `onChange` whenever an `<argus-column>` child of `host` is added, removed, moved or changed. */\nexport function watchColumns(host: Element, onChange: () => void): void {\n watchers.set(host, onChange);\n}\n\nexport function unwatchColumns(host: Element): void {\n watchers.delete(host);\n}\n\nfunction notify(parent: Element | null): void {\n if (parent) watchers.get(parent)?.();\n}\n\n/** `width` attribute: `\"90\"` or `\"90px\"` → 90, `\"auto\"`, `\"2fr\"` → `{ flex: 2 }`. */\nconst widthConverter: ComplexAttributeConverter<ColumnWidth | undefined> = {\n fromAttribute(value) {\n if (value === null) return undefined;\n const text = value.trim().toLowerCase();\n if (text === 'auto') return 'auto';\n const match = /^(\\d*\\.?\\d+)(px|fr)?$/.exec(text);\n if (!match) return undefined;\n const n = Number(match[1]);\n return match[2] === 'fr' ? { flex: n } : n;\n },\n};\n\n/**\n * Boolean attribute with a default that may be `true`: absent → unset (the\n * default applies), `\"false\"` → `false`, anything else → `true`.\n */\nconst flagConverter: ComplexAttributeConverter<boolean | undefined> = {\n fromAttribute(value) {\n return value === null ? undefined : value.trim().toLowerCase() !== 'false';\n },\n};\n\n/**\n * One column of the parent `<argus-table>`, written as markup instead of an entry in\n * its `columns` property. It is data only and renders nothing.\n *\n * Only direct children of the table count, in document order. A non-empty `columns`\n * property wins over the children. Adding, removing, moving or changing a column\n * updates the table; sizes, order and sorting are kept by `column-id`.\n *\n * A `<template>` child is the content of every cell in the column (static: the same\n * for each row). Set the `cell` property for content that depends on the row.\n *\n * @summary Declarative column of an `<argus-table>`.\n */\n@customElement('argus-column')\nexport class ArgusColumn<T = unknown> extends ReactiveElement {\n /** Stable key, used in state objects, events and persistence. Must be unique within the table. */\n @property({ attribute: 'column-id' })\n columnId = '';\n\n /** Header content: text as an attribute; a Lit template, a node or a function as a property. */\n @property()\n header?: CellContent | (() => CellContent);\n\n /**\n * How to read the cell value: a property path such as `customer.name`, or (as a\n * property) a function of the row and its index.\n */\n @property()\n accessor?: string | ((row: T, index: number) => unknown);\n\n /** Cell content from the row: `(row, context) => content`. Property only; wins over a `<template>` child. */\n @property({ attribute: false })\n cell?: (row: T, context: CellContext<T>) => CellContent;\n\n /** Width: `90` (px), `auto` to fit the content, or `2fr` for a share of the free space. Default: 150 px. */\n @property({ converter: widthConverter })\n width?: ColumnWidth;\n\n /** Lower bound for resizing and for flex columns, in px. Default: 40. */\n @property({ attribute: 'min-width', type: Number })\n minWidth?: number;\n\n /** Upper bound for resizing, in px. Default: no limit. */\n @property({ attribute: 'max-width', type: Number })\n maxWidth?: number;\n\n /** Pins the column to the `start` or `end` side. */\n @property()\n pin?: ColumnPin;\n\n /** Text alignment: `start`, `center` or `end`. Default: `start`. */\n @property()\n align?: ColumnAlign;\n\n /** Whether the header can be clicked to sort. Default: `false`. */\n @property({ converter: flagConverter })\n sortable?: boolean;\n\n /** Whether the column can be resized. Default: `true`; `resizable=\"false\"` turns it off. */\n @property({ converter: flagConverter })\n resizable?: boolean;\n\n /** Whether the column can be moved. Default: `true`; `reorderable=\"false\"` turns it off. */\n @property({ converter: flagConverter })\n reorderable?: boolean;\n\n #parent: Element | null = null;\n #def: ColumnDef<T> | undefined;\n readonly #children = new MutationObserver(() => {\n this.#def = undefined;\n this.requestUpdate();\n });\n\n /** Data only: no shadow root, nothing rendered. */\n protected override createRenderRoot(): HTMLElement {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#children.observe(this, { childList: true });\n this.#parent = this.parentElement;\n notify(this.#parent);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#children.disconnect();\n const parent = this.#parent;\n this.#parent = null;\n notify(parent);\n }\n\n /**\n * The column as the table reads it. Unset fields stay `undefined`, which the\n * table reads as its defaults. An unknown `pin` is ignored and an unknown\n * `align` falls back to `start`.\n */\n toColumnDef(): ColumnDef<T> {\n if (this.#def) return this.#def;\n const template = [...this.children].find((c) => c instanceof HTMLTemplateElement);\n return (this.#def = {\n id: this.columnId,\n header: this.header,\n accessor: this.accessor,\n cell: this.cell ?? (template && (() => html`${templateContent(template)}`)),\n width: this.width,\n minWidth: this.minWidth,\n maxWidth: this.maxWidth,\n pin: this.pin,\n align: this.align,\n sortable: this.sortable,\n resizable: this.resizable,\n reorderable: this.reorderable,\n });\n }\n\n protected override willUpdate(): void {\n this.#def = undefined;\n }\n\n protected override updated(): void {\n notify(this.#parent);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'argus-column': ArgusColumn;\n }\n}\n","import{noChange as t}from\"../lit-html.js\";import{directive as e,Directive as r,PartType as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const n=\"important\",i=\" !\"+n,o=e(class extends r{constructor(t){if(super(t),t.type!==s.ATTRIBUTE||\"style\"!==t.name||t.strings?.length>2)throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\")}render(t){return Object.keys(t).reduce((e,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes(\"-\")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${s};`},\"\")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes(\"-\")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r=\"string\"==typeof e&&e.endsWith(i);t.includes(\"-\")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:\"\"):s[t]=e}}return t}});export{o as styleMap};\n//# sourceMappingURL=style-map.js.map\n","import type { ColumnAlign, ColumnDef, ColumnPin } from '../types.js';\n\n/** Width used when a column sets none. */\nexport const DEFAULT_WIDTH = 150;\n/** Lower bound used when a column sets no `minWidth`. */\nexport const DEFAULT_MIN_WIDTH = 40;\n\n/** A column after defaults, bounds and the accessor have been resolved. */\nexport interface ResolvedColumn<TData, TContent> {\n id: string;\n /** Position in the `columns` array. */\n index: number;\n header: ColumnDef<TData, TContent>['header'];\n cell: ColumnDef<TData, TContent>['cell'];\n /** Reads the cell value; returns `undefined` when the column has no accessor. */\n getValue: (row: TData, index: number) => unknown;\n hasAccessor: boolean;\n /** Base width in px. For a flex column this is its minimum track size. */\n width: number;\n /** Share of free space for `{ flex }` columns, otherwise `undefined`. Pinned columns never flex. */\n flex: number | undefined;\n /** `true` for `width: 'auto'`: the table measures the content and passes the width in. */\n auto: boolean;\n minWidth: number;\n maxWidth: number;\n pin: ColumnPin | undefined;\n sortable: boolean;\n resizable: boolean;\n reorderable: boolean;\n align: ColumnAlign;\n}\n\nconst pathCache = new Map<string, readonly string[]>();\n\n/**\n * Reads a dotted property path such as `'customer.name'`. Returns `undefined`\n * as soon as a step is `null` or `undefined`, like optional chaining.\n */\nexport function readPath(source: unknown, path: string): unknown {\n let keys = pathCache.get(path);\n if (!keys) {\n keys = path.split('.');\n pathCache.set(path, keys);\n }\n let value: unknown = source;\n for (const key of keys) {\n if (value === null || value === undefined) return undefined;\n value = (value as Record<string, unknown>)[key];\n }\n return value;\n}\n\nfunction finite(value: number | undefined): number | undefined {\n return value !== undefined && Number.isFinite(value) ? value : undefined;\n}\n\n/**\n * Normalizes `ColumnDef`s: checks ids, applies defaults and clamps widths.\n *\n * @throws if an id is empty or used twice, because state and events are keyed by id.\n */\nexport function resolveColumns<TData, TContent>(\n defs: readonly ColumnDef<TData, TContent>[],\n): ResolvedColumn<TData, TContent>[] {\n const seen = new Set<string>();\n return defs.map((def, index) => {\n if (typeof def.id !== 'string' || def.id === '') {\n throw new Error(`argus-table: column at index ${String(index)} needs a non-empty string id.`);\n }\n if (seen.has(def.id)) {\n throw new Error(`argus-table: column id '${def.id}' is used more than once.`);\n }\n seen.add(def.id);\n\n const minWidth = Math.max(0, finite(def.minWidth) ?? DEFAULT_MIN_WIDTH);\n const maxWidth = Math.max(minWidth, finite(def.maxWidth) ?? Number.POSITIVE_INFINITY);\n const clamp = (px: number) => Math.min(maxWidth, Math.max(minWidth, px));\n\n const pin = def.pin === 'start' || def.pin === 'end' ? def.pin : undefined;\n const { width } = def;\n // Pinned columns need a known width for their sticky offsets, so they never flex.\n const flex =\n pin === undefined &&\n typeof width === 'object' &&\n Number.isFinite(width.flex) &&\n width.flex > 0\n ? width.flex\n : undefined;\n const auto = width === 'auto';\n // An auto column shows the default width until it is measured.\n const fixed = typeof width === 'number' ? finite(width) : undefined;\n const base = flex !== undefined ? minWidth : clamp(fixed ?? DEFAULT_WIDTH);\n\n const { accessor } = def;\n const getValue: ResolvedColumn<TData, TContent>['getValue'] =\n typeof accessor === 'function'\n ? accessor\n : typeof accessor === 'string'\n ? (row) => readPath(row, accessor)\n : () => undefined;\n\n return {\n id: def.id,\n index,\n header: def.header,\n cell: def.cell,\n getValue,\n hasAccessor: accessor !== undefined,\n width: base,\n flex,\n auto,\n minWidth,\n maxWidth,\n pin,\n sortable: def.sortable === true,\n resizable: def.resizable !== false,\n reorderable: def.reorderable !== false,\n align: def.align ?? 'start',\n };\n });\n}\n","import type { ColumnOrderState, ColumnPin } from '../types.js';\n\n/** What ordering needs to know about a column. */\nexport interface OrderableColumn {\n id: string;\n pin: ColumnPin | undefined;\n reorderable: boolean;\n}\n\ntype Group = ColumnPin | 'center';\n\nconst groupOf = (column: OrderableColumn): Group => column.pin ?? 'center';\n\n/**\n * The order the table shows: start-pinned, scrolling, end-pinned columns, each\n * group in the sequence of `order`. Unknown and repeated ids are dropped; columns\n * the order doesn't list follow the listed ones of their group, in `columns` order.\n */\nexport function normalizeOrder(\n order: readonly string[],\n columns: readonly OrderableColumn[],\n): ColumnOrderState {\n const byId = new Map(columns.map((c) => [c.id, c]));\n const listed = new Set<string>();\n const groups: Record<Group, string[]> = { start: [], center: [], end: [] };\n for (const id of order) {\n const column = byId.get(id);\n if (!column || listed.has(id)) continue;\n listed.add(id);\n groups[groupOf(column)].push(id);\n }\n for (const column of columns) {\n if (!listed.has(column.id)) groups[groupOf(column)].push(column.id);\n }\n return [...groups.start, ...groups.center, ...groups.end];\n}\n\n/**\n * The order after moving a column to position `to` (0-based, in the whole order\n * as the table shows it, counted after the move). `undefined` if the column can't\n * move, `to` is outside the column's group, or nothing changes.\n */\nexport function moveColumn(\n order: readonly string[],\n columns: readonly OrderableColumn[],\n columnId: string,\n to: number,\n): ColumnOrderState | undefined {\n const column = columns.find((c) => c.id === columnId);\n if (!column?.reorderable || !Number.isInteger(to)) return undefined;\n const current = normalizeOrder(order, columns);\n const from = current.indexOf(columnId);\n if (to === from) return undefined;\n const pinOf = new Map(columns.map((c) => [c.id, groupOf(c)]));\n const group = groupOf(column);\n const first = current.findIndex((id) => pinOf.get(id) === group);\n const last = current.findLastIndex((id) => pinOf.get(id) === group);\n if (to < first || to > last) return undefined;\n const next = current.filter((id) => id !== columnId);\n next.splice(to, 0, columnId);\n return next;\n}\n","//#region src/utils.ts\n/**\n* Applies a TanStack updater to a value.\n*\n* If the updater is a function it is called with the previous value; otherwise the updater value is returned directly.\n*/\nfunction functionalUpdate(updater, input) {\n\treturn typeof updater === \"function\" ? updater(input) : updater;\n}\n/**\n* Clones table state values while preserving non-plain objects.\n*\n* Plain objects and arrays are copied recursively so state updates can avoid mutating existing references.\n*/\nfunction cloneState(value) {\n\tif (Array.isArray(value)) return value.map(cloneState);\n\tif (value && typeof value === \"object\") {\n\t\tconst proto = Object.getPrototypeOf(value);\n\t\tif (proto !== Object.prototype && proto !== null) return value;\n\t\tconst copy = proto === null ? makeObjectMap() : {};\n\t\tconst keys = Object.keys(value);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\tObject.defineProperty(copy, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: cloneState(value[key]),\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t\treturn copy;\n\t}\n\treturn value;\n}\n/**\n* Copies prototype-instance own properties without carrying over lazy memo\n* closures or the per-row cell cache, both of which are bound to the source\n* instance (cached cells reference the source row).\n*/\nfunction copyInstancePropertiesWithoutMemos(target, source) {\n\tconst keys = Object.keys(source);\n\tconst targetRecord = target;\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tif (!key.startsWith(\"_memo_\") && key !== \"_cellsCache\") targetRecord[key] = source[key];\n\t}\n\treturn target;\n}\n/**\n* Creates an object intended only for string-keyed dictionary lookups.\n*\n* The null prototype keeps user-controlled ids such as `__proto__` and\n* `hasOwnProperty` as plain data keys.\n*/\nfunction makeObjectMap() {\n\treturn Object.create(null);\n}\n/**\n* Checks whether an object owns a key, including null-prototype dictionaries.\n*/\nfunction hasOwn(obj, key) {\n\treturn Object.prototype.hasOwnProperty.call(obj, key);\n}\n/**\n* Creates a table state updater for a single state slice.\n*\n* The updater writes through the table base atom for the slice and supports both value and functional updater forms.\n*/\nfunction makeStateUpdater(key, instance) {\n\treturn (updater) => {\n\t\t(instance.options.atoms?.[key] ?? instance.baseAtoms[key]).set((old) => functionalUpdate(updater, old));\n\t};\n}\n/**\n* Checks whether a value is an array or a plain (or null-prototype) object.\n* Class instances, dates, and other exotic values compare by reference only,\n* mirroring the `cloneState` plain-object policy.\n*/\nfunction isPlainContainer(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (Array.isArray(value)) return true;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n/**\n* Returns every enumerable own key, including symbols and non-index array\n* properties. Keeping key presence explicit distinguishes sparse array holes\n* from entries whose value is `undefined`.\n*/\nfunction getEnumerableOwnKeys(value) {\n\treturn Reflect.ownKeys(value).filter((key) => Object.prototype.propertyIsEnumerable.call(value, key));\n}\nconst MAX_STATE_COMPARE_DEPTH = 3;\n/**\n* Structurally compares two state slice values as deeply as stock feature\n* state can nest and no deeper.\n*\n* Three container levels cover flat maps and arrays, arrays of state objects,\n* array-valued filter values, and `columnResizing.columnSizingStart` tuples.\n* Deeper containers and non-plain values compare by reference. A `false`\n* result is always safe: the state update simply proceeds.\n*/\nfunction stateSlicesEqual(a, b) {\n\treturn stateSlicesEqualAtDepth(a, b, MAX_STATE_COMPARE_DEPTH);\n}\nfunction stateSlicesEqualAtDepth(a, b, depth) {\n\tif (Object.is(a, b)) return true;\n\tif (depth <= 0 || !isPlainContainer(a) || !isPlainContainer(b)) return false;\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\t}\n\tconst keysA = getEnumerableOwnKeys(a);\n\tconst keysB = getEnumerableOwnKeys(b);\n\tif (keysA.length !== keysB.length) return false;\n\tconst recordA = a;\n\tconst recordB = b;\n\tfor (let i = 0; i < keysA.length; i++) {\n\t\tconst key = keysA[i];\n\t\tif (!Object.prototype.propertyIsEnumerable.call(b, key)) return false;\n\t\tif (!stateSlicesEqualAtDepth(recordA[key], recordB[key], depth - 1)) return false;\n\t}\n\treturn true;\n}\n/**\n* Routes a state slice update through the slice's `on<State>Change` handler,\n* preserving the owner's current reference for structural no-ops.\n*\n* Equality is evaluated inside the updater received by the state owner, never\n* against the table's potentially stale controlled snapshot. This keeps\n* same-tick updates composable in queued host containers such as React state,\n* evaluates the original updater only when the owner applies it, and lets atom\n* owners suppress notifications by returning their existing reference.\n*\n* A user-provided change handler is still invoked for a no-op because only that\n* handler's state container can know its latest queued value. The guarded\n* updater returns that container's previous reference, preventing a state write\n* or render in state containers with identity bailout semantics.\n*\n* Hot-path slices that skip guarding entirely (selection maps that scale with\n* row count, pointer-frequency resize state) call their change handler\n* directly instead of routing through this util. Custom feature slices with a\n* cheaper or semantic-aware comparison can pass `isEqual` to override the\n* structural default.\n*/\nfunction setStateSlice(instance, key, updater, isEqual = stateSlicesEqual) {\n\tconst onChangeKey = `on${key.charAt(0).toUpperCase()}${key.slice(1)}Change`;\n\tconst onChange = instance.options[onChangeKey];\n\tif (!onChange) return;\n\tonChange((current) => {\n\t\tconst next = functionalUpdate(updater, current);\n\t\treturn isEqual(current, next) ? current : next;\n\t});\n}\n/**\n* Returns whether a value is a function.\n*/\nfunction isFunction(d) {\n\treturn d instanceof Function;\n}\n/**\n* Flattens a tree of nodes by recursively reading child nodes.\n*\n* The original nodes are preserved in depth-first order.\n*/\nfunction flattenBy(arr, getChildren) {\n\tconst flat = [];\n\tconst recurse = (subArr) => {\n\t\tsubArr.forEach((item) => {\n\t\t\tflat.push(item);\n\t\t\tconst children = getChildren(item);\n\t\t\tif (children.length) recurse(children);\n\t\t});\n\t};\n\trecurse(arr);\n\treturn flat;\n}\n/**\n* Creates a dependency-tracked memoized function for table internals.\n*\n* The memo recomputes only when its dependency tuple changes and can emit debug timing information.\n*/\nconst memo = ({ fn, memoDeps, onAfterCompare, onAfterUpdate, onBeforeCompare, onBeforeUpdate }) => {\n\tlet deps = [];\n\tlet result;\n\tconst memoizedFn = (depArgs) => {\n\t\tonBeforeCompare?.();\n\t\tconst newDeps = memoDeps?.(depArgs);\n\t\tlet depsChanged = !newDeps || newDeps.length !== deps?.length;\n\t\tif (!depsChanged && newDeps) {\n\t\t\tfor (let i = 0; i < newDeps.length; i++) if (newDeps[i] !== deps[i]) {\n\t\t\t\tdepsChanged = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tonAfterCompare?.(depsChanged);\n\t\tif (!depsChanged) return result;\n\t\tdeps = newDeps;\n\t\tonBeforeUpdate?.();\n\t\tresult = fn(...newDeps ?? []);\n\t\tonAfterUpdate?.(result);\n\t\treturn result;\n\t};\n\treturn memoizedFn;\n};\n/**\n* Wraps a callback so that its first invocation is skipped.\n*\n* Row-model `onAfterUpdate` hooks schedule auto-resets when their inputs\n* change. The initial computation of a row model is not a change, so state\n* resets must not fire for it — otherwise merely reading a row model on mount\n* would wipe initial or controlled state.\n*/\nfunction skipFirstRun(fn) {\n\tlet hasRun = false;\n\treturn () => {\n\t\tif (!hasRun) {\n\t\t\thasRun = true;\n\t\t\treturn;\n\t\t}\n\t\tfn();\n\t};\n}\nconst pad = (str, num) => {\n\tstr = String(str);\n\twhile (str.length < num) str = \" \" + str;\n\treturn str;\n};\n/**\n* Creates a table-aware memoized function.\n*\n* This wraps `memo` with table debug options and feature metadata so row models and derived APIs can share consistent diagnostics.\n*/\nfunction tableMemo({ feature, fnName, objectId, onAfterUpdate, table, ...memoOptions }) {\n\tlet startCalcTime;\n\tlet endCalcTime;\n\tlet runCount = 0;\n\tlet debug;\n\tif (process.env.NODE_ENV === \"development\") {\n\t\tconst { debugAll } = table.options;\n\t\tconst { parentName } = getFunctionNameInfo(fnName, \".\");\n\t\tconst debugByParent = table.options[`debug${(parentName != \"table\" ? parentName + \"s\" : parentName).replace(parentName, parentName.charAt(0).toUpperCase() + parentName.slice(1))}`];\n\t\tconst debugByFeature = feature ? table.options[`debug${feature.charAt(0).toUpperCase() + feature.slice(1)}`] : false;\n\t\tdebug = debugAll || debugByParent || debugByFeature;\n\t}\n\tfunction logTime(time, depsChanged) {\n\t\tconst runType = runCount === 0 ? \"(1st run)\" : depsChanged ? \"(rerun #\" + runCount + \")\" : \"(cache)\";\n\t\trunCount++;\n\t\tconsole.groupCollapsed(`%c⏱ ${pad(`${time.toFixed(1)} ms`, 12)} %c${runType}%c ${fnName}%c ${objectId ? `(${fnName.split(\".\")[0]}Id: ${objectId})` : \"\"}`, `font-size: .6rem; font-weight: bold; ${depsChanged ? `color: hsl(\n ${Math.max(0, Math.min(120 - Math.log10(time) * 60, 120))}deg 100% 31%);` : \"\"} `, `color: ${runCount < 2 ? \"#FF00FF\" : \"#FF1493\"}`, \"color: #666\", \"color: #87CEEB\");\n\t\tconsole.info({\n\t\t\tfeature,\n\t\t\tstate: table.store.state,\n\t\t\tdeps: memoOptions.memoDeps?.toString()\n\t\t});\n\t\tconsole.trace();\n\t\tconsole.groupEnd();\n\t}\n\tconst onAfterUpdateHandler = onAfterUpdate ? () => {\n\t\tconst { schedule, untrack } = table._reactivity;\n\t\tschedule(() => untrack(() => onAfterUpdate()));\n\t} : void 0;\n\tconst debugOptions = process.env.NODE_ENV === \"development\" ? {\n\t\tonBeforeCompare: () => {},\n\t\tonAfterCompare: (depsChanged) => {},\n\t\tonBeforeUpdate: () => {\n\t\t\tif (debug) startCalcTime = performance.now();\n\t\t},\n\t\tonAfterUpdate: () => {\n\t\t\tif (debug) {\n\t\t\t\tendCalcTime = performance.now();\n\t\t\t\tlogTime(Math.round((endCalcTime - startCalcTime) * 100) / 100, true);\n\t\t\t}\n\t\t\tonAfterUpdateHandler?.();\n\t\t}\n\t} : { onAfterUpdate: onAfterUpdateHandler };\n\treturn memo({\n\t\t...memoOptions,\n\t\t...debugOptions\n\t});\n}\n/**\n* Assumes that a function name is in the format of `parentName_fnKey` and returns the `fnKey` and `fnName` in the format of `parentName.fnKey`.\n*\n* Splits on the first separator only, so an internal API name such as\n* `table__expandRows` has the `fnKey` `_expandRows`.\n*/\nfunction getFunctionNameInfo(staticFnName, splitBy = \"_\") {\n\tconst [parentName, fnKey] = staticFnName.replace(splitBy, \" \").split(\" \");\n\treturn {\n\t\tfnKey,\n\t\tfnName: `${parentName}.${fnKey}`,\n\t\tparentName\n\t};\n}\n/**\n* Assigns Table API methods directly to the table instance.\n* Unlike row/cell/column/header, the table is a singleton so methods are assigned directly.\n*/\nfunction assignTableAPIs(feature, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\ttable[fnKey] = memoDeps ? tableMemo({\n\t\t\tmemoDeps,\n\t\t\tfn,\n\t\t\tfnName,\n\t\t\ttable,\n\t\t\tfeature\n\t\t}) : fn;\n\t}\n}\n/**\n* Assigns API methods to a prototype object for memory-efficient method sharing.\n* All instances created with this prototype will share the same method references.\n*\n* For memoized methods, the memo state is lazily created and stored on each instance.\n* This provides the best of both worlds: shared method code + per-instance caching.\n*/\nfunction assignPrototypeAPIs(feature, prototype, table, apis) {\n\tfor (const [staticFnName, { fn, memoDeps }] of Object.entries(apis)) {\n\t\tconst { fnKey, fnName } = getFunctionNameInfo(staticFnName);\n\t\tif (memoDeps) {\n\t\t\tconst memoKey = `_memo_${fnKey}`;\n\t\t\tprototype[fnKey] = function(...args) {\n\t\t\t\tif (!this[memoKey]) {\n\t\t\t\t\tconst self = this;\n\t\t\t\t\tthis[memoKey] = tableMemo({\n\t\t\t\t\t\tmemoDeps: (depArgs) => memoDeps(self, depArgs),\n\t\t\t\t\t\tfn: (...deps) => fn(self, ...deps),\n\t\t\t\t\t\tfnName,\n\t\t\t\t\t\tobjectId: self.id,\n\t\t\t\t\t\ttable,\n\t\t\t\t\t\tfeature\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this[memoKey](...args);\n\t\t\t};\n\t\t} else prototype[fnKey] = function(...args) {\n\t\t\treturn fn(this, ...args);\n\t\t};\n\t}\n}\n/**\n* Looks to run the memoized function with the builder pattern on the object if it exists, otherwise fall back to the static method passed in.\n*/\nfunction callMemoOrStaticFn(obj, fnKey, staticFn, ...args) {\n\treturn obj[fnKey]?.(...args) ?? staticFn(obj, ...args);\n}\n\n//#endregion\nexport { assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, cloneState, copyInstancePropertiesWithoutMemos, flattenBy, functionalUpdate, getFunctionNameInfo, hasOwn, isFunction, makeObjectMap, makeStateUpdater, memo, setStateSlice, skipFirstRun, stateSlicesEqual, tableMemo };","//#region src/core/cells/coreCellsFeature.utils.ts\n/**\n* Reads this cell's accessor value from its owning row and column.\n*\n* This is the standalone implementation behind `cell.getValue()`, useful when\n* importing static APIs instead of calling methods from the cell prototype.\n*\n* @example\n* ```ts\n* const value = cell_getValue(cell)\n* ```\n*/\nfunction cell_getValue(cell) {\n\treturn cell.row.getValue(cell.column.id);\n}\n/**\n* Reads the value that should be rendered for this cell.\n*\n* Nullish accessor values are replaced with `table.options.renderFallbackValue`,\n* matching the behavior of `cell.renderValue()`.\n*\n* @example\n* ```ts\n* const rendered = cell_renderValue(cell)\n* ```\n*/\nfunction cell_renderValue(cell) {\n\treturn cell.getValue() ?? cell.table.options.renderFallbackValue;\n}\n/**\n* Builds the render context passed to a column's `cell` template.\n*\n* The returned object includes stable references to the table, row, column, and\n* cell, plus bound `getValue` and `renderValue` helpers for render functions.\n*\n* @example\n* ```ts\n* const context = cell_getContext(cell)\n* ```\n*/\nfunction cell_getContext(cell) {\n\treturn {\n\t\ttable: cell.table,\n\t\tcolumn: cell.column,\n\t\trow: cell.row,\n\t\tcell,\n\t\tgetValue: () => cell.getValue(),\n\t\trenderValue: () => cell.renderValue()\n\t};\n}\n\n//#endregion\nexport { cell_getContext, cell_getValue, cell_renderValue };","import { assignPrototypeAPIs } from \"../../utils.js\";\nimport { cell_getContext, cell_getValue, cell_renderValue } from \"./coreCellsFeature.utils.js\";\n\n//#region src/core/cells/coreCellsFeature.ts\n/**\n* Core feature that adds cell value, render, and context APIs.\n*/\nconst coreCellsFeature = { assignCellPrototype: (prototype, table) => {\n\tassignPrototypeAPIs(\"coreCellsFeature\", prototype, table, {\n\t\tcell_getValue: { fn: (cell) => cell_getValue(cell) },\n\t\tcell_renderValue: { fn: (cell) => cell_renderValue(cell) },\n\t\tcell_getContext: {\n\t\t\tfn: (cell) => cell_getContext(cell),\n\t\t\tmemoDeps: (cell) => [cell]\n\t\t}\n\t});\n} };\n\n//#endregion\nexport { coreCellsFeature };","//#region src/core/columns/constructColumn.ts\n/**\n* Creates or retrieves the column prototype for a table.\n* The prototype is cached on the table and shared by all column instances.\n*/\nfunction getColumnPrototype(table) {\n\tif (!table._columnPrototype) {\n\t\ttable._columnPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignColumnPrototype?.(table._columnPrototype, table);\n\t}\n\treturn table._columnPrototype;\n}\n/**\n* Constructs a column instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructColumn(table, columnDef, depth, parent) {\n\tconst resolvedColumnDef = {\n\t\t...table.getDefaultColumnDef(),\n\t\t...columnDef\n\t};\n\tconst accessorKey = resolvedColumnDef.accessorKey;\n\tconst accessorKeyString = accessorKey === void 0 ? void 0 : String(accessorKey);\n\tconst id = resolvedColumnDef.id ?? accessorKeyString?.replaceAll(\".\", \"_\") ?? (typeof resolvedColumnDef.header === \"string\" ? resolvedColumnDef.header : void 0);\n\tlet accessorFn;\n\tif (resolvedColumnDef.accessorFn) accessorFn = resolvedColumnDef.accessorFn;\n\telse if (accessorKey !== void 0) {\n\t\tif (typeof accessorKey === \"string\" && accessorKey.includes(\".\")) {\n\t\t\tconst keys = accessorKey.split(\".\");\n\t\t\taccessorFn = (originalRow) => {\n\t\t\t\tlet result = originalRow;\n\t\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t\tconst key = keys[i];\n\t\t\t\t\tresult = result?.[key];\n\t\t\t\t\tif (process.env.NODE_ENV === \"development\" && result === void 0) console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t} else accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey];\n\t}\n\tif (!id) {\n\t\tif (process.env.NODE_ENV === \"development\") throw new Error(resolvedColumnDef.accessorFn ? `coreColumnsFeature require an id when using an accessorFn` : `coreColumnsFeature require an id when using a non-string header`);\n\t\tthrow new Error();\n\t}\n\tconst columnPrototype = getColumnPrototype(table);\n\tconst column = Object.create(columnPrototype);\n\tcolumn.accessorFn = accessorFn;\n\tcolumn.columnDef = resolvedColumnDef;\n\tcolumn.columns = [];\n\tcolumn.depth = depth;\n\tcolumn.id = `${String(id)}`;\n\tcolumn.parent = parent;\n\tconst initFns = table._columnInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](column);\n\treturn column;\n}\n\n//#endregion\nexport { constructColumn };","//#region src/core/featureStubs.ts\n/**\n* Stubs for optional features, used by the core and by any feature or row\n* model that reads another feature.\n*\n* Importing a feature's code from shared code would bundle that feature into\n* every table that uses the shared code, registered or not. A stub instead\n* calls a member the feature declares on its table, column, or row type and\n* assigns when it is registered, and otherwise behaves as if the feature were\n* absent. Members that only other features use are `_`-prefixed and marked\n* `@internal`, such as `table._expandRows`.\n*\n* How code in this package reaches other code:\n*\n* - Its own feature: call the static function, or `callMemoOrStaticFn` to use\n* the feature's memoized API.\n* - The core: import it. Every table bundles the core.\n* - Another feature's state: read `table.atoms.<slice>?.get()`.\n* - Another feature's APIs: call a stub from this file, adding one if needed.\n* - A feature it requires, such as column resizing requiring column sizing:\n* import it.\n*\n* Features assign functions, internal ones included, with `assignTableAPIs` or\n* `assignPrototypeAPIs`, and keep the `init*InstanceData` hooks for mutable\n* per-instance state. The `import/no-restricted-paths` lint rule rejects value\n* imports between feature folders outside an explicit list.\n*\n* Internal: not exported from any package entry point.\n*/\n/** Whether a column is visible; every column is without the feature. */\nfunction getIsColumnVisible(column) {\n\treturn column.getIsVisible?.() ?? true;\n}\n/** Visible leaf columns; all leaf columns without the feature. */\nfunction getVisibleLeafColumns(table) {\n\treturn table.getVisibleLeafColumns?.() ?? table.getAllLeafColumns();\n}\n/**\n* A row's visible cells; all cells, in leaf column order, without the\n* feature.\n*/\nfunction getVisibleCells(row) {\n\treturn row.getVisibleCells?.() ?? row.getAllCells();\n}\n/** A row's visible cells by column id; all cells without the feature. */\nfunction getVisibleCellsByColumnId(row) {\n\treturn row.getVisibleCellsByColumnId?.() ?? row.getAllCellsByColumnId();\n}\n/**\n* Orders leaf columns for display. The column ordering feature applies\n* `columnOrder` and moves grouped columns. Without it, the grouping feature\n* still moves grouped columns, and without either the order is unchanged.\n*/\nfunction orderLeafColumns(table, columns) {\n\tconst orderedTable = table;\n\tconst leafColumns = columns;\n\treturn orderedTable.getOrderColumnsFn?.()(leafColumns) ?? orderedTable._orderGroupedColumns?.(leafColumns) ?? columns;\n}\n/**\n* Orders items that each belong to a leaf column, such as visible leaf columns\n* or a row's visible cells, with start-pinned items first and end-pinned items\n* last. Without the feature, nothing is pinned and the order is unchanged.\n*/\nfunction orderByColumnPinning(table, items, getColumnId, getItemsByColumnId) {\n\treturn table._orderByColumnPinning?.(items, getColumnId, getItemsByColumnId) ?? items;\n}\n/**\n* Visible leaf columns in a pinning region. Without the feature, nothing is\n* pinned: the start and end regions are empty, and the center region and the\n* full list (`position` omitted) hold every visible leaf column.\n*/\nfunction getPinnedVisibleLeafColumns(table, position) {\n\treturn table.getPinnedVisibleLeafColumns?.(position) ?? (position && position !== \"center\" ? [] : getVisibleLeafColumns(table));\n}\n/** The resolved global filter function, if the feature is registered. */\nfunction getGlobalFilterFn(table) {\n\treturn table.getGlobalFilterFn?.();\n}\n/** Whether a column takes part in global filtering; none do without the feature. */\nfunction getCanGlobalFilter(column) {\n\treturn column.getCanGlobalFilter?.() ?? false;\n}\n/**\n* Lists expanded sub-rows inline below their parents. Without the feature no\n* row is expanded, so the row model is returned as is.\n*/\nfunction expandRowModel(table, rowModel) {\n\treturn table._expandRows?.(rowModel) ?? rowModel;\n}\n/**\n* Whether every parent of a row is expanded. Without the feature no row is\n* expanded, so only a top-level row qualifies.\n*/\nfunction getIsAllParentsExpanded(row) {\n\treturn row.getIsAllParentsExpanded?.() ?? !row.parentId;\n}\n/** Resets expanded state if row expanding is registered. */\nfunction autoResetExpanded(table) {\n\ttable.autoResetExpanded?.();\n}\n/** Resets the page index if row pagination is registered. */\nfunction autoResetPageIndex(table) {\n\ttable.autoResetPageIndex?.();\n}\n/** Resets sorting if row sorting is registered. */\nfunction autoResetSorting(table) {\n\ttable.autoResetSorting?.();\n}\n/** Resets cell selection if cell selection is registered. */\nfunction autoResetCellSelection(table) {\n\ttable.autoResetCellSelection?.();\n}\n/**\n* The aggregation executor `rowAggregationFeature` assigns to the table, or\n* `undefined` when the feature is not registered.\n*/\nfunction getAggregateColumnValue(table) {\n\treturn table._aggregateColumnValue;\n}\n\n//#endregion\nexport { autoResetCellSelection, autoResetExpanded, autoResetPageIndex, autoResetSorting, expandRowModel, getAggregateColumnValue, getCanGlobalFilter, getGlobalFilterFn, getIsAllParentsExpanded, getIsColumnVisible, getPinnedVisibleLeafColumns, getVisibleCells, getVisibleCellsByColumnId, getVisibleLeafColumns, orderByColumnPinning, orderLeafColumns };","import { makeObjectMap } from \"../../utils.js\";\nimport { orderLeafColumns } from \"../featureStubs.js\";\nimport { constructColumn } from \"./constructColumn.js\";\n\n//#region src/core/columns/coreColumnsFeature.utils.ts\n/**\n* Flattens this column and every descendant column into a single array.\n*\n* Group columns appear before their child columns, which matches the normalized\n* column hierarchy produced during table construction.\n*\n* @example\n* ```ts\n* const flatColumns = column_getFlatColumns(column)\n* ```\n*/\nfunction column_getFlatColumns(column) {\n\treturn [column, ...column.columns.flatMap((col) => col.getFlatColumns())];\n}\n/**\n* Collects the terminal leaf columns below this column.\n*\n* Group columns return their ordered descendants. Non-group columns return an\n* array containing only the column itself.\n*\n* @example\n* ```ts\n* const leafColumns = column_getLeafColumns(column)\n* ```\n*/\nfunction column_getLeafColumns(column) {\n\tif (column.columns.length) {\n\t\tconst leafColumns = column.columns.flatMap((col) => col.getLeafColumns());\n\t\treturn orderLeafColumns(column.table, leafColumns);\n\t}\n\treturn [column];\n}\n/**\n* Merges built-in, feature, and user default column definitions.\n*\n* Built-in defaults provide a header and fallback cell renderer, feature\n* defaults can add feature-specific column options, and\n* `options.defaultColumn` wins last.\n*\n* @example\n* ```ts\n* const defaultColumn = table_getDefaultColumnDef(table)\n* ```\n*/\nfunction table_getDefaultColumnDef(table) {\n\treturn {\n\t\theader: (props) => {\n\t\t\tconst resolvedColumnDef = props.header.column.columnDef;\n\t\t\tif (resolvedColumnDef.accessorKey) return resolvedColumnDef.accessorKey;\n\t\t\tif (resolvedColumnDef.accessorFn) return resolvedColumnDef.id;\n\t\t\treturn null;\n\t\t},\n\t\tcell: (props) => props.renderValue()?.toString?.() ?? null,\n\t\t...Object.values(table._features).reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultColumnDef?.());\n\t\t}, {}),\n\t\t...table.options.defaultColumn\n\t};\n}\nfunction constructColumns(table, columnDefs, parent, depth = 0) {\n\tconst columns = new Array(columnDefs.length);\n\tfor (let i = 0; i < columnDefs.length; i++) {\n\t\tif (!(i in columnDefs)) continue;\n\t\tconst columnDef = columnDefs[i];\n\t\tconst column = constructColumn(table, columnDef, depth, parent);\n\t\tconst groupingColumnDef = columnDef;\n\t\tcolumn.columns = groupingColumnDef.columns ? constructColumns(table, groupingColumnDef.columns, column, depth + 1) : [];\n\t\tcolumns[i] = column;\n\t}\n\treturn columns;\n}\n/**\n* Normalizes `options.columns` into the table's nested column tree.\n*\n* Each column definition is constructed with its parent and depth, and group\n* column children are recursively constructed.\n*\n* @example\n* ```ts\n* const columns = table_getAllColumns(table)\n* ```\n*/\nfunction table_getAllColumns(table) {\n\treturn constructColumns(table, table.options.columns);\n}\n/**\n* Flattens every table column, including group columns and leaf columns.\n*\n* Use this when parent/group columns must be included in addition to data leaf\n* columns.\n*\n* @example\n* ```ts\n* const flatColumns = table_getAllFlatColumns(table)\n* ```\n*/\nfunction table_getAllFlatColumns(table) {\n\treturn table.getAllColumns().flatMap((column) => column.getFlatColumns());\n}\n/**\n* Builds an id lookup for every flat column in the table.\n*\n* Group columns and leaf columns are included. Later columns with the same id\n* replace earlier entries.\n*\n* @example\n* ```ts\n* const columnsById = table_getAllFlatColumnsById(table)\n* ```\n*/\nfunction table_getAllFlatColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst flatColumns = table.getAllFlatColumns();\n\tfor (let i = 0; i < flatColumns.length; i++) {\n\t\tconst column = flatColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Collects all terminal leaf columns in their current table order.\n*\n* Column ordering features can reorder the collected leaves before the result\n* is returned.\n*\n* @example\n* ```ts\n* const leafColumns = table_getAllLeafColumns(table)\n* ```\n*/\nfunction table_getAllLeafColumns(table) {\n\tconst leafColumns = table.getAllColumns().flatMap((c) => c.getLeafColumns());\n\treturn orderLeafColumns(table, leafColumns);\n}\n/**\n* Builds an id lookup for terminal leaf columns only.\n*\n* Parent/group columns are excluded, making this lookup appropriate for row\n* cells and feature state keyed by data columns.\n*\n* @example\n* ```ts\n* const leavesById = table_getAllLeafColumnsById(table)\n* ```\n*/\nfunction table_getAllLeafColumnsById(table) {\n\tconst result = makeObjectMap();\n\tconst leafColumns = table.getAllLeafColumns();\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst column = leafColumns[i];\n\t\tresult[column.id] = column;\n\t}\n\treturn result;\n}\n/**\n* Looks up a column by id from the flat column map.\n*\n* The lookup can return group columns or leaf columns. In development, a\n* missing id logs a warning to help catch stale column references.\n*\n* @example\n* ```ts\n* const column = table_getColumn(table, 'firstName')\n* ```\n*/\nfunction table_getColumn(table, columnId) {\n\tconst column = table.getAllFlatColumnsById()[columnId];\n\tif (process.env.NODE_ENV === \"development\" && !column) console.warn(`[Table] Column with id '${columnId}' does not exist.`);\n\treturn column;\n}\n\n//#endregion\nexport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { column_getFlatColumns, column_getLeafColumns, table_getAllColumns, table_getAllFlatColumns, table_getAllFlatColumnsById, table_getAllLeafColumns, table_getAllLeafColumnsById, table_getColumn, table_getDefaultColumnDef } from \"./coreColumnsFeature.utils.js\";\n\n//#region src/core/columns/coreColumnsFeature.ts\n/**\n* Core feature that builds the column tree and exposes table/column APIs.\n*/\nconst coreColumnsFeature = {\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreColumnsFeature\", prototype, table, {\n\t\t\tcolumn_getFlatColumns: {\n\t\t\t\tfn: (column) => column_getFlatColumns(column),\n\t\t\t\tmemoDeps: (column) => [column.table.options.columns]\n\t\t\t},\n\t\t\tcolumn_getLeafColumns: {\n\t\t\t\tfn: (column) => column_getLeafColumns(column),\n\t\t\t\tmemoDeps: (column) => [\n\t\t\t\t\tcolumn.table.atoms.columnOrder?.get(),\n\t\t\t\t\tcolumn.table.atoms.grouping?.get(),\n\t\t\t\t\tcolumn.table.options.columns,\n\t\t\t\t\tcolumn.table.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreColumnsFeature\", table, {\n\t\t\ttable_getDefaultColumnDef: {\n\t\t\t\tfn: () => table_getDefaultColumnDef(table),\n\t\t\t\tmemoDeps: () => [table.options.defaultColumn]\n\t\t\t},\n\t\t\ttable_getAllColumns: {\n\t\t\t\tfn: () => table_getAllColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumns: {\n\t\t\t\tfn: () => table_getAllFlatColumns(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllFlatColumnsById: {\n\t\t\t\tfn: () => table_getAllFlatColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.options.columns]\n\t\t\t},\n\t\t\ttable_getAllLeafColumns: {\n\t\t\t\tfn: () => table_getAllLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getAllLeafColumnsById: {\n\t\t\t\tfn: () => table_getAllLeafColumnsById(table),\n\t\t\t\tmemoDeps: () => [table.getAllLeafColumns()]\n\t\t\t},\n\t\t\ttable_getColumn: { fn: (columnId) => table_getColumn(table, columnId) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreColumnsFeature };","//#region src/core/headers/constructHeader.ts\n/**\n* Creates or retrieves the header prototype for a table.\n* The prototype is cached on the table and shared by all header instances.\n*/\nfunction getHeaderPrototype(table) {\n\tif (!table._headerPrototype) {\n\t\ttable._headerPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignHeaderPrototype?.(table._headerPrototype, table);\n\t}\n\treturn table._headerPrototype;\n}\n/**\n* Constructs a header instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructHeader(table, column, options) {\n\tconst headerPrototype = getHeaderPrototype(table);\n\tconst header = Object.create(headerPrototype);\n\theader.colSpan = 0;\n\theader.column = column;\n\theader.depth = options.depth;\n\theader.headerGroup = null;\n\theader.id = options.id ?? column.id;\n\theader.index = options.index;\n\theader.isPlaceholder = !!options.isPlaceholder;\n\theader.placeholderId = options.placeholderId;\n\theader.rowSpan = 0;\n\theader.subHeaders = [];\n\tconst initFns = table._headerInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](header);\n\treturn header;\n}\n\n//#endregion\nexport { constructHeader };","import { getIsColumnVisible } from \"../featureStubs.js\";\nimport { constructHeader } from \"./constructHeader.js\";\n\n//#region src/core/headers/buildHeaderGroups.ts\nfunction getMaxHeaderDepth(columns, depth = 1) {\n\tlet maxDepth = depth;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tif (getIsColumnVisible(column) && column.columns.length) maxDepth = Math.max(maxDepth, getMaxHeaderDepth(column.columns, depth + 1));\n\t}\n\treturn maxDepth;\n}\nfunction formatHeaderGroupId(headerFamily, depth) {\n\treturn headerFamily ? `${headerFamily}_${depth}` : String(depth);\n}\nfunction formatHeaderId(headerFamily, depth, columnId, childHeaderId) {\n\tlet id = headerFamily ?? \"\";\n\tif (depth) id = id ? `${id}_${depth}` : String(depth);\n\tif (columnId) id = id ? `${id}_${columnId}` : columnId;\n\tif (childHeaderId) id = id ? `${id}_${childHeaderId}` : childHeaderId;\n\treturn id;\n}\nfunction countPendingHeadersForColumn(headers, column) {\n\tlet count = 0;\n\tfor (let i = 0; i < headers.length; i++) if (headers[i].column === column) count++;\n\treturn count;\n}\nfunction constructHeaderGroup(headersToGroup, depth, table, headerFamily, headerGroups, headerGroupInitFns) {\n\tconst headerGroup = {\n\t\tdepth,\n\t\tid: formatHeaderGroupId(headerFamily, depth),\n\t\theaders: []\n\t};\n\tconst pendingParentHeaders = [];\n\tfor (let i = 0; i < headersToGroup.length; i++) {\n\t\tif (!(i in headersToGroup)) continue;\n\t\tconst headerToGroup = headersToGroup[i];\n\t\tconst latestPendingParentHeader = pendingParentHeaders[pendingParentHeaders.length - 1];\n\t\tconst isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n\t\tlet column;\n\t\tlet isPlaceholder = false;\n\t\tif (isLeafHeader && headerToGroup.column.parent) column = headerToGroup.column.parent;\n\t\telse {\n\t\t\tcolumn = headerToGroup.column;\n\t\t\tisPlaceholder = true;\n\t\t}\n\t\tif (latestPendingParentHeader && latestPendingParentHeader.column === column) latestPendingParentHeader.subHeaders.push(headerToGroup);\n\t\telse {\n\t\t\tconst header = constructHeader(table, column, {\n\t\t\t\tid: formatHeaderId(headerFamily, depth, column.id, headerToGroup.id),\n\t\t\t\tisPlaceholder,\n\t\t\t\tplaceholderId: isPlaceholder ? String(countPendingHeadersForColumn(pendingParentHeaders, column)) : void 0,\n\t\t\t\tdepth,\n\t\t\t\tindex: pendingParentHeaders.length\n\t\t\t});\n\t\t\theader.subHeaders.push(headerToGroup);\n\t\t\tpendingParentHeaders.push(header);\n\t\t}\n\t\theaderGroup.headers.push(headerToGroup);\n\t\theaderToGroup.headerGroup = headerGroup;\n\t}\n\tfor (let i = 0; i < headerGroupInitFns.length; i++) headerGroupInitFns[i](headerGroup);\n\theaderGroups.push(headerGroup);\n\tif (depth > 0) constructHeaderGroup(pendingParentHeaders, depth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n}\nfunction updateHeaderSpans(headers) {\n\tfor (let i = 0; i < headers.length; i++) {\n\t\tconst header = headers[i];\n\t\tif (!getIsColumnVisible(header.column)) continue;\n\t\tlet colSpan = 0;\n\t\tif (header.subHeaders.length) {\n\t\t\tupdateHeaderSpans(header.subHeaders);\n\t\t\tfor (let j = 0; j < header.subHeaders.length; j++) {\n\t\t\t\tconst child = header.subHeaders[j];\n\t\t\t\tif (!getIsColumnVisible(child.column)) continue;\n\t\t\t\tcolSpan += child.colSpan;\n\t\t\t}\n\t\t} else colSpan = 1;\n\t\theader.colSpan = colSpan;\n\t\tif (header.isPlaceholder && header.subHeaders.length === 1 && header.subHeaders[0].column === header.column) {\n\t\t\tlet rowSpan = 1;\n\t\t\tlet chainChild = header.subHeaders[0];\n\t\t\twhile (chainChild) {\n\t\t\t\tchainChild.rowSpan = 0;\n\t\t\t\trowSpan++;\n\t\t\t\tchainChild = chainChild.subHeaders.length === 1 && chainChild.subHeaders[0].column === header.column ? chainChild.subHeaders[0] : void 0;\n\t\t\t}\n\t\t\theader.rowSpan = rowSpan;\n\t\t} else header.rowSpan = 1;\n\t}\n}\n/**\n* Builds the nested header group structure for a table.\n*\n* The result accounts for visible leaf columns, pinned column groups, and placeholder headers needed to render multi-level headers.\n*/\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n\tconst maxDepth = getMaxHeaderDepth(allColumns);\n\tconst headerGroups = [];\n\tconst headerGroupInitFns = table._headerGroupInstanceInitFns;\n\tconst bottomHeaders = new Array(columnsToGroup.length);\n\tfor (let i = 0; i < columnsToGroup.length; i++) {\n\t\tif (!(i in columnsToGroup)) continue;\n\t\tbottomHeaders[i] = constructHeader(table, columnsToGroup[i], {\n\t\t\tdepth: maxDepth,\n\t\t\tindex: i\n\t\t});\n\t}\n\tconstructHeaderGroup(bottomHeaders, maxDepth - 1, table, headerFamily, headerGroups, headerGroupInitFns);\n\theaderGroups.reverse();\n\tupdateHeaderSpans(headerGroups[0]?.headers ?? []);\n\treturn headerGroups;\n}\n\n//#endregion\nexport { buildHeaderGroups };","import { getVisibleLeafColumns, orderByColumnPinning } from \"../featureStubs.js\";\nimport { buildHeaderGroups } from \"./buildHeaderGroups.js\";\n\n//#region src/core/headers/coreHeadersFeature.utils.ts\nfunction collectLeafHeaders(header, leafHeaders) {\n\tfor (let i = 0; i < header.subHeaders.length; i++) collectLeafHeaders(header.subHeaders[i], leafHeaders);\n\tleafHeaders.push(header);\n}\n/**\n* Walks a header tree and collects all descendant leaf headers.\n*\n* The header itself is included after its descendants, matching the recursive\n* shape used by nested header groups.\n*\n* @example\n* ```ts\n* const leafHeaders = header_getLeafHeaders(header)\n* ```\n*/\nfunction header_getLeafHeaders(header) {\n\tconst leafHeaders = [];\n\tcollectLeafHeaders(header, leafHeaders);\n\treturn leafHeaders;\n}\n/**\n* Builds the render context passed to a column's `header` or `footer` template.\n*\n* The context contains the header, its column, and the owning table instance.\n*\n* @example\n* ```ts\n* const context = header_getContext(header)\n* ```\n*/\nfunction header_getContext(header) {\n\treturn {\n\t\tcolumn: header.column,\n\t\theader,\n\t\ttable: header.column.table\n\t};\n}\n/**\n* Builds visible header groups for the current column tree.\n*\n* Column visibility and pinning are applied before groups are built. When no\n* columns are pinned, the fast path skips pin partitioning.\n*\n* @example\n* ```ts\n* const headerGroups = table_getHeaderGroups(table)\n* ```\n*/\nfunction table_getHeaderGroups(table) {\n\treturn buildHeaderGroups(table.getAllColumns(), orderByColumnPinning(table, getVisibleLeafColumns(table), (column) => column.id), table);\n}\n/**\n* Builds footer groups by reversing the current header groups.\n*\n* Footer rendering uses the same header objects and grouping structure, but\n* renders them from leaf level back toward the root.\n*\n* @example\n* ```ts\n* const footerGroups = table_getFooterGroups(table)\n* ```\n*/\nfunction table_getFooterGroups(table) {\n\treturn [...table.getHeaderGroups()].reverse();\n}\n/**\n* Flattens every header from every header group into one array.\n*\n* The result includes parent headers and placeholder headers, in header-group\n* order from top to bottom.\n*\n* @example\n* ```ts\n* const flatHeaders = table_getFlatHeaders(table)\n* ```\n*/\nfunction table_getFlatHeaders(table) {\n\tconst headerGroups = table.getHeaderGroups();\n\tconst result = [];\n\tfor (let i = 0; i < headerGroups.length; i++) {\n\t\tconst headers = headerGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects only the leaf headers from the current header tree.\n*\n* Parent/group headers are skipped, making the result suitable for rendering\n* one header per visible leaf column.\n*\n* @example\n* ```ts\n* const leafHeaders = table_getLeafHeaders(table)\n* ```\n*/\nfunction table_getLeafHeaders(table) {\n\tconst topHeaders = table.getHeaderGroups()[0]?.headers ?? [];\n\tconst result = [];\n\tfor (let i = 0; i < topHeaders.length; i++) {\n\t\tconst leafHeaders = topHeaders[i].getLeafHeaders();\n\t\tfor (let j = 0; j < leafHeaders.length; j++) result.push(leafHeaders[j]);\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { header_getContext, header_getLeafHeaders, table_getFlatHeaders, table_getFooterGroups, table_getHeaderGroups, table_getLeafHeaders } from \"./coreHeadersFeature.utils.js\";\n\n//#region src/core/headers/coreHeadersFeature.ts\n/**\n* Core feature that builds header groups and exposes header context APIs.\n*/\nconst coreHeadersFeature = {\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreHeadersFeature\", prototype, table, {\n\t\t\theader_getLeafHeaders: {\n\t\t\t\tfn: (header) => header_getLeafHeaders(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t},\n\t\t\theader_getContext: {\n\t\t\t\tfn: (header) => header_getContext(header),\n\t\t\t\tmemoDeps: (header) => [header.column.table.options.columns]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreHeadersFeature\", table, {\n\t\t\ttable_getHeaderGroups: {\n\t\t\t\tfn: () => table_getHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getFooterGroups: {\n\t\t\t\tfn: () => table_getFooterGroups(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getFlatHeaders: {\n\t\t\t\tfn: () => table_getFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getLeafHeaders: {\n\t\t\t\tfn: () => table_getLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreHeadersFeature };","import { makeObjectMap } from \"../../utils.js\";\n\n//#region src/core/rows/constructRow.ts\n/**\n* Creates or retrieves the row prototype for a table.\n* The prototype is cached on the table and shared by all row instances.\n*/\nfunction getRowPrototype(table) {\n\tif (!table._rowPrototype) {\n\t\ttable._rowPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignRowPrototype?.(table._rowPrototype, table);\n\t}\n\treturn table._rowPrototype;\n}\n/**\n* Constructs a row instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nconst constructRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n\tconst rowPrototype = getRowPrototype(table);\n\tconst row = Object.create(rowPrototype);\n\trow._displayIndexCache = -1;\n\trow._uniqueValuesCache = makeObjectMap();\n\trow._valuesCache = makeObjectMap();\n\trow.depth = depth;\n\trow.id = id;\n\trow.index = rowIndex;\n\trow.original = original;\n\trow.parentId = parentId;\n\trow.subRows = subRows ?? [];\n\tconst initFns = table._rowInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](row);\n\treturn row;\n};\n\n//#endregion\nexport { constructRow };","import { makeObjectMap, skipFirstRun, tableMemo } from \"../../utils.js\";\nimport { autoResetCellSelection, autoResetExpanded, autoResetPageIndex, autoResetSorting } from \"../featureStubs.js\";\nimport { constructRow } from \"../rows/constructRow.js\";\n\n//#region src/core/row-models/createCoreRowModel.ts\n/**\n* Creates a memoized core row model factory.\n*\n* The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n*/\nfunction createCoreRowModel() {\n\treturn (table) => {\n\t\treturn tableMemo({\n\t\t\tfeature: \"coreRowModelsFeature\",\n\t\t\ttable,\n\t\t\tfnName: \"table.getCoreRowModel\",\n\t\t\tmemoDeps: () => [table.options.data],\n\t\t\tfn: () => _createCoreRowModel(table, table.options.data),\n\t\t\tonAfterUpdate: skipFirstRun(() => {\n\t\t\t\tautoResetExpanded(table);\n\t\t\t\tautoResetPageIndex(table);\n\t\t\t\tautoResetSorting(table);\n\t\t\t\tautoResetCellSelection(table);\n\t\t\t})\n\t\t});\n\t};\n}\nfunction accessRows(table, rowModel, originalRows, depth = 0, parentRow) {\n\tconst rows = [];\n\tfor (let i = 0; i < originalRows.length; i++) {\n\t\tconst originalRow = originalRows[i];\n\t\tconst row = constructRow(table, table.getRowId(originalRow, i, parentRow), originalRow, i, depth, void 0, parentRow?.id);\n\t\trowModel.flatRows.push(row);\n\t\trowModel.rowsById[row.id] = row;\n\t\trows.push(row);\n\t\tif (table.options.getSubRows) {\n\t\t\trow.originalSubRows = table.options.getSubRows(originalRow, i);\n\t\t\tif (row.originalSubRows?.length) row.subRows = accessRows(table, rowModel, row.originalSubRows, depth + 1, row);\n\t\t}\n\t}\n\treturn rows;\n}\nfunction _createCoreRowModel(table, data) {\n\tconst rowModel = {\n\t\trows: [],\n\t\tflatRows: [],\n\t\trowsById: makeObjectMap()\n\t};\n\trowModel.rows = accessRows(table, rowModel, data);\n\treturn rowModel;\n}\n\n//#endregion\nexport { createCoreRowModel };","import { createCoreRowModel } from \"./createCoreRowModel.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.utils.ts\n/**\n* Resolves the table's unmodified core row model.\n*\n* The factory is created once per table, either from the `coreRowModel` slot on the `features` option\n* or the built-in `createCoreRowModel()`, then reused for later calls.\n*\n* @example\n* ```ts\n* const coreRows = table_getCoreRowModel(table)\n* ```\n*/\nfunction table_getCoreRowModel(table) {\n\tif (!table._rowModels.coreRowModel) table._rowModels.coreRowModel = table.options.features.coreRowModel?.(table) ?? createCoreRowModel()(table);\n\treturn table._rowModels.coreRowModel();\n}\n/**\n* Reads the row model immediately before column/global filtering.\n*\n* Filtering is the first derived row-model stage, so this currently aliases\n* `table.getCoreRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeFiltering = table_getPreFilteredRowModel(table)\n* ```\n*/\nfunction table_getPreFilteredRowModel(table) {\n\treturn table.getCoreRowModel();\n}\n/**\n* Resolves the row model after column and global filtering.\n*\n* When `manualFiltering` is enabled, or no filtered row-model factory was\n* registered, this returns the pre-filtered row model because filtering is\n* expected to happen outside the table.\n*\n* @example\n* ```ts\n* const filteredRows = table_getFilteredRowModel(table)\n* ```\n*/\nfunction table_getFilteredRowModel(table) {\n\tif (!table._rowModels.filteredRowModel) table._rowModels.filteredRowModel = table.options.features.filteredRowModel?.(table);\n\tif (table.options.manualFiltering || !table._rowModels.filteredRowModel) return table.getPreFilteredRowModel();\n\treturn table._rowModels.filteredRowModel();\n}\n/**\n* Reads the row model immediately before grouping.\n*\n* Grouping runs after filtering, so this aliases `table.getFilteredRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeGrouping = table_getPreGroupedRowModel(table)\n* ```\n*/\nfunction table_getPreGroupedRowModel(table) {\n\treturn table.getFilteredRowModel();\n}\n/**\n* Resolves the row model after grouping has produced grouped rows.\n*\n* When `manualGrouping` is enabled, or no grouped row-model factory was\n* registered, this returns the pre-grouped row model unchanged.\n*\n* @example\n* ```ts\n* const groupedRows = table_getGroupedRowModel(table)\n* ```\n*/\nfunction table_getGroupedRowModel(table) {\n\tif (!table._rowModels.groupedRowModel) table._rowModels.groupedRowModel = table.options.features.groupedRowModel?.(table);\n\tif (table.options.manualGrouping || !table._rowModels.groupedRowModel) return table.getPreGroupedRowModel();\n\treturn table._rowModels.groupedRowModel();\n}\n/**\n* Reads the row model immediately before sorting.\n*\n* Sorting runs after grouping, so this aliases `table.getGroupedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeSorting = table_getPreSortedRowModel(table)\n* ```\n*/\nfunction table_getPreSortedRowModel(table) {\n\treturn table.getGroupedRowModel();\n}\n/**\n* Resolves the row model after sorting has been applied.\n*\n* When `manualSorting` is enabled, or no sorted row-model factory was\n* registered, this returns the pre-sorted row model because sorted data is\n* expected to be supplied by the caller.\n*\n* @example\n* ```ts\n* const sortedRows = table_getSortedRowModel(table)\n* ```\n*/\nfunction table_getSortedRowModel(table) {\n\tif (!table._rowModels.sortedRowModel) table._rowModels.sortedRowModel = table.options.features.sortedRowModel?.(table);\n\tif (table.options.manualSorting || !table._rowModels.sortedRowModel) return table.getPreSortedRowModel();\n\treturn table._rowModels.sortedRowModel();\n}\n/**\n* Reads the row model immediately before row expansion.\n*\n* Expansion runs after sorting, so this aliases `table.getSortedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforeExpansion = table_getPreExpandedRowModel(table)\n* ```\n*/\nfunction table_getPreExpandedRowModel(table) {\n\treturn table.getSortedRowModel();\n}\n/**\n* Resolves the row model after expanded rows have been flattened into view.\n*\n* When `manualExpanding` is enabled, or no expanded row-model factory was\n* registered, this returns the pre-expanded row model unchanged.\n*\n* @example\n* ```ts\n* const expandedRows = table_getExpandedRowModel(table)\n* ```\n*/\nfunction table_getExpandedRowModel(table) {\n\tif (!table._rowModels.expandedRowModel) table._rowModels.expandedRowModel = table.options.features.expandedRowModel?.(table);\n\tif (table.options.manualExpanding || !table._rowModels.expandedRowModel) return table.getPreExpandedRowModel();\n\treturn table._rowModels.expandedRowModel();\n}\n/**\n* Reads the row model immediately before pagination.\n*\n* Pagination is the final built-in row-model stage, so this aliases\n* `table.getExpandedRowModel()`.\n*\n* @example\n* ```ts\n* const rowsBeforePagination = table_getPrePaginatedRowModel(table)\n* ```\n*/\nfunction table_getPrePaginatedRowModel(table) {\n\treturn table.getExpandedRowModel();\n}\n/**\n* Resolves the row model after pagination has sliced rows for the current page.\n*\n* When `manualPagination` is enabled, or no paginated row-model factory was\n* registered, this returns the pre-paginated row model because pagination is\n* expected to happen before data reaches the table.\n*\n* @example\n* ```ts\n* const pageRows = table_getPaginatedRowModel(table)\n* ```\n*/\nfunction table_getPaginatedRowModel(table) {\n\tif (!table._rowModels.paginatedRowModel) table._rowModels.paginatedRowModel = table.options.features.paginatedRowModel?.(table);\n\tif (table.options.manualPagination || !table._rowModels.paginatedRowModel) return table.getPrePaginatedRowModel();\n\treturn table._rowModels.paginatedRowModel();\n}\n/**\n* Resolves the final row model consumed by renderers.\n*\n* This is the end of the built-in row-model pipeline: core -> filtering ->\n* grouping -> sorting -> expanding -> pagination.\n*\n* @example\n* ```ts\n* const visibleRows = table_getRowModel(table)\n* ```\n*/\nfunction table_getRowModel(table) {\n\treturn table.getPaginatedRowModel();\n}\n\n//#endregion\nexport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_getCoreRowModel, table_getExpandedRowModel, table_getFilteredRowModel, table_getGroupedRowModel, table_getPaginatedRowModel, table_getPreExpandedRowModel, table_getPreFilteredRowModel, table_getPreGroupedRowModel, table_getPrePaginatedRowModel, table_getPreSortedRowModel, table_getRowModel, table_getSortedRowModel } from \"./coreRowModelsFeature.utils.js\";\n\n//#region src/core/row-models/coreRowModelsFeature.ts\n/**\n* Core feature that wires table row-model accessors and row-model caches.\n*/\nconst coreRowModelsFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreRowModelsFeature\", table, {\n\t\ttable_getCoreRowModel: { fn: () => table_getCoreRowModel(table) },\n\t\ttable_getPreFilteredRowModel: { fn: () => table_getPreFilteredRowModel(table) },\n\t\ttable_getFilteredRowModel: { fn: () => table_getFilteredRowModel(table) },\n\t\ttable_getPreGroupedRowModel: { fn: () => table_getPreGroupedRowModel(table) },\n\t\ttable_getGroupedRowModel: { fn: () => table_getGroupedRowModel(table) },\n\t\ttable_getPreSortedRowModel: { fn: () => table_getPreSortedRowModel(table) },\n\t\ttable_getSortedRowModel: { fn: () => table_getSortedRowModel(table) },\n\t\ttable_getPreExpandedRowModel: { fn: () => table_getPreExpandedRowModel(table) },\n\t\ttable_getExpandedRowModel: { fn: () => table_getExpandedRowModel(table) },\n\t\ttable_getPrePaginatedRowModel: { fn: () => table_getPrePaginatedRowModel(table) },\n\t\ttable_getPaginatedRowModel: { fn: () => table_getPaginatedRowModel(table) },\n\t\ttable_getRowModel: { fn: () => table_getRowModel(table) }\n\t});\n} };\n\n//#endregion\nexport { coreRowModelsFeature };","//#region src/core/cells/constructCell.ts\n/**\n* Creates or retrieves the cell prototype for a table.\n* The prototype is cached on the table and shared by all cell instances.\n*/\nfunction getCellPrototype(table) {\n\tif (!table._cellPrototype) {\n\t\ttable._cellPrototype = { table };\n\t\tconst features = Object.values(table._features);\n\t\tfor (let i = 0; i < features.length; i++) features[i].assignCellPrototype?.(table._cellPrototype, table);\n\t}\n\treturn table._cellPrototype;\n}\n/**\n* Constructs a cell instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructCell(column, row, table) {\n\tconst cellPrototype = getCellPrototype(table);\n\tconst cell = Object.create(cellPrototype);\n\tcell.column = column;\n\tcell.id = `${row.id}_${column.id}`;\n\tcell.row = row;\n\tconst initFns = table._cellInstanceInitFns;\n\tfor (let i = 0; i < initFns.length; i++) initFns[i](cell);\n\treturn cell;\n}\n\n//#endregion\nexport { constructCell };","import { flattenBy, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { expandRowModel } from \"../featureStubs.js\";\nimport { constructCell } from \"../cells/constructCell.js\";\n\n//#region src/core/rows/coreRowsFeature.utils.ts\n/**\n* Returns this row's zero-based position in the current pre-pagination row\n* model. Rows outside that model return `-1`.\n*/\nfunction row_getDisplayIndex(row) {\n\tconst rows = row.table.getRowsInDisplayOrder();\n\tconst displayIndex = row._displayIndexCache;\n\treturn rows[displayIndex] === row ? displayIndex : -1;\n}\n/**\n* Returns the rows in the current display order after assigning their\n* zero-based display indexes.\n*\n* When expanded rows bypass pagination, expanded descendants are inserted into\n* the returned order even though they are absent from the pre-pagination row\n* model.\n*/\nfunction table_getRowsInDisplayOrder(table) {\n\tconst rowModel = table.getPrePaginatedRowModel();\n\tconst rows = table.options.paginateExpandedRows === false ? expandRowModel(table, rowModel).rows : rowModel.rows;\n\tfor (let i = 0; i < rows.length; i++) rows[i]._displayIndexCache = i;\n\treturn rows;\n}\n/**\n* Reads and caches this row's value for a column.\n*\n* The value is produced by the column accessor. Missing columns or display\n* columns without an accessor return `undefined`.\n*\n* @example\n* ```ts\n* const firstName = row_getValue(row, 'firstName')\n* ```\n*/\nfunction row_getValue(row, columnId) {\n\tif (hasOwn(row._valuesCache, columnId)) return row._valuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\trow._valuesCache[columnId] = column.accessorFn(row.original, row.index);\n\treturn row._valuesCache[columnId];\n}\n/**\n* Reads and caches the values used by faceting/grouping for a column.\n*\n* If the column defines `getUniqueValues`, that result is used. Otherwise the\n* row's accessor value is wrapped in a single-item array.\n*\n* @example\n* ```ts\n* const values = row_getUniqueValues(row, 'tags')\n* ```\n*/\nfunction row_getUniqueValues(row, columnId) {\n\tif (hasOwn(row._uniqueValuesCache, columnId)) return row._uniqueValuesCache[columnId];\n\tconst column = row.table.getColumn(columnId);\n\tif (!column?.accessorFn) return;\n\tif (!column.columnDef.getUniqueValues) {\n\t\trow._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n\t\treturn row._uniqueValuesCache[columnId];\n\t}\n\trow._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, row.index);\n\treturn row._uniqueValuesCache[columnId];\n}\n/**\n* Returns a renderable row value for a column.\n*\n* If the accessor value is nullish, the table's `renderFallbackValue` is used\n* instead.\n*\n* @example\n* ```ts\n* const value = row_renderValue(row, 'firstName')\n* ```\n*/\nfunction row_renderValue(row, columnId) {\n\treturn row.getValue(columnId) ?? row.table.options.renderFallbackValue;\n}\n/**\n* Flattens this row's descendant tree into leaf rows.\n*\n* The row itself is not included; only nested `subRows` are walked.\n*\n* @example\n* ```ts\n* const descendants = row_getLeafRows(row)\n* ```\n*/\nfunction row_getLeafRows(row) {\n\treturn flattenBy(row.subRows, (d) => d.subRows);\n}\n/**\n* Returns the deepest structural row depth in the core row model.\n* Root rows are depth `0`, their direct sub-rows are depth `1`, and so on.\n*/\nfunction table_getMaxSubRowDepth(table) {\n\tconst rows = table.getCoreRowModel().flatRows;\n\tlet maxDepth = 0;\n\tfor (let i = 0; i < rows.length; i++) maxDepth = Math.max(maxDepth, rows[i].depth);\n\treturn maxDepth;\n}\n/**\n* Looks up this row's direct parent, if it has one.\n*\n* Parent lookup prefers the core row model for structural parents, then falls\n* back to the pre-pagination row model for generated parent rows.\n*\n* @example\n* ```ts\n* const parent = row_getParentRow(row)\n* ```\n*/\nfunction row_getParentRow(row) {\n\tif (!row.parentId) return;\n\treturn row.table.getCoreRowModel().rowsById[row.parentId] ?? row.table.getRow(row.parentId, true);\n}\n/**\n* Collects this row's ancestor chain from root to direct parent.\n*\n* The current row is not included. Rows without a parent return an empty array.\n*\n* @example\n* ```ts\n* const ancestors = row_getParentRows(row)\n* ```\n*/\nfunction row_getParentRows(row) {\n\tconst parentRows = [];\n\tlet currentRow = row;\n\twhile (true) {\n\t\tconst parentRow = currentRow.getParentRow();\n\t\tif (!parentRow) break;\n\t\tparentRows.push(parentRow);\n\t\tcurrentRow = parentRow;\n\t}\n\treturn parentRows.reverse();\n}\n/**\n* Constructs one cell for each leaf column in this row.\n*\n* The result follows `table.getAllLeafColumns()` order and includes hidden\n* columns; visibility-specific APIs filter this list later.\n*\n* @example\n* ```ts\n* const cells = row_getAllCells(row)\n* ```\n*/\nfunction row_getAllCells(row) {\n\tconst columns = row.table.getAllLeafColumns();\n\tlet cache = row._cellsCache;\n\tif (!cache) cache = row._cellsCache = /* @__PURE__ */ new WeakMap();\n\tconst cells = new Array(columns.length);\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tlet cell = cache.get(column);\n\t\tif (!cell) {\n\t\t\tcell = constructCell(column, row, row.table);\n\t\t\tcache.set(column, cell);\n\t\t}\n\t\tcells[i] = cell;\n\t}\n\treturn cells;\n}\n/**\n* Builds a lookup map of this row's cells keyed by column id.\n*\n* This is the static implementation behind `row.getAllCellsByColumnId()`.\n*\n* @example\n* ```ts\n* const cellsById = row_getAllCellsByColumnId(row)\n* ```\n*/\nfunction row_getAllCellsByColumnId(row) {\n\tconst result = makeObjectMap();\n\tconst cells = row.getAllCells();\n\tfor (let i = 0; i < cells.length; i++) {\n\t\tconst cell = cells[i];\n\t\tresult[cell.column.id] = cell;\n\t}\n\treturn result;\n}\n/**\n* Resolves the stable id for a row.\n*\n* `options.getRowId` wins when provided. Otherwise root rows use their index\n* and child rows append their index to the parent id, such as `0.2`.\n*\n* @example\n* ```ts\n* const id = table_getRowId(originalRow, table, index, parentRow)\n* ```\n*/\nfunction table_getRowId(originalRow, table, index, parent) {\n\treturn table.options.getRowId?.(originalRow, index, parent) ?? (parent ? `${parent.id}.${index}` : String(index));\n}\n/**\n* Looks up a row by id from the current or full row model.\n*\n* By default this searches `table.getRowModel()`. Passing `searchAll` searches\n* the pre-pagination model first, then falls back to the core model.\n*\n* @example\n* ```ts\n* const row = table_getRow(table, rowId, true)\n* ```\n*/\nfunction table_getRow(table, rowId, searchAll) {\n\tlet row = (searchAll ? table.getPrePaginatedRowModel() : table.getRowModel()).rowsById[rowId];\n\tif (!row) {\n\t\trow = table.getCoreRowModel().rowsById[rowId];\n\t\tif (!row) {\n\t\t\tif (process.env.NODE_ENV === \"development\") throw new Error(`getRow could not find row with ID: ${rowId}`);\n\t\t\tthrow new Error();\n\t\t}\n\t}\n\treturn row;\n}\n\n//#endregion\nexport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder };","import { assignPrototypeAPIs, assignTableAPIs } from \"../../utils.js\";\nimport { row_getAllCells, row_getAllCellsByColumnId, row_getDisplayIndex, row_getLeafRows, row_getParentRow, row_getParentRows, row_getUniqueValues, row_getValue, row_renderValue, table_getMaxSubRowDepth, table_getRow, table_getRowId, table_getRowsInDisplayOrder } from \"./coreRowsFeature.utils.js\";\n\n//#region src/core/rows/coreRowsFeature.ts\n/**\n* Core feature that creates row APIs for values, cells, and tree traversal.\n*/\nconst coreRowsFeature = {\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"coreRowsFeature\", prototype, table, {\n\t\t\trow_getDisplayIndex: { fn: (row) => row_getDisplayIndex(row) },\n\t\t\trow_getAllCellsByColumnId: {\n\t\t\t\tfn: (row) => row_getAllCellsByColumnId(row),\n\t\t\t\tmemoDeps: (row) => [row.getAllCells()]\n\t\t\t},\n\t\t\trow_getAllCells: {\n\t\t\t\tfn: (row) => row_getAllCells(row),\n\t\t\t\tmemoDeps: (row) => [row.table.getAllLeafColumns()]\n\t\t\t},\n\t\t\trow_getLeafRows: {\n\t\t\t\tfn: (row) => row_getLeafRows(row),\n\t\t\t\tmemoDeps: (row) => [row.subRows]\n\t\t\t},\n\t\t\trow_getParentRow: { fn: (row) => row_getParentRow(row) },\n\t\t\trow_getParentRows: { fn: (row) => row_getParentRows(row) },\n\t\t\trow_getUniqueValues: { fn: (row, columnId) => row_getUniqueValues(row, columnId) },\n\t\t\trow_getValue: { fn: (row, columnId) => row_getValue(row, columnId) },\n\t\t\trow_renderValue: { fn: (row, columnId) => row_renderValue(row, columnId) }\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"coreRowsFeature\", table, {\n\t\t\ttable_getRowsInDisplayOrder: {\n\t\t\t\tfn: () => table_getRowsInDisplayOrder(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getPrePaginatedRowModel().rows,\n\t\t\t\t\ttable.options.paginateExpandedRows,\n\t\t\t\t\ttable.options.paginateExpandedRows === false ? table.atoms.expanded?.get() : void 0\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getRowId: { fn: (originalRow, index, parent) => table_getRowId(originalRow, table, index, parent) },\n\t\t\ttable_getRow: { fn: (id, searchAll) => table_getRow(table, id, searchAll) },\n\t\t\ttable_getMaxSubRowDepth: {\n\t\t\t\tfn: () => table_getMaxSubRowDepth(table),\n\t\t\t\tmemoDeps: () => [table.getCoreRowModel()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { coreRowsFeature };","import { cloneState, functionalUpdate } from \"../../utils.js\";\n\n//#region src/core/table/coreTablesFeature.utils.ts\n/**\n* Synchronizes externally controlled state slices into the table's base atoms.\n*\n* This keeps `options.state` values mirrored in the atom graph so derived\n* atoms, stores, and table APIs read a consistent snapshot.\n*\n* Adapters that update options during their host's render phase pass the\n* state snapshot captured by the committed render as `capturedState` — the\n* shared options object may already hold values from a newer render that\n* never commits. Pass `null` to publish nothing (a captured \"no controlled\n* state\"); omitting the argument reads the current `table.options.state`\n* instead. An optional `compare` suppresses semantically unchanged slice\n* writes; the default remains reference equality.\n*\n* @example\n* ```ts\n* table_syncExternalStateToBaseAtoms(table)\n* table_syncExternalStateToBaseAtoms(table, capturedState ?? null, shallow)\n* ```\n*/\nfunction table_syncExternalStateToBaseAtoms(table, capturedState, compare = (currentState, externalState) => currentState === externalState) {\n\tconst state = capturedState === void 0 ? table.options.state : capturedState;\n\ttable._reactivity.batch(() => {\n\t\tif (state) for (const key in state) {\n\t\t\tconst baseAtom = table.baseAtoms[key];\n\t\t\tif (!baseAtom) continue;\n\t\t\tconst rawExternalState = state[key];\n\t\t\tconst externalState = rawExternalState === void 0 ? table.initialState[key] : rawExternalState;\n\t\t\tif (!compare(table._reactivity.untrack(() => baseAtom.get()), externalState)) baseAtom.set(() => externalState);\n\t\t}\n\t});\n}\n/**\n* Publishes captured controlled state after a host framework commits.\n*\n* Render-phase adapters stage options without synchronizing base atoms, then\n* pass the state captured by the committed render here. The commit signal also\n* invalidates ownership changes when no base atom was written.\n*/\nfunction table_publishExternalState(table, state, compare = (currentState, externalState) => currentState === externalState) {\n\ttable._reactivity.batch(() => {\n\t\ttable_syncExternalStateToBaseAtoms(table, state, compare);\n\t\ttable._reactivity.commit?.();\n\t});\n}\n/**\n* Resets all internal table base atoms to `table.initialState`, then clears\n* transient instance data through registered feature reset hooks.\n*\n* This resets internally owned state slices in a single reactivity batch. Use\n* feature-specific reset APIs when a slice may be externally owned.\n*\n* @example\n* ```ts\n* table_reset(table)\n* ```\n*/\nfunction table_reset(table) {\n\tconst snap = cloneState(table.initialState);\n\ttable._reactivity.batch(() => {\n\t\tconst keys = Object.keys(snap);\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key = keys[i];\n\t\t\ttable.baseAtoms[key].set(snap[key]);\n\t\t}\n\t});\n\tconst features = Object.values(table._features);\n\tfor (let i = 0; i < features.length; i++) features[i].resetTableInstanceData?.(table);\n}\n/**\n* Merges new table options with the current resolved options.\n*\n* If `options.mergeOptions` is provided, it owns the merge behavior; otherwise\n* options are shallow-merged. Static options that should never change after\n* initialization are restored on a fresh object so framework merge helpers may\n* return readonly getter/proxy objects.\n*\n* @example\n* ```ts\n* const options = table_mergeOptions(table, nextOptions)\n* ```\n*/\nfunction table_mergeOptions(table, newOptions) {\n\tconst { features, atoms, initialState } = table.options;\n\tif (!table.options.mergeOptions) return {\n\t\t...table.options,\n\t\t...newOptions,\n\t\tfeatures,\n\t\tatoms,\n\t\tinitialState\n\t};\n\tconst mergedOptions = table.options.mergeOptions(table.options, newOptions);\n\tconst descriptors = { ...Object.getOwnPropertyDescriptors(mergedOptions) };\n\treturn Object.defineProperties(Object.create(Object.getPrototypeOf(mergedOptions)), {\n\t\t...descriptors,\n\t\tfeatures: {\n\t\t\tvalue: features,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tatoms: {\n\t\t\tvalue: atoms,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t},\n\t\tinitialState: {\n\t\t\tvalue: initialState,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\twritable: true\n\t\t}\n\t});\n}\n/**\n* Updates the table options object.\n*\n* The updater receives the current resolved options and the merged result is\n* immediately assigned to the table instance.\n*\n* @example\n* ```ts\n* table_setOptions(table, (old) => old)\n* table_setOptions(table, (old) => old, { syncExternalState: false })\n* ```\n*/\nfunction table_setOptions(table, updater, options) {\n\tconst mergedOptions = table_mergeOptions(table, functionalUpdate(updater, table.options));\n\tif (table.optionsStore) table.optionsStore.set(() => mergedOptions);\n\telse table.options = mergedOptions;\n\tif (options?.syncExternalState !== false) table_publishExternalState(table, mergedOptions.state ?? null);\n}\n\n//#endregion\nexport { table_mergeOptions, table_publishExternalState, table_reset, table_setOptions, table_syncExternalStateToBaseAtoms };","import { assignTableAPIs } from \"../../utils.js\";\nimport { table_reset, table_setOptions } from \"./coreTablesFeature.utils.js\";\n\n//#region src/core/table/coreTablesFeature.ts\n/**\n* Core feature that adds base table instance APIs such as reset and setOptions.\n*/\nconst coreTablesFeature = { constructTableAPIs: (table) => {\n\tassignTableAPIs(\"coreTablesFeature\", table, {\n\t\ttable_reset: { fn: () => table_reset(table) },\n\t\ttable_setOptions: { fn: (updater) => table_setOptions(table, updater) }\n\t});\n} };\n\n//#endregion\nexport { coreTablesFeature };","import { coreCellsFeature } from \"./cells/coreCellsFeature.js\";\nimport { coreColumnsFeature } from \"./columns/coreColumnsFeature.js\";\nimport { coreHeadersFeature } from \"./headers/coreHeadersFeature.js\";\nimport { coreRowModelsFeature } from \"./row-models/coreRowModelsFeature.js\";\nimport { coreRowsFeature } from \"./rows/coreRowsFeature.js\";\nimport { coreTablesFeature } from \"./table/coreTablesFeature.js\";\n\n//#region src/core/coreFeatures.ts\n/**\n* The built-in core feature set required by every table.\n*\n* These features provide table, column, row, header, cell, and core row-model behavior before optional feature plugins are added.\n*/\nconst coreFeatures = {\n\tcoreCellsFeature,\n\tcoreColumnsFeature,\n\tcoreHeadersFeature,\n\tcoreRowModelsFeature,\n\tcoreRowsFeature,\n\tcoreTablesFeature\n};\n\n//#endregion\nexport { coreFeatures };","//#region src/helpers/tableFeatures.ts\n/**\n* A helper function to help define the features that are to be imported and applied to a table instance.\n* Use this utility to make it easier to have the correct type inference for the features that are being imported.\n* **Note:** It is recommended to use this utility statically outside of a component.\n*\n* Alongside feature modules, this object carries everything else that is\n* statically stitched into the table:\n*\n* - Row model factories (`sortedRowModel`, `filteredRowModel`, etc.)\n* - Row model function registries (`sortFns`, `filterFns`, `aggregationFns`),\n* whose keys become the valid string values for `sortFn`, `filterFn`,\n* `globalFilterFn`, and `aggregationFn` with full inference\n* - Type-only `tableMeta`/`columnMeta` slots for declaring per-table meta types\n* instead of using global declaration merging. The values are phantom\n* (ignored and stripped at runtime); only their types are used.\n* @example\n* ```\n* import {\n* columnFilteringFeature,\n* createFilteredRowModel,\n* createSortedRowModel,\n* filterFn_includesString,\n* rowSortingFeature,\n* sortFn_alphanumeric,\n* sortFn_text,\n* tableFeatures,\n* } from '@tanstack/react-table'\n* const features = tableFeatures({\n* columnFilteringFeature,\n* rowSortingFeature,\n* filteredRowModel: createFilteredRowModel(),\n* sortedRowModel: createSortedRowModel(),\n* filterFns: { includesString: filterFn_includesString, myCustomFilterFn },\n* sortFns: { alphanumeric: sortFn_alphanumeric, text: sortFn_text },\n* tableMeta: {} as { updateData: (rowIndex: number, columnId: string, value: unknown) => void },\n* columnMeta: {} as { align?: 'left' | 'right' },\n* });\n* const table = useTable({ features, columns, data });\n* ```\n*/\nfunction tableFeatures(features) {\n\treturn features;\n}\n\n//#endregion\nexport { tableFeatures };","//#region src/core/reactivity/coreReactivityFeature.utils.ts\n/**\n* Bridges atom instances to the `Store`/`ReadonlyStore` API by exposing\n* a `state` getter backed by `atom.get()`, and wiring `setState` for\n* writable atoms.\n*\n* @example\n* ```ts\n* const store = atomToStore(atom)\n* ```\n*/\nfunction atomToStore(atom) {\n\tconst store = atom;\n\tObject.defineProperty(atom, \"state\", { get() {\n\t\treturn atom.get();\n\t} });\n\tif (\"set\" in atom) store.setState = atom.set.bind(atom);\n\treturn store;\n}\n\n//#endregion\nexport { atomToStore };","//#region src/alien.ts\nconst NONE = 0;\nconst MUTABLE = 1;\nconst WATCHING = 2;\nconst RECURSED_CHECK = 4;\nconst RECURSED = 8;\nconst DIRTY = 16;\nconst PENDING = 32;\n/* @__NO_SIDE_EFFECTS__ */\nfunction createReactiveSystem({ update, notify, unwatched }) {\n\treturn {\n\t\tlink,\n\t\tunlink,\n\t\tpropagate,\n\t\tcheckDirty,\n\t\tshallowPropagate\n\t};\n\tfunction link(dep, sub, version) {\n\t\tconst prevDep = sub.depsTail;\n\t\tif (prevDep !== void 0 && prevDep.dep === dep) return;\n\t\tconst nextDep = prevDep !== void 0 ? prevDep.nextDep : sub.deps;\n\t\tif (nextDep !== void 0 && nextDep.dep === dep) {\n\t\t\tnextDep.version = version;\n\t\t\tsub.depsTail = nextDep;\n\t\t\treturn;\n\t\t}\n\t\tconst prevSub = dep.subsTail;\n\t\tif (prevSub !== void 0 && prevSub.version === version && prevSub.sub === sub) return;\n\t\tconst newLink = sub.depsTail = dep.subsTail = {\n\t\t\tversion,\n\t\t\tdep,\n\t\t\tsub,\n\t\t\tprevDep,\n\t\t\tnextDep,\n\t\t\tprevSub,\n\t\t\tnextSub: void 0\n\t\t};\n\t\tif (nextDep !== void 0) nextDep.prevDep = newLink;\n\t\tif (prevDep !== void 0) prevDep.nextDep = newLink;\n\t\telse sub.deps = newLink;\n\t\tif (prevSub !== void 0) prevSub.nextSub = newLink;\n\t\telse dep.subs = newLink;\n\t}\n\tfunction unlink(link, sub = link.sub) {\n\t\tconst dep = link.dep;\n\t\tconst prevDep = link.prevDep;\n\t\tconst nextDep = link.nextDep;\n\t\tconst nextSub = link.nextSub;\n\t\tconst prevSub = link.prevSub;\n\t\tif (nextDep !== void 0) nextDep.prevDep = prevDep;\n\t\telse sub.depsTail = prevDep;\n\t\tif (prevDep !== void 0) prevDep.nextDep = nextDep;\n\t\telse sub.deps = nextDep;\n\t\tif (nextSub !== void 0) nextSub.prevSub = prevSub;\n\t\telse dep.subsTail = prevSub;\n\t\tif (prevSub !== void 0) prevSub.nextSub = nextSub;\n\t\telse if ((dep.subs = nextSub) === void 0) unwatched(dep);\n\t\treturn nextDep;\n\t}\n\tfunction propagate(link) {\n\t\tlet next = link.nextSub;\n\t\tlet stack;\n\t\ttop: do {\n\t\t\tconst sub = link.sub;\n\t\t\tlet flags = sub.flags;\n\t\t\tif (!(flags & 60)) sub.flags = flags | 32;\n\t\t\telse if (!(flags & (4 | 8))) flags = 0;\n\t\t\telse if (!(flags & 4)) sub.flags = flags & ~8 | 32;\n\t\t\telse if (!(flags & (16 | 32)) && isValidLink(link, sub)) {\n\t\t\t\tsub.flags = flags | (8 | 32);\n\t\t\t\tflags &= 1;\n\t\t\t} else flags = 0;\n\t\t\tif (flags & 2) notify(sub);\n\t\t\tif (flags & 1) {\n\t\t\t\tconst subSubs = sub.subs;\n\t\t\t\tif (subSubs !== void 0) {\n\t\t\t\t\tconst nextSub = (link = subSubs).nextSub;\n\t\t\t\t\tif (nextSub !== void 0) {\n\t\t\t\t\t\tstack = {\n\t\t\t\t\t\t\tvalue: next,\n\t\t\t\t\t\t\tprev: stack\n\t\t\t\t\t\t};\n\t\t\t\t\t\tnext = nextSub;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((link = next) !== void 0) {\n\t\t\t\tnext = link.nextSub;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\twhile (stack !== void 0) {\n\t\t\t\tlink = stack.value;\n\t\t\t\tstack = stack.prev;\n\t\t\t\tif (link !== void 0) {\n\t\t\t\t\tnext = link.nextSub;\n\t\t\t\t\tcontinue top;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t} while (true);\n\t}\n\tfunction checkDirty(link, sub) {\n\t\tlet stack;\n\t\tlet checkDepth = 0;\n\t\tlet dirty = false;\n\t\ttop: do {\n\t\t\tconst dep = link.dep;\n\t\t\tconst flags = dep.flags;\n\t\t\tif (sub.flags & 16) dirty = true;\n\t\t\telse if ((flags & (1 | 16)) === (1 | 16)) {\n\t\t\t\tif (update(dep)) {\n\t\t\t\t\tconst subs = dep.subs;\n\t\t\t\t\tif (subs.nextSub !== void 0) shallowPropagate(subs);\n\t\t\t\t\tdirty = true;\n\t\t\t\t}\n\t\t\t} else if ((flags & (1 | 32)) === (1 | 32)) {\n\t\t\t\tif (link.nextSub !== void 0 || link.prevSub !== void 0) stack = {\n\t\t\t\t\tvalue: link,\n\t\t\t\t\tprev: stack\n\t\t\t\t};\n\t\t\t\tlink = dep.deps;\n\t\t\t\tsub = dep;\n\t\t\t\t++checkDepth;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!dirty) {\n\t\t\t\tconst nextDep = link.nextDep;\n\t\t\t\tif (nextDep !== void 0) {\n\t\t\t\t\tlink = nextDep;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (checkDepth--) {\n\t\t\t\tconst firstSub = sub.subs;\n\t\t\t\tconst hasMultipleSubs = firstSub.nextSub !== void 0;\n\t\t\t\tif (hasMultipleSubs) {\n\t\t\t\t\tlink = stack.value;\n\t\t\t\t\tstack = stack.prev;\n\t\t\t\t} else link = firstSub;\n\t\t\t\tif (dirty) {\n\t\t\t\t\tif (update(sub)) {\n\t\t\t\t\t\tif (hasMultipleSubs) shallowPropagate(firstSub);\n\t\t\t\t\t\tsub = link.sub;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdirty = false;\n\t\t\t\t} else sub.flags &= ~32;\n\t\t\t\tsub = link.sub;\n\t\t\t\tconst nextDep = link.nextDep;\n\t\t\t\tif (nextDep !== void 0) {\n\t\t\t\t\tlink = nextDep;\n\t\t\t\t\tcontinue top;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dirty;\n\t\t} while (true);\n\t}\n\tfunction shallowPropagate(link) {\n\t\tdo {\n\t\t\tconst sub = link.sub;\n\t\t\tconst flags = sub.flags;\n\t\t\tif ((flags & (32 | 16)) === 32) {\n\t\t\t\tsub.flags = flags | 16;\n\t\t\t\tif ((flags & (2 | 4)) === 2) notify(sub);\n\t\t\t}\n\t\t} while ((link = link.nextSub) !== void 0);\n\t}\n\tfunction isValidLink(checkLink, sub) {\n\t\tlet link = sub.depsTail;\n\t\twhile (link !== void 0) {\n\t\t\tif (link === checkLink) return true;\n\t\t\tlink = link.prevDep;\n\t\t}\n\t\treturn false;\n\t}\n}\n\n//#endregion\nexport { createReactiveSystem };\n//# sourceMappingURL=alien.js.map","import { createReactiveSystem } from \"./alien.js\";\n\n//#region src/atom.ts\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n\tconst isObserver = typeof nextHandler === \"object\";\n\tconst self = isObserver ? nextHandler : void 0;\n\treturn {\n\t\tnext: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n\t\terror: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n\t\tcomplete: (isObserver ? nextHandler.complete : completionHandler)?.bind(self)\n\t};\n}\nconst queuedEffects = [];\nlet cycle = 0;\nconst { link, unlink, propagate, checkDirty, shallowPropagate } = /* @__PURE__ */ createReactiveSystem({\n\tupdate(atom) {\n\t\treturn atom._update();\n\t},\n\tnotify(effect) {\n\t\tqueuedEffects[queuedEffectsLength++] = effect;\n\t\teffect.flags &= ~2;\n\t},\n\tunwatched(atom) {\n\t\tif (atom.depsTail !== void 0) {\n\t\t\tatom.depsTail = void 0;\n\t\t\tatom.flags = 1 | 16;\n\t\t\tpurgeDeps(atom);\n\t\t}\n\t}\n});\nlet notifyIndex = 0;\nlet queuedEffectsLength = 0;\nlet activeSub;\nlet batchDepth = 0;\nfunction batch(fn) {\n\ttry {\n\t\t++batchDepth;\n\t\tfn();\n\t} finally {\n\t\tif (!--batchDepth) flush();\n\t}\n}\nfunction purgeDeps(sub) {\n\tconst depsTail = sub.depsTail;\n\tlet dep = depsTail !== void 0 ? depsTail.nextDep : sub.deps;\n\twhile (dep !== void 0) dep = unlink(dep, sub);\n}\nfunction flush() {\n\tif (batchDepth > 0) return;\n\twhile (notifyIndex < queuedEffectsLength) {\n\t\tconst effect = queuedEffects[notifyIndex];\n\t\tqueuedEffects[notifyIndex++] = void 0;\n\t\teffect.notify();\n\t}\n\tnotifyIndex = 0;\n\tqueuedEffectsLength = 0;\n}\nfunction createAsyncAtom(getValue, options) {\n\tconst ref = {};\n\tconst atom = createAtom(() => {\n\t\tgetValue().then((data) => {\n\t\t\tconst internalAtom = ref.current;\n\t\t\tif (internalAtom._update({\n\t\t\t\tstatus: \"done\",\n\t\t\t\tdata\n\t\t\t})) {\n\t\t\t\tconst subs = internalAtom.subs;\n\t\t\t\tif (subs !== void 0) {\n\t\t\t\t\tpropagate(subs);\n\t\t\t\t\tshallowPropagate(subs);\n\t\t\t\t\tflush();\n\t\t\t\t}\n\t\t\t}\n\t\t}, (error) => {\n\t\t\tconst internalAtom = ref.current;\n\t\t\tif (internalAtom._update({\n\t\t\t\tstatus: \"error\",\n\t\t\t\terror\n\t\t\t})) {\n\t\t\t\tconst subs = internalAtom.subs;\n\t\t\t\tif (subs !== void 0) {\n\t\t\t\t\tpropagate(subs);\n\t\t\t\t\tshallowPropagate(subs);\n\t\t\t\t\tflush();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn { status: \"pending\" };\n\t}, options);\n\tref.current = atom;\n\treturn atom;\n}\nfunction createAtom(valueOrFn, options) {\n\tconst isComputed = typeof valueOrFn === \"function\";\n\tconst getter = valueOrFn;\n\tconst atom = {\n\t\t_snapshot: isComputed ? void 0 : valueOrFn,\n\t\tsubs: void 0,\n\t\tsubsTail: void 0,\n\t\tdeps: void 0,\n\t\tdepsTail: void 0,\n\t\tflags: isComputed ? 0 : 1,\n\t\tget() {\n\t\t\tif (activeSub !== void 0) link(atom, activeSub, cycle);\n\t\t\treturn atom._snapshot;\n\t\t},\n\t\tsubscribe(observerOrFn) {\n\t\t\tconst obs = toObserver(observerOrFn);\n\t\t\tconst observed = { current: false };\n\t\t\tconst e = effect(() => {\n\t\t\t\tatom.get();\n\t\t\t\tif (!observed.current) observed.current = true;\n\t\t\t\telse {\n\t\t\t\t\tactiveSub = void 0;\n\t\t\t\t\tobs.next?.(atom._snapshot);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn { unsubscribe: () => {\n\t\t\t\te.stop();\n\t\t\t} };\n\t\t},\n\t\t_update(getValue) {\n\t\t\tconst prevSub = activeSub;\n\t\t\tconst compare = options?.compare ?? Object.is;\n\t\t\tif (isComputed) {\n\t\t\t\tactiveSub = atom;\n\t\t\t\t++cycle;\n\t\t\t\tatom.depsTail = void 0;\n\t\t\t} else if (getValue === void 0) return false;\n\t\t\tif (isComputed) atom.flags = 1 | 4;\n\t\t\ttry {\n\t\t\t\tconst oldValue = atom._snapshot;\n\t\t\t\tconst newValue = typeof getValue === \"function\" ? getValue(oldValue) : getValue === void 0 && isComputed ? getter(oldValue) : getValue;\n\t\t\t\tif (oldValue === void 0 || !compare(oldValue, newValue)) {\n\t\t\t\t\tatom._snapshot = newValue;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} finally {\n\t\t\t\tactiveSub = prevSub;\n\t\t\t\tif (isComputed) atom.flags &= ~4;\n\t\t\t\tpurgeDeps(atom);\n\t\t\t}\n\t\t}\n\t};\n\tif (isComputed) {\n\t\tatom.flags = 1 | 16;\n\t\tatom.get = function() {\n\t\t\tconst flags = atom.flags;\n\t\t\tif (flags & 16 || flags & 32 && checkDirty(atom.deps, atom)) {\n\t\t\t\tif (atom._update()) {\n\t\t\t\t\tconst subs = atom.subs;\n\t\t\t\t\tif (subs !== void 0) shallowPropagate(subs);\n\t\t\t\t}\n\t\t\t} else if (flags & 32) atom.flags = flags & ~32;\n\t\t\tif (activeSub !== void 0) link(atom, activeSub, cycle);\n\t\t\treturn atom._snapshot;\n\t\t};\n\t} else atom.set = function(valueOrFn) {\n\t\tif (atom._update(valueOrFn)) {\n\t\t\tconst subs = atom.subs;\n\t\t\tif (subs !== void 0) {\n\t\t\t\tpropagate(subs);\n\t\t\t\tshallowPropagate(subs);\n\t\t\t\tflush();\n\t\t\t}\n\t\t}\n\t};\n\treturn atom;\n}\nfunction effect(fn) {\n\tconst run = () => {\n\t\tconst prevSub = activeSub;\n\t\tactiveSub = effectObj;\n\t\t++cycle;\n\t\teffectObj.depsTail = void 0;\n\t\teffectObj.flags = 2 | 4;\n\t\ttry {\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tactiveSub = prevSub;\n\t\t\teffectObj.flags &= ~4;\n\t\t\tpurgeDeps(effectObj);\n\t\t}\n\t};\n\tconst effectObj = {\n\t\tdeps: void 0,\n\t\tdepsTail: void 0,\n\t\tsubs: void 0,\n\t\tsubsTail: void 0,\n\t\tflags: 2 | 4,\n\t\tnotify() {\n\t\t\tconst flags = this.flags;\n\t\t\tif (flags & 16 || flags & 32 && checkDirty(this.deps, this)) run();\n\t\t\telse this.flags = 2;\n\t\t},\n\t\tstop() {\n\t\t\tthis.flags = 0;\n\t\t\tthis.depsTail = void 0;\n\t\t\tpurgeDeps(this);\n\t\t}\n\t};\n\trun();\n\treturn effectObj;\n}\n\n//#endregion\nexport { batch, createAsyncAtom, createAtom, flush, toObserver };\n//# sourceMappingURL=atom.js.map","//#region src/shallow.ts\nfunction shallow(objA, objB) {\n\tif (Object.is(objA, objB)) return true;\n\tif (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) return false;\n\tif (objA instanceof Map && objB instanceof Map) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const [k, v] of objA) if (!objB.has(k) || !Object.is(v, objB.get(k))) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Set && objB instanceof Set) {\n\t\tif (objA.size !== objB.size) return false;\n\t\tfor (const v of objA) if (!objB.has(v)) return false;\n\t\treturn true;\n\t}\n\tif (objA instanceof Date && objB instanceof Date) {\n\t\tif (objA.getTime() !== objB.getTime()) return false;\n\t\treturn true;\n\t}\n\tconst keysA = getOwnKeys(objA);\n\tif (keysA.length !== getOwnKeys(objB).length) return false;\n\tfor (let i = 0; i < keysA.length; i++) if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) return false;\n\treturn true;\n}\nfunction getOwnKeys(obj) {\n\treturn Object.keys(obj).concat(Object.getOwnPropertySymbols(obj));\n}\n\n//#endregion\nexport { shallow };\n//# sourceMappingURL=shallow.js.map","import { cloneState, hasOwn } from \"../../utils.js\";\nimport { table_syncExternalStateToBaseAtoms } from \"./coreTablesFeature.utils.js\";\nimport { coreFeatures } from \"../coreFeatures.js\";\nimport { atomToStore } from \"../reactivity/coreReactivityFeature.utils.js\";\nimport { shallow } from \"@tanstack/store\";\n\n//#region src/core/table/constructTable.ts\n/**\n* Builds the initial table state from registered features and user initial state.\n*\n* Each feature contributes its default state before user-provided `initialState` values are merged in.\n*/\nfunction getInitialTableState(features, initialState = {}) {\n\tObject.values(features).forEach((feature) => {\n\t\tinitialState = feature.getInitialState?.(initialState) ?? initialState;\n\t});\n\treturn cloneState(initialState);\n}\n/**\n* Constructs a table instance from normalized table internals.\n*\n* This wires core properties, feature prototype APIs, and instance data used by table rendering and row-model operations.\n*/\nfunction constructTable(tableOptions) {\n\tconst _reactivity = tableOptions.features.coreReactivityFeature;\n\tconst { aggregationFns, columnMeta: _columnMeta, coreRowModel, expandedRowModel, facetedMinMaxValues, facetedRowModel, facetedUniqueValues, filterFns, filterMeta: _filterMeta, filteredRowModel, groupedRowModel, paginatedRowModel, sortFns, sortedRowModel, tableMeta: _tableMeta, ...features } = tableOptions.features;\n\tconst table = {\n\t\t_cellInstanceInitFns: [],\n\t\t_columnInstanceInitFns: [],\n\t\t_features: {\n\t\t\t...coreFeatures,\n\t\t\t...features\n\t\t},\n\t\t_headerGroupInstanceInitFns: [],\n\t\t_headerInstanceInitFns: [],\n\t\t_reactivity,\n\t\t_rowInstanceInitFns: [],\n\t\t_rowModelFns: {\n\t\t\taggregationFns,\n\t\t\tfilterFns,\n\t\t\tsortFns\n\t\t},\n\t\t_rowModels: {},\n\t\tatoms: {},\n\t\tbaseAtoms: {}\n\t};\n\tconst featuresList = Object.values(table._features);\n\tconst mergedOptions = {\n\t\t...featuresList.reduce((obj, feature) => {\n\t\t\treturn Object.assign(obj, feature.getDefaultTableOptions?.(table));\n\t\t}, {}),\n\t\t...tableOptions\n\t};\n\tif (_reactivity.wrapExternalAtoms && mergedOptions.atoms) for (const [atomKey, _atom] of Object.entries(mergedOptions.atoms)) {\n\t\tconst atom = _atom;\n\t\tconst wrappedAtom = _reactivity.createWritableAtom(atom.get(), { debugName: `externalAtom/${atomKey}` });\n\t\tmergedOptions.atoms[atomKey] = wrappedAtom;\n\t\tlet syncExternal = false;\n\t\tconst syncAtomToWrappedSub = atom.subscribe((value) => {\n\t\t\tif (syncExternal) return;\n\t\t\twrappedAtom.set(value);\n\t\t});\n\t\tconst syncWrappedToAtomSub = wrappedAtom.subscribe((value) => {\n\t\t\tsyncExternal = true;\n\t\t\tatom.set(value);\n\t\t\tsyncExternal = false;\n\t\t});\n\t\t_reactivity.addSubscription(syncAtomToWrappedSub);\n\t\t_reactivity.addSubscription(syncWrappedToAtomSub);\n\t}\n\tif (_reactivity.createOptionsStore) {\n\t\ttable.optionsStore = _reactivity.createWritableAtom(mergedOptions, { debugName: \"table/optionsStore\" });\n\t\tObject.defineProperty(table, \"options\", {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\treturn table.optionsStore.get();\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\ttable.optionsStore.set(() => value);\n\t\t\t}\n\t\t});\n\t} else table.options = mergedOptions;\n\ttable.initialState = getInitialTableState(table._features, table.options.initialState);\n\tconst stateKeys = Object.keys(table.initialState);\n\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\tconst key = stateKeys[i];\n\t\ttable.baseAtoms[key] = _reactivity.createWritableAtom(table.initialState[key], { debugName: `table/baseAtoms/${key}` });\n\t\ttable.atoms[key] = _reactivity.createReadonlyAtom(() => {\n\t\t\tconst options = table.options;\n\t\t\tconst externalAtom = options.atoms?.[key];\n\t\t\tconst reactiveState = externalAtom ? externalAtom.get() : table.baseAtoms[key].get();\n\t\t\tif (externalAtom) return reactiveState;\n\t\t\tconst controlledState = options.state;\n\t\t\tif (controlledState && hasOwn(controlledState, key)) {\n\t\t\t\tconst controlledValue = controlledState[key];\n\t\t\t\treturn controlledValue === void 0 ? table.initialState[key] : controlledValue;\n\t\t\t}\n\t\t\treturn reactiveState;\n\t\t}, { debugName: `table/atoms/${key}` });\n\t}\n\ttable_syncExternalStateToBaseAtoms(table);\n\ttable.store = atomToStore(_reactivity.createReadonlyAtom(() => {\n\t\tconst snapshot = {};\n\t\tfor (let i = 0; i < stateKeys.length; i++) {\n\t\t\tconst key = stateKeys[i];\n\t\t\tsnapshot[key] = table.atoms[key].get();\n\t\t}\n\t\treturn snapshot;\n\t}, {\n\t\tcompare: shallow,\n\t\tdebugName: \"table/store\"\n\t}));\n\tfor (let i = 0; i < featuresList.length; i++) {\n\t\tconst feature = featuresList[i];\n\t\tfeature.initTableInstanceData?.(table);\n\t\tif (feature.initCellInstanceData) table._cellInstanceInitFns.push(feature.initCellInstanceData.bind(feature));\n\t\tif (feature.initColumnInstanceData) table._columnInstanceInitFns.push(feature.initColumnInstanceData.bind(feature));\n\t\tif (feature.initHeaderGroupInstanceData) table._headerGroupInstanceInitFns.push(feature.initHeaderGroupInstanceData.bind(feature));\n\t\tif (feature.initHeaderInstanceData) table._headerInstanceInitFns.push(feature.initHeaderInstanceData.bind(feature));\n\t\tif (feature.initRowInstanceData) table._rowInstanceInitFns.push(feature.initRowInstanceData.bind(feature));\n\t\tfeature.constructTableAPIs?.(table);\n\t}\n\tif (process.env.NODE_ENV === \"development\" && (tableOptions.debugAll || tableOptions.debugTable)) {\n\t\tconst features = Object.keys(table._features);\n\t\tconst rowModels = Object.entries({\n\t\t\tcoreRowModel,\n\t\t\tfilteredRowModel,\n\t\t\tgroupedRowModel,\n\t\t\tsortedRowModel,\n\t\t\texpandedRowModel,\n\t\t\tpaginatedRowModel,\n\t\t\tfacetedRowModel,\n\t\t\tfacetedMinMaxValues,\n\t\t\tfacetedUniqueValues\n\t\t}).filter(([, factory]) => factory).map(([key]) => key);\n\t\tconst states = Object.keys(table.initialState);\n\t\tconsole.log(`Constructing Table Instance\n\n Features: ${features.join(\"\\n \")}\n\n Row Models: ${rowModels.length ? rowModels.join(\"\\n \") : \"(none)\"}\n\n States: ${states.join(\"\\n \")}\\n`, { table });\n\t}\n\treturn table;\n}\n\n//#endregion\nexport { constructTable, getInitialTableState };","import { callMemoOrStaticFn, cloneState, setStateSlice } from \"../../utils.js\";\nimport { getIsColumnVisible, getVisibleCells, getVisibleCellsByColumnId, getVisibleLeafColumns } from \"../../core/featureStubs.js\";\nimport { buildHeaderGroups } from \"../../core/headers/buildHeaderGroups.js\";\n\n//#region src/features/column-pinning/columnPinningFeature.utils.ts\n/**\n* Creates the default column pinning state.\n*\n* Both pinning regions start empty. Reset APIs use this value when\n* `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const pinning = getDefaultColumnPinningState()\n* ```\n*/\nfunction getDefaultColumnPinningState() {\n\treturn {\n\t\tstart: [],\n\t\tend: []\n\t};\n}\n/**\n* Moves this column's leaf column ids into a pinning region.\n*\n* Pinning a group column pins all of its leaves. The leaf ids are first removed\n* from both regions, then appended to the requested `'start'` or `'end'`\n* region. Passing `false` unpins them back to the center.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* column_pin(column, 'start')\n* ```\n*/\nfunction column_pin(column, position) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst columnIds = [];\n\tfor (let i = 0; i < leafColumns.length; i++) {\n\t\tconst id = leafColumns[i].id;\n\t\tif (id) columnIds.push(id);\n\t}\n\ttable_setColumnPinning(column.table, (old) => {\n\t\tif (position === \"end\") return {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: [...old.end.filter((d) => !columnIds.includes(d)), ...columnIds]\n\t\t};\n\t\tif (position === \"start\") return {\n\t\t\tstart: [...old.start.filter((d) => !columnIds.includes(d)), ...columnIds],\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t\treturn {\n\t\t\tstart: old.start.filter((d) => !columnIds.includes(d)),\n\t\t\tend: old.end.filter((d) => !columnIds.includes(d))\n\t\t};\n\t});\n}\n/**\n* Checks whether this column or any of its leaf columns can be pinned.\n*\n* Column-level `enablePinning` and table `enableColumnPinning` both default to\n* `true`; at least one leaf column must allow pinning.\n*\n* @example\n* ```ts\n* const canPin = column_getCanPin(column)\n* ```\n*/\nfunction column_getCanPin(column) {\n\treturn column.getLeafColumns().some((leafColumn) => (leafColumn.columnDef.enablePinning ?? true) && (column.table.options.enableColumnPinning ?? true));\n}\n/**\n* Reads this column's current pinning region.\n*\n* Group columns report `'start'` or `'end'` when any leaf column is pinned in\n* that region. Unpinned columns return `false`.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const position = column_getIsPinned(column)\n* ```\n*/\nfunction column_getIsPinned(column) {\n\tconst leafColumns = column.getLeafColumns();\n\tconst { start, end } = column.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tfor (let i = 0; i < leafColumns.length; i++) if (start.includes(leafColumns[i].id)) return \"start\";\n\tfor (let i = 0; i < leafColumns.length; i++) if (end.includes(leafColumns[i].id)) return \"end\";\n\treturn false;\n}\n/**\n* Finds this column's index within its pinned region.\n*\n* Unpinned columns return `0`; pinned columns return their position in\n* `state.columnPinning.start` or `state.columnPinning.end`.\n*\n* @example\n* ```ts\n* const index = column_getPinnedIndex(column)\n* ```\n*/\nfunction column_getPinnedIndex(column) {\n\tconst position = column_getIsPinned(column);\n\treturn position ? column.table.atoms.columnPinning?.get()?.[position].indexOf(column.id) ?? -1 : 0;\n}\n/**\n* Collects visible cells whose columns are not pinned start or end.\n*\n* The result preserves the row's visible-cell order for center columns.\n*\n* @example\n* ```ts\n* const centerCells = row_getCenterVisibleCells(row)\n* ```\n*/\nfunction row_getCenterVisibleCells(row) {\n\tconst allCells = getVisibleCells(row);\n\tconst { start, end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return allCells;\n\tconst startAndEnd = [...start, ...end];\n\treturn allCells.filter((d) => !startAndEnd.includes(d.column.id));\n}\n/**\n* Collects visible cells for columns pinned to the start region.\n*\n* Cells are returned in `state.columnPinning.start` order and are marked with\n* `cell.position = 'start'`.\n*\n* @example\n* ```ts\n* const startCells = row_getStartVisibleCells(row)\n* ```\n*/\nfunction row_getStartVisibleCells(row) {\n\tconst { start } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length) return [];\n\tconst allVisibleCells = getVisibleCellsByColumnId(row);\n\tconst cells = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst cell = allVisibleCells[start[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"start\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Collects visible cells for columns pinned to the end region.\n*\n* Cells are returned in `state.columnPinning.end` order and are marked with\n* `cell.position = 'end'`.\n*\n* @example\n* ```ts\n* const endCells = row_getEndVisibleCells(row)\n* ```\n*/\nfunction row_getEndVisibleCells(row) {\n\tconst { end } = row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!end.length) return [];\n\tconst allVisibleCells = getVisibleCellsByColumnId(row);\n\tconst cells = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst cell = allVisibleCells[end[i]];\n\t\tif (cell) {\n\t\t\tcell.position = \"end\";\n\t\t\tcells.push(cell);\n\t\t}\n\t}\n\treturn cells;\n}\n/**\n* Routes a column pinning updater through the table's pinning change handler.\n*\n* The updater may be a next `{ start, end }` state or a function of the\n* previous state, matching the instance `table.setColumnPinning` behavior.\n*\n* @example\n* ```ts\n* table_setColumnPinning(table, (old) => ({ ...old, start: ['select'] }))\n* ```\n*/\nfunction table_setColumnPinning(table, updater) {\n\tsetStateSlice(table, \"columnPinning\", updater);\n}\n/**\n* Resets `columnPinning` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnPinning` when it\n* exists. Passing `true` ignores initial state and resets to empty start/end\n* arrays.\n*\n* @example\n* ```ts\n* table_resetColumnPinning(table)\n* table_resetColumnPinning(table, true)\n* ```\n*/\nfunction table_resetColumnPinning(table, defaultState) {\n\ttable_setColumnPinning(table, defaultState ? getDefaultColumnPinningState() : cloneState(table.initialState.columnPinning ?? getDefaultColumnPinningState()));\n}\n/**\n* Checks whether any columns are pinned.\n*\n* Omit `position` to check both sides, or pass `'start'`/`'end'` to inspect a\n* single pinning region.\n*\n* @example\n* ```ts\n* const hasPinnedColumns = table_getIsSomeColumnsPinned(table)\n* ```\n*/\nfunction table_getIsSomeColumnsPinned(table, position) {\n\tconst pinningState = table.atoms.columnPinning?.get();\n\tif (!position) return Boolean(pinningState?.start.length || pinningState?.end.length);\n\treturn Boolean(pinningState?.[position].length);\n}\n/**\n* Builds header groups for visible columns pinned to the start region.\n*\n* The leaf columns are read in `state.columnPinning.start` order and then passed\n* through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getStartHeaderGroups(table)\n* ```\n*/\nfunction table_getStartHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column && getIsColumnVisible(column)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"start\");\n}\n/**\n* Builds header groups for visible columns pinned to the end region.\n*\n* The leaf columns are read in `state.columnPinning.end` order and then\n* passed through the same header-group builder as the unpinned table.\n*\n* @example\n* ```ts\n* const headerGroups = table_getEndHeaderGroups(table)\n* ```\n*/\nfunction table_getEndHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst orderedLeafColumns = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column && getIsColumnVisible(column)) orderedLeafColumns.push(column);\n\t}\n\treturn buildHeaderGroups(allColumns, orderedLeafColumns, table, \"end\");\n}\n/**\n* Builds header groups for visible columns that are not pinned.\n*\n* Start- and end-pinned column ids are removed from the visible leaf column\n* list before header groups are built for the center region.\n*\n* @example\n* ```ts\n* const headerGroups = table_getCenterHeaderGroups(table)\n* ```\n*/\nfunction table_getCenterHeaderGroups(table) {\n\tconst allColumns = table.getAllColumns();\n\tlet leafColumns = getVisibleLeafColumns(table);\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (start.length || end.length) {\n\t\tconst startAndEnd = [...start, ...end];\n\t\tleafColumns = leafColumns.filter((column) => !startAndEnd.includes(column.id));\n\t}\n\treturn buildHeaderGroups(allColumns, leafColumns, table, \"center\");\n}\n/**\n* Builds footer groups for the start pinned region.\n*\n* Footer groups reuse the start header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getStartFooterGroups(table)\n* ```\n*/\nfunction table_getStartFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the end pinned region.\n*\n* Footer groups reuse the end header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getEndFooterGroups(table)\n* ```\n*/\nfunction table_getEndFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)].reverse();\n}\n/**\n* Builds footer groups for the center, unpinned region.\n*\n* Footer groups reuse the center header groups in reverse order.\n*\n* @example\n* ```ts\n* const footerGroups = table_getCenterFooterGroups(table)\n* ```\n*/\nfunction table_getCenterFooterGroups(table) {\n\treturn [...callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)].reverse();\n}\n/**\n* Flattens every header from the start pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getStartFlatHeaders(table)\n* ```\n*/\nfunction table_getStartFlatHeaders(table) {\n\tconst leftHeaderGroups = callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < leftHeaderGroups.length; i++) {\n\t\tconst headers = leftHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the end pinned header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getEndFlatHeaders(table)\n* ```\n*/\nfunction table_getEndFlatHeaders(table) {\n\tconst rightHeaderGroups = callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < rightHeaderGroups.length; i++) {\n\t\tconst headers = rightHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Flattens every header from the center header groups.\n*\n* Parent headers and placeholder headers are included.\n*\n* @example\n* ```ts\n* const headers = table_getCenterFlatHeaders(table)\n* ```\n*/\nfunction table_getCenterFlatHeaders(table) {\n\tconst centerHeaderGroups = callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups);\n\tconst result = [];\n\tfor (let i = 0; i < centerHeaderGroups.length; i++) {\n\t\tconst headers = centerHeaderGroups[i].headers;\n\t\tfor (let j = 0; j < headers.length; j++) result.push(headers[j]);\n\t}\n\treturn result;\n}\n/**\n* Collects leaf headers for the start pinned region.\n*\n* Parent headers are filtered out from the start flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getStartLeafHeaders(table)\n* ```\n*/\nfunction table_getStartLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getStartFlatHeaders\", table_getStartFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the end pinned region.\n*\n* Parent headers are filtered out from the end flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getEndLeafHeaders(table)\n* ```\n*/\nfunction table_getEndLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getEndFlatHeaders\", table_getEndFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Collects leaf headers for the center, unpinned region.\n*\n* Parent headers are filtered out from the center flat header list.\n*\n* @example\n* ```ts\n* const headers = table_getCenterLeafHeaders(table)\n* ```\n*/\nfunction table_getCenterLeafHeaders(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterFlatHeaders\", table_getCenterFlatHeaders).filter((header) => !header.subHeaders.length);\n}\n/**\n* Resolves leaf columns pinned to the start region.\n*\n* The result follows `state.columnPinning.start` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getStartLeafColumns(table)\n* ```\n*/\nfunction table_getStartLeafColumns(table) {\n\tconst { start } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst column = leafColumnsById[start[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns pinned to the end region.\n*\n* The result follows `state.columnPinning.end` order and skips stale ids that\n* no longer correspond to a leaf column.\n*\n* @example\n* ```ts\n* const columns = table_getEndLeafColumns(table)\n* ```\n*/\nfunction table_getEndLeafColumns(table) {\n\tconst { end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tconst leafColumnsById = table.getAllLeafColumnsById();\n\tconst result = [];\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst column = leafColumnsById[end[i]];\n\t\tif (column) result.push(column);\n\t}\n\treturn result;\n}\n/**\n* Resolves leaf columns that are not pinned to either logical side.\n*\n* Start- and end-pinned ids are removed from `table.getAllLeafColumns()`.\n*\n* @example\n* ```ts\n* const columns = table_getCenterLeafColumns(table)\n* ```\n*/\nfunction table_getCenterLeafColumns(table) {\n\tconst { start, end } = table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState();\n\tif (!start.length && !end.length) return table.getAllLeafColumns();\n\tconst startAndEnd = [...start, ...end];\n\treturn table.getAllLeafColumns().filter((d) => !startAndEnd.includes(d.id));\n}\n/**\n* Resolves leaf columns for a requested pinning region.\n*\n* Pass `'start'`, `'center'`, or `'end'` for a partition, or pass `false` to\n* read all leaf columns without partitioning.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedLeafColumns(table, 'center')\n* ```\n*/\nfunction table_getPinnedLeafColumns(table, position) {\n\treturn !position ? table.getAllLeafColumns() : position === \"start\" ? callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns) : callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns);\n}\n/**\n* Resolves visible leaf columns pinned to the start region.\n*\n* Hidden pinned columns are filtered out after the start pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getStartVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getStartVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getStartLeafColumns\", table_getStartLeafColumns).filter((column) => getIsColumnVisible(column));\n}\n/**\n* Resolves visible leaf columns pinned to the end region.\n*\n* Hidden pinned columns are filtered out after the end pin order is applied.\n*\n* @example\n* ```ts\n* const columns = table_getEndVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getEndVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getEndLeafColumns\", table_getEndLeafColumns).filter((column) => getIsColumnVisible(column));\n}\n/**\n* Resolves visible leaf columns that are not pinned.\n*\n* This is the center partition used by layouts that render pinned columns\n* separately from the scrollable middle region.\n*\n* @example\n* ```ts\n* const columns = table_getCenterVisibleLeafColumns(table)\n* ```\n*/\nfunction table_getCenterVisibleLeafColumns(table) {\n\treturn callMemoOrStaticFn(table, \"getCenterLeafColumns\", table_getCenterLeafColumns).filter((column) => getIsColumnVisible(column));\n}\n/**\n* Resolves visible leaf columns for a requested pinning region.\n*\n* Omit `position` to get all visible leaf columns, or pass `'start'`, `'center'`,\n* or `'end'` to get one partition.\n*\n* @example\n* ```ts\n* const columns = table_getPinnedVisibleLeafColumns(table, 'start')\n* ```\n*/\nfunction table_getPinnedVisibleLeafColumns(table, position) {\n\treturn !position ? getVisibleLeafColumns(table) : position === \"start\" ? callMemoOrStaticFn(table, \"getStartVisibleLeafColumns\", table_getStartVisibleLeafColumns) : position === \"end\" ? callMemoOrStaticFn(table, \"getEndVisibleLeafColumns\", table_getEndVisibleLeafColumns) : callMemoOrStaticFn(table, \"getCenterVisibleLeafColumns\", table_getCenterVisibleLeafColumns);\n}\n\n//#endregion\nexport { column_getCanPin, column_getIsPinned, column_getPinnedIndex, column_pin, getDefaultColumnPinningState, row_getCenterVisibleCells, row_getEndVisibleCells, row_getStartVisibleCells, table_getCenterFlatHeaders, table_getCenterFooterGroups, table_getCenterHeaderGroups, table_getCenterLeafColumns, table_getCenterLeafHeaders, table_getCenterVisibleLeafColumns, table_getEndFlatHeaders, table_getEndFooterGroups, table_getEndHeaderGroups, table_getEndLeafColumns, table_getEndLeafHeaders, table_getEndVisibleLeafColumns, table_getIsSomeColumnsPinned, table_getPinnedLeafColumns, table_getPinnedVisibleLeafColumns, table_getStartFlatHeaders, table_getStartFooterGroups, table_getStartHeaderGroups, table_getStartLeafColumns, table_getStartLeafHeaders, table_getStartVisibleLeafColumns, table_resetColumnPinning, table_setColumnPinning };","import { makeObjectMap } from \"../../utils.js\";\n\n//#region src/features/column-pinning/orderByColumnPinning.ts\n/**\n* Display order for column pinning, shared through the `orderByColumnPinning`\n* feature stub so that the core headers, row visible cells, and cell selection\n* don't bundle it when the column pinning feature is not registered.\n*\n* Internal: not exported from any package entry point.\n*/\n/**\n* Orders items that each belong to a leaf column, such as visible leaf\n* columns or a row's visible cells: start-pinned items in pinning order, then\n* unpinned items in their given order, then end-pinned items in pinning order.\n* Pinned ids that match no item are skipped.\n*\n* `getItemsByColumnId` can return an existing lookup of the same items, which\n* is only read when something is pinned.\n*/\nfunction orderByColumnPinning(table, items, getColumnId, getItemsByColumnId) {\n\tconst columnPinning = table.atoms.columnPinning?.get();\n\tif (!columnPinning || !columnPinning.start.length && !columnPinning.end.length) return items;\n\tconst { start, end } = columnPinning;\n\tlet itemsByColumnId = getItemsByColumnId?.();\n\tif (!itemsByColumnId) {\n\t\titemsByColumnId = makeObjectMap();\n\t\tfor (let i = 0; i < items.length; i++) itemsByColumnId[getColumnId(items[i])] = items[i];\n\t}\n\tconst ordered = [];\n\tfor (let i = 0; i < start.length; i++) {\n\t\tconst item = itemsByColumnId[start[i]];\n\t\tif (item) ordered.push(item);\n\t}\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst columnId = getColumnId(items[i]);\n\t\tif (!start.includes(columnId) && !end.includes(columnId)) ordered.push(items[i]);\n\t}\n\tfor (let i = 0; i < end.length; i++) {\n\t\tconst item = itemsByColumnId[end[i]];\n\t\tif (item) ordered.push(item);\n\t}\n\treturn ordered;\n}\n\n//#endregion\nexport { orderByColumnPinning };","import { assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, makeStateUpdater } from \"../../utils.js\";\nimport { getVisibleLeafColumns } from \"../../core/featureStubs.js\";\nimport { column_getCanPin, column_getIsPinned, column_getPinnedIndex, column_pin, getDefaultColumnPinningState, row_getCenterVisibleCells, row_getEndVisibleCells, row_getStartVisibleCells, table_getCenterFlatHeaders, table_getCenterFooterGroups, table_getCenterHeaderGroups, table_getCenterLeafColumns, table_getCenterLeafHeaders, table_getCenterVisibleLeafColumns, table_getEndFlatHeaders, table_getEndFooterGroups, table_getEndHeaderGroups, table_getEndLeafColumns, table_getEndLeafHeaders, table_getEndVisibleLeafColumns, table_getIsSomeColumnsPinned, table_getPinnedLeafColumns, table_getPinnedVisibleLeafColumns, table_getStartFlatHeaders, table_getStartFooterGroups, table_getStartHeaderGroups, table_getStartLeafColumns, table_getStartLeafHeaders, table_getStartVisibleLeafColumns, table_resetColumnPinning, table_setColumnPinning } from \"./columnPinningFeature.utils.js\";\nimport { orderByColumnPinning } from \"./orderByColumnPinning.js\";\n\n//#region src/features/column-pinning/columnPinningFeature.ts\n/**\n* Feature that adds column pinning state and APIs for logical start, center,\n* and end regions.\n*\n* In LTR languages/layouts, start usually corresponds to left and end to\n* right. In RTL languages/layouts, start usually corresponds to right and end\n* to left.\n*/\nconst columnPinningFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnPinning: {\n\t\t\t\t...getDefaultColumnPinningState(),\n\t\t\t\t...initialState.columnPinning\n\t\t\t},\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnPinningChange: makeStateUpdater(\"columnPinning\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnPinningFeature\", prototype, table, {\n\t\t\tcolumn_pin: { fn: (column, position) => column_pin(column, position) },\n\t\t\tcolumn_getCanPin: { fn: (column) => column_getCanPin(column) },\n\t\t\tcolumn_getPinnedIndex: { fn: (column) => column_getPinnedIndex(column) },\n\t\t\tcolumn_getIsPinned: { fn: (column) => column_getIsPinned(column) }\n\t\t});\n\t},\n\tassignRowPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnPinningFeature\", prototype, table, {\n\t\t\trow_getCenterVisibleCells: {\n\t\t\t\tfn: (row) => row_getCenterVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\trow.table.atoms.columnPinning?.get(),\n\t\t\t\t\trow.table.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getStartVisibleCells: {\n\t\t\t\tfn: (row) => row_getStartVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\trow.table.atoms.columnPinning?.get()?.start,\n\t\t\t\t\trow.table.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\trow_getEndVisibleCells: {\n\t\t\t\tfn: (row) => row_getEndVisibleCells(row),\n\t\t\t\tmemoDeps: (row) => [\n\t\t\t\t\trow.getAllCells(),\n\t\t\t\t\trow.table.atoms.columnPinning?.get()?.end,\n\t\t\t\t\trow.table.atoms.columnVisibility?.get()\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnPinningFeature\", table, {\n\t\t\ttable_setColumnPinning: { fn: (updater) => table_setColumnPinning(table, updater) },\n\t\t\ttable_resetColumnPinning: { fn: (defaultState) => table_resetColumnPinning(table, defaultState) },\n\t\t\ttable_getIsSomeColumnsPinned: { fn: (position) => table_getIsSomeColumnsPinned(table, position) },\n\t\t\ttable__orderByColumnPinning: { fn: (items, getColumnId, getItemsByColumnId) => orderByColumnPinning(table, items, getColumnId, getItemsByColumnId) },\n\t\t\ttable_getStartHeaderGroups: {\n\t\t\t\tfn: () => table_getStartHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getAllColumns(),\n\t\t\t\t\tgetVisibleLeafColumns(table),\n\t\t\t\t\ttable.atoms.columnPinning?.get()?.start,\n\t\t\t\t\ttable.atoms.columnOrder?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getCenterHeaderGroups: {\n\t\t\t\tfn: () => table_getCenterHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getAllColumns(),\n\t\t\t\t\tgetVisibleLeafColumns(table),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getEndHeaderGroups: {\n\t\t\t\tfn: () => table_getEndHeaderGroups(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.getAllColumns(),\n\t\t\t\t\tgetVisibleLeafColumns(table),\n\t\t\t\t\ttable.atoms.columnPinning?.get()?.end,\n\t\t\t\t\ttable.atoms.columnOrder?.get()\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getStartFooterGroups: {\n\t\t\t\tfn: () => table_getStartFooterGroups(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getCenterFooterGroups: {\n\t\t\t\tfn: () => table_getCenterFooterGroups(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getEndFooterGroups: {\n\t\t\t\tfn: () => table_getEndFooterGroups(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getStartFlatHeaders: {\n\t\t\t\tfn: () => table_getStartFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getEndFlatHeaders: {\n\t\t\t\tfn: () => table_getEndFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getCenterFlatHeaders: {\n\t\t\t\tfn: () => table_getCenterFlatHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getStartLeafHeaders: {\n\t\t\t\tfn: () => table_getStartLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getStartHeaderGroups\", table_getStartHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getEndLeafHeaders: {\n\t\t\t\tfn: () => table_getEndLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getEndHeaderGroups\", table_getEndHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getCenterLeafHeaders: {\n\t\t\t\tfn: () => table_getCenterLeafHeaders(table),\n\t\t\t\tmemoDeps: () => [callMemoOrStaticFn(table, \"getCenterHeaderGroups\", table_getCenterHeaderGroups)]\n\t\t\t},\n\t\t\ttable_getStartLeafColumns: {\n\t\t\t\tfn: () => table_getStartLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getEndLeafColumns: {\n\t\t\t\tfn: () => table_getEndLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getCenterLeafColumns: {\n\t\t\t\tfn: () => table_getCenterLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getPinnedLeafColumns: { fn: (position) => table_getPinnedLeafColumns(table, position) },\n\t\t\ttable_getStartVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getStartVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getCenterVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getCenterVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getEndVisibleLeafColumns: {\n\t\t\t\tfn: () => table_getEndVisibleLeafColumns(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_getPinnedVisibleLeafColumns: { fn: (position) => table_getPinnedVisibleLeafColumns(table, position) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnPinningFeature };","import { callMemoOrStaticFn, cloneState, hasOwn, makeObjectMap } from \"../../utils.js\";\nimport { getPinnedVisibleLeafColumns } from \"../../core/featureStubs.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.utils.ts\n/**\n* Creates the default committed column sizing state.\n*\n* The feature default is an empty map, so columns fall back to their column def\n* size or the built-in sizing defaults.\n*\n* @example\n* ```ts\n* const sizing = getDefaultColumnSizingState()\n* ```\n*/\nfunction getDefaultColumnSizingState() {\n\treturn makeObjectMap();\n}\n/**\n* Creates the built-in sizing defaults for column definitions.\n*\n* Columns default to `size: 150`, `minSize: 20`, and\n* `maxSize: Number.MAX_SAFE_INTEGER` unless overridden by column definitions or\n* table defaults.\n*\n* @example\n* ```ts\n* const defaults = getDefaultColumnSizingColumnDef()\n* ```\n*/\nfunction getDefaultColumnSizingColumnDef() {\n\treturn {\n\t\tsize: 150,\n\t\tminSize: 20,\n\t\tmaxSize: Number.MAX_SAFE_INTEGER\n\t};\n}\n/**\n* Resolves a column's current pixel size.\n*\n* Committed `state.columnSizing[column.id]` wins over `columnDef.size`, then the\n* built-in default size. The result is clamped between min and max size.\n*\n* @example\n* ```ts\n* const width = column_getSize(column)\n* ```\n*/\nfunction column_getSize(column) {\n\tconst defaultSizes = getDefaultColumnSizingColumnDef();\n\tconst columnSizing = column.table.atoms.columnSizing?.get();\n\tconst columnSize = columnSizing && hasOwn(columnSizing, column.id) ? columnSizing[column.id] : void 0;\n\treturn Math.min(Math.max(column.columnDef.minSize ?? defaultSizes.minSize, columnSize ?? column.columnDef.size ?? defaultSizes.size), column.columnDef.maxSize ?? defaultSizes.maxSize);\n}\nfunction buildColumnOffsets(columns) {\n\tconst starts = makeObjectMap();\n\tconst afters = makeObjectMap();\n\tconst sizes = new Array(columns.length);\n\tlet start = 0;\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst column = columns[i];\n\t\tconst size = callMemoOrStaticFn(column, \"getSize\", column_getSize);\n\t\tsizes[i] = size;\n\t\tstarts[column.id] = start;\n\t\tstart += size;\n\t}\n\tlet after = 0;\n\tfor (let i = columns.length - 1; i >= 0; i--) {\n\t\tafters[columns[i].id] = after;\n\t\tafter += sizes[i];\n\t}\n\treturn {\n\t\tstarts,\n\t\tafters\n\t};\n}\n/**\n* Builds start and after offset maps for every visible leaf column, computed\n* once per pinning region plus the full visible list.\n*\n* A single table-level memo of this result backs all `column.getStart()` and\n* `column.getAfter()` calls with O(1) lookups.\n*\n* @example\n* ```ts\n* const offsets = table_getColumnOffsets(table)\n* const startOffset = offsets.start.starts[column.id]\n* ```\n*/\nfunction table_getColumnOffsets(table) {\n\treturn {\n\t\tall: buildColumnOffsets(getPinnedVisibleLeafColumns(table)),\n\t\tcenter: buildColumnOffsets(getPinnedVisibleLeafColumns(table, \"center\")),\n\t\tstart: buildColumnOffsets(getPinnedVisibleLeafColumns(table, \"start\")),\n\t\tend: buildColumnOffsets(getPinnedVisibleLeafColumns(table, \"end\"))\n\t};\n}\nfunction toOffsetsKey(position) {\n\treturn position === \"start\" ? \"start\" : position === \"end\" ? \"end\" : position === \"center\" ? \"center\" : \"all\";\n}\n/**\n* Computes the offset from the start edge of a pinning region to this column.\n*\n* The value is the sum of all previous visible leaf column sizes in the\n* requested `'start'`, `'center'`, or `'end'` region.\n*\n* `start` and `end` are logical positions. In LTR languages/layouts, `start`\n* usually corresponds to left and `end` to right. In RTL languages/layouts,\n* `start` usually corresponds to right and `end` to left.\n*\n* @example\n* ```ts\n* const startOffset = column_getStart(column, 'start')\n* ```\n*/\nfunction column_getStart(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].starts[column.id] ?? 0;\n}\n/**\n* Computes the offset from the end edge of a pinning region after this column.\n*\n* The value is the sum of all following visible leaf column sizes in the\n* requested region.\n*\n* @example\n* ```ts\n* const endOffset = column_getAfter(column, 'end')\n* ```\n*/\nfunction column_getAfter(column, position) {\n\treturn callMemoOrStaticFn(column.table, \"getColumnOffsets\", table_getColumnOffsets)[toOffsetsKey(position)].afters[column.id] ?? 0;\n}\n/**\n* Removes this column's committed size override.\n*\n* After reset, the column resolves size from `columnDef.size` or built-in\n* defaults again.\n*\n* @example\n* ```ts\n* column_resetSize(column)\n* ```\n*/\nfunction column_resetSize(column) {\n\ttable_setColumnSizing(column.table, (old) => {\n\t\tconst rest = makeObjectMap();\n\t\tconst columnIds = Object.keys(old);\n\t\tfor (let i = 0; i < columnIds.length; i++) {\n\t\t\tconst columnId = columnIds[i];\n\t\t\tif (columnId !== column.id) rest[columnId] = old[columnId];\n\t\t}\n\t\treturn rest;\n\t});\n}\nfunction sumHeaderSize(header) {\n\tif (!header.subHeaders.length) return column_getSize(header.column);\n\tlet sum = 0;\n\tfor (let i = 0; i < header.subHeaders.length; i++) sum += sumHeaderSize(header.subHeaders[i]);\n\treturn sum;\n}\n/**\n* Computes a header's rendered size from its leaf headers.\n*\n* Group headers sum the sizes of all descendant leaf columns. Leaf headers use\n* their column's current size.\n*\n* @example\n* ```ts\n* const width = header_getSize(header)\n* ```\n*/\nfunction header_getSize(header) {\n\treturn sumHeaderSize(header);\n}\n/**\n* Computes a header's offset from the start of its header group.\n*\n* The offset is the previous sibling header's start plus size, or `0` for the\n* first header in the group.\n*\n* @example\n* ```ts\n* const offset = header_getStart(header)\n* ```\n*/\nfunction header_getStart(header) {\n\tif (header.index > 0) {\n\t\tconst prevSiblingHeader = header.headerGroup?.headers[header.index - 1];\n\t\tif (prevSiblingHeader) return callMemoOrStaticFn(prevSiblingHeader, \"getStart\", header_getStart) + callMemoOrStaticFn(prevSiblingHeader, \"getSize\", header_getSize);\n\t}\n\treturn 0;\n}\n/**\n* Routes a committed column sizing updater through the table's sizing handler.\n*\n* The updater may be a next size map or a function of the previous map,\n* matching the instance `table.setColumnSizing` behavior.\n*\n* @example\n* ```ts\n* table_setColumnSizing(table, (old) => ({ ...old, age: 96 }))\n* ```\n*/\nfunction table_setColumnSizing(table, updater) {\n\ttable.options.onColumnSizingChange?.(updater);\n}\n/**\n* Resets `columnSizing` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.columnSizing` when it\n* exists. Passing `true` ignores initial state and resets to `{}`.\n*\n* @example\n* ```ts\n* table_resetColumnSizing(table)\n* table_resetColumnSizing(table, true)\n* ```\n*/\nfunction table_resetColumnSizing(table, defaultState) {\n\ttable_setColumnSizing(table, defaultState ? makeObjectMap() : Object.assign(makeObjectMap(), cloneState(table.initialState.columnSizing ?? {})));\n}\nfunction sumColumnSizes(columns) {\n\tlet sum = 0;\n\tfor (let i = 0; i < columns.length; i++) sum += callMemoOrStaticFn(columns[i], \"getSize\", column_getSize);\n\treturn sum;\n}\n/**\n* Sums the rendered size of the full table header row.\n*\n* This includes start, center, and end columns in the main header group.\n*\n* @example\n* ```ts\n* const width = table_getTotalSize(table)\n* ```\n*/\nfunction table_getTotalSize(table) {\n\treturn table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n\t\treturn sum + header_getSize(header);\n\t}, 0) ?? 0;\n}\n/**\n* Sums the sizes of the visible leaf columns pinned to the logical start\n* region.\n*\n* An empty start pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getStartTotalSize(table)\n* ```\n*/\nfunction table_getStartTotalSize(table) {\n\treturn sumColumnSizes(getPinnedVisibleLeafColumns(table, \"start\"));\n}\n/**\n* Sums the sizes of the visible leaf columns that are not pinned.\n*\n* An empty center region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getCenterTotalSize(table)\n* ```\n*/\nfunction table_getCenterTotalSize(table) {\n\treturn sumColumnSizes(getPinnedVisibleLeafColumns(table, \"center\"));\n}\n/**\n* Sums the sizes of the visible leaf columns pinned to the logical end region.\n*\n* An empty end pinning region returns `0`.\n*\n* @example\n* ```ts\n* const width = table_getEndTotalSize(table)\n* ```\n*/\nfunction table_getEndTotalSize(table) {\n\treturn sumColumnSizes(getPinnedVisibleLeafColumns(table, \"end\"));\n}\n\n//#endregion\nexport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing } from \"./columnSizingFeature.utils.js\";\n\n//#region src/features/column-sizing/columnSizingFeature.ts\n/**\n* Feature that adds column sizing state, defaults, and size measurement APIs.\n*/\nconst columnSizingFeature = {\n\tgetInitialState: (initialState) => {\n\t\treturn {\n\t\t\tcolumnSizing: getDefaultColumnSizingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultColumnDef: () => {\n\t\treturn getDefaultColumnSizingColumnDef();\n\t},\n\tgetDefaultTableOptions: (table) => {\n\t\treturn { onColumnSizingChange: makeStateUpdater(\"columnSizing\", table) };\n\t},\n\tassignColumnPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\tcolumn_getSize: {\n\t\t\t\tfn: (column) => column_getSize(column),\n\t\t\t\tmemoDeps: (column) => [table.options.columns, table.atoms.columnSizing?.get()?.[column.id]]\n\t\t\t},\n\t\t\tcolumn_getStart: { fn: (column, position) => column_getStart(column, position) },\n\t\t\tcolumn_getAfter: { fn: (column, position) => column_getAfter(column, position) },\n\t\t\tcolumn_resetSize: { fn: (column) => column_resetSize(column) }\n\t\t});\n\t},\n\tassignHeaderPrototype: (prototype, table) => {\n\t\tassignPrototypeAPIs(\"columnSizingFeature\", prototype, table, {\n\t\t\theader_getSize: {\n\t\t\t\tfn: (header) => header_getSize(header),\n\t\t\t\tmemoDeps: (header) => [table.options.columns, header.column.columns.length > 0 ? table.atoms.columnSizing?.get() : table.atoms.columnSizing?.get()?.[header.column.id]]\n\t\t\t},\n\t\t\theader_getStart: {\n\t\t\t\tfn: (header) => header_getStart(header),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t},\n\tconstructTableAPIs: (table) => {\n\t\tassignTableAPIs(\"columnSizingFeature\", table, {\n\t\t\ttable_getColumnOffsets: {\n\t\t\t\tfn: () => table_getColumnOffsets(table),\n\t\t\t\tmemoDeps: () => [\n\t\t\t\t\ttable.options.columns,\n\t\t\t\t\ttable.atoms.columnSizing?.get(),\n\t\t\t\t\ttable.atoms.columnOrder?.get(),\n\t\t\t\t\ttable.atoms.columnPinning?.get(),\n\t\t\t\t\ttable.atoms.columnVisibility?.get(),\n\t\t\t\t\ttable.atoms.grouping?.get(),\n\t\t\t\t\ttable.options.groupedColumnMode\n\t\t\t\t]\n\t\t\t},\n\t\t\ttable_setColumnSizing: { fn: (updater) => table_setColumnSizing(table, updater) },\n\t\t\ttable_resetColumnSizing: { fn: (defaultState) => table_resetColumnSizing(table, defaultState) },\n\t\t\ttable_getTotalSize: {\n\t\t\t\tfn: () => table_getTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getStartTotalSize: {\n\t\t\t\tfn: () => table_getStartTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getCenterTotalSize: {\n\t\t\t\tfn: () => table_getCenterTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t},\n\t\t\ttable_getEndTotalSize: {\n\t\t\t\tfn: () => table_getEndTotalSize(table),\n\t\t\t\tmemoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]\n\t\t\t}\n\t\t});\n\t}\n};\n\n//#endregion\nexport { columnSizingFeature };","//#region src/features/row-sorting/sortFns.ts\n/**\n* Regular expression used to split mixed text and numeric chunks.\n*\n* The alphanumeric sort functions use these chunks for natural sorting of\n* strings like `item2` before `item10`.\n*/\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\n/**\n* Builds a `SortFn` from a value-level comparator plus an optional\n* `resolveDataValue` normalizer.\n*\n* The `sort` comparator receives both rows' data values, each already passed\n* through `resolveDataValue` when one is defined. Keeping normalization in the\n* resolver means a variant of an existing sorting function only has to swap\n* the resolver, not re-implement the comparison.\n*\n* The definition is attached to the returned function, so a variant can be\n* created by spreading a built-in sorting function and overriding what\n* differs:\n*\n* ```ts\n* const stripDiacritics = (value: string) =>\n* value.normalize('NFD').replace(/\\p{Diacritic}/gu, '')\n*\n* const alphanumericIgnoreDiacritics = constructSortFn({\n* ...sortFn_alphanumeric,\n* resolveDataValue: (value) =>\n* stripDiacritics(sortFn_alphanumeric.resolveDataValue!(value)),\n* })\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction constructSortFn(def) {\n\tconst sortFn = Object.assign((rowA, rowB, columnId) => {\n\t\tlet dataValueA = rowA.getValue(columnId);\n\t\tlet dataValueB = rowB.getValue(columnId);\n\t\tconst resolveDataValue = sortFn.resolveDataValue;\n\t\tif (resolveDataValue) {\n\t\t\tdataValueA = resolveDataValue(dataValueA);\n\t\t\tdataValueB = resolveDataValue(dataValueB);\n\t\t}\n\t\treturn sortFn.sort(dataValueA, dataValueB, rowA, rowB, columnId);\n\t}, def);\n\treturn sortFn;\n}\n/**\n* Sorts rows with the built-in alphanumeric strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_alphanumeric = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue).toLowerCase(),\n\tsort: (dataValueA, dataValueB) => compareAlphanumeric(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in alphanumeric case sensitive strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_alphanumericCaseSensitive = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue),\n\tsort: (dataValueA, dataValueB) => compareAlphanumeric(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in text strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_text = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue).toLowerCase(),\n\tsort: (dataValueA, dataValueB) => compareBasic(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in text case sensitive strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_textCaseSensitive = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toString(dataValue),\n\tsort: (dataValueA, dataValueB) => compareBasic(dataValueA, dataValueB)\n});\n/**\n* Sorts rows with the built-in datetime strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_datetime = /* @__PURE__ */ constructSortFn({\n\tresolveDataValue: (dataValue) => toDateSortValue(dataValue),\n\tsort: (dataValueA, dataValueB) => dataValueA > dataValueB ? 1 : dataValueA < dataValueB ? -1 : 0\n});\n/**\n* Sorts rows with the built-in basic strategy.\n*\n* This comparator returns ascending-order results; descending order is applied by the sorting row model.\n*/\nconst sortFn_basic = /* @__PURE__ */ constructSortFn({ sort: (dataValueA, dataValueB) => compareBasic(dataValueA, dataValueB) });\nfunction compareBasic(a, b) {\n\treturn a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toDateSortValue(value) {\n\treturn value instanceof Date ? value.getTime() : value;\n}\nfunction toString(a) {\n\tif (typeof a === \"number\") {\n\t\tif (isNaN(a) || a === Infinity || a === -Infinity) return \"\";\n\t\treturn String(a);\n\t}\n\tif (typeof a === \"string\") return a;\n\treturn \"\";\n}\nfunction compareAlphanumeric(aStr, bStr) {\n\tlet ai = 0;\n\tlet bi = 0;\n\tconst aLen = aStr.length;\n\tconst bLen = bStr.length;\n\twhile (ai < aLen && bi < bLen) {\n\t\tconst aIsNumeric = isDigit(aStr.charCodeAt(ai));\n\t\tconst bIsNumeric = isDigit(bStr.charCodeAt(bi));\n\t\tconst aEnd = findChunkEnd(aStr, ai, aIsNumeric);\n\t\tconst bEnd = findChunkEnd(bStr, bi, bIsNumeric);\n\t\tif (!aIsNumeric && !bIsNumeric) {\n\t\t\tconst stringComparison = compareStringChunks(aStr, ai, aEnd, bStr, bi, bEnd);\n\t\t\tif (stringComparison) return stringComparison;\n\t\t\tai = aEnd;\n\t\t\tbi = bEnd;\n\t\t\tcontinue;\n\t\t}\n\t\tif (aIsNumeric !== bIsNumeric) return aIsNumeric ? 1 : -1;\n\t\tconst numericComparison = compareNumericChunks(aStr, ai, aEnd, bStr, bi, bEnd);\n\t\tif (numericComparison) return numericComparison;\n\t\tai = aEnd;\n\t\tbi = bEnd;\n\t}\n\treturn countRemainingChunks(aStr, ai) - countRemainingChunks(bStr, bi);\n}\nfunction isDigit(charCode) {\n\treturn charCode >= 48 && charCode <= 57;\n}\nfunction findChunkEnd(str, start, isNumeric) {\n\tlet end = start + 1;\n\twhile (end < str.length && isDigit(str.charCodeAt(end)) === isNumeric) end++;\n\treturn end;\n}\nfunction compareStringChunks(aStr, aStart, aEnd, bStr, bStart, bEnd) {\n\tconst aLength = aEnd - aStart;\n\tconst bLength = bEnd - bStart;\n\tconst minLength = aLength < bLength ? aLength : bLength;\n\tfor (let i = 0; i < minLength; i++) {\n\t\tconst aCode = aStr.charCodeAt(aStart + i);\n\t\tconst bCode = bStr.charCodeAt(bStart + i);\n\t\tif (aCode > bCode) return 1;\n\t\tif (bCode > aCode) return -1;\n\t}\n\tif (aLength > bLength) return 1;\n\tif (bLength > aLength) return -1;\n\treturn 0;\n}\nfunction compareNumericChunks(aStr, aStart, aEnd, bStr, bStart, bEnd) {\n\tlet aSignificantStart = aStart;\n\twhile (aSignificantStart < aEnd && aStr.charCodeAt(aSignificantStart) === 48) aSignificantStart++;\n\tlet bSignificantStart = bStart;\n\twhile (bSignificantStart < bEnd && bStr.charCodeAt(bSignificantStart) === 48) bSignificantStart++;\n\tconst aSignificantLength = aEnd - aSignificantStart;\n\tconst bSignificantLength = bEnd - bSignificantStart;\n\tif (aSignificantLength === 0 && bSignificantLength === 0) return 0;\n\tif (aSignificantLength <= 15 && bSignificantLength <= 15) {\n\t\tconst an = parseSmallInt(aStr, aSignificantStart, aEnd);\n\t\tconst bn = parseSmallInt(bStr, bSignificantStart, bEnd);\n\t\tif (an > bn) return 1;\n\t\tif (bn > an) return -1;\n\t\treturn 0;\n\t}\n\tconst an = parseInt(aStr.slice(aStart, aEnd), 10);\n\tconst bn = parseInt(bStr.slice(bStart, bEnd), 10);\n\tif (an > bn) return 1;\n\tif (bn > an) return -1;\n\treturn 0;\n}\nfunction parseSmallInt(str, start, end) {\n\tlet result = 0;\n\tfor (let i = start; i < end; i++) result = result * 10 + str.charCodeAt(i) - 48;\n\treturn result;\n}\nfunction countRemainingChunks(str, start) {\n\tlet count = 0;\n\tlet index = start;\n\twhile (index < str.length) {\n\t\tcount++;\n\t\tindex = findChunkEnd(str, index, isDigit(str.charCodeAt(index)));\n\t}\n\treturn count;\n}\n/**\n* The built-in sorting function registry.\n*\n* Registering this full object opts out of tree-shaking: every built-in\n* sorting function ends up in your bundle. Prefer importing the `sortFn_*`\n* functions you actually use and registering just those in the `sortFns`\n* slot, or passing them directly to the `sortFn` column option.\n*\n* @deprecated Import individual `sortFn_*` functions instead for a smaller\n* bundle. This export still works and is not going away in v9, but built-in\n* name resolution (including `sortFn: 'auto'`) only finds functions you\n* register yourself.\n*/\nconst sortFns = {\n\talphanumeric: sortFn_alphanumeric,\n\talphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,\n\tbasic: sortFn_basic,\n\tdatetime: sortFn_datetime,\n\ttext: sortFn_text,\n\ttextCaseSensitive: sortFn_textCaseSensitive\n};\n\n//#endregion\nexport { constructSortFn, reSplitAlphaNumeric, sortFn_alphanumeric, sortFn_alphanumericCaseSensitive, sortFn_basic, sortFn_datetime, sortFn_text, sortFn_textCaseSensitive, sortFns };","import { cloneState, isFunction, setStateSlice } from \"../../utils.js\";\nimport { reSplitAlphaNumeric, sortFn_basic } from \"./sortFns.js\";\n\n//#region src/features/row-sorting/rowSortingFeature.utils.ts\n/**\n* Creates the default sorting state.\n*\n* The feature default is an empty array, meaning no columns are sorted. Reset\n* APIs use this value when `defaultState` is `true`.\n*\n* @example\n* ```ts\n* const sorting = getDefaultSortingState()\n* ```\n*/\nfunction getDefaultSortingState() {\n\treturn [];\n}\n/**\n* Routes a sorting updater through the table's sorting change handler.\n*\n* The updater may be a next `SortingState` array or a function of the previous\n* sorting state, matching the instance `table.setSorting` behavior. State\n* owners receive an equality-guarded updater so structurally equal sorting\n* values preserve the owner's existing reference.\n*\n* @example\n* ```ts\n* table_setSorting(table, (old) => [...old, { id: 'age', desc: true }])\n* ```\n*/\nfunction table_setSorting(table, updater) {\n\tsetStateSlice(table, \"sorting\", updater);\n}\n/**\n* Resets `sorting` to the configured initial state or feature default.\n*\n* With no argument, the reset clones `table.initialState.sorting` when it\n* exists. Passing `true` ignores initial state and resets to `[]`.\n*\n* @example\n* ```ts\n* table_resetSorting(table)\n* table_resetSorting(table, true)\n* ```\n*/\nfunction table_resetSorting(table, defaultState) {\n\ttable_setSorting(table, defaultState ? [] : cloneState(table.initialState.sorting ?? []));\n}\n/**\n* Resets sorting after the table data changes when explicitly enabled.\n*\n* Unlike other auto-reset behaviors, sorting is preserved by default. An\n* explicit `autoResetAll` value takes precedence over `autoResetSorting`.\n*\n* @example\n* ```ts\n* table_autoResetSorting(table)\n* ```\n*/\nfunction table_autoResetSorting(table) {\n\tif (!table.atoms.sorting) return;\n\tif (table.options.autoResetAll ?? table.options.autoResetSorting ?? false) table_resetSorting(table);\n}\n/**\n* Chooses a built-in sorting function from sampled filtered row values.\n*\n* Date-like values use `datetime`, mixed text/numeric strings use\n* `alphanumeric`, plain strings use `text`, and unknown values fall back to\n* `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getAutoSortFn(column)\n* ```\n*/\nfunction column_getAutoSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tlet sortFnName;\n\tlet isString = false;\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (Object.prototype.toString.call(value) === \"[object Date]\") {\n\t\t\tsortFnName = \"datetime\";\n\t\t\tbreak;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\tisString = true;\n\t\t\tif (value.split(reSplitAlphaNumeric).length > 1) {\n\t\t\t\tsortFnName = \"alphanumeric\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!sortFnName && isString) sortFnName = \"text\";\n\tif (sortFnName) {\n\t\tlet sortFn = sortFns?.[sortFnName];\n\t\tif (!sortFn) {\n\t\t\tif (process.env.NODE_ENV === \"development\") console.warn(`sortFn '${sortFnName}' (auto) for column '${column.id}' is not registered`);\n\t\t\tif (sortFnName === \"alphanumeric\") sortFn = sortFns?.text;\n\t\t}\n\t\tif (sortFn) return sortFn;\n\t}\n\treturn sortFn_basic;\n}\n/**\n* Chooses the default first sort direction from sampled filtered row values.\n*\n* The first non-nullish value among the sampled rows decides: string columns\n* start ascending so alphabetical order is natural; other value types (or\n* columns with no non-nullish sample) start descending. Sampling past leading\n* nullish values keeps the toggle cycle stable when sorting or a data swap\n* moves an empty value into the first row.\n*\n* @example\n* ```ts\n* const direction = column_getAutoSortDir(column)\n* ```\n*/\nfunction column_getAutoSortDir(column) {\n\tconst firstRows = column.table.getFilteredRowModel().flatRows.slice(0, 10);\n\tfor (let i = 0; i < firstRows.length; i++) {\n\t\tconst value = firstRows[i].getValue(column.id);\n\t\tif (value == null) continue;\n\t\treturn typeof value === \"string\" ? \"asc\" : \"desc\";\n\t}\n\treturn \"desc\";\n}\n/**\n* Resolves the sorting function configured for a column.\n*\n* Function-valued `columnDef.sortFn` is returned directly, `'auto'` delegates\n* to `column_getAutoSortFn`, and string values are looked up in the table's\n* sorting function registry before falling back to `basic`.\n*\n* @example\n* ```ts\n* const sortFn = column_getSortFn(column)\n* ```\n*/\nfunction column_getSortFn(column) {\n\tconst sortFns = column.table._rowModelFns.sortFns;\n\tif (isFunction(column.columnDef.sortFn)) return column.columnDef.sortFn;\n\tif (column.columnDef.sortFn === \"auto\") return column_getAutoSortFn(column);\n\tconst sortFn = sortFns?.[column.columnDef.sortFn];\n\tif (process.env.NODE_ENV === \"development\" && !sortFn) console.warn(`sortFn '${String(column.columnDef.sortFn)}' for column '${column.id}' is not registered`);\n\treturn sortFn ?? sortFn_basic;\n}\n/**\n* Applies the next sorting state for this column.\n*\n* The toggle can add, replace, flip, or remove this column's sort entry. Multi\n* sorting respects `enableMultiSort`, `enableMultiRemove`,\n* `maxMultiSortColCount`, and the `multi` argument.\n*\n* @example\n* ```ts\n* column_toggleSorting(column, undefined, true)\n* ```\n*/\nfunction column_toggleSorting(column, desc, multi) {\n\tconst nextSortingOrder = column_getNextSortingOrder(column, multi && column_getCanMultiSort(column));\n\tconst hasManualValue = typeof desc !== \"undefined\";\n\ttable_setSorting(column.table, (old) => {\n\t\tconst existingIndex = old.findIndex((d) => d.id === column.id);\n\t\tconst existingSorting = existingIndex === -1 ? void 0 : old[existingIndex];\n\t\tlet newSorting = [];\n\t\tlet sortAction;\n\t\tconst nextDesc = hasManualValue ? desc : nextSortingOrder === \"desc\";\n\t\tconst isMultiMode = !!(old.length && column_getCanMultiSort(column) && multi);\n\t\tif (isMultiMode) {\n\t\t\tif (existingSorting) sortAction = \"toggle\";\n\t\t\telse sortAction = \"add\";\n\t\t} else if (existingSorting) sortAction = \"toggle\";\n\t\telse sortAction = \"replace\";\n\t\tif (sortAction === \"toggle\") {\n\t\t\tif (!hasManualValue) {\n\t\t\t\tif (!nextSortingOrder) sortAction = \"remove\";\n\t\t\t}\n\t\t}\n\t\tif (sortAction === \"add\") {\n\t\t\tnewSorting = [...old, {\n\t\t\t\tid: column.id,\n\t\t\t\tdesc: nextDesc\n\t\t\t}];\n\t\t\tnewSorting.splice(0, newSorting.length - (column.table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER));\n\t\t} else if (sortAction === \"toggle\") newSorting = isMultiMode ? old.map((d) => {\n\t\t\tif (d.id === column.id) return {\n\t\t\t\t...d,\n\t\t\t\tdesc: nextDesc\n\t\t\t};\n\t\t\treturn d;\n\t\t}) : [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\telse if (sortAction === \"remove\") newSorting = isMultiMode ? old.filter((d) => d.id !== column.id) : [];\n\t\telse newSorting = [{\n\t\t\tid: column.id,\n\t\t\tdesc: nextDesc\n\t\t}];\n\t\treturn newSorting;\n\t});\n}\n/**\n* Resolves the first direction used when this column begins sorting.\n*\n* Column-level `sortDescFirst` wins, then table-level `sortDescFirst`, then the\n* auto direction inferred from sampled values.\n*\n* @example\n* ```ts\n* const firstDirection = column_getFirstSortDir(column)\n* ```\n*/\nfunction column_getFirstSortDir(column) {\n\treturn column.columnDef.sortDescFirst ?? column.table.options.sortDescFirst ?? column_getAutoSortDir(column) === \"desc\" ? \"desc\" : \"asc\";\n}\n/**\n* Resolves the next sort order for this column's toggle cycle.\n*\n* The cycle starts with the first sort direction, flips between `asc` and\n* `desc`, and can return `false` when sorting removal is enabled.\n*\n* @example\n* ```ts\n* const nextOrder = column_getNextSortingOrder(column)\n* ```\n*/\nfunction column_getNextSortingOrder(column, multi) {\n\tconst firstSortDirection = column_getFirstSortDir(column);\n\tconst isSorted = column_getIsSorted(column);\n\tif (!isSorted) return firstSortDirection;\n\tif (isSorted !== firstSortDirection && (column.table.options.enableSortingRemoval ?? true) && (multi ? column.table.options.enableMultiRemove ?? true : true)) return false;\n\treturn isSorted === \"desc\" ? \"asc\" : \"desc\";\n}\n/**\n* Checks whether this accessor column can participate in sorting.\n*\n* The column must have an accessor and sorting must be enabled by both the\n* column definition and table options.\n*\n* @example\n* ```ts\n* const canSort = column_getCanSort(column)\n* ```\n*/\nfunction column_getCanSort(column) {\n\treturn (column.columnDef.enableSorting ?? true) && (column.table.options.enableSorting ?? true) && !!column.accessorFn;\n}\n/**\n* Checks whether this column can be added to a multi-sort state.\n*\n* Column-level `enableMultiSort` wins over table-level `enableMultiSort`; if\n* neither is set, accessor columns can multi-sort by default.\n*\n* @example\n* ```ts\n* const canMultiSort = column_getCanMultiSort(column)\n* ```\n*/\nfunction column_getCanMultiSort(column) {\n\treturn column.columnDef.enableMultiSort ?? column.table.options.enableMultiSort ?? !!column.accessorFn;\n}\n/**\n* Reads this column's current sort direction.\n*\n* The result is `false` when the column is not sorted, otherwise `'asc'` or\n* `'desc'` based on the column's entry in `state.sorting`.\n*\n* @example\n* ```ts\n* const direction = column_getIsSorted(column)\n* ```\n*/\nfunction column_getIsSorted(column) {\n\tconst columnSort = column.table.atoms.sorting?.get()?.find((d) => d.id === column.id);\n\treturn !columnSort ? false : columnSort.desc ? \"desc\" : \"asc\";\n}\n/**\n* Finds this column's position in the ordered `state.sorting` array.\n*\n* The result is `-1` when the column is not sorted.\n*\n* @example\n* ```ts\n* const index = column_getSortIndex(column)\n* ```\n*/\nfunction column_getSortIndex(column) {\n\treturn column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ?? -1;\n}\n/**\n* Removes this column from the sorting state.\n*\n* Other sorted columns are preserved, including their relative order.\n*\n* @example\n* ```ts\n* column_clearSorting(column)\n* ```\n*/\nfunction column_clearSorting(column) {\n\ttable_setSorting(column.table, (old) => old.length ? old.filter((d) => d.id !== column.id) : []);\n}\n/**\n* Creates a header event handler that toggles this column's sorting.\n*\n* The handler ignores events when the column cannot sort, and asks\n* `options.isMultiSortEvent` whether the event should add to a multi-sort.\n*\n* @example\n* ```ts\n* const onClick = column_getToggleSortingHandler(column)\n* ```\n*/\nfunction column_getToggleSortingHandler(column) {\n\tconst canSort = column_getCanSort(column);\n\treturn (e) => {\n\t\tif (!canSort) return;\n\t\tcolumn_toggleSorting(column, void 0, column_getCanMultiSort(column) ? column.table.options.isMultiSortEvent?.(e) : false);\n\t};\n}\n\n//#endregion\nexport { column_clearSorting, column_getAutoSortDir, column_getAutoSortFn, column_getCanMultiSort, column_getCanSort, column_getFirstSortDir, column_getIsSorted, column_getNextSortingOrder, column_getSortFn, column_getSortIndex, column_getToggleSortingHandler, column_toggleSorting, getDefaultSortingState, table_autoResetSorting, table_resetSorting, table_setSorting };","import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from \"../../utils.js\";\nimport { column_clearSorting, column_getAutoSortDir, column_getAutoSortFn, column_getCanMultiSort, column_getCanSort, column_getFirstSortDir, column_getIsSorted, column_getNextSortingOrder, column_getSortFn, column_getSortIndex, column_getToggleSortingHandler, column_toggleSorting, getDefaultSortingState, table_autoResetSorting, table_resetSorting, table_setSorting } from \"./rowSortingFeature.utils.js\";\n\n//#region src/features/row-sorting/rowSortingFeature.ts\n/**\n* Feature that adds row sorting state, defaults, and column/table sorting APIs.\n*/\nconst rowSortingFeature = {\n\tgetInitialState(initialState) {\n\t\treturn {\n\t\t\tsorting: getDefaultSortingState(),\n\t\t\t...initialState\n\t\t};\n\t},\n\tgetDefaultColumnDef() {\n\t\treturn {\n\t\t\tsortFn: \"auto\",\n\t\t\tsortUndefined: 1\n\t\t};\n\t},\n\tgetDefaultTableOptions(table) {\n\t\treturn {\n\t\t\tautoResetSorting: false,\n\t\t\tonSortingChange: makeStateUpdater(\"sorting\", table),\n\t\t\tisMultiSortEvent: (e) => {\n\t\t\t\treturn e.shiftKey;\n\t\t\t}\n\t\t};\n\t},\n\tassignColumnPrototype(prototype, table) {\n\t\tassignPrototypeAPIs(\"rowSortingFeature\", prototype, table, {\n\t\t\tcolumn_getAutoSortFn: { fn: (column) => column_getAutoSortFn(column) },\n\t\t\tcolumn_getAutoSortDir: { fn: (column) => column_getAutoSortDir(column) },\n\t\t\tcolumn_getSortFn: { fn: (column) => column_getSortFn(column) },\n\t\t\tcolumn_toggleSorting: { fn: (column, desc, multi) => column_toggleSorting(column, desc, multi) },\n\t\t\tcolumn_getFirstSortDir: { fn: (column) => column_getFirstSortDir(column) },\n\t\t\tcolumn_getNextSortingOrder: { fn: (column, multi) => column_getNextSortingOrder(column, multi) },\n\t\t\tcolumn_getCanSort: { fn: (column) => column_getCanSort(column) },\n\t\t\tcolumn_getCanMultiSort: { fn: (column) => column_getCanMultiSort(column) },\n\t\t\tcolumn_getIsSorted: { fn: (column) => column_getIsSorted(column) },\n\t\t\tcolumn_getSortIndex: { fn: (column) => column_getSortIndex(column) },\n\t\t\tcolumn_clearSorting: { fn: (column) => column_clearSorting(column) },\n\t\t\tcolumn_getToggleSortingHandler: { fn: (column) => column_getToggleSortingHandler(column) }\n\t\t});\n\t},\n\tconstructTableAPIs(table) {\n\t\tassignTableAPIs(\"rowSortingFeature\", table, {\n\t\t\ttable_autoResetSorting: { fn: () => table_autoResetSorting(table) },\n\t\t\ttable_setSorting: { fn: (updater) => table_setSorting(table, updater) },\n\t\t\ttable_resetSorting: { fn: (defaultState) => table_resetSorting(table, defaultState) }\n\t\t});\n\t}\n};\n\n//#endregion\nexport { rowSortingFeature };","import { batch, createAtom } from \"@tanstack/store\";\n\n//#region src/store-reactivity-bindings.ts\n/**\n* TanStack Store–based reactivity for vanilla / non-framework use of `constructTable`,\n* with `createOptionsStore: true` so `table.optionsStore` is available for subscriptions.\n*\n* @example\n* ```ts\n* import { constructTable, tableFeatures } from '@tanstack/table-core'\n* import { storeReactivityBindings } from '@tanstack/table-core/store-reactivity-bindings'\n*\n* const table = constructTable({\n* features: tableFeatures({ coreReactivityFeature: storeReactivityBindings() }),\n* // ...\n* })\n* ```\n*/\nfunction storeReactivityBindings() {\n\treturn {\n\t\tcreateOptionsStore: true,\n\t\twrapExternalAtoms: false,\n\t\taddSubscription: () => {\n\t\t\tthrow new Error(\"Feature not supported in current reactivity implementation\");\n\t\t},\n\t\tunmount: () => {\n\t\t\tthrow new Error(\"Feature not supported in current reactivity implementation\");\n\t\t},\n\t\tbatch,\n\t\tschedule: (fn) => queueMicrotask(fn),\n\t\tuntrack: (fn) => fn(),\n\t\tcreateReadonlyAtom: (fn, options) => {\n\t\t\treturn createAtom(() => fn(), { compare: options?.compare });\n\t\t},\n\t\tcreateWritableAtom: (value, options) => {\n\t\t\treturn createAtom(value, { compare: options?.compare });\n\t\t}\n\t};\n}\n\n//#endregion\nexport { storeReactivityBindings };","import type {\n ColumnDef_RowSorting,\n RowData,\n RowModel,\n SortFnDef,\n Table,\n TableFeatures,\n} from '@tanstack/table-core';\nimport { column_getCanSort, column_getSortFn } from '@tanstack/table-core/static-functions';\n\ntype Sorting = readonly { id: string; desc: boolean }[];\n\ninterface SortKey {\n /** Each row's value by its position in the unsorted rows, resolved for `compare`. */\n keys: unknown[];\n compare: (a: unknown, b: unknown) => number;\n /** -1 flips `compare` (descending, inverted). */\n sign: number;\n sortUndefined: false | -1 | 1 | 'first' | 'last' | undefined;\n}\n\n/**\n * The sorted row model, in place of TanStack's `createSortedRowModel()`, giving the\n * same order: the same sort functions (`auto` included), `sortUndefined`,\n * `invertSorting`, ties by row index.\n *\n * It reads each row's value once, through the column's accessor, and sorts the row\n * positions by those values. TanStack's model calls `row.getValue()` four times per\n * comparison, and its row methods take rest arguments (`function (...args)`): in\n * Firefox that slows a large sort down by orders of magnitude (750k rows: 176 s\n * against 0.9 s for the same comparator without rest arguments). Reading values\n * once is also faster everywhere, most of all for text, which is lowercased once\n * per row instead of twice per comparison.\n *\n * The registered sort functions come from `constructSortFn`: each carries a value\n * comparator (`sort`, which compares values only) and a normalizer\n * (`resolveDataValue`). The rows are flat (no sub-rows), so there is nothing to\n * sort below them.\n */\nexport function sortedRowModel<TFeatures extends TableFeatures, TData extends RowData>() {\n return (table: Table<TFeatures, TData>) => {\n let last:\n | { sorting: unknown; source: RowModel<TFeatures, TData>; model: RowModel<TFeatures, TData> }\n | undefined;\n return (): RowModel<TFeatures, TData> => {\n const source = table.getPreSortedRowModel();\n const sorting = (table.options.state as { sorting?: Sorting } | undefined)?.sorting;\n const prev = last;\n if (prev && prev.sorting === sorting && prev.source === source) return prev.model;\n const model = sortRows(table, source, sorting ?? []);\n last = { sorting, source, model };\n return model;\n };\n };\n}\n\nfunction sortRows<TFeatures extends TableFeatures, TData extends RowData>(\n table: Table<TFeatures, TData>,\n source: RowModel<TFeatures, TData>,\n sorting: Sorting,\n): RowModel<TFeatures, TData> {\n const rows = source.rows;\n const sortKeys: SortKey[] = [];\n for (const { id, desc } of sorting) {\n const column = table.getColumn(id);\n if (!column || !column_getCanSort(column)) continue;\n const fn = column_getSortFn(column) as unknown as SortFnDef<TFeatures, TData>;\n const def = column.columnDef as ColumnDef_RowSorting<TFeatures, TData>;\n const read = column.accessorFn;\n const resolve = fn.resolveDataValue;\n const sortUndefined = def.sortUndefined;\n sortKeys.push({\n keys: rows.map((row) => {\n const value = read?.(row.original, row.index);\n // Undefined stays undefined where `sortUndefined` places it.\n return resolve && !(value === undefined && sortUndefined)\n ? (resolve(value) as unknown)\n : value;\n }),\n compare: fn.sort as (a: unknown, b: unknown) => number,\n sign: (desc ? -1 : 1) * (def.invertSorting ? -1 : 1),\n sortUndefined,\n });\n }\n if (!sortKeys.length || !rows.length) return source;\n\n const compare = (i: number, j: number): number => {\n for (const { keys, compare, sign, sortUndefined } of sortKeys) {\n const a = keys[i];\n const b = keys[j];\n let result = 0;\n if (sortUndefined && (a === undefined || b === undefined)) {\n if (a === undefined && b === undefined) continue;\n if (sortUndefined === 'first') return a === undefined ? -1 : 1;\n if (sortUndefined === 'last') return a === undefined ? 1 : -1;\n result = a === undefined ? sortUndefined : -sortUndefined;\n }\n if (result === 0) result = compare(a, b);\n if (result !== 0) return result * sign;\n }\n return (rows[i]?.index ?? i) - (rows[j]?.index ?? j);\n };\n\n const sorted = rows\n .map((_, i) => i)\n .sort(compare)\n .map((i) => rows[i])\n .filter((row) => row !== undefined);\n return { rows: sorted, flatRows: sorted, rowsById: source.rowsById };\n}\n","import {\n columnPinningFeature,\n columnSizingFeature,\n constructTable,\n rowSortingFeature,\n sortFn_alphanumeric,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n tableFeatures,\n type Column,\n type ColumnDef as TanStackColumnDef,\n type Row,\n type Table,\n type TableOptions,\n} from '@tanstack/table-core';\nimport { storeReactivityBindings } from '@tanstack/table-core/store-reactivity-bindings';\nimport { moveColumn, normalizeOrder } from '../columns/column-order.js';\nimport { resolveColumns, type ResolvedColumn } from '../columns/resolve-columns.js';\nimport { sortedRowModel } from './sorted-row-model.js';\nimport type {\n CellContext,\n ColumnAlign,\n ColumnDef,\n ColumnOrderState,\n ColumnPin,\n ColumnSizingState,\n PinnedRows,\n RowPin,\n SortState,\n} from '../types.js';\n\n// The TanStack adapter. Everything TanStack stays in this module: callers only see\n// the view types below, so TanStack can be upgraded or replaced without touching\n// `argus-table`'s public API.\n\nconst features = tableFeatures({\n // Vanilla (framework-free) reactivity; required by `constructTable`.\n coreReactivityFeature: storeReactivityBindings(),\n columnPinningFeature,\n columnSizingFeature,\n rowSortingFeature,\n // Our own: TanStack's is very slow in Firefox at scale (see sorted-row-model.ts).\n sortedRowModel: sortedRowModel(),\n // Registered by name so `sortFn: 'auto'` can pick one by value type.\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n basic: sortFn_basic,\n datetime: sortFn_datetime,\n text: sortFn_text,\n },\n});\ntype Features = typeof features;\ntype AnyRow = Record<string, unknown>;\n\n/** Sort direction of a column, or `false` when it isn't sorted. */\nexport type SortDirection = 'asc' | 'desc' | false;\n\n/** A column as the renderer sees it, in visual order: start-pinned, scrolling, end-pinned. */\nexport interface ColumnView<TData, TContent> {\n id: string;\n /** 1-based position in visual order, for `aria-colindex`. */\n colIndex: number;\n pin: ColumnPin | undefined;\n /**\n * Sticky inset in px: from the start edge for `'start'` columns, from the end edge\n * for `'end'` columns. For scrolling columns, the start within the scrolling area.\n */\n offset: number;\n /** `true` on the pinned column next to the scrolling area (one per pinned side). */\n pinEdge: boolean;\n /** Current width in px (a resized width wins over the column's own). */\n width: number;\n /** Share of free space, or `undefined` for a fixed width. A resized column stops flexing. */\n flex: number | undefined;\n /**\n * `true` for a `width: 'auto'` column that hasn't been resized: the table measures\n * its content and passes the width in as `autoWidths`.\n */\n auto: boolean;\n minWidth: number;\n maxWidth: number;\n sortable: boolean;\n resizable: boolean;\n reorderable: boolean;\n align: ColumnAlign;\n sorted: SortDirection;\n header: ColumnDef<TData, TContent>['header'];\n cell: ColumnDef<TData, TContent>['cell'];\n hasAccessor: boolean;\n}\n\n/** A row of the current (sorted) row model. */\nexport interface RowView<TData> {\n id: string;\n /** Index in the current row model, 0-based. */\n index: number;\n original: TData;\n}\n\n/**\n * Rows that live outside the model, loaded page by page (`dataSource`). The\n * source sorts them, so the model reads them as they are. `PageCache` implements it.\n */\nexport interface RemoteRows<TData> {\n readonly rowCount: number;\n /** The loaded row at an index, with its id; `undefined` while it isn't loaded. */\n entryAt(index: number): { id: string; row: TData } | undefined;\n /** The index of a loaded row's id, or `undefined`. */\n indexOf(rowId: string): number | undefined;\n}\n\nexport interface TableModelOptions<TData, TContent> {\n columns: readonly ColumnDef<TData, TContent>[];\n data: readonly TData[];\n /**\n * Remote rows. When set, rows come from here instead of `data`, and the model\n * doesn't sort them (the source does).\n */\n remote?: RemoteRows<TData> | undefined;\n /** Row id function. Default: the row's index in `data`, as a string. */\n getRowId: ((row: TData, index: number) => string) | undefined;\n /** Current sort state; its owner is the caller (see `controllable`). */\n sorting: SortState;\n /** Current resized widths; its owner is the caller. */\n columnSizing: ColumnSizingState;\n /**\n * Current column order; its owner is the caller. Each pin group follows it; an\n * empty array (the default) keeps the order of `columns`.\n */\n columnOrder?: ColumnOrderState | undefined;\n /**\n * Measured widths of `width: 'auto'` columns, in px by id. Clamped to the column's\n * bounds; a resized width wins. Ids of other columns are ignored.\n */\n autoWidths?: ColumnSizingState | undefined;\n /** Rows fixed above or below the body. They stay out of the row model: never sorted, not counted. */\n pinnedRows?: PinnedRows<TData> | undefined;\n}\n\nexport interface TableModel<TData, TContent> {\n /** Updates any subset of the options. Unchanged references are ignored. */\n update(options: Partial<TableModelOptions<TData, TContent>>): void;\n /** Columns in visual order. */\n readonly columns: readonly ColumnView<TData, TContent>[];\n /** Number of rows in the current row model. */\n readonly rowCount: number;\n /** Sum of all column widths in px (flex columns count their minimum). */\n readonly totalWidth: number;\n /** The row at an index of the current row model; `undefined` for a remote row not loaded yet. */\n rowAt(index: number): RowView<TData> | undefined;\n /** The index of a row id in the current row model (after sorting), or `undefined`. */\n indexOf(rowId: string): number | undefined;\n /** The value a column reads from the row at `index`. */\n valueAt(index: number, columnId: string): unknown;\n /** What a column's `cell` function receives for the row at `index`. */\n cellContext(index: number, columnId: string): CellContext<TData> | undefined;\n /**\n * The sort state that clicking this column's header would produce:\n * asc → desc → unsorted, one column at a time. `undefined` if it can't sort.\n */\n nextSorting(columnId: string): SortState | undefined;\n /**\n * The sizing state after setting a column to `width` px, clamped to its bounds.\n * `undefined` if the column can't be resized.\n */\n nextSizing(columnId: string, width: number): ColumnSizingState | undefined;\n /**\n * The full column order as the table shows it: start-pinned, scrolling and\n * end-pinned ids. `base` defaults to the current `columnOrder`.\n */\n orderOf(base?: readonly string[]): ColumnOrderState;\n /**\n * The order after moving a column to position `to` (0-based, in the whole order,\n * counted after the move), starting from `base` (default: the current order).\n * `undefined` if the column can't move, `to` is outside its pin group, or nothing changes.\n */\n nextOrder(columnId: string, to: number, base?: readonly string[]): ColumnOrderState | undefined;\n /** Number of rows pinned to a side. */\n pinnedCount(side: RowPin): number;\n /**\n * A pinned row, `index` counted within its side. Its id comes from `getRowId`,\n * else it is `'top-{index}'` or `'bottom-{index}'`, apart from the data rows' index ids.\n */\n pinnedRowAt(side: RowPin, index: number): RowView<TData> | undefined;\n /** The value a column reads from a pinned row. */\n pinnedValueAt(side: RowPin, index: number, columnId: string): unknown;\n /** What a column's `cell` function receives for a pinned row (with `pinned` set). */\n pinnedCellContext(side: RowPin, index: number, columnId: string): CellContext<TData> | undefined;\n}\n\nconst defaultRowId = (_row: unknown, index: number) => String(index);\n\nfunction toTanStack<TData, TContent>(\n column: ResolvedColumn<TData, TContent>,\n): TanStackColumnDef<Features, AnyRow> {\n return {\n id: column.id,\n accessorFn: column.getValue as (row: AnyRow, index: number) => unknown,\n size: column.width,\n minSize: column.minWidth,\n maxSize: column.maxWidth,\n enableSorting: column.sortable,\n sortUndefined: 'last',\n };\n}\n\n/**\n * Creates the table model over TanStack Table. It owns no state: sorting, sizing and order\n * come in through `update()`, and `nextSorting()`, `nextSizing()` and `nextOrder()` only propose\n * changes, so the caller decides (controlled or uncontrolled) whether to apply them.\n */\nexport function createTableModel<TData, TContent>(\n initial: TableModelOptions<TData, TContent>,\n): TableModel<TData, TContent> {\n let options = initial;\n let resolved = resolveColumns(options.columns);\n let byId = new Map(resolved.map((c) => [c.id, c]));\n // TanStack column defs by id, kept between updates that don't change `columns`.\n let tanStackById = new Map(resolved.map((c) => [c.id, toTanStack(c)]));\n let views: ColumnView<TData, TContent>[] | undefined;\n // TanStack's sizing state: measured auto widths under the resized ones. Kept stable\n // between updates that don't touch either.\n let sizing: ColumnSizingState | undefined;\n const sizingState = (): ColumnSizingState => {\n if (sizing) return sizing;\n const auto = options.autoWidths;\n if (!auto) return (sizing = options.columnSizing);\n const merged: ColumnSizingState = {};\n for (const column of resolved) {\n const px = auto[column.id];\n if (!column.auto || px === undefined || !Number.isFinite(px)) continue;\n merged[column.id] = Math.min(column.maxWidth, Math.max(column.minWidth, px));\n }\n return (sizing = { ...merged, ...options.columnSizing });\n };\n // The normalized order, kept stable between updates that touch neither columns nor order.\n let order: ColumnOrderState | undefined;\n const orderState = (): ColumnOrderState =>\n (order ??= normalizeOrder(options.columnOrder ?? [], resolved));\n const rowViews = new WeakMap<Row<Features, AnyRow>, RowView<TData>>();\n // Built lazily per row model (sorting or new data gives a new array).\n let indexById: { rows: readonly Row<Features, AnyRow>[]; map: Map<string, number> } | undefined;\n\n // The order reaches TanStack as the order of its column defs (the scrolling\n // columns follow it) and of the pinning arrays (the pinned ones do). Rebuilt only\n // when the order changes: a new columns array makes TanStack rebuild its columns,\n // though not its row models, which depend on data and sorting alone.\n let ordered:\n | {\n order: ColumnOrderState;\n columns: TanStackColumnDef<Features, AnyRow>[];\n pinning: { start: string[]; end: string[] };\n }\n | undefined;\n const orderedColumns = () => {\n const current = orderState();\n if (ordered?.order !== current) {\n const pinOf = (id: string) => byId.get(id)?.pin;\n ordered = {\n order: current,\n columns: current.flatMap((id) => tanStackById.get(id) ?? []),\n pinning: {\n start: current.filter((id) => pinOf(id) === 'start'),\n end: current.filter((id) => pinOf(id) === 'end'),\n },\n };\n }\n return ordered;\n };\n\n const tableOptions = (): TableOptions<Features, AnyRow> => ({\n features,\n columns: orderedColumns().columns,\n // Remote rows bypass TanStack's row models; it still handles columns and state.\n data: (options.remote ? [] : options.data) as AnyRow[],\n getRowId: (options.getRowId ?? defaultRowId) as (row: AnyRow, index: number) => string,\n state: {\n sorting: options.sorting,\n columnSizing: sizingState(),\n columnPinning: orderedColumns().pinning,\n },\n // State is owned by the caller; TanStack's own setters must not change it.\n onSortingChange: () => undefined,\n onColumnSizingChange: () => undefined,\n onColumnPinningChange: () => undefined,\n });\n\n const table: Table<Features, AnyRow> = constructTable(tableOptions());\n\n const rows = () => table.getRowModel().rows;\n const pinned = (side: RowPin): readonly TData[] => options.pinnedRows?.[side] ?? [];\n\n const buildViews = (): ColumnView<TData, TContent>[] => {\n const start = table.getStartLeafColumns();\n const center = table.getCenterLeafColumns();\n const end = table.getEndLeafColumns();\n const sorting = options.sorting;\n const view = (\n column: Column<Features, AnyRow>,\n colIndex: number,\n offset: number,\n pinEdge: boolean,\n ): ColumnView<TData, TContent> => {\n const def = byId.get(column.id);\n if (!def) throw new Error(`argus-table: unknown column '${column.id}'.`);\n const sort = sorting.find((s) => s.id === column.id);\n return {\n id: def.id,\n colIndex,\n pin: def.pin,\n offset,\n pinEdge,\n width: column.getSize(),\n flex: options.columnSizing[def.id] === undefined ? def.flex : undefined,\n auto: def.auto && options.columnSizing[def.id] === undefined,\n minWidth: def.minWidth,\n maxWidth: def.maxWidth,\n sortable: def.sortable,\n resizable: def.resizable,\n reorderable: def.reorderable,\n align: def.align,\n sorted: sort ? (sort.desc ? 'desc' : 'asc') : false,\n header: def.header,\n cell: def.cell,\n hasAccessor: def.hasAccessor,\n };\n };\n return [\n ...start.map((c, i) => view(c, i + 1, c.getStart('start'), i === start.length - 1)),\n ...center.map((c, i) => view(c, start.length + i + 1, c.getStart('center'), false)),\n ...end.map((c, i) =>\n view(c, start.length + center.length + i + 1, c.getAfter('end'), i === 0),\n ),\n ];\n };\n\n return {\n update(next) {\n const merged = { ...options, ...next };\n const changed = (Object.keys(next) as (keyof typeof next)[]).some(\n (key) => next[key] !== options[key],\n );\n if (!changed) return;\n if (next.columns && next.columns !== options.columns) {\n resolved = resolveColumns(next.columns);\n byId = new Map(resolved.map((c) => [c.id, c]));\n tanStackById = new Map(resolved.map((c) => [c.id, toTanStack(c)]));\n }\n if (\n merged.columns !== options.columns ||\n merged.columnSizing !== options.columnSizing ||\n merged.autoWidths !== options.autoWidths\n ) {\n sizing = undefined;\n }\n if (merged.columns !== options.columns || merged.columnOrder !== options.columnOrder) {\n order = undefined;\n }\n options = merged;\n views = undefined;\n table.setOptions((prev) => ({ ...prev, ...tableOptions() }));\n },\n\n get columns() {\n return (views ??= buildViews());\n },\n\n get rowCount() {\n return options.remote?.rowCount ?? rows().length;\n },\n\n get totalWidth() {\n return table.getTotalSize();\n },\n\n rowAt(index) {\n if (options.remote) {\n const entry = options.remote.entryAt(index);\n return entry && { id: entry.id, index, original: entry.row };\n }\n const row = rows()[index];\n if (!row) return undefined;\n let view = rowViews.get(row);\n if (view?.index !== index) {\n view = { id: row.id, index, original: row.original as TData };\n rowViews.set(row, view);\n }\n return view;\n },\n\n indexOf(rowId) {\n if (options.remote) return options.remote.indexOf(rowId);\n const current = rows();\n if (indexById?.rows !== current) {\n indexById = { rows: current, map: new Map(current.map((r, i) => [r.id, i])) };\n }\n return indexById.map.get(rowId);\n },\n\n valueAt(index, columnId) {\n if (options.remote) {\n const entry = options.remote.entryAt(index);\n return entry && byId.get(columnId)?.getValue(entry.row, index);\n }\n return rows()[index]?.getValue(columnId);\n },\n\n cellContext(index, columnId) {\n if (options.remote) {\n const entry = options.remote.entryAt(index);\n const column = byId.get(columnId);\n if (!entry || !column) return undefined;\n return {\n row: entry.row,\n rowId: entry.id,\n index,\n columnId,\n value: column.getValue(entry.row, index),\n };\n }\n const row = rows()[index];\n if (!row || !byId.has(columnId)) return undefined;\n return {\n row: row.original as TData,\n rowId: row.id,\n index,\n columnId,\n value: row.getValue(columnId),\n };\n },\n\n nextSorting(columnId) {\n if (byId.get(columnId)?.sortable !== true) return undefined;\n const current = options.sorting.find((s) => s.id === columnId);\n if (!current) return [{ id: columnId, desc: false }];\n return current.desc ? [] : [{ id: columnId, desc: true }];\n },\n\n nextSizing(columnId, width) {\n const column = byId.get(columnId);\n if (!column?.resizable || !Number.isFinite(width)) return undefined;\n const clamped = Math.round(Math.min(column.maxWidth, Math.max(column.minWidth, width)));\n return { ...options.columnSizing, [columnId]: clamped };\n },\n\n orderOf(base) {\n return base === undefined ? orderState() : normalizeOrder(base, resolved);\n },\n\n nextOrder(columnId, to, base) {\n return moveColumn(base ?? orderState(), resolved, columnId, to);\n },\n\n pinnedCount(side) {\n return pinned(side).length;\n },\n\n pinnedRowAt(side, index) {\n if (index < 0 || index >= pinned(side).length) return undefined;\n const row = pinned(side)[index] as TData;\n const id = options.getRowId ? options.getRowId(row, index) : `${side}-${String(index)}`;\n return { id, index, original: row };\n },\n\n pinnedValueAt(side, index, columnId) {\n if (index < 0 || index >= pinned(side).length) return undefined;\n return byId.get(columnId)?.getValue(pinned(side)[index] as TData, index);\n },\n\n pinnedCellContext(side, index, columnId) {\n const row = this.pinnedRowAt(side, index);\n const column = byId.get(columnId);\n if (!row || !column) return undefined;\n return {\n row: row.original,\n rowId: row.id,\n index,\n columnId,\n value: column.getValue(row.original, index),\n pinned: side,\n };\n },\n };\n}\n","/** The row groups of the grid, top to bottom. */\nexport type GridSection = 'header' | 'top' | 'body' | 'bottom';\n\n/** A row of the grid: its section and its index within it (the header is index 0). */\nexport interface GridRow {\n section: GridSection;\n index: number;\n}\n\n/**\n * Where each row sits in the grid as a whole: the header row, then the rows\n * pinned to the top, the body rows, and the rows pinned to the bottom. The\n * position is 0-based and `aria-rowindex` is one more. Keyboard navigation\n * steps through positions, so it crosses sections without special cases.\n */\nexport class RowLayout {\n readonly top: number;\n readonly body: number;\n readonly bottom: number;\n\n constructor(top: number, body: number, bottom: number) {\n this.top = top;\n this.body = body;\n this.bottom = bottom;\n }\n\n /** Number of rows, the header included (`aria-rowcount`). */\n get total(): number {\n return 1 + this.top + this.body + this.bottom;\n }\n\n /** 0-based position of a row in the grid. */\n position({ section, index }: GridRow): number {\n switch (section) {\n case 'header':\n return 0;\n case 'top':\n return 1 + index;\n case 'body':\n return 1 + this.top + index;\n case 'bottom':\n return 1 + this.top + this.body + index;\n }\n }\n\n /** The row at a 0-based position, or `undefined` outside the grid. */\n at(position: number): GridRow | undefined {\n if (!Number.isInteger(position) || position < 0 || position >= this.total) return undefined;\n if (position === 0) return { section: 'header', index: 0 };\n let index = position - 1;\n if (index < this.top) return { section: 'top', index };\n index -= this.top;\n if (index < this.body) return { section: 'body', index };\n return { section: 'bottom', index: index - this.body };\n }\n\n ariaRowIndex(row: GridRow): number {\n return this.position(row) + 1;\n }\n\n fromAriaRowIndex(ariaRowIndex: number): GridRow | undefined {\n return this.at(ariaRowIndex - 1);\n }\n}\n","/**\n * State that works like a form input: uncontrolled until the host sets it,\n * controlled from then on. See `docs/plan/code-architecture/04-state-and-events.md`.\n *\n * - **Uncontrolled:** `request()` applies the change. The caller then fires the change event.\n * - **Controlled:** `request()` changes nothing and returns the proposed value for the\n * event. The value only changes when the host calls `set()` again.\n * - `set(undefined)` hands ownership back to the table and keeps the last value.\n */\nexport interface Controllable<T> {\n /** The current value. */\n readonly value: T;\n /** `true` once the host has set a value (and not handed it back with `undefined`). */\n readonly controlled: boolean;\n /** Called when the host sets the property. */\n set(value: T | undefined): void;\n /**\n * Called when the table wants to change the state, for example after a header click.\n * Returns the proposed value and whether it was applied.\n */\n request(next: T): { value: T; applied: boolean };\n}\n\nexport function controllable<T>(initial: T): Controllable<T> {\n let value = initial;\n let controlled = false;\n return {\n get value() {\n return value;\n },\n get controlled() {\n return controlled;\n },\n set(next) {\n if (next === undefined) {\n controlled = false;\n return;\n }\n controlled = true;\n value = next;\n },\n request(next) {\n if (!controlled) value = next;\n return { value: next, applied: !controlled };\n },\n };\n}\n","/** A rendered row and the pool slot whose DOM it uses. */\nexport interface PoolEntry {\n id: string;\n slot: number;\n}\n\n/**\n * Assigns pool slots to rendered rows (ADR 0001).\n *\n * A row keeps its slot while it stays rendered. A row entering the window takes a\n * slot freed by a row that left, so its DOM is updated in place rather than created.\n * Rows are returned in slot order (\"pool order\"); the ADR 0001 addendum ruled out\n * re-sorting them by row index, so assistive tech gets row positions from\n * `aria-rowindex` instead.\n */\nexport class RowPool {\n #slots = new Map<string, number>();\n #free: number[] = [];\n #size = 0;\n #pinned: string | undefined;\n\n /** Number of slots created so far: the most rows rendered at once. */\n get size(): number {\n return this.#size;\n }\n\n /** The row id whose slot is kept while it is out of range, if any. */\n get pinned(): string | undefined {\n return this.#pinned;\n }\n\n /**\n * Keeps one row's slot, and keeps it rendered, while it is outside the rendered\n * range. Used for the row holding focus. `undefined` releases it.\n */\n pin(id: string | undefined): void {\n this.#pinned = id;\n }\n\n /** The slot a row holds, or `undefined` when it isn't rendered. */\n slotOf(id: string): number | undefined {\n return this.#slots.get(id);\n }\n\n /**\n * Updates the pool for the rows that should be rendered and returns them, plus the\n * pinned row if it isn't among them, in slot order.\n */\n update(ids: Iterable<string>): PoolEntry[] {\n const keep = new Set(ids);\n if (this.#pinned !== undefined) keep.add(this.#pinned);\n\n for (const [id, slot] of this.#slots) {\n if (!keep.has(id)) {\n this.#slots.delete(id);\n this.#free.push(slot);\n }\n }\n for (const id of keep) {\n if (!this.#slots.has(id)) this.#slots.set(id, this.#free.pop() ?? this.#size++);\n }\n\n const entries: PoolEntry[] = [];\n for (const [id, slot] of this.#slots) entries.push({ id, slot });\n return entries.sort((a, b) => a.slot - b.slot);\n }\n\n /** Frees every slot, for example when the data is replaced. */\n clear(): void {\n this.#slots.clear();\n this.#free = [];\n this.#size = 0;\n this.#pinned = undefined;\n }\n}\n","/**\n * Maps the scroll position of a body that is too tall to render onto the rows.\n *\n * Engines limit an element's height (about 33.5M px in Chromium and WebKit, less\n * when zoomed; about 17.9M px in Firefox, which drops a taller element to 0). A\n * body taller than `cap` renders `cap` px tall, and the scroll position is scaled\n * linearly: the top of the physical scroll range is the first row, its bottom the\n * last. Offsets the virtualizer works with are logical (unscaled) px; the\n * scroller's `scrollTop` is physical. Under the cap the mapping is the identity.\n *\n * The scroll range is the scroller's: the body plus what scrolls with it (header,\n * pinned rows) minus the viewport, so pass the physical range,\n * `scrollHeight - clientHeight`. The logical range is longer by `excess`.\n */\nexport class ScrollScale {\n #logical = 0;\n #cap = Infinity;\n /** The logical offset last written and the physical offset it landed on. */\n #landed: { physical: number; logical: number } | undefined;\n\n /**\n * `logical`: the height of all body rows in px. `cap`: the tallest body the\n * engine renders. Returns whether anything changed.\n */\n configure(logical: number, cap: number): boolean {\n if (logical === this.#logical && cap === this.#cap) return false;\n this.#logical = logical;\n this.#cap = cap;\n this.#landed = undefined;\n return true;\n }\n\n /** Whether the body is taller than the cap, so offsets are scaled. */\n get scaled(): boolean {\n return this.#logical > this.#cap;\n }\n\n /** The body's rendered height in px. */\n get size(): number {\n return Math.min(this.#logical, this.#cap);\n }\n\n /** How much longer the logical scroll range is than the physical one. */\n get excess(): number {\n return this.#logical - this.size;\n }\n\n /** The logical offset for a physical one, given the physical scroll range. */\n toLogical(physical: number, range: number): number {\n if (!this.scaled || range <= 0) return physical;\n const landed = this.#landed;\n if (landed?.physical === physical) return landed.logical;\n return (clamp(physical, range) * (range + this.excess)) / range;\n }\n\n /** The physical offset for a logical one, given the physical scroll range. */\n toPhysical(logical: number, range: number): number {\n if (!this.scaled || range <= 0) return logical;\n const total = range + this.excess;\n return (clamp(logical, total) * range) / total;\n }\n\n /**\n * Records that a write of the logical offset `logical` left the scroller at\n * `physical` (read back, after the engine's rounding), so reading that physical\n * offset gives the exact logical one again. Without it a scaled offset could be\n * off by up to the scale ratio, and a row scrolled to the top would sit under\n * the header by a few px.\n */\n land(logical: number, physical: number): void {\n this.#landed = this.scaled ? { physical, logical } : undefined;\n }\n}\n\nconst clamp = (value: number, max: number) => Math.min(Math.max(value, 0), max);\n","/** The visible rows as the virtualizer reports them: indexes inclusive. */\nexport interface VisibleRange {\n startIndex: number;\n endIndex: number;\n overscan: number;\n count: number;\n}\n\n/**\n * The most rows of `rowHeight` px a view `viewHeight` px tall can show at once,\n * partly: one more than fit, when the view starts inside a row.\n */\nexport function maxVisibleRows(viewHeight: number, rowHeight: number): number {\n return viewHeight > 0 && rowHeight > 0 ? Math.ceil(viewHeight / rowHeight) + 1 : 0;\n}\n\n/**\n * The row indexes to render: the visible rows plus `overscan` on each side,\n * always the same number of rows (`maxVisible` plus twice the overscan, or all\n * rows when there are fewer). At either end the overscan that has no room goes to\n * the other side.\n *\n * The usual window is cut off at the ends instead: at the top it holds only the\n * overscan below, and the row pool grows by a row, its cells and their slots,\n * with every row scrolled until the overscan above is full. WebKit cancels a\n * wheel scroll's animation when slot assignment changes inside the scroller, so\n * from the top each wheel step moved a few px instead of a full step. A window of\n * one size fills the pool on the first render, and scrolling only reuses it.\n */\nexport function steadyWindow(\n { startIndex, endIndex, overscan, count }: VisibleRange,\n maxVisible: number,\n): number[] {\n const visible = Math.max(maxVisible, endIndex - startIndex + 1);\n const size = Math.min(count, visible + 2 * overscan);\n const first = Math.max(0, Math.min(startIndex - overscan, count - size));\n return Array.from({ length: size }, (_, i) => first + i);\n}\n","/** Whether a row's data is there: loaded, still to come, or its page failed. */\nexport type RowState = 'loaded' | 'loading' | 'error';\n\n/** A loaded row and its id. */\nexport interface CachedRow<TData> {\n id: string;\n row: TData;\n}\n\nexport interface PageCacheOptions<TData> {\n /** Rows per page, at least 1. */\n pageSize: number;\n /** Row id function, given the absolute index. Default: the index as a string. */\n getRowId?: ((row: TData, index: number) => string) | undefined;\n /** Row count to start with (carried over from a previous cache). Default: one page. */\n rowCount?: number;\n /** Whether `rowCount` is the real total. Default: `false`. */\n totalKnown?: boolean;\n}\n\n/**\n * Pages kept loaded on each side of the requested range; pages further away are\n * dropped, so memory stays bounded however far the table scrolls.\n */\nexport const KEEP_PAGES = 10;\n\n/**\n * The row cache behind `dataSource`: which pages are loaded, in flight or failed,\n * and how many rows the table has. Bookkeeping only: no timers and no fetching,\n * so the caller (the element's DataController) decides when to load.\n *\n * Without a known total, the row count stays one page past the last loaded row,\n * so the next page shows as skeletons and loads when it scrolls into view. A page\n * shorter than asked for marks the end.\n */\nexport class PageCache<TData> {\n readonly pageSize: number;\n readonly #getRowId: (row: TData, index: number) => string;\n readonly #pages = new Map<number, CachedRow<TData>[]>();\n /** In-flight pages and the `end` they asked for. */\n readonly #inFlight = new Map<number, number>();\n readonly #failed = new Set<number>();\n readonly #indexById = new Map<string, number>();\n #rowCount: number;\n #totalKnown: boolean;\n\n constructor(options: PageCacheOptions<TData>) {\n this.pageSize = Math.max(1, Math.floor(options.pageSize));\n this.#getRowId = options.getRowId ?? ((_row, index) => String(index));\n this.#rowCount = Math.max(0, Math.floor(options.rowCount ?? this.pageSize));\n this.#totalKnown = options.totalKnown ?? false;\n }\n\n /** Number of rows, loaded or not. */\n get rowCount(): number {\n return this.#rowCount;\n }\n\n /** `true` once the total is known (given by the server, or found from a short page). */\n get totalKnown(): boolean {\n return this.#totalKnown;\n }\n\n pageOf(index: number): number {\n return Math.floor(index / this.pageSize);\n }\n\n /** The loaded row at an index, with its id; `undefined` until its page has loaded. */\n entryAt(index: number): CachedRow<TData> | undefined {\n if (index < 0 || index >= this.#rowCount) return undefined;\n return this.#pages.get(this.pageOf(index))?.[index % this.pageSize];\n }\n\n /** The index of a loaded row's id, or `undefined`. */\n indexOf(rowId: string): number | undefined {\n return this.#indexById.get(rowId);\n }\n\n stateAt(index: number): RowState {\n if (this.entryAt(index)) return 'loaded';\n return this.#failed.has(this.pageOf(index)) ? 'error' : 'loading';\n }\n\n /** Pages touching the rows `start` to `end` (exclusive) that still need a request. */\n missingPages(start: number, end: number): number[] {\n const last = Math.min(end, this.#rowCount) - 1;\n const pages: number[] = [];\n if (last < 0) return pages;\n for (let page = this.pageOf(Math.max(0, start)); page <= this.pageOf(last); page++) {\n if (!this.#pages.has(page) && !this.#inFlight.has(page) && !this.#failed.has(page)) {\n pages.push(page);\n }\n }\n return pages;\n }\n\n /** Marks a page as in flight and returns the rows to ask for. */\n begin(page: number): { start: number; end: number } {\n const start = page * this.pageSize;\n let end = start + this.pageSize;\n if (this.#totalKnown) end = Math.min(end, this.#rowCount);\n this.#failed.delete(page);\n this.#inFlight.set(page, end);\n return { start, end };\n }\n\n /** Stores a page's rows and updates the row count. Ignored unless the page is in flight. */\n resolve(page: number, rows: readonly TData[], total?: number): boolean {\n const end = this.#inFlight.get(page);\n if (end === undefined) return false;\n this.#inFlight.delete(page);\n const start = page * this.pageSize;\n const asked = end - start;\n const entries = rows.slice(0, asked).map((row, i) => ({\n id: this.#getRowId(row, start + i),\n row,\n }));\n this.#drop(page);\n if (entries.length > 0) this.#pages.set(page, entries);\n entries.forEach((entry, i) => this.#indexById.set(entry.id, start + i));\n\n if (total !== undefined && Number.isFinite(total) && total >= 0) {\n this.#setCount(Math.floor(total), true);\n } else if (entries.length < asked) {\n this.#setCount(start + entries.length, true);\n } else if (!this.#totalKnown) {\n this.#setCount(Math.max(this.#rowCount, end + this.pageSize), false);\n }\n return true;\n }\n\n /** Marks an in-flight page as failed. Ignored unless the page is in flight. */\n fail(page: number): boolean {\n if (!this.#inFlight.delete(page)) return false;\n this.#failed.add(page);\n return true;\n }\n\n /** Lets a failed page be requested again. */\n retry(page: number): void {\n this.#failed.delete(page);\n }\n\n /** Forgets an in-flight page (its request was aborted), so it can be requested again. */\n cancel(page: number): void {\n this.#inFlight.delete(page);\n }\n\n /** `true` if a page failed and hasn't been retried or evicted since. */\n isFailed(page: number): boolean {\n return this.#failed.has(page);\n }\n\n /** In-flight pages entirely outside rows `start` to `end` (exclusive). */\n inFlightOutside(start: number, end: number): number[] {\n const first = this.pageOf(Math.max(0, start));\n const last = this.pageOf(Math.max(0, end - 1));\n return [...this.#inFlight.keys()].filter((page) => page < first || page > last);\n }\n\n /**\n * Drops loaded and failed pages more than `KEEP_PAGES` pages away from rows\n * `start` to `end` (exclusive). Failed pages that come back into view load again.\n */\n evictOutside(start: number, end: number): void {\n const first = this.pageOf(Math.max(0, start)) - KEEP_PAGES;\n const last = this.pageOf(Math.max(0, end - 1)) + KEEP_PAGES;\n for (const page of [...this.#pages.keys()]) {\n if (page < first || page > last) this.#drop(page);\n }\n for (const page of [...this.#failed]) {\n if (page < first || page > last) this.#failed.delete(page);\n }\n }\n\n /** Number of pages holding rows: bounded by eviction. */\n get loadedPages(): number {\n return this.#pages.size;\n }\n\n #setCount(count: number, known: boolean): void {\n this.#rowCount = count;\n this.#totalKnown = known;\n // Rows past the end are gone; drop pages that start there.\n for (const page of [...this.#pages.keys()]) {\n if (page * this.pageSize >= count) this.#drop(page);\n }\n }\n\n #drop(page: number): void {\n const entries = this.#pages.get(page);\n if (!entries) return;\n const start = page * this.pageSize;\n entries.forEach((entry, i) => {\n if (this.#indexById.get(entry.id) === start + i) this.#indexById.delete(entry.id);\n });\n this.#pages.delete(page);\n }\n}\n","let region: HTMLElement | undefined;\n\n/**\n * Says something to screen readers through a polite live region. The region\n * lives in the document body, not in the table: a grid may only own rows, so a\n * status element inside it would break the grid's structure. One region serves\n * every table on the page. It is visually hidden with inline styles, so page\n * CSS can't reveal it.\n */\nexport function announce(doc: Document, message: string): void {\n if (!region?.isConnected || region.ownerDocument !== doc) {\n region = doc.createElement('div');\n region.setAttribute('aria-live', 'polite');\n region.setAttribute('aria-atomic', 'true');\n region.dataset.argusAnnouncer = '';\n region.style.cssText =\n 'position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap';\n doc.body.append(region);\n }\n const target = region;\n // A new text node each time, so the same message twice is still announced.\n target.textContent = '';\n setTimeout(() => {\n target.textContent = message;\n }, 50);\n}\n","import type { ColumnSizingState } from '@argus-table/core';\n\n/**\n * The width each column's content needs, in px, from the cells rendered now:\n * the header, the pinned rows and the rendered body rows. Rows that haven't\n * loaded are skipped (their skeleton bars say nothing about the content).\n *\n * Every cell of the columns gets `data-measure`, which sizes it to its\n * `max-content` (base styles), so the browser accounts for padding, the sort\n * indicator and whatever the content is. One forced layout, no paint: the\n * attribute is gone before the frame ends. A column with nothing laid out\n * (the table is hidden) is left out.\n */\nexport function measureColumns(root: ParentNode, ids: Iterable<string>): Map<string, number> {\n const wanted = new Set(ids);\n const widths = new Map<string, number>();\n if (wanted.size === 0) return widths;\n const cells = [...root.querySelectorAll<HTMLElement>('[data-col]')].filter(\n (cell) =>\n wanted.has(cell.dataset.col ?? '') && !cell.parentElement?.matches('[part~=\"row-loading\"]'),\n );\n for (const cell of cells) cell.setAttribute('data-measure', '');\n for (const cell of cells) {\n const id = cell.dataset.col ?? '';\n const px = Math.ceil(cell.getBoundingClientRect().width);\n if (px > 0 && px > (widths.get(id) ?? 0)) widths.set(id, px);\n }\n for (const cell of cells) cell.removeAttribute('data-measure');\n return widths;\n}\n\n/**\n * - `provisional`: measured without loaded body rows (the header and pinned rows only).\n * - `final`: measured with loaded rows; kept until the column goes away.\n * - `fonts`: measured while web fonts were loading; measured again once they are ready.\n */\ntype State = 'provisional' | 'final' | 'fonts';\n\n/**\n * Widths of `width: 'auto'` columns. A column measures once its first loaded\n * rows render, and before that fits the header and pinned rows. So each column\n * is measured at most twice (three times if fonts were still loading), and a\n * table that stays empty doesn't measure on every update. State is keyed by\n * column id, so new `columns` arrays with the same ids don't measure again.\n */\nexport class AutoWidths {\n /** Measured widths by column id; a new object whenever one changes. */\n widths: ColumnSizingState = {};\n readonly #state = new Map<string, State>();\n #fontsPending = false;\n readonly #requestUpdate: () => void;\n\n constructor(requestUpdate: () => void) {\n this.#requestUpdate = requestUpdate;\n }\n\n /** Forgets columns that are gone or no longer `'auto'`, given the ids of the auto columns. */\n sync(ids: Iterable<string>): void {\n const auto = new Set(ids);\n for (const id of this.#state.keys()) {\n if (!auto.has(id)) this.#state.delete(id);\n }\n const kept = Object.entries(this.widths).filter(([id]) => auto.has(id));\n if (kept.length !== Object.keys(this.widths).length) this.widths = Object.fromEntries(kept);\n }\n\n /**\n * Measures the auto columns that need it. Returns `true` if a width changed;\n * the caller then renders again (the one extra pass of the render cycle).\n */\n measure(\n root: ParentNode,\n columns: readonly { id: string; auto: boolean }[],\n hasLoadedRows: boolean,\n ): boolean {\n const due = columns\n .filter((c) => c.auto)\n .map((c) => c.id)\n .filter((id) => {\n const state = this.#state.get(id);\n return state === undefined || (state === 'provisional' && hasLoadedRows);\n });\n if (due.length === 0) return false;\n const measured = measureColumns(root, due);\n const fontsLoading = typeof document !== 'undefined' && document.fonts.status === 'loading';\n let next: ColumnSizingState | undefined;\n for (const [id, px] of measured) {\n this.#state.set(id, fontsLoading ? 'fonts' : hasLoadedRows ? 'final' : 'provisional');\n if (this.widths[id] !== px) (next ??= { ...this.widths })[id] = px;\n }\n if (fontsLoading && measured.size > 0) this.#remeasureAfterFonts();\n if (next) this.widths = next;\n return next !== undefined;\n }\n\n /** Once web fonts are ready, columns measured meanwhile measure again. */\n #remeasureAfterFonts(): void {\n if (this.#fontsPending) return;\n this.#fontsPending = true;\n void document.fonts.ready.then(() => {\n this.#fontsPending = false;\n let any = false;\n for (const [id, state] of this.#state) {\n if (state === 'fonts') {\n this.#state.delete(id);\n any = true;\n }\n }\n if (any) this.#requestUpdate();\n });\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { ArgusColumn, unwatchColumns, watchColumns } from '../argus-column.js';\nimport type { ColumnDef } from '../types.js';\n\n/**\n * Reads the host's `<argus-column>` children into `ColumnDef`s. The columns tell\n * the host when they change (`watchColumns`); the list is rebuilt only then, so\n * `defs` keeps its identity between changes.\n */\nexport class ColumnChildrenController<T> implements ReactiveController {\n readonly #host: ReactiveControllerHost & HTMLElement;\n #defs: readonly ColumnDef<T>[] = [];\n #dirty = true;\n\n constructor(host: ReactiveControllerHost & HTMLElement) {\n this.#host = host;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#dirty = true;\n watchColumns(this.#host, () => {\n this.#dirty = true;\n this.#host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n unwatchColumns(this.#host);\n }\n\n /** Whether the host has any `<argus-column>` child. */\n get present(): boolean {\n return this.defs.length > 0;\n }\n\n /** The children's columns, in document order. */\n get defs(): readonly ColumnDef<T>[] {\n if (this.#dirty) {\n this.#dirty = false;\n this.#defs = [...this.#host.children]\n .filter((c): c is ArgusColumn<T> => c instanceof ArgusColumn)\n .map((c) => c.toColumnDef());\n }\n return this.#defs;\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport {\n PageCache,\n type DataSource,\n type LoadErrorDetail,\n type RowState,\n type SortState,\n} from '@argus-table/core';\n\n/** Rows per request when the data source sets no `pageSize`. */\nexport const DEFAULT_PAGE_SIZE = 100;\n\n/** Quiet time after the last range change before pages load, so fast scrolling loads only where it stops. */\nexport const LOAD_DEBOUNCE_MS = 50;\n\nexport interface DataConfig<T> {\n source: DataSource<T> | undefined;\n sorting: SortState;\n getRowId: ((row: T, index: number) => string) | undefined;\n}\n\n/**\n * Loads `dataSource` pages for the rendered rows (infinite loading). It owns the\n * page cache: a new source, sort order or row id function starts a fresh one, and\n * answers for an old cache are dropped. Requests wait until the range has been\n * quiet for `LOAD_DEBOUNCE_MS`; pages that scrolled away are aborted.\n */\nexport class DataController<T> implements ReactiveController {\n readonly #host: ReactiveControllerHost;\n #config: DataConfig<T> = { source: undefined, sorting: [], getRowId: undefined };\n #cache: PageCache<T> | undefined;\n readonly #requests = new Map<number, AbortController>();\n #range: { start: number; end: number } | undefined;\n #timer: ReturnType<typeof setTimeout> | undefined;\n #errors: LoadErrorDetail[] = [];\n\n constructor(host: ReactiveControllerHost) {\n this.#host = host;\n host.addController(this);\n }\n\n hostDisconnected(): void {\n clearTimeout(this.#timer);\n this.#timer = undefined;\n this.#abortAll();\n }\n\n hostConnected(): void {\n // Requests aborted on disconnect load again on the next range request.\n this.#range = undefined;\n }\n\n /** The page cache, while a data source is set: the model reads rows from it. */\n get rows(): PageCache<T> | undefined {\n return this.#cache;\n }\n\n /**\n * Takes the source, sort order and row id function. Any change starts a fresh\n * cache; a sort or row id change keeps the row count (the rows are the same).\n */\n configure(next: DataConfig<T>): void {\n const prev = this.#config;\n this.#config = next;\n if (!next.source) {\n this.#reset(undefined);\n return;\n }\n if (next.source !== prev.source || !this.#cache) {\n this.#reset({ rowCount: undefined, totalKnown: false });\n } else if (next.sorting !== prev.sorting || next.getRowId !== prev.getRowId) {\n this.#reset({ rowCount: this.#cache.rowCount, totalKnown: this.#cache.totalKnown });\n }\n }\n\n /** Drops every loaded page and loads the rendered ones again. The row count stays until pages answer. */\n refresh(): void {\n if (!this.#cache) return;\n this.#reset({ rowCount: this.#cache.rowCount, totalKnown: false });\n this.#host.requestUpdate();\n }\n\n stateAt(index: number): RowState {\n return this.#cache?.stateAt(index) ?? 'loaded';\n }\n\n /**\n * The rendered rows, `start` to `end` (exclusive). Loads what's missing once the\n * range has been quiet for a moment. Call after every update.\n */\n request(start: number, end: number): void {\n const cache = this.#cache;\n if (!cache) return;\n const prev = this.#range;\n const moved = prev?.start !== start || prev.end !== end;\n this.#range = { start, end };\n if (moved) {\n clearTimeout(this.#timer);\n } else if (this.#timer !== undefined || cache.missingPages(start, end).length === 0) {\n return;\n }\n this.#timer = setTimeout(() => {\n this.#timer = undefined;\n this.#load();\n }, LOAD_DEBOUNCE_MS);\n }\n\n /** Requests the failed page holding row `index` again (the Retry button, or Enter on a failed row). */\n retry(index: number): void {\n const cache = this.#cache;\n const page = cache?.pageOf(index);\n if (!cache || page === undefined || !cache.isFailed(page)) return;\n cache.retry(page);\n this.#range = undefined;\n this.#host.requestUpdate();\n }\n\n /** Load errors since the last call, to fire as `argus-load-error` after the update. */\n takeErrors(): LoadErrorDetail[] {\n const errors = this.#errors;\n this.#errors = [];\n return errors;\n }\n\n #reset(carry: { rowCount: number | undefined; totalKnown: boolean } | undefined): void {\n clearTimeout(this.#timer);\n this.#timer = undefined;\n this.#abortAll();\n this.#range = undefined;\n this.#errors = [];\n const { source, getRowId } = this.#config;\n this.#cache =\n source && carry\n ? new PageCache<T>({\n pageSize: source.pageSize ?? DEFAULT_PAGE_SIZE,\n getRowId,\n rowCount: carry.rowCount,\n totalKnown: carry.totalKnown,\n })\n : undefined;\n }\n\n #abortAll(): void {\n for (const [page, controller] of this.#requests) {\n controller.abort();\n this.#cache?.cancel(page);\n }\n this.#requests.clear();\n }\n\n #load(): void {\n const cache = this.#cache;\n const range = this.#range;\n if (!cache || !range) return;\n // Keep a page of margin, so a small scroll back doesn't abort a page about to land.\n const margin = cache.pageSize;\n for (const page of cache.inFlightOutside(range.start - margin, range.end + margin)) {\n this.#requests.get(page)?.abort();\n this.#requests.delete(page);\n cache.cancel(page);\n }\n cache.evictOutside(range.start, range.end);\n for (const page of cache.missingPages(range.start, range.end)) this.#fetch(cache, page);\n }\n\n #fetch(cache: PageCache<T>, page: number): void {\n const source = this.#config.source;\n if (!source) return;\n const { start, end } = cache.begin(page);\n const controller = new AbortController();\n this.#requests.set(page, controller);\n const current = () => !controller.signal.aborted && cache === this.#cache;\n let pending: Promise<unknown>;\n try {\n pending = Promise.resolve(\n source.getRows({ start, end, sorting: this.#config.sorting, signal: controller.signal }),\n );\n } catch (error) {\n pending = Promise.reject(error instanceof Error ? error : new Error(String(error)));\n }\n pending\n .then((response) => {\n if (!current()) return;\n const { rows, total } = (response ?? {}) as { rows?: unknown; total?: unknown };\n if (!Array.isArray(rows)) {\n throw new TypeError('argus-table: getRows() must resolve to { rows: [], total? }.');\n }\n this.#requests.delete(page);\n cache.resolve(page, rows as T[], typeof total === 'number' ? total : undefined);\n this.#host.requestUpdate();\n })\n .catch((error: unknown) => {\n if (!current()) return;\n this.#requests.delete(page);\n cache.fail(page);\n this.#errors.push({ error, start, end });\n this.#host.requestUpdate();\n });\n }\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/** How long after the last sideways scroll pinned cells stay sticky. */\nconst SETTLE_MS = 150;\n\n/**\n * Keeps pinned body cells in place without making them sticky while the table\n * only scrolls up and down.\n *\n * Safari gives every sticky element a compositing layer of its own and moves\n * each one on every scroll frame; with a sticky cell per pinned column per row\n * that is dozens of layers, and vertical scrolling stutters (ADR 0001, \"Pinned\n * columns in Safari\"). At rest, pinned body cells are plain cells shifted by the\n * horizontal scroll offset (`--_sx`, and `--_max-x` for the end side), which\n * only changes when the table scrolls sideways. While it does, the scroller\n * carries `data-hscroll` and the cells are sticky, so they don't lag behind\n * the scroll; once it settles they go back to the transform, at the same place.\n * It also sizes the pinned edges' shadow overlays (`.pin-shadow`) to the\n * scroller's visible area.\n */\nexport class PinScrollController implements ReactiveController {\n readonly #scroller: () => HTMLElement | null;\n #attached: HTMLElement | undefined;\n #left = 0;\n #timer: ReturnType<typeof setTimeout> | undefined;\n #resize: ResizeObserver | undefined;\n\n constructor(host: ReactiveControllerHost, scroller: () => HTMLElement | null) {\n this.#scroller = scroller;\n host.addController(this);\n }\n\n hostConnected(): void {\n // After a move in the DOM; before the first render there is no scroller yet.\n this.#attach();\n }\n\n hostUpdated(): void {\n this.#attach();\n }\n\n hostDisconnected(): void {\n this.#attached?.removeEventListener('scroll', this.#onScroll);\n this.#resize?.disconnect();\n clearTimeout(this.#timer);\n this.#attached = undefined;\n }\n\n /** Re-reads how far the table scrolls sideways: call when column widths change. */\n measure(): void {\n const s = this.#attached;\n if (!s) return;\n s.style.setProperty('--_max-x', `${String(Math.max(0, s.scrollWidth - s.clientWidth))}px`);\n // The edge shadows sit over the scroller, clear of its scrollbars.\n for (const shadow of s.parentNode?.querySelectorAll<HTMLElement>(':scope > .pin-shadow') ??\n []) {\n shadow.style.setProperty('--_view-h', `${String(s.clientHeight)}px`);\n shadow.style.setProperty('--_sb-x', `${String(s.offsetWidth - s.clientWidth)}px`);\n }\n this.#left = s.scrollLeft;\n s.style.setProperty('--_sx', `${String(this.#left)}px`);\n }\n\n #attach(): void {\n const s = this.#scroller();\n if (!s || s === this.#attached) return;\n this.#attached = s;\n s.addEventListener('scroll', this.#onScroll, { passive: true });\n this.#resize ??= new ResizeObserver(() => {\n this.measure();\n });\n this.#resize.observe(s);\n this.measure();\n }\n\n readonly #onScroll = () => {\n const s = this.#attached;\n if (!s || s.scrollLeft === this.#left) return;\n this.#left = s.scrollLeft;\n s.toggleAttribute('data-hscroll', true);\n clearTimeout(this.#timer);\n this.#timer = setTimeout(() => {\n this.measure();\n s.removeAttribute('data-hscroll');\n }, SETTLE_MS);\n };\n}\n","/** Where a dragged column would land: its new position and the header that shows the drop line. */\nexport interface DropTarget {\n /** Position in the whole column order after the move, 0-based. */\n to: number;\n /** The header that draws the drop line. */\n columnId: string;\n /** The edge of that header the line is on, in logical terms. */\n edge: 'start' | 'end';\n}\n\n/** A header of the dragged column's group, in visual order. */\nexport interface DropSlot {\n id: string;\n /** Its position in the whole column order, 0-based. */\n index: number;\n rect: { left: number; right: number };\n}\n\n/**\n * The drop target for a pointer at `x`: the gap between headers nearest to it,\n * decided by each header's midpoint. `undefined` where the column would stay\n * put. `direction` is 1 in LTR and -1 in RTL, where the group runs right to left.\n */\nexport function dropTarget(\n slots: readonly DropSlot[],\n draggedId: string,\n x: number,\n direction: 1 | -1,\n): DropTarget | undefined {\n const from = slots.findIndex((s) => s.id === draggedId);\n const first = slots[0];\n const last = slots.at(-1);\n if (from < 0 || !first || !last) return undefined;\n // The gap before the first header whose middle is past the pointer, in reading order.\n let gap = slots.findIndex((s) => (x - (s.rect.left + s.rect.right) / 2) * direction < 0);\n if (gap < 0) gap = slots.length;\n if (gap === from || gap === from + 1) return undefined;\n const to = first.index + (gap > from ? gap - 1 : gap);\n const at = slots[gap];\n return at ? { to, columnId: at.id, edge: 'start' } : { to, columnId: last.id, edge: 'end' };\n}\n\nexport interface ReorderDragOptions {\n /** The scroll container: it scrolls while the pointer is near its edges. */\n scroller: HTMLElement;\n /** The drop target for a pointer at `x` (client coordinates). */\n targetAt: (x: number) => DropTarget | undefined;\n /**\n * Where the dragged column's group is visible, in client x, if it can scroll\n * (the scrolling columns). Near these edges the scroller scrolls with the drag.\n */\n scrollArea: () => { left: number; right: number } | undefined;\n onStart: () => void;\n /** The target changed (`undefined`: the column would stay put). */\n onTarget: (target: DropTarget | undefined) => void;\n /** The pointer was released over a target, or `undefined` when it would stay put. */\n onDrop: (target: DropTarget | undefined) => void;\n /** Escape, a cancelled pointer, or a release without a drag. */\n onCancel: () => void;\n}\n\n/** Movement before a press becomes a drag, so a click still sorts. */\nconst THRESHOLD = 4;\n/** Width of the band at the scroll area's edges that scrolls, and the top speed there. */\nconst EDGE = 40;\nconst MAX_SPEED = 16;\n\nconst INTERACTIVE = 'button,input,select,textarea,a[href],label,[contenteditable]';\n\n/**\n * Whether a press on a header may start a reorder drag: the primary button of a\n * mouse or pen (a touch pans the table instead), not on a resize handle, and not\n * in interactive content slotted into the header.\n */\nexport function canStartReorder(down: PointerEvent, cell: HTMLElement): boolean {\n if (down.button !== 0 || down.pointerType === 'touch') return false;\n for (const target of down.composedPath()) {\n if (target === cell) return true;\n if (!(target instanceof Element)) continue;\n if (target instanceof HTMLElement && target.dataset.resizeCol !== undefined) return false;\n if (target.matches(INTERACTIVE)) return false;\n }\n return false;\n}\n\n/**\n * One pointer drag of a column header. It becomes a drag after a few pixels of\n * movement; until then the press is a click. While dragging, the pointer is\n * captured by the header, the target follows the pointer once per frame, and the\n * scroll area scrolls near its edges. Escape cancels. The click that ends a drag\n * is swallowed, so it neither sorts nor counts as a cell click.\n */\nexport function startReorderDrag(\n cell: HTMLElement,\n down: PointerEvent,\n options: ReorderDragOptions,\n): void {\n const view = cell.ownerDocument.defaultView ?? window;\n const startX = down.clientX;\n const startY = down.clientY;\n let x = startX;\n let dragging = false;\n let frame = 0;\n let target: DropTarget | undefined;\n\n const same = (a: DropTarget | undefined, b: DropTarget | undefined) =>\n a?.to === b?.to && a?.columnId === b?.columnId && a?.edge === b?.edge;\n\n const tick = () => {\n frame = 0;\n if (!dragging) return;\n const area = options.scrollArea();\n if (area) {\n const speed =\n x < area.left + EDGE\n ? -Math.min(1, (area.left + EDGE - x) / EDGE)\n : x > area.right - EDGE\n ? Math.min(1, (x - (area.right - EDGE)) / EDGE)\n : 0;\n // A visual delta: scrollLeft runs the same way in LTR and RTL.\n if (speed !== 0) options.scroller.scrollLeft += Math.round(speed * MAX_SPEED);\n // Targets past the visible part would be hidden under pinned columns.\n x = Math.min(Math.max(x, area.left), area.right);\n }\n const next = options.targetAt(x);\n if (!same(next, target)) {\n target = next;\n options.onTarget(target);\n }\n // Keep running while dragging: the view may still be scrolling.\n frame = view.requestAnimationFrame(tick);\n };\n\n const listeners = new AbortController();\n const cleanup = (event?: PointerEvent) => {\n if (frame) view.cancelAnimationFrame(frame);\n frame = 0;\n listeners.abort();\n if (event && cell.hasPointerCapture(event.pointerId)) {\n cell.releasePointerCapture(event.pointerId);\n }\n };\n\n const move = (event: PointerEvent) => {\n if (event.pointerId !== down.pointerId) return;\n x = event.clientX;\n if (!dragging) {\n if (Math.hypot(x - startX, event.clientY - startY) < THRESHOLD) return;\n dragging = true;\n try {\n cell.setPointerCapture(event.pointerId);\n } catch {\n // Synthetic pointers can't be captured; the window listeners still see the moves.\n }\n options.onStart();\n }\n // No text selection while dragging.\n event.preventDefault();\n frame ||= view.requestAnimationFrame(tick);\n };\n\n const up = (event: PointerEvent) => {\n if (event.pointerId !== down.pointerId) return;\n cleanup(event);\n if (!dragging) return;\n x = event.clientX;\n const area = options.scrollArea();\n if (area) x = Math.min(Math.max(x, area.left), area.right);\n swallowClick(view);\n options.onDrop(options.targetAt(x));\n };\n\n const cancel = (event: PointerEvent) => {\n if (event.pointerId !== down.pointerId) return;\n cleanup(event);\n if (dragging) options.onCancel();\n };\n\n const key = (event: KeyboardEvent) => {\n if (!dragging || event.key !== 'Escape') return;\n event.preventDefault();\n event.stopPropagation();\n cleanup();\n // The pointer is still down: its release must not count as a click.\n swallowClick(view, false);\n options.onCancel();\n };\n\n const listen = { capture: true, signal: listeners.signal };\n view.addEventListener('pointermove', move, listen);\n view.addEventListener('pointerup', up, listen);\n view.addEventListener('pointercancel', cancel, listen);\n view.addEventListener('keydown', key, listen);\n}\n\n/**\n * Stops the click that follows the release of a drag, if one comes. It comes in\n * the same task as the release, so the guard goes once that task is over. After\n * Escape the pointer is still down (`released: false`): the guard waits for its release.\n */\nfunction swallowClick(view: Window, released = true): void {\n const stop = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const remove = () => {\n setTimeout(() => {\n view.removeEventListener('click', stop, { capture: true });\n });\n };\n view.addEventListener('click', stop, { capture: true, once: true });\n if (released) remove();\n else view.addEventListener('pointerup', remove, { capture: true, once: true });\n}\n","/**\n * One pointer drag on a resize handle. The pointer is captured, so the drag keeps\n * working outside the handle, and moves are batched to one `onWidth` call per\n * animation frame (TanStack's `onChange` mode: the width updates while dragging).\n *\n * `direction` is 1 in LTR and -1 in RTL: the handle sits on the inline-end edge,\n * so moving toward the inline end always grows the column.\n */\nexport function startResizeDrag(\n handle: HTMLElement,\n down: PointerEvent,\n startWidth: number,\n direction: 1 | -1,\n onWidth: (width: number) => void,\n): void {\n const startX = down.clientX;\n let frame = 0;\n let pending: number | undefined;\n\n const flush = () => {\n frame = 0;\n if (pending !== undefined) onWidth(pending);\n pending = undefined;\n };\n // A press and release without moving (or the clicks of a double-click) changes nothing.\n let moved = false;\n const move = (event: PointerEvent) => {\n moved ||= event.clientX !== startX;\n if (!moved) return;\n pending = startWidth + (event.clientX - startX) * direction;\n frame ||= requestAnimationFrame(flush);\n };\n const end = (event: PointerEvent) => {\n if (event.type === 'pointerup') move(event);\n if (frame) cancelAnimationFrame(frame);\n flush();\n handle.removeAttribute('data-active');\n handle.removeEventListener('pointermove', move);\n handle.removeEventListener('pointerup', end);\n handle.removeEventListener('pointercancel', end);\n if (handle.hasPointerCapture(event.pointerId)) handle.releasePointerCapture(event.pointerId);\n };\n\n down.preventDefault();\n try {\n handle.setPointerCapture(down.pointerId);\n } catch {\n // Synthetic or already released pointers can't be captured; moves on the handle still work.\n }\n handle.setAttribute('data-active', '');\n handle.addEventListener('pointermove', move);\n handle.addEventListener('pointerup', end);\n handle.addEventListener('pointercancel', end);\n}\n","import { createTableModel, type TableModel, type TableModelOptions } from '@argus-table/core';\nimport type { CellContent } from '../types.js';\n\n/**\n * Owns the table model (core's TanStack adapter). The element pushes its\n * properties in from `willUpdate`; render functions read `model`. It needs no\n * lifecycle hooks yet: the model is pull-based and owns no state.\n */\nexport class TableController<T> {\n readonly model: TableModel<T, CellContent>;\n\n constructor() {\n this.model = createTableModel<T, CellContent>({\n columns: [],\n data: [],\n getRowId: undefined,\n sorting: [],\n columnSizing: {},\n columnOrder: [],\n });\n }\n\n update(options: Partial<TableModelOptions<T, CellContent>>): void {\n this.model.update(options);\n }\n}\n","function getMeasurementKey(item) {\n return typeof item === \"object\" ? item.key : item;\n}\nfunction createLazyMeasurementsView(cache, flat) {\n const count = cache.length;\n return new Proxy(cache, {\n get(target, prop, receiver) {\n if (typeof prop === \"string\") {\n const c = prop.charCodeAt(0);\n if (c >= 48 && c <= 57) {\n const i = +prop;\n if (Number.isInteger(i) && i >= 0 && i < count) {\n let v = target[i];\n if (typeof v !== \"object\") {\n const s = flat[i * 2];\n v = target[i] = {\n index: i,\n key: v,\n start: s,\n size: flat[i * 2 + 1],\n end: s + flat[i * 2 + 1],\n lane: 0\n };\n }\n return v;\n }\n }\n if (prop === \"length\") return count;\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nexport {\n createLazyMeasurementsView,\n getMeasurementKey\n};\n//# sourceMappingURL=lazy-measurements.js.map\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a;\n const debugEnabled = process.env.NODE_ENV !== \"production\" && !!opts.key && !!((_a = opts.debug) == null ? void 0 : _a.call(opts));\n let depTime = 0;\n if (debugEnabled) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime = 0;\n if (debugEnabled) resultTime = Date.now();\n result = fn(...newDeps);\n if (debugEnabled) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return Object.assign(\n function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n },\n {\n // The handle is closure-local, so a caller that has already\n // unsubscribed has no way to stop a queued call. Teardown paths use\n // this to drop the pending invocation instead of letting it land.\n cancel: () => {\n targetWindow.clearTimeout(timeoutId);\n }\n }\n );\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { approxEqual } from \"./utils.js\";\nfunction classifyScrollEvent({\n offset,\n isScrolling,\n elementMax,\n holdOffset,\n scrollOffset,\n pendingWrite,\n clampedMaxAtWrite\n}) {\n var _a;\n if (isScrolling && pendingWrite === null && offset === scrollOffset) {\n return \"spurious\";\n }\n if (pendingWrite !== null && Math.abs(offset - pendingWrite.target) < 1.5) {\n return \"readBack\";\n }\n if (pendingWrite !== null && !pendingWrite.smooth && elementMax !== null && pendingWrite.target > elementMax + holdOffset + 0.5 && Math.abs(offset - (elementMax + holdOffset)) < 1.5) {\n return \"clampedReadBack\";\n }\n if (pendingWrite !== null && !pendingWrite.smooth && ((_a = pendingWrite.lowMaxes) == null ? void 0 : _a.some((max) => Math.abs(offset - max) < 1.5))) {\n return \"clampedReadBack\";\n }\n if (clampedMaxAtWrite !== null && Math.abs(offset - clampedMaxAtWrite) < 1.5) {\n return \"clampedEcho\";\n }\n return \"external\";\n}\nconst isAnimating = (phase) => phase === \"smooth\" || phase === \"smoothFinishing\";\nfunction externalRetiresCommand({\n kind,\n offset,\n command,\n target\n}) {\n return kind !== \"spurious\" && kind !== \"readBack\" && // Our own write, clamped (`clampedReadBack`, #1310): the command is not\n // retired by it, and reconcile retargets below the new max.\n kind !== \"clampedReadBack\" && (command == null ? void 0 : command.index) != null && // Nothing has been written for a command waiting for the tail; these\n // are the fling's events.\n command.phase !== \"queued\" && // A non-smooth write lands at once, so any other scroll event is the\n // user's, even before reconcile saw the target reached (the target may\n // keep moving, or iOS ignored the write under a finger). A write the\n // browser clamped because the sizer hasn't grown yet reads back at the\n // max, which is also where the fresh target clamps, so the check below\n // keeps it reconciling (#1294). While a smooth scroll's animation may\n // still report, its events look like a user's, so it yields only once it\n // has landed.\n !isAnimating(command.phase) && !approxEqual(offset, command.lastTargetOffset) && !approxEqual(offset, target()) && // A compensation write's clamped echo (#1258) keeps the command. The\n // order is deliberate, not tidiness: this clause stays after `target()`\n // (and `clampedReadBack` before it) because `target()` can rebuild the\n // measurements, so it must run for exactly the events it always did.\n kind !== \"clampedEcho\";\n}\nconst FLING_WINDOW_MS = 40;\nfunction flingSpedUp(samples) {\n const last = samples[samples.length - 1];\n if (last === void 0) return false;\n let j = samples.length - 2;\n while (j >= 0 && last.t - samples[j].t < FLING_WINDOW_MS) j--;\n if (j < 0) return false;\n const mid = samples[j];\n let k = j - 1;\n while (k >= 0 && mid.t - samples[k].t < FLING_WINDOW_MS) k--;\n if (k < 0) return false;\n const first = samples[k];\n const recent = (last.offset - mid.offset) / (last.t - mid.t);\n const before = (mid.offset - first.offset) / (mid.t - first.t);\n return recent * before >= 0 && Math.abs(recent) >= 2 * Math.abs(before) && Math.abs(recent) - Math.abs(before) >= 0.8;\n}\nfunction flingCaught(samples) {\n const last = samples[samples.length - 1];\n if (last === void 0) return false;\n let j = samples.length - 2;\n while (j >= 0 && last.t - samples[j].t < FLING_WINDOW_MS) j--;\n if (j < 0) return false;\n const from = samples[j];\n return Math.abs(last.offset - from.offset) / (last.t - from.t) >= 0.05;\n}\nexport {\n classifyScrollEvent,\n externalRetiresCommand,\n flingCaught,\n flingSpedUp\n};\n//# sourceMappingURL=scroll-classifier.js.map\n","let _isIOSResult;\nconst isIOSWebKit = () => {\n if (_isIOSResult !== void 0) return _isIOSResult;\n if (typeof navigator === \"undefined\") return _isIOSResult = false;\n if (/iP(hone|od|ad)/.test(navigator.userAgent)) return _isIOSResult = true;\n const mtp = navigator.maxTouchPoints;\n return _isIOSResult = navigator.platform === \"MacIntel\" && mtp !== void 0 && mtp > 0;\n};\nlet _iosMomentumOverridesWritesResult;\nconst iosMomentumOverridesWrites = () => {\n if (_iosMomentumOverridesWritesResult !== void 0) {\n return _iosMomentumOverridesWritesResult;\n }\n return _iosMomentumOverridesWritesResult = isIOSWebKit() && typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\" && CSS.supports(\"overflow-anchor: auto\");\n};\nconst momentumOverridesWrites = () => !isIOSWebKit() || iosMomentumOverridesWrites();\nconst _resetIOSDetectionForTests = () => {\n _isIOSResult = void 0;\n _iosMomentumOverridesWritesResult = void 0;\n};\nconst touchListenerOptions = {\n capture: true,\n passive: true\n};\nclass IosGesture {\n constructor(host) {\n this.host = host;\n this._touch = null;\n this.inMotion = () => this._touch !== null && this._touch.phase !== \"lateFling\";\n this.dragging = () => {\n var _a;\n return ((_a = this._touch) == null ? void 0 : _a.phase) === \"down\" && this._touch.moved;\n };\n this.tail = () => {\n var _a;\n return ((_a = this._touch) == null ? void 0 : _a.phase) === \"tail\" ? this._touch.moved ? \"fling\" : \"tap\" : null;\n };\n this.onScroll = ({\n isScrolling,\n ownReadBack,\n moved,\n external\n }) => {\n var _a, _b, _c;\n if (isScrolling && ((_a = this._touch) == null ? void 0 : _a.phase) === \"tail\") {\n this._openTail(this._touch.moved || !ownReadBack, false);\n } else if (((_b = this._touch) == null ? void 0 : _b.phase) === \"lateFling\") {\n if (this.host.now() > this._touch.until) {\n this._touch = null;\n } else if (external && isScrolling && moved) {\n this._openTail(true, false);\n }\n }\n if (!ownReadBack && isScrolling && moved && ((_c = this._touch) == null ? void 0 : _c.phase) === \"down\") {\n this._touch.moved = true;\n return true;\n }\n return false;\n };\n this.touchStart = () => {\n this.end();\n this._touch = { phase: \"down\", moved: false };\n };\n this.touchEnd = () => {\n var _a;\n const moved = ((_a = this._touch) == null ? void 0 : _a.phase) === \"down\" && this._touch.moved;\n this.end();\n this._openTail(moved, moved);\n };\n this.end = () => {\n var _a;\n const win = this.host.getWindow();\n if (((_a = this._touch) == null ? void 0 : _a.phase) === \"tail\" && win != null) {\n win.clearTimeout(this._touch.timerId);\n }\n this._touch = null;\n };\n this.listen = (target) => {\n const onTouchStart = () => this.touchStart();\n const onTouchEnd = () => this.touchEnd();\n target.addEventListener(\"touchstart\", onTouchStart, touchListenerOptions);\n target.addEventListener(\"touchend\", onTouchEnd, touchListenerOptions);\n target.addEventListener(\"touchcancel\", onTouchEnd, touchListenerOptions);\n return () => {\n target.removeEventListener(\n \"touchstart\",\n onTouchStart,\n touchListenerOptions\n );\n target.removeEventListener(\"touchend\", onTouchEnd, touchListenerOptions);\n target.removeEventListener(\n \"touchcancel\",\n onTouchEnd,\n touchListenerOptions\n );\n this.end();\n };\n };\n this._openTail = (moved, awaitingFling) => {\n const win = this.host.getWindow();\n if (win == null) return;\n this.end();\n const tail = {\n phase: \"tail\",\n moved,\n awaitingFling,\n // Only fires while this tail is current: `end` clears it otherwise.\n timerId: win.setTimeout(() => {\n if (this.host.tailStillMoving()) {\n this._openTail(tail.moved, tail.awaitingFling);\n return;\n }\n this._touch = tail.awaitingFling ? { phase: \"lateFling\", until: this.host.now() + 1e3 } : null;\n this.host.onTailClosed();\n }, 150)\n };\n this._touch = tail;\n };\n }\n get touch() {\n return this._touch;\n }\n}\nexport {\n IosGesture,\n _resetIOSDetectionForTests,\n iosMomentumOverridesWrites,\n isIOSWebKit,\n momentumOverridesWrites\n};\n//# sourceMappingURL=ios-gesture.js.map\n","import { createLazyMeasurementsView, getMeasurementKey } from \"./lazy-measurements.js\";\nimport { memo, approxEqual, notUndefined, debounce } from \"./utils.js\";\nimport { flingCaught, externalRetiresCommand, flingSpedUp, classifyScrollEvent } from \"./scroll-classifier.js\";\nimport { IosGesture, isIOSWebKit, momentumOverridesWrites } from \"./ios-gesture.js\";\nimport { _resetIOSDetectionForTests } from \"./ios-gesture.js\";\nconst getRect = (element) => {\n const { clientWidth, clientHeight } = element;\n return { width: clientWidth, height: clientHeight };\n};\nconst createFrameQueue = (targetWindow) => {\n const ids = /* @__PURE__ */ new Set();\n return {\n schedule: (fn) => {\n const id = targetWindow.requestAnimationFrame(() => {\n ids.delete(id);\n fn();\n });\n ids.add(id);\n },\n cancel: () => {\n ids.forEach((id) => targetWindow.cancelAnimationFrame(id));\n ids.clear();\n }\n };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const overscan = range.overscan * Math.max(range.lanes ?? 1, 1);\n const start = Math.max(range.startIndex - overscan, 0);\n const end = Math.min(range.endIndex + overscan, range.count - 1);\n const len = end - start + 1;\n const arr = new Array(len);\n for (let i = 0; i < len; i++) {\n arr[i] = start + i;\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const frames = createFrameQueue(targetWindow);\n const observer = new targetWindow.ResizeObserver(() => {\n const run = () => {\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? frames.schedule(run) : run();\n });\n observer.observe(element, { box: \"content-box\" });\n return () => {\n observer.unobserve(element);\n frames.cancel();\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeOffset = (instance, cb, readOffset) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n let offset = 0;\n const fallback = registerScrollendEvent ? null : debounce(\n targetWindow,\n () => cb(readOffset(element), false),\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = readOffset(element);\n fallback == null ? void 0 : fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n fallback == null ? void 0 : fallback.cancel();\n };\n};\nconst observeElementOffset = (instance, cb) => observeOffset(instance, cb, (el) => {\n const { horizontal, isRtl } = instance.options;\n return horizontal ? el.scrollLeft * (isRtl && -1 || 1) : el.scrollTop;\n});\nconst observeWindowOffset = (instance, cb) => observeOffset(\n instance,\n cb,\n (win) => instance.options.horizontal ? win.scrollX : win.scrollY\n);\nconst measureElement = (element, entry, instance) => {\n if (instance.options.useCachedMeasurements) {\n const index = instance.indexFromElement(element);\n const key = instance.options.getItemKey(index);\n return instance.itemSizeCache.get(key) ?? instance.options.estimateSize(index);\n }\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n if (!entry) {\n const index = instance.indexFromElement(element);\n const key = instance.options.getItemKey(index);\n const cachedSize = instance.itemSizeCache.get(key);\n if (cachedSize !== void 0) {\n return cachedSize;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst scrollWithAdjustments = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a;\n const { scrollElement, options } = instance;\n const adjustedOffset = offset + adjustments;\n const isRtlElement = options.horizontal && options.isRtl && scrollElement !== null && \"ownerDocument\" in scrollElement;\n (_a = scrollElement == null ? void 0 : scrollElement.scrollTo) == null ? void 0 : _a.call(scrollElement, {\n [options.horizontal ? \"left\" : \"top\"]: isRtlElement ? -adjustedOffset : adjustedOffset,\n behavior\n });\n};\nconst windowScroll = scrollWithAdjustments;\nconst elementScroll = scrollWithAdjustments;\nconst initialScrollPhase = (behavior, atTarget) => behavior === \"smooth\" ? atTarget ? \"smoothLanded\" : \"smooth\" : \"instant\";\nconst isSmoothScroll = (state) => (state == null ? void 0 : state.phase) === \"smooth\" || (state == null ? void 0 : state.phase) === \"smoothLanded\";\nfunction isAppendWithTrim(prevCount, nextCount, getPreviousKey, getNextKey) {\n if (nextCount === 0) return false;\n const firstKey = getNextKey(0);\n const removedKeys = /* @__PURE__ */ new Set();\n let removedCount = 0;\n while (removedCount < prevCount) {\n const key = getPreviousKey(removedCount);\n if (key === firstKey) break;\n removedKeys.add(key);\n removedCount++;\n }\n const retainedCount = prevCount - removedCount;\n if (retainedCount === 0 || retainedCount >= nextCount) return false;\n for (let i = 0; i < retainedCount; i++) {\n if (getNextKey(i) !== getPreviousKey(removedCount + i)) return false;\n }\n for (let i = retainedCount; i < nextCount; i++) {\n if (removedKeys.has(getNextKey(i))) return false;\n }\n return true;\n}\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.scrollState = null;\n this.measurementsCache = [];\n this._singleLaneMeasurements = null;\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.itemSizeCacheVersion = 0;\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMin = null;\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.pendingScrollAnchor = null;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this._holdOffset = 0;\n this._reportedOverscroll = false;\n this._iosGesture = new IosGesture({\n getWindow: () => this.targetWindow,\n now: () => this.now(),\n // The end of a fling can move less than a pixel per scroll event, so\n // events can stop for 150ms while the fling is still running (seen on\n // an iPhone, 27.0.1). A command waiting for it would then be written\n // into the fling and overridden. The element having moved since the\n // last event means it has not ended: wait again. Not while our own\n // write has yet to report: that moved it.\n tailStillMoving: () => {\n const state = this.scrollState;\n if ((state == null ? void 0 : state.phase) !== \"queued\" || this.pendingWrite !== null) {\n return false;\n }\n const now = this._readElementOffset();\n if (now === null || this._lastElementOffset === null || Math.abs(now - this._lastElementOffset) < 1) {\n return false;\n }\n this._lastElementOffset = now;\n state.samples = [...state.samples ?? [], { t: this.now(), offset: now }];\n return true;\n },\n onTailClosed: () => {\n const state = this.scrollState;\n if ((state == null ? void 0 : state.phase) === \"queued\" && flingCaught(state.samples ?? [])) {\n this.scrollState = null;\n }\n this._flushHoldIfReady(true);\n this._writeAwaitingCommand();\n this._retryClampedAdjustment();\n }\n });\n this._lastElementOffset = null;\n this.pendingWrite = null;\n this._clampedAdjustment = null;\n this.elementsCache = /* @__PURE__ */ new Map();\n this._resizeBatch = null;\n this.now = () => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();\n };\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n let _frames = null;\n let delivering = false;\n let observeQueued = false;\n const pendingObservations = /* @__PURE__ */ new Set();\n const get = () => {\n if (_ro) {\n return _ro;\n }\n const targetWindow = this.targetWindow;\n if (!targetWindow || !targetWindow.ResizeObserver) {\n return null;\n }\n const frames = _frames = createFrameQueue(targetWindow);\n return _ro = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const batch = { sync: false };\n this._resizeBatch = batch;\n try {\n entries.forEach(measureEntry);\n } finally {\n this._resizeBatch = null;\n if (batch.notify) {\n this.notify(batch.sync);\n this._noteClampMax();\n this._flushHoldIfReady(true);\n this._retryClampedAdjustment();\n this.measureElement(null);\n }\n }\n };\n if (this.options.useAnimationFrameWithResizeObserver) {\n frames.schedule(run);\n } else {\n delivering = true;\n try {\n run();\n } finally {\n delivering = false;\n }\n }\n });\n };\n const measureEntry = (entry) => {\n const node = entry.target;\n const index = this.indexFromElement(node);\n if (!node.isConnected) {\n this.observer.unobserve(node);\n for (const [cacheKey, cachedNode] of this.elementsCache) {\n if (cachedNode === node) {\n this.elementsCache.delete(cacheKey);\n break;\n }\n }\n return;\n }\n if (!this.isIndexInRange(index)) return;\n if (this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _frames == null ? void 0 : _frames.cancel();\n pendingObservations.clear();\n observeQueued = false;\n _ro = null;\n _frames = null;\n },\n observe: (target) => {\n const observer = get();\n if (!observer) return;\n if (!delivering) {\n observer.observe(target, { box: \"border-box\" });\n return;\n }\n pendingObservations.add(target);\n if (!observeQueued) {\n observeQueued = true;\n _frames == null ? void 0 : _frames.schedule(() => {\n observeQueued = false;\n pendingObservations.forEach((node) => {\n if (node.isConnected) _ro == null ? void 0 : _ro.observe(node, { box: \"border-box\" });\n });\n pendingObservations.clear();\n });\n }\n },\n unobserve: (target) => {\n var _a;\n pendingObservations.delete(target);\n (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n var _a;\n const merged = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n anchorTo: \"start\",\n followOnAppend: false,\n scrollEndThreshold: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n laneAssignmentMode: \"estimate\",\n useCachedMeasurements: false\n };\n for (const key in opts2) {\n const v = opts2[key];\n if (v !== void 0) merged[key] = v;\n }\n const prevOptions = this.options;\n let anchor = null;\n let followOnAppend = null;\n let edgeKeysChanged = false;\n if (prevOptions !== void 0 && prevOptions.enabled && merged.enabled && merged.anchorTo === \"end\" && this.scrollElement !== null) {\n const prevCount = prevOptions.count;\n const nextCount = merged.count;\n const measurements = this.getMeasurements();\n const previousItems = ((_a = this._singleLaneMeasurements) == null ? void 0 : _a.items) ?? measurements;\n const getPreviousKey = (index) => getMeasurementKey(previousItems[index]);\n const prevFirstKey = prevCount > 0 ? getPreviousKey(0) : null;\n const prevLastKey = prevCount > 0 ? getPreviousKey(prevCount - 1) : null;\n const didCountChange = nextCount !== prevCount;\n const didEdgeKeysChange = didCountChange || prevCount > 0 && nextCount > 0 && (merged.getItemKey(0) !== prevFirstKey || merged.getItemKey(nextCount - 1) !== prevLastKey);\n if (didEdgeKeysChange) {\n edgeKeysChanged = true;\n const item = prevCount > 0 ? this.getVirtualItemForOffset(this.getScrollOffset()) ?? measurements[0] : null;\n if (item) {\n anchor = [item.key, this.getScrollOffset() - item.start];\n }\n const behavior = merged.followOnAppend === true ? \"auto\" : merged.followOnAppend || null;\n if (behavior && nextCount > 0 && this.isAtEnd(prevOptions.scrollEndThreshold) && (prevCount === 0 || merged.getItemKey(nextCount - 1) !== prevLastKey)) {\n if (nextCount > prevCount || isAppendWithTrim(\n prevCount,\n nextCount,\n getPreviousKey,\n merged.getItemKey\n )) {\n followOnAppend = behavior;\n }\n }\n }\n }\n this.options = merged;\n if (edgeKeysChanged) {\n this.pendingMin = 0;\n this.itemSizeCacheVersion++;\n }\n let anchorDelta = null;\n if (anchor && this.scrollOffset !== null && !this._awaitingCommandReadBack()) {\n const [anchorKey, anchorOffset] = anchor;\n const newMeasurements = this.getMeasurements();\n const { count, getItemKey } = this.options;\n let idx = 0;\n while (idx < count && getItemKey(idx) !== anchorKey) {\n idx++;\n }\n if (idx < count) {\n const anchorItem = newMeasurements[idx];\n if (anchorItem) {\n const newOffset = Math.max(0, anchorItem.start + anchorOffset);\n if (!followOnAppend && newOffset !== this.scrollOffset) {\n anchorDelta = newOffset - this.scrollOffset;\n this.scrollOffset = newOffset;\n }\n }\n }\n }\n if (followOnAppend) {\n this.pendingScrollAnchor = { kind: \"follow\", behavior: followOnAppend };\n } else if (anchorDelta !== null) {\n if (this._canWriteScroll()) {\n this.pendingScrollAnchor = { kind: \"anchor\", delta: anchorDelta };\n } else {\n this._holdOffset += anchorDelta;\n this._followOffsetTarget(anchorDelta);\n }\n }\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n var _a;\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n (_a = this._momentumStop) == null ? void 0 : _a.restore();\n this._momentumStop = null;\n this.isScrolling = false;\n this.scrollDirection = null;\n this._holdOffset = 0;\n this._reportedOverscroll = false;\n this._clampedAdjustment = null;\n this.pendingWrite = null;\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n var _a2, _b, _c, _d;\n const elementMax = isScrolling ? this._elementMaxScrollOffset() : null;\n const wasOverscrolled = this._reportedOverscroll;\n this._reportedOverscroll = offset < 0 || elementMax !== null && offset > elementMax + 1;\n const elementOffset = offset;\n this._lastElementOffset = elementOffset;\n offset = this._toLayoutOffset(offset);\n const kind = this._classifyScrollEvent(\n offset,\n isScrolling,\n elementMax\n );\n if (kind === \"spurious\") return;\n if (kind === \"readBack\") {\n offset = this.pendingWrite.target;\n } else if (kind === \"clampedReadBack\" && ((_a2 = this.scrollState) == null ? void 0 : _a2.index) != null && // Not `elementMax`: an adapter can report the read-back at rest.\n offset < this.getMaxScrollOffset() - 1.5) {\n this.scrollState.lastTargetOffset = offset;\n } else if (externalRetiresCommand({\n kind,\n offset,\n command: this.scrollState,\n target: () => this.getScrollStateTarget(this.scrollState)\n })) {\n this.scrollState = null;\n }\n this.pendingWrite = null;\n if (this._clampedAdjustment !== null && Math.abs(offset - this._clampedAdjustment.maxAtWrite) >= 1.5) {\n this._clampedAdjustment = null;\n }\n const prevOffset = this.getScrollOffset();\n const prevDirection = this.scrollDirection;\n this.scrollDirection = isScrolling ? prevOffset === offset ? this.scrollDirection : prevOffset < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n const queued = this.scrollState;\n if ((queued == null ? void 0 : queued.phase) === \"queued\" && kind === \"external\" && isScrolling) {\n if (wasOverscrolled || this._reportedOverscroll) {\n queued.samples = [];\n } else {\n const t = this.now();\n queued.samples = [\n ...(queued.samples ?? []).filter(\n (sample) => t - sample.t <= 200\n ),\n { t, offset: elementOffset }\n ];\n if (prevDirection !== null && this.scrollDirection !== prevDirection || flingSpedUp(queued.samples)) {\n this.scrollState = null;\n }\n }\n }\n if (this._iosGesture.onScroll({\n isScrolling,\n ownReadBack: kind === \"readBack\",\n moved: offset !== prevOffset,\n // Neither our write's read-back nor a frame of our smooth\n // animation: the user or a fling moved it.\n external: kind === \"external\" && ((_b = this.scrollState) == null ? void 0 : _b.phase) !== \"smooth\" && ((_c = this.scrollState) == null ? void 0 : _c.phase) !== \"smoothFinishing\"\n }) && // The user scrolls: a command still waiting for the tail is\n // theirs to override, like a written one would be.\n ((_d = this.scrollState) == null ? void 0 : _d.phase) === \"queued\") {\n this.scrollState = null;\n }\n this._flushHoldIfReady(true);\n if (this.scrollState) {\n this.scheduleScrollReconcile();\n }\n this.maybeNotify();\n })\n );\n if (\"addEventListener\" in this.scrollElement) {\n this.unsubs.push(\n this._iosGesture.listen(this.scrollElement)\n );\n }\n this._scrollToOffset(this.getScrollOffset());\n }\n this._noteClampMax();\n const anchor = this.pendingScrollAnchor;\n this.pendingScrollAnchor = null;\n if (anchor && this.scrollElement && this.options.enabled) {\n if (anchor.kind === \"anchor\") {\n if (!this._canWriteScroll()) {\n this._holdOffset += anchor.delta;\n this._followOffsetTarget(anchor.delta);\n this.notify(false);\n } else if (isSmoothScroll(this.scrollState) && !approxEqual(\n this.getScrollOffset() - anchor.delta,\n this.scrollState.lastTargetOffset\n )) ;\n else {\n this._followOffsetTarget(anchor.delta);\n this._scrollToOffset(this.getScrollOffset());\n }\n } else {\n this.scrollToEnd({ behavior: anchor.behavior });\n }\n }\n this._flushHoldIfReady(false);\n this._retryClampedAdjustment();\n };\n this._classifyScrollEvent = (offset, isScrolling, elementMax) => {\n var _a;\n return classifyScrollEvent({\n offset,\n isScrolling,\n elementMax,\n holdOffset: this._holdOffset,\n scrollOffset: this.scrollOffset,\n pendingWrite: this.pendingWrite,\n clampedMaxAtWrite: ((_a = this._clampedAdjustment) == null ? void 0 : _a.maxAtWrite) ?? null\n });\n };\n this._retryClampedAdjustment = () => {\n if (this._clampedAdjustment === null || !this.scrollElement || !this.options.enabled || !this._canWriteScroll()) {\n return;\n }\n const { target, maxAtWrite } = this._clampedAdjustment;\n const max = this.getMaxScrollOffset();\n if (max > maxAtWrite + 0.5) {\n this._clampedAdjustment = target > max + 0.5 ? { target, maxAtWrite: max } : null;\n this._scrollToOffset(target);\n }\n };\n this._writeAwaitingCommand = () => {\n const state = this.scrollState;\n if (state === null || state.phase !== \"queued\") return;\n const { behavior } = state;\n this.getMeasurements();\n const offset = this.getScrollStateTarget(state);\n state.lastTargetOffset = offset;\n this._clampedAdjustment = null;\n state.phase = initialScrollPhase(\n behavior,\n state.index != null && approxEqual(offset, this.getScrollOffset())\n );\n this._scrollToOffset(offset, { behavior });\n this.scheduleScrollReconcile();\n };\n this._readElementOffset = () => {\n const el = this.scrollElement;\n if (el == null) return null;\n const { horizontal, isRtl } = this.options;\n if (typeof el.scrollTop === \"number\") {\n return horizontal ? el.scrollLeft * (isRtl && -1 || 1) : el.scrollTop;\n }\n if (typeof el.scrollY === \"number\") {\n return horizontal ? el.scrollX : el.scrollY;\n }\n return null;\n };\n this._canWriteScroll = () => !(isIOSWebKit() && this._iosGesture.inMotion()) && !this._reportedOverscroll;\n this._flushHoldIfReady = (sync) => {\n var _a;\n if (this._holdOffset === 0) return;\n if (!this.scrollElement || !this.options.enabled) return;\n if (!this._canWriteScroll()) return;\n if (((_a = this.scrollState) == null ? void 0 : _a.phase) === \"smooth\") return;\n this._holdOffset = 0;\n if (this.scrollOffset !== null && this.scrollOffset < 0) {\n this.scrollOffset = 0;\n }\n this.notify(sync);\n const target = this.getCommandWrittenOffset() ?? this.getScrollOffset();\n this._clampedAdjustment = this._clampedBy(target);\n this._scrollToOffset(target);\n };\n this.rafId = null;\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes,\n this.options.laneAssignmentMode,\n this.options.gap\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode, gap) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMin = null;\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap\n };\n },\n {\n key: false\n }\n );\n this.isIndexInRange = (index) => index >= 0 && index < this.options.count;\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCacheVersion],\n ({\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode,\n gap\n }, _itemSizeCacheVersion) => {\n var _a;\n const itemSizeCache = this.itemSizeCache;\n if (!enabled) {\n this.measurementsCache = [];\n this._singleLaneMeasurements = null;\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this._singleLaneMeasurements = null;\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMin = null;\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMin ?? 0;\n this.pendingMin = null;\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n if (lanes === 1) {\n const need = count * 2;\n let flat = (_a = this._singleLaneMeasurements) == null ? void 0 : _a.flat;\n if (!flat || flat.length < need) {\n const next = new Float64Array(need);\n if (flat && min > 0) next.set(flat.subarray(0, min * 2));\n flat = next;\n }\n const items = min === 0 ? new Array(count) : this._singleLaneMeasurements.items.slice();\n let runningStart;\n if (min === 0) {\n runningStart = paddingStart + scrollMargin;\n } else {\n const prevIdx = min - 1;\n runningStart = flat[prevIdx * 2] + flat[prevIdx * 2 + 1] + gap;\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n items[i] = key;\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n flat[i * 2] = runningStart;\n flat[i * 2 + 1] = size;\n runningStart += size + gap;\n }\n this._singleLaneMeasurements = { flat, items };\n const view = createLazyMeasurementsView(items, flat);\n this.measurementsCache = view;\n return view;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n const laneEnds = new Float64Array(lanes);\n let filledLanes = 0;\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n if (laneLastIndex[item.lane] === void 0) filledLanes++;\n laneLastIndex[item.lane] = m;\n laneEnds[item.lane] = item.end;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n const shouldCacheLane = laneAssignmentMode === \"estimate\" || itemSizeCache.has(key);\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + gap : paddingStart + scrollMargin;\n } else if (filledLanes === lanes) {\n let bestLane = 0;\n let bestEnd = laneEnds[0];\n let bestIdx = laneLastIndex[0];\n for (let l = 1; l < lanes; l++) {\n const e = laneEnds[l];\n if (e < bestEnd || e === bestEnd && laneLastIndex[l] < bestIdx) {\n bestLane = l;\n bestEnd = e;\n bestIdx = laneLastIndex[l];\n }\n }\n lane = bestLane;\n start = bestEnd + gap;\n if (shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n } else {\n lane = i % this.options.lanes;\n start = paddingStart + scrollMargin;\n if (shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n if (laneLastIndex[lane] === void 0) filledLanes++;\n laneLastIndex[lane] = i;\n laneEnds[lane] = end;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes,\n // scrollOffset is measured in the scroll element and the layout total\n // from the list start, so the list ends scrollMargin further down.\n this._getLayoutTotalSize() + this.options.scrollMargin\n ],\n (measurements, outerSize, scrollOffset, lanes, listEnd) => {\n if (measurements.length === 0 || outerSize === 0) {\n this.range = null;\n return null;\n }\n const maxScrollOffset = Math.max(listEnd - outerSize, 0);\n this.range = calculateRangeImpl(\n measurements,\n outerSize,\n Math.min(scrollOffset, maxScrollOffset),\n lanes,\n // Pass the typed array so binary search + forward-walk can read\n // start/end directly from Float64Array, skipping the Proxy traps.\n lanes === 1 && this._singleLaneMeasurements !== null ? this._singleLaneMeasurements.flat : null\n );\n return this.range;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex,\n this.options.lanes\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex, lanes) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count,\n lanes\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this.shouldMeasureDuringScroll = (index) => {\n var _a;\n if (!isSmoothScroll(this.scrollState)) {\n return true;\n }\n const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);\n if (scrollIndex !== void 0 && this.range) {\n const bufferSize = Math.max(\n this.options.overscan,\n Math.ceil((this.range.endIndex - this.range.startIndex) / 2)\n );\n const minIndex = Math.max(0, scrollIndex - bufferSize);\n const maxIndex = Math.min(\n this.options.count - 1,\n scrollIndex + bufferSize\n );\n return index >= minIndex && index <= maxIndex;\n }\n return true;\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key2) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key2);\n }\n });\n return;\n }\n const index = this.indexFromElement(node);\n if (!this.isIndexInRange(index)) return;\n const key = this.options.getItemKey(index);\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected && (!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, void 0, this));\n }\n };\n this.resizeItem = (index, size) => {\n var _a, _b, _c;\n if (!this.isIndexInRange(index)) return;\n if ((_a = this._resizeBatch) == null ? void 0 : _a.sync) this.getMeasurements();\n let cachedSize;\n let itemStart;\n let key;\n const flat = (_b = this._singleLaneMeasurements) == null ? void 0 : _b.flat;\n if (this.options.lanes === 1 && flat != null) {\n key = this.options.getItemKey(index);\n itemStart = flat[index * 2];\n cachedSize = flat[index * 2 + 1];\n } else {\n const item = this.measurementsCache[index];\n if (!item) return;\n key = item.key;\n itemStart = item.start;\n cachedSize = item.size;\n }\n const itemSize = this.itemSizeCache.get(key) ?? cachedSize;\n const delta = size - itemSize;\n if (delta !== 0) {\n const wasAtEnd = this.options.anchorTo === \"end\" && !isSmoothScroll(this.scrollState) && this.getVirtualDistanceFromEnd() <= this.options.scrollEndThreshold;\n const prevTotalSize = wasAtEnd ? this._getLayoutTotalSize() : 0;\n const scrollOffset = this.getScrollOffset();\n const isFirstMeasure = !this.itemSizeCache.has(key);\n const defaultShouldAdjust = isFirstMeasure ? (\n // First measurement: compensate any item whose top sits above the\n // fold — the estimate→actual delta must be corrected regardless of\n // scroll direction, since the whole estimated block was above it.\n itemStart < scrollOffset\n ) : (\n // Re-measurement: only compensate an item that is ENTIRELY above the\n // fold. An item that merely *spans* the fold (top above, bottom\n // below — e.g. a streaming chat message growing at its bottom)\n // changes size *below* the anchor point, so shifting scrollTop by the\n // delta would drag the viewport downward on every growth (#1218).\n // Also skip during backward scroll to avoid the \"items jump while\n // scrolling up\" cascade.\n itemStart + itemSize <= scrollOffset && this.scrollDirection !== \"backward\"\n );\n const shouldAdjustScroll = !isSmoothScroll(this.scrollState) && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(\n // The callback expects a VirtualItem; build one lazily only\n // when the consumer actually supplied a custom predicate.\n this.measurementsCache[index] ?? {\n index,\n key,\n start: itemStart,\n size: cachedSize,\n end: itemStart + cachedSize,\n lane: 0\n },\n delta,\n this\n ) : defaultShouldAdjust);\n if (this.pendingMin === null || index < this.pendingMin) {\n this.pendingMin = index;\n }\n this.itemSizeCache.set(key, size);\n this.itemSizeCacheVersion++;\n let adjustedSync = false;\n if (!this._awaitingCommandReadBack()) {\n if (wasAtEnd) {\n adjustedSync = this.applyScrollAdjustment(\n this._getLayoutTotalSize() - prevTotalSize\n );\n } else if (shouldAdjustScroll) {\n adjustedSync = this.applyScrollAdjustment(delta);\n }\n }\n if (this._resizeBatch) {\n this._resizeBatch.notify = true;\n (_c = this._resizeBatch).sync || (_c.sync = adjustedSync);\n return;\n }\n this.notify(adjustedSync);\n this._noteClampMax();\n this._flushHoldIfReady(true);\n this._retryClampedAdjustment();\n }\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements(), this._holdOffset],\n (indexes, measurements, hold) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(\n hold === 0 ? measurement : {\n ...measurement,\n start: measurement.start - hold,\n end: measurement.end - hold\n }\n );\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n var _a;\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n const flat = (_a = this._singleLaneMeasurements) == null ? void 0 : _a.flat;\n const useFlat = this.options.lanes === 1 && flat != null;\n const idx = findNearestBinarySearch(\n 0,\n measurements.length - 1,\n useFlat ? (i) => flat[i * 2] : (i) => notUndefined(measurements[i]).start,\n offset\n );\n return notUndefined(measurements[idx]);\n };\n this._noteClampMax = () => {\n if (!this._awaitingCommandReadBack()) return;\n const elementMax = this._elementMaxScrollOffset();\n if (elementMax === null) return;\n const write = this.pendingWrite;\n const max = Math.max(elementMax, 0) + this._holdOffset;\n if (max >= write.target) return;\n const lowMaxes = write.lowMaxes ?? (write.lowMaxes = []);\n if (lowMaxes[lowMaxes.length - 1] !== max) lowMaxes.push(max);\n };\n this.getMaxScrollOffset = () => (this._elementMaxScrollOffset() ?? 0) + this._holdOffset;\n this._toLayoutOffset = (elementOffset) => {\n var _a;\n let offset = elementOffset + this._holdOffset;\n if (((_a = this.pendingScrollAnchor) == null ? void 0 : _a.kind) === \"anchor\") {\n offset += this.pendingScrollAnchor.delta;\n }\n return offset;\n };\n this._elementMaxScrollOffset = () => {\n const el = this.scrollElement;\n if (el === null) return null;\n if (\"scrollHeight\" in el) {\n return this.options.horizontal ? el.scrollWidth - el.clientWidth : el.scrollHeight - el.clientHeight;\n }\n if (\"document\" in el) {\n const doc = el.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - el.innerWidth : doc.scrollHeight - el.innerHeight;\n }\n return null;\n };\n this._momentumStop = null;\n this._stopMomentum = (done) => {\n const el = this.scrollElement;\n const win = this.targetWindow;\n if (el === null || win === null) return;\n const scroller = \"document\" in el ? el.document.scrollingElement : el;\n if (!(scroller == null ? void 0 : scroller.style)) return;\n if (this._momentumStop) {\n this._momentumStop.done = done;\n return;\n }\n const { style } = scroller;\n const property = this.options.horizontal ? \"overflow-x\" : \"overflow-y\";\n const value = style.getPropertyValue(property);\n const priority = style.getPropertyPriority(property);\n const crossSize = () => this.options.horizontal ? scroller.clientHeight : scroller.clientWidth;\n const crossSizeBefore = crossSize();\n style.setProperty(property, \"hidden\", \"important\");\n if (crossSize() !== crossSizeBefore) {\n style.setProperty(property, value, priority);\n return;\n }\n const stop = {\n // False when the app replaced the hidden value: the fling may not\n // have stopped.\n restore: () => {\n if (style.getPropertyValue(property) !== \"hidden\" || style.getPropertyPriority(property) !== \"important\") {\n return false;\n }\n style.setProperty(property, value, priority);\n return true;\n },\n done\n };\n this._momentumStop = stop;\n win.requestAnimationFrame(\n () => win.requestAnimationFrame(() => {\n if (this._momentumStop !== stop) return;\n this._momentumStop = null;\n if (stop.restore()) stop.done();\n })\n );\n };\n this._clampedBy = (target) => {\n const elementMax = this._elementMaxScrollOffset();\n if (elementMax === null) return null;\n const maxAtWrite = elementMax + this._holdOffset;\n return target > maxAtWrite + 0.5 ? { target, maxAtWrite } : null;\n };\n this.getVirtualDistanceFromEnd = () => {\n return Math.max(\n this._getLayoutTotalSize() + this.options.scrollMargin - this.getSize() - this.getScrollOffset(),\n 0\n );\n };\n this.getDistanceFromEnd = () => {\n return Math.max(this.getMaxScrollOffset() - this.getScrollOffset(), 0);\n };\n this.isAtEnd = (threshold = this.options.scrollEndThreshold) => {\n return this.getDistanceFromEnd() <= threshold;\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n const item = this.getMeasurements()[index];\n if (!item) return;\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n const maxOffset = this.getMaxScrollOffset();\n const toOffset2 = maxOffset - this.options.paddingEnd + this.options.scrollPaddingEnd;\n return [Math.max(Math.min(toOffset2, maxOffset), 0), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.scrollToOffset = (toOffset, { align = \"start\", behavior = \"auto\" } = {}) => {\n this._startScroll(\n { index: null, align },\n this.getOffsetForAlignment(toOffset, align),\n behavior,\n \"absolute\"\n );\n };\n this.scrollToIndex = (index, {\n align: initialAlign = \"auto\",\n behavior = \"auto\"\n } = {}) => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const offsetInfo = this.getOffsetForIndex(index, initialAlign);\n if (!offsetInfo) return;\n const [offset, align] = offsetInfo;\n this._startScroll({ index, align }, offset, behavior, \"absolute\");\n };\n this.scrollBy = (delta, { behavior = \"auto\" } = {}) => {\n const offset = this.getOffsetForAlignment(\n (this.getCommandWrittenOffset() ?? this.getScrollOffset()) + delta,\n \"start\"\n );\n this._startScroll(\n { index: null, align: \"start\" },\n offset,\n behavior,\n \"relative\"\n );\n };\n this.scrollToEnd = ({ behavior = \"auto\" } = {}) => {\n if (this.options.count > 0) {\n this._startScroll(\n { index: this.options.count - 1, align: \"end\", toEnd: true },\n Math.max(this.getMaxScrollOffset(), 0),\n behavior,\n \"absolute\"\n );\n return;\n }\n this.scrollToOffset(Math.max(this.getTotalSize() - this.getSize(), 0), {\n behavior\n });\n };\n this.cancelScroll = () => {\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n };\n this.getTotalSize = () => Math.max(this._getLayoutTotalSize() - this._holdOffset, 0);\n this._getLayoutTotalSize = () => {\n var _a, _b;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n const lastIdx = measurements.length - 1;\n const flat = (_a = this._singleLaneMeasurements) == null ? void 0 : _a.flat;\n if (flat != null) {\n end = flat[lastIdx * 2] + flat[lastIdx * 2 + 1];\n } else {\n end = ((_b = measurements[lastIdx]) == null ? void 0 : _b.end) ?? 0;\n }\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this.takeSnapshot = () => {\n const snapshot = [];\n if (this.itemSizeCache.size === 0) return snapshot;\n const m = this.getMeasurements();\n for (const item of m) {\n if (item && this.itemSizeCache.has(item.key)) {\n snapshot.push({\n index: item.index,\n key: item.key,\n start: item.start,\n size: item.size,\n end: item.end,\n lane: item.lane\n });\n }\n }\n return snapshot;\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n } = {}) => {\n const write = {\n target: offset + (adjustments ?? 0),\n smooth: behavior === \"smooth\"\n };\n this.pendingWrite = write;\n this.options.scrollToFn(\n offset - this._holdOffset,\n { behavior, adjustments },\n this\n );\n return write;\n };\n this.getCommandWrittenOffset = () => this.scrollState !== null && this.pendingWrite !== null && !this.pendingWrite.smooth ? this.pendingWrite.target : null;\n this._awaitingCommandReadBack = () => {\n const writtenOffset = this.getCommandWrittenOffset();\n return !(isIOSWebKit() && this._iosGesture.dragging()) && writtenOffset !== null && !approxEqual(writtenOffset, this.getScrollOffset());\n };\n this._followOffsetTarget = (delta) => {\n if (this.scrollState !== null && this.scrollState.index == null) {\n this.scrollState.lastTargetOffset += delta;\n }\n };\n this.measure = () => {\n this.pendingMin = null;\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.itemSizeCacheVersion++;\n this.notify(false);\n };\n this.setOptions(opts);\n }\n /**\n * @deprecated Always 0: a scroll correction is folded into `scrollOffset`\n * at once, so there is never an outstanding adjustment to add to it. Read\n * `scrollOffset` alone.\n */\n get scrollAdjustments() {\n return 0;\n }\n // Returns `true` when it performed a synchronous `scrollTop` write this\n // tick, `false` when the delta was zero or the write was deferred (iOS).\n // `resizeItem` uses that to decide whether the follow-up `notify` must be\n // synchronous so the grown transforms commit in the same paint (#1227).\n applyScrollAdjustment(delta, behavior) {\n if (delta === 0) return false;\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._followOffsetTarget(delta);\n if (!this._canWriteScroll()) {\n this._holdOffset += delta;\n if (this.scrollOffset !== null) this.scrollOffset += delta;\n return true;\n } else {\n const offset = this.getScrollOffset();\n this._clampedAdjustment = this._clampedBy(offset + delta);\n const write = this._scrollToOffset(offset, {\n adjustments: delta,\n behavior\n });\n if (this.scrollOffset !== null) {\n if (this.pendingWrite === write) this.scrollOffset += delta;\n if (this.scrollOffset < 0) this.scrollOffset = 0;\n }\n return true;\n }\n }\n scheduleScrollReconcile() {\n if (!this.targetWindow) {\n this.scrollState = null;\n return;\n }\n if (this.rafId != null) return;\n this.rafId = this.targetWindow.requestAnimationFrame(() => {\n this.rafId = null;\n this.reconcileScroll();\n });\n }\n getScrollStateTarget(state) {\n const offsetInfo = state.toEnd ? [Math.max(this.getMaxScrollOffset(), 0)] : state.index != null ? this.getOffsetForIndex(state.index, state.align) : void 0;\n return offsetInfo ? offsetInfo[0] : state.lastTargetOffset;\n }\n reconcileScroll() {\n if (!this.scrollState) return;\n const el = this.scrollElement;\n if (!el) return;\n const MAX_RECONCILE_MS = 5e3;\n if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {\n this.scrollState = null;\n return;\n }\n if (this.scrollState.phase === \"queued\") {\n this.scheduleScrollReconcile();\n return;\n }\n this.getMeasurements();\n const targetOffset = this.getScrollStateTarget(this.scrollState);\n const STABLE_FRAMES = this.scrollState.index == null ? 1 : this.options.useAnimationFrameWithResizeObserver ? 3 : 2;\n const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;\n if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {\n if (this.scrollState.phase === \"smooth\") {\n this.scrollState.phase = \"smoothLanded\";\n } else if (this.scrollState.phase === \"smoothFinishing\") {\n this.scrollState.phase = \"instant\";\n }\n this.scrollState.stableFrames++;\n if (this.scrollState.stableFrames >= STABLE_FRAMES) {\n if (this.getScrollOffset() !== targetOffset) {\n this._scrollToOffset(targetOffset, { behavior: \"auto\" });\n }\n this.scrollState = null;\n return;\n }\n } else {\n this.scrollState.stableFrames = 0;\n if (targetChanged) {\n const viewport = this.getSize() || 600;\n const distance = Math.abs(targetOffset - this.getScrollOffset());\n const keepSmooth = isSmoothScroll(this.scrollState) && distance > viewport;\n this.scrollState.lastTargetOffset = targetOffset;\n if (keepSmooth) {\n this.scrollState.phase = \"smooth\";\n } else if (this.scrollState.phase === \"smooth\") {\n this.scrollState.phase = \"smoothFinishing\";\n } else if (this.scrollState.phase === \"smoothLanded\") {\n this.scrollState.phase = \"instant\";\n }\n this._scrollToOffset(targetOffset, {\n behavior: keepSmooth ? \"smooth\" : \"auto\"\n });\n }\n }\n this.scheduleScrollReconcile();\n }\n // Every scroll command starts here: it becomes the in-flight command,\n // writes its first target and leaves reconcile to retarget and retire it.\n //\n // Targets are layout offsets. A held correction is not dropped by a\n // command: the write lands the element `_holdOffset` short of the target,\n // under the rows exposed shifted by the same amount, and the flush moves\n // both together once a write is possible.\n //\n // An index or end target that is already at its offset starts a smooth\n // scroll as landed; an offset target never does, so its first scroll\n // event is read as the user's (see the scroll handler in `_willUpdate`).\n _startScroll(target, offset, behavior, kind) {\n this.pendingScrollAnchor = null;\n this._clampedAdjustment = null;\n const tail = this._iosGesture.tail();\n if (kind === \"absolute\" && tail !== null) {\n if (tail === \"fling\" && momentumOverridesWrites()) {\n this._stopMomentum(() => {\n const state = this.scrollState;\n if ((state == null ? void 0 : state.phase) !== \"queued\" || // A finger came down: it owns the scroll until it lifts.\n this._iosGesture.tail() !== \"fling\" || // In a bounce WebKit can drop the write (#1287): the tail\n // decides, as without the stop. (Not `flingCaught`: our stop\n // also ends the fling at speed, so a slow frame would read as\n // a catch and the tail would drop the command.)\n this._reportedOverscroll) {\n return;\n }\n this._iosGesture.end();\n this._flushHoldIfReady(true);\n this._writeAwaitingCommand();\n });\n this.scrollState = {\n ...target,\n startedAt: this.now(),\n lastTargetOffset: offset,\n stableFrames: 0,\n phase: \"queued\",\n behavior,\n samples: []\n };\n this.scheduleScrollReconcile();\n return;\n }\n this._iosGesture.end();\n }\n this.scrollState = {\n ...target,\n startedAt: this.now(),\n lastTargetOffset: offset,\n stableFrames: 0,\n behavior,\n phase: initialScrollPhase(\n behavior,\n target.index != null && approxEqual(offset, this.getScrollOffset())\n )\n };\n this._scrollToOffset(offset, { behavior });\n this.scheduleScrollReconcile();\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction findNearestBinarySearchFlat(flat, high, value) {\n let low = 0;\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = flat[middle * 2];\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n return low > 0 ? low - 1 : 0;\n}\nfunction calculateRangeImpl(measurements, outerSize, scrollOffset, lanes, flat) {\n const lastIndex = measurements.length - 1;\n if (measurements.length <= lanes) {\n return { startIndex: 0, endIndex: lastIndex };\n }\n if (lanes === 1 && flat !== null) {\n const startIndex2 = findNearestBinarySearchFlat(\n flat,\n lastIndex,\n scrollOffset\n );\n let endIndex2 = startIndex2;\n const limit = scrollOffset + outerSize;\n while (endIndex2 < lastIndex && flat[endIndex2 * 2] + flat[endIndex2 * 2 + 1] < limit) {\n endIndex2++;\n }\n return { startIndex: startIndex2, endIndex: endIndex2 };\n }\n const getStart = (index) => measurements[index].start;\n let startIndex = findNearestBinarySearch(0, lastIndex, getStart, scrollOffset);\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n _resetIOSDetectionForTests,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect, Virtualizer } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nclass VirtualizerControllerBase {\n constructor(host, options) {\n this.cleanup = () => {\n };\n this.host = host;\n this.options = { ...options };\n this.virtualizer = new Virtualizer(this.resolveOptions(this.options));\n this.host.addController(this);\n }\n getVirtualizer() {\n return this.virtualizer;\n }\n /**\n * Merge a partial options update into the options this controller already\n * holds, push them to the virtualizer, and request a host update. Lit folds\n * a request made from `willUpdate` into the update already in progress.\n *\n * Keys set to `undefined` are ignored, matching core `setOptions`, so a\n * partial update cannot wipe an option stored earlier. Defaults supplied by\n * `VirtualizerController` / `WindowVirtualizerController` stay in place\n * unless a later call replaces them.\n */\n setOptions(options) {\n if (!this.applyOptions(options)) return;\n this.virtualizer.setOptions(this.resolveOptions(this.options));\n this.virtualizer._willUpdate();\n this.host.requestUpdate();\n }\n hostConnected() {\n this.cleanup = this.virtualizer._didMount();\n this.virtualizer._willUpdate();\n this.host.requestUpdate();\n }\n hostUpdated() {\n this.virtualizer._willUpdate();\n }\n hostDisconnected() {\n this.cleanup();\n }\n applyOptions(partial) {\n const next = {\n ...this.options\n };\n let changed = false;\n for (const key in partial) {\n if (!Object.prototype.hasOwnProperty.call(partial, key)) continue;\n const value = partial[key];\n if (value === void 0) continue;\n if (!Object.is(next[key], value)) {\n changed = true;\n Object.assign(next, { [key]: value });\n }\n }\n if (changed) this.options = next;\n return changed;\n }\n resolveOptions(options) {\n return {\n ...options,\n onChange: (instance, sync) => {\n var _a;\n this.host.updateComplete.then(() => this.host.requestUpdate());\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance, sync);\n }\n };\n }\n}\nclass VirtualizerController extends VirtualizerControllerBase {\n constructor(host, options) {\n super(host, {\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n }\n}\nclass WindowVirtualizerController extends VirtualizerControllerBase {\n constructor(host, options) {\n super(host, {\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n }\n}\nexport {\n VirtualizerController,\n WindowVirtualizerController\n};\n//# sourceMappingURL=index.js.map\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { VirtualizerController } from '@tanstack/lit-virtual';\nimport { RowPool, ScrollScale, maxVisibleRows, steadyWindow } from '@argus-table/core';\n\n/** A rendered body row: its pool slot, its index in the row model and its offset. */\nexport interface WindowRow {\n slot: number;\n index: number;\n /** Offset in the rendered body, in px (scaled bodies: relative to the scroll position). */\n start: number;\n}\n\nexport interface VirtualWindow {\n /** Rendered rows, in pool order (ADR 0001 addendum). */\n rows: WindowRow[];\n /** Rendered height of the body in px: all rows, or the cap. */\n totalSize: number;\n /** Visible rows, without overscan; `null` before the first layout. */\n range: { start: number; end: number } | null;\n}\n\nexport interface VirtualConfig {\n count: number;\n rowHeight: number;\n overscan: number;\n /** Row id at an index of the row model; pool slots follow row ids. */\n rowIdAt: (index: number) => string;\n /**\n * The row to keep rendered outside the range (the one holding the grid's tab\n * stop), so its DOM and focus survive scrolling. `undefined`: none.\n */\n keep?: { id: string; index: number } | undefined;\n /** The tallest the body may render (`bodyCap()`); a taller one scrolls scaled. */\n cap: number;\n}\n\n/**\n * Row virtualization (TanStack Virtual) plus the row pool: which rows render,\n * where, and which pool slot's DOM each one uses. The virtualizer registers itself\n * with the host and requests updates on scroll.\n *\n * Scroll scaling: engines limit an element's height, so a body taller than the\n * cap renders at the cap and its scroll position maps linearly onto the rows\n * (`ScrollScale`). The virtualizer works in logical offsets: it gets a stand-in\n * for the scroller whose `scrollTop`, `scrollHeight` and `scrollTo()` are\n * logical, and everything else passes through. Rows render relative to the\n * scroll position (`start` minus the difference between the logical and the\n * physical offset). Scroll through this controller (`scrollBy`, `reveal`,\n * `scrollToIndex`): physical px no longer match rows once the body is scaled.\n */\nexport class VirtualController implements ReactiveController {\n readonly #virtual: VirtualizerController<HTMLElement, Element>;\n readonly #pool = new RowPool();\n readonly #scale = new ScrollScale();\n readonly #host: ReactiveControllerHost;\n readonly #getScrollElement: () => HTMLElement | null;\n #element: HTMLElement | undefined;\n #standIn: HTMLElement | undefined;\n #config: VirtualConfig = {\n count: 0,\n rowHeight: 40,\n overscan: 6,\n rowIdAt: String,\n cap: Infinity,\n };\n /** A logical offset to restore after the update, once the body has its new height. */\n #anchor: number | undefined;\n\n constructor(host: ReactiveControllerHost, getScrollElement: () => HTMLElement | null) {\n this.#host = host;\n this.#getScrollElement = getScrollElement;\n this.#virtual = new VirtualizerController<HTMLElement, Element>(host, {\n count: 0,\n getScrollElement: () => this.#scroller(),\n // The real element: a ResizeObserver can't observe the stand-in.\n observeElementRect: (_instance, cb) => {\n const element = this.#element;\n if (!element) return undefined;\n const report = () => {\n cb({ width: element.clientWidth, height: element.clientHeight });\n };\n report();\n const observer = new ResizeObserver(report);\n observer.observe(element);\n return () => {\n observer.disconnect();\n };\n },\n estimateSize: () => this.#config.rowHeight,\n overscan: this.#config.overscan,\n // One window size from the first render: the pool never grows while scrolling\n // (in WebKit, new rows' slots would cut a wheel scroll short; see steadyWindow).\n rangeExtractor: (range) =>\n steadyWindow(\n range,\n maxVisibleRows(this.#element?.clientHeight ?? 0, this.#config.rowHeight),\n ),\n });\n host.addController(this);\n }\n\n /** The scroller's stand-in for the virtualizer: vertical offsets and height in logical px. */\n #scroller(): HTMLElement | null {\n const element = this.#getScrollElement();\n if (!element) return null;\n if (this.#element !== element || !this.#standIn) {\n this.#element = element;\n this.#standIn = new Proxy(element, {\n get: (target, key) => {\n if (key === 'scrollTop') return this.#top(target);\n if (key === 'scrollHeight') return target.scrollHeight + this.#scale.excess;\n if (key === 'scrollTo') {\n return (options: ScrollToOptions) => {\n if (options.top === undefined) target.scrollTo(options);\n else this.#write(target, options.top, options.behavior);\n };\n }\n const value: unknown = Reflect.get(target, key);\n // Methods run on the element itself (DOM methods reject the proxy).\n return typeof value === 'function'\n ? (value as (...args: unknown[]) => unknown).bind(target)\n : value;\n },\n });\n }\n return this.#standIn;\n }\n\n /** The scroller's logical offset. */\n #top(element: HTMLElement): number {\n const top = element.scrollTop;\n const scale = this.#scale;\n return scale.scaled ? scale.toLogical(top, element.scrollHeight - element.clientHeight) : top;\n }\n\n /**\n * Scrolls to a logical offset. `round` rounds the physical one, so that a\n * scaled offset moves the scroller at all.\n */\n #write(\n element: HTMLElement,\n logical: number,\n behavior?: ScrollBehavior,\n round?: (px: number) => number,\n ): void {\n const scale = this.#scale;\n if (!scale.scaled) {\n element.scrollTo({ top: logical, behavior });\n return;\n }\n const range = element.scrollHeight - element.clientHeight;\n const target = Math.min(Math.max(logical, 0), range + scale.excess);\n const physical = scale.toPhysical(target, range);\n element.scrollTo({ top: round ? round(physical) : physical, behavior });\n if (behavior !== 'smooth') scale.land(target, element.scrollTop);\n }\n\n configure(next: VirtualConfig): void {\n const prev = this.#config;\n this.#config = next;\n if (\n next.count !== prev.count ||\n next.overscan !== prev.overscan ||\n next.rowHeight !== prev.rowHeight\n ) {\n this.#virtual.setOptions({ count: next.count, overscan: next.overscan });\n if (next.rowHeight !== prev.rowHeight) this.#virtual.getVirtualizer().measure();\n }\n // Not `scaled`: TypeScript would take it for unchanged after `configure()`.\n const wasScaled = this.#scale.excess > 0;\n const offset = this.#virtual.getVirtualizer().scrollOffset;\n if (this.#scale.configure(next.count * next.rowHeight, next.cap)) {\n // A new mapping would move the rows under a scaled scroll position (a data\n // source growing, a zoom change): keep the logical offset once the body\n // has its new height.\n if ((wasScaled || this.#scale.scaled) && offset !== null && offset > 0) {\n this.#anchor = offset;\n }\n }\n }\n\n hostUpdated(): void {\n const anchor = this.#anchor;\n if (anchor === undefined) return;\n this.#anchor = undefined;\n if (this.#element) this.#write(this.#element, anchor);\n // The logical offset is the same, so the virtualizer sees no change; the\n // rows still have to move to the new physical one.\n this.#host.requestUpdate();\n }\n\n /**\n * Computes the rendered window and updates the pool. Call once per render.\n */\n computeWindow(): VirtualWindow {\n const v = this.#virtual.getVirtualizer();\n const items = v.getVirtualItems();\n // Scaled: rows render relative to the scroll position. The physical offset is\n // read now, so rows for the virtualizer's offset fill the view even if the\n // scroller has moved on since its last scroll event.\n const scaled = this.#scale.scaled;\n const size = this.#scale.size;\n const shift = scaled ? (v.scrollOffset ?? 0) - (this.#element?.scrollTop ?? 0) : 0;\n const byId = new Map<string, { index: number; start: number }>();\n for (const item of items) {\n byId.set(this.#config.rowIdAt(item.index), { index: item.index, start: item.start - shift });\n }\n const { keep, rowHeight } = this.#config;\n this.#pool.pin(keep?.id);\n if (keep && !byId.has(keep.id)) {\n // Fixed row heights: the virtualizer would place it here too. Scaled, it is\n // out of view: keep it inside the body (or just above it, under the header),\n // so it doesn't stretch the scroll range past the cap.\n const start = keep.index * rowHeight - shift;\n byId.set(keep.id, {\n index: keep.index,\n start: scaled ? Math.min(Math.max(start, -rowHeight), size) : start,\n });\n }\n const rows: WindowRow[] = [];\n for (const { id, slot } of this.#pool.update(byId.keys())) {\n const item = byId.get(id);\n if (item) rows.push({ slot, ...item });\n }\n const range = v.range;\n return {\n rows,\n totalSize: scaled ? size : v.getTotalSize(),\n range: range ? { start: range.startIndex, end: range.endIndex } : null,\n };\n }\n\n /** Number of pool slots created so far: bounded by the most rows rendered at once. */\n get poolSize(): number {\n return this.#pool.size;\n }\n\n /** Whether the body is taller than the cap and scrolls scaled. */\n get scaled(): boolean {\n return this.#scale.scaled;\n }\n\n /** `'start'` puts the row at the top; `'auto'` scrolls only as far as needed to show it. */\n scrollToIndex(index: number, align: 'start' | 'auto' = 'start'): void {\n this.#virtual.getVirtualizer().scrollToIndex(index, { align });\n }\n\n /** Scrolls by `delta` px of rows (logical px). */\n scrollBy(delta: number): void {\n const element = this.#element;\n if (element) this.#write(element, this.#top(element) + delta);\n }\n\n /**\n * Scrolls the least distance that shows row `index` in full, between the\n * content above the body (`before` px: the header and top pinned rows) and\n * below it (`after` px). Returns whether the rows are yet to move there (with\n * the update after the scroll event): until then the row's DOM isn't where it\n * will be.\n */\n reveal(index: number, before: number, after: number): boolean {\n const element = this.#element;\n if (!element) return false;\n const { rowHeight } = this.#config;\n const offset = this.#top(element);\n const view = element.clientHeight - before - after;\n const start = index * rowHeight;\n let target: number;\n let round: ((px: number) => number) | undefined;\n if (start < offset) {\n target = start;\n round = Math.floor;\n } else if (start + rowHeight > offset + view) {\n target = start + rowHeight - view;\n round = Math.ceil;\n } else {\n target = offset;\n }\n if (target !== offset) this.#write(element, target, undefined, round);\n // Rendered for an offset the scroller has since left: they move with the\n // update after the scroll event.\n return this.#virtual.getVirtualizer().scrollOffset !== this.#top(element);\n }\n}\n","import type {\n CellClickDetail,\n ColumnReorderDetail,\n ColumnResizeDetail,\n LoadErrorDetail,\n RangeChangeDetail,\n RowClickDetail,\n SortChangeDetail,\n} from '@argus-table/core';\n\n/** Fired after an update when the visible row range changed. */\nexport const RANGE_CHANGE = 'argus-range-change';\n\n/** Fired after the sort order changed (uncontrolled), or with the proposed order (controlled). */\nexport const SORT_CHANGE = 'argus-sort-change';\n\n/** Fired when a column was resized (uncontrolled), or with the proposed widths (controlled). */\nexport const COLUMN_RESIZE = 'argus-column-resize';\n\n/** Fired when a column was moved (uncontrolled), or with the proposed order (controlled). */\nexport const COLUMN_REORDER = 'argus-column-reorder';\n\n/** Fired when a body row was clicked, after `argus-cell-click`. */\nexport const ROW_CLICK = 'argus-row-click';\n\n/** Fired when a body cell was clicked, before `argus-row-click`. */\nexport const CELL_CLICK = 'argus-cell-click';\n\n/** Fired after the update when a `dataSource` page failed to load. */\nexport const LOAD_ERROR = 'argus-load-error';\n\ndeclare global {\n interface HTMLElementEventMap {\n 'argus-range-change': CustomEvent<RangeChangeDetail>;\n 'argus-sort-change': CustomEvent<SortChangeDetail>;\n 'argus-column-resize': CustomEvent<ColumnResizeDetail>;\n 'argus-column-reorder': CustomEvent<ColumnReorderDetail>;\n 'argus-row-click': CustomEvent<RowClickDetail<unknown>>;\n 'argus-cell-click': CustomEvent<CellClickDetail<unknown>>;\n 'argus-load-error': CustomEvent<LoadErrorDetail>;\n }\n}\n\n/** Dispatches a bubbling, composed `CustomEvent`, the shape of every public event. */\nexport function fire(host: HTMLElement, name: string, detail: unknown): boolean {\n return host.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n}\n","/**\n * The tallest element the engine renders, measured once per page.\n *\n * Chromium and WebKit clamp a taller element at about 33.5M px (fewer CSS px\n * when the page is zoomed in), and Firefox drops anything over about 17.9M px\n * to 0. A hidden probe tries a few heights and keeps the first that renders at\n * full size. A zoom change (a new `devicePixelRatio` on resize) measures again\n * and tells the tables, so a scaled body stays within the new limit.\n */\nconst HEIGHTS = [32_000_000, 16_000_000, 8_000_000, 4_000_000, 2_000_000];\n\n/** Content below this never needs the probe: every engine renders it. */\nconst SAFE_HEIGHT = 2_000_000;\n/** Room left for the scrollbar and rounding. */\nconst MARGIN = 1000;\n\nlet measured: number | undefined;\nlet forced: number | undefined;\nlet dpr = 0;\nconst listeners = new Set<() => void>();\n\nfunction onResize() {\n if (window.devicePixelRatio === dpr) return;\n dpr = window.devicePixelRatio;\n measured = undefined;\n for (const listener of listeners) listener();\n}\n\n/** The tallest element height in px the engine renders. */\nfunction maxElementHeight(): number {\n if (forced !== undefined) return forced;\n if (measured !== undefined) return measured;\n // Fixed, so the probe never makes the page scroll.\n const probe = document.createElement('div');\n probe.setAttribute('aria-hidden', 'true');\n probe.style.cssText =\n 'position:fixed;inset-block-start:0;inset-inline-start:0;inline-size:1px;visibility:hidden;pointer-events:none';\n document.body.append(probe);\n measured =\n HEIGHTS.find((height) => {\n probe.style.blockSize = `${String(height)}px`;\n return probe.offsetHeight >= height - 1;\n }) ?? SAFE_HEIGHT;\n probe.remove();\n return measured;\n}\n\n/**\n * The tallest the body may render: the engine's maximum less what scrolls with\n * it (`extra`: the header and pinned rows). `Infinity` for a body of `logical`\n * px that is far from any limit, without measuring.\n */\nexport function bodyCap(logical: number, extra: number): number {\n if (forced === undefined && logical + extra < SAFE_HEIGHT) return Infinity;\n return Math.max(maxElementHeight() - extra - MARGIN, 0);\n}\n\n/** Calls `listener` when the maximum may have changed (the page was zoomed). Returns the unsubscribe. */\nexport function watchMaxElementHeight(listener: () => void): () => void {\n if (listeners.size === 0) {\n dpr = window.devicePixelRatio;\n window.addEventListener('resize', onResize, { passive: true });\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) window.removeEventListener('resize', onResize);\n };\n}\n\n/** Tests: pretend the engine renders at most `height` px (`undefined` measures again). */\nexport function setMaxElementHeightForTests(height: number | undefined): void {\n forced = height;\n}\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { nothing } from 'lit';\nimport type { CellContent } from '../types.js';\n\n/** Turns header or cell content into a Lit child. */\nexport function toChild(content: CellContent | null | undefined): unknown {\n if (content === null || content === undefined) return nothing;\n return typeof content === 'number' ? String(content) : content;\n}\n\n/** Default cell text for an accessor value. */\nexport function formatValue(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (value instanceof Date) return value.toLocaleString();\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- objects are handled above\n return typeof value === 'object' ? JSON.stringify(value) : String(value);\n}\n\n/**\n * Private slot names (ADR 0001): cells by pool slot and column, headers by\n * column, pinned rows by side, index and column.\n */\nexport const cellSlot = (slot: number, colIndex: number) => `c-${String(slot)}-${String(colIndex)}`;\nexport const headerSlot = (colIndex: number) => `h-${String(colIndex)}`;\nexport const pinnedSlot = (side: 'top' | 'bottom', index: number, colIndex: number) =>\n `${side === 'top' ? 't' : 'b'}-${String(index)}-${String(colIndex)}`;\n\ninterface Pinnable {\n pin: 'start' | 'end' | undefined;\n pinEdge: boolean;\n}\n\n/**\n * Part list of a body or pinned-row cell: state is in the part name (`::part()`\n * can't take attribute selectors).\n */\nexport function cellParts(\n column: Pinnable & { sorted: 'asc' | 'desc' | false },\n pinnedRow = false,\n): string {\n let parts = pinnedRow ? 'cell cell-pinned-row' : 'cell';\n if (column.pin) parts += column.pinEdge ? ' cell-pinned cell-pinned-edge' : ' cell-pinned';\n if (column.sorted) parts += ' cell-sorted';\n return parts;\n}\n\n/** `aria-sort` for a header: only the sorted column carries it (WAI-ARIA APG). */\nexport function ariaSort(sorted: 'asc' | 'desc' | false): 'ascending' | 'descending' | undefined {\n if (!sorted) return undefined;\n return sorted === 'asc' ? 'ascending' : 'descending';\n}\n\n/** Inline style of a pinned cell: its sticky inset, from the start or the end edge. */\nexport function pinStyle(column: Pinnable & { offset: number }): string | undefined {\n return column.pin ? `--_pin-offset: ${String(column.offset)}px` : undefined;\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport type { ColumnView, RowState } from '@argus-table/core';\nimport type { WindowRow } from '../controllers/virtual-controller.js';\nimport type { CellContent } from '../types.js';\nimport { cellParts, cellSlot, pinStyle } from './content.js';\n\ntype Columns<T> = readonly ColumnView<T, CellContent>[];\n\n/** The cell holding the grid's tab stop: a row index and a column id. */\nexport interface ActiveCell {\n index: number;\n col: string;\n}\n\n/** Row loading state for `dataSource` tables. */\nexport interface Loading {\n /** Whether a row's data is loaded, still loading, or its page failed. */\n stateAt(index: number): RowState;\n /** Rows that show a Retry button (one per failed page in view), with its accessible label. */\n retry: ReadonlyMap<number, string>;\n /** Click handler of the Retry buttons; the button carries the row index in `data-row`. */\n onRetry: (event: Event) => void;\n}\n\n/**\n * The virtualized body. Rows are keyed by pool slot, so a row entering the window\n * reuses the DOM of one that left (ADR 0001), and they stay in pool order: screen\n * readers get the position from `aria-rowindex`. `firstRowIndex` is the\n * `aria-rowindex` of row 0: after the header and the rows pinned to the top.\n */\nexport function renderBody<T>(\n rows: readonly WindowRow[],\n columns: Columns<T>,\n totalSize: number,\n active: ActiveCell | undefined,\n firstRowIndex: number,\n loading?: Loading,\n) {\n return html`<div\n part=\"body\"\n role=\"rowgroup\"\n style=${styleMap({ blockSize: `${String(totalSize)}px` })}\n >\n ${repeat(\n rows,\n (r) => r.slot,\n (r) =>\n renderRow(\n r,\n columns,\n r.index === active?.index ? active.col : undefined,\n firstRowIndex,\n loading,\n ),\n )}\n </div>`;\n}\n\n/**\n * One body row. Every cell is focusable (`tabindex=-1`) so clicks focus it; the\n * active one is the grid's single tab stop (roving tabindex). A row whose data\n * isn't loaded shows skeleton bars, and a Retry button if its page failed.\n */\nfunction renderRow<T>(\n row: WindowRow,\n columns: Columns<T>,\n activeCol: string | undefined,\n firstRowIndex: number,\n loading: Loading | undefined,\n) {\n const state = loading?.stateAt(row.index) ?? 'loaded';\n let parts = row.index % 2 === 0 ? 'row row-even' : 'row row-odd';\n if (state !== 'loaded') parts += ' row-loading';\n const retry = state === 'error' ? loading?.retry.get(row.index) : undefined;\n return html`<div\n part=${parts}\n class=\"row\"\n role=\"row\"\n aria-rowindex=${row.index + firstRowIndex}\n aria-busy=${state === 'loading' ? 'true' : nothing}\n style=${styleMap({ transform: `translateY(${String(row.start)}px)` })}\n >\n ${repeat(\n columns,\n (c) => c.id,\n (c) =>\n renderCell(\n c,\n c.id === activeCol,\n cellSlot(row.slot, c.colIndex),\n false,\n placeholder(state, c.colIndex === 1 ? retry : undefined, row.index, loading),\n ),\n )}\n </div>`;\n}\n\n/**\n * A body or pinned-row cell. Every cell is focusable (`tabindex=-1`) so clicks\n * focus it; `tabStop` marks the grid's single tab stop. `before` goes ahead of\n * the slot (a loading row's skeleton bar or Retry button).\n */\nexport function renderCell<T>(\n c: ColumnView<T, CellContent>,\n tabStop: boolean,\n slot: string,\n pinnedRow: boolean,\n before: unknown = nothing,\n) {\n return html`<div\n part=${cellParts(c, pinnedRow)}\n role=\"gridcell\"\n aria-colindex=${c.colIndex}\n tabindex=${tabStop ? 0 : -1}\n data-col=${c.id}\n data-align=${c.align}\n data-pin=${c.pin ?? nothing}\n style=${pinStyle(c) ?? nothing}\n >\n ${before}<slot name=${slot}></slot>\n </div>`;\n}\n\n/** What an unloaded cell shows: a skeleton bar, or the Retry button in a failed page's first cell. */\nfunction placeholder(\n state: RowState,\n retryLabel: string | undefined,\n index: number,\n loading: Loading | undefined,\n) {\n if (state === 'loaded') return nothing;\n if (retryLabel !== undefined && loading) {\n return html`<button\n part=\"retry\"\n type=\"button\"\n tabindex=\"-1\"\n data-row=${index}\n aria-label=${retryLabel}\n @click=${loading.onRetry}\n >\n Retry\n </button>`;\n }\n return html`<div\n part=${state === 'error' ? 'skeleton skeleton-error' : 'skeleton'}\n aria-hidden=\"true\"\n ></div>`;\n}\n","import { html, render } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ColumnView, RowPin, TableModel } from '@argus-table/core';\nimport type { WindowRow } from '../controllers/virtual-controller.js';\nimport type { CellContent } from '../types.js';\nimport { cellSlot, formatValue, headerSlot, pinnedSlot, toChild } from './content.js';\n\ntype Column<T> = ColumnView<T, CellContent>;\n\n/**\n * Renders header and cell content into the host's light DOM, as direct children\n * (a slot only takes the host's own children). Keyed and ordered by pool slot,\n * so recycled content updates in place instead of moving (ADR 0001). The part\n * ends at `renderBefore`, so the host's other children (`<argus-column>`) stay\n * outside it, wherever they are added.\n */\nexport function renderLightDom<T>(\n host: HTMLElement,\n model: TableModel<T, CellContent>,\n rows: readonly WindowRow[],\n renderBefore: ChildNode,\n): void {\n const columns = model.columns;\n render(\n html`${repeat(\n columns,\n (c) => c.id,\n (c) => html`<div slot=${headerSlot(c.colIndex)}>${headerContent(c)}</div>`,\n )}${pinnedContent(model, 'top')}${repeat(\n rows,\n (r) => r.slot,\n (r) =>\n repeat(\n columns,\n (c) => c.id,\n (c) =>\n html`<div slot=${cellSlot(r.slot, c.colIndex)}>${cellContent(model, r.index, c)}</div>`,\n ),\n )}${pinnedContent(model, 'bottom')}`,\n host,\n { host, renderBefore },\n );\n}\n\nfunction headerContent<T>(column: Column<T>): unknown {\n const { header } = column;\n return toChild(typeof header === 'function' ? header() : header);\n}\n\n/** Content of the rows pinned to one side, slotted by side, index and column. */\nfunction pinnedContent<T>(model: TableModel<T, CellContent>, side: RowPin) {\n const columns = model.columns;\n const rows = Array.from({ length: model.pinnedCount(side) }, (_, i) => i);\n return rows.map((i) =>\n repeat(\n columns,\n (c) => c.id,\n (c) =>\n html`<div slot=${pinnedSlot(side, i, c.colIndex)}>${pinnedCell(model, side, i, c)}</div>`,\n ),\n );\n}\n\nfunction pinnedCell<T>(\n model: TableModel<T, CellContent>,\n side: RowPin,\n index: number,\n column: Column<T>,\n) {\n if (column.cell) {\n const context = model.pinnedCellContext(side, index, column.id);\n return context ? toChild(column.cell(context.row, context)) : '';\n }\n return column.hasAccessor ? formatValue(model.pinnedValueAt(side, index, column.id)) : '';\n}\n\nfunction cellContent<T>(model: TableModel<T, CellContent>, index: number, column: Column<T>) {\n if (column.cell) {\n const context = model.cellContext(index, column.id);\n return context ? toChild(column.cell(context.row, context)) : '';\n }\n return column.hasAccessor ? formatValue(model.valueAt(index, column.id)) : '';\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ColumnView } from '@argus-table/core';\nimport type { DropTarget } from '../controllers/reorder-drag.js';\nimport type { CellContent } from '../types.js';\nimport { ariaSort, headerSlot, pinStyle } from './content.js';\n\n/** A column header being dragged, and where it would land (`undefined`: where it is). */\nexport interface HeaderDrag {\n columnId: string;\n target: DropTarget | undefined;\n}\n\nexport interface HeaderHandlers {\n click: (event: MouseEvent) => void;\n pointerdown: (event: PointerEvent) => void;\n dblclick: (event: MouseEvent) => void;\n}\n\n/**\n * The sticky header row. Header content is slotted from the light DOM. Pinned\n * header cells use the same private `data-pin` hooks as body cells, but no parts.\n * Every header carries `data-col` (its column id) and sortable ones also\n * `data-sort-col`; the element's delegated handlers read them. Headers take part\n * in the grid's roving tabindex: the active one is the tab stop (`activeCol`).\n * Resizable columns get a `resize-handle` on the header's inline-end edge; a\n * double-click on it fits the column to its content. It is not focusable: the\n * focused header resizes with Alt+Arrow.\n *\n * Reorderable columns carry `data-move-col`: a drag on the header moves the\n * column. While one is dragged (`drag`), its header adds `header-cell-dragging`\n * and the target header shows a `drop-indicator` on the edge it would land at.\n */\nexport function renderHeader<T>(\n columns: readonly ColumnView<T, CellContent>[],\n handlers: HeaderHandlers,\n activeCol: string | undefined,\n drag?: HeaderDrag,\n) {\n return html`<div part=\"header\" role=\"rowgroup\">\n <div\n part=\"header-row\"\n class=\"row\"\n role=\"row\"\n aria-rowindex=\"1\"\n @click=${handlers.click}\n @pointerdown=${handlers.pointerdown}\n @dblclick=${handlers.dblclick}\n >\n ${repeat(\n columns,\n (c) => c.id,\n (c) =>\n html`<div\n part=${headerParts(c, drag)}\n role=\"columnheader\"\n aria-colindex=${c.colIndex}\n aria-sort=${ariaSort(c.sorted) ?? nothing}\n data-col=${c.id}\n data-sort-col=${c.sortable ? c.id : nothing}\n data-move-col=${c.reorderable ? c.id : nothing}\n tabindex=${c.id === activeCol ? 0 : -1}\n data-align=${c.align}\n data-pin=${c.pin ?? nothing}\n style=${pinStyle(c) ?? nothing}\n >\n <slot name=${headerSlot(c.colIndex)}></slot>\n ${c.sortable ? html`<span class=\"sort-indicator\" aria-hidden=\"true\"></span>` : nothing}\n ${c.resizable ? resizeHandle(c) : nothing}\n ${\n drag?.target?.columnId === c.id\n ? html`<span\n part=\"drop-indicator\"\n data-edge=${drag.target.edge}\n aria-hidden=\"true\"\n ></span>`\n : nothing\n }\n </div>`,\n )}\n </div>\n </div>`;\n}\n\nfunction headerParts<T>(c: ColumnView<T, CellContent>, drag: HeaderDrag | undefined): string {\n let parts = c.sorted ? 'header-cell header-cell-sorted' : 'header-cell';\n if (drag?.columnId === c.id) parts += ' header-cell-dragging';\n return parts;\n}\n\n/**\n * A vertical separator with the column's width as its value. A flex column has no\n * fixed width until it is resized, so it reports none.\n */\nfunction resizeHandle<T>(c: ColumnView<T, CellContent>) {\n return html`<div\n part=\"resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize column\"\n aria-valuenow=${c.flex === undefined ? Math.round(c.width) : nothing}\n aria-valuemin=${c.minWidth}\n aria-valuemax=${Number.isFinite(c.maxWidth) ? c.maxWidth : nothing}\n data-resize-col=${c.id}\n ></div>`;\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ColumnView, RowPin } from '@argus-table/core';\nimport type { CellContent } from '../types.js';\nimport { renderCell, type ActiveCell } from './body.js';\nimport { pinnedSlot } from './content.js';\n\n/**\n * The rows pinned to one side: a sticky row group below the header (`top`) or\n * at the bottom of the view (`bottom`). They are few and never recycled, so\n * they aren't pooled; content is slotted from the light DOM like body cells.\n * Cells take part in the grid's roving tabindex (`active.index` is the row's\n * index in its list). `firstRowIndex` is the `aria-rowindex` of the first row.\n */\nexport function renderPinnedRows<T>(\n side: RowPin,\n count: number,\n columns: readonly ColumnView<T, CellContent>[],\n firstRowIndex: number,\n active: ActiveCell | undefined,\n) {\n if (count === 0) return nothing;\n const rows = Array.from({ length: count }, (_, i) => i);\n return html`<div class=\"pinned\" data-side=${side} role=\"rowgroup\">\n ${rows.map(\n (i) =>\n html`<div\n part=${`row row-pinned row-pinned-${side}`}\n class=\"row\"\n role=\"row\"\n aria-rowindex=${firstRowIndex + i}\n >\n ${repeat(\n columns,\n (c) => c.id,\n (c) =>\n renderCell(\n c,\n active?.index === i && c.id === active.col,\n pinnedSlot(side, i, c.colIndex),\n true,\n ),\n )}\n </div>`,\n )}\n </div>`;\n}\n","import { css } from 'lit';\n\n/**\n * Base styles. Everything sits in `@layer argus-base`, and every value reads a\n * public token with a neutral fallback, so themes and page CSS always win.\n * `--_*` properties are private.\n */\nexport const baseStyles = css`\n @layer argus-base {\n :host {\n display: block;\n /* A table that virtualizes needs a bounded height; set your own on the element. */\n block-size: 400px;\n box-sizing: border-box;\n contain: content;\n color-scheme: light dark;\n color: var(--argus-fg, CanvasText);\n background: var(--argus-bg, Canvas);\n font: var(--argus-font, inherit);\n /* contain: content clips the header, rows and pinned shadows to the rounded corners. */\n border: var(--argus-outline, none);\n border-radius: var(--argus-radius, 0);\n --_row-height: var(--argus-row-height, 40px);\n --_pad: var(--argus-cell-padding-inline, 12px);\n --_border: var(--argus-border-width, 1px) solid\n var(--argus-border-color, light-dark(#e5e7eb, #374151));\n /* 1 in LTR, -1 in RTL: mirrors the pinned-edge shadow. */\n --_dir: 1;\n }\n :host(:dir(rtl)) {\n --_dir: -1;\n }\n :host([density='compact']) {\n --_row-height: var(--argus-row-height, 32px);\n --_pad: var(--argus-cell-padding-inline, 8px);\n }\n :host([density='spacious']) {\n --_row-height: var(--argus-row-height, 52px);\n --_pad: var(--argus-cell-padding-inline, 16px);\n }\n :host([hidden]) {\n display: none;\n }\n\n [part~='table'] {\n position: relative;\n block-size: 100%;\n overflow: auto;\n overscroll-behavior: contain;\n /*\n * A cell moved to by keyboard scrolls clear of the sticky header, the pinned\n * rows and the pinned columns.\n */\n scroll-padding-block-start: calc((1 + var(--_pin-top-rows, 0)) * var(--_row-height));\n scroll-padding-block-end: calc(var(--_pin-bottom-rows, 0) * var(--_row-height));\n scroll-padding-inline: var(--_pin-start, 0) var(--_pin-end, 0);\n }\n\n .row {\n display: grid;\n grid-template-columns: var(--_cols);\n inline-size: var(--_width);\n min-inline-size: 100%;\n block-size: var(--_row-height);\n box-sizing: border-box;\n }\n\n [part~='header'] {\n position: sticky;\n inset-block-start: 0;\n z-index: 2;\n }\n\n [part~='body'] {\n position: relative;\n contain: layout;\n }\n [part~='body'] > .row {\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 0;\n }\n [part~='row'] {\n --_row-bg: var(--argus-bg, Canvas);\n --_row-surface: var(--_row-bg);\n background: var(--_row-surface);\n }\n [part~='row-odd'] {\n --_row-bg: var(--argus-row-stripe-bg, var(--argus-bg, Canvas));\n }\n [part~='row']:hover {\n --_row-surface: var(--argus-row-hover-bg, var(--_row-bg));\n }\n\n /*\n * Pinned rows: a sticky row group below the header and one at the bottom of\n * the view. The header is one row tall. They keep their place in the flow,\n * so body row i still starts i rows below the top group.\n */\n .pinned {\n position: sticky;\n z-index: 2;\n }\n .pinned[data-side='top'] {\n inset-block-start: var(--_row-height);\n }\n .pinned[data-side='bottom'] {\n inset-block-end: 0;\n }\n [part~='row-pinned'] {\n --_row-bg: var(--argus-pinned-row-bg, var(--argus-bg, Canvas));\n }\n\n [part~='cell'],\n [part~='header-cell'] {\n display: flex;\n align-items: center;\n min-inline-size: 0;\n box-sizing: border-box;\n padding-inline: var(--_pad);\n overflow: hidden;\n white-space: nowrap;\n border-block-end: var(--_border);\n }\n [part~='header-cell'] {\n background: var(--argus-header-bg, light-dark(#f9fafb, #111827));\n color: var(--argus-header-fg, inherit);\n font-weight: 600;\n }\n [part~='header-cell'] {\n position: relative;\n }\n [part~='resize-handle'] {\n position: absolute;\n inset-block: 0;\n inset-inline-end: 0;\n inline-size: 8px;\n z-index: 1;\n cursor: col-resize;\n touch-action: none;\n }\n [part~='resize-handle']::after {\n content: '';\n position: absolute;\n inset-block: 25%;\n inset-inline-end: 0;\n inline-size: 2px;\n background: var(--argus-resize-handle-color, light-dark(#9ca3af, #6b7280));\n opacity: 0;\n }\n [part~='header-cell']:hover [part~='resize-handle']::after,\n [part~='header-cell']:focus-visible [part~='resize-handle']::after,\n [part~='resize-handle'][data-active]::after {\n opacity: 1;\n }\n [data-sort-col] {\n cursor: pointer;\n user-select: none;\n }\n /* A drag on a reorderable header moves the column, so its text isn't selectable. */\n [data-move-col] {\n user-select: none;\n }\n [data-dragging],\n [data-dragging] [part~='header-cell'] {\n cursor: grabbing;\n }\n [part~='header-cell-dragging'] {\n opacity: 0.5;\n }\n /* The line where a dragged column would land, on the target header's logical edge. */\n [part~='drop-indicator'] {\n position: absolute;\n inset-block: 0;\n inline-size: 2px;\n z-index: 2;\n background: var(--argus-drop-indicator-color, Highlight);\n pointer-events: none;\n }\n [part~='drop-indicator'][data-edge='start'] {\n inset-inline-start: 0;\n }\n [part~='drop-indicator'][data-edge='end'] {\n inset-inline-end: 0;\n }\n [part~='header-cell']:focus-visible,\n [part~='cell']:focus-visible {\n outline: var(--argus-focus-ring, 2px solid Highlight);\n outline-offset: -2px;\n }\n /* A small chevron after the header content; only the sorted column shows it. */\n .sort-indicator {\n flex: none;\n inline-size: 0.35em;\n block-size: 0.35em;\n margin-inline-start: 0.4em;\n /* Physical sides on purpose: the chevron is rotated, so it must not mirror in RTL. */\n border-right: 0.12em solid currentColor;\n border-bottom: 0.12em solid currentColor;\n visibility: hidden;\n }\n [aria-sort] .sort-indicator {\n visibility: visible;\n }\n [aria-sort='ascending'] .sort-indicator {\n transform: translateY(0.1em) rotate(-135deg);\n }\n [aria-sort='descending'] .sort-indicator {\n transform: translateY(-0.1em) rotate(45deg);\n }\n [data-align='end'] .sort-indicator {\n order: -1;\n margin-inline: 0 0.4em;\n }\n /*\n * Pinned columns: sticky inside the scroll container, with offsets from the\n * table model. Logical insets make RTL work without extra rules.\n */\n [data-pin] {\n position: sticky;\n z-index: 1;\n }\n [data-pin='start'] {\n inset-inline-start: var(--_pin-offset);\n }\n [data-pin='end'] {\n inset-inline-end: var(--_pin-offset);\n }\n /*\n * Pinned body cells are sticky only while the table scrolls sideways\n * (data-hscroll on the scroller). At rest they are plain cells shifted by the\n * horizontal scroll offset, which vertical scrolling never changes: a sticky\n * cell per row is a compositing layer each, and Safari stutters moving them\n * (PinScrollController). Both place the cells at the same spot.\n */\n [part~='row'] > [data-pin] {\n position: relative;\n inset-inline: auto;\n }\n [part~='row'] > [data-pin='start'] {\n transform: translateX(var(--_sx, 0px));\n }\n [part~='row'] > [data-pin='end'] {\n transform: translateX(calc(var(--_sx, 0px) - var(--_dir) * var(--_max-x, 0px)));\n }\n [data-hscroll] [part~='row'] > [data-pin] {\n position: sticky;\n transform: none;\n }\n [data-hscroll] [part~='row'] > [data-pin='start'] {\n inset-inline-start: var(--_pin-offset);\n }\n [data-hscroll] [part~='row'] > [data-pin='end'] {\n inset-inline-end: var(--_pin-offset);\n }\n [part~='cell-pinned'] {\n background: var(--_row-surface);\n }\n /*\n * The edge shadow, once per pinned side (.pin-shadow, beside the scroller).\n * --argus-pinned-shadow is written for a shadow falling toward the end side;\n * the start edge in RTL and the end edge in LTR mirror it.\n */\n .pin-shadow {\n position: absolute;\n inset-block-start: 0;\n block-size: min(var(--_view-h, 100%), var(--_content-h, 100%));\n z-index: 3;\n pointer-events: none;\n }\n .pin-shadow[data-side='start'] {\n inset-inline-start: 0;\n }\n .pin-shadow[data-side='end'] {\n inset-inline-end: var(--_sb-x, 0px);\n }\n .pin-shadow::after {\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: var(\n --argus-pinned-shadow,\n 4px 0 6px -4px light-dark(rgb(0 0 0 / 0.2), rgb(0 0 0 / 0.6))\n );\n transform: scaleX(var(--_dir));\n }\n .pin-shadow[data-side='end']::after {\n transform: scaleX(calc(-1 * var(--_dir)));\n }\n\n [data-align='center'] {\n justify-content: center;\n text-align: center;\n }\n [data-align='end'] {\n justify-content: flex-end;\n text-align: end;\n }\n ::slotted(*) {\n min-inline-size: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n /* Fitting a column to its content: set for one synchronous measurement, never painted. */\n [data-measure] {\n inline-size: max-content;\n }\n\n /* Rows of a data source that haven't loaded: a bar per cell, pulsing gently. */\n [part~='skeleton'] {\n flex: none;\n inline-size: min(60%, 8em);\n block-size: 0.6em;\n border-radius: 0.3em;\n background: var(--argus-skeleton-bg, color-mix(in srgb, currentColor 12%, transparent));\n animation: argus-skeleton-pulse 1.6s ease-in-out infinite;\n }\n [part~='skeleton-error'] {\n animation: none;\n opacity: 0.5;\n }\n @keyframes argus-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n [part~='skeleton'] {\n animation: none;\n }\n }\n [part~='retry'] {\n font: inherit;\n color: inherit;\n cursor: pointer;\n }\n\n [part~='empty'] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-block-size: calc(\n 100% - (1 + var(--_pin-top-rows, 0) + var(--_pin-bottom-rows, 0)) * var(--_row-height)\n );\n padding: var(--_pad);\n box-sizing: border-box;\n }\n\n /* Measures the resolved row height in px for the virtualizer. */\n .probe {\n position: absolute;\n inset-block-start: 0;\n inline-size: 0;\n block-size: var(--_row-height);\n visibility: hidden;\n pointer-events: none;\n }\n }\n`;\n","import {\n LitElement,\n html,\n nothing,\n type CSSResultGroup,\n type PropertyValues,\n type TemplateResult,\n} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport {\n controllable,\n RowLayout,\n type ColumnReorderDetail,\n type ColumnResizeDetail,\n type ColumnView,\n type GridRow,\n type TableModel,\n} from '@argus-table/core';\nimport { announce } from './announce.js';\nimport { AutoWidths, measureColumns } from './controllers/auto-width.js';\nimport { ColumnChildrenController } from './controllers/column-children.js';\nimport { DataController } from './controllers/data-controller.js';\nimport { PinScrollController } from './controllers/pin-scroll-controller.js';\nimport {\n canStartReorder,\n dropTarget,\n startReorderDrag,\n type DropSlot,\n} from './controllers/reorder-drag.js';\nimport { startResizeDrag } from './controllers/resize-drag.js';\nimport { TableController } from './controllers/table-controller.js';\nimport { VirtualController, type VirtualWindow } from './controllers/virtual-controller.js';\nimport {\n CELL_CLICK,\n COLUMN_REORDER,\n COLUMN_RESIZE,\n fire,\n LOAD_ERROR,\n RANGE_CHANGE,\n ROW_CLICK,\n SORT_CHANGE,\n} from './events.js';\nimport { bodyCap, watchMaxElementHeight } from './max-height.js';\nimport { renderBody, type ActiveCell, type Loading } from './render/body.js';\nimport { renderLightDom } from './render/cells.js';\nimport { renderHeader, type HeaderDrag } from './render/header.js';\nimport { renderPinnedRows } from './render/pinned-rows.js';\nimport { baseStyles } from './styles/base.js';\nimport type {\n CellContent,\n ColumnDef,\n ColumnOrderState,\n ColumnSizingState,\n DataSource,\n Density,\n PinnedRows,\n SortState,\n} from './types.js';\n\n/**\n * The host carries the grid role, so rows rendered in the shadow root become\n * its children in the accessibility tree. ElementInternals sets the default;\n * `connectedCallback` also adds a `role` attribute, because tools such as\n * axe-core can't see the ElementInternals role. A `role` the page sets wins.\n */\nfunction attachGridInternals(host: HTMLElement): ElementInternals {\n const internals = host.attachInternals();\n internals.role = 'grid';\n return internals;\n}\n\n/**\n * The sortable column a header click came from, if any. Works for slotted content\n * too. Clicks on a resize handle never sort, so a click that ends a drag doesn't.\n */\nfunction sortColumnOf(event: Event): string | undefined {\n for (const target of event.composedPath()) {\n if (!(target instanceof HTMLElement)) continue;\n if (target.dataset.resizeCol !== undefined) return undefined;\n if (target.dataset.sortCol !== undefined) return target.dataset.sortCol;\n if (target.getAttribute('part') === 'header-row') return undefined;\n }\n return undefined;\n}\n\nconst RESIZE_STEP = 10;\n\n/**\n * The cell holding the grid's single tab stop: a row (its section, and its index\n * there: in the row model for the body, in its list for a pinned row) and a\n * column. `rowId` keeps it on the same body row when the order changes.\n */\ninterface Active extends GridRow {\n rowId: string | undefined;\n col: string;\n}\n\nconst HEADER: GridRow = { section: 'header', index: 0 };\n\n/** Where the rows sit in the grid: header, pinned top, body, pinned bottom. */\nfunction layoutOf<T>(model: TableModel<T, CellContent>): RowLayout {\n return new RowLayout(model.pinnedCount('top'), model.rowCount, model.pinnedCount('bottom'));\n}\n\n/** The grid cell or column header an element is, if any. */\nfunction gridCell(target: EventTarget): HTMLElement | undefined {\n if (!(target instanceof HTMLElement) || target.dataset.col === undefined) return undefined;\n const role = target.getAttribute('role');\n return role === 'gridcell' || role === 'columnheader' ? target : undefined;\n}\n\n/** The grid row a rendered row element is, from its `aria-rowindex`. */\nfunction gridRowOf(row: Element | null, layout: RowLayout): GridRow | undefined {\n const index = row?.getAttribute('aria-rowindex');\n return index ? layout.fromAriaRowIndex(Number(index)) : undefined;\n}\n\n/**\n * The pinned edge's shadow, drawn once per side over the scroller rather than\n * per row: a shadow on every pinned cell repaints on every scroll frame. It\n * covers the pinned columns and casts `--argus-pinned-shadow` onto the rest;\n * PinScrollController sizes it to the visible area.\n */\nfunction pinShadow(side: 'start' | 'end', width: number, rows: number, rowPx: number) {\n if (width === 0) return nothing;\n return html`<div\n class=\"pin-shadow\"\n data-side=${side}\n aria-hidden=\"true\"\n style=${styleMap({\n inlineSize: `${String(width)}px`,\n '--_content-h': `${String((rows + 1) * rowPx)}px`,\n })}\n ></div>`;\n}\n\n/** CSS grid track for a column: fixed px, or a flex share with the min width as floor. */\nfunction track<T>(column: ColumnView<T, CellContent>): string {\n return column.flex === undefined\n ? `${String(column.width)}px`\n : `minmax(${String(column.minWidth)}px, ${String(column.flex)}fr)`;\n}\n\n/**\n * A virtualized data table.\n *\n * Set `columns`, and `data` or `dataSource`, as properties. Columns can also be\n * written as `<argus-column>` children; a non-empty `columns` wins over them.\n * Header and cell content is rendered into the element's light DOM and slotted\n * into the cells, so page CSS and the page's own components work inside cells.\n *\n * Any number of rows scrolls to the end. Browsers limit an element's height\n * (about 800k rows of 40 px in Chromium and Safari, 400k in Firefox), so a taller\n * body renders shorter and its scroll position is scaled onto the rows: the\n * scrollbar still spans every row, and a wheel step covers a few more of them.\n * Use `scrollToRow()` rather than setting the scroll container's `scrollTop`.\n *\n * @summary Data table with pinned rows and columns and infinite loading.\n *\n * @fires {CustomEvent<SortChangeDetail>} argus-sort-change - A sortable header was clicked, or activated with Enter or Space. `detail: { sorting }`: the new order, or the proposed one when `sorting` is controlled.\n * @fires {CustomEvent<ColumnResizeDetail>} argus-column-resize - A column was resized: by dragging its handle, with Alt+Arrow on its header, by a double-click on its handle (fit to content) or by `autosizeColumns()`. `detail: { columnId, width, sizing }`: the new widths, or the proposed ones when `columnSizing` is controlled. Fires on every frame of a drag, and once per column that `autosizeColumns()` changes.\n * @fires {CustomEvent<ColumnReorderDetail>} argus-column-reorder - A column was moved: by dragging its header, or with Alt+Shift+Arrow on its focused header. Columns move within their own group (start-pinned, scrolling, end-pinned). `detail: { columnId, order }`: the new order, or the proposed one when `columnOrder` is controlled. Fires once per move, on drop.\n * @fires {CustomEvent<CellClickDetail<T>>} argus-cell-click - A body or pinned-row cell was clicked, or Enter was pressed on it. `detail: { row, columnId, value, pinned? }`; `pinned` is `'top'` or `'bottom'` for a pinned row. Fires before `argus-row-click`.\n * @fires {CustomEvent<RowClickDetail<T>>} argus-row-click - A body or pinned row was clicked, or Enter was pressed on one of its cells. `detail: { row, rowId, index, pinned? }`; for a pinned row, `index` is its index in its list.\n * @fires {CustomEvent<RangeChangeDetail>} argus-range-change - The visible rows changed. `detail: { start, end }` (row indices, inclusive).\n * @fires {CustomEvent<LoadErrorDetail>} argus-load-error - A `dataSource` page failed to load: `getRows()` rejected or threw. `detail: { error, start, end }` (`end` exclusive). The rows show a Retry button.\n *\n * @slot empty - Shown instead of the body when there are no rows. Default: \"No rows\".\n *\n * @csspart table - The scroll container that holds header and body.\n * @csspart header - The sticky header row group.\n * @csspart header-row - The header row.\n * @csspart header-cell - Every header cell.\n * @csspart header-cell-sorted - The header of the sorted column. The direction is in `aria-sort`.\n * @csspart header-cell-dragging - Added to `header-cell` on the header being dragged to a new position.\n * @csspart drop-indicator - The line on the edge of the header where a dragged column would land.\n * @csspart resize-handle - The drag handle on the inline-end edge of a resizable column's header. A double-click fits the column to its content.\n * @csspart body - The row group holding the rendered body rows.\n * @csspart row - Every body row.\n * @csspart row-even - Body rows with an even index (0-based).\n * @csspart row-odd - Body rows with an odd index.\n * @csspart row-loading - Body rows whose `dataSource` page hasn't loaded yet, or failed.\n * @csspart row-pinned - Every row from `pinnedRows`, on either side. Also has `row`, but no `row-even`/`row-odd`.\n * @csspart row-pinned-top - The rows pinned below the header.\n * @csspart row-pinned-bottom - The rows pinned to the bottom.\n * @csspart cell-pinned-row - Every cell of a pinned row (next to `cell`).\n * @csspart cell - Every body cell.\n * @csspart cell-sorted - Body cells in the sorted column.\n * @csspart cell-pinned - Body cells in a pinned column, on either side.\n * @csspart cell-pinned-edge - The pinned body cell next to the scrolling columns (one per pinned side).\n * @csspart skeleton - The placeholder bar in each cell of a row that is still loading.\n * @csspart skeleton-error - Added to `skeleton` in a row whose page failed to load.\n * @csspart retry - The Retry button in the first cell of a failed page's first visible row.\n * @csspart empty - The empty-state container.\n *\n * @cssprop [--argus-bg=Canvas] - Background of the table and rows.\n * @cssprop [--argus-fg=CanvasText] - Text colour.\n * @cssprop [--argus-font=inherit] - Font shorthand for the table.\n * @cssprop [--argus-header-bg] - Header background.\n * @cssprop [--argus-header-fg=inherit] - Header text colour.\n * @cssprop [--argus-border-color] - Colour of the row borders.\n * @cssprop [--argus-border-width=1px] - Width of the row borders.\n * @cssprop [--argus-outline=none] - Border around the whole table, as a `border` shorthand (`1px solid …`). Inside the element's size.\n * @cssprop [--argus-radius=0] - Corner radius of the table. Header, rows and pinned columns are clipped to it.\n * @cssprop [--argus-row-height] - Height of a row. Default per density: 32px, 40px, 52px.\n * @cssprop [--argus-cell-padding-inline] - Inline padding of cells. Default per density: 8px, 12px, 16px.\n * @cssprop [--argus-row-stripe-bg] - Background of odd rows. Default: no stripes.\n * @cssprop [--argus-pinned-shadow] - Shadow on the pinned edge, as a `box-shadow` falling toward the end side (`4px 0 6px -4px …`). Mirrored for the end edge and in RTL; `none` removes it.\n * @cssprop [--argus-resize-handle-color] - Colour of the resize handle's line, shown on hover, focus and drag.\n * @cssprop [--argus-focus-ring=2px solid Highlight] - Outline of the focused header or cell.\n * @cssprop [--argus-drop-indicator-color=Highlight] - Colour of the line that marks where a dragged column would land.\n * @cssprop [--argus-row-hover-bg] - Background of the hovered row. Default: no change.\n * @cssprop [--argus-pinned-row-bg=var(--argus-bg)] - Background of the pinned rows, pinned columns included.\n * @cssprop [--argus-skeleton-bg] - Colour of the skeleton bars in rows still loading. Default: the text colour at low opacity.\n * @cssprop [--argus-row-selected-bg] - Reserved for row selection, which comes after v0.1. The table doesn't read it yet.\n */\n@customElement('argus-table')\nexport class ArgusTable<T = unknown> extends LitElement {\n static override styles: CSSResultGroup = baseStyles;\n\n /**\n * Column definitions. Property only: functions can't be attributes. While empty,\n * the table reads its `<argus-column>` children instead. `null` or `undefined`\n * means `[]`.\n */\n @property({ attribute: false })\n get columns(): readonly ColumnDef<T>[] {\n return this.#columnsProp;\n }\n set columns(value: readonly ColumnDef<T>[] | null | undefined) {\n // Framework bindings set `undefined` when a prop goes away.\n this.#columnsProp = value ?? [];\n }\n\n /**\n * The rows to show. Replace the array to update; changes inside it aren't\n * detected. `null` or `undefined` means `[]`.\n */\n @property({ attribute: false })\n get data(): readonly T[] {\n return this.#dataProp;\n }\n set data(value: readonly T[] | null | undefined) {\n this.#dataProp = value ?? [];\n }\n\n /**\n * Loads rows page by page as they scroll into view, instead of `data`:\n * `{ getRows({ start, end, sorting, signal }), pageSize? }`, where `end` is\n * exclusive and `getRows` resolves to `{ rows, total? }`. Without a `total`,\n * the table grows as pages arrive and a short page marks the end. Sorting\n * happens on the server: a new order reloads from the top. While set, it wins\n * over `data`. Replace the object to change `getRows` or `pageSize`.\n */\n @property({ attribute: false })\n dataSource?: DataSource<T>;\n\n /**\n * Rows fixed below the header (`top`) and at the bottom of the view (`bottom`),\n * such as a totals row: `{ top?: T[], bottom?: T[] }`. They are separate\n * objects, not rows of `data`: columns read them the same way, but they are\n * never sorted and work the same with a `dataSource`. A `cell` function gets\n * `pinned: 'top' | 'bottom'` in its context. Replace the object to update.\n */\n @property({ attribute: false })\n pinnedRows?: PinnedRows<T>;\n\n /** Returns a stable id for a row. Default: the row's index (in `data`, or among all `dataSource` rows). */\n @property({ attribute: false })\n getRowId?: (row: T, index: number) => string;\n\n /** Row height in px. Unset: the density (or the `--argus-row-height` token) decides. */\n @property({ attribute: 'row-height', type: Number })\n rowHeight?: number;\n\n /** Row density: `compact`, `comfortable` or `spacious`. */\n @property({ reflect: true })\n density: Density = 'comfortable';\n\n /** Rows rendered above and below the visible ones. `null` or `undefined` means the default, 6. */\n @property({ type: Number })\n get overscan(): number {\n return this.#overscan;\n }\n set overscan(value: number | null | undefined) {\n this.#overscan = value ?? 6;\n }\n\n /**\n * The sort order, e.g. `[{ id: 'total', desc: true }]`; `[]` when unsorted. Unset,\n * the table keeps it itself and header clicks change it. Once set, it is\n * controlled: a click only fires `argus-sort-change` with the proposed order,\n * and nothing changes until you set the property. Set `undefined` to hand it back.\n */\n @property({ attribute: false })\n get sorting(): SortState {\n return this.#sorting.value;\n }\n set sorting(value: SortState | undefined) {\n // Lit wraps this accessor and requests the update with the old value.\n this.#sorting.set(value);\n }\n\n /**\n * Resized widths in px by column id, e.g. `{ name: 240 }`. A resized flex column\n * becomes fixed. Uncontrolled until set, like `sorting`: once set, a resize only\n * fires `argus-column-resize` with the proposed widths. `undefined` hands it back.\n */\n @property({ attribute: false })\n get columnSizing(): ColumnSizingState {\n return this.#sizing.value;\n }\n set columnSizing(value: ColumnSizingState | undefined) {\n this.#sizing.set(value);\n }\n\n /**\n * The column order: column ids as the table shows them, e.g.\n * `['id', 'total', 'customer']`. `[]` (the default) keeps the order of `columns`.\n * Each pin group (start-pinned, scrolling, end-pinned) takes its columns in this\n * order; unknown ids are ignored and columns it doesn't list follow the listed\n * ones of their group. After a move it holds every column id. Uncontrolled\n * until set, like `sorting`: once set, a move only fires `argus-column-reorder`\n * with the proposed order. `undefined` hands it back.\n */\n @property({ attribute: false })\n get columnOrder(): ColumnOrderState {\n return this.#order.value;\n }\n set columnOrder(value: ColumnOrderState | undefined) {\n this.#order.set(value);\n }\n\n #columnsProp: readonly ColumnDef<T>[] = [];\n #dataProp: readonly T[] = [];\n #overscan = 6;\n readonly #sorting = controllable<SortState>([]);\n readonly #sizing = controllable<ColumnSizingState>({});\n readonly #order = controllable<ColumnOrderState>([]);\n /** Moves the table applied itself, by column; their events fire once the update is done. */\n readonly #appliedReorders = new Map<string, ColumnReorderDetail>();\n /** The header being dragged to a new position, if any. */\n #drag: HeaderDrag | undefined;\n /** A move from the keyboard, announced once it has rendered: the column and its old position. */\n #announceMove: { id: string; from: number } | undefined;\n /** Resizes the table applied itself, by column; their events fire once the update is done. */\n readonly #appliedResizes = new Map<string, ColumnResizeDetail>();\n /** Measured widths of `width: 'auto'` columns. */\n readonly #autoWidths = new AutoWidths(() => {\n this.requestUpdate();\n });\n /** The auto widths last passed to the model; a change re-measures the pinned columns' offsets. */\n #pushedAutoWidths: ColumnSizingState | undefined;\n #autoWidthsChanged = false;\n /** A sort the table applied itself; its event fires once the update is done. */\n #appliedSort: SortState | undefined;\n readonly #internals = attachGridInternals(this);\n readonly #table = new TableController<T>();\n readonly #children = new ColumnChildrenController<T>(this);\n /** The columns last passed to the model: `columns`, or the `<argus-column>` children. */\n #columns: readonly ColumnDef<T>[] = [];\n #columnsChanged = false;\n #warnedColumns = false;\n /** End of the light-DOM part holding cell content, so later children stay outside it. */\n #contentEnd: Comment | undefined;\n readonly #data = new DataController<T>(this);\n /** Scroll back to the top after the update (a new sort order for a data source). */\n #scrollToTop = false;\n // Looked up lazily: the virtualizer's hostUpdated runs before firstUpdated.\n readonly #virtual = new VirtualController(this, () =>\n this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]'),\n );\n readonly #pinScroll = new PinScrollController(this, () =>\n this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]'),\n );\n #rowPx = 40;\n #probeObserver?: ResizeObserver;\n #window: VirtualWindow = { rows: [], totalSize: 0, range: null };\n #active: Active | undefined;\n /** Move focus to the active cell after the next update (keyboard navigation). */\n #focusPending = false;\n #lastRange = '';\n #unwatchMaxHeight: (() => void) | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) this.setAttribute('role', 'grid');\n if (this.hasUpdated) this.#observeProbe();\n // A zoom change changes the tallest body the engine renders.\n this.#unwatchMaxHeight = watchMaxElementHeight(() => {\n this.requestUpdate();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#probeObserver?.disconnect();\n this.#unwatchMaxHeight?.();\n this.#unwatchMaxHeight = undefined;\n }\n\n /**\n * `columns` when it has any, otherwise the `<argus-column>` children. Keeps its\n * identity while neither changes, so the model is only rebuilt on a change.\n */\n #effectiveColumns(): readonly ColumnDef<T>[] {\n if (this.columns.length === 0) return this.#children.defs;\n if (!this.#warnedColumns && this.#children.present) {\n this.#warnedColumns = true;\n console.warn(\n 'argus-table: the columns property is set, so <argus-column> children are ignored.',\n );\n }\n return this.columns;\n }\n\n /**\n * The node the light-DOM content is rendered before. Lit's part then ends there,\n * so children appended later (an `<argus-column>`) never land inside it. If the\n * marker was removed (say by `innerHTML`), a new one starts a fresh part.\n */\n #lightDomEnd(): Comment {\n if (this.#contentEnd?.parentNode !== this) {\n this.#contentEnd = document.createComment('');\n this.append(this.#contentEnd);\n }\n return this.#contentEnd;\n }\n\n /**\n * With a `dataSource`, drops every loaded page and loads the rows in view\n * again, keeping the scroll position. With `data`, re-renders the cells (after\n * changing row objects in place). Resolves once the table has re-rendered;\n * reloaded rows arrive as their pages load.\n */\n async refresh(): Promise<void> {\n this.#data.refresh();\n this.requestUpdate();\n await this.updateComplete;\n }\n\n /**\n * Fits columns to their content: the header, the pinned rows and the body rows\n * rendered now (rows out of view aren't measured). It resizes them like a drag\n * would, so `argus-column-resize` fires for each column that changes, and with a\n * controlled `columnSizing` nothing changes until you set it. Without `ids`, fits\n * every resizable column; columns with `resizable: false` keep their width.\n * Resolves once the table has re-rendered.\n */\n async autosizeColumns(ids?: readonly string[]): Promise<void> {\n await this.updateComplete;\n const targets = this.#table.model.columns\n .filter((c) => c.resizable && (ids === undefined || ids.includes(c.id)))\n .map((c) => c.id);\n this.#requestResizes(measureColumns(this.renderRoot, targets));\n await this.updateComplete;\n }\n\n /** Scrolls so that the row at `index` (in the current row order) is at the top. */\n async scrollToRow(index: number): Promise<void> {\n await this.updateComplete;\n this.#virtual.scrollToIndex(index);\n await this.updateComplete;\n }\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n const columns = this.#effectiveColumns();\n this.#columnsChanged = columns !== this.#columns;\n this.#columns = columns;\n if (changed.has('dataSource') || changed.has('sorting') || changed.has('getRowId')) {\n this.#data.configure({\n source: this.dataSource,\n sorting: this.#sorting.value,\n getRowId: this.getRowId,\n });\n // A new order starts over from the first row, so show it.\n if (this.dataSource && this.hasUpdated && changed.has('sorting')) {\n this.#scrollToTop = !changed.has('dataSource');\n }\n }\n if (\n this.#columnsChanged ||\n changed.has('data') ||\n changed.has('getRowId') ||\n changed.has('sorting') ||\n changed.has('columnSizing') ||\n changed.has('columnOrder') ||\n changed.has('pinnedRows')\n ) {\n if (this.#columnsChanged) {\n this.#autoWidths.sync(columns.filter((c) => c.width === 'auto').map((c) => c.id));\n }\n this.#table.update({\n columns,\n data: this.data,\n getRowId: this.getRowId,\n sorting: this.#sorting.value,\n columnSizing: this.#sizing.value,\n columnOrder: this.#order.value,\n pinnedRows: this.pinnedRows,\n });\n }\n // A new page cache (new source, sort order or refresh) or none, and new measured widths.\n const autoWidths = this.#autoWidths.widths;\n this.#autoWidthsChanged = autoWidths !== this.#pushedAutoWidths;\n this.#pushedAutoWidths = autoWidths;\n this.#table.update({ remote: this.#data.rows, autoWidths });\n const model = this.#table.model;\n this.#reconcileActive(model);\n const active = this.#active;\n // -1 tells assistive tech the total is unknown (a data source still growing).\n const unknownTotal = this.#data.rows?.totalKnown === false;\n const layout = layoutOf(model);\n this.#internals.ariaRowCount = unknownTotal ? '-1' : String(layout.total);\n this.#internals.ariaColCount = String(model.columns.length);\n // The header and pinned rows scroll with the body, one row each.\n const extra = (1 + layout.top + layout.bottom) * this.#rowPx;\n this.#virtual.configure({\n count: model.rowCount,\n rowHeight: this.#rowPx,\n cap: bodyCap(model.rowCount * this.#rowPx, extra),\n overscan: Math.max(0, this.overscan),\n rowIdAt: (index) => this.#rowId(model, index),\n // The active body row stays rendered, so the tab stop and focus survive scrolling.\n keep:\n active?.section !== 'body' || active.rowId === undefined\n ? undefined\n : { id: active.rowId, index: active.index },\n });\n }\n\n protected override render(): TemplateResult {\n const model = this.#table.model;\n const columns = model.columns;\n this.#window = this.#virtual.computeWindow();\n const pinnedWidth = (side: 'start' | 'end') =>\n columns.reduce((sum, c) => (c.pin === side ? sum + c.width : sum), 0);\n const pinned = (side: 'start' | 'end') => `${String(pinnedWidth(side))}px`;\n const layout = layoutOf(model);\n const style: Record<string, string> = {\n '--_cols': columns.map(track).join(' '),\n '--_width': `${String(model.totalWidth)}px`,\n '--_pin-start': pinned('start'),\n '--_pin-end': pinned('end'),\n '--_pin-top-rows': String(layout.top),\n '--_pin-bottom-rows': String(layout.bottom),\n };\n const active = this.#active;\n const activeIn = (section: GridRow['section']): ActiveCell | undefined =>\n active?.section === section ? { index: active.index, col: active.col } : undefined;\n const firstIndex = (section: GridRow['section']) => layout.ariaRowIndex({ section, index: 0 });\n if (this.rowHeight !== undefined && this.rowHeight > 0) {\n style['--_row-height'] = `${String(this.rowHeight)}px`;\n }\n return html`<div\n part=\"table\"\n role=\"presentation\"\n style=${styleMap(style)}\n ?data-dragging=${this.#drag !== undefined}\n @keydown=${this.#onKeydown}\n @focusin=${this.#onFocusin}\n @click=${this.#onClick}\n >\n ${renderHeader(columns, this.#headerHandlers, activeIn('header')?.col, this.#drag)}\n ${renderPinnedRows('top', layout.top, columns, firstIndex('top'), activeIn('top'))}\n ${\n model.rowCount === 0\n ? html`<div part=\"empty\"><slot name=\"empty\">No rows</slot></div>`\n : renderBody(\n this.#window.rows,\n columns,\n this.#window.totalSize,\n activeIn('body'),\n firstIndex('body'),\n this.#loading(),\n )\n }\n ${renderPinnedRows('bottom', layout.bottom, columns, firstIndex('bottom'), activeIn('bottom'))}\n <div class=\"probe\" aria-hidden=\"true\"></div>\n </div>\n ${pinShadow('start', pinnedWidth('start'), layout.total - 1, this.#rowPx)}\n ${pinShadow('end', pinnedWidth('end'), layout.total - 1, this.#rowPx)}`;\n }\n\n protected override firstUpdated(): void {\n this.#observeProbe();\n this.#measureRowHeight();\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n const model = this.#table.model;\n renderLightDom(this, model, this.#window.rows, this.#lightDomEnd());\n this.#measureAutoWidths(model);\n if (this.#scrollToTop) {\n this.#scrollToTop = false;\n const scroller = this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]');\n if (scroller) scroller.scrollTop = 0;\n }\n if (\n this.#columnsChanged ||\n changed.has('columnSizing') ||\n changed.has('columnOrder') ||\n this.#autoWidthsChanged\n ) {\n this.#pinScroll.measure();\n }\n if (this.#focusPending) {\n this.#focusPending = false;\n this.#focusActive();\n }\n if (changed.has('density') || changed.has('rowHeight')) this.#measureRowHeight();\n if (this.#appliedResizes.size > 0) {\n const details = [...this.#appliedResizes.values()];\n this.#appliedResizes.clear();\n for (const detail of details) fire(this, COLUMN_RESIZE, detail);\n }\n if (this.#announceMove) {\n this.#announceMoved(model, this.#announceMove);\n this.#announceMove = undefined;\n }\n if (this.#appliedReorders.size > 0) {\n const details = [...this.#appliedReorders.values()];\n this.#appliedReorders.clear();\n for (const detail of details) fire(this, COLUMN_REORDER, detail);\n }\n if (this.#appliedSort) {\n const sorting = this.#appliedSort;\n this.#appliedSort = undefined;\n fire(this, SORT_CHANGE, { sorting });\n }\n const { range } = this.#window;\n const key = range ? `${String(range.start)}:${String(range.end)}` : '';\n if (range && key !== this.#lastRange) {\n this.#lastRange = key;\n fire(this, RANGE_CHANGE, { start: range.start, end: range.end });\n }\n if (range) {\n // The rendered rows: visible plus overscan, end exclusive.\n const over = Math.max(0, this.overscan);\n this.#data.request(Math.max(0, range.start - over), range.end + 1 + over);\n }\n for (const detail of this.#data.takeErrors()) fire(this, LOAD_ERROR, detail);\n }\n\n /**\n * Measures the `width: 'auto'` columns once loaded body rows render, or right\n * away when there are no rows (the header and pinned rows only). While a data\n * source's first rows load, they keep the default width. A changed width\n * renders once more.\n */\n #measureAutoWidths(model: TableModel<T, CellContent>): void {\n const loaded = this.#window.rows.some((r) => model.rowAt(r.index) !== undefined);\n if (!loaded && model.rowCount > 0) return;\n if (this.#autoWidths.measure(this.renderRoot, model.columns, loaded)) this.requestUpdate();\n }\n\n /**\n * Loading state for the body while a data source is set: the state of each\n * row, and a Retry button on the first visible row of each failed page.\n */\n #loading(): Loading | undefined {\n const cache = this.#data.rows;\n if (!cache) return undefined;\n const top = this.#window.range?.start ?? 0;\n const firstByPage = new Map<number, number>();\n for (const { index } of this.#window.rows) {\n if (index < top || cache.stateAt(index) !== 'error') continue;\n const page = cache.pageOf(index);\n const first = firstByPage.get(page);\n if (first === undefined || index < first) firstByPage.set(page, index);\n }\n const retry = new Map<number, string>();\n for (const [page, index] of firstByPage) {\n const start = page * cache.pageSize;\n const end = Math.min(start + cache.pageSize, cache.rowCount);\n retry.set(index, `Retry loading rows ${String(start + 1)} to ${String(end)}`);\n }\n return { stateAt: (index) => cache.stateAt(index), retry, onRetry: this.#onRetry };\n }\n\n readonly #onRetry = (event: Event) => {\n const button = event.currentTarget as HTMLElement;\n // The button goes away with the retry; keep focus in the grid, on its cell.\n if (button.matches(':focus')) button.parentElement?.focus({ preventScroll: true });\n this.#data.retry(Number(button.dataset.row));\n };\n\n /**\n * A row's id. A data source row that hasn't loaded gets a stand-in: the\n * active cell's row id if it sits there (so its DOM and focus stay put), else\n * the index, which is also its real id when there is no `getRowId`.\n */\n #rowId(model: TableModel<T, CellContent>, index: number): string {\n const id = model.rowAt(index)?.id;\n if (id !== undefined) return id;\n const active = this.#active;\n if (active?.index === index && active.rowId !== undefined) return active.rowId;\n return this.#placeholderId(index);\n }\n\n /** The id of an unloaded row: its index, or a reserved string if `getRowId` makes the ids. */\n #placeholderId(index: number): string {\n return this.getRowId ? `\\u0000${String(index)}` : String(index);\n }\n\n readonly #headerHandlers = {\n click: (event: MouseEvent) => {\n const id = sortColumnOf(event);\n if (id !== undefined) this.#requestSort(id);\n },\n pointerdown: (event: PointerEvent) => {\n if (event.button !== 0) return;\n const handle = event.composedPath()[0];\n if (!(handle instanceof HTMLElement)) return;\n const id = handle.dataset.resizeCol;\n const cell = handle.parentElement;\n if (id !== undefined && cell) {\n startResizeDrag(\n handle,\n event,\n cell.getBoundingClientRect().width,\n this.#direction(),\n (w) => {\n this.#requestResize(id, w);\n },\n );\n return;\n }\n this.#startReorder(event);\n },\n /** A double-click on a resize handle fits the column to its rendered content. */\n dblclick: (event: MouseEvent) => {\n const handle = event.composedPath()[0];\n const id = handle instanceof HTMLElement ? handle.dataset.resizeCol : undefined;\n if (id === undefined) return;\n this.#requestResizes(measureColumns(this.renderRoot, [id]));\n },\n };\n\n /**\n * Keys on a focused cell or header: arrows by cell, Home/End along the row,\n * PageUp/PageDown by a page of rows (the view scrolls with it), Ctrl+Home/End\n * (or Cmd) to the first header and the last cell. Keys from content inside a\n * cell (an input, a button) are left to that content.\n */\n readonly #onKeydown = (event: KeyboardEvent) => {\n const cell = gridCell(event.composedPath()[0] ?? event.target ?? this);\n const id = cell?.dataset.col;\n if (!cell || id === undefined) return;\n const scroller = event.currentTarget as HTMLElement;\n if (event.key === 'Tab' && event.shiftKey) {\n // Firefox makes the scroll container a tab stop, so Shift+Tab would stop\n // on it before leaving the grid. Take it out of the tab order for this\n // one move only: a tabindex there for good would expose it as a node of\n // its own between the grid and its rows.\n scroller.tabIndex = -1;\n // Put it back once focus has actually moved (a timer can run first).\n cell.addEventListener(\n 'focusout',\n () => {\n scroller.removeAttribute('tabindex');\n },\n { once: true },\n );\n return;\n }\n const inHeader = cell.getAttribute('role') === 'columnheader';\n const { key } = event;\n const arrow = key === 'ArrowLeft' || key === 'ArrowRight';\n if (inHeader && arrow && event.altKey && event.shiftKey) {\n event.preventDefault();\n // Logical: the arrow pointing toward the inline end moves the column that way.\n const towardEnd = (key === 'ArrowRight') === (this.#direction() === 1);\n this.#moveByKey(id, towardEnd ? 1 : -1);\n return;\n }\n if (inHeader && event.altKey && arrow) {\n event.preventDefault();\n // Logical: the arrow pointing toward the inline end grows the column.\n const towardEnd = (key === 'ArrowRight') === (this.#direction() === 1);\n this.#requestResize(\n id,\n this.#currentWidth(id, cell) + (towardEnd ? RESIZE_STEP : -RESIZE_STEP),\n );\n return;\n }\n if (inHeader && (key === 'Enter' || key === ' ') && cell.dataset.sortCol !== undefined) {\n event.preventDefault();\n this.#requestSort(id);\n return;\n }\n // Ctrl (Cmd on macOS) only goes with Home and End: to the corners.\n const corner = event.ctrlKey || event.metaKey;\n if (event.altKey || event.shiftKey || (corner && key !== 'Home' && key !== 'End')) return;\n const model = this.#table.model;\n const layout = layoutOf(model);\n const from = inHeader ? HEADER : gridRowOf(cell.parentElement, layout);\n if (!from) return;\n if (!inHeader && key === 'Enter') {\n // Enter on a body cell does what a click does; on a failed row, it retries.\n event.preventDefault();\n if (from.section === 'body' && this.#data.stateAt(from.index) === 'error') {\n this.#data.retry(from.index);\n } else {\n this.#activate(event.composedPath());\n }\n return;\n }\n const columns = model.columns;\n // Rows step by grid position: header, pinned top, body, pinned bottom.\n let pos = layout.position(from);\n const last = layout.total - 1;\n const bodyFirst = layout.position({ section: 'body', index: 0 });\n const bodyLast = bodyFirst + layout.body - 1;\n // Whole rows between the sticky header and pinned rows (each one row tall).\n const fit = Math.floor(scroller.clientHeight / this.#rowPx + 0.01);\n const page = Math.max(1, fit - 1 - layout.top - layout.bottom);\n let col = columns.findIndex((c) => c.id === id);\n switch (key) {\n case 'PageDown':\n // Pages through the body: from above it, a page into it; it stops at its last row.\n if (layout.body > 0 && pos <= bodyLast) {\n pos = Math.min(Math.max(pos, bodyFirst - 1) + page, bodyLast);\n }\n break;\n case 'PageUp':\n // Stays in the body; ArrowUp or Ctrl+Home goes on to the rows above it.\n if (layout.body > 0 && pos > bodyFirst) {\n pos = Math.max(Math.min(pos, bodyLast + 1) - page, bodyFirst);\n }\n break;\n case 'ArrowDown':\n pos = Math.min(pos + 1, last);\n break;\n case 'ArrowUp':\n pos = Math.max(pos - 1, 0);\n break;\n case 'ArrowRight':\n col += this.#direction();\n break;\n case 'ArrowLeft':\n col -= this.#direction();\n break;\n case 'Home':\n col = 0;\n if (corner) {\n pos = 0;\n scroller.scrollTop = 0;\n }\n break;\n case 'End':\n col = columns.length - 1;\n if (corner) pos = last;\n break;\n default:\n return;\n }\n event.preventDefault();\n const row = layout.at(pos) ?? HEADER;\n // PageUp/PageDown scroll by as many rows as focus moved, so the focused cell\n // keeps its place on screen. The ends clamp; focusing scrolls the rest of\n // the way. Through the virtualizer: a scaled body's px aren't rows.\n if (key.startsWith('Page') && from.section === 'body' && row.section === 'body') {\n this.#virtual.scrollBy((row.index - from.index) * this.#rowPx);\n }\n // Ctrl+End onto a bottom pinned row: show the end of the body too, as\n // Ctrl+Home shows its start.\n if (corner && key === 'End' && row.section === 'bottom') {\n scroller.scrollTop = scroller.scrollHeight;\n }\n const target = columns[Math.min(Math.max(col, 0), columns.length - 1)];\n if (target) this.#moveTo(row, target.id, model);\n };\n\n /** Focus that lands in a cell (a click, or content inside it) makes that cell active. */\n readonly #onFocusin = (event: FocusEvent) => {\n // Tab into the grid landed on the scroll container (Firefox makes it a tab\n // stop): move on to the grid's one tab stop, the active cell. Only when focus\n // came from outside the grid: coming from inside means the user is leaving,\n // and sending them back would trap the keyboard.\n const scroller = event.currentTarget as HTMLElement;\n if (event.composedPath()[0] === scroller) {\n const from = event.relatedTarget;\n if (!(from instanceof Node && scroller.contains(from))) {\n this.#focusPending = true;\n this.requestUpdate();\n }\n return;\n }\n for (const target of event.composedPath()) {\n const cell = gridCell(target);\n if (cell?.dataset.col !== undefined) {\n const model = this.#table.model;\n const row =\n cell.getAttribute('role') === 'columnheader'\n ? HEADER\n : gridRowOf(cell.parentElement, layoutOf(model));\n const { col } = cell.dataset;\n const prev = this.#active;\n if (\n row &&\n (row.section !== prev?.section || row.index !== prev.index || col !== prev.col)\n ) {\n this.#active = { ...row, rowId: this.#gridRowId(model, row), col };\n this.requestUpdate();\n }\n return;\n }\n if (target === event.currentTarget) return;\n }\n };\n\n /** `argus-cell-click`, then `argus-row-click`, for clicks in the body. */\n readonly #onClick = (event: MouseEvent) => {\n this.#activate(event.composedPath());\n };\n\n /**\n * Fires `argus-cell-click` (when a cell is on the path), then `argus-row-click`,\n * for the body or pinned row on an event path. Clicks and Enter on a cell use\n * it. Rows that haven't loaded and the header fire nothing.\n */\n #activate(path: EventTarget[]): void {\n let columnId: string | undefined;\n for (const target of path) {\n if (!(target instanceof HTMLElement)) continue;\n const role = target.getAttribute('role');\n if (role === 'gridcell') columnId = target.dataset.col;\n if (role !== 'row') continue;\n const model = this.#table.model;\n const at = gridRowOf(target, layoutOf(model));\n if (!at || at.section === 'header') return;\n const { index } = at;\n if (at.section === 'body') {\n const row = model.rowAt(index);\n if (!row) return;\n if (columnId !== undefined) {\n fire(this, CELL_CLICK, {\n row: row.original,\n columnId,\n value: model.valueAt(index, columnId),\n });\n }\n fire(this, ROW_CLICK, { row: row.original, rowId: row.id, index });\n return;\n }\n const pinned = at.section;\n const row = model.pinnedRowAt(pinned, index);\n if (!row) return;\n if (columnId !== undefined) {\n fire(this, CELL_CLICK, {\n row: row.original,\n columnId,\n value: model.pinnedValueAt(pinned, index, columnId),\n pinned,\n });\n }\n fire(this, ROW_CLICK, { row: row.original, rowId: row.id, index, pinned });\n return;\n }\n }\n\n /** The id of a grid row: a body or pinned row's id; none for the header. */\n #gridRowId(model: TableModel<T, CellContent>, row: GridRow): string | undefined {\n switch (row.section) {\n case 'header':\n return undefined;\n case 'body':\n return this.#rowId(model, row.index);\n default:\n return model.pinnedRowAt(row.section, row.index)?.id;\n }\n }\n\n /** Makes a cell active and focuses it after the update. The keep-rendered rule renders its row. */\n #moveTo(row: GridRow, col: string, model: TableModel<T, CellContent>): void {\n this.#active = { ...row, rowId: this.#gridRowId(model, row), col };\n this.#focusPending = true;\n this.requestUpdate();\n }\n\n #focusActive(): void {\n const active = this.#active;\n if (!active) return;\n const col = CSS.escape(active.col);\n // aria-rowindex is unique across the grid: header, pinned and body rows.\n const index = layoutOf(this.#table.model).ariaRowIndex(active);\n const cell = this.renderRoot.querySelector<HTMLElement>(\n `[role='row'][aria-rowindex=\"${String(index)}\"] > [data-col=\"${col}\"]`,\n );\n if (!cell) return;\n cell.focus({ preventScroll: true });\n // A scaled body moves `ratio` px of rows per px scrolled, so the browser can't\n // scroll a body row into view: the virtualizer does, and the next update\n // (from its scroll) shows the row and scrolls sideways.\n if (active.section === 'body' && this.#virtual.scaled) {\n const layout = layoutOf(this.#table.model);\n const before = (1 + layout.top) * this.#rowPx;\n if (this.#virtual.reveal(active.index, before, layout.bottom * this.#rowPx)) {\n this.#focusPending = true;\n return;\n }\n }\n cell.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n\n /**\n * Keeps the active cell valid after columns or rows change. In the body: on the\n * same row id when it still exists (it may have moved), else at the same\n * index, clamped. A data source row that isn't loaded (yet, or any more) keeps\n * its id. A pinned row stays at its index, clamped to its list. A row whose\n * section has no rows left gives way to the header, the default. If its row\n * went away while the grid had focus, focus follows to the replacement.\n */\n #reconcileActive(model: TableModel<T, CellContent>): void {\n const columns = model.columns;\n const first = columns[0];\n if (!first) {\n this.#active = undefined;\n return;\n }\n const prev = this.#active ?? { ...HEADER, rowId: undefined, col: first.id };\n const col = columns.some((c) => c.id === prev.col) ? prev.col : first.id;\n let { section, index, rowId } = prev;\n let moved = false;\n if (section === 'body' && rowId !== undefined) {\n const found = model.indexOf(rowId);\n const unloaded = index < model.rowCount && model.rowAt(index) === undefined;\n if (found !== undefined) {\n index = found;\n } else if (!unloaded) {\n index = Math.min(index, model.rowCount - 1);\n rowId = index >= 0 ? (model.rowAt(index)?.id ?? this.#placeholderId(index)) : undefined;\n moved = true;\n }\n } else if (section === 'top' || section === 'bottom') {\n const count = model.pinnedCount(section);\n if (index >= count) {\n index = count - 1;\n moved = true;\n }\n rowId = index >= 0 ? model.pinnedRowAt(section, index)?.id : undefined;\n }\n if (index < 0) {\n ({ section, index } = HEADER);\n rowId = undefined;\n }\n if (moved && this.matches(':focus-within')) this.#focusPending = true;\n if (\n section !== prev.section ||\n index !== prev.index ||\n rowId !== prev.rowId ||\n col !== prev.col ||\n !this.#active\n ) {\n this.#active = { section, index, rowId, col };\n }\n }\n\n /**\n * The width a resize starts from: the latest requested width (key presses can\n * come faster than renders), else the model's fixed width, else the rendered\n * width of a flex column.\n */\n #currentWidth(columnId: string, cell: HTMLElement): number {\n const sized = this.#sizing.value[columnId];\n if (sized !== undefined) return sized;\n const view = this.#table.model.columns.find((c) => c.id === columnId);\n return view && view.flex === undefined ? view.width : cell.getBoundingClientRect().width;\n }\n\n #direction(): 1 | -1 {\n return getComputedStyle(this).direction === 'rtl' ? -1 : 1;\n }\n\n /** Sets one column's width (clamped by core), through the controlled/uncontrolled rules. */\n #requestResize(columnId: string, width: number): void {\n this.#requestResizes(new Map([[columnId, width]]));\n }\n\n /**\n * Sets column widths (clamped by core) in one change, through the\n * controlled/uncontrolled rules. One `argus-column-resize` per column that\n * changes, each with the whole new sizing.\n */\n #requestResizes(widths: ReadonlyMap<string, number>): void {\n const model = this.#table.model;\n const old = this.#sizing.value;\n const targets: [string, number][] = [];\n for (const [columnId, width] of widths) {\n const target = model.nextSizing(columnId, width)?.[columnId];\n if (target !== undefined && target !== old[columnId]) targets.push([columnId, target]);\n }\n if (targets.length === 0) return;\n const { value, applied } = this.#sizing.request({ ...old, ...Object.fromEntries(targets) });\n const details = targets.map(([columnId, width]) => ({ columnId, width, sizing: value }));\n if (applied) {\n // Only the latest width per column fires, all with the latest sizing.\n for (const detail of this.#appliedResizes.values()) detail.sizing = value;\n for (const detail of details) this.#appliedResizes.set(detail.columnId, detail);\n this.requestUpdate('columnSizing', old);\n } else {\n for (const detail of details) fire(this, COLUMN_RESIZE, detail);\n }\n }\n\n /**\n * Moves a column to position `to` in the whole order (within its pin group),\n * through the controlled/uncontrolled rules. Starts from the latest requested\n * order, so moves can come faster than renders. `false` if it can't move there.\n */\n #requestReorder(columnId: string, to: number): boolean {\n const old = this.#order.value;\n const next = this.#table.model.nextOrder(columnId, to, old);\n if (!next) return false;\n const { value, applied } = this.#order.request(next);\n if (applied) {\n for (const detail of this.#appliedReorders.values()) detail.order = value;\n this.#appliedReorders.set(columnId, { columnId, order: value });\n this.requestUpdate('columnOrder', old);\n } else {\n fire(this, COLUMN_REORDER, { columnId, order: value });\n }\n return true;\n }\n\n /** Alt+Shift+Arrow on a header: one step toward the start (-1) or the end (1). */\n #moveByKey(columnId: string, step: 1 | -1): void {\n const model = this.#table.model;\n const from = model.orderOf(this.#order.value).indexOf(columnId);\n const view = model.columns.find((c) => c.id === columnId);\n if (from < 0 || !view) return;\n if (!this.#requestReorder(columnId, from + step)) return;\n // The header node moves, which drops its focus: focus it again once rendered.\n this.#focusPending = true;\n this.#announceMove ??= { id: columnId, from: view.colIndex };\n this.requestUpdate();\n }\n\n /** Tells screen readers where a column moved from the keyboard went. */\n #announceMoved(model: TableModel<T, CellContent>, move: { id: string; from: number }): void {\n const view = model.columns.find((c) => c.id === move.id);\n if (!view || view.colIndex === move.from) return;\n const header = this.renderRoot.querySelector(\n `[role='columnheader'][data-col=\"${CSS.escape(move.id)}\"] > slot`,\n );\n const name =\n header instanceof HTMLSlotElement\n ? header\n .assignedNodes({ flatten: true })\n .map((n) => n.textContent)\n .join('')\n .trim()\n : '';\n announce(\n this.ownerDocument,\n `${name || move.id} moved to column ${String(view.colIndex)} of ${String(model.columns.length)}`,\n );\n }\n\n /** A press on a reorderable header: becomes a drag once the pointer moves. */\n #startReorder(down: PointerEvent): void {\n const cell = down\n .composedPath()\n .find(\n (t): t is HTMLElement =>\n t instanceof HTMLElement && t.getAttribute('role') === 'columnheader',\n );\n const columnId = cell?.dataset.moveCol;\n if (!cell || columnId === undefined || !canStartReorder(down, cell)) return;\n const scroller = this.renderRoot.querySelector<HTMLElement>('[part~=\"table\"]');\n if (!scroller) return;\n const pin = this.#table.model.columns.find((c) => c.id === columnId)?.pin;\n startReorderDrag(cell, down, {\n scroller,\n targetAt: (x) => dropTarget(this.#dropSlots(pin), columnId, x, this.#direction()),\n scrollArea: () => (pin === undefined ? this.#scrollArea(scroller) : undefined),\n onStart: () => {\n this.#drag = { columnId, target: undefined };\n this.requestUpdate();\n },\n onTarget: (target) => {\n this.#drag = { columnId, target };\n this.requestUpdate();\n },\n onDrop: (target) => {\n this.#drag = undefined;\n if (target && this.#requestReorder(columnId, target.to)) {\n // The header node moves, which drops its focus: focus it again once rendered.\n if (this.matches(':focus-within')) this.#focusPending = true;\n }\n this.requestUpdate();\n },\n onCancel: () => {\n this.#drag = undefined;\n this.requestUpdate();\n },\n });\n }\n\n /** The rendered headers of one pin group, with their positions in the whole order. */\n #dropSlots(pin: ColumnView<T, CellContent>['pin']): DropSlot[] {\n const slots: DropSlot[] = [];\n this.#table.model.columns.forEach((c, index) => {\n if (c.pin !== pin) return;\n const cell = this.renderRoot.querySelector(\n `[role='columnheader'][data-col=\"${CSS.escape(c.id)}\"]`,\n );\n if (cell) slots.push({ id: c.id, index, rect: cell.getBoundingClientRect() });\n });\n return slots;\n }\n\n /** Where the scrolling columns show: the scroller's inside, less the pinned columns. */\n #scrollArea(scroller: HTMLElement): { left: number; right: number } {\n const columns = this.#table.model.columns;\n const width = (side: 'start' | 'end') =>\n columns.reduce((sum, c) => (c.pin === side ? sum + c.width : sum), 0);\n const ltr = this.#direction() === 1;\n const left = scroller.getBoundingClientRect().left + scroller.clientLeft;\n return {\n left: left + width(ltr ? 'start' : 'end'),\n right: left + scroller.clientWidth - width(ltr ? 'end' : 'start'),\n };\n }\n\n /** asc → desc → unsorted, through the controlled/uncontrolled rules. */\n #requestSort(columnId: string): void {\n const next = this.#table.model.nextSorting(columnId);\n if (!next) return;\n const old = this.#sorting.value;\n const { value, applied } = this.#sorting.request(next);\n if (applied) {\n this.#appliedSort = value;\n this.requestUpdate('sorting', old);\n } else {\n fire(this, SORT_CHANGE, { sorting: value });\n }\n }\n\n #observeProbe(): void {\n const probe = this.renderRoot.querySelector('.probe');\n if (!probe) return;\n this.#probeObserver ??= new ResizeObserver(() => {\n this.#measureRowHeight();\n });\n this.#probeObserver.observe(probe);\n }\n\n /** Reads the resolved row height, so themes and density change the virtualizer too. */\n #measureRowHeight(): void {\n const probe = this.renderRoot.querySelector('.probe');\n const px = probe?.getBoundingClientRect().height ?? 0;\n if (px > 0 && Math.abs(px - this.#rowPx) > 0.01) {\n this.#rowPx = px;\n this.requestUpdate();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'argus-table': ArgusTable;\n }\n}\n"],"ignoreList":[0,1,2,3,4,5,6,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,64,65,66,67,68,69,73,74],"mappings":"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"}