UNPKG

@bizhermit/react-sdk

Version:
1 lines 59.7 kB
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,l,s){void 0===s&&(s=l);var i=Object.getOwnPropertyDescriptor(t,l);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[l]}}),Object.defineProperty(e,s,i)}:function(e,t,l,s){void 0===s&&(s=l),e[s]=t[l]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var l in e)"default"!==l&&Object.prototype.hasOwnProperty.call(e,l)&&__createBinding(t,e,l);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ListViewStyle=exports.ListViewClass=exports.useListView=exports.listViewDefaultRowHeight=exports.listViewIptCn=exports.listViewCn=void 0;const string_utils_1=__importDefault(require("@bizhermit/basic-utils/dist/string-utils")),react_1=__importStar(require("react")),client_1=require("react-dom/client"),css_var_1=__importStar(require("../../styles/css-var")),layout_provider_1=require("../../styles/layout-provider"),jsx_style_1=__importDefault(require("../../styles/jsx-style")),resizer_1=__importDefault(require("../resizer")),attributes_1=require("../../utils/attributes"),dom_1=require("../../utils/dom"),cursor_1=require("../../utils/cursor"),core_style_1=require("../../styles/core-style"),input_style_1=require("../../styles/input-style"),cn="bh-lv";exports.listViewCn=cn,exports.listViewIptCn="bh-lv_ipt";const initializedDataName="_lv_init",listViewDefaultRowHeight=()=>(0,css_var_1.cssParamsSize)()+4;exports.listViewDefaultRowHeight=listViewDefaultRowHeight;const ListView=react_1.default.forwardRef(((e,t)=>{const l=(0,react_1.useRef)(),s=(0,react_1.useRef)(),i=(0,react_1.useRef)(!1),n=(0,layout_provider_1.useLayout)();return(0,react_1.useEffect)((()=>{i.current&&s.current?.setItems(e.$items)}),[e.$items]),(0,react_1.useEffect)((()=>{i.current&&s.current?.setColumns(e.$columns)}),[e.$preventColumnsMemo?e.$columns:void 0]),(0,react_1.useEffect)((()=>{i.current&&s.current?.setOptions(e.$options)}),[e.$preventOptionsMemo?e.$options:void 0]),(0,react_1.useEffect)((()=>{i.current&&s.current.setStyleContext(n)}),[n]),(0,react_1.useEffect)((()=>{e.$hook?._set({focus:()=>l.current?.focus(),getItems:()=>s.current.getValue(),setItems:e=>s.current.setItems(e),getLength:()=>s.current.getLength(),getFilteredLength:()=>s.current.getFilteredLength(),getFilteredItems:()=>s.current.getFilteredValue(),setFilter:e=>s.current.setFilter(e),getDisplayedItems:()=>s.current.getSortedValue(),select:(e,t)=>s.current.select(e,t),clearSelect:()=>s.current.clearSelect(),getSelectedRows:()=>s.current.getSelectedRows(),getSelectedCells:()=>s.current.getSelectedCells(),render:()=>s.current.render()})}),[e.$hook?._set]),(0,react_1.useEffect)((()=>(s.current=new ListViewClass(l.current,e,n),i.current=!0,()=>{s.current?.dispose()})),[]),react_1.default.createElement("div",{...(0,attributes_1.attributesWithoutChildren)(e,"bh-lv-wrap",(0,attributes_1.ftoCn)(e.$fto)),ref:t,"data-padding":e.$padding,"data-border":e.$border,"data-radius":e.$radius},(0,react_1.useMemo)((()=>react_1.default.createElement("div",{ref:l})),[]),e.$resize?react_1.default.createElement(resizer_1.default,{direction:"boolean"==typeof e.$resize?"xy":e.$resize}):react_1.default.createElement(react_1.default.Fragment,null),exports.ListViewStyle,(0,react_1.useMemo)((()=>{const t=[],l=e=>{null!=e&&e.forEach((e=>{e.jsxStyle&&t.push(react_1.default.createElement(react_1.Fragment,{key:e.name??string_utils_1.default.generateUuidV4()},e.jsxStyle)),e._rows?.forEach((e=>l(e.columns)))}))};return l(e.$columns),t}),[e.$columns]))})),useListView=()=>{const e=(0,react_1.useRef)({});return{focus:(0,react_1.useCallback)((()=>{e.current.focus?.()}),[]),clearSelect:(0,react_1.useCallback)((()=>{e.current.clearSelect?.()}),[]),getDisplayedItems:(0,react_1.useCallback)((()=>e.current.getDisplayedItems?.()),[]),getFilteredItems:(0,react_1.useCallback)((()=>e.current.getFilteredItems?.()),[]),getFilteredLength:(0,react_1.useCallback)((()=>e.current.getFilteredLength?.()),[]),setFilter:(0,react_1.useCallback)((t=>{e.current.setFilter(t)}),[]),getItems:(0,react_1.useCallback)((()=>e.current.getItems?.()),[]),getLength:(0,react_1.useCallback)((()=>e.current.getLength?.()),[]),getSelectedCells:(0,react_1.useCallback)((()=>e.current.getSelectedCells?.()),[]),getSelectedRows:(0,react_1.useCallback)((()=>e.current.getSelectedRows?.()),[]),render:(0,react_1.useCallback)((()=>{e.current.render?.()}),[]),select:(0,react_1.useCallback)(((t,l)=>{e.current.select?.(t,l)}),[]),setItems:(0,react_1.useCallback)((t=>{e.current.setItems?.(t)}),[]),_set:(0,react_1.useCallback)((t=>{e.current={...e.current,...t}}),[])}};exports.useListView=useListView;const EditEffect=({effect:e})=>((0,react_1.useEffect)(e),react_1.default.createElement(react_1.default.Fragment,null));class ListViewClass extends dom_1.DomComponentClass{element;layoutCtx;initialized;resizeObserver;headerElement;headerRowElement;bodyElement;dummyElement;footerElement;footerRowElement;editElement;editMaskElement;editRoot;columns;renderColumns;originItems;bindingItems;filteredItems;sortedItems;rows;selectedRows;lastSelectedCell;lastSelectedBaseCell;lastScrolledTop;lastScrolledLeft;maxFirstIndex;firstIndex;lastChangedX;hasFillColumn;editTarget;scrollingMode;scrollingId;scrollingInterval;cloneBase;rowNumberColumn;headerVisible;headerHeight;footerVisible;footerHeight;rowHeight;selectMode;multiSelect;oddEven;dragScroll;rowNumber;sort;sorted;externalSort;filter;clickCell;filtered;enterIsClick;colBorderless;rowBorderless;scrollTimeoutInterval;endEditEventListener;itemsCallBindedRev=0;colCallBindedRev=0;constructor(e,t,l){if(super(),this.element=e,this.layoutCtx=l,this.initialized=!1,this.itemsCallBindedRev=0,this.colCallBindedRev=0,null==e)throw new Error("ListView: not found root element.");this.columns=[],this.renderColumns=[],this.sortedItems=[],this.rows=[],this.selectedRows={},this.lastSelectedCell=null,this.lastSelectedBaseCell=null,this.editTarget=null,this.lastScrolledTop=-1,this.lastScrolledLeft=-1,this.firstIndex=-1,this.scrollingMode="stop",this.scrollingId=0,this.scrollingInterval=0,this.scrollTimeoutInterval=5,this.endEditEventListener=null,this.generateElements(),this.rowNumberColumn={name:"_rnum",vName:"_rnum",label:"row number",dataType:"number",width:40,minWidth:40,cells:[],headerCellElement:(0,dom_1.cloneDomElement)(this.cloneBase.cellElem),footerCellElement:(0,dom_1.cloneDomElement)(this.cloneBase.cellElem),initializeParameters:null,dispose:null,cellInitialize:e=>{const t=(0,dom_1.cloneDomElement)(this.cloneBase.labelCellElem);e.contentElements.push(t),e.element.appendChild(t)},renderCell:e=>{e.cache.index!==e.row.index&&(e.contentElements[0].textContent=String(e.row.index+1),e.cache.index=e.row.index)},textAlign:"center",sort:null,sortOrder:"",fill:!1,fixed:!0,fixedLeft:0,left:0,resize:!1,tabStop:!1,notScrollFocusWhenTabStop:!1,preventClearSelected:!1,disabled:!1,render:!0,editedRowData:null,built:!1},this.setOptions(t.$options),this.initialized=!0,this.optimizeElementsPosition(),this.bindColumns(t.$columns),this.bindItems(t.$items),this.optimizeDummySize(),this.render()}dispose(){this.disposeColumns(),this.disposeRows(),this.resizeObserver&&this.resizeObserver.disconnect(),this.editTarget?.useReact&&this.editRoot.unmount(),super.dispose()}setOptions(e={}){return this.setHeaderVisible(e.header),this.setHeaderHeight(e.headerHeight),this.setFooterVisible(e.footer),this.setFooterHeight(e.footerHeight),this.setRowHeight(e.rowHeight),this.setRowNumber(e.rowNumber),this.setSelectMode(e.selectMode),this.setMultiSelect(e.multiSelect),this.setOddEven(e.oddEven),this.setDragScroll(e.dragScroll),this.setSort(e.sort),this.setSorted(e.sorted),this.setExternalSort(e.externalSort),this.setFilter(e.filter),this.setClickCell(e.clickCell),this.setFiltered(e.filtered),this.setEnterIsClick(e.enterIsClick),this.setColBorderless(e.colBorderless),this.setRowBorderless(e.rowBorderless),this.setScrollTimeoutInterval(e.scrollTimeoutInterval),this}optimizeElementsPosition(){if(!this.initialized)return;let e=0;this.headerVisible?(e+=this.headerHeight,this.bodyElement.style.top=this.headerHeight+"px"):this.bodyElement.style.top="0px",this.footerVisible&&(e+=this.footerHeight),this.bodyElement.style.height=0===e?"100%":`calc(100% - ${e}px)`,this.renderWhenResized()}setHeaderVisible(e){const t=!1!==e;return t===this.headerVisible||(this.headerVisible=t,this.headerElement.style.display=this.headerVisible?null:"none",this.optimizeElementsPosition()),this}setHeaderHeight(e){const t=e||(0,exports.listViewDefaultRowHeight)();return t===this.headerHeight||(this.headerHeight=t,this.headerElement.style.height=this.headerHeight+"px",this.optimizeElementsPosition()),this}setFooterVisible(e){const t=!0===e;return t===this.footerVisible||(this.footerVisible=t,this.footerElement.style.display=this.footerVisible?null:"none",this.optimizeElementsPosition()),this}setFooterHeight(e){const t=e||(0,exports.listViewDefaultRowHeight)();return t===this.footerHeight||(this.footerHeight=t,this.footerElement.style.height=this.footerHeight+"px",this.footerElement.style.top=`calc(100% - ${this.footerHeight}px)`,this.optimizeElementsPosition()),this}setRowHeight(e){const t=e||(0,exports.listViewDefaultRowHeight)();if(t===this.rowHeight)return this;this.rowHeight=t,this.cloneBase.rowElem.style.height=`${this.rowHeight}px`;for(const e of this.rows)e.element.style.height=`${this.rowHeight}px`;return this}setRowNumber(e){const t=!1!==e;return t===this.rowNumber?this:(this.rowNumber=t,this.initialized?(this.buildColumns(),this):this)}setSelectMode(e){const t=e||"cell";if(t===this.selectMode)return this;if(this.selectMode=t,"none"===this.selectMode)this.bodyElement.removeAttribute("data-select");else this.bodyElement.setAttribute("data-select",this.selectMode);return this}setMultiSelect(e){const t=!0===e;return t===this.multiSelect||(this.multiSelect=t,this.clearSelectedRows()),this}setOddEven(e){const t=!1!==e;return t===this.oddEven||(this.oddEven=t,this.initialized&&this.renderWhenScrolled()),this}setDragScroll(e){const t=e??!0;return t===this.dragScroll||(this.dragScroll=t),this}setSort(e){const t=this.sort===e;return this.sort=e,this.initialized&&!t&&(this.sortItems(),this.optimizeMaxFirstIndex(),this.render()),this}setSorted(e){return this.sorted=e,this}setExternalSort(e){return this.externalSort=!0===e,this}setFilter(e){const t=this.filter===e;return this.filter=e,this.initialized&&!t&&(this.filterItems(),this.optimizeMaxFirstIndex(),this.render()),this}setClickCell(e){return this.clickCell=e,this}setFiltered(e){return this.filtered=e,this}setEnterIsClick(e){return!0===e===this.enterIsClick||(this.enterIsClick=e),this}setColBorderless(e){const t=!0===e;return t!==this.colBorderless&&this.initialized?(t?this.columnForEach((e=>{e.headerCellElement.setAttribute("data-bdl",""),e.footerCellElement.setAttribute("data-bdl",""),e.cells.forEach((e=>{e.element.setAttribute("data-bdl","")}))})):this.columnForEach((e=>{e.headerCellElement.removeAttribute("data-bdl"),e.footerCellElement.removeAttribute("data-bdl"),e.cells.forEach((e=>{e.element.removeAttribute("data-bdl")}))})),this):this}setRowBorderless(e){const t=!0===e;return t!==this.rowBorderless&&this.initialized?(t?(this.rows.forEach((e=>e.element.setAttribute("data-bdl",""))),this.headerRowElement.setAttribute("data-bdl",""),this.footerRowElement.setAttribute("data-bdl","")):(this.rows.forEach((e=>e.element.removeAttribute("data-bdl"))),this.headerRowElement.removeAttribute("data-bdl"),this.footerRowElement.removeAttribute("data-bdl")),this):this}setScrollTimeoutInterval(e){return this.scrollTimeoutInterval=Math.max(0,e??5),this}generateElements(){this.element.classList.add(cn,core_style_1.sbCn),this.element.tabIndex=-1,this.element.textContent="";const e=document.createElement("div");this.cloneBase={div:e,rowElem:(0,dom_1.cloneDomElement)(e),cellElem:(0,dom_1.cloneDomElement)(e),labelCellElem:(0,dom_1.cloneDomElement)(e)},this.cloneBase.rowElem.classList.add("bh-lv-row"),this.cloneBase.cellElem.classList.add("bh-lv-cell"),this.cloneBase.labelCellElem.classList.add("bh-lv-lbl"),this.headerElement=(0,dom_1.cloneDomElement)(e),this.headerElement.classList.add("bh-lv-header"),this.headerElement.appendChild(this.headerRowElement=(0,dom_1.cloneDomElement)(this.cloneBase.rowElem)),this.footerElement=(0,dom_1.cloneDomElement)(e),this.footerElement.classList.add("bh-lv-footer"),this.footerElement.appendChild(this.footerRowElement=(0,dom_1.cloneDomElement)(this.cloneBase.rowElem)),this.dummyElement=(0,dom_1.cloneDomElement)(e),this.dummyElement.classList.add("bh-lv-body-dummy"),this.element.appendChild(this.dummyElement),this.element.appendChild(this.headerElement),this.bodyElement=(0,dom_1.cloneDomElement)(e),this.bodyElement.classList.add("bh-lv-body"),this.element.appendChild(this.bodyElement),this.element.appendChild(this.footerElement),this.editMaskElement=(0,dom_1.cloneDomElement)(e),this.editMaskElement.classList.add("bh-lv-mask"),this.editMaskElement.style.display="none",this.element.appendChild(this.editMaskElement),this.editElement=(0,dom_1.cloneDomElement)(e),this.editElement.classList.add("bh-lv-edit"),this.editElement.style.visibility="hidden",this.editElement.style.display="none",this.element.appendChild(this.editElement);let t=null;this.addEvent(this.element,"scroll",(()=>{t||(t=setTimeout((()=>{this.endEdit(!1),this.renderWhenScrolled(),t=null}),this.scrollTimeoutInterval))}),{passive:!0}),this.addEvent(this.element,"keydown",(e=>{switch(e.key){case"ArrowUp":this.arrowUp(e.ctrlKey?10:1,this.multiSelect&&e.shiftKey),e.preventDefault();break;case"ArrowDown":this.arrowDown(e.ctrlKey?10:1,this.multiSelect&&e.shiftKey),e.preventDefault();break;case"ArrowLeft":this.arrowLeft(e.ctrlKey,this.multiSelect&&e.shiftKey),e.preventDefault();break;case"ArrowRight":this.arrowRight(e.ctrlKey,this.multiSelect&&e.shiftKey),e.preventDefault();break;case"Enter":this.endEdit(!0,{unmountTimeout:!0,callback:t=>{if(t){let t=this.element.scrollTop;return e.shiftKey?this.arrowUp():this.arrowDown(),void this.beginEditLastSelectedCell(t)}this.enterIsClick?this.lastSelectedCell&&"none"!==this.selectMode&&this.cellClickedImpl(this.lastSelectedCell.item,this.lastSelectedCell.column,this.lastSelectedCell.index,e.ctrlKey,e.shiftKey):e.shiftKey?this.arrowUp():this.arrowDown()}}),e.preventDefault();break;case"Tab":this.endEdit(!0,{unmountTimeout:!0,callback:()=>{let t=this.element.scrollTop;e.shiftKey?this.arrowLeft():this.arrowRight(),this.beginEditLastSelectedCell(t)}}),e.preventDefault();break;case" ":this.lastSelectedCell&&"none"!==this.selectMode&&this.cellClickedImpl(this.lastSelectedCell.item,this.lastSelectedCell.column,this.lastSelectedCell.index,e.ctrlKey,e.shiftKey),e.preventDefault();break;case"F2":e.preventDefault(),this.beginEditLastSelectedCell();break;case"Escape":this.endEdit(!1,{unmountTimeout:!0})}}),!1),this.addEvent(this.bodyElement,"mousedown",(e=>{if(0==this.dragScroll)return;const t=this.bodyElement.scrollLeft,l=this.element.scrollTop,s=e.clientX,i=e.clientY;let n=null;const r=e=>{n||(n=setTimeout((()=>{if("vertical"!==this.dragScroll){const l=s-e.clientX+t;this.headerElement.scrollLeft=l,this.footerElement.scrollLeft=l,this.element.scrollLeft=l}"horizontal"!==this.dragScroll&&(this.element.scrollTop=i-e.clientY+l),n=null}),this.scrollTimeoutInterval))};document.onselectstart=()=>!1;const o=()=>{this.removeEvent(window,"mousemove",r),this.removeEvent(window,"mouseup",o),this.lastScrolledLeft=this.element.scrollLeft,this.lastScrolledTop=this.element.scrollTop};this.addEvent(window,"mouseup",o,{passive:!0}),this.addEvent(window,"mousemove",r,{passive:!0})})),this.resizeObserver=new ResizeObserver((()=>{this.renderWhenResized(),this.optimizeDummySize()})),this.resizeObserver.observe(this.element),this.addEvent(this.editMaskElement,"click",(()=>{this.endEdit(!0)})),this.addEvent(this.editElement,"mousedown",(e=>{e.stopPropagation()})),this.addEvent(this.editElement,"keydown",(e=>{"Tab"!==e.key&&"Enter"!==e.key&&"Escape"!==e.key&&e.stopPropagation()}))}clearSelectedRows(e){Object.keys(this.selectedRows).forEach((e=>{const t=this.selectedRows[e];t.rowSelected=!1,t.cellSelected={},delete this.selectedRows[e]}));for(const e of this.rows){e.cache._lv_selected=null;for(const t of e.cells)t.cache._lv_selected=null}e&&this.renderWhenScrolled()}rangeSelectRow(e,t,l){if(null==e||null==this.lastSelectedBaseCell)return;if(e.cellSelected[t.name]=!0,this.lastSelectedBaseCell.index===l)this.selectedRows[e.id]=e;else if(this.lastSelectedBaseCell.index>l)for(let e=l;e<=this.lastSelectedBaseCell.index;e++){const t=this.sortedItems[e];t.rowSelected=!0,this.selectedRows[t.id]=t}else for(let e=this.lastSelectedBaseCell.index;e<=l;e++){const t=this.sortedItems[e];t.rowSelected=!0,this.selectedRows[t.id]=t}let s=null;const i=[];this.columnForEach((e=>{if(null==s&&(e.name===this.lastSelectedBaseCell.column.name?s=t.name:e.name===t.name&&(s=this.lastSelectedBaseCell.column.name)),null!=s&&(i.push(e.name),s===e.name))return!1})),Object.keys(this.selectedRows).forEach((e=>{i.forEach((t=>this.selectedRows[e].cellSelected[t]=!0))}))}scrollToIndex(e,t){const l=this.bodyElement.scrollTop;if(e<this.firstIndex||(e-this.firstIndex)*this.rowHeight<l){const t=this.element.scrollTop;if(this.element.scrollTop=e*this.rowHeight,t!==this.element.scrollTop)return}if(this.bodyElement.clientHeight+l<(e-this.firstIndex+1)*this.rowHeight){const t=this.element.scrollTop;if(this.element.scrollTop=(e+1)*this.rowHeight-this.bodyElement.clientHeight,t!==this.element.scrollTop)return}!1!==t&&this.renderWhenScrolled()}scrollToColumn(e,t,l){if(null==e)return!1;if(e.notScrollFocusWhenTabStop)return!1!==t&&this.renderWhenScrolled(l),!1;let s=0,i=0,n=0;const r=e=>{if(null==e.parent)s=e.left,n=e.fixedLeft;else{r(e.parent);const t=e.cells[0];if(null==t)return;s+=t.element.offsetLeft}};r(e),i=s+e.width;const o=this.element.clientWidth;let d=this.lastScrolledLeft;return s-n<this.lastScrolledLeft&&(d=s-n),i>this.lastScrolledLeft+o&&(d=i-o),d!==this.lastScrolledLeft&&(this.headerElement.scrollLeft=d,this.footerElement.scrollLeft=d,this.element.scrollLeft=d,this.element.scrollLeft==d&&!0!==t)||(!1!==t&&this.renderWhenScrolled(l),!1)}arrowUpDown(e,t,l){if("none"===this.selectMode)return!1;const s=Math.max(0,Math.min((null==this.lastSelectedCell?t:this.lastSelectedCell.index)+e,this.sortedItems.length-1)),i=this.sortedItems[s];if(null==i||this.lastSelectedCell?.index===s)return!1;this.clearSelectedRows();const n=this.lastSelectedCell?.column??this.findColumn((e=>e.tabStop));if("row"===this.selectMode)i.rowSelected=!0;else{if(0===this.columns.length)return!1;if(null==n)return!1;i.cellSelected[n.name]=!0}return this.selectedRows[i.id]=i,this.lastSelectedCell={index:s,item:i,column:n},!0===l?this.rangeSelectRow(i,n,s):this.lastSelectedBaseCell={index:s,item:i,column:n},this.scrollToIndex(s),!0}arrowUp(e,t){return this.arrowUpDown(-1*(e||1),Math.max(0,this.firstIndex),t)}arrowDown(e,t){return this.arrowUpDown(e||1,Math.min(this.sortedItems.length,this.firstIndex)-1,t)}arrowLeftRightOptimize(e,t,l){if(null==t)return!1;const s=this.sortedItems[Math.max(0,Math.min(this.sortedItems.length-1,e))];return null!=s&&(this.clearSelectedRows(),s.cellSelected[t.name]=!0,this.selectedRows[s.id]=s,this.lastSelectedCell={index:e,item:s,column:t},!0===l?this.rangeSelectRow(s,t,e):this.lastSelectedBaseCell={index:e,item:s,column:t},this.scrollToIndex(e,!1),this.scrollToColumn(t,!0,!0))}arrowLeft(e,t){if("cell"!==this.selectMode||0===this.columns.length)return!1;let l=null==this.lastSelectedCell?this.firstIndex:this.lastSelectedCell.index,s=this.lastSelectedCell?.column;if(e||null==s)s=this.findFirstColumn();else{const e=this.findPrevColumn(s.name);if(s=e.column,e.nextRow){const e=Math.max(0,l-1);if(e===l)return!1;l=e}}return this.arrowLeftRightOptimize(l,s,t)}arrowRight(e,t){if("cell"!==this.selectMode||0===this.columns.length)return!1;let l=null==this.lastSelectedCell?this.firstIndex:this.lastSelectedCell.index,s=this.lastSelectedCell?.column;if(e)s=this.findLastColumn();else if(null==s)s=this.findFirstColumn();else{const e=this.findNextColumn(s.name);if(s=e.column,e.nextRow){const e=Math.min(l+1,this.sortedItems.length-1);if(e===l)return!1;l=e}}return this.arrowLeftRightOptimize(l,s,t)}render(){return this.renderWhenResized(!0),this.renderHeaderCells(),this.renderFooterCells(),this}renderHeaderCells(){if(!this.headerVisible)return this;const e=t=>{if(null!=t)for(const l of t)if(l.renderHeaderCell&&l.renderHeaderCell(l.headerCellLabelElement,this.sortedItems,this.originItems),l.rows)for(const t of l.rows)e(t.columns)};return e(this.columns),this}renderFooterCells(){if(!this.footerVisible)return this;const e=t=>{if(null!=t)for(const l of t)if(l.renderFooterCell&&l.renderFooterCell(l.footerCellLabelElement,this.sortedItems,this.originItems),l.rows)for(const t of l.rows)e(t.columns)};return e(this.columns),this}renderRow(e,t=!1){const l=e.item;if(null!=l){if(e.element.style.getPropertyValue("visibility")&&e.element.style.removeProperty("visibility"),!e.item.data._lv_init){let t=!0;const l=s=>{null!=s&&s.forEach((s=>{const i=s.initializeRowData?.(e.item.data);!1===i&&(t=!1),s.rows?.forEach((e=>{l(e.columns)}))}))};l(this.columns),t&&(e.item.data._lv_init=!0)}if(e.cache._lv_selected!==l.rowSelected&&((e.cache._lv_selected=l.rowSelected)?e.element.setAttribute("data-selected",""):e.element.removeAttribute("data-selected")),this.oddEven){const t=e.index%2;e.cache._lv_oddEven!==t&&e.element.setAttribute("data-oddeven",0===(e.cache._lv_oddEven=t)?"odd":"even")}this.renderRowColumns(t?this.columns:this.renderColumns,e)}else e.element.style.visibility="hidden"}renderRowColumns(e,t){e.forEach((e=>{this.renderCell(e.cells[t.id]),e.rows?.forEach((e=>{this.renderRowColumns(e.columns,t)}))}))}renderCell(e){e.cache._lv_selected!==(e.row.item.cellSelected[e.column.name]||!1)&&((e.cache._lv_selected=!0===e.row.item.cellSelected[e.column.name])?e.element.setAttribute("data-selected",""):e.element.removeAttribute("data-selected")),e.column.renderCell(e,e.column.initializeParameters)}renderWhenScrolled(e){const t=this.optimizeRenderColumns(),l=this.element.scrollTop,s=Math.min(this.maxFirstIndex,Math.floor(l/this.rowHeight));if(this.lastScrolledTop!==l&&(this.bodyElement.scrollTop=l-this.rowHeight*s,this.lastScrolledTop=l),!0===e||this.firstIndex!==s||!t||t!==this.lastChangedX){for(let e=0,l=this.rows.length;e<l;e++){const l=this.rows[e];l.item=this.sortedItems[l.index=s+e],this.renderRow(l,t)}this.firstIndex=s,this.lastChangedX=t}}renderWhenResized(e){let t=e;const l=Math.min(Math.max(0,Math.ceil(this.bodyElement.clientHeight/this.rowHeight||0))+1,Math.max(1,this.sortedItems.length));if(this.rows.length!==l){for(let e=0;e<l;e++){let l=this.rows[e];if(null==l){t=!0,l={item:null,index:-1,id:e,cache:{_lv_selected:!1,_lv_oddEven:null},cells:[],element:(0,dom_1.cloneDomElement)(this.cloneBase.rowElem)},l.element.style.visibility="hidden",this.rowBorderless&&l.element.setAttribute("data-bdl",""),this.hasFillColumn&&(l.element.style.minWidth="100%");for(const e of this.columns)this.generateCell(l,e,l.element);this.bodyElement.appendChild(l.element),this.rows.push(l)}}this.disposeRows(l)}return this.lastScrolledLeft=-1,this.optimizeMaxFirstIndex(),this.renderWhenScrolled(t),!0}generateCell(e,t,l){const s={column:t,row:e,element:(0,dom_1.cloneDomElement)(this.cloneBase.cellElem),contentElements:[],cache:{_lv_selected:!1,_lv_initialized:!1}};if(t.rows){s.element.classList.add("bh-lv-cell-m_s");for(const l of t.rows){const t=(0,dom_1.cloneDomElement)(this.cloneBase.rowElem);t.style.flex=String(l.bodyHeightFlexRate),t.style.width="100%",t.style.minHeight="0px",l.bodyClassName.forEach((e=>t.classList.add(e)));for(const s of l.columns){const l=this.generateCell(e,s,t);s.fill&&l.element.setAttribute("data-fill","")}l.body&&s.element.appendChild(t)}}return s.element.setAttribute("data-name",t.name),t.bodyClassNames&&s.element.classList.add(...t.bodyClassNames),t.fill&&s.element.setAttribute("data-fill",""),s.element.style.width=`${t.width}px`,t.fixed&&(s.element.setAttribute("data-fixed",""),s.element.style.left=t.fixedLeft+"px"),s.element.setAttribute("data-align",t.textAlign??"left"),"anchor"===t.appearance&&s.element.classList.add("bh-anchor"),l.appendChild(s.element),t.cells.push(s),e.cells.push(s),s.element.setAttribute("data-disabled",String(!0===t.disabled)),(this.colBorderless||t.borderless)&&s.element.setAttribute("data-bdl",""),t.cellInitialize(s,t.initializeParameters,this),this.addEvent(s.element,"click",(t=>{this.cellClickedImpl(s.row.item,s.column,e.index,t.ctrlKey,t.shiftKey,t)})),s}optimizeMaxFirstIndex(){this.maxFirstIndex=Math.max(0,this.sortedItems.length-this.rows.length)}optimizeRenderColumns(){let e=this.element.scrollLeft;if(this.lastScrolledLeft!==e){this.headerElement.scrollLeft=e,this.footerElement.scrollLeft=e,this.bodyElement.scrollLeft=e;const t=this.bodyElement.clientWidth+e+10;return this.lastScrolledLeft=e,e-=10,this.renderColumns=[],this.columns.forEach((l=>{l.fixed?(l.render=l.left<t)&&this.renderColumns.push(l):(l.render=e<l.left+l.width&&l.left<t)&&this.renderColumns.push(l)})),!0}return!1}optimizeRowNumberColumnWidth(){const e=Math.max(40,10*String(this.sortedItems.length).length+12);e!==this.rowNumberColumn.width&&(this.rowNumberColumn.width=this.rowNumberColumn.minWidth=e,this.rowNumberColumn.cells.forEach((t=>{t.column.headerCellElement.style.width=t.column.footerCellElement.style.width=t.element.style.width=e+"px"})),this.optimizeDummySize())}optimizeDummySize(){const e=this.rows[0]?.element;if(null==e)return;const t=e.getBoundingClientRect();this.dummyElement.style.width=t.width+this.dummyElement.offsetLeft+"px";const l=[];this.columns.forEach((e=>{if(e.fixed){const t=e.cells[0].element;t.style.position="relative",t.style.removeProperty("left")}})),this.columns.forEach((e=>{const s=e.cells[0].element;l.push({left:Math.round(s.getBoundingClientRect().left-t.left+this.lastScrolledLeft),column:e})}));let s=0,i=l[0].left||0;l.sort(((e,t)=>e.left-t.left)).forEach((e=>{if(e.column.left=e.left-i,e.column.fixedLeft=s,e.column.fixed){e.column.cells[0].element.style.position="sticky",e.column.headerCellElement.style.left=e.column.footerCellElement.style.left=s+"px";for(const t of e.column.cells)t.element.style.left=s+"px";s+=e.column.width}}))}disposeRows(e){const t=e||0;for(let e=this.rows.length-1;e>=t;e--){const t=this.rows[e];for(const e of t.cells)this.removeEvent(e.element),e.column.disposeCell&&e.column.disposeCell(e,this),e.column.cells.pop();this.removeEvent(t.element),this.bodyElement.removeChild(t.element),this.rows.pop()}}findColumn(e){let t=null;const l=s=>{for(const i of s){if(e(i)&&(t=i),null!=t)return;if(i.rows)for(const e of i.rows)if(l(e.columns),null!=t)return}};return l(this.columns),t}findFirstColumn(){let e=null;const t=l=>{if(null!=l)for(let s=0,i=l.length;s<i;s++){const i=l[s];if(i.tabStop)return void(e=i);if(i.rows)for(const e of i.rows)t(e.columns);if(e)return}};return t(this.columns),e}findLastColumn(){let e=null;const t=l=>{if(null!=l)for(let s=l.length-1;s>=0;s--){const i=l[s];if(i.rows)for(const e of i.rows)t(e.columns);if(e)return;if(i.tabStop)return void(e=i)}};return t(this.columns),e}findPrevColumn(e){let t=null,l=!1;if(0===this.columns.length)return{column:t,nextRow:l};const s=e??this.findLastColumn()?.name;let i=!1;const n=e=>{if(null!=e)for(let l=e.length-1;l>=0;l--){const r=e[l];if(r.rows)for(let e=r.rows.length-1;e>=0;e--){const l=r.rows[e];if(n(l.columns),t)return}if(r.name!==s){if(i&&r.tabStop)return void(t=r)}else i=!0}};return n(this.columns),(l=!t)&&n(this.columns),{column:t,nextRow:l}}findNextColumn(e){let t=null,l=!1;if(0===this.columns.length)return{column:t,nextRow:l};const s=e??this.findFirstColumn()?.name;let i=!1;const n=e=>{if(null!=e)for(let l=0,r=e.length;l<r;l++){const r=e[l];if(r.name!==s){if(i&&r.tabStop)return void(t=r);if(r.rows)for(const e of r.rows)if(n(e.columns),t)return}else if(i=!0,r.rows)for(const e of r.rows)if(n(e.columns),t)return}};return n(this.columns),(l=!t)&&n(this.columns),{column:t,nextRow:l}}disposeColumn(e){if(this.removeEvent(e.headerCellElement),this.removeEvent(e.footerCellElement),this.removeEvent(e.resizeElement),e.disposeCell)for(const t of e.cells)e.disposeCell(t,this);e.dispose?.(this)}disposeColumns(){const e=t=>{for(let l=t.length-1;l>=0;l--){const s=t[l];if(s.rows)for(const t of s.rows)e(t.columns);this.disposeColumn(s),t.pop()}};e(this.columns),this.headerRowElement.textContent="",this.footerRowElement.textContent=""}bindColumns(e){if(this.disposeColumns(),this.disposeRows(),null==e)return void this.buildColumns();this.rowNumberColumn.built=!1;let t=!1;for(const l of e){const e=!1===t&&!0===l.fill;e&&(t=!0),this.columns.push(this.bindColumn(l,e))}this.buildColumns()}bindColumn(e,t){e?._lv?.(this);let l=e.width??100;l<0&&(l=this.rowHeight);const s=e.dataType||"string";let i=null;if(e._rows){i=[];for(const t of e._rows){const e=[];let l=!1;for(let s=0,i=t.columns.length;s<i;s++){const i=t.columns[s];let n=!1===l&&!0===i.fill;n&&(l=!0);const r=this.bindColumn(i,n);n&&(r.headerCellElement.style.flex="1",r.footerCellElement.style.flex="1"),!1===t.body&&(null==i.sort&&(r.sort=null),r.tabStop=!1),e.push(r)}i.push({columns:e,header:!1!==t.header,headerHeightFlexRate:t.headerHeightFlexRate??1,headerClassName:null==t.headerClassName?[]:"string"==typeof t.headerClassName?[t.headerClassName]:t.headerClassName,footer:!1!==t.footer,footerHeightFlexRate:t.footerHeightFlexRate??1,footerClassName:null==t.footerClassName?[]:"string"==typeof t.footerClassName?[t.footerClassName]:t.footerClassName,body:!1!==t.body,bodyHeightFlexRate:t.bodyHeightFlexRate??1,bodyClassName:null==t.bodyClassName?[]:"string"==typeof t.bodyClassName?[t.bodyClassName]:t.bodyClassName})}}const n={prop:e,name:e.name,vName:e.vName??e.name,label:e.label||e.name,dataType:s,width:l,minWidth:l,cells:[],headerCellElement:(0,dom_1.cloneDomElement)(this.cloneBase.cellElem),footerCellElement:(0,dom_1.cloneDomElement)(this.cloneBase.cellElem),initializeParameters:null==e.initialize?null:e.initialize(e,this),dispose:e.dispose,cellInitialize:null==e._rows?null==e.cellInitialize?e=>{const t=(0,dom_1.cloneDomElement)(this.cloneBase.labelCellElem);e.contentElements.push(t),e.element.appendChild(t)}:e.cellInitialize:null==e.cellInitialize?()=>{}:e.cellInitialize,disposeCell:e.cellDispose,renderCell:null==e.cellRender?({contentElements:e,row:t,cache:l})=>{l.val!==t.item.data[n.name]&&(e[0].textContent=l.val=t.item.data[n.name])}:e.cellRender,textAlign:e.cellTextAlign||("number"===s?"right":"left"),appearance:e.appearance||"label",sort:"function"==typeof e.sort?e.sort:!1===e.sort||null!=e._rows?null:e=>{if(""===e)return()=>0;const t="asc"===e?1:-1;return(e,l)=>{if("number"===n.dataType){const s=e.data[n.vName],i=l.data[n.vName];return null==s?-t:null==i||Number(s)>Number(i)?t:-t}return e.data[n.name]>l.data[n.name]?t:-t}},sortOrder:"",resize:!1!==e.resize&&!t&&null==e._rows,fill:t,fixed:!0===e.fixed,fixedLeft:0,left:0,tabStop:!1!==e.tabStop&&null==e._rows,notScrollFocusWhenTabStop:!0===e.notScrollFocusWhenTabStop,disabled:!0===e.disabled,borderless:!0===e.borderless,render:!0,clickHeaderCell:e.clickHeaderCell,clickFooterCell:e.clickFooterCell,clickCell:e.clickCell,clickRow:e.clickRow,preventClearSelected:!0===e._preventClearSelected,bindedItems:e.bindedItems,initializeRowData:e.initializeRowData,rows:i,beginEdit:e._beginEdit,endEdit:e._endEdit,editedRowData:e.editedRowData,built:!1,bodyClassNames:(0,attributes_1.convertClassNames)(e.bodyClassNames),headerClassNames:(0,attributes_1.convertClassNames)(e.headerClassNames),footerClassNames:(0,attributes_1.convertClassNames)(e.footerClassNames)};return n.rows?.forEach((e=>{e.columns?.forEach((e=>{e.parent=n}))})),n}buildColumns(){if(this.rowNumber)null==this.findColumn((e=>e.name===this.rowNumberColumn.name))&&(this.columns.unshift(this.rowNumberColumn),this.rowNumberColumn.headerCellElement?.style.removeProperty("display"),this.rowNumberColumn.footerCellElement?.style.removeProperty("display"),this.rowNumberColumn.cells.forEach((e=>e.element?.style.removeProperty("display"))),this.optimizeRowNumberColumnWidth());else for(let e=0,t=this.columns.length;e<t;e++){if(this.columns[e].name!==this.rowNumberColumn.name)continue;const t=this.columns[e];t.headerCellElement.style.display="none",t.footerCellElement.style.display="none",t.cells.forEach((e=>e.element.style.display="none")),this.columns.splice(e,1);break}let e=!1;for(const t of this.columns)e=e||t.fill,this.buildColumn(t,{header:this.headerRowElement,footer:this.footerRowElement});this.hasFillColumn=e,this.hasFillColumn?(this.headerRowElement.style.minWidth=this.footerRowElement.style.minWidth="100%",this.rows.forEach((e=>{e.element.style.minWidth="100%"}))):(this.headerRowElement.style.removeProperty("min-width"),this.footerRowElement.style.removeProperty("min-width"),this.rows.forEach((e=>{e.element.style.removeProperty("min-width")}))),this.rowBorderless?this.headerRowElement.hasAttribute("data-bdl")||(this.headerRowElement.setAttribute("data-bdl",""),this.footerRowElement.setAttribute("data-bdl","")):this.headerRowElement.hasAttribute("data-bdl")&&(this.headerRowElement.removeAttribute("data-bdl"),this.footerRowElement.removeAttribute("data-bdl")),this.renderColumns=[],this.renderWhenResized(),this.lastScrolledLeft=-1,this.optimizeRenderColumns(),this.optimizeDummySize()}buildColumn(e,t){if(e.built)return;if(e.rows){e.headerCellElement.classList.add("bh-lv-cell-m_s"),e.footerCellElement.classList.add("bh-lv-cell-m_s");for(const t of e.rows){let l=0;const s=(0,dom_1.cloneDomElement)(this.cloneBase.rowElem);s.style.flex=String(t.headerHeightFlexRate),t.headerClassName.forEach((e=>s.classList.add(e)));const i=(0,dom_1.cloneDomElement)(this.cloneBase.rowElem);i.style.flex=String(t.footerHeightFlexRate),t.footerClassName.forEach((e=>i.classList.add(e)));for(const e of t.columns)this.buildColumn(e,{header:s,footer:i}),l+=e.width;t.header&&e.headerCellElement.appendChild(s),t.footer&&e.footerCellElement.appendChild(i),e.width=Math.max(0,l,e.width)}}else e.headerCellLabelElement=(0,dom_1.cloneDomElement)(this.cloneBase.div),e.headerCellLabelElement.classList.add("bh-lv-lbl"),e.headerCellElement.appendChild(e.headerCellLabelElement),e.prop?.headerCellLabel&&("string"==typeof e.prop.headerCellLabel?e.headerCellLabelElement.textContent=e.prop.headerCellLabel:e.renderHeaderCell=e.prop.headerCellLabel),e.headerCellElement.setAttribute("data-align",e.prop?.headerCellTextAlign??"center"),e.footerCellLabelElement=(0,dom_1.cloneDomElement)(this.cloneBase.div),e.footerCellLabelElement.classList.add("bh-lv-lbl"),e.footerCellElement.appendChild(e.footerCellLabelElement),e.prop?.footerCellLabel&&("string"==typeof e.prop.footerCellLabel?e.footerCellLabelElement.textContent=e.prop.footerCellLabel:e.renderFooterCell=e.prop.footerCellLabel),e.footerCellElement.setAttribute("data-align",e.prop?.footerCellTextAlign??"center");if(e.headerCellElement.setAttribute("data-name",e.name),e.headerCellElement.style.width=e.width+"px",e.headerClassNames&&e.headerCellElement.classList.add(...e.headerClassNames),e.footerCellElement.setAttribute("data-name",e.name),e.footerCellElement.style.width=e.width+"px",e.footerClassNames&&e.footerCellElement.classList.add(...e.footerClassNames),e.fill&&(e.headerCellElement.setAttribute("data-fill",""),e.footerCellElement.setAttribute("data-fill","")),e.fixed&&(e.headerCellElement.setAttribute("data-fixed",""),e.footerCellElement.setAttribute("data-fixed","")),(this.colBorderless||e.borderless)&&(e.headerCellElement.setAttribute("data-bdl",""),e.footerCellElement.setAttribute("data-bdl","")),t.header.appendChild(e.headerCellElement),t.footer.appendChild(e.footerCellElement),e.prop?.headerCellInitialize?.(e,e.initializeParameters),e.prop?.footerCellInitialize?.(e,e.initializeParameters),null!=e.sort&&(e.sortElement=(0,dom_1.cloneDomElement)(this.cloneBase.div),e.sortElement.classList.add("bh-lv-sort-icon"),e.headerCellElement.appendChild(e.sortElement),this.addEvent(e.sortElement,"click",(t=>{t.stopPropagation();const l=e.sortOrder,s=e=>{for(const t of e)if(t.sortOrder="",t.sortElement?.removeAttribute("data-order"),t.rows)for(const e of t.rows)s(e.columns)};switch(s(this.columns),l){case"asc":e.sortOrder="desc",e.sortElement.setAttribute("data-order",e.sortOrder);break;case"desc":e.sortOrder="";break;default:e.sortOrder="asc",e.sortElement.setAttribute("data-order",e.sortOrder)}this.sortItems(),this.renderWhenScrolled(),this.sorted&&this.sorted(e.name,e.sortOrder,e.prop)}))),!1!==e.resize){e.resizeElement=(0,dom_1.cloneDomElement)(this.cloneBase.div),e.resizeElement.classList.add("bh-lv-resizer"),e.headerCellElement.appendChild(e.resizeElement),this.addEvent(e.resizeElement,"click",(e=>{e.stopPropagation()}));const t=()=>{for(const t of e.cells)t.element.style.width=e.width+"px";e.footerCellElement.style.width=e.width+"px";const t=e=>{if(null==e)return;let l=0;for(const t of e.rows){let e=-1,s=!1;t.columns.forEach((t=>{e+=t.width,t.fill&&(s=!0)})),s||(l=Math.max(l,e))}l>0&&(e.width=l,e.headerCellElement.style.width=e.footerCellElement.style.width=e.width+"px",e.cells.forEach((t=>t.element.style.width=e.width+"px")),t(e.parent))};t(e.parent),this.optimizeDummySize()};this.addEvent(e.resizeElement,"mousedown",(l=>{this.endEdit(!0),l.stopPropagation();const s=l.currentTarget.offsetLeft,i=l.clientX,n=t=>{e.width=t.clientX-i+s,e.headerCellElement.style.width=e.width+"px"};(0,cursor_1.setCursor)("col-resize");const r=()=>{this.removeEvent(window,"mousemove",n),this.removeEvent(window,"mouseup",r),t(),(0,cursor_1.releaseCursor)()};this.addEvent(window,"mouseup",r),this.addEvent(window,"mousemove",n)})),this.addEvent(e.resizeElement,"touchstart",(l=>{this.endEdit(!0),l.stopPropagation();const s=l.currentTarget.offsetLeft,i=l.touches[0].clientX,n=t=>{e.width=t.touches[0].clientX-i+s,e.headerCellElement.style.width=e.width+"px"},r=()=>{this.removeEvent(window,"touchmove",n),this.removeEvent(window,"touchend",r),t()};this.addEvent(window,"touchend",r),this.addEvent(window,"touchmove",n)}))}const l=()=>{for(const t of e.cells)null!=t.row.item&&this.renderCell(t);this.renderHeaderCells(),this.renderFooterCells()};e.clickHeaderCell&&this.addEvent(e.headerCellElement,"click",(()=>{e.clickHeaderCell(e.name,this.sortedItems,l)})),e.clickFooterCell&&this.addEvent(e.footerCellElement,"click",(()=>{e.clickFooterCell(e.name,this.sortedItems,l)})),e.built=!0}setColumns(e){return this.bindColumns(e),this}columnForEach(e){const t=l=>{let s=!0;for(const i of l){if(s=!1!==e(i)&&s,!s)break;if(i.rows)for(const e of i.rows)if(s=!1!==t(e.columns)&&s,!s)break;if(!s)break}return s};t(this.columns)}bindItems(e){if(this.originItems=[],this.bindingItems=[],this.filteredItems=[],this.selectedRows={},this.lastSelectedCell=null,this.lastSelectedBaseCell=null,null!=e){this.originItems=e;for(let e=0,t=this.originItems.length;e<t;e++)this.bindingItems.push({data:this.originItems[e],id:e,rowSelected:!1,cellSelected:{}});this.executeColumnBindedItems(),this.colCallBindedRev=++this.itemsCallBindedRev,this.filterItems()}}executeColumnBindedItems(){const e=t=>{t.forEach((t=>{t.rows?.forEach((t=>{e(t.columns)})),t.bindedItems?.(this.originItems)}))};e(this.columns)}filterItems(){this.clearSelectedRows(),null==this.filter?this.filteredItems=this.bindingItems.concat():this.filteredItems=this.bindingItems.filter((e=>this.filter(e.data))),this.filtered&&this.filtered(this.filteredItems),this.sortItems()}sortItems(){if(this.sortedItems=this.filteredItems.concat(),!this.externalSort){null!=this.sort&&this.sortedItems.sort(this.sort);const e=this.findColumn((e=>""!==e.sortOrder));null!=e&&this.sortedItems.sort(e.sort(e.sortOrder))}this.dummyElement.style.height=this.sortedItems.length*this.rowHeight+(this.headerVisible?this.headerHeight:0)+(this.footerVisible?this.footerHeight:0)+this.dummyElement.offsetTop+"px",this.optimizeRowNumberColumnWidth(),this.lastScrolledLeft=-1,this.optimizeRenderColumns(),this.scrollingMode="stop"}setItems(e){return e.length>1e5&&(e.splice(1e5),console.log("warning: too much item to set at listview. splice over 100000")),this.bindItems(e),this.firstIndex=-1,this.bodyElement.scrollTop=0,this.maxFirstIndex=Math.max(0,this.sortedItems.length-this.rows.length),this.optimizeDummySize(),this.lastScrolledLeft=-1,this.render(),this}cellClickedImpl(e,t,l,s,i,n){if(null!=t?.rows)return;if("cell"===this.selectMode&&!t.tabStop)return;const r=this.element.scrollTop;"cell"===this.selectMode&&this.scrollToColumn(t),this.scrollToIndex(l);const o=()=>{let r=!0,o=!1;s&&this.multiSelect?"row"===this.selectMode?(e.cellSelected={},!0===e.rowSelected?(r=e.rowSelected=!1,delete this.selectedRows[e.id]):(r=e.rowSelected=e.cellSelected[t.name]=!0,this.selectedRows[e.id]=e)):!0===e.cellSelected[t.name]?(delete e.cellSelected[t.name],0===Object.keys(e.cellSelected).length&&(delete this.selectedRows[e.id],e.rowSelected=!1),r=!1):(r=e.rowSelected=e.cellSelected[t.name]=!0,this.selectedRows[e.id]=e):i&&this.multiSelect&&null!=this.lastSelectedBaseCell?(this.clearSelectedRows(),r=e.cellSelected[t.name]=!0,this.rangeSelectRow(e,t,l)):(!0===e.cellSelected[t.name]&&(o=!0),this.multiSelect&&t.preventClearSelected?null==this.selectedRows[e.id]&&this.clearSelectedRows():this.clearSelectedRows(),r=e.rowSelected=e.cellSelected[t.name]=!0,this.selectedRows[e.id]=e),this.lastSelectedCell={index:l,item:e,column:t},i&&null!=this.lastSelectedBaseCell||(this.lastSelectedBaseCell={index:l,item:e,column:t});const d={data:e.data,id:e.id,rowNumber:l+1,columnName:t?.name,columnLabel:t?.label,columnWidth:t?.width,originItems:()=>this.originItems,selectMode:this.selectMode,selected:r,getSelectedRows:()=>this.getSelectedRows(),getSelectedCells:()=>this.getSelectedCells()};let a=!1,h=!1,c=!1,m=!1,u=!1,f=!1,b=!1,p=!1,w=!1;const v=e=>{if(null==e)return;const t=e;a=a||!0===t.rebind,h=h||!0===t.renderHeaderCell,c=c||!0===t.renderHeaderCells,m=m||!0===t.renderFooterCell,u=u||!0===t.renderFooterCells,f=f||!0===t.renderCell,b=b||!0===t.renderCells,p=p||!0===t.renderRow,w=w||!0===t.render};this.clickCell&&v(this.clickCell(d,n)),t?.clickCell&&v(t.clickCell(d,n));for(const e of this.columns)e.clickRow&&v(e.clickRow(d,n));if(a)this.bindItems(this.originItems);else if(w)this.render();else{if(c?this.renderHeaderCells():h&&t.renderHeaderCell&&t.renderHeaderCell(t.headerCellLabelElement,this.sortedItems,this.originItems),u?this.renderFooterCells():m&&t.renderFooterCell&&t.renderFooterCell(t.footerCellLabelElement,this.sortedItems,this.originItems),p&&this.renderRow(this.rows[l-this.firstIndex]),b)for(const e of t.cells)this.renderCell(e);p||b||!f||this.renderCell(t.cells[l-this.firstIndex])}this.renderWhenScrolled(),o&&!t.disabled&&("cell"!==this.selectMode&&this.scrollToColumn(t),this.beginEdit(e,t,l))};if(r===this.element.scrollTop)o();else{const e=()=>{this.element.scrollTop!==this.lastScrolledTop?setTimeout((()=>e()),10):o()};e()}}beginEditLastSelectedCell(e){if(null==this.lastSelectedCell.column)return;let t=e;if(null==t&&(t=this.element.scrollTop,this.scrollToColumn(this.lastSelectedCell.column),this.scrollToIndex(this.lastSelectedCell.index)),t===this.element.scrollTop)this.beginEdit(this.lastSelectedCell.item,this.lastSelectedCell.column,this.lastSelectedCell.index);else{const e=()=>{this.element.scrollTop!==this.lastScrolledTop?setTimeout((()=>e()),10):this.beginEdit(this.lastSelectedCell.item,this.lastSelectedCell.column,this.lastSelectedCell.index)};e()}}beginEdit(e,t,l){if(!t.beginEdit||!0===t.disabled)return void this.endEdit(!1);const s=this.rows[l-this.firstIndex];if(null==s)return;const i=s.cells.find((e=>e.column.name===t.name));if(null==i)return;const n=i.element.getBoundingClientRect();this.editElement.style.removeProperty("display"),this.editElement.style.top=`${n.top}px`,this.editElement.style.left=`${n.left}px`,this.editElement.style.height=n.height-(i.element.offsetHeight-i.element.clientHeight)+"px",this.editElement.style.width=n.width-(i.element.offsetWidth-i.element.clientWidth)+"px",this.editElement.style.visibility="visible",this.editTarget={item:e,column:t,index:l};let r=!1;const o=t.beginEdit({target:{data:e.data,columnName:t.name,index:l,id:e.id},editElement:this.editElement,endEdit:e=>{r=!0,setTimeout((()=>{this.endEdit(e)}),0)},cell:i,styleCtx:this.layoutCtx});null==o||r||(this.editTarget.useReact=!0,null==this.editRoot&&(this.editRoot=(0,client_1.createRoot)(this.editElement)),this.editRoot.render(react_1.default.createElement(layout_provider_1.LayoutContext.Provider,{value:this.layoutCtx},react_1.default.createElement(react_1.default.Fragment,null,o.node,null==o.effect?react_1.default.createElement(react_1.default.Fragment,null):react_1.default.createElement(EditEffect,{effect:o.effect}))))),this.endEditEventListener=()=>{setTimeout((()=>{this.endEdit(!0)}),0)},this.addEvent(this.element,"mousedown",this.endEditEventListener),r?this.endEdit(!1):this.editElement.focus()}endEdit(e,t){if(this.endEditEventListener&&(this.removeEvent(this.element,"mousedown",this.endEditEventListener),this.endEditEventListener=null),null==this.editTarget)return void t?.callback?.(!1);if(this.editTarget.column?.endEdit){const t=this.editTarget.column.endEdit({data:this.editTarget.item.data,columnName:this.editTarget.column.name,index:this.editTarget.index,id:this.editTarget.item.id},e,this.editElement);if(!1!==e){null==t&&this.renderCell(this.editTarget.column.cells[this.editTarget.index-this.firstIndex]);for(const e of this.columns)e!==this.editTarget.column&&e.editedRowData&&("function"==typeof e.editedRowData?e.editedRowData(this.editTarget.item.data):e.initializeRowData(this.editTarget.item.data),this.renderCell(e.cells[this.editTarget.index-this.firstIndex]));this.renderHeaderCells(),this.renderFooterCells()}}let l=!0;if(this.editTarget.useReact){const e=()=>{this.editRoot?.unmount(),this.editRoot=null};t?.unmountTimeout?(l=!1,setTimeout((()=>{e(),t?.callback?.(!0)}),0)):e()}this.editMaskElement.style.display="none",this.editElement.style.display="none",this.editTarget=null,this.element.focus(),l&&t?.callback?.(!0)}getValue(){return this.originItems}getFilteredValue(){return[...this.filteredItems]}getSortedValue(){return[...this.sortedItems]}getLength(){return this.originItems.length}getFilteredLength(){return this.filteredItems.length}select(e,t){if("none"===this.selectMode||null==e)return;const l=this.sortedItems[e];if(null==l)return!1;this.clearSelectedRows();let s=null;return"row"===this.selectMode?(l.rowSelected=!0,this.selectedRows[l.id]=l,s=this.findColumn((e=>e.name===t))??this.findColumn((e=>e.tabStop))):(s=this.findColumn((e=>e.name===t))??this.findColumn((e=>e.tabStop)),l.cellSelected[s.name]=!0,this.selectedRows[l.id]=l),this.lastSelectedCell={index:e,item:l,column:s},this.lastSelectedBaseCell={index:e,item:l,column:s},this.scrollToIndex(e,!1),s&&this.scrollToColumn(s,!1),this.renderWhenScrolled(),!0}clearSelect(){this.clearSelectedRows(!0)}getSelectedRows(){const e=[];return Object.keys(this.selectedRows).forEach((t=>{const l=this.selectedRows[t];e.push({id:l.id,data:l.data})})),e}getSelectedCells(){const e=[];return Object.keys(this.selectedRows).forEach((t=>{const l=this.selectedRows[t];Object.keys(l.cellSelected).forEach((t=>{e.push({id:l.id,data:l.data,columnName:t})}))})),e}focus(){return this.element.focus(),this}getElement(){return this.element}getBodyElement(){return this.bodyElement}getRowHeight(){return this.rowHeight}getDisplayedFirstRowIndex(){return this.firstIndex}getBodyScrollTop(){return this.bodyElement.scrollTop}clearSpaceRow(){for(const e of this.rows)e.element.style.removeProperty("margin-top"),e.element.style.removeProperty("margin-bottom"),e.element.style.removeProperty("display"),e.element.style.removeProperty("opacity");return this}startScrollContinue(e,t,l,s){this.scrollingMode!==e?(this.stopScrollContinue(),setTimeout((()=>{this.scrollingMode=e,this.scrollingInterval=t??100,this.scrollingId++,this.scrollContinue(s),l&&l(this.scrollingInterval)}),this.scrollingInterval+1)):s&&s("already")}stopScrollContinue(){this.scrollingMode="stop"}scrollContinue(e){const t=this.scrollingId;setTimeout((()=>{if(t!==this.scrollingId||"stop"===this.scrollingMode)return void(e&&e("stop"));const l=this.element.scrollTop;"up"===this.scrollingMode?this.element.scrollTop=this.element.scrollTop-this.rowHeight:this.element.scrollTop=this.element.scrollTop+this.rowHeight,l!==this.element.scrollTop?this.scrollContinue(e):e&&e("over")}),this.scrollingInterval)}dragMovingRow(e,t){t<this.bodyElement.scrollTop?this.startScrollContinue("up"):t>this.bodyElement.clientHeight-this.rowHeight+this.bodyElement.scrollTop?this.startScrollContinue("down"):this.stopScrollContinue();let l=Math.round(t/this.rowHeight);const s=l<0||t-l*this.rowHeight<0;l+=this.firstIndex;const i=this.rows[e-this.firstIndex];if(this.clearSpaceRow(),i){if(l===e)return void(i.element.style.opacity="0.5");i.element.style.display="none"}let n=l-this.firstIndex;if(n<=0){return void(this.rows[0].element.style.marginTop=this.rowHeight+"px")}if(n>=this.rows.length-1){return void(this.rows[this.rows.length-1].element.style.marginBottom=this.rowHeight+"px")}i&&l>e&&(n+=1),s||(n-=1);const r=this.rows[n];return null==r||(s?(r.element.style.removeProperty("margin-bottom"),r.element.style.marginTop=this.rowHeight+"px"):(r.element.style.removeProperty("margin-top"),r.element.style.marginBottom=this.rowHeight+"px")),this}dropMoveRow(e,t){this.clearSpaceRow(),this.stopScrollContinue();let l=Math.round(t/this.rowHeight)+this.firstIndex,s=!1;(s=e<this.firstIndex)&&(l-=1);let i=Math.min(M