-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6533.135e5f6b.iframe.bundle.js
1 lines (1 loc) · 384 KB
/
6533.135e5f6b.iframe.bundle.js
1
"use strict";(self.webpackChunkstorybook=self.webpackChunkstorybook||[]).push([[6533],{"../../packages/common-react/src/components/ITooltip.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{H:()=>ToolTipPlacement});let ToolTipPlacement=function(ToolTipPlacement){return ToolTipPlacement.BottomEnd="bottom-end",ToolTipPlacement.BottomStart="bottom-start",ToolTipPlacement.Bottom="bottom",ToolTipPlacement.LeftEnd="left-end",ToolTipPlacement.LeftStart="left-start",ToolTipPlacement.Left="left",ToolTipPlacement.RightEnd="right-end",ToolTipPlacement.RightStart="right-start",ToolTipPlacement.Right="right",ToolTipPlacement.TopEnd="top-end",ToolTipPlacement.TopStart="top-start",ToolTipPlacement.Top="top",ToolTipPlacement}({})},"../../packages/common-react/src/hooks/useCopyPaste.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{bn:()=>useGlobalClipboardHandler,e8:()=>useCopyPaste});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js"),react_singleton_hook__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/react-singleton-hook/es/index.js"),_sheetxl_common__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("../../packages/common/src/utils/CommonUtils.ts"),_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("../../packages/common/src/types/Primitives.ts"),_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("../../packages/common/src/utils/Errors.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("../../packages/common-react/src/hooks/useEditMode.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("../../packages/common-react/src/hooks/useCallbackRef.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("../../packages/common-react/src/utils/Notifier.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("../../packages/common-react/src/command/CommandMap.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("../../packages/common-react/src/command/Command.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("../../packages/common-react/src/types/types.ts");const readFromClipboardAPI=async(mimeType="text/html")=>new Promise(((resolve,_reject)=>{navigator.clipboard.read({}).then((data=>{let foundType=!1;for(let i=0;!foundType&&i<data.length;i++)foundType=data[i].types.includes(mimeType),foundType&&data[i].getType(mimeType).then((blob=>{var reader=new FileReader;reader.onload=()=>{resolve(reader.result)},reader.readAsText(blob)}));foundType||resolve(null)})).catch((_error=>{resolve(null)}))})),EMPTY_CLIPBOARD_HANDLE={item:null,uuid:null,sourceElement:()=>null},EMPTY_CLIPBOARD_HANDLER={clipboardHandle:EMPTY_CLIPBOARD_HANDLE,setClipboardHandle:_value=>{throw new Error("This is only available via the useGlobalClipboardHandler.")},clearClipboard:()=>{},refCopy:{current:null},refLastKey:{current:null}},parseForDynamicItem=async(valueAsHTML,clipboardHandle)=>{if(!valueAsHTML)return null;try{const docHtml=(new DOMParser).parseFromString(valueAsHTML,_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.html);if(clipboardHandle?.uuid){const elementsClipboardId=docHtml.querySelectorAll('[clipboard-uuid="'+clipboardHandle.uuid+'"]');if(elementsClipboardId&&1===elementsClipboardId.length)return{uuid:clipboardHandle.uuid,item:clipboardHandle.item,html:docHtml}}if(docHtml.querySelector("parsererror"))throw new Error("We are unable to parse node");return{uuid:null,item:null,html:docHtml}}catch(error){throw error}},useGlobalClipboardHandler=(0,react_singleton_hook__WEBPACK_IMPORTED_MODULE_1__.Pf)(EMPTY_CLIPBOARD_HANDLER,(()=>{const[clipboardHandle,setClipboardHandle]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(EMPTY_CLIPBOARD_HANDLE),editModeHandler=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_4__.B)(),refCopy=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(),refLastKey=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),clearClipboard=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((()=>{console.log("clear"),setClipboardHandle(EMPTY_CLIPBOARD_HANDLE)}),[]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{const mode=editModeHandler.getMode(),key=mode?.key;"cut"!==key&&"copy"!==key&&"formatPainter"!==key&&setClipboardHandle(EMPTY_CLIPBOARD_HANDLE)}),[editModeHandler]);const checkClipboard=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async()=>{let result=null;try{result=await(navigator?.permissions?.query({name:"clipboard-read",allowWithoutGesture:!0,allowWithoutSanitization:!0}))}catch(error){result=error instanceof TypeError?{name:error.name,status:error.message}:{name:"clipboard-read",status:error.message??"Unknown Error"}}const readClipboard=async()=>{const uuid=await readFromClipboardAPI("web clipboard-uuid");if(uuid&&uuid!==clipboardHandle.uuid)return clearClipboard(),!0;const asHTML=await readFromClipboardAPI(),itemOrHtml=await parseForDynamicItem(asHTML,clipboardHandle);return(!itemOrHtml?.uuid||itemOrHtml.uuid!==clipboardHandle.uuid)&&(clearClipboard(),!0)};return("granted"===result.state||"prompt"===result.state)&&("prompt"===result.state&&(result.onchange=()=>"granted"===result.state&&readClipboard()),readClipboard())}),[clipboardHandle]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{if(!clipboardHandle?.item){const key=editModeHandler.getMode()?.key;"cut"!==key&&"copy"!==key&&"formatPainter"!==key||editModeHandler.setMode(null)}if(!clipboardHandle?.uuid)return;const onFocus=()=>{checkClipboard()},onBlur=()=>{window.addEventListener("focus",onFocus,{once:!0})};clipboardHandle.item&&window.addEventListener("blur",onBlur);const onClipboard=()=>{clipboardHandle.uuid&&refCopy.current?.sourceElement!==document.activeElement&&checkClipboard()};return window.addEventListener("cut",onClipboard),window.addEventListener("copy",onClipboard),()=>{window.removeEventListener("focus",onFocus),window.removeEventListener("blur",onBlur),window.removeEventListener("cut",onClipboard),window.removeEventListener("copy",onClipboard)}}),[clipboardHandle]);return{clipboardHandle,setClipboardHandle,clearClipboard,refCopy,refLastKey}})),useCopyPaste=props=>{const{source,target,onPaste:propOnPaste,onClipboardUpdate:propOnClipboardUpdate,onNativeCopy:propOnNativeCopy,onNativePaste:propOnNativePaste,notifier=_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__.c}=props,onClipboardUpdate=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)(propOnClipboardUpdate,[propOnClipboardUpdate]),onPaste=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)(propOnPaste,[propOnPaste]),onNativeCopy=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)(propOnNativeCopy,[propOnNativeCopy]),onNativePaste=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)(propOnNativePaste,[propOnNativePaste]),editModeHandler=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_4__.B)(),warnIfSafari=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((()=>!!_sheetxl_common__WEBPACK_IMPORTED_MODULE_2__.nr()&&(notifier?.inform?.("Safari browser does not currently support copy and paste. Please use Chrome if required.",{type:_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__._.Error}),!0)),[notifier]),{clipboardHandle,setClipboardHandle,clearClipboard,refCopy,refLastKey}=useGlobalClipboardHandler(),commands=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>{const refCommandSourceTarget=source?.element,refCommandTargetTarget=target?.element??source?.element;return new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_7__.yc([new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_8__.a2("cut",refCommandSourceTarget,{label:"Cut",description:"Remove the selection and put it on the clipboard so you can paste it somewhere else.",shortcut:{key:"X",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_9__.Uq.Ctrl]}}),new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_8__.a2("copy",refCommandSourceTarget,{label:"Copy",description:"Put a copy of the selection on the clipboard so you can paste it somewhere else.",shortcut:{key:"C",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_9__.Uq.Ctrl]}}),new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_8__.a2("paste",refCommandTargetTarget,{label:"Paste",description:"Add content on the clipboard to your document.",shortcut:{key:"V",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_9__.Uq.Ctrl]}})])}),[]),handleCopy=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async(e,args)=>{if(!source?.element)return;if(source.element()!==document.activeElement)return;let clipboardItem=null,html=null,clipboardUUID=null,plain=null,htmlRaw=null,caughtPartialError=null;try{if(clipboardItem=source.doCopy?.(args),!clipboardItem)return void clearClipboard();try{plain="string"==typeof clipboardItem?clipboardItem:clipboardItem.toText?.()||null,htmlRaw=clipboardItem.toHtml?.()||null}catch(error){if(!(error instanceof _sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.G))throw error;caughtPartialError=error}const results=((item,htmlRaw)=>{let html=htmlRaw||"<div clipboard-uuid=xxx></div>",uuid=null;if(item){const indexUUID=html.indexOf("clipboard-uuid=xxx");indexUUID>-1&&(uuid=_sheetxl_common__WEBPACK_IMPORTED_MODULE_2__.QT(),html=html.substring(0,indexUUID)+"clipboard-uuid="+uuid+html.substring(indexUUID+18,html.length))}return{html,clipboardUUID:uuid}})(clipboardItem,htmlRaw);html=results.html,clipboardUUID=results.clipboardUUID,e.clipboardData?.setData(_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.html,html),e.clipboardData?.setData(_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.plain,plain),e.clipboardData?.setData("web clipboard-uuid",clipboardUUID),e.preventDefault(),setClipboardHandle({item:clipboardItem,uuid:clipboardUUID,sourceElement:source.element}),(args={isCut:"cut"===e.type,...args}).editMode&&editModeHandler.setMode(args.editMode)}catch(error){throw clearClipboard(),error}caughtPartialError&¬ifier?.inform?.(caughtPartialError.message,{type:_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__._.Info})}),[source,setClipboardHandle,clearClipboard,notifier]),handleCopyNative=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async e=>{if(warnIfSafari())return;if(!source?.element||source.element()!==document.activeElement)return;const key="copy"===e.type?"copy":"cut",command=commands.getCommand(key),handleProgrammatic="copy"===e.type?handleCopyProgrammatic:handleCutProgrammatic;command.updateCallback((()=>{command.updateCallback(handleProgrammatic)})).execute();const defaultArgs={isCut:"cut"===e.type,editMode:{key}};try{const args=onNativeCopy?onNativeCopy(refLastKey.current,refCopy.current?.args??defaultArgs):refCopy.current?.args??defaultArgs;null!==args&&handleCopy&&await handleCopy(e,{...defaultArgs,...args})}catch(error){editModeHandler.setMode(null),notifier?.showError?.(error)}}),[source?.element]),handleCopyProgrammatic=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async args=>{if(warnIfSafari())return;const element=source?.element?.();if(!element)return;refCopy.current={sourceElement:element,args};const doCopy=()=>{args?.isCut?document.execCommand("cut"):document.execCommand("copy")};element===document.activeElement||element.contains(document.activeElement)?doCopy():(element.addEventListener("focus",doCopy,{once:!0}),element.focus())}),[source?.element]),handleCutProgrammatic=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((()=>{handleCopyProgrammatic({isCut:!0})}),[source?.element]),handlePasteItem=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async(target,item,args)=>{try{if(!1===await target.doPaste(item,args))return;let shouldBreak=item.onPaste?.();if(!1===shouldBreak)return;let editMode=onPaste?.(item,args);if(void 0===editMode){const key=editModeHandler.getMode()?.key;"cut"!==key&&"copy"!==key&&"formatPainter"!==key||(editMode=null)}void 0!==editMode&&editModeHandler.setMode(editMode)}catch(error){notifier?.showError?.(error)}}),[onPaste,notifier]),handlePaste=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async(e,item,args)=>{const element=target?.element?.();if(document.activeElement!==element)return;const items=e?.clipboardData?.items,plainText=e.clipboardData?.getData(_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.plain),valueAsHTML=e.clipboardData?.getData(_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.html),isTrusted=e.isTrusted,hideBusy=await(notifier.showBusy?.("Pasting..."));if(!items&&!item)return void hideBusy?.();if(item)return await handlePasteItem(target,item,args),void hideBusy?.();const itemOrHtml=await parseForDynamicItem(valueAsHTML,clipboardHandle);if(itemOrHtml?.item)return await handlePasteItem(target,itemOrHtml.item,args),void hideBusy?.();let externalItem,createClipboardItem=target.createClipboardItem;createClipboardItem||(createClipboardItem=(_text,_html,_args)=>({type:"text",toText:()=>plainText}));try{externalItem=await createClipboardItem(plainText,itemOrHtml?.html||null)}catch(error){hideBusy?.(),notifier?.showError?.(error)}if(externalItem){!isTrusted&&itemOrHtml&&!args?.isContentsOnly&&target.createClipboardItem&¬ifier?.inform?.("Your browser is limiting what can be read from the clipboard. To paste formatting from outside the browser use Ctrl+V or Ctrl+Shift+V to ensure you get accurate results.",{type:_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__._.Info});try{const resolvedExternalItem=await Promise.resolve(externalItem);await handlePasteItem(target,resolvedExternalItem,args),hideBusy?.()}catch(error){hideBusy?.(),notifier?.showError?.(error)}}else hideBusy?.()}),[handlePasteItem,target,clipboardHandle,notifier]),handlePasteProgrammatic=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((async args=>{if(warnIfSafari())return;if(!source?.element)return;const elementSource=source.element();let result=null;try{result=await(navigator?.permissions?.query({name:"clipboard-read",allowWithoutGesture:!0,allowWithoutSanitization:!0}))}catch(error){result=error instanceof TypeError?{name:error.name,status:error.message}:{name:"clipboard-read",status:error.message??"Unknown Error"}}const readClipboard=async()=>{const uuid=await readFromClipboardAPI("web clipboard-uuid");if(uuid&&uuid===clipboardHandle.uuid)await handlePaste(null,clipboardHandle.item,args);else try{const asHTML=await readFromClipboardAPI(),asPlain=await navigator.clipboard.readText(),clipboardData=new DataTransfer;clipboardData.setData(_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.plain,asPlain),clipboardData.setData(_sheetxl_common__WEBPACK_IMPORTED_MODULE_3__.z5.html,asHTML);const event=new ClipboardEvent("paste",{clipboardData});await handlePaste(event,null,args)}catch(error){if("Document is not focused."===error?.message)return;notifier?.showError?.(error)}},onWarn=async()=>{console.warn("clipboard-permission not granted: "+result.name,result.state),notifier?.inform?.("You only have permission to read the clipboard using the keystrokes Ctrl+V or Ctrl+Shift+V. You can still use the buttons to copy and paste within the application.")};return"granted"===result.state||"prompt"===result.state?("prompt"===result.state&&(result.onchange=async()=>"granted"!==result.state?await onWarn():document.activeElement===elementSource?await readClipboard():(elementSource.addEventListener("focus",(async()=>await readClipboard()),{once:!0}),void elementSource.focus())),await readClipboard()):await onWarn()}),[handlePaste,source?.element,clipboardHandle.item,clipboardHandle.uuid,notifier]),handlePasteNative=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_5__.c)((e=>{const targetElement=target?.element?.();if(!targetElement||targetElement!==document.activeElement)return;if(refLastKey.current&&refLastKey.current.ctrlKey&&"v"===refLastKey.current.key){const command=commands.getCommand("paste");command.updateCallback((()=>{command.updateCallback(handlePasteProgrammatic)})).execute()}const args=onNativePaste?onNativePaste(refLastKey.current,void 0):void 0;null!==args&&handlePaste&&(handlePaste(e,null,args),e.preventDefault())}),[target?.element,onNativePaste,handlePaste,notifier]);return(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{onClipboardUpdate?.(clipboardHandle.item)}),[clipboardHandle?.item]),(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{source&&source.element&&source.doCopy&&(document.addEventListener("cut",handleCopyNative),document.addEventListener("copy",handleCopyNative)),target&&target.element&&target.doPaste&&document.addEventListener("paste",handlePasteNative);const handleKeyStroke=e=>{e.defaultPrevented||(refCopy.current=void 0,refLastKey.current=e)};return document.addEventListener("keydown",handleKeyStroke),()=>{document.removeEventListener("cut",handleCopyNative),document.removeEventListener("copy",handleCopyNative),document.removeEventListener("paste",handlePasteNative),document.removeEventListener("keydown",handleKeyStroke)}}),[handleCopy,handlePaste,source,target]),(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{commands.getCommand("cut").updateCallback(handleCutProgrammatic).update({disabled:!source||!target}),commands.getCommand("copy").updateCallback(handleCopyProgrammatic).update({disabled:!source}),commands.getCommand("paste").updateCallback(handlePasteProgrammatic).update({disabled:!target})}),[source,target]),{commands,currentItem:clipboardHandle.item,paste:handlePasteProgrammatic,copy:handleCopyProgrammatic,clear:clearClipboard}}},"../../packages/common-react/src/hooks/useEditMode.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{B:()=>useEditMode});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js"),react_singleton_hook__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/react-singleton-hook/es/index.js");let globalSetMode=()=>{console.warn("You must call useEditMode before setting its state.")};const useEditModeGlobal=(0,react_singleton_hook__WEBPACK_IMPORTED_MODULE_1__.Pf)(null,(()=>{const[editMode,setEditMode]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);return globalSetMode=setEditMode,editMode})),useEditMode=()=>{const globalMode=useEditModeGlobal();return(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>({setMode:mode=>{globalSetMode(mode)},getMode:()=>globalMode})),[globalMode])}},"../../packages/common/src/utils/IOUtils.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{D:()=>fileToArrayBuffer,M:()=>loadImageDetails});const fileToArrayBuffer=promiseOrFile=>new Promise((async(resolve,reject)=>{try{const file=await Promise.resolve(promiseOrFile);if(!file)throw new Error("No file was provided.");const reader=new FileReader;reader.readAsArrayBuffer(file),reader.onload=()=>{resolve(reader.result)},reader.onerror=()=>{reject(reader.error)}}catch(error){reject(error)}})),findNaturalSize=asUrl=>new Promise((async(resolve,reject)=>{let elemImg=null;try{elemImg=new Image,elemImg.src=asUrl,elemImg.addEventListener("load",(function(){resolve({width:elemImg.naturalWidth,height:elemImg.naturalHeight})}),{once:!0}),elemImg.addEventListener("error",(function(){URL.revokeObjectURL(asUrl),reject("Invalid Image")}),{once:!0}),await elemImg.decode("sync")}catch(error){elemImg?.src&&URL.revokeObjectURL(elemImg.src)}elemImg||reject("Unable to resolve image.")})),loadImageDetails=async(arrayBuffer,mimeType=null)=>{let details=null;const loadImage=async()=>{try{const resolveMimeType=mimeType??"image/*",asUrl=URL.createObjectURL(new Blob([arrayBuffer],{type:resolveMimeType})),naturalSize=await findNaturalSize(asUrl);details={mimeType:resolveMimeType,naturalSize,asUrl}}catch(error){}},loadSvg=async()=>{try{const asSVGText=(new TextDecoder).decode(arrayBuffer),asUrl=URL.createObjectURL(new Blob([asSVGText],{type:"image/svg+xml"})),naturalSize=await findNaturalSize(asUrl);details={mimeType:mimeType??"image/svg+xml",naturalSize,asUrl,asSVGText}}catch(error){}};if("image/svg+xml"===mimeType?await loadSvg():mimeType.startsWith("image/")?await loadImage():(await loadImage(),details||await loadSvg()),!details)throw new Error("Failed to load image");return details}},"../../packages/sheet-react/src/components/StyledStrokePath.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{$:()=>StyledStrokePath});__webpack_require__("../../node_modules/react/index.js");var _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("../../packages/common-react/src/utils/ReactUtils.ts"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/react/jsx-runtime.js");const StyledStrokePath=props=>{const{length=0,width=1,dashArray=null,dashArrayAdditional=null,isDouble=!1,isAngled=!1,offsetX=0,offsetY=0,isVertical=!1,...rest}=props,dashArrayToString=asArray=>{let retValue=null;if(asArray&&width>0){retValue="";for(let i=0;i<asArray.length;i++)retValue+=asArray[i],i<asArray.length-1&&(retValue+=",")}return retValue},dashString=dashArrayToString(dashArray);let dashStringAdditional=dashString;dashArrayAdditional&&(dashStringAdditional=dashArrayToString(dashArrayAdditional));let effectiveWidth=width,effectiveLength=length,additionalPath=null;if(isDouble){effectiveWidth=Math.floor(width/2);const shiftedOffset=effectiveWidth+effectiveWidth/2+1;let d=null;d=isVertical?`M ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+shiftedOffset)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY)} L ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+shiftedOffset)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+effectiveLength)}`:`M ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+shiftedOffset)} L ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+effectiveLength)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+shiftedOffset)}`,additionalPath=(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{strokeWidth:effectiveWidth,strokeDasharray:dashStringAdditional,d,...rest})}if(isAngled){effectiveWidth=width/2;const shiftedOffset=effectiveWidth+effectiveWidth/2;let dashStringShifted=dashStringAdditional,d=null;d=isVertical?`M ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+shiftedOffset)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY)} L ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+shiftedOffset)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+effectiveLength)}`:`M ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+shiftedOffset)} L ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+effectiveLength)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+shiftedOffset)}`,additionalPath=(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{strokeWidth:effectiveWidth,strokeDasharray:dashStringShifted,strokeDashoffset:"1",shapeRendering:"crispEdges",d,...rest})}let d=null;return d=isVertical?`M ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+effectiveWidth/2)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY)} L ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+effectiveWidth/2)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+effectiveLength)}`:`M ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+effectiveWidth/2)} L ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetX+effectiveLength)} ${_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.zJ(offsetY+effectiveWidth/2)}`,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{strokeWidth:effectiveWidth,strokeDasharray:dashString,d,...rest}),additionalPath]})};try{StyledStrokePath.displayName="StyledStrokePath",StyledStrokePath.__docgenInfo={description:"",displayName:"StyledStrokePath",props:{dashArray:{defaultValue:null,description:"",name:"dashArray",required:!1,type:{name:"number[]"}},isDouble:{defaultValue:null,description:"",name:"isDouble",required:!1,type:{name:"boolean"}},isAngled:{defaultValue:null,description:"",name:"isAngled",required:!1,type:{name:"boolean"}},dashArrayAdditional:{defaultValue:null,description:"",name:"dashArrayAdditional",required:!1,type:{name:"number[]"}},length:{defaultValue:null,description:"",name:"length",required:!1,type:{name:"number"}},width:{defaultValue:null,description:"",name:"width",required:!1,type:{name:"number"}},offsetX:{defaultValue:null,description:"",name:"offsetX",required:!1,type:{name:"number"}},offsetY:{defaultValue:null,description:"",name:"offsetY",required:!1,type:{name:"number"}},isVertical:{defaultValue:null,description:"",name:"isVertical",required:!1,type:{name:"boolean"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/StyledStrokePath.tsx#StyledStrokePath"]={docgenInfo:StyledStrokePath.__docgenInfo,name:"StyledStrokePath",path:"../../packages/sheet-react/src/components/StyledStrokePath.tsx#StyledStrokePath"})}catch(__react_docgen_typescript_loader_error){}},"../../packages/sheet-react/src/components/cell/SheetCellEditor.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{DV:()=>SheetCellEditor,ON:()=>createCellEditStateFromCell});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js"),_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("../../packages/common/src/types/Primitives.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("../../packages/models/src/text/types.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("../../packages/models/src/cell/CellTypes.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("../../packages/models/src/font/FontUtils.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("../../packages/models/src/cell/CellUtils.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("../../packages/models/src/date/DateUtils.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("../../packages/models/src/utils/CSSUtils.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("../../packages/common-react/src/types/types.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("../../packages/common-react/src/hooks/useCallbackRef.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("../../packages/common-react/src/hooks/useImperativeHandleElement.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("../../packages/common-react/src/hooks/useCopyPaste.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("../../packages/common-react/src/command/CommandMap.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("../../packages/common-react/src/command/Command.ts"),_sheetxl_grid__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("../../packages/grid/src/CellEditor.ts"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/react/jsx-runtime.js");const createCellEditStateFromCell=(clean,dirty)=>({clean:clean||null,dirty,editMode:!1}),isPercentText=(editState,text)=>{if(!editState.clean.style.numberFormat.endsWith("%"))return!1;const textTest=text??editState.dirty??"";return 0===textTest.length||textTest.endsWith("%")&&!isNaN(parseFloat(textTest.substring(0,textTest.length-1)))},EDIT_KEYS=Object.freeze([_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Delete,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Home,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.End]),SheetCellEditor=(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)((0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(((props,refForwarded)=>{const{editState:propEditState,onStartEdit,onChangeEdit:propOnChangeEdit,onSubmitEdit,onCancelEdit,onDoneEdit,preferFormula=!0,defaultTextStyle,useRichStyling=!0,bodyStyle,activeCoords,sheetModel,onCommandsChange:propOnCommandsChange,containerBounds,setNaturalSize,onNavigate,onFocus:propOnFocus,onNavigateSelection,disabled:propDisabled,style:propStyle,zoom=1,linesVisible,autoFocus=!1,...rest}=props,{height:containerHeight=0,width:containerWidth=0}=containerBounds??{},isDarkMode=bodyStyle?.isDarkMode??!1,onCommandsChange=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)(propOnCommandsChange,[propOnCommandsChange]),initialSelectionRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),[hasFocus,setHasFocus]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1),[currentSelect,setCurrentSelection]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),[editState,setEditState]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)((()=>propEditState));(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{done.current=!1,setEditState(propEditState)}),[propEditState]);const editingStyle=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>useRichStyling?editState.clean?.style??sheetModel.sheetStyle().getNormalStyle():sheetModel.sheetStyle().getNormalStyle()),[editState,useRichStyling]),effectiveCellStyle=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>useRichStyling?editingStyle:sheetModel.sheetStyle().createTemporaryStyle({font:{fill:defaultTextStyle?.fill,family:defaultTextStyle?.fontFamily,size:defaultTextStyle?.fontSize,weight:defaultTextStyle?.fontWeight,style:defaultTextStyle?.fontStyle}},sheetModel.sheetStyle().getNormalStyle())),[editingStyle,defaultTextStyle]),isWrapped=effectiveCellStyle.alignment.overflow===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.ui.Wrap||editState?.clean.type===_sheetxl_models__WEBPACK_IMPORTED_MODULE_5__.vZ.String&&(effectiveCellStyle.alignment.horizontal===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.OD.Justify||effectiveCellStyle.alignment.horizontal===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.OD.Distributed||effectiveCellStyle.alignment.vertical===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.sx.Justify||effectiveCellStyle.alignment.vertical===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.sx.Distributed),textValue=((editState,preferFormula)=>{if(!editState)return"";let quotePrefix=editState.clean?.style?.quotePrefix;if(void 0===editState.dirty||null===editState.dirty){let asTextUnformatted="";return preferFormula&&editState.clean?.formula&&(asTextUnformatted="="+editState.clean.formula,quotePrefix=!1),asTextUnformatted||(asTextUnformatted=editState.clean?.asTextUnformatted??""),quotePrefix&&(asTextUnformatted="'"+asTextUnformatted),asTextUnformatted}return editState.dirty??""})(editState,preferFormula),inputRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),refLocal=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_6__.c)(refForwarded,(()=>({startEdit:event=>{initialSelectionRef.current=event?.initialSelection;const newEditState={...propEditState,editMode:event?.editMode??!1};void 0!==event?.text&&(newEditState.dirty=event.text),newEditState.editMode===propEditState.editMode&&newEditState.dirty===propEditState.dirty||(setEditState(newEditState),onChangeEdit?.(newEditState))},submitEdit(){handleEditSubmit()},cancelEdit(){handleEditCancel()},autoFocus(){inputRef.current.focus()},dispatchEvent:event=>inputRef.current.dispatchEvent(event),focus(){inputRef.current.focus()},getLineHeight})),[onStartEdit,propEditState]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)((()=>{if(!currentSelect||!hasFocus)return;const input=inputRef.current;input&&input.setSelectionRange(currentSelect.start,currentSelect.end,currentSelect.direction)}),[inputRef.current,currentSelect,textValue]);let fontSize=effectiveCellStyle.font.size*_sheetxl_models__WEBPACK_IMPORTED_MODULE_7__.On();effectiveCellStyle.font.verticalAlign!==_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.v1.Sub&&effectiveCellStyle.font.verticalAlign!==_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.v1.Super||(fontSize*=_sheetxl_models__WEBPACK_IMPORTED_MODULE_7__.wr(effectiveCellStyle.font.family));const editorPlacedFrame=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>{const frameFromText=_sheetxl_models__WEBPACK_IMPORTED_MODULE_8__.Ok(textValue,effectiveCellStyle,editState?.clean?.type===_sheetxl_models__WEBPACK_IMPORTED_MODULE_5__.vZ.String),effectiveWidth=useRichStyling&&editState?.clean?editState.clean.insets().right+editState.clean.insets().left:0;let frameSize=null;isWrapped&&(frameSize={width:containerWidth-effectiveWidth});return frameFromText.layout(frameSize)}),[textValue,effectiveCellStyle,containerWidth,editState,useRichStyling]),getLineHeight=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((()=>Math.ceil(editorPlacedFrame?.lines[0]?.bounds.height)),[editorPlacedFrame]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)((()=>{if(!editorPlacedFrame)return;const hInsets=useRichStyling&&editState?.clean?editState.clean.insets().left+editState.clean.insets().right:0,fudge=useRichStyling&&editState?.clean?.04*editState?.clean.style.font.size:1;setNaturalSize?.({width:isWrapped?void 0:editorPlacedFrame.bounds.width+hInsets+fudge,height:editorPlacedFrame.bounds.height})}),[editorPlacedFrame,setNaturalSize,editState,useRichStyling]);const onChangeEdit=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)(propOnChangeEdit,[propOnChangeEdit]),handleTextChange=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((textValue=>{if(editState.dirty===textValue)return;const newEditState={...editState};newEditState.dirty=textValue,inputRef.current,setEditState(newEditState),onChangeEdit?.(newEditState)}),[editState]),handleEditModeChange=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((editMode=>{if(editState.editMode===editMode)return;const newEditState={...editState};newEditState.editMode=editMode,setEditState(newEditState),onChangeEdit?.(newEditState)}),[editState]),done=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1),handleEditSubmit=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((()=>{done.current||(done.current=!0,onSubmitEdit?.(editState),onDoneEdit?.())}),[onSubmitEdit,editState]),handleEditCancel=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((()=>{done.current=!0,setEditState(propEditState),onCancelEdit?.(),onDoneEdit?.()}),[onCancelEdit,propEditState]),handleKeyDown=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((e=>{if(!inputRef.current)return;if(e.key,e.isDefaultPrevented(),!(e.isTrusted||e.nativeEvent.ctrlKey||e.nativeEvent.metaKey||e.nativeEvent.altKey||e.nativeEvent.isComposing||-1===_sheetxl_grid__WEBPACK_IMPORTED_MODULE_9__.o.indexOf(e.nativeEvent.key)&&"Backspace"!==e.nativeEvent.key)){const newEditState={...editState};let end=0;return isPercentText(newEditState,newEditState.dirty)&&!isNaN(parseFloat(e.key))?(newEditState.dirty?.endsWith("%")?newEditState.dirty=(newEditState.dirty.substring(0,newEditState.dirty.length-1)??"")+e.key+"%":newEditState.dirty=(newEditState.dirty??"")+e.key+"%",end=newEditState.dirty.length-1):"Backspace"===e.nativeEvent.key?(newEditState.dirty="",end=newEditState.dirty.length):(newEditState.dirty=(newEditState.dirty??"")+e.key,end=newEditState.dirty.length),inputRef.current.value=newEditState?.dirty,initialSelectionRef.current={start:end,end,direction:"forward"},inputRef.current?.setSelectionRange(end,end,"forward"),setEditState(newEditState),onChangeEdit?.(newEditState),void e.preventDefault()}const isCtrlKey=e.nativeEvent.ctrlKey,isShiftKey=e.nativeEvent.shiftKey,isAltKey=e.nativeEvent.altKey,isMetaKey=e.nativeEvent.metaKey;if(isCtrlKey&&"z"===e.key&&e.stopPropagation(),e.which===_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Escape)return e.preventDefault(),void handleEditCancel();if(e.which===_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.F2)return handleEditModeChange(!0),void e.preventDefault();const target=e.target;if("%"===e.key&&target.selectionStart===target.selectionEnd&&"%"===target.value[target.selectionStart]&&editState?.clean?.style.numberFormat.includes("%"))return setCurrentSelection({start:target.selectionStart+1,end:target.selectionEnd+1,direction:target.selectionDirection}),void e.preventDefault();if(e.which===_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Enter){if(e.preventDefault(),isMetaKey||isAltKey){const newValue=textValue.substring(0,target.selectionStart)+"\n"+textValue.substring(target.selectionEnd);return handleTextChange(newValue),void setCurrentSelection({start:target.selectionStart+1,end:target.selectionStart+1,direction:target.selectionDirection})}handleEditSubmit(),onNavigateSelection?.(isShiftKey?_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Up:_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Down)}if(e.which===_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Tab)return e.preventDefault(),handleEditSubmit(),void onNavigateSelection?.(isShiftKey?_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Left:_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Right);let navigateDirection=null;switch(e.which){case _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Left:navigateDirection=_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Left;break;case _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Right:navigateDirection=_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Right;break;case _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Up:navigateDirection=_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Up;break;case _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.cK.Down:navigateDirection=_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.CF.Down}if(navigateDirection){if(!(isCtrlKey||isShiftKey||isAltKey||isMetaKey)&&!editState.editMode)return e.preventDefault(),handleEditSubmit(),void(e.isTrusted&&onNavigate?.(navigateDirection))}editState.editMode&&(navigateDirection||EDIT_KEYS.includes(e.which))&&e.stopPropagation()}),[editState,onNavigate,onNavigateSelection]),selectAll=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((()=>{inputRef.current?.focus(),setTimeout((()=>{inputRef.current?.select()}),0)}),[]),copyValueCellAbove=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((()=>{const currentText=inputRef.current?.value;let value="";if(activeCoords.rowIndex>0){const cellAbove=sheetModel.getCell({rowIndex:activeCoords.rowIndex-1,colIndex:activeCoords.colIndex});cellAbove&&(value=cellAbove.asTextUnformatted)}handleTextChange(currentText+value)}),[activeCoords,sheetModel]),enterCurrentTime=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((()=>{handleTextChange((inputRef.current?.value||"")+_sheetxl_models__WEBPACK_IMPORTED_MODULE_11__.F3(sheetModel.is1904DateSystem()))}),[sheetModel]),enterCurrentDate=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((()=>{handleTextChange((inputRef.current?.value||"")+_sheetxl_models__WEBPACK_IMPORTED_MODULE_11__.yD(sheetModel.is1904DateSystem()))}),[sheetModel]),onFocus=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_3__.c)((e=>{setHasFocus(!0);const initialSelection=initialSelectionRef.current;if(!1!==initialSelection){let start,end;const textValue=inputRef.current.value;isPercentText(editState,textValue)&&(start=textValue.length-1,end=textValue.length-1),start=initialSelection?.start??start??textValue.length,end=initialSelection?.end??end??textValue.length,initialSelectionRef.current=!1,setCurrentSelection({start,end,direction:"forward"})}propOnFocus?.(e)}),[propOnFocus,editState]),source={element:()=>inputRef.current,doCopy:args=>{const toClipboard=inputRef.current.value.substring(inputRef.current.selectionStart,inputRef.current.selectionEnd);if(args?.isCut){const remaining=inputRef.current.value.substring(0,inputRef.current.selectionStart)+inputRef.current.value.substring(inputRef.current.selectionEnd,inputRef.current.value.length);handleTextChange(remaining)}return toClipboard}},target={element:()=>inputRef.current,doPaste:(item,_args)=>{const asText=item.toText?.();if(!asText)return!0;const remaining=inputRef.current.value.substring(0,inputRef.current.selectionStart)+asText+inputRef.current.value.substring(inputRef.current.selectionEnd,inputRef.current.value.length);return handleTextChange(remaining),!0}},{commands:commandsCopyPaste}=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_12__.e8)({source,target,onNativePaste:(_e,_args)=>null,onNativeCopy:(_e,_args)=>null}),commandTarget=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>({contains:element=>inputRef.current?.contains(element)||!1,focus(){inputRef.current.focus()}})),[]),commands=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_13__.yc([new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_14__.a2("selectAll",commandTarget,{label:"Select All",description:"Select all of the text in cell.",shortcut:{key:"a",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Ctrl]}},selectAll),new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_14__.a2("copyValueCellAbove",commandTarget,{label:"Copy From Above",description:"Copy the value from the cell above the active cell into the cell or the formula bar.",shortcut:[{key:"Quote",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Ctrl]},{key:"Quote",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Ctrl,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Shift]}]},copyValueCellAbove),new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_14__.a2("enterCurrentTime",commandTarget,{label:"Current Time",description:"Insert the current time.",shortcut:{key:"Semicolon",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Ctrl,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Shift]}},enterCurrentTime),new _sheetxl_common_react__WEBPACK_IMPORTED_MODULE_14__.a2("enterCurrentDate",commandTarget,{label:"Current Date",description:"Insert the current date.",shortcut:{key:"Semicolon",modifiers:[_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_2__.Uq.Ctrl]}},enterCurrentDate),commandsCopyPaste.getCommand("cut"),commandsCopyPaste.getCommand("copy"),commandsCopyPaste.getCommand("paste")])),[]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>(onCommandsChange?.(commands),()=>{onCommandsChange?.(null)})),[]);const[disabledAutoFocus,setDisabledAutofocus]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!autoFocus);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{setDisabledAutofocus(!1)}),[]);const insets=useRichStyling&&editState?.clean?editState.clean.insets():_sheetxl_common__WEBPACK_IMPORTED_MODULE_10__.V4;let editorX=insets.left+1;const editorWidthReduction=insets.left+insets.right+2-1,editorHeight=editorPlacedFrame?.bounds.height??0;let maxEditorHeight,editorY=insets.top;return effectiveCellStyle.alignment.vertical===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.sx.Center?editorY=Math.max(0,(containerHeight-(insets.top+insets.bottom)-editorHeight)/2):effectiveCellStyle.alignment.vertical===_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.sx.Bottom&&(editorY=Math.max(0,containerHeight-(insets.top+insets.bottom)-editorHeight)),void 0!==linesVisible&&editorPlacedFrame?.lines[0]?.bounds&&(maxEditorHeight=editorPlacedFrame?.lines[0]?.bounds.height*linesVisible),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"editor-container",onMouseDown:_e=>{inputRef.current&&document.activeElement!==inputRef.current&&requestAnimationFrame((()=>{inputRef.current.focus()}))},ref:refLocal,...rest,style:{display:"flex",flexGrow:1,alignSelf:"stretch",height:"100%",width:"100%",maxWidth:"100%",maxHeight:"100%",cursor:"initial",...propStyle},children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"editor-placement",style:{display:"flex",flexGrow:1,position:"relative",top:editorY*zoom+1,left:editorX*zoom,width:`calc(100% - ${editorWidthReduction*zoom}px)`,maxWidth:`calc(100% - ${editorWidthReduction*zoom}px)`,height:(maxEditorHeight??editorHeight)*zoom,maxHeight:(maxEditorHeight??editorHeight)*zoom},children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("textarea",{spellCheck:"false",ref:inputRef,value:textValue,disabled:disabledAutoFocus,readOnly:propDisabled,name:"sheet-cell-editor",autoComplete:"off",autoCapitalize:"off",style:{flex:"1 1 100%",fontSize:fontSize?fontSize*zoom+"px":"inherit",fontKerning:"none",fontFamily:useRichStyling?`${effectiveCellStyle.font.family}`:"inherit",fontWeight:`${effectiveCellStyle.font.weight}`,fontStyle:`${effectiveCellStyle.font.style}`,lineHeight:(editorPlacedFrame?.lines[0]?.bounds.height??0)*zoom+"px",height:(editorPlacedFrame?.bounds.height??0)*zoom,textRendering:"geometricPrecision",letterSpacing:effectiveCellStyle.font.letterSpacing,boxSizing:"border-box",padding:"0px",margin:"0px",borderWidth:0,outline:"none",resize:"none",overflow:"hidden",verticalAlign:"baseline",textDecoration:_sheetxl_models__WEBPACK_IMPORTED_MODULE_15__.On(effectiveCellStyle.font.underline,effectiveCellStyle.font.strike),textDecorationStyle:_sheetxl_models__WEBPACK_IMPORTED_MODULE_15__.Vb(effectiveCellStyle.font.underline),textAlign:_sheetxl_models__WEBPACK_IMPORTED_MODULE_15__.FA(useRichStyling?editState.clean?.renderHorizontalAlignment:_sheetxl_models__WEBPACK_IMPORTED_MODULE_4__.OD.Left),background:"transparent",color:useRichStyling?effectiveCellStyle.font.fill.asCSS(isDarkMode):void 0,maxHeight:"100%",maxWidth:"100%",width:"100%",userSelect:"text",position:"absolute",whiteSpace:isWrapped?"normal":"pre",wordWrap:"break-word"},onFocus,onBlur:()=>{setHasFocus(!1)},onSelect:_e=>{},onChange:e=>{inputRef.current&&!done.current&&(initialSelectionRef.current=!1,handleTextChange(e.target.value),e.target.value,e.target.selectionStart,e.target.selectionEnd,e.target.selectionDirection,setCurrentSelection({start:e.target.selectionStart,end:e.target.selectionEnd,direction:e.target.selectionDirection}))},onMouseDown:_e=>{handleEditModeChange(!0)},onKeyDown:handleKeyDown})})})})));try{SheetCellEditor.displayName="SheetCellEditor",SheetCellEditor.__docgenInfo={description:"SheetCellEditor\nControlled cell editor for updating state.",displayName:"SheetCellEditor",props:{sheetModel:{defaultValue:null,description:"used for commands will be removed",name:"sheetModel",required:!1,type:{name:"ISheetModel"}},activeCoords:{defaultValue:null,description:"used for commands will be removed",name:"activeCoords",required:!1,type:{name:"CellCoords"}},onCommandsChange:{defaultValue:null,description:"Notify that there is a new map of commands",name:"onCommandsChange",required:!1,type:{name:"(commands: CommandMap) => void"}},preferFormula:{defaultValue:null,description:"",name:"preferFormula",required:!1,type:{name:"boolean"}},bodyStyle:{defaultValue:null,description:"",name:"bodyStyle",required:!1,type:{name:"GridSurfaceStyle"}},linesVisible:{defaultValue:null,description:"Returns the number of lines to display. The minimum is 1.\n@defaultValue 'The number of lines required to display the text'",name:"linesVisible",required:!1,type:{name:"number"}},editState:{defaultValue:null,description:"editState of the cell",name:"editState",required:!1,type:{name:"EditState<ICellModel, string>"}},defaultTextStyle:{defaultValue:null,description:"Styling for the textfield",name:"defaultTextStyle",required:!1,type:{name:"TextStyle"}},useRichStyling:{defaultValue:null,description:"Override defaultText styling with cellStyling?",name:"useRichStyling",required:!1,type:{name:"boolean"}},onStartEdit:{defaultValue:null,description:"Callback when a value has changed.",name:"onStartEdit",required:!1,type:{name:"(editState: EditState<ICellModel, string>) => void"}},onChangeEdit:{defaultValue:null,description:"Callback when a value has changed.",name:"onChangeEdit",required:!1,type:{name:"(editState: EditState<ICellModel, string>) => void"}},onSubmitEdit:{defaultValue:null,description:"Callback to submit the value back to data store",name:"onSubmitEdit",required:!1,type:{name:"(editState: EditState<ICellModel, string>) => void"}},onCancelEdit:{defaultValue:null,description:"On Cancel callbacks. Hides the editor",name:"onCancelEdit",required:!1,type:{name:"() => void"}},onDoneEdit:{defaultValue:null,description:"Called when either the cancel or submit is called.",name:"onDoneEdit",required:!1,type:{name:"() => void"}},containerBounds:{defaultValue:null,description:"Position of editor, x, y, width and height",name:"containerBounds",required:!1,type:{name:"Bounds"}},disabled:{defaultValue:null,description:"",name:"disabled",required:!1,type:{name:"boolean"}},setNaturalSize:{defaultValue:null,description:"",name:"setNaturalSize",required:!1,type:{name:"(size: Size) => void"}},onNavigate:{defaultValue:null,description:"",name:"onNavigate",required:!1,type:{name:"(direction: CartesianDirection, select?: boolean, contentful?: boolean) => void"}},onNavigateSelection:{defaultValue:null,description:"",name:"onNavigateSelection",required:!1,type:{name:"(direction: CartesianDirection) => void"}},zoom:{defaultValue:null,description:"",name:"zoom",required:!1,type:{name:"number"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<CellEditorElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/cell/SheetCellEditor.tsx#SheetCellEditor"]={docgenInfo:SheetCellEditor.__docgenInfo,name:"SheetCellEditor",path:"../../packages/sheet-react/src/components/cell/SheetCellEditor.tsx#SheetCellEditor"})}catch(__react_docgen_typescript_loader_error){}},"../../packages/sheet-react/src/components/drawing/useDrawingModelListener.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{l:()=>useDrawingModelListener});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js");const useDrawingModelListener=(model,listener,options)=>{const listenerRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(listener);listenerRef.current=listener;const fireOnModelChange=options?.fireOnModelChange??!0;(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{if(!model||!listenerRef.current)return;const stableListener={onBoundsChange:bounds=>{listenerRef.current?.onBoundsChange?.(bounds)},onAnyChange:model=>{listenerRef.current?.onAnyChange?.(model)},onAnchorUpdate:cellRangeCoords=>{listenerRef.current?.onAnchorUpdate?.(cellRangeCoords)},onDelete:model=>{listenerRef.current?.onDelete?.(model)},onProtectedChange:drawing=>{listenerRef.current?.onProtectedChange?.(drawing)},onClose:model=>{listenerRef.current?.onDelete?.(model)}},remover=model.addListener(stableListener);return fireOnModelChange&&(stableListener.onBoundsChange(model.getBounds()),stableListener.onAnyChange(model),stableListener.onAnchorUpdate(model.getAnchor()),stableListener.onProtectedChange(model)),()=>{remover?.()}}),[model])}},"../../packages/sheet-react/src/components/sheet/Sheet.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{c:()=>Sheet});var react=__webpack_require__("../../node_modules/react/index.js"),clsx=__webpack_require__("../../node_modules/clsx/dist/clsx.mjs"),useMeasure=__webpack_require__("../../node_modules/react-use/esm/useMeasure.js"),CommonUtils=__webpack_require__("../../packages/common/src/utils/CommonUtils.ts"),Primitives=__webpack_require__("../../packages/common/src/types/Primitives.ts"),LicenseManager=__webpack_require__("../../packages/models/src/license/LicenseManager.ts"),RangeUtils=__webpack_require__("../../packages/models/src/range/RangeUtils.ts"),ISheetModel=__webpack_require__("../../packages/models/src/sheet/ISheetModel.ts"),SheetUtils=__webpack_require__("../../packages/models/src/sheet/SheetUtils.ts"),AddressUtils=__webpack_require__("../../packages/models/src/range/AddressUtils.ts"),types=__webpack_require__("../../packages/models/src/text/types.ts"),ISheetHeadersModel=__webpack_require__("../../packages/models/src/sheet/ISheetHeadersModel.ts"),CellTypes=__webpack_require__("../../packages/models/src/cell/CellTypes.ts"),IFill=__webpack_require__("../../packages/models/src/cell/IFill.ts"),ICellBorder=__webpack_require__("../../packages/models/src/cell/ICellBorder.ts"),FontUtils=__webpack_require__("../../packages/models/src/font/FontUtils.ts"),types_types=__webpack_require__("../../packages/common-react/src/types/types.ts"),useCallbackRef=__webpack_require__("../../packages/common-react/src/hooks/useCallbackRef.ts"),useEditMode=__webpack_require__("../../packages/common-react/src/hooks/useEditMode.ts"),ReactUtils=__webpack_require__("../../packages/common-react/src/utils/ReactUtils.ts"),ITooltip=__webpack_require__("../../packages/common-react/src/components/ITooltip.ts"),Notifier=__webpack_require__("../../packages/common-react/src/utils/Notifier.ts"),useImperativeHandleElement=__webpack_require__("../../packages/common-react/src/hooks/useImperativeHandleElement.ts"),CommandMap=__webpack_require__("../../packages/common-react/src/command/CommandMap.ts"),ScrollPane=__webpack_require__("../../packages/common-react/src/scroll/ScrollPane.tsx"),useSelection=__webpack_require__("../../packages/grid/src/hooks/useSelection.tsx"),helpers=__webpack_require__("../../packages/grid/src/utils/helpers.ts"),useKeyboardEditorOverlay=__webpack_require__("../../packages/grid/src/hooks/useKeyboardEditorOverlay.tsx"),SVG=__webpack_require__("../../packages/grid/src/SVG.tsx"),utils_RangeUtils=__webpack_require__("../../packages/grid/src/utils/RangeUtils.ts"),useSynchronizedPointerHandler=__webpack_require__("../../packages/common-react/src/hooks/useSynchronizedPointerHandler.ts");let HeaderDirection=function(HeaderDirection){return HeaderDirection.COLS="col",HeaderDirection.ROWS="row",HeaderDirection}({});const useHeaderSelection=({gridRef,gridMainRef,selectionMain,direction=HeaderDirection.ROWS,headerCount:propHeaderCount,selectionPolicy="multiple",newSelectionMode="clear",alwaysScrollToActiveCoords=!0,onDragStart:propOnDragStart,onDragEnd:propOnDragEnd,pointerDownInterceptor,pointerMoveInterceptor,onPointerUp})=>{const headerCount=propHeaderCount??((direction===HeaderDirection.ROWS?gridRef.current?.rowCount:gridRef.current?.columnCount)||0),selectionStart=(0,react.useRef)(null),selectionEnd=(0,react.useRef)(null),isSelecting=(0,react.useRef)(!1),firstActiveCoords=(0,react.useRef)(null),getFullStart=(0,react.useCallback)((cell=>direction===HeaderDirection.COLS?{rowIndex:0,colIndex:cell.colIndex}:{rowIndex:cell.rowIndex,colIndex:0}),[direction]),getFullEnd=(0,react.useCallback)((cell=>direction===HeaderDirection.COLS?{rowIndex:gridMainRef.current?gridMainRef.current.rowCount-1:0,colIndex:cell.colIndex}:{rowIndex:cell.rowIndex,colIndex:gridMainRef.current?gridMainRef.current.columnCount-1:0}),[direction]),modifySelection=coords=>{selectionEnd.current=getFullEnd(coords),selectionMain.modifySelection(selectionEnd.current,selectionStart.current)},getCellCoordsFromOffset=(0,react.useCallback)(((x,y)=>{if(!gridRef.current)return;const coords=gridRef.current.getViewFromOffset(x,y)?.getCellCoordsFromOffset(x,y);return coords?(direction===HeaderDirection.COLS?coords.rowIndex=gridMainRef.current.getViewport().rowStart:coords.colIndex=gridMainRef.current.getViewport().colStart,coords):void 0}),[]),scrollCellIntoView=(0,react.useCallback)(((coords,bothDirections=!1)=>{let coordsScroll=coords;bothDirections||(coordsScroll={...coords},direction===HeaderDirection.ROWS?delete coordsScroll.colIndex:delete coordsScroll.rowIndex),gridMainRef.current?.scrollCellIntoView(coordsScroll)}),[direction]),onDragEnd=(0,useCallbackRef.c)(propOnDragEnd,[propOnDragEnd]),onDragStart=(0,useCallbackRef.c)(propOnDragStart,[propOnDragStart]),selectionPointerHandler=(0,react.useMemo)((()=>({onPointerDown:e=>{if(!gridRef||!gridRef.current)return;if(e.nativeEvent.defaultPrevented)return;const coords=getCellCoordsFromOffset(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!coords)return;e.nativeEvent.which,types_types.eZ.Right;const isShiftKey=e.nativeEvent.shiftKey,allowMultiple=e.nativeEvent.ctrlKey||e.nativeEvent.metaKey;if(!1===pointerDownInterceptor?.(e,coords))return;onDragStart?.(),isSelecting.current=!0;const viewAnchor=gridMainRef.current?.getViewFromOffset(e.nativeEvent.clientX,e.nativeEvent.clientY),coordsAnchor=(activeCoords=coords,visibleCellRange=viewAnchor.visibleCellRange,direction===HeaderDirection.COLS?{...activeCoords,rowIndex:visibleCellRange.rowStart}:{...activeCoords,colIndex:visibleCellRange.colStart});var activeCoords,visibleCellRange;if(isShiftKey)modifySelection(coords);else{if(allowMultiple)return((start,end=start,anchor)=>{selectionStart.current=getFullStart(start),selectionEnd.current=getFullEnd(end),selectionMain.appendSelection(selectionStart.current,selectionEnd.current,anchor)})(coords,coords,coordsAnchor),void(alwaysScrollToActiveCoords&&scrollCellIntoView(coordsAnchor,!0));((start,end=start,anchor)=>{selectionStart.current=getFullStart(start),selectionEnd.current=getFullEnd(end),selectionMain.newSelection(selectionStart.current,selectionEnd.current,anchor)})(coords,coords,coordsAnchor),modifySelection(coords),alwaysScrollToActiveCoords&&scrollCellIntoView(coordsAnchor,!0)}},onPointerMoveOrWait:CommonUtils.G2((e=>{if(!isSelecting.current||!gridRef?.current)return;const coords=getCellCoordsFromOffset(e.clientX,e.clientY);if(coords&&!1!==pointerMoveInterceptor?.(e,coords)){if((0,utils_RangeUtils.rv)(firstActiveCoords.current,coords))return selectionMain.clearSelections();modifySelection(coords),scrollCellIntoView(coords)}}),60),onPointerUp:e=>{isSelecting.current=!1,onDragEnd?.(),onPointerUp?.(e)},processTouch:!0,consumeTouch:!0})),[selectionPolicy,alwaysScrollToActiveCoords,headerCount,newSelectionMode,selectionMain,pointerDownInterceptor,onPointerUp]);return{onPointerDown:(0,useCallbackRef.c)((0,useSynchronizedPointerHandler.H)(selectionPointerHandler),[]),getCellCoordsFromOffset}};try{useHeaderSelection.displayName="useHeaderSelection",useHeaderSelection.__docgenInfo={description:"Hook to enable selection in grid",displayName:"useHeaderSelection",props:{gridMainRef:{defaultValue:null,description:"Access grid functions",name:"gridMainRef",required:!0,type:{name:"MutableRefObject<GridElement>"}},selectionMain:{defaultValue:null,description:"The results of the selection",name:"selectionMain",required:!0,type:{name:"SelectionResults"}},gridRef:{defaultValue:null,description:"Access grid functions",name:"gridRef",required:!0,type:{name:"MutableRefObject<GridElement>"}},direction:{defaultValue:{value:"HeaderDirection.ROWS"},description:"The direction the header is oriented",name:"direction",required:!1,type:{name:"enum",value:[{value:'"col"'},{value:'"row"'}]}},headerCount:{defaultValue:null,description:"No of headers in the grid",name:"headerCount",required:!1,type:{name:"number"}},alwaysScrollToActiveCoords:{defaultValue:{value:"true"},description:"scroll to active cell when",name:"alwaysScrollToActiveCoords",required:!1,type:{name:"boolean"}},pointerDownInterceptor:{defaultValue:null,description:"Pointerdown Interceptor",name:"pointerDownInterceptor",required:!1,type:{name:"(e: PointerEvent<Element>, coords: CellCoords) => boolean"}},pointerMoveInterceptor:{defaultValue:null,description:"Pointer Move Interceptor",name:"pointerMoveInterceptor",required:!1,type:{name:"(e: PointerEvent, coords: CellCoords) => boolean"}},onPointerUp:{defaultValue:null,description:"Pointer Up Listener",name:"onPointerUp",required:!1,type:{name:"(e: PointerEvent) => void"}},canSelectionSpanMergedCells:{defaultValue:null,description:"Return true if the coordinate span can overlap merged ranges.\n@param start\n@param end\n@returns",name:"canSelectionSpanMergedCells",required:!1,type:{name:"(start: CellCoords, end: CellCoords) => boolean"}},selectionPolicy:{defaultValue:{value:"multiple"},description:"Selection policy",name:"selectionPolicy",required:!1,type:{name:"enum",value:[{value:'"range"'},{value:'"multiple"'},{value:'"single"'}]}},newSelectionMode:{defaultValue:{value:"clear"},description:"New selection mode",name:"newSelectionMode",required:!1,type:{name:"enum",value:[{value:'"clear"'},{value:'"modify"'},{value:'"append"'}]}},onDragStart:{defaultValue:null,description:"Callback when drag starts",name:"onDragStart",required:!1,type:{name:"() => void"}},onDragEnd:{defaultValue:null,description:"Callback when drag ends",name:"onDragEnd",required:!1,type:{name:"() => void"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/grid/src/hooks/useHeaderSelection.tsx#useHeaderSelection"]={docgenInfo:useHeaderSelection.__docgenInfo,name:"useHeaderSelection",path:"../../packages/grid/src/hooks/useHeaderSelection.tsx#useHeaderSelection"})}catch(__react_docgen_typescript_loader_error){}var Grid=__webpack_require__("../../packages/grid/src/Grid.tsx"),injectStylesIntoStyleTag=__webpack_require__("../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),styleDomAPI=__webpack_require__("../../node_modules/style-loader/dist/runtime/styleDomAPI.js"),styleDomAPI_default=__webpack_require__.n(styleDomAPI),insertBySelector=__webpack_require__("../../node_modules/style-loader/dist/runtime/insertBySelector.js"),insertBySelector_default=__webpack_require__.n(insertBySelector),setAttributesWithoutAttributes=__webpack_require__("../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"),setAttributesWithoutAttributes_default=__webpack_require__.n(setAttributesWithoutAttributes),insertStyleElement=__webpack_require__("../../node_modules/style-loader/dist/runtime/insertStyleElement.js"),insertStyleElement_default=__webpack_require__.n(insertStyleElement),styleTagTransform=__webpack_require__("../../node_modules/style-loader/dist/runtime/styleTagTransform.js"),styleTagTransform_default=__webpack_require__.n(styleTagTransform),Sheet_module=__webpack_require__("../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].use[1]!../../packages/sheet-react/src/components/sheet/Sheet.module.css"),options={};options.styleTagTransform=styleTagTransform_default(),options.setAttributes=setAttributesWithoutAttributes_default(),options.insert=insertBySelector_default().bind(null,"head"),options.domAPI=styleDomAPI_default(),options.insertStyleElement=insertStyleElement_default();injectStylesIntoStyleTag_default()(Sheet_module.A,options);const sheet_Sheet_module=Sheet_module.A&&Sheet_module.A.locals?Sheet_module.A.locals:void 0;var ICellHeader=__webpack_require__("../../packages/models/src/cell/ICellHeader.ts"),Command=__webpack_require__("../../packages/common-react/src/command/Command.ts"),useCopyPaste=__webpack_require__("../../packages/common-react/src/hooks/useCopyPaste.ts"),Selection=__webpack_require__("../../packages/grid/src/Selection.tsx"),Errors=__webpack_require__("../../packages/common/src/utils/Errors.ts"),CSSUtils=__webpack_require__("../../packages/models/src/utils/CSSUtils.ts");const parseFill=(cssStyle,fill)=>{if(fill)if(fill.fillType===IFill.kP.Solid)cssStyle.background=CSSUtils.qj(fill.color)||"none",cssStyle["mso-pattern"]="black none";else if(fill.fillType===IFill.kP.Pattern){const patternFill=fill;cssStyle.background=CSSUtils.qj(patternFill.background)||"none";const cssForeground=CSSUtils.qj(patternFill.foreground)||"";if(patternFill.patternType===IFill.O9.Solid)cssStyle["mso-pattern"]=`${cssStyle.background} none`,cssStyle.background=cssForeground;else{const cssPattern=CSSUtils.VR(patternFill.patternType);cssStyle["mso-pattern"]=cssForeground+(cssPattern?" ":"")+cssPattern}}else if(fill.fillType===IFill.kP.Gradient){const gradientFill=fill;cssStyle.background=CSSUtils.qj(gradientFill.stops?.[0]?.color)||"auto",cssStyle.msoGradient=CSSUtils.R7(gradientFill)||"auto"}};class SheetHTMLTableWriter{_visitedStyles=new Map;_lastStyleClassId=63;_wroteTD=!1;_mergingCells=new Map;constructor(sheetModel,notifier,includeSizeInCell){if(!sheetModel)throw new Error("Can not create with a null sheetModel");this._sheetModel=sheetModel,this._notifier=notifier,this._includeSizeInCell=includeSizeInCell??!1,this._normalStyle=sheetModel.sheetStyle().getNormalStyle()}_createCSSStyle(style){const normalStyle=this._normalStyle,cssStyle={},isCustom=key=>{const fromStyle=CommonUtils.Gw(style,key),fromNormal=CommonUtils.Gw(normalStyle,key);return fromStyle!==fromNormal&&!fromNormal?.isEqual?.(fromStyle)};isCustom("font.fill")&&(cssStyle.color=CSSUtils.qj(style.font.fill)),parseFill(cssStyle,style.fill),isCustom("font.size")&&(cssStyle["font-size"]=CSSUtils.F3(style.font.size)),isCustom("font.weight")&&(cssStyle["font-weight"]=style.font.weight),isCustom("font.style")&&(cssStyle["font-style"]=style.font.style);const isCustomUnderline=isCustom("font.underline");return(isCustomUnderline||isCustom("font.strike"))&&(cssStyle["text-decoration"]=CSSUtils.On(style.font.underline,style.font.strike),isCustomUnderline&&(cssStyle["text-underline-style"]=CSSUtils.kZ(style.font.underline))),(isCustom("font.family")||isCustom("font.familyFallbacks"))&&(cssStyle["font-family"]=CSSUtils.GF(style.font.family,style.font.familyFallbacks)),isCustom("numberFormat")&&(cssStyle["mso-number-format"]=CSSUtils.HZ(style.numberFormat)),isCustom("alignment.horizontal")&&(style.alignment.horizontal===types.OD.CenterContinuous?cssStyle["text-align"]="center-across":style.alignment.horizontal===types.OD.Fill?cssStyle["text-align"]="fill":style.alignment.horizontal===types.OD.Distributed?cssStyle["text-align"]=style.alignment.justifyLastLine?"121":"010":cssStyle["text-align"]=CSSUtils.FA(style.alignment.horizontal)),isCustom("alignment.vertical")&&(style.alignment.vertical===types.sx.Distributed?cssStyle["vertical-align"]="121":cssStyle["vertical-align"]=CSSUtils.QG(style.alignment.vertical)),style.border.top.style&&style.border.top.style!==ICellBorder.cz.None&&(cssStyle["border-top"]=CSSUtils.NS(style.border.top)),style.border.left.style&&style.border.left.style!==ICellBorder.cz.None&&(cssStyle["border-left"]=CSSUtils.NS(style.border.left)),style.border.right.style&&style.border.right.style!==ICellBorder.cz.None&&(cssStyle["border-right"]=CSSUtils.NS(style.border.right)),style.border.bottom.style&&style.border.bottom.style!==ICellBorder.cz.None&&(cssStyle["border-bottom"]=CSSUtils.NS(style.border.bottom)),style.border.diagonalUp.style&&style.border.diagonalUp.style!==ICellBorder.cz.None&&(cssStyle["border-mso-diagonal-up"]=CSSUtils.NS(style.border.diagonalUp)),style.border.diagonalDown.style&&style.border.diagonalDown.style!==ICellBorder.cz.None&&(cssStyle["border-mso-diagonal-down"]=CSSUtils.NS(style.border.diagonalDown)),isCustom("alignment.overflow")&&(cssStyle["white-space"]=CSSUtils.Sh(style.alignment.overflow),style.alignment.overflow===types.ui.Shrink&&(cssStyle["mso-text-control"]="shrinktofit")),isCustom("alignment.rotation")&&(cssStyle["mso-rotate"]=CSSUtils.AE(style.alignment.rotation)),isCustom("alignment.indent")&&(cssStyle["mso-char-indent-count"]=style.alignment.indent),0===Object.keys(cssStyle).length?null:cssStyle}_createCSSNormalStyle(){const style=this._normalStyle,cssStyle={"padding-top":"1px","padding-left":"1px","padding-right":"1px","mso-ignore":"padding"};return cssStyle.color=CSSUtils.qj(style.font.fill),parseFill(cssStyle,style.fill),cssStyle["font-size"]=CSSUtils.F3(style.font.size),cssStyle["font-weight"]=style.font.weight,cssStyle["font-style"]=style.font.style,cssStyle["text-decoration"]=CSSUtils.On(style.font.underline,style.font.strike),cssStyle["font-family"]=CSSUtils.GF(style.font.family,style.font.familyFallbacks),cssStyle["mso-font-charset"]="0",cssStyle["mso-background-source"]="auto",cssStyle["mso-number-format"]=CSSUtils.HZ(style.numberFormat),cssStyle["text-align"]=CSSUtils.FA(style.alignment.horizontal),cssStyle["vertical-align"]=CSSUtils.QG(style.alignment.vertical),cssStyle.border="none",cssStyle["mso-pattern"]="auto",cssStyle["white-space"]=CSSUtils.Sh(style.alignment.overflow),style.alignment.overflow===types.ui.Shrink&&(cssStyle["mso-text-control"]="shrinktofit"),cssStyle["mso-rotate"]="0",style.alignment.indent>0&&(cssStyle["mso-char-indent-count"]=style.alignment.indent),cssStyle["mso-protection"]="locked visible",cssStyle}writeHTMLCell(cell,coords,valueWriter){let retValue;if(this._hasMerges){const coordsAsRange={rowStart:coords.rowIndex,colStart:coords.colIndex,rowEnd:coords.rowIndex,colEnd:coords.colIndex},merges=this._sheetModel.getMerges([coordsAsRange]);if(merges&&merges.length>0){const mergeRange=merges[0],key=AddressUtils.ho({colIndex:mergeRange.colStart,rowIndex:mergeRange.rowStart});mergeRange.colStart===coords.colIndex&&mergeRange.rowStart===coords.rowIndex||(cell=this._sheetModel.getCell({colIndex:mergeRange.colStart,rowIndex:mergeRange.rowStart}));let spanMeta=this._mergingCells.get(key);spanMeta||(spanMeta={maxColIndex:coords.colIndex,maxRowIndex:coords.rowIndex,visibleColSpan:1,visibleRowSpan:1,valueWriter,coords,cell},this._mergingCells.set(key,spanMeta)),coords.colIndex>spanMeta.maxColIndex&&(spanMeta.maxColIndex=coords.colIndex,spanMeta.visibleColSpan++),coords.rowIndex>spanMeta.maxRowIndex&&(spanMeta.maxRowIndex=coords.rowIndex,spanMeta.visibleRowSpan++),(spanMeta.visibleColSpan>1||spanMeta.visibleRowSpan>1)&&(retValue=!1)}}let plainText=cell.asTextUnformatted;if(cell.formattedValue.repeatPlaceholder&&(plainText=cell.formattedValue.repeatPlaceholder.repeat(5)),valueWriter.setPlainText(plainText||""),cell.style.font.verticalAlign===types.v1.Super&&(plainText=`<sup>${plainText}</sup>`),cell.style.font.verticalAlign===types.v1.Sub&&(plainText=`<sub>${plainText}</sub>`),cell.hyperlink&&(plainText=`<a href="${cell.hyperlink.address}">${plainText}</a>`),valueWriter.setHTMLText(plainText||" "),!this._wroteTD){const cssStyleTD=this._createCSSNormalStyle();valueWriter.addSharedStyle("td",cssStyleTD),this._wroteTD=!0}let className=this._visitedStyles.get(cell.style);if(!className){const cssStyle=this._createCSSStyle(cell.style);cssStyle&&(className="xl"+ ++this._lastStyleClassId,this._visitedStyles.set(cell.style,className),valueWriter.addSharedStyle("."+className,cssStyle))}if(className&&valueWriter.addAttribute("class",className),this._includeSizeInCell){const headerCol=this._sheetModel.getColumnHeaders().getHeader(coords.colIndex),col=this._colsParsed?.get(headerCol);void 0!==col&&(valueWriter.addAttribute("width",col.size),valueWriter.addStyle("width",col.sizeAsPt));const headerRow=this._sheetModel.getColumnHeaders().getHeader(coords.rowIndex),row=this._rowsParsed?.get(headerRow);void 0!==row&&(valueWriter.addAttribute("height",row.size),valueWriter.addStyle("height",row.sizeAsPt))}return retValue}writeHTMLTable(writer,range){this._colsParsed=new Map,this._sheetModel.getColumnHeaders().getRange({min:range.colStart,max:range.colEnd}).forEach(((header,min,max)=>{const span=max-min+1,size=(this._sheetModel.getColumnHeaders().findOffset(max+1)-this._sheetModel.getColumnHeaders().findOffset(min))/span;this._colsParsed.set(header,{index:min,span,size,sizeAsPt:CommonUtils.k_(size/FontUtils.On(),2)+"pt"})}),{includeEmpty:!0}),this._rowsParsed=new Map,this._sheetModel.getRowHeaders().getRange({min:range.rowStart,max:range.rowEnd}).forEach(((header,min,max)=>{const span=max-min+1,size=(this._sheetModel.getRowHeaders().findOffset(max+1)-this._sheetModel.getRowHeaders().findOffset(min))/span;this._rowsParsed.set(header,{index:min,span,size,sizeAsPt:CommonUtils.k_(size/FontUtils.On(),2)+"pt"})}),{includeEmpty:!0}),this._hasMerges=this._sheetModel.getMerges([range]).length>0,this._hasMerges&&(this._mergingCells=new Map)}writeHTMLRow(header,index,span,writer){const row=this._rowsParsed.get(header);row.size>1&&writer.addAttribute("height",row.size),writer.addStyle("height",row.sizeAsPt),header?.isCustomSize&&writer.addStyle("mso-height-source","userset")}writeHTMLCol(header,index,span,writer){const col=this._colsParsed.get(header);col.span>1&&writer.addAttribute("colspan",col.span),col.size>1&&writer.addAttribute("width",col.size),writer.addStyle("width",col.sizeAsPt),header?.isCustomSize&&writer.addStyle("mso-width-source","userset")}writeComplete(){this._mergingCells&&this._mergingCells.forEach((spanMeta=>{const valueWriter=spanMeta.valueWriter;if(spanMeta.visibleRowSpan>1&&valueWriter.addAttribute("rowspan",spanMeta.visibleRowSpan),spanMeta.visibleColSpan>1&&valueWriter.addAttribute("colspan",spanMeta.visibleColSpan),spanMeta.cell.rowSpan>1||spanMeta.cell.colSpan>1){const border=this._sheetModel.getCell({colIndex:spanMeta.coords.colIndex+spanMeta.cell.colSpan-1,rowIndex:spanMeta.coords.rowIndex+spanMeta.cell.rowSpan-1}).style.border;let styleString="";spanMeta.visibleColSpan>1&&(styleString+=`border-right:${CSSUtils.NS(border.right)}`),spanMeta.visibleRowSpan>1&&(styleString&&(styleString+=";"),styleString+=`border-bottom:${CSSUtils.NS(border.bottom)}`),valueWriter.addAttribute("style",`'${styleString}'`)}}))}}var SheetModel=__webpack_require__("../../packages/models/src/sheet/SheetModel.ts"),NumberFormatStyles=__webpack_require__("../../packages/models/src/utils/NumberFormatStyles.ts"),NumberFormatType=__webpack_require__("../../packages/models/src/utils/NumberFormatType.ts"),FontFace=__webpack_require__("../../packages/models/src/font/FontFace.ts");class SheetHTMLTableParser{_cellsReading=[];_mergedReading=[];_rangesReading=[];_colsReading=[];_rowsReading=[];constructor(sheetStyle,date1904,topLeft){this._sheetStyle=sheetStyle,this._topLeft=topLeft??{rowIndex:0,colIndex:0},this._parseSheetModel=new SheetModel.V(null,{sheetStyle:this._sheetStyle,isDate1904System:date1904})}applyCSSStyle(update,cssStylesOriginal){let addedStyle=!1;update.style||(update.style={},addedStyle=!0);let cellStyle=update.style,cssStyles={...cssStylesOriginal};if(cssStylesOriginal.msoIgnore){const ignoreFields=cssStylesOriginal.msoIgnore.split(",");let styleKeys=Object.keys(cssStyles);for(let k=0;k<styleKeys.length;k++){const styleKey=styleKeys[k];ignoreFields.includes(styleKey)&&delete cssStyles[styleKey]}}const parsedFont=CSSUtils.r3(cssStyles.fontFamily);cellStyle.font={},parsedFont&&(cellStyle.font.family=parsedFont.family,cellStyle.font.familyFallbacks=parsedFont.fallbacks,cellStyle.font.size=parsedFont.size),cellStyle.font.size=cssStyles.fontSize,cellStyle.font.weight=cssStyles.fontWeight,cellStyle.font.style=cssStyles.fontStyle,cellStyle.font.fill=cssStyles.color;const decoration=CSSUtils.G9(cssStyles.textDecoration);cellStyle.font.underline=decoration.underline,cellStyle.font.strike=decoration.strike,cssStyles.textUnderlineStyle&&(cellStyle.font.underline=CSSUtils.r5(cssStyles.textUnderlineStyle)),cellStyle.alignment={},cssStyles?.textAlign&&(cellStyle.alignment.horizontal=CSSUtils.fj(cssStyles.textAlign)),cssStyles?.textAlign&&!cellStyle.alignment.horizontal&&"general"!==cssStyles?.textAlign&&("center-across"===cssStyles.textAlign?cellStyle.alignment.horizontal=types.OD.CenterContinuous:"fill"===cssStyles.textAlign?cellStyle.alignment.horizontal=types.OD.Fill:"121"===cssStyles.textAlign||"010"===cssStyles.textAlign?(cellStyle.alignment.horizontal=types.OD.Distributed,cellStyle.alignment.justifyLastLine="121"===cssStyles.textAlign):console.warn("unknown text-align",cssStyles.textAlign)),cssStyles.verticalAlign&&("super"===cssStyles.verticalAlign.toLowerCase()?cellStyle.font.verticalAlign=types.v1.Super:"sup"===cssStyles.verticalAlign.toLowerCase()?cellStyle.font.verticalAlign=types.v1.Sub:cellStyle.alignment.vertical=CSSUtils.Gl(cssStyles.verticalAlign),cellStyle.alignment.vertical||("121"===cssStyles.verticalAlign?cellStyle.alignment.vertical=types.sx.Distributed:console.warn("unknown vertical-align",cssStyles.verticalAlign))),cssStyles.msoCharIndentCount&&(cellStyle.alignment.indent=cssStyles.msoCharIndentCount),cssStyles.whiteSpace&&(cellStyle.alignment.overflow="no-wrap"===cssStyles.whiteSpace||"nowrap"===cssStyles.whiteSpace?types.ui.Visible:types.ui.Wrap),"shrinktofit"===cssStyles.msoTextControl&&(cellStyle.alignment.overflow=types.ui.Shrink);let background=null;if(cssStyles.background?background=cssStyles.background:cssStyles.backgroundColor&&(background=cssStyles.backgroundColor),background&&(cellStyle.fill={color:background}),cssStyles.msoPattern){let fill=CSSUtils.EY(cssStyles.msoPattern);fill&&(fill.patternType===IFill.O9.Solid?cellStyle.fill={color:fill.foreground}:fill.patternType!==IFill.O9.None&&(background&&(fill.background=background),cellStyle.fill=fill))}void 0!==cssStyles.msoRotate&&(cellStyle.alignment.rotation=CSSUtils.nv(cssStyles.msoRotate));const addBorderStroke=(key,value)=>{key&&(cellStyle.border||(cellStyle.border={}),cellStyle.border[key]=value)};cssStyles.border&&"none"!==cssStyles.border&&(addBorderStroke("top",cssStyles.border),addBorderStroke("left",cssStyles.border),addBorderStroke("right",cssStyles.border),addBorderStroke("bottom",cssStyles.border)),cssStyles.borderTop&&addBorderStroke("top",cssStyles.borderTop),cssStyles.borderLeft&&addBorderStroke("left",cssStyles.borderLeft),cssStyles.borderRight&&addBorderStroke("right",cssStyles.borderRight),cssStyles.borderBottom&&addBorderStroke("bottom",cssStyles.borderBottom),cssStyles.msoDiagonalUp&&addBorderStroke("diagonalUp",cssStyles.msoDiagonalUp),cssStyles.msoDiagonalDown&&addBorderStroke("diagonalDown",cssStyles.msoDiagonalDown);let numberFormat=cellStyle.numberFormat;cssStyles.msoNumberFormat&&(numberFormat=CSSUtils.l8(cssStyles.msoNumberFormat),numberFormat.includes("\\")?numberFormat=null:"Fixed"===numberFormat?numberFormat=NumberFormatStyles.Ln(cellStyle.numberFormat).formatType===NumberFormatType.Z.Number?null:NumberFormatType.Z.Number:"Percent"===numberFormat&&(numberFormat=NumberFormatStyles.Ln(cellStyle.numberFormat).formatType===NumberFormatType.Z.Percentage?null:NumberFormatType.Z.Percentage)),numberFormat&&(cellStyle.numberFormat=numberFormat),update.style=this._sheetStyle.normalize(cellStyle),addedStyle&&0===Object.keys(update.style).length&&delete update.style}parseHTMLCell(range,plainValue,htmlValue,getStyles,element){0===this._rangesReading.length&&(this._rangesReading=[{rowStart:this._topLeft.rowIndex,colStart:this._topLeft.colIndex,rowEnd:this._topLeft.rowIndex,colEnd:this._topLeft.colIndex}]),this._rangesReading[0].rowEnd=this._topLeft.rowIndex+range.rowEnd,this._rangesReading[0].colEnd=this._topLeft.colIndex+range.colEnd;const cssStyles=getStyles(element);if(!RangeUtils.di(range)&&cssStyles.msoIgnore){if(cssStyles.msoIgnore.includes("colspan")){const update={};cssStyles&&this.applyCSSStyle(update,cssStyles);for(let c=1;c<=range.colEnd-range.colStart;c++){const coordsWriteStyle={rowIndex:this._topLeft.rowIndex+range.rowStart,colIndex:this._topLeft.colIndex+range.colStart+c};this._cellsReading.push({address:coordsWriteStyle,update})}range={...range,colEnd:range.colStart}}cssStyles.msoIgnore.includes("rowspan")&&(range={...range,rowEnd:range.rowStart})}const update={value:void 0!==plainValue?plainValue:htmlValue??""};if("string"==typeof update.value&&0===update.value.trim().length&&(update.value=null),cssStyles&&this.applyCSSStyle(update,cssStyles),"TD"===element?.tagName.toUpperCase()){const style=update.style;(element.querySelectorAll("s").length>0||element.querySelectorAll("strike").length>0)&&(style.font.strike=!0),element.querySelectorAll("sub").length>0&&(style.font.verticalAlign=types.v1.Sub),element.querySelectorAll("sup").length>0&&(style.font.verticalAlign=types.v1.Super),(element.querySelectorAll("b").length>0||element.querySelectorAll("strong").length>0)&&(style.font.weight=500),element.querySelectorAll("i").length>0&&(style.font.style=FontFace.zz.Italic),element.querySelectorAll("u").length>0&&(style.font.underline=FontFace.iC.Single);const anchors=element.querySelectorAll("a");if(anchors.length>0){const hRef=anchors[0].getAttribute("href");hRef&&(update.hyperlink=hRef)}}if(!RangeUtils.di(range)){const rangeMulti={rowStart:this._topLeft.rowIndex+range.rowStart,colStart:this._topLeft.colIndex+range.colStart,rowEnd:this._topLeft.rowIndex+range.rowEnd,colEnd:this._topLeft.colIndex+range.colEnd};this._mergedReading.push(rangeMulti),this._cellsReading.push({address:rangeMulti,update:{style:update.style}})}this._cellsReading.push({address:{rowIndex:this._topLeft.rowIndex+range.rowStart,colIndex:this._topLeft.colIndex+range.colStart},update})}parseText(strValue,getStyles,element){this.parseHTMLCell({rowStart:this._topLeft.rowIndex,colStart:this._topLeft.colIndex,rowEnd:this._topLeft.rowIndex,colEnd:this._topLeft.colIndex},strValue,null,getStyles,element)}parseHTMLRow(rowIndex,rowSpan,getStyles,element){const cssStyles=getStyles(element);if("userset"!==cssStyles.msoHeightSource)return;let attrHeaderSize=element.getAttribute("height")??cssStyles.height,size=null;if(attrHeaderSize&&(size=CSSUtils.I5(attrHeaderSize,this._sheetStyle.getNormalStyle().font.size,"px")),null===size)for(let td=0;td<element.cells.length;td++){const cellHtml=element.cells[td],attrCellSize=cellHtml.getAttribute("height")??getStyles(cellHtml).height;let cellSize=CSSUtils.I5(attrCellSize,this._sheetStyle.getNormalStyle().font.size,"px");null!==cellSize&&(size=Math.max(cellSize,size??0))}null!==size&&this._rowsReading.push({address:{min:this._topLeft.rowIndex+rowIndex,max:this._topLeft.rowIndex+rowIndex+rowSpan-1},update:{size:size*FontUtils.On(),isCustomSize:!0}})}parseHTMLCol(colIndex,colSpan,getStyles,element){const cssStyles=getStyles(element);if("userset"!==cssStyles.msoWidthSource)return;let attrHeaderSize=element.getAttribute("width")??cssStyles.width,size=null;attrHeaderSize&&(size=CSSUtils.I5(attrHeaderSize,this._sheetStyle.getNormalStyle().font.size,"px")),null!==size&&this._colsReading.push({address:{min:this._topLeft.colIndex+colIndex,max:this._topLeft.colIndex+colIndex+colSpan-1},update:{size:size*FontUtils.On(),isCustomSize:!0}})}parseComplete(){this._mergedReading&&this._mergedReading.length>0&&this._parseSheetModel.merge(this._mergedReading),this._colsReading&&this._colsReading.length>0&&this._parseSheetModel.getColumnHeaders().setHeaderPairs(this._colsReading),this._rowsReading&&this._rowsReading.length>0&&this._parseSheetModel.getRowHeaders().setHeaderPairs(this._rowsReading),this._cellsReading&&this._cellsReading.length>0&&this._parseSheetModel.setCellPairs(this._cellsReading,{parseTextAsValue:!0,autoFit:!1})}parsedSheetModel(){return this._parseSheetModel}}let shownClipboardError=!1;class SheetHTMLWriter{_mapSharedStyles=new Map;_arraySharedStylesNames=[];constructor(currentNode,mapSharedStyles,arraySharedStylesNames){this._currentNode=currentNode,this._mapSharedStyles=mapSharedStyles,this._arraySharedStylesNames=arraySharedStylesNames}addStyle(name,value){null!=value&&(this._currentNode?.styles||(this._currentNode.styles=new Map),this._currentNode.styles.set(name,value))}addAttribute(name,value){null!=value&&(this._currentNode?.attributes||(this._currentNode.attributes=new Map),this._currentNode.attributes.set(name,value),"rowspan"===name.toLowerCase()&&parseInt(value)>1&&(this._currentNode.rowspan=parseInt(value)),"colspan"===name.toLowerCase()&&parseInt(value)>1&&(this._currentNode.colspan=parseInt(value)))}addSharedStyle(name,styles){let setStyles=this._mapSharedStyles.get(name);setStyles?setStyles={...styles}:(this._arraySharedStylesNames.push(name),setStyles=styles),this._mapSharedStyles.set(name,setStyles)}setPlainText(value){this._currentNode.plainText=value}setHTMLText(value){this._currentNode.htmlText=value.replace(/(?:\r\n|\r|\n)/g,"<br>")}}const parseStyleValues=stylesString=>{const styleValue={};if(!stylesString)return styleValue;stylesString.endsWith(";")||(stylesString+=";");const regexStylesParts=new RegExp(';(?=([^"]*"[^"]*")*[^"]*$)',"gsm");let token,lastRead=0;for(;null!==(token=regexStylesParts.exec(stylesString));){try{let styleString=stylesString.substring(lastRead,token.index).trim();const regexStyleKeyValueParts=new RegExp(':(?=([^"]*"[^"]*")*[^"]*$)',"gsm");let key,value,tokenKeyValue;for(;null!==(tokenKeyValue=regexStyleKeyValueParts.exec(styleString));)key=unescape(styleString.substring(0,tokenKeyValue.index)).trim(),value=unescape(styleString.substring(tokenKeyValue.index+1,styleString.length)).trim();null!==value&&"null"!==value&&(key&&(key=CommonUtils.sF(key)),styleValue[key]=value)}catch(error){console.warn(error)}lastRead=token.index+1}return styleValue},querySelectChildren=(node,supportedNodes)=>{const elements=[];if(!node)return elements;const children=node.children;for(let i=0;i<children.length;i++){const child=children.item(i);if(1===child.nodeType){const childNodeName=child.tagName.toUpperCase();supportedNodes.includes(childNodeName)&&elements.push(child)}}return elements},parseAsTable=(htmlDoc,plainTextArray,parser)=>{try{let htmlArray=null,htmlStyleMap=null;const getStyles=node=>((node,htmlStyleMap)=>{if(!node)return{};let cellStyleHTML={},htmlStyleTD=htmlStyleMap.get(node.localName);htmlStyleTD&&(cellStyleHTML=Object.assign(cellStyleHTML,htmlStyleTD));const attrClassName=node.getAttribute("class");if(attrClassName){let stylesLookup=htmlStyleMap.get("."+attrClassName);stylesLookup&&(cellStyleHTML=Object.assign(cellStyleHTML,stylesLookup))}const attrStyled=node.getAttribute("style");if(attrStyled){const stylesInline=parseStyleValues(attrStyled);stylesInline&&(cellStyleHTML=Object.assign(cellStyleHTML,stylesInline))}return node.getAttribute("align")&&!cellStyleHTML.textAlign&&(cellStyleHTML.textAlign=node.getAttribute("align")),cellStyleHTML})(node,htmlStyleMap);if(htmlDoc){htmlArray=[];const supportedNodes="P, H1, H2, H3, H4, H5, H6, PRE",errorNode=htmlDoc.querySelector("parsererror");if(errorNode)return console.warn("error",errorNode),!1;let qHtml=htmlDoc.querySelectorAll("html");const lastHtml=qHtml[qHtml.length-1];htmlStyleMap=(element=>{let nodesStyles=element.querySelectorAll("style"),mapStyles=new Map;if(nodesStyles.length<=0)return mapStyles;for(let i=0;i<nodesStyles.length;i++){let children=nodesStyles[i].childNodes;for(let j=0;j<children.length;j++)if(children[j].nodeType===Node.TEXT_NODE){const regexComment=new RegExp("\x3c!--(.*)--\x3e","gs");let styleText=children[j].textContent,comment=regexComment.exec(children[j].textContent);if(comment&&comment.length>1&&(styleText=comment[1]),styleText=styleText.replace(/^\s/,""),styleText?.startsWith("table")){const regexTableParts=new RegExp("{(.*?)}","gs");let token,lastRead=0;for(;null!==(token=regexTableParts.exec(styleText));)try{let key=styleText.substring(lastRead,token.index),value=parseStyleValues(token[1]);mapStyles.set(key.trim(),value),lastRead=token.index+token[0].length}catch(error){console.warn(error)}return mapStyles}}}return mapStyles})(lastHtml);let qBody=lastHtml.querySelectorAll("body");const lastBody=qBody[qBody.length-1];let tables=lastBody.querySelectorAll("table");let element=tables[0],multiElementText=!1;if(!element){let spans=lastBody.querySelectorAll("span");element=spans[0],multiElementText=spans.length>1}if(!element){element=querySelectChildren(lastBody,supportedNodes)[0]}if(!element){element=querySelectChildren(htmlDoc,supportedNodes)[0]}if("TABLE"===element?.nodeName.toUpperCase()){parser.parseStart?.(htmlStyleMap);const elemTable=element;parser.parseHTMLTable?.(getStyles,elemTable);const tableColGroup=querySelectChildren(elemTable,"COLGROUP");for(let cg=0;tableColGroup&&cg<tableColGroup.length;cg++){const tableCols=querySelectChildren(tableColGroup[cg],"COL");let colIndex=0;for(let c=0;c<tableCols.length;c++){const tableCol=tableCols[c];let attrSpan=parseFloat(tableCol.getAttribute("span"));const span=isNaN(attrSpan)?1:attrSpan;parser.parseHTMLCol?.(colIndex,span,getStyles,tableCol),colIndex+=span}}const tableRows=elemTable.rows;let rowIndex=0;for(let r=0;r<tableRows.length;r++){const tableRow=tableRows[r];let attrSpan=parseFloat(tableRow.getAttribute("span"));const span=isNaN(attrSpan)?1:attrSpan;parser.parseHTMLRow?.(rowIndex,span,getStyles,tableRow);const row=[];htmlArray.push(row);const cellsHtml=tableRow.cells;for(let td=0;td<cellsHtml.length;td++){let cellHtml=cellsHtml[td],parsedComment=!1;for(let i=0;!parsedComment&&i<cellHtml.childNodes.length;i++)if(8===cellHtml.childNodes[i].nodeType){const comment=cellHtml.childNodes[i].textContent;if("[if gte vml 1]"===comment);else if("[if !vml]"===comment);else if("[endif]"===comment){const fallback=cellHtml.childNodes[i+1];fallback?.querySelectorAll&&2===fallback.querySelectorAll("table, td").length&&(cellHtml=fallback?.querySelectorAll("table, td")[1],parsedComment=!0)}}row.push({htmlValue:cellHtml.textContent?.replace(/^"|"$/gi,""),element:cellHtml})}rowIndex+=span}}else{if("SPAN"===element?.nodeName.toUpperCase()){const plainText=plainTextArray?plainTextArray[0]?.[0]:null,strValue=multiElementText&&plainText?plainText:element.textContent.replace(/^"|"$/gi,"");return parser.parseStart?.(htmlStyleMap),parser.parseHTMLCell({colStart:0,colEnd:0,rowStart:0,rowEnd:0},plainTextArray?plainTextArray[0]?.[0]:null,strValue,getStyles,element),parser.parseComplete?.(),!0}if(element?.textContent){const strValue=element.textContent.replace(/^"|"$/gi,"");return parser.parseStart?.(htmlStyleMap),parser.parseText?.(strValue,getStyles,element),parser.parseComplete?.(),!0}}}!htmlArray||0!==htmlArray.length&&(1!==htmlArray.length||null!==htmlArray[0]&&0!==htmlArray[0].length)||(htmlArray=null),htmlArray&&plainTextArray&&(0===plainTextArray.length||1===plainTextArray.length&&(null===plainTextArray[0]||0===plainTextArray[0].length))&&(plainTextArray=null);const visitCells=visit=>{const spannedCells=new Set;let width=1,height=1;for(let r=0;r<Math.max(plainTextArray?plainTextArray.length:0,htmlArray?htmlArray.length:0);r++){let c=0,hc=0,maxHc=htmlArray&&htmlArray[r]?htmlArray[r].length:plainTextArray[r]?plainTextArray[r].length:0;for(;hc<maxHc;){const key=r+"-"+c;if(!spannedCells.has(key)){width=Math.max(width,c+1),height=Math.max(height,r+1);let range=null;const element=htmlArray?htmlArray[r]?.[hc]?.element:void 0;if(element&&(element.getAttribute("rowspan")||element.getAttribute("colspan"))){const colSpan=parseInt(element.getAttribute("colspan"))||1,rowSpan=parseInt(element.getAttribute("rowspan"))||1;width=Math.max(width,c+colSpan),height=Math.max(height,r+rowSpan),range={rowStart:r,colStart:c,rowEnd:r+Math.max(0,rowSpan-1),colEnd:c+Math.max(0,colSpan-1)};for(let rs=r;rs<r+rowSpan;rs++)for(let cs=c;cs<c+colSpan;cs++)rs===r&&cs===c||spannedCells.add(rs+"-"+cs)}else range={rowStart:r,colStart:c,rowEnd:r,colEnd:c};visit(range,plainTextArray?plainTextArray[r]?.[c]:void 0,htmlArray?htmlArray[r]?.[hc]?.htmlValue:null,getStyles,element||null),hc++}c++}}};if(htmlArray&&plainTextArray){let htmlColCount=0,htmlRowCount=0;visitCells((cellRange=>{htmlColCount=Math.max(htmlColCount,cellRange.colEnd+1),htmlRowCount=Math.max(htmlRowCount,cellRange.rowEnd+1)})),plainTextArray&&htmlArray&&(plainTextArray.length!==htmlRowCount||plainTextArray[0].length!==htmlColCount)&&(console.warn("mismatched mimeTypes",plainTextArray,htmlArray),plainTextArray=null)}return visitCells(parser.parseHTMLCell.bind(parser)),parser.parseComplete?.(),!0}catch(error){throw console.warn(error),error}};class ReferencedSheetClipboardItem extends SheetUtils.gZ{isCellSource(){return!0}get type(){return"sheet"}_writeHtmlAndText(){if(void 0!==this._asText)return;const[asHtml,asText]=((htmlTableWriter,sheetModel,range)=>{const cellBounds=sheetModel.getCellBounds();range=RangeUtils.im(range,{colStart:0,rowStart:0,colEnd:cellBounds.colEnd,rowEnd:cellBounds.rowEnd})??cellBounds;const mapSharedStyles=new Map,arraySharedStylesNames=[];let currentNode,nodeTable={rows:[],cols:[]};currentNode=nodeTable,htmlTableWriter.writeHTMLTable?.(new SheetHTMLWriter(currentNode,mapSharedStyles,arraySharedStylesNames),range);let totalCols=0;sheetModel.getColumnHeaders().getRange({min:range.colStart,max:range.colEnd}).forEach(((header,min,max)=>{totalCols=totalCols+max-min+1;const nodeCol={};currentNode=nodeCol,htmlTableWriter.writeHTMLCol?.(header,min,max-min+1,new SheetHTMLWriter(currentNode,mapSharedStyles,arraySharedStylesNames)),nodeTable.cols.push(nodeCol)}),{includeEmpty:!0,includeStyles:!0});let totalRows=0,rowRuns=[];if(sheetModel.getRowHeaders().getRange({min:range.rowStart,max:range.rowEnd}).forEach(((header,min,max)=>{totalRows=totalRows+max-min+1,rowRuns.push({min,max,data:header})}),{includeEmpty:!0,includeStyles:!0}),totalCols*totalRows>5e4){if(!shownClipboardError)throw shownClipboardError=!0,new Errors.G("Unable to write more than 50000 cells to system clipboard. Items can still be pasted within the application to but if you want to copy to another application select a smaller set of data.");return[null,null]}let currentRowHeaderIndex=0,lastRowIndex=-1,nodeRow=null;sheetModel.getRange(range).forEach(((value,coords,context)=>{const cell=context.getCell();if(coords.rowIndex!==lastRowIndex){coords.rowIndex>rowRuns[currentRowHeaderIndex].max&&++currentRowHeaderIndex;const currentRowHeader=rowRuns[currentRowHeaderIndex];nodeRow={cells:[]},currentNode=nodeRow,htmlTableWriter.writeHTMLRow?.(currentRowHeader.data,currentRowHeader.min,currentRowHeader.max-currentRowHeader.min+1,new SheetHTMLWriter(currentNode,mapSharedStyles,arraySharedStylesNames)),nodeTable.rows.push(nodeRow),lastRowIndex=coords.rowIndex}const nodeCell={};currentNode=nodeCell,!1!==htmlTableWriter.writeHTMLCell(cell,coords,new SheetHTMLWriter(currentNode,mapSharedStyles,arraySharedStylesNames))&&nodeRow.cells.push(nodeCell)}),{bounds:range,includeEmpty:!0,includeStyles:!0}),htmlTableWriter.writeComplete?.(),0===nodeTable.rows.length&&nodeTable.rows.push([{cells:[]}]);let sharedStylesString=[];for(let i=0;i<arraySharedStylesNames.length;i++){const styleName=arraySharedStylesNames[i],style=mapSharedStyles.get(styleName);sharedStylesString.push(styleName);let currentStyle="";const keys=Object.keys(style);for(let k=0;k<keys.length;k++){currentStyle+=" ",0===k&&(currentStyle+="{");const styleKey=keys[k];currentStyle+=`${styleKey}:${style[styleKey]};`,k===keys.length-1?currentStyle+="}":currentStyle+="\n"}sharedStylesString.push(currentStyle)}const html=['<div clipboard-uuid=xxx>\n<html\n xmlns:v="urn:schemas-microsoft-com:vml"\n xmlns:o="urn:schemas-microsoft-com:office:office"\n xmlns:x="urn:schemas-microsoft-com:office:excel"\n xmlns="http://www.w3.org/TR/REC-html40"\n>'];html.push('<head>\n<meta http-equiv=Content-Type content="text/html; charset=utf-8">\n<meta name=ProgId content=Excel.Sheet>\n<meta name=Generator content="Microsoft Excel 15">'),html.push('<style>\ntable\n {mso-displayed-decimal-separator:"\\.";\n mso-displayed-thousand-separator:"\\,";}\n@page\n {margin:.75in .25in .75in .25in;\n mso-header-margin:.3in;\n mso-footer-margin:.3in;\n mso-horizontal-page-align:center;}\ntr\n {mso-height-source:auto;}\ncol\n {mso-width-source:auto;}\nbr\n {mso-data-placement:same-cell;}'),sharedStylesString.length>0&&html.push(sharedStylesString.join("\n")),html.push("</style>"),html.push("</head>"),html.push("<body>"),html.push("<table>"),html.push("\x3c!--StartFragment--\x3e");const nodeString=node=>{let attributes=(node=>{let retValue="";return node&&node.attributes&&0!==node.attributes.length?(node.attributes.forEach(((value,key)=>{retValue.length>0&&(retValue+=" "),retValue+=`${key}=${value}`})),retValue):retValue})(node);attributes.length>0&&(attributes=" "+attributes);let styles=(node=>{let retValue="";return node&&node.styles&&0!==node.styles.length?(node.styles.forEach(((value,key)=>{retValue.length>0&&(retValue+=";"),retValue+=key+":"+value})),retValue.length>0&&(retValue=`style='${retValue}'`),retValue):retValue})(node);return styles.length>0&&(styles=" "+styles),`${attributes}${styles}`},plain=[];return nodeTable.cols?.forEach((col=>{html.push(` <col${nodeString(col)}>`)})),nodeTable.rows.forEach((row=>{html.push(` <tr${nodeString(row)}>`);const plainRow=[];row.cells.forEach((cell=>{html.push(` <td${nodeString(cell)}>${cell.htmlText??cell.plainText??""}</td>`);const asString=`${CommonUtils.wA(cell.plainText??"")?.replace(/"/g,'""')}`;plainRow.push(asString)})),plain.push(plainRow.join("\t")),html.push(" </tr>")})),html.push("\x3c!--EndFragment--\x3e"),html.push("</table>"),html.push("</body>"),html.push("</html>"),html.push("</div>"),[html.join("\n"),plain.join("\n").concat("\n")]})(new SheetHTMLTableWriter(this.sheetModel()),this.sheetModel(),this._ranges[0]);this._asHtml=asHtml||null,this._asText=asText||null}toText(){return this._writeHtmlAndText(),this._asText}toHtml(){return this._writeHtmlAndText(),this._asHtml}}class HTMLTextBasedSheetClipboardItem{constructor(sheetStyle,date1904,text,html,args){this._sheetStyle=sheetStyle,this._date1904=date1904,this._text=text,this._html=html,this._args=args}isCellSource(){return!0}isCut(){return!1}rangeFrom(){return this._parsedSheetModel?this._parsedSheetModel.getCellBounds():null}scanCells(visitor,options){this._parsedSheetModel&&this._parsedSheetModel.getRange(this.rangeFrom()).forEach(visitor,options)}copyableItems(){return null}scanRowHeaders(visitor,options){this._parsedSheetModel&&this._parsedSheetModel.getRowHeaders().getRange({min:this.rangeFrom().rowStart,max:this.rangeFrom().rowEnd}).forEach(visitor,options)}scanColHeaders(visitor,options){this._parsedSheetModel&&this._parsedSheetModel.getColumnHeaders().getRange({min:this.rangeFrom().colStart,max:this.rangeFrom().colEnd}).forEach(visitor,options)}get type(){return"htmlOrTextTable"}onPaste(){return!0}onCancel(){}get isCopyCellsSource(){return!0}toText(){return this._text}toHtml(){return this._html?.documentElement.outerHTML||null}initialize(){return new Promise(((resolve,reject)=>{let asTextString=this._text,asHtmlAsDoc=this._html;if(null===asHtmlAsDoc&&asTextString&&asTextString.includes("<table"))try{const docHtml=(new DOMParser).parseFromString(asTextString,Primitives.z5.html),errorNode=docHtml.querySelector("parsererror");if(errorNode)throw new Error("Unable to parse: "+errorNode);asHtmlAsDoc=docHtml,asTextString=null}catch(error){console.warn("Discovered text as html table but could could not parse")}const sheetTableParser=new SheetHTMLTableParser(this._sheetStyle,this._date1904);Promise.resolve(asTextString?((value,delimiter="\t")=>new Promise(((resolve,reject)=>{__webpack_require__.e(1880).then(__webpack_require__.t.bind(__webpack_require__,"../../node_modules/papaparse/papaparse.min.js",23)).then((papaparse=>{try{let values=papaparse.parse(value,{delimiter}).data;values.length>1&&(0===values[values.length-1].length||1===values[values.length-1].length&&0===values[values.length-1][0].length)&&values.pop(),resolve(values)}catch(error){console.warn(error),reject(error)}}),(error=>{reject(error)}))})))(asTextString):[[]]).then((asPlainTextArray=>{let parsed=null,error=null;try{parsed=parseAsTable(asHtmlAsDoc,asPlainTextArray,sheetTableParser),parsed?(this._parsedSheetModel=sheetTableParser.parsedSheetModel(),resolve(this)):error="Unable to parse table"}catch(e){error=e}error&&reject(error)}),(error=>{reject(error)}))}))}}const argsContentOnly={isContentsOnly:!0,skipHeaderStyles:!0,skipMerges:!0,adjustCells:(value,context,_from,_to)=>({value:context.getCell().value})},argsFormatOnly={fitDestination:!0,adjustCells:(value,context,_from,_to)=>({style:context.getCell().style})},argsFormulas={adjustCells:(value,context,_from,_to)=>({value:context.getCell().value})},argsTranspose={transpose:!0},argsLinks={adjustCells:(value,context,from,to)=>{if(!from||!to)return;return context.getCell().cloneWithUpdate({value:`=${AddressUtils.ho(from)}`},null)}},useSheetCopyPaste=({element,sheetModel,ranges,onClipboardUpdate:propOnClipboardUpdate,selectionRenderer:propSelectionRenderer=Selection.V1,copyForegroundColor="rgb(33, 115, 70)",cutForegroundColor="rgb(33, 115, 70)",copyBackgroundColor="white",cutBackgroundColor="white",notifier,...rest})=>{const selectionRenderer=(0,useCallbackRef.c)(propSelectionRenderer,[propSelectionRenderer]),[clipboardItem,setClipboardItem]=(0,react.useState)(null),commandTarget=element,commands=(0,react.useMemo)((()=>new CommandMap.yc([new Command.uB("pasteValues",commandTarget,{label:"Paste Values",scopedLabels:{paste:"Values"},description:"Paste only the values of the selected cells.\n\nThe formatting is not applied.",shortcut:{key:"V",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}}),new Command.uB("pasteFormats",commandTarget,{label:"Paste Formatting",scopedLabels:{paste:"Formatting"},description:"Paste only the formats of the selected cells.\n\nThe content is not applied."}),new Command.uB("pasteFormulas",commandTarget,{label:"Paste Formulas",scopedLabels:{paste:"Formulas"},description:"Paste only the formulas of the selected cells. The values and formatting is not applied."}),new Command.uB("pasteTranspose",commandTarget,{label:"Paste Transpose",scopedLabels:{paste:"Transpose"},description:"Paste with the rows and columns flipped."}),new Command.uB("pasteLinks",commandTarget,{label:"Paste Links",scopedLabels:{paste:"Links"},description:"Paste as formula references to the original cells."})])),[commandTarget]),source=(0,react.useMemo)((()=>({element,doCopy:args=>new ReferencedSheetClipboardItem(sheetModel,ranges,args)})),[sheetModel,element,ranges]),target=(0,react.useMemo)((()=>({element,createClipboardItem:(text,html,args)=>new HTMLTextBasedSheetClipboardItem(sheetModel.sheetStyle(),sheetModel.is1904DateSystem(),text,html,args).initialize(),doPaste:(item,args)=>{const asSheetClipboardItem=item;if(!0!==asSheetClipboardItem.isCellSource?.())return!1;let pasteRange=ranges;return args?.ranges&&args?.ranges.length>0&&(pasteRange=args.ranges,delete(args={...args}).ranges),sheetModel.copyCells(pasteRange,asSheetClipboardItem,{autoFit:ICellHeader.y.Row,...args}),!0}})),[sheetModel,element,ranges]),onNativeCopy=(0,react.useCallback)(((e,args)=>e?.ctrlKey&&"x"===e?.key?{isCut:!0,...args}:args),[]),onNativePaste=(0,react.useCallback)(((e,args)=>{if(e?.ctrlKey&&"V"===e?.key&&commands){const command=commands.getCommand("pasteValues"),callback=command?._callback;return callback&&command.updateCallback((()=>{command.updateCallback(callback)})).execute(),{...argsContentOnly,...args}}return args}),[commands]),{commands:commandsCopyPaste,...copyPasteResults}=(0,useCopyPaste.e8)({...rest,source,target,notifier,onNativeCopy,onNativePaste,onClipboardUpdate:item=>{const sheetItem="sheet"===item?.type?item:null;setClipboardItem(sheetItem),propOnClipboardUpdate?.(sheetItem)}});(0,react.useEffect)((()=>{if(!commands)return;const disabledProps={disabled:!1===sheetModel.getProtection()?.formatCells};commands.getCommand("pasteValues").updateCallback((options=>copyPasteResults.paste({...argsContentOnly,...options}))).update(disabledProps),commands.getCommand("pasteFormats").updateCallback((options=>copyPasteResults.paste({...argsFormatOnly,...options}))).update(disabledProps),commands.getCommand("pasteFormulas").updateCallback((options=>copyPasteResults.paste({...argsFormulas,...options}))).update(disabledProps),commands.getCommand("pasteTranspose").updateCallback((options=>copyPasteResults.paste({...argsTranspose,...options}))).update(disabledProps),commands.getCommand("pasteLinks").updateCallback((options=>copyPasteResults.paste({...argsLinks,...options}))).update(disabledProps),commandsCopyPaste.getCommand("cut").update(disabledProps),commandsCopyPaste.getCommand("paste").update(disabledProps)}),[sheetModel,ranges,commands,commandsCopyPaste]);const overlays=(0,react.useMemo)((()=>{if(!clipboardItem)return[];const cellsSource=clipboardItem;if(!(cellsSource instanceof SheetUtils.gZ))return[];if(clipboardItem.sheetModel()!==sheetModel)return[];const rangesFrom=cellsSource.rangesFrom();return[view=>{const overlays=[];for(let i=0;i<rangesFrom.length;i++){const range=rangesFrom[i],rangeBoundsInside=view.clipBounds(view.getCellRangeBounds(range,{top:0,left:0,right:1,bottom:1}),useSelection.Po);rangeBoundsInside&&(overlays.push(selectionRenderer({range,key:`copy-selection-background-${i}`,x:rangeBoundsInside.x,y:rangeBoundsInside.y,width:Math.max(rangeBoundsInside.width,0),height:Math.max(rangeBoundsInside.height,0),stroke:cellsSource.isCut?.()?cutBackgroundColor:copyBackgroundColor,strokeWidth:2})),overlays.push(selectionRenderer({range,key:`copy-selection-foreground-${i}`,x:rangeBoundsInside.x+(rangeBoundsInside.width<=2?-1:0),y:rangeBoundsInside.y,width:Math.max(rangeBoundsInside.width,3),height:Math.max(rangeBoundsInside.height,3),stroke:cellsSource.isCut?.()?cutForegroundColor:copyForegroundColor,strokeWidth:2,isAnimatedStroke:!0})))}return overlays}]}),[sheetModel,clipboardItem,copyForegroundColor,copyBackgroundColor]),commandsMerged=(0,react.useMemo)((()=>{let commandsNew=new CommandMap.yc([]);return commands&&(commandsNew=commands.merge(commandsNew)),commandsNew=commandsCopyPaste.merge(commandsNew),commandsNew}),[commandsCopyPaste,commands]);return{...copyPasteResults,commands:commandsMerged,overlays}},useModelEventListener=(model,type,listener,options)=>{const listenerRef=(0,react.useRef)(listener);listenerRef.current=listener;const fireOnModelChange=options?.fireOnModelChange??!0;(0,react.useEffect)((()=>{if(!model||!listenerRef.current)return;const stableListener=event=>{listenerRef.current?.(event)},remover=model.addEventListener(type,stableListener,options);return fireOnModelChange&&stableListener(null),()=>{remover?.()}}),[model,type])};var useSheetViewListener=__webpack_require__("../../packages/sheet-react/src/hooks/useSheetViewListener.ts"),useSheetListener=__webpack_require__("../../packages/sheet-react/src/hooks/useSheetListener.ts"),AdjustedColor=__webpack_require__("../../packages/models/src/color/AdjustedColor.ts"),SchemeColors=__webpack_require__("../../packages/models/src/color/SchemeColors.ts"),NumberFormatParser=__webpack_require__("../../packages/models/src/utils/NumberFormatParser.ts"),DateUtils=__webpack_require__("../../packages/models/src/date/DateUtils.ts"),ISheetView=__webpack_require__("../../packages/models/src/sheet/ISheetView.ts"),CellUtils=__webpack_require__("../../packages/models/src/cell/CellUtils.ts");const useSheetStyleListener=(model,listener,options)=>{const listenerRef=(0,react.useRef)(listener);listenerRef.current=listener;const fireOnSheetChange=options?.fireOnModelChange??!0;(0,react.useEffect)((()=>{if(!model||!listenerRef.current)return;const stableListener={onNamedStylesChange(){listenerRef.current?.onNamedStylesChange?.()},onTableStylesChange(){listenerRef.current?.onTableStylesChange?.()},onThemeChange(){listenerRef.current?.onThemeChange?.()},onDefaultFontChange(){listenerRef.current?.onDefaultFontChange?.()},onAllChange(){listenerRef.current?.onAllChange?.()}},remover=model.addListener(stableListener);return fireOnSheetChange&&(stableListener.onNamedStylesChange(),stableListener.onTableStylesChange(),stableListener.onThemeChange(),stableListener.onDefaultFontChange(),stableListener.onAllChange()),()=>{remover?.()}}),[model])};var jsx_runtime=__webpack_require__("../../node_modules/react/jsx-runtime.js");const MESSAGE_ERROR_INSERT_COPIED_OVERLAP="Copy insert can not split the cells that it is trying to copy.",NO_FILL=new AdjustedColor.gE("transparent"),SHOW_NOT_IMPLEMENTED=(notifier,feature)=>{notifier?.inform((0,jsx_runtime.jsxs)("p",{style:{marginTop:"0px",marginBottom:"0px"},children:[feature," is not yet implemented.",(0,jsx_runtime.jsx)("br",{}),(0,jsx_runtime.jsx)("br",{}),"Please see the ",(0,jsx_runtime.jsx)("a",{style:{whiteSpace:"nowrap"},href:"https://www.sheetxl.com/docs/introduction/roadmap",target:"_blank",rel:"noopener",children:"SheetXL Roadmap"}),"."]}))};function useSheetCommands(props){const{sheetModel,commandTarget,onRepeatCommandChange:propsOnRepeatCommandChange,bodyStyle,commandsCopyPaste,commandDependencies,cellSelection:propCellSelection,notifier,onStartEdit:propOnStartEdit,onGoto,getViewport:propGetViewport}={...props},[sheetRanges,setSheetRanges]=(0,react.useState)([]),[activeCoords,setActiveCoords]=(0,react.useState)(null),refCellSelection=(0,react.useRef)(null),refSheetModel=(0,react.useRef)(null),refSheetRanges=(0,react.useRef)([]),sheetStyle=sheetModel?.sheetStyle(),onStartEdit=(0,useCallbackRef.c)(propOnStartEdit,[propOnStartEdit]),[lastBorder,setLastBorder]=((0,useCallbackRef.c)(propGetViewport,[propGetViewport]),(0,react.useState)()),[lastFillColor,setLastFillColor]=(0,react.useState)((()=>sheetStyle.resolveColor(SchemeColors.jb.Bg2))),[lastFontColor,setLastFontColor]=(0,react.useState)((()=>sheetStyle.getNormalStyle().font.fill)),editModeHandler=(0,useEditMode.B)(),editMode=(0,react.useRef)(editModeHandler.getMode());editMode.current=editModeHandler.getMode();const clipboardHandler=(0,useCopyPaste.bn)(),autoBorderColor=(0,react.useMemo)((()=>sheetStyle.getNormalStyle().font.fill),[sheetStyle]),updateSelections=(0,react.useCallback)((cellSelection=>{if(refSheetModel.current!==sheetModel)return;const ranges=SheetUtils.Kb(cellSelection);ranges&&RangeUtils.tN(ranges,refSheetRanges.current)||(refSheetRanges.current=ranges,setSheetRanges(ranges))}),[sheetModel]),updateSelectionsDebounced=(0,react.useCallback)(CommonUtils.sg(updateSelections,210),[updateSelections]);(0,react.useEffect)((()=>{refSheetModel.current=sheetModel,setActiveCoords(refCellSelection.current?.activeCoords),updateSelections(sheetModel?.getView().selection)}),[sheetModel]),(0,react.useEffect)((()=>{refCellSelection.current=propCellSelection||sheetModel?.getView().selection,setActiveCoords(refCellSelection.current?.activeCoords),updateSelectionsDebounced(propCellSelection)}),[propCellSelection]);const getActiveCell=(0,useCallbackRef.c)((()=>sheetModel.getCell(activeCoords)),[sheetModel,activeCoords]),doCommand=(0,useCallbackRef.c)(((command,callback,descriptionRepeat=null,clearEditMode=!0)=>{const waitStatusCallback=()=>{Promise.resolve(notifier?.showBusy?.(command.label())).then((async hideBusy=>{try{await callback();const descriptionEffective=descriptionRepeat??command?.label?.();if(propsOnRepeatCommandChange){let commandRepeat=null;command&&!1!==descriptionEffective&&(commandRepeat=new Command.a2(command.key(),commandTarget,{label:descriptionEffective,description:descriptionEffective},waitStatusCallback)),propsOnRepeatCommandChange(commandRepeat)}hideBusy?.(),clearEditMode&&editModeHandler.setMode(null)}catch(error){hideBusy?.(),notifier?.showError?.(error)}}))};waitStatusCallback()}),[propsOnRepeatCommandChange,notifier]),updateSelectedCells=(0,useCallbackRef.c)(((command,update,options)=>{doCommand(command,(()=>{const pairs=[];if(refCellSelection.current?.ranges&&refCellSelection.current.ranges.length>0)for(let s=0;s<refCellSelection.current.ranges.length;s++)pairs.push({address:refCellSelection.current.ranges[s],update});else refCellSelection.current?.activeCoords&&pairs.push({address:refCellSelection.current.activeCoords,update});const description=command?.label?.();sheetModel.setCellPairs(pairs,{description,...options})}))}),[sheetModel]),updateHyperlink=(0,useCallbackRef.c)(((command,hyperlink,display)=>{const update={hyperlink:null,value:null};(display||hyperlink?.address)&&(!display&&hyperlink?.address?.startsWith("#")&&(display=hyperlink?.address.substring(1)),update.value=display||hyperlink?.address,hyperlink?.address&&(update.hyperlink={address:hyperlink?.address})),updateSelectedCells(command,update,{parseTextAsValue:!0})}),[sheetModel]),clear=(0,useCallbackRef.c)(((command,clearType)=>{doCommand(command,(()=>{sheetModel.clear(SheetUtils.Kb(refCellSelection.current),clearType)}))}),[sheetModel,refCellSelection]),insertCells=(0,useCallbackRef.c)(((command,ranges,direction)=>{doCommand(command,(async()=>{let selectionAsRanges=SheetUtils.Kb(refCellSelection.current),cellsFromMoved=null;const asSheetClipboardItem=clipboardHandler.clipboardHandle?.item;if(asSheetClipboardItem?.isCellSource?.()){if(selectionAsRanges.length>1)throw new Error("Only a single selection is supported when using 'Insert Copy'.");if(asSheetClipboardItem.name?.()===sheetModel.getName()){const cellsFrom=asSheetClipboardItem.rangeFrom();let cellsTo=selectionAsRanges[0];const maxCellBounds=sheetModel.getMaxCellBounds(),isColumnAll=cellsTo.colStart<=maxCellBounds.colStart&&cellsTo.colEnd>=maxCellBounds.colEnd,isRowAll=cellsTo.rowStart<=maxCellBounds.rowStart&&cellsTo.rowEnd>=maxCellBounds.rowEnd;let shift=direction;shift||(shift=isColumnAll?Primitives.CF.Down:isRowAll?Primitives.CF.Right:SheetUtils.vz(cellsTo));let shiftAmount=0,oppositeAmount=0;if(shift===Primitives.CF.Down){let copyFromOpposite=cellsFrom.colEnd-cellsFrom.colStart+1,copyToOpposite=cellsTo.colEnd-cellsTo.colStart+1;if(oppositeAmount=copyToOpposite<copyFromOpposite?copyFromOpposite:Math.floor(copyToOpposite/copyFromOpposite)*copyFromOpposite,shiftAmount=cellsFrom.rowEnd-cellsFrom.rowStart+1,cellsTo={rowStart:cellsTo.rowStart,colStart:cellsTo.colStart,rowEnd:shiftAmount+cellsTo.rowStart-1,colEnd:oppositeAmount+cellsTo.colStart-1},cellsTo.rowStart<=cellsFrom.rowEnd){if(cellsTo.rowStart>cellsFrom.rowStart)throw new Error(MESSAGE_ERROR_INSERT_COPIED_OVERLAP);if(RangeUtils.fG(cellsTo.colStart,cellsTo.colEnd,cellsFrom.colStart,cellsFrom.colEnd))throw new Error(MESSAGE_ERROR_INSERT_COPIED_OVERLAP);RangeUtils.qT(cellsTo.colStart,cellsTo.colEnd,cellsFrom.colStart,cellsFrom.colEnd)&&(cellsFromMoved={...cellsFrom,rowStart:cellsFrom.rowStart+shiftAmount,rowEnd:cellsFrom.rowEnd+shiftAmount})}}else{if(shift!==Primitives.CF.Right)throw new Error("Invalid shift direction");{let copyFromOpposite=cellsFrom.rowEnd-cellsFrom.rowStart+1,copyToOpposite=cellsTo.rowEnd-cellsTo.rowStart+1;if(oppositeAmount=copyToOpposite<copyFromOpposite?copyFromOpposite:Math.floor(copyToOpposite/copyFromOpposite)*copyFromOpposite,shiftAmount=cellsFrom.colEnd-cellsFrom.colStart+1,cellsTo={rowStart:cellsTo.rowStart,colStart:cellsTo.colStart,colEnd:shiftAmount+cellsTo.colStart-1,rowEnd:oppositeAmount+cellsTo.rowStart-1},cellsTo.colStart<=cellsFrom.colEnd){if(cellsTo.colStart>cellsFrom.colStart)throw new Error(MESSAGE_ERROR_INSERT_COPIED_OVERLAP);if(RangeUtils.fG(cellsTo.rowStart,cellsTo.rowEnd,cellsFrom.rowStart,cellsFrom.rowEnd))throw new Error(MESSAGE_ERROR_INSERT_COPIED_OVERLAP);RangeUtils.qT(cellsTo.rowStart,cellsTo.rowEnd,cellsFrom.rowStart,cellsFrom.rowEnd)&&(cellsFromMoved={...cellsFrom,colStart:cellsFrom.colStart+shiftAmount,colEnd:cellsFrom.colEnd+shiftAmount})}}}selectionAsRanges=[cellsTo]}}let transaction=null;("copy"===editMode.current?.key||"cut"===editMode.current?.key)&&(transaction=sheetModel.pushTransaction("Insert Cells"));try{sheetModel.insertCells(selectionAsRanges,direction,{description:command?.label?.()}),cellsFromMoved&&SHOW_NOT_IMPLEMENTED(notifier,"Copy insert before selected range"),"copy"!==editMode.current?.key&&"cut"!==editMode.current?.key||await commandsCopyPaste.getCommand("paste").execute(),transaction?.commit()}catch(error){throw transaction?.rollback(),error}}),"Insert Cells",!1)}),[sheetModel,commandsCopyPaste]),upsertTable=(0,useCallbackRef.c)(((command,ranges,values,options)=>{doCommand(command,(async()=>{const upsetRange=ranges??refSheetRanges.current?.[0];sheetModel.upsertTable(upsetRange,values,options)}),null,!0)}),[sheetModel]),removeTable=(0,useCallbackRef.c)(((command,ranges,options)=>{doCommand(command,(()=>{const removeRange=ranges??refSheetRanges.current?.[0];sheetModel.removeTables(removeRange,options)}))}),[sheetModel]),setDefaultTableStyle=(0,useCallbackRef.c)((styleName=>sheetModel.sheetStyle().setDefaultTableStyle(styleName)),[sheetModel]),removeCustomTableStyle=(0,useCallbackRef.c)((styleName=>sheetModel.sheetStyle().removeCustomTableStyle(styleName)),[sheetModel]),editTable=(0,useCallbackRef.c)(((command,showWindow=!0)=>{doCommand(command,(()=>{let selection=refCellSelection.current;const asRange=SheetUtils.Kb(selection);if(RangeUtils.di(selection.ranges[0])){let region=sheetModel.findRegionBounds(selection);const newSelection={...refCellSelection.current};newSelection.ranges=[region],selection=newSelection,sheetModel.setView({selection:newSelection})}let sheetSortCriteriaDefault=SheetUtils.HV(sheetModel,selection),tables=sheetModel.getTables(asRange),table=null;tables.length>0&&(table=tables[0],showWindow&&(sheetSortCriteriaDefault=new Promise(((resolve,_reject)=>{const props={table,onDone:sortOptions=>{resolve(sortOptions)}};notifier.showWindow?.("tableDetails",props,{disableAutoDestroy:!0})}))),Promise.resolve(sheetSortCriteriaDefault).then((sheetSortCriteria=>{}),(error=>{notifier?.showError?.(error)})))}),!1)}),[sheetModel,notifier]),sortCells=(0,useCallbackRef.c)(((command,options,showWindow)=>{refCellSelection.current&&doCommand(command,(()=>{let selectionSort=refCellSelection.current;if(selectionSort.ranges.length>1)throw new Error("Can not sort on multiple cell ranges. Please select a single range and try again.");if(RangeUtils.di(selectionSort.ranges[0])){let region=sheetModel.findRegionBounds(selectionSort);const newSelection={...refCellSelection.current};newSelection.ranges=[region],selectionSort=newSelection,sheetModel.setView({selection:newSelection})}let sheetSortCriteriaDefault=SheetUtils.HV(sheetModel,selectionSort);if(sheetSortCriteriaDefault)showWindow&&(sheetSortCriteriaDefault=new Promise(((resolve,_reject)=>{const props={sortOptions:sheetSortCriteriaDefault,onDone:sortOptions=>{resolve(sortOptions)}};notifier.showWindow?.("sort",props)}))),Promise.resolve(sheetSortCriteriaDefault).then((sheetSortCriteria=>{if(sheetSortCriteria)try{sheetModel.sort(sheetSortCriteria.range,{...sheetSortCriteria.options,...options,description:command?.label?.()})}catch(error){notifier?.showError?.(error)}}),(error=>{notifier?.showError?.(error)}));else if(showWindow)throw new Error("Invalid sort selection. Sort requires a single range with data.")}),!1)}),[sheetModel,notifier]),breakSelection=(0,useCallbackRef.c)((()=>{if(!refCellSelection.current)return;let ranges=refCellSelection.current.ranges;ranges&&0!==ranges.length||(ranges=[{colStart:refCellSelection.current.activeCoords.colIndex,rowStart:refCellSelection.current.activeCoords.rowIndex,colEnd:refCellSelection.current.activeCoords.colIndex,rowEnd:refCellSelection.current.activeCoords.rowIndex}]);let count=0;const options={includeStyles:!0,includeHiddenHeaders:!0};console.log("breakSelection",options);for(let i=0;i<ranges.length;i++){const range=ranges[i];sheetModel.getRange(range).forEach(((_value,coords)=>{console.log(`-coords: row: ${coords.rowIndex}, col: ${coords.colIndex}, address: ${AddressUtils.ho(coords)}`),count++}),options)}console.log("breakSelection",count)}),[sheetModel]),selectRegion=(0,useCallbackRef.c)(((expandIfSelected=!1,alwaysSelectAll=!1)=>{const selectionBounds=sheetModel.getMaxCellBounds();let region=alwaysSelectAll?selectionBounds:sheetModel.findRegionBounds(refCellSelection.current);const newSelection={...refCellSelection.current};newSelection.ranges=[...newSelection.ranges];let effectiveSelection=null;newSelection.ranges.length>0&&newSelection.ranges[newSelection.activeRangeIndex]?effectiveSelection=newSelection.ranges[newSelection.activeRangeIndex]:(effectiveSelection={colStart:newSelection.activeCoords.colIndex,rowStart:newSelection.activeCoords.rowIndex,colEnd:newSelection.activeCoords.colIndex,rowEnd:newSelection.activeCoords.rowIndex},newSelection.ranges.push(effectiveSelection),newSelection.activeRangeIndex=0),(alwaysSelectAll||expandIfSelected&&RangeUtils.hC(region,effectiveSelection))&&(region=selectionBounds),newSelection.ranges[newSelection.activeRangeIndex]=region,sheetModel.setView({selection:newSelection})}),[sheetModel]),removeCells=(0,useCallbackRef.c)(((command,ranges,shift)=>{doCommand(command,(()=>{sheetModel.removeCells(SheetUtils.Kb(refCellSelection.current),shift,{description:command?.label?.()})}),"Remove Cells")}),[sheetModel]),addChart=(0,useCallbackRef.c)(((ranges,chartDescriptor)=>{SHOW_NOT_IMPLEMENTED(notifier,"Charting")}),[sheetModel,notifier,onGoto]),addImage=(0,useCallbackRef.c)((async(command,image,options)=>{let newDrawing=null;const hideBusy=await(notifier?.showBusy?.(command.label()));try{newDrawing=await sheetModel.addImage(image,options),onGoto?.({drawing:newDrawing}),hideBusy()}catch(error){hideBusy();let message=error;"string"!=typeof message&&(console.warn(error),message="Unable to resolve image"),notifier?.inform(message,{type:Notifier._.Error})}return newDrawing}),[sheetModel,notifier,onGoto]),simpleFill=(0,useCallbackRef.c)(((command,direction)=>{doCommand(command,(()=>{if(!refSheetRanges.current)return;const rangesCloned=[...refSheetRanges.current],ranges=[];for(let i=0;i<rangesCloned.length;i++){let template,range=rangesCloned[i];direction===Primitives.CF.Left?template={...range,colStart:range.colEnd}:direction===Primitives.CF.Right?template={...range,colEnd:range.colStart}:direction===Primitives.CF.Up?template={...range,rowStart:range.rowEnd}:direction===Primitives.CF.Down&&(template={...range,rowEnd:range.rowStart});const merged=sheetModel.getMerges([template]),templateSpanMerges=RangeUtils.kF(template,merged),rangeSpanMerges=RangeUtils.kF(range,merged);let amount=1;direction===Primitives.CF.Left?amount=templateSpanMerges.colStart-rangeSpanMerges.colStart:direction===Primitives.CF.Right?amount=rangeSpanMerges.colEnd-templateSpanMerges.colEnd:direction===Primitives.CF.Up?amount=templateSpanMerges.rowStart-rangeSpanMerges.rowStart:direction===Primitives.CF.Down&&(amount=rangeSpanMerges.rowEnd-templateSpanMerges.rowEnd),ranges.push({template:templateSpanMerges,amount})}sheetModel.autoFill(ranges,direction,{description:command?.label?.(),copyCells:!0})}))}),[sheetModel,notifier]),copyValueCellAbove=(0,useCallbackRef.c)((()=>{let value=null;const activeCoords=refCellSelection.current?.activeCoords;if(activeCoords?.rowIndex>0){const cellAbove=sheetModel.getCell({rowIndex:activeCoords.rowIndex-1,colIndex:activeCoords.colIndex});cellAbove&&(value=cellAbove.asTextUnformatted)}onStartEdit?.({text:value})}),[sheetModel]),[fullRender,forceFullRender]=(0,react.useReducer)((s=>s+1),0),[currentRender,forceRender]=(0,react.useReducer)((s=>s+1),0),activeStyle=sheetModel?.getCell(activeCoords).style,commands=(0,react.useMemo)((()=>{let sheetCommands=new CommandMap.yc([new Command.uB("gridlinesToggle",commandTarget,{label:"Gridlines",scopedLabels:{view:"Gridlines"},description:"Toggle whether the lines between rows and columns in the sheet are displayed."}),new Command.uB("sheetViewToggleGridlinesRows",commandTarget,{label:"Row Gridlines",scopedLabels:{view:"Row Gridlines",gridlines:"Rows"},description:"Toggle whether the lines between rows in the sheet are displayed."}),new Command.uB("sheetViewToggleGridlinesColumns",commandTarget,{label:"Column Gridlines",scopedLabels:{view:"Columns Gridlines",gridlines:"Columns"},description:"Toggle whether the lines between columns in the sheet are displayed."}),new Command.uB("sheetViewFormatGridlinesColor",commandTarget,{label:"Gridlines Color",description:"Color the rows and column gridlines."}),new Command.uB("sheetViewToggleShowHeadings",commandTarget,{label:"Headings",scopedLabels:{view:"Headings"},description:"Toggle whether the row and column headings are displayed."}),new Command.uB("sheetViewToggleShowHeadingRows",commandTarget,{label:"Row Headings",scopedLabels:{view:"Row Headings",headings:"Rows"},description:"Toggle whether the row headings are displayed."}),new Command.uB("sheetViewToggleShowHeadingColumns",commandTarget,{label:"Column Headings",scopedLabels:{view:"Columns Headings",headings:"Columns"},description:"Toggle whether the column headings are displayed."}),new Command.uB("sheetViewToggleShowHeadingsNumeric",commandTarget,{label:"Numeric Headers",description:"Toggle whether cell headings show numbers or A1 conventions.",shortcut:{key:"h",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}}),new Command.uB("sheetViewToggleFormulaView",commandTarget,{label:"Show Formulas",description:"Toggle whether cells show formula or values.",shortcut:[{key:"`",modifiers:[types_types.Uq.Ctrl]},{key:"`",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}]}),new Command.uB("sheetViewToggleShowZeros",commandTarget,{label:"Show Zeros",description:"Toggle whether cell with zero value shows '0' or blank."}),new Command.a2("selectComments",commandTarget,{label:"Select Comments",description:"Select the cells with comments.",shortcut:{key:"O",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}}),new Command.uB("selectAll",commandTarget,{label:"Select All",description:"Select the closest data or the entire sheet if no data is nearby.",shortcut:[{key:"A",modifiers:[types_types.Uq.Ctrl]},{key:"Space",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}]},((alwaysSelectAll=!1)=>selectRegion(!0,alwaysSelectAll))),new Command.a2("selectRegion",commandTarget,{label:"Select Region",description:"Select the closest data.",shortcut:{key:"*",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(()=>selectRegion(!1,!1))),new Command.a2("breakSelection",commandTarget,{label:"Select Visible",description:"Break the selection based on hidden rows and columns.",shortcut:{key:"Semicolon",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}},(()=>breakSelection())),new Command.a2("formatTextRotate0",commandTarget,{label:"No Text Rotation",description:"Remove all text rotation."}),new Command.a2("formatTextRotate45",commandTarget,{label:"Angle Clockwise",description:"Angle text 45 degrees downward."}),new Command.a2("formatTextRotate90",commandTarget,{label:"Rotate Text Down",description:"Angle your text so that it aligns with the left."}),new Command.a2("formatTextRotate270",commandTarget,{label:"Rotate Text Up",description:"Angle your text so that it aligns with the right."}),new Command.a2("formatTextRotate315",commandTarget,{label:"Angle Counterclockwise",description:"Angle text 45 degrees upward."}),new Command.uB("formatTextRotateCustom",commandTarget,{label:"Custom Text Rotation",description:"Angle your text using a custom angle."}),new Command.a2("formatTextRotateVertical",commandTarget,{label:"Vertical Text",description:"Stack text vertically."}),new Command.a2("sortAscending",commandTarget,{label:"Sort Ascending",description:"Lowest to Highest."},(function(){sortCells(this,{ascending:!0},!1)})),new Command.a2("sortDescending",commandTarget,{label:"Sort Descending",description:"Highest to Lowest."},(function(){sortCells(this,{ascending:!1},!1)})),new Command.a2("sortCustom",commandTarget,{label:"Custom Sort…",description:"Choose more options, such as sorting by multiple columns or rows, and case-sensitive sorts."},(function(){sortCells(this,{},!0)})),new Command.uB("protectionSheetToggle",commandTarget,{label:"Protect Sheet",scopedLabels:{sheet:"Protected"},description:"Prevent unwanted changes from others by limiting their ability to edit.\nFor example, you can prevent people from editing locked cells or making formatting changes."}),new Command.uB("formatSheetTabColor",commandTarget,{label:"Tab Color",description:"Color the tab to help differentiate for other sheets."}),new Command.uB("formatCellStyle",commandTarget,{label:"Cell Styles",scopedLabels:{cellStyle:"Apply"},description:"A colorful style is a great way to make important data stand out on the sheet."},(function(newStyle){updateSelectedCells(this,{style:newStyle})})),new Command.uB("formatTableStyle",commandTarget,{label:"Format as Table",scopedLabels:{table:"Apply (Keep Styles)"},description:"Create a table or apply style to the current table."},(function(styleInfo){upsertTable(this,refSheetRanges.current?.[0],{styleInfo})})),new Command.uB("formatTableStyleClearCellStyles",commandTarget,{label:"Format as Table (Clear Styles)",scopedLabels:{table:"Apply (Clear Styles)"},description:"Create a table or apply style to the current table and clears all cell styles."},(function(styleInfo){upsertTable(this,refSheetRanges.current?.[0],{styleInfo})})),new Command.uB("setDefaultTableStyle",commandTarget,{label:"Set Default Table Style",scopedLabels:{table:"Set As Default"},description:"Sets the default table style used when a table is inserted."},setDefaultTableStyle),new Command.uB("removeTableStyle",commandTarget,{label:"Remove Table Style",scopedLabels:{table:"Remove"},description:"Remove the current table style."},removeCustomTableStyle),new Command.uB("formatBorder",commandTarget,{label:"Border",description:"Set the outline style for the selected cells."},(function(border){updateSelectedCells(this,{style:{border}})})),new Command.uB("formatFillColor",commandTarget,{label:"Fill Color",description:"Color the background of the cells to make them stand out."},(function(newColor){if(null===newColor)return updateSelectedCells(this,{style:{fill:{fillType:IFill.kP.None}}});updateSelectedCells(this,{style:{fill:prevValue=>{if(prevValue?.fillType===IFill.kP.Solid||prevValue?.fillType===IFill.kP.Pattern&&prevValue.patternType===IFill.O9.Solid)return{color:newColor};if(prevValue?.fillType===IFill.kP.Gradient){const stops=[...prevValue.stops];return stops.length>1?stops[0].color=newColor:stops.push({color:newColor,offset:0}),{stops}}return prevValue?.fillType===IFill.kP.Pattern&&prevValue.patternType!==IFill.O9.None?{background:newColor}:newColor}}})})),new Command.uB("formatFontColor",commandTarget,{label:"Font Color",description:"Change the color of your text."},(function(newColor){updateSelectedCells(this,{style:{font:{fill:newColor}}})})),new Command.uB("formatBoldToggle",commandTarget,{label:"Bold",description:"Toggle bold formatting of text.",shortcut:[{key:"B",modifiers:[types_types.Uq.Ctrl]},{key:"2",modifiers:[types_types.Uq.Ctrl]}]}),new Command.uB("formatItalicToggle",commandTarget,{label:"Italic",description:"Toggle italic formatting of text.",shortcut:[{key:"I",modifiers:[types_types.Uq.Ctrl]},{key:"3",modifiers:[types_types.Uq.Ctrl]}]}),new Command.uB("formatUnderlinedToggle",commandTarget,{label:"Underline",scopedLabels:{underline:"Single"},description:"Underline the selected text.",shortcut:[{key:"u",modifiers:[types_types.Uq.Ctrl]},{key:"4",modifiers:[types_types.Uq.Ctrl]}]}),new Command.uB("formatUnderlinedDoubleToggle",commandTarget,{label:"Double Underline",scopedLabels:{underline:"Double"},description:"Double underline the selected text."}),new Command.uB("formatUnderlinedAccountingToggle",commandTarget,{label:"Accounting Underline",scopedLabels:{underline:"Accounting"},description:"Use accounting underline for the selected text."}),new Command.uB("formatUnderlinedAccountingDoubleToggle",commandTarget,{label:"Double Accounting Underline",scopedLabels:{underline:"Double Accounting"},description:"Use accounting double underline the selected text."}),new Command.uB("formatStrikeThroughToggle",commandTarget,{label:"Strikethrough",description:"Toggle strike-through formatting of text.",shortcut:{key:"5",modifiers:[types_types.Uq.Ctrl]}}),new Command.uB("formatSuperscriptToggle",commandTarget,{label:"Superscript",description:"Format your text to be smaller and sit at the top of the line."}),new Command.uB("formatSubscriptToggle",commandTarget,{label:"Subscript",description:"Format your text to be smaller and sit at the bottom of the line."}),new Command.uB("formatAlignTopToggle",commandTarget,{label:"Align Top",description:"Align text to the top."}),new Command.uB("formatTextOverflowVisibleToggle",commandTarget,{label:"Overflow Text",description:"Overflow text to the next cells."}),new Command.uB("formatTextOverflowWrapToggle",commandTarget,{label:"Wrap Text",description:"Wrap text with the existing cell and increase the height as required."}),new Command.uB("formatTextOverflowClipToggle",commandTarget,{label:"Clip Text",description:"Clip text that falls outside of the existing cell."}),new Command.uB("formatTextOverflowShrinkToggle",commandTarget,{label:"Shrink Text",description:"Shrink the text font to fit within existing cell."}),new Command.uB("formatTextOverflowEllipsisToggle",commandTarget,{label:"Ellipsis Text",description:"Add a trailing '…' to the text to indicate text is partially hidden."}),new Command.uB("formatAlignMiddleToggle",commandTarget,{label:"Align Middle",description:"Align text so that it is centered between the top and bottom of the cell."}),new Command.uB("formatAlignBottomToggle",commandTarget,{label:"Align Bottom",description:"Align text to the bottom."}),new Command.uB("formatAlignJustifyVerticalToggle",commandTarget,{label:"Justify Vertically",description:"Each 'word' in each line of text inside the cell is evenly distributed across the height of the cell."}),new Command.uB("formatAlignDistributedVerticalToggle",commandTarget,{label:"Distribute Vertically",description:"Justify your content vertically."}),new Command.uB("formatAlignLeftToggle",commandTarget,{label:"Align Left",description:"Align your content to the left."}),new Command.uB("formatAlignCenterToggle",commandTarget,{label:"Align Center",description:"Center your content."}),new Command.uB("formatAlignRightToggle",commandTarget,{label:"Align Right",description:"Align your content to the right."}),new Command.uB("formatAlignJustifyToggle",commandTarget,{label:"Align Justify",description:"Justify your content."}),new Command.uB("formatAlignCenterContinuousToggle",commandTarget,{label:"Center Across",description:"Center your content across multiple cells."}),new Command.uB("formatAlignFillToggle",commandTarget,{label:"Fill Across",description:"Repeat the value to fill the entire cell."}),new Command.uB("formatAlignDistributedHorizontalToggle",commandTarget,{label:"Distribute Horizontally",description:"Each 'word' in each line of text inside the cell is evenly distributed across the width of the cell."}),new Command.a2("formatFontSizeIncrease",commandTarget,{label:"Increase Font Size",description:"Make your text a bit bigger.",shortcut:{key:"Period",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:original=>({font:{size:FontUtils.XI(original.font.size,!0)}})})})),new Command.a2("formatFontSizeDecrease",commandTarget,{label:"Decrease Font Size",description:"Make your text a bit smaller.",shortcut:{key:"Comma",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:original=>({font:{size:FontUtils.XI(original.font.size,!1)}})})})),new Command.uB("formatFontFamily",commandTarget,{label:"Font",description:"Select the font your text."},(function(newValue){updateSelectedCells(this,{style:{font:{family:newValue}}})})),new Command.uB("formatFontSize",commandTarget,{label:"Font Size",description:"Change the size of your text."},(function(newValue){updateSelectedCells(this,{style:{font:{size:newValue}}})})),new Command.uB("formatNumberDialog",commandTarget,{label:"Custom Number Format",scopedLabels:{numberFormat:"Custom"},description:"Create a custom number format.",shortcut:[{key:"1",modifiers:[types_types.Uq.Ctrl]},{key:"1",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}]},(function(newValue,command){const _this=this,props={initialValue:newValue??command.state(),context:command.context(),onInputOption:(input,_option)=>{updateSelectedCells(_this,{style:{numberFormat:input}})}};notifier.showWindow?.("numberFormat",props)})),new Command.uB("formatNumberFormat",commandTarget,{label:"Number Format",description:"Choose the format for your cells, such as percentage, currency, date or time."},(function(newValue){updateSelectedCells(this,{style:{numberFormat:newValue}})})),new Command.uB("formatNumberFormatGeneralStyle",commandTarget,{label:"General Style",description:"Remove all specific formatting.",shortcut:{key:"Backquote",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:NumberFormatType.Z.General})})})),new Command.uB("formatNumberFormatNumberStyle",commandTarget,{label:"Number Style",description:"Format as number with two decimals and comma.",shortcut:{key:"!",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:"#,##0.00"})})})),new Command.uB("formatNumberFormatTimeStyle",commandTarget,{label:"Time Style",description:"Format as time with hour and minute, and AM or PM.",shortcut:{key:"@",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:"h:mm AM/PM"})})})),new Command.uB("formatNumberFormatDateStyle",commandTarget,{label:"Date Style",description:"Format as date with day, month, and year.",shortcut:{key:"#",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:"d-mmm-yy"})})})),new Command.uB("formatNumberFormatAccountingStyle",commandTarget,{label:"Accounting Style",description:"Format as Dollars, Euros, or other currency.",shortcut:{key:"$",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(accountingFormat){let numberFormat=accountingFormat??'_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)';updateSelectedCells(this,{style:_original=>({numberFormat})})})),new Command.uB("formatNumberFormatPercentStyle",commandTarget,{label:"Percent Style",description:"Format as a percent with no decimal places.",shortcut:{key:"5",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:"0%"})})})),new Command.uB("formatNumberFormatScientificStyle",commandTarget,{label:"Scientific Style",description:"Format as a scientific number with two decimal places .",shortcut:{key:"6",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:"0.00E+00"})})})),new Command.uB("formatNumberFormatCommaStyle",commandTarget,{label:"Comma Style",description:"Format with a thousands separator.",shortcut:{key:"Comma",modifiers:[types_types.Uq.Ctrl]}},(function(){updateSelectedCells(this,{style:_original=>({numberFormat:'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'})})})),new Command.uB("formatNumberFormatIncreaseDecimal",commandTarget,{label:"Increase Decimal",description:"Show more decimal places for a more precise value."},(function(){updateSelectedCells(this,{style:original=>({numberFormat:NumberFormatParser.PX(original.numberFormat,1,CellTypes.vZ.Number)})})})),new Command.uB("formatNumberFormatDecreaseDecimal",commandTarget,{label:"Decrease Decimal",description:"Show few decimal places."},(function(){updateSelectedCells(this,{style:original=>({numberFormat:NumberFormatParser.PX(original.numberFormat,-1,CellTypes.vZ.Number)})})})),new Command.uB("displayPlaceholdersToggle",commandTarget,{label:"Display Placeholders",description:"Switch between hiding objects, displaying objects, and displaying placeholders for objects.",shortcut:{key:"6",modifiers:[types_types.Uq.Ctrl]}}),new Command.a2("noOp",commandTarget,{label:"Do nothing",description:"Do Nothing.",shortcut:{key:"7",modifiers:[types_types.Uq.Ctrl]}},(function(){})),new Command.uB("displayOutlineSymbolsToggle",commandTarget,{label:"Display Outline Symbols",description:"Display or hide the outline symbols.",shortcut:{key:"8",modifiers:[types_types.Uq.Ctrl]}}),new Command.uB("hideSelectedRows",commandTarget,{label:"Hide Rows",description:"Hide the selected rows.",shortcut:{key:"9",modifiers:[types_types.Uq.Ctrl]}}),new Command.uB("hideSelectedColumns",commandTarget,{label:"Hide Columns",description:"Hide the selected columns.",shortcut:{key:"0",modifiers:[types_types.Uq.Ctrl]}}),new Command.uB("unhideSelectedRows",commandTarget,{label:"Unhide Rows",description:"Unhide the selected rows.",shortcut:{key:"9",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}}),new Command.uB("unhideSelectedColumns",commandTarget,{label:"Unhide Columns",description:"Unhide the selected columns.",shortcut:{key:"0",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}}),new Command.uB("enterSumFormula",commandTarget,{label:"Enter Sum Formula",description:"Insert the sum formula into the current cell.",shortcut:{key:"Equal",modifiers:[types_types.Uq.Alt]}},(function(){onStartEdit?.({text:"=sum(a1)",editMode:!0,initialSelection:{start:5,end:7}})})),new Command.uB("enterCurrentTime",commandTarget,{label:"Current Time",description:"Insert the current time.",shortcut:{key:"Semicolon",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){onStartEdit?.({text:DateUtils.F3(sheetModel.is1904DateSystem())})})),new Command.uB("enterCurrentDate",commandTarget,{label:"Current Date",description:"Insert the current date.",shortcut:{key:"Semicolon",modifiers:[types_types.Uq.Ctrl]}},(function(){onStartEdit?.({text:DateUtils.yD(sheetModel.is1904DateSystem())})})),new Command.a2("sheetZoomOut",commandTarget,{label:"Zoom Out",description:"Zoom out to see less detail but more area.",shortcut:[{key:"Minus",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]},{key:"NumpadSubtract",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}]}),new Command.a2("sheetZoomIn",commandTarget,{label:"Zoom In",description:"Zoom in to see more detail but less area.",shortcut:[{key:"Equal",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]},{key:"NumpadAdd",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}]}),new Command.a2("sheetZoom100",commandTarget,{label:"Zoom 100%",description:"Zoom document to 100%.",shortcut:{key:"o",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}}),new Command.a2("insertChart",commandTarget,{label:"Insert Chart",scopedLabels:{insert:"Chart"},description:"Create a chart of the data from the selected cells.",shortcut:{key:"F1",modifiers:[types_types.Uq.Alt]}},(chartDescriptor=>{addChart(refSheetRanges.current,chartDescriptor)})),new Command.a2("insertFunction",commandTarget,{label:"Insert Function",scopedLabels:{insert:"Function"},description:"Work with the formula in the current cell.",shortcut:{key:"F3",modifiers:[types_types.Uq.Shift]}}),new Command.uB("updateHyperlink",commandTarget,{label:"Hyperlink",scopedLabels:{insert:"Hyperlink…"},description:"Create a link to either another webpage or another location within this document.",context:()=>getActiveCell,shortcut:[{key:"K",modifiers:[types_types.Uq.Ctrl]},{key:"K",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}]},(async function(newValue,command){const _this=this,props={context:command.context(),onUpdateHyperlink:(hyperlink,display)=>{updateHyperlink(_this,hyperlink,display)}};notifier.showWindow?.("hyperlink",props)})),new Command.uB("openHyperlink",commandTarget,{label:"Open Hyperlink",description:"Open the hyperlink or goto another location within this document.",context:()=>getActiveCell},((_newValue,command)=>{const cell=command.context()();cell&&(cell.hyperlink.address.startsWith("#")?onGoto?.(cell.hyperlink.address.substring(1)):window.open(cell.hyperlink.address,"_blank"))})),new Command.uB("removeHyperlink",commandTarget,{label:"Remove Hyperlink",description:"Remove the hyperlink.",context:()=>getActiveCell},(function(_newValue,_command){updateHyperlink(null,null,this)})),new Command.a2("insertNote",commandTarget,{label:"Insert Note",scopedLabels:{insert:"Note"},shortcut:{key:"F2",modifiers:[types_types.Uq.Shift]},description:"Add a note to the selected cell."}),new Command.a2("insertComment",commandTarget,{label:"Insert Comment",scopedLabels:{insert:"Comment"},shortcut:{key:"m",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]},description:"Add a comment to the selected cell."}),new Command.uB("insertImageFromFile",commandTarget,{label:"Insert Image…",scopedLabels:{insert:"Image…",insertImage:"From Device…"},description:"Insert a picture from your device."},(async function(input=null){let inputFile=null,inputTypes=null;if("string"==typeof input?inputTypes=input:inputFile=input?.file?input.file:input,!inputFile&&(inputFile=await CommonUtils.FR(inputTypes??"image/*"),!inputFile))return;input?.goto&&await(onGoto?.(input.goto));const newDrawing=await addImage(this,{file:inputFile},input?.options);input?.goto&&await(onGoto?.({drawing:newDrawing}))})),new Command.uB("insertImageFromURL",commandTarget,{label:"Insert Image From Web",scopedLabels:{insert:"Image From Web",insertImage:"From the Web…"},description:"Insert a picture from the web."},(async function(url){if(!url){const results=await(notifier?.showInputOptions?.({title:"Insert Image from Web",description:"Enter the web address for the image to insert.",inputLabel:"Address",initialValue:"https://picsum.photos/360",inputProps:{style:{minWidth:"440px"}},options:["Insert"]}));if("Insert"!==results.option)return;url=results.input}url&&addImage(this,{fetch:url})})),new Command.a2("insertTable",commandTarget,{label:"Create Table",scopedLabels:{insert:"Table"},description:"Create a table from the selected cells. Tables enable auto formatting, sorting, filter, and other advanced features.",shortcut:[{key:"L",modifiers:[types_types.Uq.Ctrl]}]},(function(){upsertTable(this)})),new Command.a2("editTable",commandTarget,{label:"Edit Table",scopedLabels:{table:"Edit"},description:"Edit or create a table from the selected cells. Tables enable auto formatting, sorting, filter, and other advanced features."},(function(){editTable(this)})),new Command.a2("removeTables",commandTarget,{label:"Remove Table",scopedLabels:{remove:"Table"},description:"Convert this table into a normal range of cells.\n\n All of the data is preserved."},(function(){removeTable(this)})),new Command.a2("tableFilterToggle",commandTarget,{label:"Toggle Table Filter",description:"Toggle Auto Filter on/off.",shortcut:{key:"L",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}}),new Command.a2("tableTotalRowToggle",commandTarget,{label:"Toggle Table Total Row",description:"Toggle Total Row on/off."}),new Command.a2("copyValueCellAbove",commandTarget,{label:"Copy From Above",description:"Copy the value from the cell above the active cell into the cell or the formula bar.",shortcut:[{key:"Quote",modifiers:[types_types.Uq.Ctrl]},{key:"Quote",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}]},copyValueCellAbove),new Command.uB("formatPainterToggle",commandTarget,{label:"Format Painter",description:"Apply selected style to another part of your workbook."}),new Command.a2("insertCells",commandTarget,{label:"Insert Cells",scopedLabels:{insertCells:"At Selection"},description:"Inserts cells at the current selection.",shortcut:{key:"Equal",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){insertCells(this,refSheetRanges.current,void 0)})),new Command.a2("insertCellsShiftRight",commandTarget,{label:"Insert Cells Shift Right",scopedLabels:{insertCells:"Shift Right"},description:"Insert cells and shift all the current cells in the selection to the right."},(function(){insertCells(this,refSheetRanges.current,Primitives.CF.Right)})),new Command.a2("insertCellsShiftDown",commandTarget,{label:"Insert Cells Shift Down",scopedLabels:{insertCells:"Shift Down"},description:"Insert cells and shift all the current cells in the selection downward."},(function(){insertCells(this,refSheetRanges.current,Primitives.CF.Down)})),new Command.a2("insertRows",commandTarget,{label:"Insert Row(s)",scopedLabels:{insertCells:"Row(s)"},description:"Insert a row above the current position."},(function(){insertCells(this,SheetUtils.gM(refSheetRanges.current,!1),Primitives.CF.Down)})),new Command.a2("insertColumns",commandTarget,{label:"Insert Column(s)",scopedLabels:{insertCells:"Column(s)"},description:"Insert a column before the current position."},(function(){insertCells(this,SheetUtils.Mg(refSheetRanges.current),Primitives.CF.Right)})),new Command.a2("insertRowsAfter",commandTarget,{label:"Insert Row Below",scopedLabels:{insertCells:"Row Below"},description:"Insert a row below the current position."},(function(){insertCells(this,SheetUtils.gM(refSheetRanges.current,!0),Primitives.CF.Down)})),new Command.a2("insertColumnsAfter",commandTarget,{label:"Insert Column After",scopedLabels:{insertCells:"Column After"},description:"Insert a column after the current position."},(function(){insertCells(this,SheetUtils.Mg(refSheetRanges.current,!0),Primitives.CF.Right)})),new Command.a2("removeCells",commandTarget,{label:"Delete Cells",scopedLabels:{removeCells:"At Selection"},description:"Deletes the selected cells.",shortcut:{key:"Minus",modifiers:[types_types.Uq.Ctrl]}},(function(){removeCells(this,refSheetRanges.current,void 0)})),new Command.a2("removeCellsShiftUp",commandTarget,{label:"Delete Cells Shift Up",scopedLabels:{removeCells:"Shift Up"},description:"Delete cells at the current selection and shift data upward."},(function(){removeCells(this,refSheetRanges.current,Primitives.CF.Up)})),new Command.a2("removeCellsShiftLeft",commandTarget,{label:"Delete Cells Shift Left",scopedLabels:{removeCells:"Shift Left"},description:"Delete cells at the current selection and shift data leftward."},(function(){removeCells(this,refSheetRanges.current,Primitives.CF.Left)})),new Command.a2("removeRows",commandTarget,{label:"Delete Rows",scopedLabels:{removeCells:"Rows"},description:"Delete the rows at the current selection."},(function(){removeCells(this,SheetUtils.gM(refSheetRanges.current),Primitives.CF.Up)})),new Command.a2("removeColumns",commandTarget,{label:"Delete Columns",scopedLabels:{removeCells:"Columns"},description:"Delete the columns at the current selection."},(function(){removeCells(this,SheetUtils.Mg(refSheetRanges.current),Primitives.CF.Left)})),new Command.a2("flashFill",commandTarget,{label:"Flash Fill",description:"Do a flash fill.",shortcut:[{key:"e",modifiers:[types_types.Uq.Ctrl]},{key:"e",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Alt]}]}),new Command.a2("fillDown",commandTarget,{label:"Fill Down",description:"Copy the top-most value from the selection to the bottom of the selection.",shortcut:{key:"d",modifiers:[types_types.Uq.Ctrl]}},(function(){simpleFill(this,Primitives.CF.Down)})),new Command.a2("fillRight",commandTarget,{label:"Fill Right",description:"Copy the left-most value from the selection to the right of the selection.",shortcut:[{key:"r",modifiers:[types_types.Uq.Ctrl]}]},(function(){simpleFill(this,Primitives.CF.Right)})),new Command.a2("fillUp",commandTarget,{label:"Fill Up",description:"Copy the bottom-most value from the selection to the top of the selection."},(function(){simpleFill(this,Primitives.CF.Up)})),new Command.a2("fillLeft",commandTarget,{label:"Fill Left",description:"Copy the right-most value from the selection to the left of the selection."},(function(){simpleFill(this,Primitives.CF.Left)})),new Command.a2("formatBorderAddOutline",commandTarget,{label:"Add Outline Border",description:"Apply an outline border to the selected cells.",shortcut:{key:"&",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:{border:{left:{style:ICellBorder.cz.Thin,color:null},top:{style:ICellBorder.cz.Thin,color:null},right:{style:ICellBorder.cz.Thin,color:null},bottom:{style:ICellBorder.cz.Thin,color:null}}}})})),new Command.a2("formatBorderRemoveOutline",commandTarget,{label:"Remove Outline Border",description:"Remove the outline border from the selected cells.",shortcut:{key:"_",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateSelectedCells(this,{style:{border:null}})})),new Command.a2("formatIndentDecrease",commandTarget,{label:"Decrease Indent",description:"Move your content closer to the border."},(function(){updateSelectedCells(this,{style:original=>{const adjustedIndex=original.alignment.indent-1;return{alignment:{indent:adjustedIndex>0?adjustedIndex:0}}}})})),new Command.a2("formatIndentIncrease",commandTarget,{label:"Increase Indent",description:"Move your content further from the border."},(function(){updateSelectedCells(this,{style:original=>{const retValue={alignment:{indent:original.alignment.indent+1}};return original.alignment.horizontal===types.OD.General&&(retValue.alignment.horizontal=types.OD.Left),retValue}})})),new Command.uB("mergeToggle",commandTarget,{label:"Merge",description:"Combine and center the contents of the selected cells into a new larger cell.",shortcut:{key:"m",modifiers:[types_types.Uq.Ctrl]}}),new Command.a2("mergeHorizontal",commandTarget,{label:"Merge Horizontally",description:"Combine the contents of the selected cells into horizontal rows."}),new Command.a2("mergeVertical",commandTarget,{label:"Merge Vertically",description:"Combine the contents of the selected cells into vertical columns."}),new Command.a2("unmerge",commandTarget,{label:"Unmerge",description:"Split merged cells into multiple cells."}),new Command.a2("clearContents",commandTarget,{label:"Clear Contents",scopedLabels:{clear:"Contents"},description:"Clear only the contents in the selected cells.\n\nThe formatting is not cleared.",shortcut:{key:"Delete"}},(function(){clear(this,CellTypes.oK.Contents)})),new Command.a2("clearFormats",commandTarget,{label:"Clear Formats",scopedLabels:{clear:"Formats"},description:"Clear only the formatting that is applied to the selected cells."},(function(){clear(this,CellTypes.oK.Formats)})),new Command.a2("clearAll",commandTarget,{label:"Clear All",scopedLabels:{clear:"All"},description:"Clears everything from the selected cells.\n\nAll contents and formatting are removed from the selected cells",shortcut:{key:"Delete",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){clear(this,CellTypes.oK.All)})),new Command.uB("freezeToggle",commandTarget,{label:"Freeze Panes",description:"Keep rows and columns visible while the rest of the sheet scrolls (based on current selection)."}),new Command.uB("freezeToggleHorizontal",commandTarget,{label:"Freeze Top Rows",description:"Keep the top rows visible while scrolling through the rest of the sheet."}),new Command.uB("freezeToggleVertical",commandTarget,{label:"Freeze Left Columns",description:"Keep the left columns visible while scrolling through the rest of the sheet."}),new Command.a2("unfreeze",commandTarget,{label:"Unfreeze Panes",description:"Unfreeze both the rows and columns."}),new Command.a2("autoFitRows",commandTarget,{label:"Autofit Rows",description:"Adjust the rows to the best height."}),new Command.a2("autoFitColumns",commandTarget,{label:"Autofit Columns",description:"Adjust the columns to the best width."})]);return commandDependencies&&(sheetCommands=sheetCommands.merge(commandDependencies)),sheetCommands}),[commandDependencies]),[isMerged,setMerged]=(0,react.useState)((()=>sheetModel.getMerges(SheetUtils.Kb(refCellSelection.current)).length>0)),[isMergedEnabled,setMergedEnabled]=(0,react.useState)(!1),[tablesAtSelections,setTablesAtSelection]=(0,react.useState)(CommonUtils.Ml),[isSelectionOverlap,setSelectionOverlap]=(0,react.useState)(!1);(0,react.useEffect)((()=>{if(refSheetModel.current!==sheetModel)return;setTablesAtSelection(sheetModel.getTables(sheetRanges));const containsMerge=sheetModel.getMerges(sheetRanges).length>0,intersectingRanges=RangeUtils.lU(sheetRanges);let isSingleCell=!0;for(let i=0;isSingleCell&&i<sheetRanges.length;i++)isSingleCell=RangeUtils.di(sheetRanges[i]);setSelectionOverlap(intersectingRanges),setMerged(containsMerge),setMergedEnabled(!intersectingRanges&&(containsMerge||!isSingleCell))}),[currentRender,sheetRanges,sheetModel]),(0,react.useEffect)((()=>{const isFormatPaintMode="formatPainter"===editModeHandler.getMode()?.key;commands.getCommand("formatPainterToggle").update({disabled:!commandsCopyPaste?.getCommand("copy"),state:()=>isFormatPaintMode}).updateCallback((()=>{if(!isFormatPaintMode)return commandsCopyPaste.getCommand("copy").execute({editMode:{key:"formatPainter"}});editModeHandler.setMode(null)}))}),[commandsCopyPaste,editModeHandler]),(0,useSheetViewListener.y)(sheetModel.getView(),{onFreezeSplitChange:()=>{forceRender()},onSelectionChange:_update=>{propCellSelection||(refCellSelection.current=propCellSelection||sheetModel?.getView().selection,setActiveCoords(refCellSelection.current?.activeCoords),updateSelectionsDebounced(refCellSelection.current))}});const updateColors=()=>{commands.getCommand("sheetViewFormatGridlinesColor").update({state:()=>sheetModel.getView().gridLineColor,context:()=>({onColorSelect:_color=>{},isDarkMode:bodyStyle.isDarkMode,autoColor:new AdjustedColor.gE(bodyStyle.strokeFill),schemeLookup:sheetModel.sheetStyle().schemeLookup(),recentColors:()=>sheetModel.sheetStyle().recentColors(),addRecentColor:args=>sheetModel.sheetStyle().addRecentColor(args),clearRecentColors:()=>sheetModel.sheetStyle().clearRecentColors()})}),commands.getCommand("formatSheetTabColor").updateCallback((newColor=>{sheetModel.setTabColor(newColor)})).update({state:()=>sheetModel?.getTabColor()??NO_FILL,context:()=>({onColorSelect:_color=>{},isDarkMode:bodyStyle.isDarkMode,autoColor:NO_FILL,schemeLookup:sheetModel.sheetStyle().schemeLookup(),recentColors:()=>sheetModel.sheetStyle().recentColors(),addRecentColor:args=>sheetModel.sheetStyle().addRecentColor(args),clearRecentColors:()=>sheetModel.sheetStyle().clearRecentColors()})})};(0,react.useEffect)((()=>{updateColors()}),[currentRender,bodyStyle]),(0,react.useEffect)((()=>{const isProtected=!1===sheetModel.getProtection()?.insertHyperlinks;commands.getCommand("openHyperlink").update({disabled:!getActiveCell().hyperlink}),commands.getCommand("removeHyperlink").update({disabled:isProtected||!getActiveCell().hyperlink}),commands.getCommand("updateHyperlink").update({label:()=>getActiveCell().hyperlink?"Edit Hyperlink…":"Insert Hyperlink…",disabled:isProtected})}),[getActiveCell().hyperlink,fullRender]),useSheetStyleListener(sheetModel?.sheetStyle(),{onTableStylesChange:()=>{forceFullRender()}}),(0,useSheetListener.t)(sheetModel,{onViewChange:()=>{const viewCurrent=sheetModel.getView();commands.getCommand("sheetViewToggleFormulaView").update({state:viewCurrent.showFormulas}),commands.getCommand("sheetViewToggleShowZeros").update({state:viewCurrent.showZeros}),commands.getCommand("gridlinesToggle").update({state:viewCurrent.showColumnGridlines||viewCurrent.showRowGridlines}),commands.getCommand("sheetViewToggleGridlinesColumns").update({state:viewCurrent.showColumnGridlines}),commands.getCommand("sheetViewToggleGridlinesRows").update({state:viewCurrent.showRowGridlines}),commands.getCommand("sheetViewToggleShowHeadings").update({state:viewCurrent.showColumnHeaders||viewCurrent.showRowHeaders}),commands.getCommand("sheetViewToggleShowHeadingColumns").update({state:viewCurrent.showColumnHeaders}),commands.getCommand("sheetViewToggleShowHeadingRows").update({state:viewCurrent.showRowHeaders}),commands.getCommand("sheetViewToggleShowHeadingsNumeric").update({state:()=>sheetModel.getView().columnHeaderStyle===ISheetView.wR.Zero&&sheetModel.getView().rowHeaderStyle===ISheetView.wR.Zero}),updateColors()},onTabColorChange:()=>{updateColors()},onCellsChange:()=>{forceRender()},onMergesChange:()=>{forceRender()},onDrawingsChange:()=>{forceRender()},onProtectionChange:()=>{forceRender(),forceFullRender()},onStyleChange:()=>{forceRender()}});const[activeTable,setActiveTable]=(0,react.useState)(null);return(0,react.useEffect)((()=>{let newActiveTable=null;tablesAtSelections.length>0&&RangeUtils.kN(activeCoords,tablesAtSelections[0].ref)&&(newActiveTable=tablesAtSelections[0]),setActiveTable(newActiveTable)}),[activeCoords,tablesAtSelections]),(0,react.useEffect)((()=>{const isFormatProtected=!1===sheetModel.getProtection()?.formatCells,isFormatTableDisabled=tablesAtSelections.length>0&&!activeTable||isFormatProtected,formatContext={context:()=>({sheetStyle:()=>sheetModel.sheetStyle(),table:()=>activeTable,bodyStyle:()=>bodyStyle}),disabled:isFormatTableDisabled};commands.getCommand("formatTableStyle").update(formatContext),commands.getCommand("formatTableStyleClearCellStyles").update(formatContext),commands.getCommand("insertTable").update({disabled:isFormatTableDisabled||tablesAtSelections.length>0});const activeTableCommandProps={disabled:isFormatTableDisabled||0===tablesAtSelections.length};commands.getCommand("removeTables").update(activeTableCommandProps),commands.getCommand("tableFilterToggle").update(activeTableCommandProps),commands.getCommand("tableTotalRowToggle").update(activeTableCommandProps)}),[activeTable,tablesAtSelections,bodyStyle,fullRender]),(0,react.useEffect)((()=>{commands.getCommand("sheetZoomOut").updateCallback((()=>{sheetModel.setView({zoomScale:CellUtils.L$(sheetModel.getView().zoomScale,!1)})})),commands.getCommand("sheetZoomIn").updateCallback((()=>{sheetModel.setView({zoomScale:CellUtils.L$(sheetModel.getView().zoomScale)})})),commands.getCommand("sheetZoom100").updateCallback((()=>{sheetModel.setView({zoomScale:100})})),commands.getCommand("gridlinesToggle").updateCallback((()=>{const isShowingGridlines=sheetModel.getView().showColumnGridlines&&sheetModel.getView().showRowGridlines;sheetModel.setView({showColumnGridlines:!isShowingGridlines,showRowGridlines:!isShowingGridlines})})),commands.getCommand("sheetViewToggleGridlinesRows").updateCallback((()=>{sheetModel.setView({showRowGridlines:!sheetModel.getView().showRowGridlines})})),commands.getCommand("sheetViewToggleGridlinesColumns").updateCallback((()=>{sheetModel.setView({showColumnGridlines:!sheetModel.getView().showColumnGridlines})})),commands.getCommand("sheetViewFormatGridlinesColor").updateCallback((newColor=>{sheetModel.setView({gridLineColor:newColor})})),commands.getCommand("sheetViewToggleShowHeadings").updateCallback((()=>{const isShowingHeaders=sheetModel.getView().showColumnHeaders&&sheetModel.getView().showRowHeaders;sheetModel.setView({showColumnHeaders:!isShowingHeaders,showRowHeaders:!isShowingHeaders})})),commands.getCommand("sheetViewToggleShowHeadingColumns").updateCallback((()=>{sheetModel.setView({showColumnHeaders:!sheetModel.getView().showColumnHeaders})})),commands.getCommand("sheetViewToggleShowHeadingRows").updateCallback((()=>{sheetModel.setView({showRowHeaders:!sheetModel.getView().showRowHeaders})})),commands.getCommand("sheetViewToggleShowHeadingsNumeric").updateCallback((()=>{const isZeroStyle=sheetModel.getView().columnHeaderStyle===ISheetView.wR.Zero&&sheetModel.getView().rowHeaderStyle===ISheetView.wR.Zero;sheetModel.setView({columnHeaderStyle:isZeroStyle?ISheetView.wR.A1:ISheetView.wR.Zero,rowHeaderStyle:isZeroStyle?ISheetView.wR.One:ISheetView.wR.Zero})})),commands.getCommand("sheetViewToggleFormulaView").updateCallback((()=>{sheetModel.setView({showFormulas:!sheetModel.getView().showFormulas})})),commands.getCommand("sheetViewToggleShowZeros").updateCallback((()=>{sheetModel.setView({showZeros:!sheetModel.getView().showZeros})}))}),[sheetModel]),(0,react.useEffect)((()=>{const freeze=sheetModel.getView().freezePanes,isFreezeTop=()=>0!==freeze.coords.rowIndex,isFreezeLeft=()=>0!==freeze.coords.colIndex,isFreezeEither=()=>0!==freeze.coords.rowIndex||0!==freeze.coords.colIndex;commands.getCommand("freezeToggle").updateCallback((()=>{isFreezeEither()?sheetModel.getView().freezePanes=null:isFreezeEither()?isFreezeLeft()?sheetModel.getView().freezePanes={coords:{rowIndex:activeCoords.rowIndex}}:isFreezeTop()&&(sheetModel.getView().freezePanes={coords:{colIndex:activeCoords.colIndex}}):sheetModel.getView().freezePanes={coords:activeCoords}})).update({state:isFreezeEither,disabled:()=>!activeCoords||!isFreezeEither()&&0===activeCoords.rowIndex&&0===activeCoords.colIndex}),commands.getCommand("freezeToggleHorizontal").updateCallback((()=>{sheetModel.getView().freezePanes={coords:{rowIndex:isFreezeTop()?0:activeCoords.rowIndex}}})).update({state:isFreezeTop,disabled:()=>!activeCoords||!isFreezeTop()&&0===activeCoords.rowIndex}),commands.getCommand("freezeToggleVertical").updateCallback((()=>{sheetModel.getView().freezePanes={coords:{colIndex:isFreezeLeft()?0:activeCoords.colIndex}}})).update({state:isFreezeLeft,disabled:()=>!activeCoords||!isFreezeLeft()&&0===activeCoords.colIndex}),commands.getCommand("unfreeze").updateCallback((()=>{sheetModel.getView().freezePanes=null})).update({disabled:()=>!isFreezeEither()})}),[currentRender,activeCoords,sheetModel,bodyStyle]),(0,react.useEffect)((()=>{commands.getCommand("formatBorder").update({context:()=>({onBorderSelect:border=>{setLastBorder(border)},isDarkMode:bodyStyle.isDarkMode,quickColor:lastBorder,autoColor:autoBorderColor,autoStyle:ICellBorder.cz.Thin,sheetStyle:sheetModel.sheetStyle()})})}),[lastBorder,autoBorderColor,bodyStyle]),(0,react.useEffect)((()=>{commands.getCommand("formatCellStyle").update({context:()=>({sheetStyle:()=>sheetModel.sheetStyle(),style:()=>activeStyle,bodyStyle:()=>bodyStyle,createCellTemplate:update=>sheetModel.createCellTemplate(update)})}),commands.getCommand("formatFillColor").update({state:()=>{let color=null;return activeStyle.fill?.fillType===IFill.kP.Solid?color=activeStyle.fill.color:activeStyle.fill?.fillType===IFill.kP.Gradient?color=activeStyle.fill.stops?.[0]?.color??null:activeStyle.fill?.fillType===IFill.kP.Pattern&&(color=activeStyle.fill.background??null),color},context:()=>({onColorSelect:color=>{setLastFillColor(color??NO_FILL)},isDarkMode:bodyStyle.isDarkMode,quickColor:lastFillColor,autoColor:NO_FILL,schemeLookup:sheetModel.sheetStyle().schemeLookup(),recentColors:sheetModel.sheetStyle().recentColors(),addRecentColor:args=>sheetModel.sheetStyle().addRecentColor(args),clearRecentColors:()=>sheetModel.sheetStyle().clearRecentColors()})}),commands.getCommand("formatFontColor").update({state:()=>activeStyle.font.toJSON()?.fill?activeStyle.font.fill:null,context:()=>{const namedStyle=activeStyle.namedStyleRef,autoColor=namedStyle?.font.fill??sheetModel.sheetStyle().getNormalStyle().font.fill;return{onColorSelect:color=>{setLastFontColor(color)},isDarkMode:bodyStyle.isDarkMode,quickColor:lastFontColor,autoColor,schemeLookup:sheetModel.sheetStyle().schemeLookup(),recentColors:sheetModel.sheetStyle().recentColors(),addRecentColor:args=>sheetModel.sheetStyle().addRecentColor(args),clearRecentColors:()=>sheetModel.sheetStyle().clearRecentColors()}}}),commands.getCommand("formatNumberFormat").update({state:()=>activeStyle.numberFormat,context:()=>getActiveCell}),commands.getCommand("formatNumberDialog").update({state:()=>activeStyle.numberFormat,context:()=>getActiveCell}),commands.getCommand("formatFontFamily").update({state:()=>activeStyle.font.family}),commands.getCommand("formatFontSize").update({state:()=>activeStyle.font.size});const isBold=function(){const boldWeight=activeStyle.font.weight||0;return!isNaN(boldWeight)&&boldWeight>500};commands.getCommand("formatBoldToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{weight:isBold()?400:700}}})})).update({state:isBold});const isItalic=function(){return activeStyle.font.style===FontFace.zz.Italic};commands.getCommand("formatItalicToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{style:isItalic()?FontFace.zz.Normal:FontFace.zz.Italic}}})})).update({state:isItalic}),commands.getCommand("formatStrikeThroughToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{strike:!activeStyle.font.strike}}})})).update({state:activeStyle.font.strike}),commands.getCommand("formatUnderlinedToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{underline:activeStyle.font.underline!==FontFace.iC.Single?FontFace.iC.Single:FontFace.iC.None}}})})).update({state:activeStyle.font.underline===FontFace.iC.Single}),commands.getCommand("formatUnderlinedDoubleToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{underline:activeStyle.font.underline!==FontFace.iC.Double?FontFace.iC.Double:FontFace.iC.None}}})})).update({state:activeStyle.font.underline===FontFace.iC.Double}),commands.getCommand("formatUnderlinedAccountingToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{underline:activeStyle.font.underline!==FontFace.iC.SingleAccounting?FontFace.iC.SingleAccounting:FontFace.iC.None}}})})).update({state:activeStyle.font.underline===FontFace.iC.SingleAccounting}),commands.getCommand("formatUnderlinedAccountingDoubleToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{underline:activeStyle.font.underline!==FontFace.iC.DoubleAccounting?FontFace.iC.DoubleAccounting:FontFace.iC.None}}})})).update({state:activeStyle.font.underline===FontFace.iC.DoubleAccounting}),commands.getCommand("formatSuperscriptToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{verticalAlign:activeStyle.font.verticalAlign!==types.v1.Super?types.v1.Super:types.v1.Baseline}}})})).update({state:activeStyle.font.verticalAlign===types.v1.Super}),commands.getCommand("formatSubscriptToggle").updateCallback((function(){updateSelectedCells(this,{style:{font:{verticalAlign:activeStyle.font.verticalAlign!==types.v1.Sub?types.v1.Sub:types.v1.Baseline}}})})).update({state:activeStyle.font.verticalAlign===types.v1.Sub});const isTextOverflowVisible=()=>activeStyle.alignment.overflow===types.ui.Visible;commands.getCommand("formatTextOverflowVisibleToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{overflow:(isTextOverflowVisible(),types.ui.Visible)}}})})).update({state:isTextOverflowVisible});const isTextOverflowWrap=()=>activeStyle.alignment.overflow===types.ui.Wrap;commands.getCommand("formatTextOverflowWrapToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{overflow:isTextOverflowWrap()?types.ui.Visible:types.ui.Wrap}}})})).update({state:isTextOverflowWrap});const isTextOverflowClip=function(){return activeStyle.alignment.overflow===types.ui.Clip};commands.getCommand("formatTextOverflowClipToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{overflow:isTextOverflowClip()?types.ui.Visible:types.ui.Clip}}},{autoFit:!1})})).update({state:isTextOverflowClip});const isTextOverflowShrink=function(){return activeStyle.alignment.overflow===types.ui.Shrink};commands.getCommand("formatTextOverflowShrinkToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{overflow:isTextOverflowShrink()?types.ui.Visible:types.ui.Shrink}}},{autoFit:!1})})).update({state:isTextOverflowShrink});const isTextOverflowEllipsis=function(){return activeStyle.alignment.overflow===types.ui.Shrink};commands.getCommand("formatTextOverflowEllipsisToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{overflow:isTextOverflowEllipsis()?types.ui.Visible:types.ui.Ellipsis}}},{autoFit:!1})})).update({state:isTextOverflowEllipsis,disabled:!0});const isTopAlign=function(){return activeStyle.alignment.vertical===types.sx.Top};commands.getCommand("formatAlignTopToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{vertical:isTopAlign()?types.sx.Bottom:types.sx.Top}}})})).update({state:isTopAlign});const isMiddleAlign=function(){return activeStyle.alignment.vertical===types.sx.Center};commands.getCommand("formatAlignMiddleToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{vertical:isMiddleAlign()?types.sx.Bottom:types.sx.Center}}})})).update({state:isMiddleAlign});const isBottomAlign=function(){return activeStyle.alignment.vertical===types.sx.Bottom};commands.getCommand("formatAlignBottomToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{vertical:(isBottomAlign(),types.sx.Bottom)}}})})).update({state:isBottomAlign});const isJustifyVerticalAlign=function(){return activeStyle.alignment.vertical===types.sx.Justify};commands.getCommand("formatAlignJustifyVerticalToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{vertical:isJustifyVerticalAlign()?types.sx.Bottom:types.sx.Justify}}})})).update({state:isJustifyVerticalAlign});const isDistributedVerticalAlign=function(){return activeStyle.alignment.vertical===types.sx.Distributed};commands.getCommand("formatAlignDistributedVerticalToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{vertical:isDistributedVerticalAlign()?types.sx.Bottom:types.sx.Distributed}}})})).update({state:isDistributedVerticalAlign});const isLeftAlign=function(){return activeStyle.alignment.horizontal===types.OD.Left};commands.getCommand("formatAlignLeftToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{horizontal:isLeftAlign()?types.OD.General:types.OD.Left}}})})).update({state:isLeftAlign});const isCenterAlign=function(){return activeStyle.alignment.horizontal===types.OD.Center};commands.getCommand("formatAlignCenterToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{horizontal:isCenterAlign()?types.OD.General:types.OD.Center}}})})).update({state:isCenterAlign});const isCenterContinuousAlign=function(){return activeStyle.alignment.horizontal===types.OD.CenterContinuous};commands.getCommand("formatAlignCenterContinuousToggle").updateCallback((function(){const style={alignment:{horizontal:isCenterContinuousAlign()?types.OD.General:types.OD.CenterContinuous,rotation:null}};updateSelectedCells(this,{style})})).update({state:isCenterContinuousAlign});const isFillAlign=function(){return activeStyle.alignment.horizontal===types.OD.Fill};commands.getCommand("formatAlignFillToggle").updateCallback((function(){const style={alignment:{horizontal:isFillAlign()?types.OD.General:types.OD.Fill,rotation:null}};updateSelectedCells(this,{style})})).update({state:isFillAlign});const isDistributedHAlign=function(){return activeStyle.alignment.horizontal===types.OD.Distributed};commands.getCommand("formatAlignDistributedHorizontalToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{horizontal:isDistributedHAlign()?types.OD.General:types.OD.Distributed}}})})).update({state:isDistributedHAlign});const isRightAlign=function(){return activeStyle.alignment.horizontal===types.OD.Right};commands.getCommand("formatAlignRightToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{horizontal:isRightAlign()?types.OD.General:types.OD.Right}}})})).update({state:isRightAlign});const isJustifyAlign=function(){return activeStyle.alignment.horizontal===types.OD.Justify};commands.getCommand("formatAlignJustifyToggle").updateCallback((function(){updateSelectedCells(this,{style:{alignment:{horizontal:isJustifyAlign()?types.OD.General:types.OD.Justify}}})})).update({state:isJustifyAlign});const isContinuousSpan=activeStyle.alignment.horizontal===types.OD.CenterContinuous||activeStyle.alignment.horizontal===types.OD.Fill;commands.getCommand("formatTextRotate0").updateCallback((function(_newValue){updateSelectedCells(this,{style:{alignment:{rotation:0}}})})).update({disabled:isContinuousSpan,state:0===activeStyle.alignment.rotation}),commands.getCommand("formatTextRotate45").updateCallback((function(newValue){updateSelectedCells(this,{style:{alignment:{rotation:newValue??1?45:0}}})})).update({disabled:isContinuousSpan,state:45===activeStyle.alignment.rotation}),commands.getCommand("formatTextRotate90").updateCallback((function(newValue){updateSelectedCells(this,{style:{alignment:{rotation:newValue??1?90:0}}})})).update({disabled:isContinuousSpan,state:90===activeStyle.alignment.rotation}),commands.getCommand("formatTextRotate270").updateCallback((function(newValue){updateSelectedCells(this,{style:{alignment:{rotation:newValue??1?270:0}}})})).update({disabled:isContinuousSpan,state:270===activeStyle.alignment.rotation}),commands.getCommand("formatTextRotate315").updateCallback((function(newValue){updateSelectedCells(this,{style:{alignment:{rotation:newValue??1?315:0}}})})).update({disabled:isContinuousSpan,state:315===activeStyle.alignment.rotation}),commands.getCommand("formatTextRotateCustom").updateCallback((function(newValue){updateSelectedCells(this,{style:{alignment:{rotation:newValue}}})})).update({disabled:isContinuousSpan,state:activeStyle.alignment.rotation??0})}),[activeStyle,sheetModel,bodyStyle,lastFillColor,lastFontColor]),(0,react.useEffect)((()=>{const isFormatProtected=!1===sheetModel.getProtection()?.formatCells,doMerge=async(mergeType,command)=>{if(notifier?.showOptions){let hasMultipleValues=!1;const ranges=refCellSelection.current?.ranges;for(let i=0;!hasMultipleValues&&i<ranges.length;i++){const itemCount=sheetModel.countItems(ranges[i],{[ISheetModel.nW.Content]:2});hasMultipleValues=itemCount?.[ISheetModel.nW.Content]>1}if(hasMultipleValues){if("Merge"!==await(notifier?.showOptions({title:"Confirm",description:"Merging cells will only keep the upper-left value. Some data will be discarded. Continue?",options:["Merge","Cancel"],defaultOption:"Merge"})))return}}doCommand(command,(()=>{const trans=sheetModel.pushTransaction(command?.label?.()??"Merge");try{const ranges=refCellSelection.current?.ranges;if(sheetModel.merge(ranges,mergeType),mergeType===CellTypes.Bt.All){const pairs=[],center={style:{alignment:{horizontal:types.OD.Center}}};for(let s=0;s<ranges.length;s++)pairs.push({address:{rowIndex:ranges[s].rowStart,colIndex:ranges[s].colStart},update:center});sheetModel.setCellPairs(pairs)}trans.commit()}catch(error){throw trans.rollback(),error}}))},doUnmerge=command=>{doCommand(command,(()=>{const ranges=refCellSelection.current?.ranges,pairs=[],clearAlign={style:{alignment:{horizontal:types.OD.General}}};for(let s=0;s<ranges.length;s++)pairs.push({address:ranges[s],update:clearAlign});const trans=sheetModel.pushTransaction(command?.label?.()??"Unmerge");try{sheetModel.unmerge(ranges),sheetModel.setCellPairs(pairs),trans.commit()}catch(error){throw trans.rollback(),error}}))};commands.getCommand("mergeToggle").updateCallback((function(){const ranges=refCellSelection.current?.ranges;0!==ranges.length&&(isMerged?doUnmerge(this):doMerge(CellTypes.Bt.All,this))})).update({state:isMerged,disabled:!isMergedEnabled||isFormatProtected}),commands.getCommand("mergeHorizontal").updateCallback((function(){doMerge(CellTypes.Bt.Rows,this)})).update({disabled:!isMergedEnabled||isFormatProtected}),commands.getCommand("mergeVertical").updateCallback((function(){doMerge(CellTypes.Bt.Columns,this)})).update({disabled:!isMergedEnabled}),commands.getCommand("unmerge").updateCallback((function(){doUnmerge(this)})).update({disabled:!isMerged||!isMergedEnabled||isFormatProtected});const headerAdjustDisabled={disabled:isFormatProtected};commands.getCommand("hideSelectedRows").updateCallback((function(){doCommand(this,(()=>{sheetModel.hideRows(void 0,{description:this?.label?.()})}))})).update(headerAdjustDisabled),commands.getCommand("hideSelectedColumns").updateCallback((function(){doCommand(this,(()=>{sheetModel.hideColumns(void 0,{description:this?.label?.()})}))})).update(headerAdjustDisabled),commands.getCommand("unhideSelectedRows").updateCallback((function(){doCommand(this,(()=>{sheetModel.unhideRows(void 0,{description:this?.label?.()})}))})).update(headerAdjustDisabled),commands.getCommand("unhideSelectedColumns").updateCallback((function(){doCommand(this,(()=>{sheetModel.unhideColumns(void 0,{description:this?.label?.()})}))})).update(headerAdjustDisabled),commands.getCommand("autoFitRows").updateCallback((function(){sheetModel.autoFitRows()})).update(headerAdjustDisabled),commands.getCommand("autoFitColumns").updateCallback((function(){sheetModel.autoFitColumns()})).update(headerAdjustDisabled);let hasColumnAll=!1,hasRowAll=!1,columnAllCount=0,rowAllCount=0;if(!isFormatProtected&&!isSelectionOverlap){const maxCellBounds=sheetModel.getMaxCellBounds();for(let i=0;i<sheetRanges.length;i++){const sheetRange=sheetRanges[i],isColumnAll=sheetRange.colStart<=maxCellBounds.colStart&&sheetRange.colEnd>=maxCellBounds.colEnd;hasColumnAll=hasColumnAll||isColumnAll;const isRowAll=sheetRange.rowStart<=maxCellBounds.rowStart&&sheetRange.rowEnd>=maxCellBounds.rowEnd;hasRowAll=hasRowAll||isRowAll,rowAllCount=rowAllCount+sheetRange.rowEnd-sheetRange.rowStart+1,columnAllCount=columnAllCount+sheetRange.colEnd-sheetRange.colStart+1}}const sortDisabled={disabled:isFormatProtected||1!==sheetRanges.length};commands.getCommand("sortAscending").update(sortDisabled),commands.getCommand("sortDescending").update(sortDisabled);const cellAdjustDisabled={disabled:hasColumnAll||hasRowAll||isFormatProtected||isSelectionOverlap},disabledColumn=hasColumnAll||isFormatProtected||isSelectionOverlap;disabledColumn&&(columnAllCount=1);const disabledRow=hasRowAll||isFormatProtected||isSelectionOverlap;disabledRow&&(rowAllCount=1);let insertModifier="",insertColumnModifier="",insertColumnPlural="",insertRowModifier="",insertRowPlural="",removeColumnModifier="",removeColumnPlural="",removeRowModifier="",removeRowPlural="";columnAllCount>1&&(removeColumnModifier=insertColumnModifier=columnAllCount+" ",removeColumnPlural=insertColumnPlural="s"),rowAllCount>1&&(removeRowModifier=insertRowModifier=rowAllCount+" ",removeRowPlural=insertRowPlural="s"),"copy"===editModeHandler.getMode()?.key?(insertModifier=insertRowModifier=insertColumnModifier="Copied ",insertColumnPlural=insertRowPlural="s"):"cut"===editModeHandler.getMode()?.key&&(insertModifier=insertRowModifier=insertColumnModifier="Cut ",insertColumnPlural=insertRowPlural="s"),commands.getCommand("insertCellsShiftRight").update(cellAdjustDisabled),commands.getCommand("insertCellsShiftDown").update(cellAdjustDisabled),commands.getCommand("removeCellsShiftUp").update(cellAdjustDisabled),commands.getCommand("removeCellsShiftLeft").update(cellAdjustDisabled),commands.getCommand("insertCells").update({label:`Insert ${insertModifier}Cells`,scopedLabels:{insertCells:`${insertModifier}At Selection`}}),commands.getCommand("insertRows").update({label:`Insert ${insertRowModifier}Row${insertRowPlural}`,scopedLabels:{insertCells:`${insertRowModifier}Row${insertRowPlural}`},disabled:disabledRow}),commands.getCommand("insertRowsAfter").update({label:`Insert ${insertRowModifier}Row${insertRowPlural} Below`,disabled:disabledRow}),commands.getCommand("insertColumns").update({label:`Insert ${insertColumnModifier}Column${insertColumnPlural}`,scopedLabels:{insertCells:`${insertColumnModifier}Column${insertColumnPlural}`},disabled:disabledColumn}),commands.getCommand("insertColumnsAfter").update({label:`Insert ${insertColumnModifier}Column${insertColumnPlural} After`,disabled:disabledColumn}),commands.getCommand("removeRows").update({label:`Delete ${removeRowModifier}Row${removeRowPlural}`,scopedLabels:{removeCells:`${removeRowModifier}Row${removeRowPlural}`},disabled:disabledRow}),commands.getCommand("removeColumns").update({label:`Delete ${removeColumnModifier}Column${removeColumnPlural}`,scopedLabels:{removeCells:`${removeColumnModifier}Column${removeColumnPlural}`},disabled:disabledColumn})}),[currentRender,isMerged,isMergedEnabled,isSelectionOverlap,sheetRanges,editModeHandler,notifier,fullRender]),(0,react.useEffect)((()=>{const isFormatProtected=!1===sheetModel.getProtection()?.formatCells,disabledProps={disabled:isFormatProtected};commands.getCommand("protectionSheetToggle").updateCallback((()=>{sheetModel.getProtection()?sheetModel.setProtection(null):sheetModel.setProtection({})})).update({state:!!sheetModel.getProtection(),label:()=>sheetModel.getProtection()?"Unprotect Sheet":"Protect Sheet",scopedLabels:{sheet:sheetModel.getProtection()?"Unprotect":"Protect"}}),commands.getCommand("sortAscending").update(disabledProps),commands.getCommand("sortDescending").update(disabledProps),commands.getCommand("sortCustom")?.update(disabledProps),commands.getCommand("insertComment").update(disabledProps),commands.getCommand("insertChart").update(disabledProps),commands.getCommand("insertImageFromFile").update(disabledProps),commands.getCommand("insertImageFromURL").update(disabledProps),commands.getCommand("formatBorder").update(disabledProps),commands.getCommand("formatFillColor").update(disabledProps),commands.getCommand("formatFontColor").update(disabledProps),commands.getCommand("formatBoldToggle").update(disabledProps),commands.getCommand("formatItalicToggle").update(disabledProps),commands.getCommand("formatUnderlinedToggle").update(disabledProps),commands.getCommand("formatStrikeThroughToggle").update(disabledProps),commands.getCommand("formatSuperscriptToggle").update(disabledProps),commands.getCommand("formatSubscriptToggle").update(disabledProps),commands.getCommand("formatAlignTopToggle").update(disabledProps),commands.getCommand("formatTextOverflowVisibleToggle").update(disabledProps),commands.getCommand("formatTextOverflowWrapToggle").update(disabledProps),commands.getCommand("formatTextOverflowClipToggle").update(disabledProps),commands.getCommand("formatTextOverflowShrinkToggle").update(disabledProps),commands.getCommand("formatAlignMiddleToggle").update(disabledProps),commands.getCommand("formatAlignBottomToggle").update(disabledProps),commands.getCommand("formatAlignDistributedVerticalToggle").update(disabledProps),commands.getCommand("formatAlignJustifyVerticalToggle").update(disabledProps),commands.getCommand("formatAlignLeftToggle").update(disabledProps),commands.getCommand("formatAlignCenterToggle").update(disabledProps),commands.getCommand("formatAlignRightToggle").update(disabledProps),commands.getCommand("formatAlignJustifyToggle").update(disabledProps),commands.getCommand("formatAlignCenterContinuousToggle").update(disabledProps),commands.getCommand("formatAlignDistributedHorizontalToggle").update(disabledProps),commands.getCommand("formatAlignFillToggle").update(disabledProps),commands.getCommand("formatFontSizeIncrease").update(disabledProps),commands.getCommand("formatFontSizeDecrease").update(disabledProps),commands.getCommand("formatFontFamily").update(disabledProps),commands.getCommand("formatFontSize").update(disabledProps),commands.getCommand("formatNumberFormat").update(disabledProps),commands.getCommand("formatNumberFormatGeneralStyle").update(disabledProps),commands.getCommand("formatNumberFormatNumberStyle").update(disabledProps),commands.getCommand("formatNumberFormatTimeStyle").update(disabledProps),commands.getCommand("formatNumberFormatDateStyle").update(disabledProps),commands.getCommand("formatNumberFormatAccountingStyle").update(disabledProps),commands.getCommand("formatNumberFormatPercentStyle").update(disabledProps),commands.getCommand("formatNumberFormatScientificStyle").update(disabledProps),commands.getCommand("formatNumberFormatCommaStyle").update(disabledProps),commands.getCommand("formatNumberFormatIncreaseDecimal").update(disabledProps),commands.getCommand("formatNumberFormatDecreaseDecimal").update(disabledProps),commands.getCommand("hideSelectedRows").update(disabledProps),commands.getCommand("hideSelectedColumns").update(disabledProps),commands.getCommand("unhideSelectedRows").update(disabledProps),commands.getCommand("unhideSelectedColumns").update(disabledProps),commands.getCommand("enterSumFormula").update(disabledProps),commands.getCommand("enterCurrentTime").update(disabledProps),commands.getCommand("enterCurrentDate").update(disabledProps),commands.getCommand("copyValueCellAbove").update(disabledProps),commands.getCommand("fillDown").update(disabledProps),commands.getCommand("fillRight").update(disabledProps),commands.getCommand("fillUp").update(disabledProps),commands.getCommand("fillLeft").update(disabledProps),commands.getCommand("formatCellStyle").update(disabledProps),commands.getCommand("formatTableStyle").update(disabledProps),commands.getCommand("formatBorderAddOutline").update(disabledProps),commands.getCommand("formatBorderRemoveOutline").update(disabledProps),commands.getCommand("formatIndentDecrease").update(disabledProps),commands.getCommand("formatIndentIncrease").update(disabledProps),commands.getCommand("clearContents").update(disabledProps),commands.getCommand("clearFormats").update(disabledProps),commands.getCommand("clearAll").update(disabledProps);const isContinuousSpan=activeStyle.alignment.horizontal===types.OD.CenterContinuous||activeStyle.alignment.horizontal===types.OD.Fill,disabledRotation={disabled:isFormatProtected||isContinuousSpan};commands.getCommand("formatTextRotate0").update(disabledRotation),commands.getCommand("formatTextRotate45").update(disabledRotation),commands.getCommand("formatTextRotate90").update(disabledRotation),commands.getCommand("formatTextRotate270").update(disabledRotation),commands.getCommand("formatTextRotate315").update(disabledRotation),commands.getCommand("formatTextRotateCustom").update(disabledRotation),commands.getCommand("formatTextRotateVertical").update(disabledRotation)}),[currentRender]),commands}try{useSheetCommands.displayName="useSheetCommands",useSheetCommands.__docgenInfo={description:"Hook for observing sheet commands. This hook will observe a combination\nof sheet events and an options selection.\n\nNote -\nIf a sheetSelection is provided then the commands will be confirmed using the provided selections.\nThis is done to allow for context specific (right-click, etc) commands.\n\nContinue to review until we have them all.\nhttps://www.excelcampus.com/shortcuts/#:~:text=For%20example%2C%20to%20press%20the,Then%20release%20all%20keys. (great list)\nhttps://support.microsoft.com/en-us/office/keyboard-shortcuts-in-excel-1798d9d5-842a-42b8-9c99-9b7213f0040f\nhttps://corporatefinanceinstitute.com/resources/excel/shortcuts/excel-shortcuts-pc-mac/\n\nTODO -\nInsert Bullet - Alt 7/9 while in edit mode\nCtrl+Shift+F / Ctrl+Shift+P - Open Font Dialog\nCTRL+SHIFT+DELETE === cut ? (not seeing this happen)\n\nFormulas\n= is start formula (make this a shortcut?)\nCtrl + / Select current array\n(other formula shortcuts)",displayName:"useSheetCommands",props:{sheetModel:{defaultValue:null,description:"",name:"sheetModel",required:!0,type:{name:"ISheetModel"}},commandTarget:{defaultValue:null,description:"",name:"commandTarget",required:!0,type:{name:"CommandTarget | (() => CommandTarget)"}},onRepeatCommandChange:{defaultValue:null,description:"Notify that there is a new repeatable command",name:"onRepeatCommandChange",required:!1,type:{name:"(command: ICommand<any, any>) => void"}},cellSelection:{defaultValue:null,description:"If this is supplied then the sheet models selection is not used..",name:"cellSelection",required:!1,type:{name:"CellSelection"}},commandDependencies:{defaultValue:null,description:"",name:"commandDependencies",required:!1,type:{name:"CommandMap"}},notifier:{defaultValue:null,description:"",name:"notifier",required:!1,type:{name:"Notifier"}},onStartEdit:{defaultValue:null,description:"",name:"onStartEdit",required:!1,type:{name:"(event: Partial<StartEditEvent>) => void"}},bodyStyle:{defaultValue:null,description:"",name:"bodyStyle",required:!1,type:{name:"GridSurfaceStyle"}},commandsCopyPaste:{defaultValue:null,description:"",name:"commandsCopyPaste",required:!1,type:{name:"CommandMap"}},onGoto:{defaultValue:null,description:"",name:"onGoto",required:!1,type:{name:"(location: SheetCellCoordsAddress | GotoOptions | ISheetRange) => Promise<IWorkbookRange>"}},getViewport:{defaultValue:null,description:"Returns the current viewport\n@returns Re",name:"getViewport",required:!1,type:{name:"() => ScrollableViewport"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/hooks/useSheetCommands.tsx#useSheetCommands"]={docgenInfo:useSheetCommands.__docgenInfo,name:"useSheetCommands",path:"../../packages/sheet-react/src/hooks/useSheetCommands.tsx#useSheetCommands"})}catch(__react_docgen_typescript_loader_error){}var useBordersOverlay=__webpack_require__("../../packages/sheet-react/src/hooks/useBordersOverlay.tsx"),SvgIcon=__webpack_require__("../../node_modules/@mui/material/SvgIcon/SvgIcon.js");const LogoTextNoPaddingIcon=props=>{const{style:propStyle,...rest}=props??{};return(0,jsx_runtime.jsxs)(SvgIcon.A,{style:{width:"135px",height:"37px",...propStyle},viewBox:"0 0 135 37",...rest,children:[(0,jsx_runtime.jsx)("path",{d:"M 1.0984,0 C 0.4978,0 0.01,0.40548 0.01,0.90302 v 19.5766 H 0 v 15.61762 c 0,0.30574 0.185,0.57535 0.466,0.73886 v 0.1426 H 0.8565 C 0.9315,36.992 1.0086,37 1.0883,37 H 13.063 25.9706 v 0 h 8.7553 c 0.08,0 0.1563,-0.008 0.2308,-0.0213 h 0.054 v -0.0141 c 0.4621,-0.10457 0.8035,-0.45175 0.8035,-0.86739 v -15.312 c 0,-0.0328 0.01,-0.0658 0.01,-0.0995 V 0.90304 C 35.8242,0.4052 35.3363,6e-5 34.7358,6e-5 H 22.5969 V 1.7e-4 H 21.0014 V 6e-5 Z",fill:"#547dbe",fillRule:"evenodd"}),(0,jsx_runtime.jsx)("path",{d:"M 1.4849,2.09543 V 9.06408 H 8.1947 V 2.09543 Z m 8.6592,0 V 9.06408 H 16.854 V 2.09543 Z m 8.685,0 v 6.96865 h 6.7098 V 2.09543 Z m 8.7355,0 v 6.96865 h 6.7099 V 2.09543 Z M 1.4849,11.04391 v 6.81444 h 6.7098 v -6.81444 z m 8.6592,0 v 6.81444 h 6.7099 v -6.81444 z m 8.685,0 v 6.81444 h 6.7098 v -6.81444 z m 8.7355,0 v 6.81444 h 6.7099 V 11.04391 Z M 1.4849,19.83872 v 6.68584 h 6.7098 v -6.68584 z m 8.6592,0 v 6.68584 h 6.7351 v -6.68584 z m 8.685,0 v 6.68584 h 6.7098 v -6.68584 z m 8.7355,0 v 6.68584 h 6.7099 v -6.68584 z m -26.052,8.38811 v 6.68588 h 6.7098 v -6.68588 z m 8.6592,0 v 6.68588 h 6.7355 v -6.68588 z m 8.685,0 v 6.68588 h 6.7099 v -6.68588 z m 8.7356,0 v 6.68588 h 6.7098 v -6.68588 z",fill:"#ffffff",fillRule:"evenodd"}),(0,jsx_runtime.jsx)("path",{d:"m 1.4785,2.09737 v 6.96865 h 6.741 V 2.09737 Z m 0,8.94851 v 6.81449 h 6.741 v -6.81449 z m 0,8.79485 v 6.6858 h 6.741 v -6.6858 z m 0.028,8.388 v 6.68588 h 6.741 v -6.68588 z",fill:"#547dbe",fillRule:"evenodd",strokeWidth:"0.4"}),(0,jsx_runtime.jsx)("path",{d:"M 120.9895,32.82218 V 10.13469 h 4.7986 v 18.71559 h 9.2153 v 3.9719 z m 0.4853,0 h -5.4976 l -5.275,-8.57923 -5.2751,8.57923 h -5.1481 l 7.5314,-11.69325 -7.0545,-10.99424 h 5.3067 l 4.8936,8.16618 4.7986,-8.16618 h 5.1796 l -7.118,11.24826 z M 95.9361,29.04099 c 0.5297,0 1.0381,-0.053 1.5254,-0.15888 0.4872,-0.10591 0.9745,-0.23299 1.4617,-0.3813 v 3.52703 c -0.5084,0.21183 -1.144,0.39189 -1.9066,0.54018 -0.7415,0.16946 -1.5571,0.2542 -2.4469,0.2542 -1.038,0 -1.9701,-0.16947 -2.7964,-0.5084 -0.805,-0.33894 -1.4511,-0.92148 -1.9384,-1.74763 -0.466,-0.84734 -0.6991,-2.01241 -0.6991,-3.49526 v -8.35686 h -2.2562 v -2.00181 l 2.6058,-1.58876 1.3664,-3.65411 h 3.0189 v 3.6859 h 4.8619 v 3.55878 h -4.8619 v 8.35686 c 0,0.65668 0.1906,1.15449 0.5719,1.49342 0.3814,0.31776 0.8792,0.47664 1.4935,0.47664 z M 79.1445,14.83743 c 2.3939,0 4.29,0.68847 5.6882,2.06535 1.3983,1.35581 2.0972,3.29411 2.0972,5.81491 v 2.28769 H 75.7444 c 0.042,1.33475 0.4342,2.38315 1.1758,3.14596 0.7626,0.76244 1.8113,1.14385 3.1459,1.14385 1.1227,0 2.1396,-0.10609 3.0506,-0.3179 0.9109,-0.23311 1.8536,-0.58257 2.8283,-1.0484 v 3.654 c -0.8476,0.42362 -1.7479,0.73087 -2.7012,0.92139 -0.9322,0.21181 -2.0655,0.3179 -3.4001,0.3179 -1.7373,0 -3.2731,-0.3179 -4.6078,-0.95333 -1.3346,-0.65673 -2.3833,-1.64162 -3.1459,-2.95507 -0.7627,-1.31344 -1.144,-2.96571 -1.144,-4.9568 0,-2.03367 0.3389,-3.71788 1.0169,-5.05235 0.6991,-1.35578 1.6629,-2.37258 2.8917,-3.0504 1.2286,-0.67783 2.6586,-1.0168 4.2899,-1.0168 z m 0.032,3.36815 c -0.911,0 -1.6736,0.29653 -2.2879,0.88967 -0.5933,0.59322 -0.9428,1.51461 -1.0487,2.76455 h 6.6415 c -0.021,-1.05904 -0.2967,-1.92796 -0.8262,-2.60567 -0.5297,-0.69905 -1.3559,-1.04855 -2.4787,-1.04855 z m -17.011,-3.36815 c 2.3939,0 4.29,0.68847 5.6882,2.06535 1.3982,1.35581 2.0973,3.29411 2.0973,5.81491 v 2.28769 H 58.7653 c 0.042,1.33475 0.4343,2.38315 1.1758,3.14596 0.7627,0.76244 1.8113,1.14385 3.1459,1.14385 1.1228,0 2.1397,-0.10609 3.0507,-0.3179 0.911,-0.23311 1.8536,-0.58257 2.8282,-1.0484 v 3.654 c -0.8475,0.42362 -1.7478,0.73087 -2.7011,0.92139 -0.9321,0.21181 -2.0655,0.3179 -3.4002,0.3179 -1.7372,0 -3.273,-0.3179 -4.6077,-0.95333 -1.3347,-0.65673 -2.3833,-1.64162 -3.1459,-2.95507 -0.7627,-1.31344 -1.144,-2.96571 -1.144,-4.9568 0,-2.03367 0.3389,-3.71788 1.0168,-5.05235 0.6991,-1.35578 1.6631,-2.37258 2.8918,-3.0504 1.2287,-0.67783 2.6587,-1.0168 4.2899,-1.0168 z m 0.032,3.36815 c -0.911,0 -1.6736,0.29653 -2.288,0.88967 -0.5931,0.59322 -0.9427,1.51461 -1.0486,2.76455 h 6.6414 c -0.021,-1.05904 -0.2965,-1.92796 -0.8262,-2.60567 -0.5297,-0.69905 -1.3558,-1.04855 -2.4786,-1.04855 z M 41.7033,13.59817 c 0,0.84739 -0.032,1.66288 -0.095,2.44668 -0.042,0.78385 -0.085,1.33456 -0.1271,1.65231 h 0.2542 c 0.5508,-0.88968 1.2605,-1.53575 2.1291,-1.93827 0.8686,-0.40251 1.8325,-0.60371 2.8917,-0.60371 1.8855,0 3.3896,0.50838 4.5124,1.52518 1.144,0.99558 1.716,2.60556 1.716,4.82998 V 32.82218 H 48.2498 V 22.68575 c 0,-2.49951 -0.9322,-3.74937 -2.7964,-3.74937 -1.4194,0 -2.4045,0.49788 -2.9553,1.49362 -0.5297,0.97424 -0.7945,2.38314 -0.7945,4.22592 v 8.16626 H 36.9688 V 8.67305 h 4.7348 z",fill:"#eb594d"}),(0,jsx_runtime.jsx)("path",{d:"m 23.345,4.88926 c 1.4307,0 2.8282,0.229 4.1916,0.68692 1.3636,0.45803 2.6999,1.15712 4.0084,2.09748 l -1.8344,2.50966 C 28.6222,9.40175 27.5522,8.82162 26.5004,8.44306 25.4486,8.0645 24.3968,7.87524 23.345,7.87524 c -1.9935,0 -3.5435,0.40902 -4.6503,1.22728 -1.1068,0.81819 -1.6601,1.97842 -1.6601,3.48048 v 0.0183 c 0,1.05019 0.3179,1.8502 0.9538,2.39973 0.636,0.54952 1.4615,0.95869 2.4765,1.22731 1.015,0.26862 2.0975,0.51907 3.2468,0.75111 1.003,0.20755 1.9996,0.44872 2.9905,0.7235 0.9905,0.27478 1.8922,0.66562 2.7057,1.1724 0.813,0.50679 1.4615,1.1937 1.9444,2.06075 0.4832,0.86705 0.7247,1.99672 0.7247,3.38884 v 0.0367 c 0,2.45464 -0.8561,4.35355 -2.5682,5.69703 -1.7122,1.34311 -4.1216,2.01505 -7.2278,2.01505 -1.2963,0 -2.5162,-0.12207 -3.6598,-0.36658 -1.1434,-0.24413 -2.2134,-0.61071 -3.2102,-1.09898 -0.9968,-0.48864 -1.9292,-1.09897 -2.7975,-1.83175 l 1.9628,-2.47308 c 1.0763,0.92809 2.2534,1.62428 3.5314,2.08825 1.2779,0.46431 2.669,0.69627 4.1733,0.69627 2.1158,0 3.7513,-0.40613 4.9071,-1.21827 1.1558,-0.81214 1.7335,-1.95096 1.7335,-3.4164 v -0.0183 c 0,-1.06247 -0.2872,-1.87762 -0.8622,-2.44543 -0.5746,-0.56786 -1.3267,-0.99528 -2.2563,-1.28234 -0.9292,-0.28695 -1.9383,-0.52812 -3.0267,-0.72354 -1.0397,-0.18314 -2.0822,-0.39685 -3.1278,-0.64117 -1.0457,-0.24417 -2.0026,-0.60444 -2.8709,-1.08076 -0.8683,-0.47621 -1.5685,-1.15396 -2.1005,-2.0333 -0.532,-0.87933 -0.798,-2.05162 -0.798,-3.5171 v -0.0183 c 0,-2.4792 0.8255,-4.39955 2.4766,-5.7611 1.651,-1.36167 3.9807,-2.04258 6.9892,-2.04258 z",stroke:"#eb594d",strokeWidth:"2",fill:"#f9cecb"})]})};LogoTextNoPaddingIcon.displayName="LogoTextNoPaddingIcon";try{LogoTextNoPaddingIcon.displayName="LogoTextNoPaddingIcon",LogoTextNoPaddingIcon.__docgenInfo={description:"",displayName:"LogoTextNoPaddingIcon",props:{ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<SVGSVGElement>"}},component:{defaultValue:null,description:"",name:"component",required:!1,type:{name:"ElementType<any, keyof IntrinsicElements>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/icons/LogoTextNoPaddingIcon.tsx#LogoTextNoPaddingIcon"]={docgenInfo:LogoTextNoPaddingIcon.__docgenInfo,name:"LogoTextNoPaddingIcon",path:"../../packages/sheet-react/src/icons/LogoTextNoPaddingIcon.tsx#LogoTextNoPaddingIcon"})}catch(__react_docgen_typescript_loader_error){}const Watermark=(0,react.memo)((props=>{const{colorLicensee="blue",colorError="red",colorCredits="grey",credits="All rights reserved - Michael Ford",feature,style:propStyle,...rest}=props??{},[licenseDetails,setLicenseDetails]=(0,react.useState)(null);react.useEffect((()=>{LicenseManager.h.getLicenseDetails().then((details=>{setLicenseDetails(details)}))}),[]);const[errorLoadSVG,setErrorLoadSVG]=react.useState(!1),logoStyle={opacity:.65},errors=react.useMemo((()=>{if(!(licenseDetails?.exceptions().length>0))return null;const retValue=[];for(let i=0;i<licenseDetails.exceptions().length;i++){const exception=licenseDetails.exceptions()[i];retValue.push((0,jsx_runtime.jsx)("div",{style:{opacity:.8,fontSize:"16px",textAlign:"left",color:colorError},children:exception},i))}return retValue}),[licenseDetails,colorError]);if(null==licenseDetails)return null;if(licenseDetails.isValidFor(feature))return null;const t=licenseDetails.type(),c=!errors&&t.endsWith("ity"),licensee=licenseDetails.licensee(),s=c?1.6:1,w=135/s,h=37/s;let elemLicensee=null;return!t&&licensee?.length>0&&(elemLicensee=(0,jsx_runtime.jsx)("div",{style:{opacity:.7,fontWeight:"500",fontSize:"16px",textAlign:"left",color:colorLicensee},children:licensee})),(0,jsx_runtime.jsx)("div",{style:{pointerEvents:"none",display:"flex",flexDirection:"column",overflow:"hidden",...propStyle},...rest,children:(0,jsx_runtime.jsxs)("div",{style:{position:"relative",display:"flex",flexDirection:"column"},children:[errorLoadSVG?(0,jsx_runtime.jsx)(LogoTextNoPaddingIcon,{style:logoStyle}):(0,jsx_runtime.jsx)("svg",{width:w,height:h,style:logoStyle,children:(0,jsx_runtime.jsx)("image",{style:{width:w,height:h},href:"https://www.sheetxl.com/watermark.svg",onError:()=>setErrorLoadSVG(!0)})}),(0,jsx_runtime.jsxs)("div",{children:[elemLicensee,errors,(0,jsx_runtime.jsx)("div",{style:{height:"0px",fontSize:"16px",textAlign:"left",width:"0px",opacity:.8,color:colorCredits},children:credits})]})]})})}));try{Watermark.displayName="Watermark",Watermark.__docgenInfo={description:"",displayName:"Watermark",props:{colorLicensee:{defaultValue:null,description:"",name:"colorLicensee",required:!1,type:{name:"string"}},colorError:{defaultValue:null,description:"",name:"colorError",required:!1,type:{name:"string"}},colorCredits:{defaultValue:null,description:"",name:"colorCredits",required:!1,type:{name:"string"}},credits:{defaultValue:null,description:"",name:"credits",required:!1,type:{name:"string"}},feature:{defaultValue:null,description:"",name:"feature",required:!1,type:{name:"string"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/icons/WaterMark.tsx#Watermark"]={docgenInfo:Watermark.__docgenInfo,name:"Watermark",path:"../../packages/sheet-react/src/icons/WaterMark.tsx#Watermark"})}catch(__react_docgen_typescript_loader_error){}var SheetCellEditor=__webpack_require__("../../packages/sheet-react/src/components/cell/SheetCellEditor.tsx"),tiny_invariant=__webpack_require__("../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js"),GeomUtils=__webpack_require__("../../packages/models/src/utils/GeomUtils.ts");const CornerTriangle=(0,react.memo)((props=>{const{anchorLocation=Primitives.tb.TopLeft,cellWidth,cellHeight,size=7,inset=1,darkMode,fill,pathProps,style:propStyle,...rest}=props,s=size,o=inset;let f="red",pointsX=[],pointsY=[];return anchorLocation===Primitives.tb.TopLeft?(f=darkMode?"rgb(255, 198, 246)":"green",pointsX.push(o),pointsY.push(o),pointsX.push(o+s),pointsY.push(o),pointsX.push(o),pointsY.push(o+s)):anchorLocation===Primitives.tb.TopRight?(f=darkMode?"rgb(0, 255, 255)":"red",pointsX.push(cellWidth-o),pointsY.push(o),pointsX.push(cellWidth-(o+s)),pointsY.push(o),pointsX.push(cellWidth-o),pointsY.push(o+s)):anchorLocation===Primitives.tb.BottomRight?(f=darkMode?"rgb(236, 252, 211)":"purple",pointsX.push(cellWidth-o),pointsY.push(cellHeight-o),pointsX.push(cellWidth-(o+s)),pointsY.push(cellHeight-o),pointsX.push(cellWidth-o),pointsY.push(cellHeight-(o+s))):anchorLocation===Primitives.tb.BottomLeft&&(f=darkMode?"rgb(255, 236, 183)":"blue",pointsX.push(o),pointsY.push(cellHeight-o),pointsX.push(o+s),pointsY.push(cellHeight-o),pointsX.push(o),pointsY.push(cellHeight-(o+s))),(0,jsx_runtime.jsx)("svg",{width:`${cellWidth}`,height:`${cellHeight}`,viewBox:`0 0 ${cellWidth} ${cellHeight}`,style:{position:"absolute",width:`${cellWidth}px`,height:`${cellHeight}px`,pointerEvents:"none",...propStyle},...rest,children:(0,jsx_runtime.jsx)("path",{d:`M ${pointsX[0]} ${pointsY[0]} L ${pointsX[1]} ${pointsY[1]} L ${pointsX[2]} ${pointsY[2]} L ${pointsX[0]} ${pointsY[0]} Z`,fill:f,...pathProps})})}));try{CornerTriangle.displayName="CornerTriangle",CornerTriangle.__docgenInfo={description:"",displayName:"CornerTriangle",props:{size:{defaultValue:null,description:"The right sides of the triangle.\n@defaultValue 7",name:"size",required:!1,type:{name:"number"}},inset:{defaultValue:null,description:"inset within the cell\n@defaultValue 1",name:"inset",required:!1,type:{name:"number"}},fill:{defaultValue:null,description:"defaults based on corner",name:"fill",required:!1,type:{name:"string"}},pathProps:{defaultValue:null,description:"",name:"pathProps",required:!1,type:{name:"SVGProps<SVGPathElement>"}},darkMode:{defaultValue:null,description:"",name:"darkMode",required:!1,type:{name:"boolean"}},anchorLocation:{defaultValue:null,description:"@defaultValue AnchorLocation.TopLeft",name:"anchorLocation",required:!1,type:{name:"enum",value:[{value:'"tl"'},{value:'"t"'},{value:'"tr"'},{value:'"l"'},{value:'"c"'},{value:'"r"'},{value:'"bl"'},{value:'"b"'},{value:'"br"'}]}},cellWidth:{defaultValue:null,description:"",name:"cellWidth",required:!1,type:{name:"number"}},cellHeight:{defaultValue:null,description:"",name:"cellHeight",required:!1,type:{name:"number"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<SVGSVGElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/CornerTriangle.tsx#CornerTriangle"]={docgenInfo:CornerTriangle.__docgenInfo,name:"CornerTriangle",path:"../../packages/sheet-react/src/components/CornerTriangle.tsx#CornerTriangle"})}catch(__react_docgen_typescript_loader_error){}const SheetCellRenderer=props=>{const{value,bounds,children,style:propStyle,range,zoom=1,view,bodyStyle,showFormulas,showZeros,docTheme,overflowedCell,onLinkMouseDown,...rest}=props;(0,tiny_invariant.A)(bounds,"bounds must be specified"),(0,tiny_invariant.A)(value,"value must be specified");const cellRenderHeight=bounds.height/zoom,cellRenderWidth=bounds.width/zoom,textRenderWidth=overflowedCell?overflowedCell.colBounds.width+overflowedCell.leftOverflowOffset+overflowedCell.rightOverflowOffset:cellRenderWidth,textRenderLeft=overflowedCell?overflowedCell.anchorBounds.x-overflowedCell.leftOverflowOffset:0,backgroundRenderWidth=overflowedCell?overflowedCell.anchorBounds.width:cellRenderWidth,backgroundLeft=overflowedCell?overflowedCell.anchorBounds.x:0,cell=value,formattedValue=cell.formattedValue,cellStyle=value.style,isDarkMode=bodyStyle?.isDarkMode??!1;let displayValue=formattedValue.formattedRuns?.runs[0]?.text??formattedValue.displayText,textBox=null,background=cellStyle.fill.asCSS(isDarkMode,bounds),extendedWidth=0,extendedHeight=0;cell.style.border.isEmpty()||(cell.style.border.right.style!==ICellBorder.cz.None&&ICellBorder.tz.get(cell.style.border.right.style).width>1&&(extendedWidth=1),cell.style.border.bottom.style!==ICellBorder.cz.None&&ICellBorder.tz.get(cell.style.border.bottom.style).width>1&&(extendedHeight=1));let backgroundDiv=null;if(cellRenderWidth!==backgroundRenderWidth||extendedWidth||extendedHeight||"number"==typeof background?.backgroundPosition){const{backgroundPosition,...backgroundRest}=background,backgroundPositionOffset=backgroundPosition??0,left=backgroundPositionOffset?-(bounds.x+(view?.scrollTopLeft.left??0))%backgroundPositionOffset:0,top=backgroundPositionOffset?-(bounds.y+(view?.scrollTopLeft.top??0))%backgroundPositionOffset:0;(void 0!==backgroundPosition||extendedWidth||extendedHeight||cellRenderWidth!==backgroundRenderWidth)&&(1===Object.keys(backgroundRest).length&&"none"===backgroundRest.background||(background=null,backgroundDiv=(0,jsx_runtime.jsx)("div",{style:{position:"absolute",marginLeft:`${left}px`,marginTop:`${top}px`,left:backgroundLeft*zoom,width:ReactUtils.zJ(backgroundRenderWidth*zoom-left+1+extendedWidth),height:ReactUtils.zJ(bounds.height-top+1+extendedHeight),...backgroundRest}},"background")))}let indicators=null;if(cell.warnings.length>0){const indicatorProps={size:7*zoom,darkMode:isDarkMode,cellWidth:backgroundRenderWidth*zoom+1,cellHeight:cellRenderHeight*zoom+1,style:{top:-1,left:-1}};indicators=indicators??[],indicators.push((0,jsx_runtime.jsx)(CornerTriangle,{anchorLocation:Primitives.tb.TopLeft,...indicatorProps},`indicator-${indicators.length}`))}let renderFontFill=formattedValue.conditionalColor?formattedValue.conditionalColor:cellStyle.font.fill,renderHorizontalAlignment=cell.renderHorizontalAlignment;const alignment=cellStyle.alignment,isFillSpan=alignment.horizontal===types.OD.Fill,rotation=alignment.horizontal===types.OD.CenterContinuous||isFillSpan?0:alignment.rotation,insets=cell.insets(),verticalPadding=insets.top+insets.bottom;let insetLeft=insets.left,insetRight=insets.right;const expandedPropStyle={...propStyle,left:propStyle.left-1,top:propStyle.top-1,width:propStyle.width+1+extendedWidth,height:propStyle.height+1+extendedHeight},isSimpleRender=!(backgroundDiv||children||indicators||formattedValue?.formattedRuns?.runs.length>1||overflowedCell||rotation%360!=0),containerPropsStyle={overflow:"hidden",...background,...expandedPropStyle,pointerEvents:onLinkMouseDown?"auto":void 0};if(!CommonUtils.kZ(displayValue)||!CommonUtils.kZ(formattedValue.repeatPlaceholder)){const canWrap=formattedValue.canWrap;let textBounds=null,absoluteTextBounds=null,maxTextBounds=null,textRuns=[],displayText=!0;if(showZeros||0!==cell.value||cell.type!==CellTypes.vZ.Number||(displayText=!1),displayText&&cell.textFrame){let availableWidth=textRenderWidth-2-(insetLeft+insetRight)+.01;if(rotation){const textFrameUnwrapped=cell.textFrame.layout();textBounds=textFrameUnwrapped.bounds;const originalBounds={x:0,y:0,width:textRenderWidth-2,height:cellRenderHeight};if(formattedValue.formattedRuns){let formattedWidth=formattedValue.formattedRuns.width;if(formattedValue.repeatPlaceholder||formattedValue.repeatChars.length>0){const currentPoints=GeomUtils.sA(originalBounds),rotatedPoints=GeomUtils.Hb(currentPoints,-rotation);formattedWidth=GeomUtils.VC(rotatedPoints).width}textBounds={...textBounds,width:formattedWidth}}maxTextBounds=GeomUtils.$0({...textBounds,width:textBounds.width+2+insetLeft+insetRight},originalBounds,rotation),availableWidth=maxTextBounds.width-2-(insetLeft+insetRight)+.01}let frameSize=null;canWrap&&(frameSize={width:availableWidth});let displayOverride=null;const formulaDisplay=showFormulas?cell.formula:null;let repeatPlaceholder=formattedValue.repeatPlaceholder;const textFrame=cell.textFrame.layout(frameSize);textBounds=textFrame.bounds,formattedValue.formattedRuns&&(textBounds={...textBounds,width:formattedValue.repeatPlaceholder||formattedValue.repeatChars.length>0?availableWidth:formattedValue.formattedRuns.width});let rotatedLineOffsets=[];if(rotation&&canWrap){let calcedBounds=null;textFrame.visitLines({visitTextLine:(line,_index)=>{let lineBounds=line.bounds;const currentPoints=GeomUtils.sA(lineBounds),rotatedPoints=GeomUtils.Hb(currentPoints,rotation),rotatedBounds=GeomUtils.VC(rotatedPoints);lineBounds={...lineBounds,x:(rotatedBounds.width-lineBounds.width)/2,y:(rotatedBounds.height-lineBounds.height)/2},calcedBounds=calcedBounds?GeomUtils.zH(calcedBounds,lineBounds):lineBounds,rotatedLineOffsets.push({bounds:lineBounds})}}),textBounds={...calcedBounds,width:calcedBounds.width+insetLeft+insetRight}}if(!repeatPlaceholder&&!formulaDisplay&&cell.type!==CellTypes.vZ.String&&textBounds.width>availableWidth){if("General"===cell.style.numberFormat&&cell.type===CellTypes.vZ.Number){const fmDigit=cellStyle.measureText("0");let digitsFit=Math.floor(availableWidth/fmDigit.width),valueAsNumber=cell.value,splitNumber=CommonUtils.QI(valueAsNumber),floatingDigits=Math.min(10,digitsFit-(Math.max(1,splitNumber.ipLength)+1)-(valueAsNumber<0?1:0));if(floatingDigits>=-1){const format=`0${floatingDigits>0?".":""}${"#".repeat(Math.max(0,floatingDigits))}`;displayOverride=cell.parseNumberFormat(format).displayText,"0"===displayOverride&&valueAsNumber<0&&(displayOverride="-0")}else if(Math.abs(valueAsNumber)>=Math.pow(10,5)||Math.abs(valueAsNumber)<=Math.pow(10,-5)){let sigDigits=digitsFit-5-(valueAsNumber<0?1:0);if(sigDigits>=0){const format=`0.${"0".repeat(Math.max(0,sigDigits-1))}E+00`;displayOverride=cell.parseNumberFormat(format).displayText}}}null===displayOverride&&(repeatPlaceholder="#")}if(!repeatPlaceholder&&formattedValue?.formattedRuns?.lastRepeatIndex>=0&&formattedValue?.formattedRuns?.width>availableWidth&&(repeatPlaceholder="#"),repeatPlaceholder&&availableWidth>0){const fmX=cellStyle.measureText(repeatPlaceholder),repeatAmount=Math.floor((availableWidth||1)/(fmX?.width||1));displayOverride=repeatAmount>0?repeatPlaceholder.repeat(repeatAmount):""}let isSubscript=cellStyle.font.verticalAlign===types.v1.Sub,isSuperscript=cellStyle.font.verticalAlign===types.v1.Super;if(formulaDisplay&&(displayOverride="="+formulaDisplay,renderHorizontalAlignment=types.OD.Left),displayOverride){const newWidth=cellStyle.measureText(displayOverride).width;newWidth&&(textBounds={...textBounds,width:newWidth})}if(absoluteTextBounds={...textBounds,width:textBounds.width+insetLeft+insetRight,height:textBounds.height},rotation&&!canWrap){const currentPoints=GeomUtils.sA(absoluteTextBounds),rotatedPoints=GeomUtils.Hb(currentPoints,rotation),rotatedBounds=GeomUtils.VC(rotatedPoints);absoluteTextBounds.width=rotatedBounds.width,absoluteTextBounds.height=rotatedBounds.height}renderHorizontalAlignment===types.OD.Center||renderHorizontalAlignment===types.OD.CenterContinuous?absoluteTextBounds.x=(textRenderWidth-absoluteTextBounds.width)/2:renderHorizontalAlignment===types.OD.Right?absoluteTextBounds.x=textRenderWidth-absoluteTextBounds.width-1:absoluteTextBounds.x=1,alignment.vertical===types.sx.Center?absoluteTextBounds.y=(cellRenderHeight-absoluteTextBounds.height)/2:alignment.vertical===types.sx.Bottom?absoluteTextBounds.y=cellRenderHeight-absoluteTextBounds.height-verticalPadding:absoluteTextBounds.y=verticalPadding;const simplePropRest=isSimpleRender?{...rest}:void 0,simpleBackground=isSimpleRender?{...background}:void 0,textRunProps={className:"text-box",style:{position:"absolute",left:propStyle.left-1,top:propStyle.top-1,width:propStyle.width+1,height:propStyle.height+1,transform:rotation?`rotate(${rotation}deg)`:void 0,cursor:onLinkMouseDown?"pointer":void 0,pointerEvents:onLinkMouseDown?"auto":void 0,...simpleBackground},onMouseDown:onLinkMouseDown,onDoubleClick:onLinkMouseDown?e=>{e.stopPropagation(),e.preventDefault()}:null,...simplePropRest},fontSize=cellStyle.font.size,addTextLine=(displayText,lineBounds,baseline,hAlign,isLastLine,runs,textRunProps=null)=>{let fontSizeRender=fontSize,lineBoundsRender=lineBounds,xOffset=insetLeft,yOffset=0;if(isSubscript||isSuperscript){const scaleSuperSub=FontUtils.wr(cellStyle.font.family);fontSizeRender*=scaleSuperSub;let newTextBounds=cellStyle.measureText(displayText,cellStyle.font.size*scaleSuperSub);runs&&(newTextBounds={...newTextBounds,width:runs.width}),hAlign===types.OD.Right?xOffset=textBounds.width-newTextBounds.width:hAlign!==types.OD.Center&&hAlign!==types.OD.CenterContinuous||(xOffset=(textBounds.width-newTextBounds.width)/2),yOffset=FontUtils.WB(cellStyle.font.family,cellStyle.font.size,cellStyle.font.verticalAlign)}let displayRuns=runs?.runs?runs.runs:[{type:NumberFormatParser.XC.Text,text:displayText,width:cellStyle.measureText(displayText,fontSizeRender).width}];if(runs&&runs?.width!==textBounds.width&&(textBounds={...textBounds,width:runs?.width}),runs?.lastRepeatIndex>=0&&availableWidth>runs?.width){const repeat=runs.runs[runs.lastRepeatIndex];if(repeat){const updateDisplayRuns=[...displayRuns];let repeatWidth=Math.max(0,availableWidth-2-runs.width),width=0,text="";if(repeatWidth>0){const repeatAmount=Math.floor(repeatWidth/repeat.width);text=repeatAmount>0?repeat.text.repeat(repeatAmount):"",width=repeatWidth}updateDisplayRuns[runs.lastRepeatIndex]={type:NumberFormatParser.XC.Repeat,text,width},displayRuns=updateDisplayRuns,textBounds={...textBounds,width:runs.width+width}}}const addTextRun=(displayRun,runOffset,index,totalWidth,isSimpleRun,textBounds,textRunProps=null)=>{let textAligned,lineWidth=lineBoundsRender.width;hAlign===types.OD.Justify?(lineWidth=totalWidth,isLastLine||(textAligned="justify")):hAlign===types.OD.Distributed&&(lineWidth=totalWidth,textAligned=isLastLine||displayRun.text.split(" ").length-1==0?"center":"justify");const{style:textRunPropsStyle,className:textRunPropsClassName,...textRunPropsRest}=textRunProps;let displayText=displayRun.text;if(hAlign===types.OD.Fill&&0===formattedValue.repeatChars.length){const repeatCount=Math.max(1,Math.floor(lineBoundsRender?.width/textBounds?.width??1));displayText=displayText.repeat(repeatCount)}const runStyle={fontFamily:cellStyle.font.family,fontSize:fontSizeRender*FontUtils.On()*zoom,letterSpacing:cellStyle.font.letterSpacing,fontWeight:`${cellStyle.font.weight}`,fontStyle:`${cellStyle.font.style}`,textDecoration:CSSUtils.On(cellStyle.font.underline,cellStyle.font.strike),textDecorationStyle:CSSUtils.Vb(cellStyle.font.underline),textAlign:textAligned,textAlignLast:textAligned,color:renderFontFill?.asCSS(isDarkMode)??"red",position:"absolute",textRendering:"optimizeSpeed",verticalAlign:"baseline",whiteSpace:"pre",background:void 0,...textRunPropsStyle,lineHeight:lineBoundsRender.height*zoom+"px"};let runLeft=xOffset+runOffset,runTop=insets.top+lineBoundsRender.y+yOffset;if(isSimpleRun){const adjustLeft=(textBounds.x+runLeft)*zoom+1,adjustTop=(textBounds.y+runTop)*zoom+1;adjustTop<0?runStyle.marginTop=adjustTop:runStyle.paddingTop=adjustTop,adjustLeft<0?(runStyle.width=(textRunPropsStyle?.width??0)-adjustLeft,runStyle.left=(textRunPropsStyle?.left??0)+adjustLeft):runStyle.paddingLeft=adjustLeft,runStyle.paddingRight=(textRunPropsStyle?.width??0)-lineWidth*zoom-adjustLeft,runStyle.paddingBottom=(textRunPropsStyle?.height??0)-lineBoundsRender.height*zoom-adjustTop,runStyle.height=(textRunPropsStyle?.height??0)+(adjustTop<0?-adjustTop:0),runStyle.clipPath=`inset(${adjustTop<0?-adjustTop:0}px 0px 0px ${adjustLeft<0?1-adjustLeft:0}px)`}else if(runStyle.left=(textBounds.x+runLeft)*zoom+1,runStyle.top=(textBounds.y+runTop)*zoom+1,runStyle.width=textBounds.width*zoom,runStyle.height=textBounds.height*zoom,rotation&&!canWrap){runStyle.left=(textBounds.x+runOffset)*zoom+1,runStyle.top=(textBounds.y+(lineBoundsRender.y+yOffset))*zoom+1;const originalRunCenter=GeomUtils.gu({x:xOffset+runOffset,y:0,width:displayRun.width,height:lineBoundsRender.height}),originalLineCenter=GeomUtils.gu({x:xOffset,y:0,width:totalWidth,height:lineBoundsRender.height}),newRunCenter=GeomUtils.Hb([originalRunCenter],rotation,originalLineCenter),adjustRunPoint={x:newRunCenter[0].x-originalRunCenter.x,y:newRunCenter[0].y-originalRunCenter.y};runStyle.left=runStyle.left+adjustRunPoint.x*zoom,runStyle.top=runStyle.top+adjustRunPoint.y*zoom;const paddedLineBounds={...lineBoundsRender,x:xOffset,y:insets.top,width:lineBoundsRender.width+(insetLeft+insetRight)},currentPoints=GeomUtils.sA(paddedLineBounds),rotatedPoints=GeomUtils.Hb(currentPoints,rotation),rotatedBounds=GeomUtils.VC(rotatedPoints);paddedLineBounds.width=rotatedBounds.width,paddedLineBounds.height=rotatedBounds.height;const newLineCenter=GeomUtils.gu(paddedLineBounds),adjustLinePoint={x:newLineCenter.x-originalLineCenter.x,y:newLineCenter.y-originalLineCenter.y};runStyle.left=runStyle.left+adjustLinePoint.x*zoom,runStyle.top=runStyle.top+adjustLinePoint.y*zoom}textRuns.push((0,jsx_runtime.jsx)("div",{className:textRunPropsClassName?`${textRunPropsClassName} text-line`:"text-line",style:runStyle,...textRunPropsRest,children:displayText},`text-${lineBoundsRender.y}-${index}`))};if(alignment.overflow===types.ui.Shrink&&availableWidth>0){let widthShrink=textBounds?.width??0,failSafe=0;for(;widthShrink>1&&widthShrink>availableWidth&&fontSizeRender>2&&failSafe<100;){fontSizeRender*=availableWidth/widthShrink;widthShrink=cellStyle.measureText(displayText,fontSizeRender).width,failSafe++}textBounds={...textBounds,width:widthShrink}}let runningOffset=lineBoundsRender.x;hAlign===types.OD.Right?runningOffset+=textBounds.width-lineBoundsRender.width:hAlign!==types.OD.Center&&hAlign!==types.OD.CenterContinuous||(runningOffset+=(textBounds.width-lineBoundsRender.width)/2),runs?.lastRepeatIndex>=0&&(runningOffset=lineBoundsRender.x);for(let r=0;r<displayRuns.length;r++){const displayRun=displayRuns[r];if(displayRun.type===NumberFormatParser.XC.Text||displayRun.type===NumberFormatParser.XC.Repeat){displayRun.type,NumberFormatParser.XC.Repeat;addTextRun(displayRun,runningOffset,r,hAlign===types.OD.Justify||hAlign===types.OD.Distributed||runs?.lastRepeatIndex>=0?availableWidth:lineBoundsRender.width,isSimpleRender,{x:absoluteTextBounds.x+textRenderLeft,y:absoluteTextBounds.y,width:displayRun.width,height:textBounds.height},textRunProps)}runningOffset+=displayRun.width}};null!==displayOverride?addTextLine(displayOverride,{x:0,y:0,...textBounds},textFrame.lines[0].baseline,renderHorizontalAlignment,!0,null,textRunProps):textFrame.visitLines({visitTextLine:(line,index,count)=>{const displayText=line.runs[0].text.replace(/\s+$/,""),isLastLine=index===count-1;let renderLineAlignment=renderHorizontalAlignment===types.OD.Justify&&(isLastLine||line.runs[0].text.endsWith("\n"))?types.OD.Left:renderHorizontalAlignment,lineGap=0;index>0&&(alignment.vertical===types.sx.Distributed||alignment.vertical===types.sx.Justify)&&(lineGap=(cellRenderHeight-verticalPadding-line.bounds.height*count)/(count-1)*index),alignment.vertical===types.sx.Distributed&&rotation&&rotation%90==0&&rotation%180!=0&&(renderLineAlignment=types.OD.Distributed),renderLineAlignment!==types.OD.Justify&&renderLineAlignment!==types.OD.Distributed&&renderLineAlignment!==types.OD.Fill||(textBounds={...textBounds,width:availableWidth});let lineBounds={...line.bounds,y:line.bounds.y+lineGap+0,width:isFillSpan||formattedValue.repeatChars.length>0||formattedValue.spacingChars.length>0?textBounds.width:line.bounds.width};addTextLine(displayText,lineBounds,textFrame.lines[0].baseline,renderLineAlignment,isLastLine,formattedValue.formattedRuns,isSimpleRender&&index>0?{...textRunProps,style:{...textRunProps.style,background:void 0}}:textRunProps)}})}textRuns.length>0&&(textBox=textRuns)}if(isSimpleRender)return textBox&&textBox.length>0?textBox:(0,jsx_runtime.jsx)("div",{style:containerPropsStyle,...rest});const elements=[backgroundDiv,textBox,children,indicators];return(0,jsx_runtime.jsx)("div",{style:{overflow:"hidden",...background,...expandedPropStyle,pointerEvents:onLinkMouseDown?"auto":expandedPropStyle.pointerEvents},...rest,children:elements})};SheetCellRenderer.displayName="SheetCellRenderer";try{SheetCellRenderer.displayName="SheetCellRenderer",SheetCellRenderer.__docgenInfo={description:"CellRender that has advanced rendering for an ICellModel.\nSome of the features are:\n\n1. Fill (Solid, Gradient, Pattern)\n2. Horizontal Alignment (Left, Right, Center, Justify)\n3. Vertical Alignment (Top, Middle, Bottom)\n4. Spacing formatting (*, ?)\n5. Decimal rounding\n6. Overflow Character\n7. Text Wrapping\n8. Text Rotation\n8. Indentions\n9. Text Color\n10. Underline (Accounting, Standard, Double, Single)\n11. Scaling\n12. Super/Subscript\n13. Indicators (Warning, Comments, Error, etc)",displayName:"SheetCellRenderer",props:{showFormulas:{defaultValue:null,description:"If true, prefer to show the formulas over values",name:"showFormulas",required:!1,type:{name:"boolean"}},showZeros:{defaultValue:null,description:"If true, show zero values",name:"showZeros",required:!1,type:{name:"boolean"}},docTheme:{defaultValue:null,description:"Ability to query the theme colors.\nNote - There are also css variables that can be used to style using doc theme colors\n@see https://www.sheetxl.com/docs",name:"docTheme",required:!1,type:{name:"IDocTheme"}},bodyStyle:{defaultValue:null,description:"Generalize application theming. The docTheme is a specific theme for the sheet.",name:"bodyStyle",required:!1,type:{name:"GridSurfaceStyle"}},overflowedCell:{defaultValue:null,description:"Rendering defaults about cells that have overflow characteristics.",name:"overflowedCell",required:!1,type:{name:"OverflowedCell"}},onLinkMouseDown:{defaultValue:null,description:"",name:"onLinkMouseDown",required:!1,type:{name:"(e: MouseEvent<HTMLDivElement, MouseEvent>) => void"}},value:{defaultValue:null,description:"A value to render",name:"value",required:!0,type:{name:"ICellModel"}},bounds:{defaultValue:null,description:"The range bounds relative to the current viewport and zoom",name:"bounds",required:!0,type:{name:"Bounds"}},range:{defaultValue:null,description:"The CellRangeCoords that is being rendering",name:"range",required:!1,type:{name:"CellRangeCoords"}},view:{defaultValue:null,description:"The view that is rendering a collection of cells",name:"view",required:!1,type:{name:"GridOverlayView"}},zoom:{defaultValue:null,description:"If there is a zoom scale.\n@defaultValue 1",name:"zoom",required:!1,type:{name:"number"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/cell/SheetCellRenderer.tsx#SheetCellRenderer"]={docgenInfo:SheetCellRenderer.__docgenInfo,name:"SheetCellRenderer",path:"../../packages/sheet-react/src/components/cell/SheetCellRenderer.tsx#SheetCellRenderer"})}catch(__react_docgen_typescript_loader_error){}var SheetScrollbar=__webpack_require__("../../packages/sheet-react/src/components/sheet/SheetScrollbar.tsx"),RunUtils=__webpack_require__("../../packages/models/src/run/RunUtils.ts"),react_dom=__webpack_require__("../../node_modules/react-dom/index.js");const DefaultHeaderDivider=(0,react.memo)((0,react.forwardRef)(((props,refForward)=>{const{direction,view,index,className:propClassName,style:propStyle,disabled=!1,disabledResize=!1,isNextHidden,isHidden,isSelected,isSelectedAll,showTouchDivider,headerStyle,headerStyleSelect,headerStyleSelectAll,headerStyleHover,bounds,onPointerDown,onAutoFit,...rest}=props,isColumn=direction===HeaderDirection.COLS;let renderDivStyle=headerStyle;isSelected&&headerStyleSelect&&(renderDivStyle=headerStyleSelect),isSelectedAll&&headerStyleSelectAll&&(renderDivStyle=headerStyleSelectAll);const isTouch="touch"===ReactUtils.th().primaryInput;let dividerSize=isColumn?14:8,dividerOffset=dividerSize/2,shift=0;isNextHidden&&(shift=-2),isHidden&&(shift=2),isHidden&&(dividerSize=dividerSize/2+shift,dividerOffset=2*shift);let background=renderDivStyle.strokeFill;return!(isSelected||isSelectedAll)&&0===shift&&(background=`linear-gradient(${isColumn?180:90}deg, ${renderDivStyle.fill}, ${renderDivStyle.strokeFill} 55%, ${renderDivStyle.strokeFill} 100%)`),(0,jsx_runtime.jsxs)("div",{className:(0,clsx.A)("header-divider",{disabled},propClassName,`index-${index}`),ref:refForward,onPointerDown:isTouch?void 0:onPointerDown,onDoubleClick:isTouch?void 0:()=>onAutoFit?.(),style:{top:(isColumn?0:-dividerSize/2+(shift-1))+"px",left:(isColumn?-dividerSize/2+(shift-1):0)+"px",width:isColumn?dividerSize:"calc(100% + 1px)",height:isColumn?"calc(100% + 1px)":dividerSize,position:"absolute",overflow:"visible",pointerEvents:"all",cursor:disabled||disabledResize||isTouch?void 0:isColumn?"col-resize":"row-resize",...propStyle},...rest,children:[(0,jsx_runtime.jsx)("div",{style:{position:"relative",top:`${isColumn?0:dividerOffset}px`,left:`${isColumn?dividerOffset:0}px`,width:isColumn?1:"100%",height:isColumn?"100%":1,background},onDoubleClick:()=>onAutoFit?.()}),showTouchDivider&&isTouch?(0,jsx_runtime.jsx)("div",{style:{position:"absolute",cursor:"grab",zIndex:1,borderRadius:"4px",right:isColumn?"-6px":"2px",bottom:isColumn?"2px":"-9px",height:"24px",width:isColumn?"24px":"18px",maxHeight:isColumn?"calc(100% - 4px)":void 0,maxWidth:isColumn?void 0:"calc(100% - 4px)",background:renderDivStyle.fill,border:`${headerStyleSelectAll.edgeStrokeFill} solid 1px`,boxShadow:`0.5px 0.5px 0px 0px ${headerStyle.text.fill}`,display:"flex",alignItems:"center",justifyContent:"center"},onPointerDown,children:(0,jsx_runtime.jsx)("div",{style:{width:"6.4px",height:"12px",backgroundImage:`url("data:image/svg+xml,%3Csvg width='6.4' height='12' viewBox='0 0 9.6 16' version='1.1' fill='${encodeURIComponent(headerStyleSelect.text.fill)}' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'%3E%3Cpath d='M 9.60008,14.40009 C 9.60008,15.28374 8.88368,16 8.00003,16 7.11639,16 6.40012,15.28374 6.40012,14.40009 c 0,-0.88365 0.71627,-1.60005 1.59991,-1.60005 0.88365,0 1.60005,0.7164 1.60005,1.60005 m 0,-6.40012 c 0,0.88364 -0.7164,1.60004 -1.60005,1.60004 -0.88364,0 -1.59991,-0.7164 -1.59991,-1.60004 0,-0.88365 0.71627,-1.60005 1.59991,-1.60005 0.88365,0 1.60005,0.7164 1.60005,1.60005 m 0,-6.40006 c 0,0.88365 -0.7164,1.60005 -1.60005,1.60005 -0.88364,0 -1.59991,-0.7164 -1.59991,-1.60005 C 6.40012,0.71626 7.11639,0 8.00003,0 8.88368,0 9.60008,0.71626 9.60008,1.59991 M 3.19996,14.40009 C 3.19996,15.28374 2.48369,16 1.60005,16 0.7164,16 0,15.28374 0,14.40009 c 0,-0.88365 0.7164,-1.60005 1.60005,-1.60005 0.88364,0 1.59991,0.7164 1.59991,1.60005 m 0,-6.40012 c 0,0.88364 -0.71627,1.60004 -1.59991,1.60004 C 0.7164,9.60001 0,8.88361 0,7.99997 0,7.11632 0.7164,6.39992 1.60005,6.39992 c 0.88364,0 1.59991,0.7164 1.59991,1.60005 m 0,-6.40006 c 0,0.88365 -0.71627,1.60005 -1.59991,1.60005 C 0.7164,3.19996 0,2.48356 0,1.59991 0,0.71626 0.7164,0 1.60005,0 2.48369,0 3.19996,0.71626 3.19996,1.59991' /%3E%3C/svg%3E%0A")`,backgroundRepeat:"no-repeat",backgroundPosition:"center",transform:isColumn?void 0:"rotate(90deg)"}})}):null]})}))),DEFAULT_HEADER_DIVIDER_RENDERER=(props,refForward)=>(0,jsx_runtime.jsx)(DefaultHeaderDivider,{...props,ref:refForward});DEFAULT_HEADER_DIVIDER_RENDERER.displayName="DEFAULT_HEADER_DIVIDER_RENDERER";const HeaderDivider=(0,react.memo)((0,react.forwardRef)(((props,refForward)=>{const{direction,view,index,disabled=!1,disabledResize=!1,resizeThreshold=1,dividerRenderer=DEFAULT_HEADER_DIVIDER_RENDERER,onDividerMouseDown:propOnDividerMouseDown,onDividerResizeStart:propOnDividerResizeStart,onDividerResize:propOnDividerResize,onDividerResizeEnd:propOnDividerResizeEnd,onDividerMouseUp:propOnDividerMouseUp,onDividerAutoFit:propOnDividerAutoFit,onPointerDown:propOnPointerDown,...rest}=props,onPointerDown=(0,useCallbackRef.c)(propOnPointerDown,[propOnPointerDown]),onDividerAutoFit=(0,useCallbackRef.c)(propOnDividerAutoFit,[propOnDividerAutoFit]),isColumn=direction===HeaderDirection.COLS;let visibleIndices=isColumn?view.getVisibleColumns():view.getVisibleRows(),bounds=null;visibleIndices.length>0&&(isColumn?bounds=view.getCellRangeBounds({rowStart:0,rowEnd:0,colStart:visibleIndices[0],colEnd:visibleIndices[visibleIndices.length-1]}):view.getCellRangeBounds({rowStart:visibleIndices[0],rowEnd:visibleIndices[visibleIndices.length-1],colStart:0,colEnd:0}),bounds=view.clipBounds(bounds,useSelection.Po));const pointerCaptureRef=(0,react.useRef)(null),[pointerCaptureState,setPointerCaptureState]=(0,react.useState)(null),calcDiff=(event,originalEvent)=>isColumn?event.clientX-originalEvent.clientX:event.clientY-originalEvent.clientY,cellLayout=view.cellLayout,end=isColumn?cellLayout.getColOffset(index+1):cellLayout.getRowOffset(index+1),onSynchronizedPointerDown=(0,useSynchronizedPointerHandler.H)({processTouch:!0,onPointerDown:event=>{if(onPointerDown?.(event),!disabled&&!disabledResize){const start=isColumn?cellLayout.getColOffset(index):cellLayout.getRowOffset(index),startSize=end-start;pointerCaptureRef.current={isResizing:!1,startSize,index,view,direction,onDividerMouseDown:propOnDividerMouseDown,onDividerResizeStart:propOnDividerResizeStart,onDividerResize:propOnDividerResize,onDividerResizeEnd:propOnDividerResizeEnd,onDividerMouseUp:propOnDividerMouseUp},setPointerCaptureState(pointerCaptureRef.current),propOnDividerMouseDown?.(index,startSize)}event.stopPropagation(),event.preventDefault()},onPointerUp:(event,modifiers,originalEvent)=>{if(!pointerCaptureRef.current)return;pointerCaptureRef.current.isResizing&&pointerCaptureRef.current.onDividerResizeEnd?.(pointerCaptureRef.current.index,Math.max(0,pointerCaptureRef.current.startSize+calcDiff(event,originalEvent)),pointerCaptureRef.current.startSize);const currentCapture=pointerCaptureRef.current;pointerCaptureRef.current=null,setPointerCaptureState(pointerCaptureRef.current),currentCapture.onDividerMouseUp?.(currentCapture.index)},onPointerMoveOrWait:(event,modifiers,originalEvent)=>{if(!pointerCaptureRef.current)return;const diff=calcDiff(event,originalEvent);pointerCaptureRef.current.isResizing?pointerCaptureRef.current.onDividerResize?.(pointerCaptureRef.current.index,Math.max(0,pointerCaptureRef.current.startSize+diff),pointerCaptureRef.current.startSize):Math.abs(diff)>Math.max(1,resizeThreshold)&&(pointerCaptureRef.current={...pointerCaptureRef.current,isResizing:!0},setPointerCaptureState(pointerCaptureRef.current),pointerCaptureRef.current.onDividerResizeStart?.(pointerCaptureRef.current.index,Math.max(0,pointerCaptureRef.current.startSize+diff))),event.stopPropagation(),event.preventDefault()}}),onAutoFit=(0,useCallbackRef.c)((()=>{onDividerAutoFit?.(index)}),[index]);if(!bounds)return;const divider=dividerRenderer({bounds,direction,view,index,disabled,disabledResize,onAutoFit,onPointerDown:onSynchronizedPointerDown,...rest},refForward);if(!divider)return;let backdrop=null;return pointerCaptureState&&pointerCaptureState.isResizing&&pointerCaptureState.index===index&&(backdrop=(0,react_dom.createPortal)((0,jsx_runtime.jsx)("div",{style:{position:"absolute",cursor:isColumn?"col-resize":"row-resize",left:0,top:0,width:"100%",height:"100%"}}),document.body,"divider:"+index)),(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[backdrop,(0,jsx_runtime.jsx)("div",{className:(0,clsx.A)("header-divider-anchor"),style:{position:"absolute",pointerEvents:"auto",top:`${isColumn?bounds.y:end}px`,left:`${isColumn?end:bounds.x}px`,width:`${isColumn?0:bounds.width}px`,height:`${isColumn?bounds.height:0}px`,display:"flex"},tabIndex:-1,children:divider})]})})));try{DefaultHeaderDivider.displayName="DefaultHeaderDivider",DefaultHeaderDivider.__docgenInfo={description:"",displayName:"DefaultHeaderDivider",props:{bounds:{defaultValue:null,description:"",name:"bounds",required:!0,type:{name:"Bounds"}},onPointerDown:{defaultValue:null,description:"Handle mouse down and all dragging",name:"onPointerDown",required:!0,type:{name:"PointerEventHandler<HTMLDivElement>"}},onAutoFit:{defaultValue:null,description:"",name:"onAutoFit",required:!0,type:{name:"() => void"}},direction:{defaultValue:null,description:"",name:"direction",required:!0,type:{name:"enum",value:[{value:'"col"'},{value:'"row"'}]}},view:{defaultValue:null,description:"",name:"view",required:!0,type:{name:"GridOverlayView"}},index:{defaultValue:null,description:"",name:"index",required:!0,type:{name:"number"}},disabled:{defaultValue:null,description:"This should disable interaction. This should also\nprovide a visual cue that the divider is disabled.",name:"disabled",required:!1,type:{name:"boolean"}},disabledResize:{defaultValue:null,description:"If the divider does not allow resize.\n@remarks We create a faux divider on the left of the first header and we mark it as disabledResize.",name:"disabledResize",required:!1,type:{name:"boolean"}},isNextHidden:{defaultValue:null,description:"If the next header is hidden.\nThis allows the divider to shift location",name:"isNextHidden",required:!1,type:{name:"boolean"}},isHidden:{defaultValue:null,description:"If the current header is hidden.\nThis allows the divider to shift location",name:"isHidden",required:!1,type:{name:"boolean"}},isSelected:{defaultValue:null,description:"If the header associated with this divider is selected.",name:"isSelected",required:!1,type:{name:"boolean"}},isSelectedAll:{defaultValue:null,description:"If the header associated with this divider is selected.",name:"isSelectedAll",required:!1,type:{name:"boolean"}},showTouchDivider:{defaultValue:null,description:"If the divider is the last one in view. Useful for touch divider that only show the last one.",name:"showTouchDivider",required:!1,type:{name:"boolean"}},headerStyle:{defaultValue:null,description:"",name:"headerStyle",required:!0,type:{name:"GridHeaderStyle"}},headerStyleSelect:{defaultValue:null,description:"",name:"headerStyleSelect",required:!0,type:{name:"GridHeaderStyle"}},headerStyleSelectAll:{defaultValue:null,description:"",name:"headerStyleSelectAll",required:!0,type:{name:"GridHeaderStyle"}},headerStyleHover:{defaultValue:null,description:"",name:"headerStyleHover",required:!1,type:{name:"GridHeaderStyle"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<HeaderDividerElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/grid/src/HeaderDivider.tsx#DefaultHeaderDivider"]={docgenInfo:DefaultHeaderDivider.__docgenInfo,name:"DefaultHeaderDivider",path:"../../packages/grid/src/HeaderDivider.tsx#DefaultHeaderDivider"})}catch(__react_docgen_typescript_loader_error){}try{HeaderDivider.displayName="HeaderDivider",HeaderDivider.__docgenInfo={description:"A divider placed between headers to provider a visual cue for various actions.\nResize, hide/unhide, etc.",displayName:"HeaderDivider",props:{dividerRenderer:{defaultValue:null,description:"",name:"dividerRenderer",required:!1,type:{name:"(props: HeaderDividerRendererProps, refForward?: Ref<HeaderDividerElement>) => ReactNode"}},resizeThreshold:{defaultValue:null,description:"The number of pixels to mouse before resizing starts.\nIf this number is less than 1 then it will be 1.",name:"resizeThreshold",required:!1,type:{name:"number"}},onDividerMouseDown:{defaultValue:null,description:"Called when the mouse is pressed down.\n@param index\n@param size\n@returns",name:"onDividerMouseDown",required:!1,type:{name:"(index: number, size: number) => void"}},onDividerResizeStart:{defaultValue:null,description:"Called after the mouse has dragged beyond the threshold\n@param index\n@param prevSize\n@returns",name:"onDividerResizeStart",required:!1,type:{name:"(index: number, prevSize: number) => void"}},onDividerResize:{defaultValue:null,description:"Call during resize\n@param prevSize the size of the header on resizeStart (not last resize call)",name:"onDividerResize",required:!1,type:{name:"(index: number, size: number, prevSize: number) => void"}},onDividerResizeEnd:{defaultValue:null,description:"Called after the mouse has been released but only if the mouse onDividerResizeStart was called\n@param index\n@param newSize\n@returns",name:"onDividerResizeEnd",required:!1,type:{name:"(index: number, size: number, prevSize: number) => void"}},onDividerMouseUp:{defaultValue:null,description:"Called when the mouse is released (regardless of resize)\n@param index\n@returns",name:"onDividerMouseUp",required:!1,type:{name:"(index: number) => void"}},onDividerAutoFit:{defaultValue:null,description:"",name:"onDividerAutoFit",required:!1,type:{name:"(index: number) => void"}},direction:{defaultValue:null,description:"",name:"direction",required:!0,type:{name:"enum",value:[{value:'"col"'},{value:'"row"'}]}},view:{defaultValue:null,description:"",name:"view",required:!0,type:{name:"GridOverlayView"}},index:{defaultValue:null,description:"",name:"index",required:!0,type:{name:"number"}},disabled:{defaultValue:null,description:"This should disable interaction. This should also\nprovide a visual cue that the divider is disabled.",name:"disabled",required:!1,type:{name:"boolean"}},disabledResize:{defaultValue:null,description:"If the divider does not allow resize.\n@remarks We create a faux divider on the left of the first header and we mark it as disabledResize.",name:"disabledResize",required:!1,type:{name:"boolean"}},isNextHidden:{defaultValue:null,description:"If the next header is hidden.\nThis allows the divider to shift location",name:"isNextHidden",required:!1,type:{name:"boolean"}},isHidden:{defaultValue:null,description:"If the current header is hidden.\nThis allows the divider to shift location",name:"isHidden",required:!1,type:{name:"boolean"}},isSelected:{defaultValue:null,description:"If the header associated with this divider is selected.",name:"isSelected",required:!1,type:{name:"boolean"}},isSelectedAll:{defaultValue:null,description:"If the header associated with this divider is selected.",name:"isSelectedAll",required:!1,type:{name:"boolean"}},showTouchDivider:{defaultValue:null,description:"If the divider is the last one in view. Useful for touch divider that only show the last one.",name:"showTouchDivider",required:!1,type:{name:"boolean"}},headerStyle:{defaultValue:null,description:"",name:"headerStyle",required:!0,type:{name:"GridHeaderStyle"}},headerStyleSelect:{defaultValue:null,description:"",name:"headerStyleSelect",required:!0,type:{name:"GridHeaderStyle"}},headerStyleSelectAll:{defaultValue:null,description:"",name:"headerStyleSelectAll",required:!0,type:{name:"GridHeaderStyle"}},headerStyleHover:{defaultValue:null,description:"",name:"headerStyleHover",required:!1,type:{name:"GridHeaderStyle"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<HeaderDividerElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/grid/src/HeaderDivider.tsx#HeaderDivider"]={docgenInfo:HeaderDivider.__docgenInfo,name:"HeaderDivider",path:"../../packages/grid/src/HeaderDivider.tsx#HeaderDivider"})}catch(__react_docgen_typescript_loader_error){}const FALSE_FUNC=()=>!1,HeaderRenderer=(0,react.memo)((props=>{const{index,value,zoom,zoomScale=100,headerText=index=>`${index}`,headerStyle,headerStyleSelect=headerStyle,headerStyleSelectAll=headerStyleSelect,headerStyleHover=headerStyleSelectAll,verticalPadding:_verticalPadding=0,horizontalPadding:_horizontalPadding=0,isSelected=FALSE_FUNC,isSelectedAll=FALSE_FUNC,bounds,range,direction,view,style:propStyle,...rest}=props,scale=zoomScale/100,ref=(0,react.useRef)(),[isHover,setHover]=(0,react.useState)(!1),isSelfSelected=isSelected?.(index)||!1,isSelfSelectedAll=isSelectedAll?.(index)||!1,renderStyle=isHover?headerStyleHover:isSelfSelectedAll?headerStyleSelectAll:isSelfSelected?headerStyleSelect:headerStyle;return(0,jsx_runtime.jsx)("div",{ref,style:{background:renderStyle.fill,color:renderStyle.text?.fill,fontFamily:renderStyle.text?.fontFamily??headerStyle.text?.fontFamily,fontSize:96*(renderStyle.text?.fontSize??11)/72*scale,fontStyle:renderStyle.text?.fontStyle,fontWeight:renderStyle.text?.fontWeight,lineHeight:1.2,display:"flex",justifyContent:"center",alignItems:"end",pointerEvents:"auto",paddingBottom:`${scale}px`,...propStyle,left:propStyle.left-(direction===HeaderDirection.COLS?1:0),top:propStyle.top-(direction===HeaderDirection.ROWS?1:0),width:propStyle.width+1,height:propStyle.height+1,overflow:"hidden"},...rest,onMouseMove:event=>{"touch"!==ReactUtils.th().primaryInput&&0===event.buttons&&setHover(!0)},onMouseOut:_event=>{setHover(!1)},children:headerText(index)})}));try{HeaderRenderer.displayName="HeaderRenderer",HeaderRenderer.__docgenInfo={description:"",displayName:"HeaderRenderer",props:{direction:{defaultValue:null,description:"",name:"direction",required:!0,type:{name:"enum",value:[{value:'"col"'},{value:'"row"'}]}},index:{defaultValue:null,description:"",name:"index",required:!0,type:{name:"number"}},headerStyle:{defaultValue:null,description:"",name:"headerStyle",required:!0,type:{name:"GridHeaderStyle"}},headerStyleSelect:{defaultValue:null,description:"",name:"headerStyleSelect",required:!0,type:{name:"GridHeaderStyle"}},headerStyleSelectAll:{defaultValue:null,description:"",name:"headerStyleSelectAll",required:!0,type:{name:"GridHeaderStyle"}},headerStyleHover:{defaultValue:null,description:"",name:"headerStyleHover",required:!1,type:{name:"GridHeaderStyle"}},verticalPadding:{defaultValue:null,description:"",name:"verticalPadding",required:!1,type:{name:"number"}},horizontalPadding:{defaultValue:null,description:"",name:"horizontalPadding",required:!1,type:{name:"number"}},headerText:{defaultValue:null,description:"",name:"headerText",required:!1,type:{name:"(index: number) => string"}},isSelected:{defaultValue:null,description:"",name:"isSelected",required:!1,type:{name:"(index: number) => boolean"}},isSelectedAll:{defaultValue:null,description:"",name:"isSelectedAll",required:!1,type:{name:"(index: number) => boolean"}},zoomScale:{defaultValue:null,description:"This is not the default grid zoom this is just for rendering.\n@defaultValue 100",name:"zoomScale",required:!1,type:{name:"number"}},value:{defaultValue:null,description:"A value to render",name:"value",required:!0,type:{name:"any"}},bounds:{defaultValue:null,description:"The range bounds relative to the current viewport and zoom",name:"bounds",required:!0,type:{name:"Bounds"}},range:{defaultValue:null,description:"The CellRangeCoords that is being rendering",name:"range",required:!1,type:{name:"CellRangeCoords"}},view:{defaultValue:null,description:"The view that is rendering a collection of cells",name:"view",required:!1,type:{name:"GridOverlayView"}},zoom:{defaultValue:null,description:"If there is a zoom scale.\n@defaultValue 1",name:"zoom",required:!1,type:{name:"number"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/grid/src/HeaderRenderer.tsx#HeaderRenderer"]={docgenInfo:HeaderRenderer.__docgenInfo,name:"HeaderRenderer",path:"../../packages/grid/src/HeaderRenderer.tsx#HeaderRenderer"})}catch(__react_docgen_typescript_loader_error){}const applyMultipleHeaders=(selectionRuns,update,indexSkip=null)=>{const retValue=[];for(let i=0;i<selectionRuns.length;i++)if(selectionRuns[i].data.isSelectedAll){if(selectionRuns[i].min===selectionRuns[i].max&&selectionRuns[i].min===indexSkip)continue;retValue.push({address:{min:selectionRuns[i].min,max:selectionRuns[i].max},update})}return retValue},createRangesAndRunsFromSelection=(selectionMain,prevRangeAndRuns,direction,gridRef)=>{let newRanges=[];if(selectionMain?.selection?.ranges&&selectionMain?.selection.ranges.length>0)newRanges=selectionMain?.selection.ranges;else if(selectionMain?.selection?.activeCoords){const anchorAsRange=gridRef.current?.getCoordsAsRange(selectionMain?.selection?.activeCoords);newRanges=[anchorAsRange??RangeUtils.ug(selectionMain?.selection?.activeCoords)]}if(RangeUtils.tN(newRanges,prevRangeAndRuns?.ranges))return!1;let newRuns=[];for(let i=0;newRanges&&i<newRanges.length;i++)newRuns=RunUtils._E(RunUtils.M5(newRuns,{min:direction===HeaderDirection.COLS?newRanges[i].colStart:newRanges[i].rowStart,max:direction===HeaderDirection.COLS?newRanges[i].colEnd:newRanges[i].rowEnd,data:{isSelected:!0}},{onUpdate:(prevValue,newValue)=>{let updateValue=RunUtils.mD(prevValue,newValue);return updateValue.isSelectedAll=prevValue?.isSelectedAll||(direction===HeaderDirection.COLS?0===newRanges[i].rowStart&&newRanges[i].rowEnd===(gridRef.current?.rowCount??0)-1:0===newRanges[i].colStart&&newRanges[i].colEnd===(gridRef.current?.columnCount??0)-1),updateValue}}));return(!prevRangeAndRuns||!((a,b)=>{if(a===b)return!0;if(a.length!==b.length)return!1;for(let i=0;i<a.length;i++){const ai=a[i],bi=b[i];if(ai.min!==bi.min||ai.max!==bi.max)return!1;if(ai.data.isSelected!==bi.data.isSelected)return!1;if(ai.data.isSelectedAll!==bi.data.isSelectedAll)return!1}return!0})(prevRangeAndRuns.runs,newRuns))&&{ranges:newRanges,runs:newRuns}},SheetHeaders=(0,react.memo)((0,react.forwardRef)(((props,refForwarded)=>{const{gridRef,sheet,headerCount,direction=HeaderDirection.ROWS,oppositeSize=30,containerWidth,containerHeight,sheetHeadersModel,selectionMain,headerText:propHeaderText,freezeStart,gridStyle,verticalPadding,horizontalPadding,onSheetContextMenu:propOnSheetContextMenu,onResizeHeadersStart:propOnResizeHeadersStart,onResizeHeaders:propOnResizeHeaders,onResizeHeadersEnd:propOnResizeHeadersEnd,onResizeHeadersDown,onResizeHeadersUp,scrollPoint:propScrollPoint,onSelectionStart:propOnSelectionStart,onSelectionEnd:propOnSelectionEnd}=props,refGridHeader=(0,react.useRef)(null),[forcedRender,forceRender]=(0,react.useReducer)((s=>s+1),0),refModelInFlight=(0,react.useRef)(!1);(0,react.useLayoutEffect)((()=>{refModelInFlight.current=!0}),[sheetHeadersModel]);const scrollPoint=(0,react.useMemo)((()=>({left:direction===HeaderDirection.COLS?propScrollPoint.left:0,top:direction===HeaderDirection.ROWS?propScrollPoint.top:0})),[propScrollPoint]),previousRangeAndRuns=(0,react.useRef)(null),[selectionRuns,setSelectionRuns]=(0,react.useState)([]),[zoomScale,setZoomScale]=(0,react.useState)(sheetHeadersModel?.sheet().getView().zoomScale/100),[overlays,setOverlays]=(0,react.useState)(null);useModelEventListener(sheetHeadersModel,ISheetHeadersModel.k.Header,(()=>{setZoomScale(sheetHeadersModel?.sheet().getView().zoomScale/100),setSheetCellLayout(createSheetCellLayout())})),(0,react.useLayoutEffect)((()=>{setSheetCellLayout(createSheetCellLayout())}),[direction,zoomScale,oppositeSize]),(0,react.useLayoutEffect)((()=>{setOverlays(null),setSelectionRuns(null),previousRangeAndRuns.current=null,setZoomScale(sheetHeadersModel?.sheet().getView().zoomScale/100),setSheetCellLayout(createSheetCellLayout())}),[sheetHeadersModel]);const isHidden=(0,react.useCallback)((index=>sheetHeadersModel.getHeader(index)?.hidden||0===sheetHeadersModel.getHeader(index)?.size),[sheetHeadersModel]),hiddenHeadersAt=(0,react.useCallback)(((index,forward)=>sheetHeadersModel.hiddenHeadersAt(index,forward)),[isHidden]),isSelected=(0,useCallbackRef.c)((index=>{if(!selectionRuns)return!1;const runOffset=CommonUtils.Nn(selectionRuns,index,(v=>v.max));return!(!selectionRuns[runOffset]||index<selectionRuns[runOffset].min||index>selectionRuns[runOffset].max||!selectionRuns[runOffset]?.data)&&selectionRuns[runOffset].data.isSelected}),[selectionRuns]),isSelectedAll=(0,useCallbackRef.c)((index=>{if(!selectionRuns)return!1;const runOffset=CommonUtils.Nn(selectionRuns,index,(v=>v.max));return!(!selectionRuns[runOffset]||index<selectionRuns[runOffset].min||index>selectionRuns[runOffset].max||!selectionRuns[runOffset]?.data)&&selectionRuns[runOffset].data.isSelectedAll}),[selectionRuns]),minSize=(0,react.useCallback)((()=>sheetHeadersModel.getMinHeaderSize()),[sheetHeadersModel]),maxSize=(0,react.useCallback)((()=>sheetHeadersModel.getMaxHeaderSize()),[sheetHeadersModel]),handleResize=(0,useCallbackRef.c)(((index,newSize,prevSize)=>{newSize/=zoomScale;const update={size:newSize=Math.max(minSize(),Math.min(CommonUtils.k_(newSize,minSize()),maxSize())),hidden:null,isCustomSize:!0},pairsHeaders=[];if(newSize<=0&&(update.hidden=!0,update.size=prevSize),pairsHeaders.push({address:{min:index,max:index},update}),newSize<0){const findOffset=direction===HeaderDirection.ROWS?sheetCellLayout.getRowOffset:sheetCellLayout.getColOffset,findIndex=direction===HeaderDirection.ROWS?sheetCellLayout.getRowIndex:sheetCellLayout.getColIndex,currentStart=findOffset(index);let foundIndex=findIndex(currentStart+newSize);const fromOffset=findOffset(foundIndex);fromOffset===currentStart+newSize?foundIndex--:pairsHeaders.push({address:{min:foundIndex,max:foundIndex},update:{isCustomSize:!0,size:currentStart-fromOffset+newSize}}),index-foundIndex>1&&pairsHeaders.push({address:{min:foundIndex+1,max:index-1},update:{hidden:!0,isCustomSize:!0}})}sheetHeadersModel.setHeaderPairs(pairsHeaders),propOnResizeHeaders?.(index,newSize,prevSize)}),[forcedRender,sheetHeadersModel,zoomScale,propOnResizeHeaders]),handleResizeEnd=(0,useCallbackRef.c)(((index,newSize,prevSize)=>{if(isSelectedAll(index)){const update={hidden:newSize<=0||null,size:(newSize<=0?prevSize:newSize)/zoomScale,isCustomSize:!0};sheetHeadersModel.setHeaderPairs(applyMultipleHeaders(selectionRuns,update,index))}propOnResizeHeadersEnd?.(index,newSize)}),[forcedRender,sheetHeadersModel,selectionRuns,selectionMain?.selection,propOnResizeHeadersEnd]),onResizeHeadersStart=(0,useCallbackRef.c)(propOnResizeHeadersStart,[propOnResizeHeadersStart]),handleAutoFit=(0,useCallbackRef.c)((index=>{let selectedSelf=!1;const autoFitRuns=[];for(let i=0;i<selectionRuns.length;i++)selectionRuns[i].data.isSelectedAll&&(selectionRuns[i].min<=index&&selectionRuns[i].max>=index&&(selectedSelf=!0),autoFitRuns.push({min:selectionRuns[i].min,max:selectionRuns[i].max}));selectedSelf||autoFitRuns.push({min:index,max:index}),sheetHeadersModel.autoFit(autoFitRuns);if(isHidden(index)){const update={hidden:null},updatingRuns=applyMultipleHeaders(selectionRuns,update);selectedSelf||updatingRuns.push({address:index,update}),sheetHeadersModel.setHeaderPairs(updatingRuns)}propOnResizeHeadersEnd?.(index,null)}),[forcedRender,sheetHeadersModel,selectionRuns,selectionMain?.selection,propOnResizeHeadersEnd,isHidden]),createSheetCellLayout=()=>({getColOffset:index=>direction===HeaderDirection.ROWS?0===index?0:oppositeSize/zoomScale:sheetHeadersModel.findOffset(index),getColIndex:offset=>direction===HeaderDirection.ROWS?0:sheetHeadersModel.findIndex(offset),getRowOffset:index=>direction===HeaderDirection.COLS?0===index?0:oppositeSize/zoomScale:sheetHeadersModel.findOffset(index),getRowIndex:offset=>direction===HeaderDirection.COLS?0:sheetHeadersModel.findIndex(offset)}),[sheetCellLayout,setSheetCellLayout]=(0,react.useState)((()=>createSheetCellLayout())),onPointerDownInterceptor=(0,react.useCallback)(((e,coords)=>!(e.nativeEvent.which===types_types.eZ.Right)||!isSelectedAll(direction===HeaderDirection.ROWS?coords.rowIndex:coords.colIndex)),[direction,isSelectedAll]),onPointerUp=(0,useCallbackRef.c)((_e=>{sheet.focusSheet()}),[sheet]),{...selectionProps}=useHeaderSelection({direction,headerCount,gridRef:refGridHeader,gridMainRef:gridRef,selectionMain,pointerDownInterceptor:onPointerDownInterceptor,onPointerUp,onDragStart:propOnSelectionStart,onDragEnd:propOnSelectionEnd});(0,react.useEffect)((()=>{if(refModelInFlight.current)return;const rangesAndRuns=createRangesAndRunsFromSelection(selectionMain,previousRangeAndRuns.current,direction,gridRef);if(rangesAndRuns){const update=()=>{setSelectionRuns(rangesAndRuns?.runs??null),previousRangeAndRuns.current=rangesAndRuns??null,refGridHeader.current?.invalidate()};CommonUtils.G2(CommonUtils.sg(update,20),100)()}}),[selectionMain?.selection?.activeCoords,selectionMain?.selection.ranges]);const selectionBorderColorEffective=gridStyle.selection?.strokeFill;(0,react.useEffect)((()=>{if(!refGridHeader.current||null===selectionRuns||refModelInFlight.current)return void setOverlays(null);const generateBorder=(key,view,selection)=>{if(selection)return direction===HeaderDirection.COLS?(0,jsx_runtime.jsx)("div",{style:{position:"absolute",borderBottom:`${gridStyle.headerSelection.strokeWidth}px solid ${selectionBorderColorEffective}`,pointerEvents:"none",top:`${ReactUtils.zJ(-gridStyle.headerSelection.strokeWidth/2)}px`,left:`${ReactUtils.zJ(selection.x-gridStyle.headerSelection.strokeWidth)}px`,width:`${ReactUtils.zJ(selection.width+gridStyle.headerSelection.strokeWidth+1,!0)}px`,height:`${oppositeSize+gridStyle.headerSelection.strokeWidth+.5}px`}},key):(0,jsx_runtime.jsx)("div",{style:{position:"absolute",borderRight:`${gridStyle.headerSelection.strokeWidth}px solid ${selectionBorderColorEffective}`,pointerEvents:"none",top:`${ReactUtils.zJ(selection.y-gridStyle.headerSelection.strokeWidth)}px`,left:`${ReactUtils.zJ(-gridStyle.headerSelection.strokeWidth/2)}px`,width:`${oppositeSize+gridStyle.headerSelection.strokeWidth+.5}px`,height:`${ReactUtils.zJ(selection.height+gridStyle.headerSelection.strokeWidth+1,!0)}px`}},key)},getSelectionBounds=(min,max,view)=>{const selectionBounds={x:0,y:0,width:0,height:0};if(direction===HeaderDirection.COLS){const bounded=view.clipBounds(view.getCellRangeBounds({rowStart:0,rowEnd:0,colStart:min,colEnd:Math.min(headerCount,max)}),useSelection.Po);if(!bounded)return;selectionBounds.x=bounded.x,selectionBounds.width=bounded.width}else{const bounded=view.clipBounds(view.getCellRangeBounds({rowStart:min,rowEnd:Math.min(headerCount,max),colStart:0,colEnd:0}),useSelection.Po);if(!bounded)return;selectionBounds.y=bounded.y,selectionBounds.height=bounded.height}return{x:selectionBounds.x,y:selectionBounds.y,width:selectionBounds.width,height:selectionBounds.height}};setOverlays([view=>{const overlayDividers=[];let dividerIndices=direction===HeaderDirection.COLS?view.getVisibleColumns():view.getVisibleRows(),currentSelectionRun=null;const fistIndex=direction===HeaderDirection.COLS?view.getTotalCellRange().colStart:view.getTotalCellRange().rowStart;dividerIndices.length>0&÷rIndices[0]>fistIndex&&(dividerIndices=[dividerIndices[0]-1,...dividerIndices]);let lastSelectionDivider=[];const overlayDividersProps=[];for(let i=0;i<dividerIndices.length;i++){const index=dividerIndices[i],nextIndex=i<dividerIndices.length-1?dividerIndices[i+1]:index+hiddenHeadersAt(index+1,!0)+1,isNextHidden=index+1!==nextIndex;if(!currentSelectionRun||currentSelectionRun.max<index)if(selectionRuns.length>0&&selectionRuns[selectionRuns.length-1].max>=index){const currentSelectionRunOffset=CommonUtils.Nn(selectionRuns,index,(v=>v.max));currentSelectionRun=selectionRuns[currentSelectionRunOffset]}else currentSelectionRun=null;let isSelected=!1,isSelectedAll=!1;if(currentSelectionRun?.data&&(currentSelectionRun.min<=index||currentSelectionRun.min<=nextIndex&&!isNextHidden)&&(isSelected=currentSelectionRun.data.isSelected,isSelectedAll=currentSelectionRun.data.isSelectedAll),index===fistIndex){let isSelectedZero=!1,isSelectedAllZero=!1;currentSelectionRun?.data&¤tSelectionRun.min<=index&&(isSelectedZero=currentSelectionRun.data.isSelected,isSelectedAllZero=currentSelectionRun.data.isSelectedAll),index>0&&overlayDividersProps.push({index:index-1,isNextHidden,isSelected:isSelectedZero,isSelectedAll:isSelectedAllZero,disabledResize:!0})}if(isSelectedAll&&lastSelectionDivider.push(overlayDividersProps.length),overlayDividersProps.push({index,isHidden:0===i&&hiddenHeadersAt(index,!0)>0,isNextHidden,isSelected,isSelectedAll,onDividerMouseDown:onResizeHeadersDown,onDividerResizeStart:onResizeHeadersStart,onDividerResize:sheetHeadersModel.isProtected()?null:handleResize,onDividerMouseUp:onResizeHeadersUp,onDividerResizeEnd:handleResizeEnd,onDividerAutoFit:handleAutoFit}),isNextHidden){let isNextSelected=!1,isNextSelectedAll=!1;if(currentSelectionRun&¤tSelectionRun.min>=index&¤tSelectionRun.max<=nextIndex-1&¤tSelectionRun.data.isSelectedAll&&lastSelectionDivider.push(overlayDividersProps.length),currentSelectionRun?.data&¤tSelectionRun.max>=nextIndex);else if(selectionRuns.length>0&&selectionRuns[selectionRuns.length-1].max>=nextIndex){const currentSelectionRunOffset=CommonUtils.Nn(selectionRuns,nextIndex,(v=>v.max));currentSelectionRun=selectionRuns[currentSelectionRunOffset]}else currentSelectionRun=null;currentSelectionRun?.data&¤tSelectionRun.min<=nextIndex&&(isNextSelected=currentSelectionRun.data.isSelected,isNextSelectedAll=currentSelectionRun.data.isSelectedAll),nextIndex>0&&overlayDividersProps.push({index:nextIndex-1,isHidden:!0,isSelected:isNextSelected,isSelectedAll:isNextSelectedAll,onDividerMouseDown:onResizeHeadersDown,onDividerResizeStart:onResizeHeadersStart,onDividerResize:sheetHeadersModel.isProtected()?null:handleResize,onDividerMouseUp:onResizeHeadersUp,onDividerResizeEnd:handleResizeEnd,onDividerAutoFit:handleAutoFit})}}if(lastSelectionDivider.length>0){let defaultDividerOffset=lastSelectionDivider.length-1;if(lastSelectionDivider.length>0){const lastIndex=overlayDividersProps[lastSelectionDivider[defaultDividerOffset]].index;let headerBounds=null;direction===HeaderDirection.COLS?(headerBounds=view.getCellRangeBounds({rowStart:0,rowEnd:0,colStart:lastIndex,colEnd:lastIndex}),headerBounds.x+headerBounds.width>view.bounds.width&&(defaultDividerOffset-=1,0===defaultDividerOffset&&(defaultDividerOffset=-1))):(headerBounds=view.getCellRangeBounds({rowStart:lastIndex,rowEnd:lastIndex,colStart:0,colEnd:0}),headerBounds.y+headerBounds.height>view.bounds.height&&(defaultDividerOffset-=1,0===defaultDividerOffset&&(defaultDividerOffset=-1)))}const lastSelectionRun=selectionRuns?.[selectionRuns.length-1];if("t"===view.anchor||"l"===view.anchor){const lastDivider=overlayDividersProps[lastSelectionDivider[Math.max(0,lastSelectionDivider.length-1)]];lastDivider.showTouchDivider=lastSelectionRun&&lastSelectionRun.max<=lastDivider.index}else defaultDividerOffset>=0&&(overlayDividersProps[lastSelectionDivider[defaultDividerOffset]].showTouchDivider=!0)}const{header:headerStyle,headerSelect:headerStyleSelect,headerSelectAll:headerStyleSelectAll,headerHover:headerStyleHover}=gridStyle??{};for(let i=0;i<overlayDividersProps.length;i++)overlayDividers.push((0,jsx_runtime.jsx)(HeaderDivider,{direction,view,headerStyle,headerStyleSelect,headerStyleSelectAll,headerStyleHover,disabled:sheetHeadersModel.isProtected(),...overlayDividersProps[i]},`divider${i}`));return overlayDividers},view=>{const overlaySelectionsNew=[];for(let i=0;selectionRuns&&i<selectionRuns.length;i++)overlaySelectionsNew.push(generateBorder(`selection:${view.anchor}:${i}`,0,getSelectionBounds(selectionRuns[i].min,selectionRuns[i].max,view)));return overlaySelectionsNew}])}),[selectionRuns,true,selectionBorderColorEffective,gridStyle,sheetCellLayout,headerCount,freezeStart,forcedRender,zoomScale]),(0,react.useEffect)((()=>{refGridHeader.current?.invalidate()}),[forcedRender]);const headerText=(0,useCallbackRef.c)((index=>propHeaderText?propHeaderText(index):sheetHeadersModel.getHeaderText(index)),[propHeaderText,sheetHeadersModel]),renderHeader=(0,useCallbackRef.c)((props=>{const{header:headerStyle,headerSelect:headerStyleSelect,headerSelectAll:headerStyleSelectAll,headerHover:headerStyleHover}=gridStyle??{},range=props.range;return(0,jsx_runtime.jsx)(HeaderRenderer,{direction,index:direction===HeaderDirection.COLS?range.colStart:range.rowStart,isSelected,isSelectedAll,zoomScale:100*zoomScale,headerText,headerStyle,headerStyleSelect,headerStyleSelectAll,headerStyleHover,verticalPadding,horizontalPadding,...props})}),[forcedRender,headerCount,selectionRuns,gridStyle,zoomScale,sheetHeadersModel]),editModeHandler=(0,useEditMode.B)(),style=(0,react.useMemo)((()=>{const retValue={};if("touch"!==ReactUtils.th().primaryInput){let cursor=direction===HeaderDirection.COLS?"url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' %3E%3Cg%3E%3Cpath d='M 8,14.5 2.3125,8.8125 h 3.25 V 1.5 h 4.875 v 7.3125 h 3.25 z' stroke='black' fill='white'/%3E%3C/g%3E%3C/svg%3E%0A\") 8 15, pointer":"url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' %3E%3Cg%3E%3Cpath d='m 14.5,8 -5.6875,5.6875 v -3.25 H 1.5 v -4.875 h 7.3125 v -3.25 z' stroke='black' fill='white'/%3E%3C/g%3E%3C/svg%3E%0A\") 15 8, pointer";const mode=editModeHandler.getMode();if("formatPainter"===mode?.key){const width=30,height=22;cursor=`url("data:image/svg+xml,%3Csvg width='${width}' height='${height}' viewBox='0 0 ${width} ${height}' xmlns='http://www.w3.org/2000/svg' %3E%3Cg%3E%3Cpath d='${"M 26.737611,2.811068 V 2.0241451 c 0,-0.4328075 -0.354115,-0.7869227 -0.786923,-0.7869227 h -9.443074 c -0.432808,0 -0.786923,0.3541152 -0.786923,0.7869227 v 3.1476914 c 0,0.4328076 0.354115,0.7869235 0.786923,0.7869235 h 9.443074 c 0.432808,0 0.786923,-0.3541159 0.786923,-0.7869235 V 4.3849137 h 0.786923 v 3.1476915 h -7.869229 v 8.6561518 c 0,0.432808 0.354116,0.786923 0.786923,0.786923 h 1.573846 c 0.432807,0 0.786923,-0.354115 0.786923,-0.786923 V 9.1064513 H 29.09838 V 2.811068 Z M 10.714339,6.2116849 c -1.60877,0.0017 -3.2175361,0.00425 -4.8263048,0.00609 0.0012,1.5756989 0.00158,3.1513905 0.00244,4.7270891 -1.5978311,0.0017 -3.1956617,0.0034 -4.7934919,0.0043 0.00335,1.740011 0.00655,3.480012 0.00988,5.220023 1.5954589,0 3.1909181,0 4.7863775,0 -0.0017,1.606793 -0.00353,3.213585 -0.0051,4.820375 1.7440936,0.0016 3.4881881,0.0033 5.2322842,0.005 -0.0014,-1.608503 -0.0018,-3.217015 -0.0028,-4.825519 1.58518,0 3.17036,0 4.755543,0 0.0033,-1.741851 0.0073,-3.483705 0.01072,-5.225556 -1.58808,0 -3.176158,0 -4.764238,0 0,-1.5775391 0,-3.1550792 0,-4.7326117 -0.135065,1.3e-4 -0.270128,1.982e-4 -0.40519,4.047e-4 z"}' stroke='black' fill='white'/%3E%3C/g%3E%3C/svg%3E%0A") 7 12, pointer`}retValue.cursor=cursor}return retValue.backgroundColor=gridStyle?.header?.fill||"transparent",retValue}),[direction,forcedRender,editModeHandler,gridStyle]),refLocal=(0,useImperativeHandleElement.c)(refForwarded,(()=>({scrollTo:args=>{refGridHeader.current?.scrollTo(args)},forceRender:()=>{forceRender()},elementGrid:()=>refGridHeader.current})),[]),onPointerDown=(0,react.useCallback)((e=>{selectionProps.onPointerDown(e)}),[selectionProps]),onContentMenu=(0,react.useCallback)((e=>{const coords=selectionProps.getCellCoordsFromOffset(e.clientX,e.clientY);coords&&propOnSheetContextMenu&&(propOnSheetContextMenu({originalEvent:e,clientX:e.clientX,clientY:e.clientY,rowIndex:direction===HeaderDirection.ROWS?coords.rowIndex:-1,colIndex:direction===HeaderDirection.COLS?coords.colIndex:-1}),e.stopPropagation(),e.preventDefault())}),[selectionProps,propOnSheetContextMenu]),headerGrid=(0,react.useMemo)((()=>(0,jsx_runtime.jsx)("div",{ref:refLocal,children:(0,jsx_runtime.jsx)(Grid.x,{style,ref:refGridHeader,scrollPoint,columnCount:direction===HeaderDirection.COLS?headerCount:1,rowCount:direction===HeaderDirection.ROWS?headerCount:1,freezeLeft:direction===HeaderDirection.COLS?freezeStart:void 0,freezeTop:direction===HeaderDirection.ROWS?freezeStart:void 0,hiddenRowsAt:direction===HeaderDirection.ROWS?hiddenHeadersAt:void 0,hiddenColumnsAt:direction===HeaderDirection.COLS?hiddenHeadersAt:void 0,width:direction===HeaderDirection.COLS?containerWidth:oppositeSize,height:direction===HeaderDirection.ROWS?containerHeight:oppositeSize,showGridLines:!1,cellLayout:sheetCellLayout,clipCells:!1,allowOverlaysOverflow:!0,enableMouseWheel:!1,onContextMenu:onContentMenu,onPointerDown,zoom:zoomScale,cellRenderer:renderHeader,overlays})})),[overlays,sheetCellLayout,containerWidth,containerHeight,scrollPoint,style,gridStyle]);return(0,react.useEffect)((()=>{refModelInFlight.current=!1;const rangesAndRuns=createRangesAndRunsFromSelection(selectionMain,null,direction,gridRef);rangesAndRuns&&(setSelectionRuns(rangesAndRuns?.runs??null),previousRangeAndRuns.current=rangesAndRuns??null,refGridHeader.current?.invalidate())}),[sheetHeadersModel,gridStyle]),headerGrid})));try{SheetHeaders.displayName="SheetHeaders",SheetHeaders.__docgenInfo={description:"",displayName:"SheetHeaders",props:{gridRef:{defaultValue:null,description:"Access grid functions",name:"gridRef",required:!0,type:{name:"MutableRefObject<GridElement>"}},sheet:{defaultValue:null,description:"Allow the sheet to be accessed",name:"sheet",required:!0,type:{name:"SheetElement"}},direction:{defaultValue:null,description:"",name:"direction",required:!0,type:{name:"enum",value:[{value:'"col"'},{value:'"row"'}]}},oppositeSize:{defaultValue:null,description:"The height or width in the opposite direction (for example a column headers height)",name:"oppositeSize",required:!0,type:{name:"number"}},containerWidth:{defaultValue:null,description:"",name:"containerWidth",required:!0,type:{name:"number"}},containerHeight:{defaultValue:null,description:"",name:"containerHeight",required:!0,type:{name:"number"}},headerCount:{defaultValue:null,description:"Number of headers in the grid",name:"headerCount",required:!0,type:{name:"number"}},freezeStart:{defaultValue:null,description:"FrozenEdge",name:"freezeStart",required:!1,type:{name:"number | FrozenEdge"}},sheetHeadersModel:{defaultValue:null,description:"The underlying data model for the sheetHeader",name:"sheetHeadersModel",required:!0,type:{name:"ISheetHeadersModel<any, any, any>"}},selectionMain:{defaultValue:null,description:"The selectionResults from use hook",name:"selectionMain",required:!0,type:{name:"SelectionResults"}},gridStyle:{defaultValue:null,description:"",name:"gridStyle",required:!1,type:{name:"GridStyle"}},verticalPadding:{defaultValue:null,description:"@see HeaderRenderer#verticalPadding",name:"verticalPadding",required:!1,type:{name:"number"}},horizontalPadding:{defaultValue:null,description:"@see HeaderRenderer#horizontalPadding",name:"horizontalPadding",required:!1,type:{name:"number"}},onSheetContextMenu:{defaultValue:null,description:"Fired when a contentMenu is requested",name:"onSheetContextMenu",required:!1,type:{name:"(location: SheetLocation) => void"}},onResizeHeadersStart:{defaultValue:null,description:"",name:"onResizeHeadersStart",required:!1,type:{name:"(index: number, prevSize: number) => void"}},onResizeHeaders:{defaultValue:null,description:"Called during resize of a header.\nIf there is a negative newSize then these headers will have been hidden\nThis is for the specific header being resized.\nNote - Other headers may also have been resized if hiding",name:"onResizeHeaders",required:!1,type:{name:"(index: number, newSize: number, prevSize: number) => void"}},onResizeHeadersEnd:{defaultValue:null,description:"Called after resize of a header.\nIf there is a positive newSize and a single selection then those\nheaders will also have been resized.\n\nNote - Other colHeaderRuns may also have been resized if expanding\nNote - If this was autoFit then newSize and prevSize will be null.",name:"onResizeHeadersEnd",required:!1,type:{name:"(index: number, newSize: number) => void"}},onResizeHeadersDown:{defaultValue:null,description:"",name:"onResizeHeadersDown",required:!1,type:{name:"(index: number, size: number) => void"}},onResizeHeadersUp:{defaultValue:null,description:"",name:"onResizeHeadersUp",required:!1,type:{name:"(index: number) => void"}},headerText:{defaultValue:null,description:"Override the default headerText. If not provided then typical Sheet labeling is used.",name:"headerText",required:!1,type:{name:"(index: number) => string"}},scrollPoint:{defaultValue:null,description:"Scroll location",name:"scrollPoint",required:!1,type:{name:"Partial<TopLeft>"}},onSelectionStart:{defaultValue:null,description:"Callback when selection is manually started",name:"onSelectionStart",required:!1,type:{name:"() => void"}},onSelectionEnd:{defaultValue:null,description:"Callback when selection is manually changed",name:"onSelectionEnd",required:!1,type:{name:"() => void"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<SheetHeadersElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/sheet/SheetHeaders.tsx#SheetHeaders"]={docgenInfo:SheetHeaders.__docgenInfo,name:"SheetHeaders",path:"../../packages/sheet-react/src/components/sheet/SheetHeaders.tsx#SheetHeaders"})}catch(__react_docgen_typescript_loader_error){}var dist=__webpack_require__("../../node_modules/react-merge-refs/dist/index.mjs");let DrawingContainerListenerType=function(DrawingContainerListenerType){return DrawingContainerListenerType.Drawings="drawings",DrawingContainerListenerType}({}),DrawingContainerViewListenerType=function(DrawingContainerViewListenerType){return DrawingContainerViewListenerType.DrawingSelection="drawingSelection",DrawingContainerViewListenerType}({});var useDrawingModelListener=__webpack_require__("../../packages/sheet-react/src/components/drawing/useDrawingModelListener.ts");const DrawingFrame=(0,react.memo)((0,react.forwardRef)(((props,refForwarded)=>{const{children,view:propView,drawing,onRefLoad,onRefUnload,onHide,onShow,select,unselect,isSelected,isDragging,isAnchor,updateFrameBounds,dragStart,style:propsStyle,disabled,renderDrawing,...rest}=props,[shapeBounds,setShapeBounds]=(0,react.useState)({x:0,y:0,width:0,height:0}),[relatedFocus,setRelatedFocus]=(0,react.useState)(null),refLocal=(0,react.useRef)(null);(0,react.useLayoutEffect)((()=>{if(drawing.isClosed())return;const newBounds=propView.toViewBounds(drawing.getBounds());setShapeBounds(newBounds),updateFrameBounds(newBounds)}),[propView?.bounds]),(0,useDrawingModelListener.l)(drawing,{onBoundsChange:bounds=>{const newBounds=propView.toViewBounds(bounds);setShapeBounds(newBounds),updateFrameBounds(newBounds)},onDelete:()=>{unselect()}});const elemDrawing=(0,react.useMemo)((()=>{let{width,height}=shapeBounds;return renderDrawing({view:propView,drawing,disabled,isDragging,style:{position:"relative",left:0,top:0,width,height},onHide,onShow})}),[propView,drawing,shapeBounds.width,shapeBounds.height,disabled,isDragging]);return(0,react.useEffect)((()=>{const loaded=refLocal.current;return onRefLoad(loaded),()=>{onRefUnload(loaded)}}),[]),(0,jsx_runtime.jsx)("div",{tabIndex:0,ref:(0,dist.P)([refLocal,refForwarded]),style:{display:"flex",alignItems:"stretch",justifyContent:"stretch",position:"absolute",maxWidth:"auto",maxHeight:"auto",minWidth:"auto",minHeight:"auto",left:shapeBounds.x,top:shapeBounds.y,width:shapeBounds.width,height:shapeBounds.height,...propsStyle},onMouseDown:e=>{const isToggle=e.shiftKey||e.ctrlKey;isToggle&&isSelected?unselect():(select(isToggle),dragStart(e.nativeEvent,e.currentTarget),e.currentTarget.focus())},onFocus:e=>{e.relatedTarget&&!relatedFocus&&setRelatedFocus(e.relatedTarget)},onBlur:e=>{relatedFocus&&!refLocal?.current?.contains(e.relatedTarget)&&setRelatedFocus(null)},...rest,children:elemDrawing})})));try{DrawingFrame.displayName="DrawingFrame",DrawingFrame.__docgenInfo={description:"",displayName:"DrawingFrame",props:{view:{defaultValue:null,description:"The gridView",name:"view",required:!0,type:{name:"GridOverlayView"}},drawing:{defaultValue:null,description:"The underlying model for the chart.",name:"drawing",required:!0,type:{name:"IDrawingModel<DrawingJSON>"}},renderDrawing:{defaultValue:null,description:"Callback to render the Drawing\n@param props C\n@returns",name:"renderDrawing",required:!0,type:{name:"(props: DrawingElementProps) => ReactElement<any, string | JSXElementConstructor<any>>"}},onRefLoad:{defaultValue:null,description:"",name:"onRefLoad",required:!0,type:{name:"(ref: HTMLElement) => void"}},onRefUnload:{defaultValue:null,description:"",name:"onRefUnload",required:!0,type:{name:"(ref: HTMLElement) => void"}},onHide:{defaultValue:null,description:"",name:"onHide",required:!0,type:{name:"(hide: (drawing: IDrawingModel<DrawingJSON>) => boolean | Promise<boolean>) => void"}},onShow:{defaultValue:null,description:"",name:"onShow",required:!0,type:{name:"(show: (drawing: IDrawingModel<DrawingJSON>) => void) => void"}},isAnchor:{defaultValue:null,description:"If true then this is the primary anchor",name:"isAnchor",required:!0,type:{name:"boolean"}},isSelected:{defaultValue:null,description:"",name:"isSelected",required:!0,type:{name:"boolean"}},select:{defaultValue:null,description:"Allows the frame to add to the selection\n@param addToSelection",name:"select",required:!0,type:{name:"(addToSelection?: boolean) => void"}},unselect:{defaultValue:null,description:"",name:"unselect",required:!0,type:{name:"() => void"}},updateFrameBounds:{defaultValue:null,description:"",name:"updateFrameBounds",required:!0,type:{name:"(newBounds: Bounds) => void"}},dragStart:{defaultValue:null,description:"",name:"dragStart",required:!0,type:{name:"(e: MouseEvent | TouchEvent, target?: EventTarget) => void"}},disabled:{defaultValue:null,description:"",name:"disabled",required:!1,type:{name:"boolean"}},isDragging:{defaultValue:null,description:"Indicates if the frame is being dragged. Useful for styling",name:"isDragging",required:!0,type:{name:"boolean"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<HTMLElement | SVGElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/drawing/DrawingFrame.tsx#DrawingFrame"]={docgenInfo:DrawingFrame.__docgenInfo,name:"DrawingFrame",path:"../../packages/sheet-react/src/components/drawing/DrawingFrame.tsx#DrawingFrame"})}catch(__react_docgen_typescript_loader_error){}var DrawingArea_module=__webpack_require__("../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].use[1]!../../packages/sheet-react/src/components/drawing/DrawingArea.module.css"),DrawingArea_module_options={};DrawingArea_module_options.styleTagTransform=styleTagTransform_default(),DrawingArea_module_options.setAttributes=setAttributesWithoutAttributes_default(),DrawingArea_module_options.insert=insertBySelector_default().bind(null,"head"),DrawingArea_module_options.domAPI=styleDomAPI_default(),DrawingArea_module_options.insertStyleElement=insertStyleElement_default();injectStylesIntoStyleTag_default()(DrawingArea_module.A,DrawingArea_module_options);const drawing_DrawingArea_module=DrawingArea_module.A&&DrawingArea_module.A.locals?DrawingArea_module.A.locals:void 0,DrawingArea=(0,react.memo)((0,react.forwardRef)(((props,refForward)=>{const{view:propView,drawingContainer,drawingContainerView,renderDrawing,transactionStack,onUnFocus:propOnUnFocus,disabled=!1,disableDrag=!1,disableResize=!1,className:propClassName,renderDirections=["nw","n","ne","w","e","sw","s","se"],onFirstRender:propOnFirstRender,...rest}=props,bounds=propView.bounds,onFirstRender=(0,useCallbackRef.c)(propOnFirstRender,[propOnFirstRender]),onUnFocus=(0,useCallbackRef.c)(propOnUnFocus,[propOnUnFocus]),[selectElements,setSelectElements]=(0,react.useState)([]),[isResizing,setIsResizing]=(0,react.useState)(!1),[isMoving,setIsMoving]=(0,react.useState)(!1),refIsFirstRender=(0,react.useRef)(!0),refMountedElements=(0,react.useRef)(new Map),refDomsToModels=(0,react.useRef)(new Map),refModelsToDoms=(0,react.useRef)(new Map),refCurrentMoves=(0,react.useRef)(new Map),refContainer=(0,react.useRef)(null),refTransaction=(0,react.useRef)(null),refMoveable=(0,react.useRef)(null),[_,forceRender]=(0,react.useReducer)((s=>s+1),0);(0,react.useLayoutEffect)((()=>{forceRender()}),[propView,drawingContainer]),useModelEventListener(drawingContainer,DrawingContainerListenerType.Drawings,(()=>{forceRender()}));const updateFrameBounds=(0,react.useCallback)(((drawing,newBounds)=>{const target=refModelsToDoms.current.get(drawing);refMoveable.current&&(refMoveable.current.getTargets().forEach((elem=>{if(elem===target)return elem.style.left=newBounds.x+"px",elem.style.top=newBounds.y+"px",elem.style.width=newBounds.width+"px",void(elem.style.height=newBounds.height+"px")})),refMoveable.current.updateRect())}),[]),updateSelectedElements=()=>{const newTargets=[];drawingContainerView.drawingSelection.forEach((drawing=>{const target=refModelsToDoms.current.get(drawing);if(!target)return;-1!==drawingContainerView.drawingSelection.indexOf(drawing)&&newTargets.push(target)})),setSelectElements((prev=>CommonUtils.j1(prev,newTargets)?prev:newTargets))};useModelEventListener(drawingContainerView,DrawingContainerViewListenerType.DrawingSelection,(()=>{forceRender()}));const refPromiseFirstRenderResolve=(0,react.useRef)(null),promiseFirstRender=(0,react.useMemo)((()=>new Promise((resolve=>{refPromiseFirstRenderResolve.current=resolve}))),[]),refFrameDragWait=(0,react.useRef)(null),dragStartFrame=(0,useCallbackRef.c)((async(e,target)=>{refFrameDragWait.current=target;await(async()=>!(!await promiseFirstRender.then()||!refMoveable.current))()&&refFrameDragWait.current===target&&refMoveable.current.dragStart(e,target)}),[selectElements]),[hasFocus,setHasFocus]=(0,react.useState)(!1),refAutoFocus=(0,react.useRef)(null),refFocusedFrame=(0,react.useRef)(null),focusDrawing=(0,useCallbackRef.c)(((drawing=null)=>{drawing||(drawing=drawingContainerView.drawingSelection[0]),drawing||onUnFocus?.();const element=refModelsToDoms.current.get(drawing);element?(element.focus(),refFocusedFrame.current=element,refAutoFocus.current=null):refAutoFocus.current=drawing}),[drawingContainerView]);(0,react.useEffect)((()=>{hasFocus&&selectElements.length>0&&refFocusedFrame.current!==selectElements[0]&&focusDrawing(),refIsFirstRender.current&&(onFirstRender?.(),refIsFirstRender.current=!1)}),[selectElements]);const renderedDrawings=(0,react.useMemo)((()=>{const drawings=drawingContainer.searchDrawings({range:propView.visibleCellRange,includeHidden:!1});if(0===drawings.length&&0===refMountedElements.current.size)return null;const renderFrame=(drawing,mountDetails,tabIndex,isVisible=!0)=>{const indexDrawing=drawingContainerView.drawingSelection.indexOf(drawing),isSelected=-1!==indexDrawing,targetProps={tabIndex,view:propView,drawing,onRefLoad:element=>{refAutoFocus.current===drawing&&(element.focus(),refFocusedFrame.current=element,refAutoFocus.current=null),refModelsToDoms.current.set(drawing,element),refDomsToModels.current.set(element,drawing),updateSelectedElements()},onRefUnload:element=>{refModelsToDoms.current.delete(drawing),refDomsToModels.current.delete(element),updateSelectedElements()},onHide:hide=>{mountDetails.onHide=hide},onShow:show=>{mountDetails.onShow=show},isAnchor:0===indexDrawing,isSelected,isDragging:isSelected&&(isMoving||isResizing),select:(addToSelection=!1)=>{try{drawingContainerView.selectDrawing(drawing,addToSelection)}catch(e){console.warn(e)}},unselect:()=>{drawingContainerView.unselectDrawing(drawing),0===drawingContainerView.drawingSelection.length&&onUnFocus?.()},disabled,renderDrawing,updateFrameBounds:newBounds=>{updateFrameBounds(drawing,newBounds)},dragStart:dragStartFrame,onMouseUp:()=>{refFrameDragWait.current=null},style:{opacity:isVisible?isResizing&&isSelected?.7:void 0:0,zIndex:isResizing&&isSelected?drawing.zIndex+drawings.length:void 0,pointerEvents:isVisible?void 0:"none",cursor:isMoving&&isSelected?"grabbing":disabled||disableDrag?"initial":"move",boxShadow:!isSelected||isMoving&&!isResizing?void 0:"1px 1px 2px 2px rgba(0,0,0,.15)"}};return(0,jsx_runtime.jsx)(DrawingFrame,{...targetProps},`drawing-${drawing.uuid}`)},mountedElementsRead=refMountedElements.current,newMountedElementsWrite=new Map,visibleElements=[];for(let i=0;i<drawings.length;i++){const drawing=drawings[i];if(drawing.isClosed())continue;let mountDetails=mountedElementsRead.get(drawing);mountDetails||(mountDetails={frame:null,shown:null,onShow:null,onHide:null,doShow:(drawing,mountDetails)=>{if(!mountDetails||!0===mountDetails.shown)return;mountDetails.shown=!0;const showId=++mountDetails.visibilityRequestId;requestAnimationFrame((()=>{const showMountDetails=refMountedElements.current.get(drawing);showMountDetails&&showId===mountDetails.visibilityRequestId&&(mountDetails.onShow?.(drawing),showMountDetails.shown=!0)}))},doHide:async(drawing,mountDetails)=>{if(!mountDetails||!1===mountDetails?.shown)return;mountDetails.shown=!1;const hideId=++mountDetails.visibilityRequestId,customHide=await Promise.resolve(mountDetails.onHide?.(drawing));hideId===mountDetails.visibilityRequestId&&!1!==customHide&&(mountDetails.shown=!1,refMountedElements.current.delete(drawing),forceRender())},visibilityRequestId:0}),mountDetails.frame=renderFrame(drawing,mountDetails,i,!0),visibleElements.push(mountDetails.frame),mountDetails.doShow(drawing,mountDetails),mountedElementsRead.delete(drawing),newMountedElementsWrite.set(drawing,mountDetails)}const hiddenElements=[];return drawingContainerView.drawingSelection.forEach((drawing=>{const mountDetails=mountedElementsRead.get(drawing);mountDetails&&(mountDetails.frame=renderFrame(drawing,mountDetails,-1,!1),hiddenElements.push(mountDetails.frame),mountedElementsRead.delete(drawing),newMountedElementsWrite.set(drawing,mountDetails))})),mountedElementsRead.forEach(((mountDetails,drawing)=>{mountDetails.frame=renderFrame(drawing,mountDetails,-1,!1),hiddenElements.push(mountDetails.frame),mountDetails.doHide(drawing,mountDetails),mountedElementsRead.delete(drawing),newMountedElementsWrite.set(drawing,mountDetails)})),refMountedElements.current=newMountedElementsWrite,updateSelectedElements(),[...hiddenElements,...visibleElements]}),[_,propView,renderDrawing,disabled,disableDrag,disableResize,isResizing,isMoving]),startMove=(0,useCallbackRef.c)(((_target,action)=>{const description=`${action} ${1===selectElements.length?CommonUtils.ZH(refDomsToModels.current?.get(selectElements[0]).type):"Drawings"}`;refTransaction.current&&(refTransaction.current.rollback(),refTransaction.current=null),refTransaction.current=transactionStack.pushTransaction(description);for(let i=0;i<selectElements.length;i++){const element=selectElements[i],drawing=refDomsToModels.current?.get(element);drawing?refCurrentMoves.current.set(element,{drawing,startBounds:propView.toViewBounds(drawing.getBounds())}):console.warn("invalid element",drawing)}}),[transactionStack,propView,selectElements]),commitMove=(0,react.useCallback)((()=>{refTransaction.current&&(refTransaction.current.commit(),refTransaction.current=null)}),[]),drawingAreaRef=(0,react.useRef)(null);(0,react.useEffect)((()=>{drawingAreaRef.current&&(drawingAreaRef.current.onscroll=e=>{e.preventDefault(),e.srcElement.scrollTop=0,e.srcElement.scrollLeft=0})}),[drawingAreaRef.current]);const refLocal=(0,useImperativeHandleElement.c)(refForward,(()=>({isDrawingArea:()=>!0,focusDrawing,focus:()=>{focusDrawing()}})),[drawingContainerView]),[Moveable,setMoveable]=(0,react.useState)(null),refLoading=(0,react.useRef)(!1),refLoaded=(0,react.useRef)(!1),refFirstRender=(0,react.useRef)(!1);(0,react.useEffect)((()=>{if(disabled||0===selectElements.length)return;if(refFirstRender.current)return;if(refLoading.current)return;if(refLoaded.current)return void requestAnimationFrame((()=>{refMoveable.current&&refContainer.current&&refMoveable.current.refTargets.length>0&&(refFirstRender.current=!0,refPromiseFirstRenderResolve.current?.(!0)),setSelectElements([...selectElements])}));refLoading.current=!0;const lazy=react.lazy((async()=>{try{const Moveable=await Promise.all([__webpack_require__.e(3130),__webpack_require__.e(3188)]).then(__webpack_require__.bind(__webpack_require__,"../../packages/sheet-react/src/components/drawing/MoveableBundle.ts"));return refLoading.current=!1,refLoaded.current=!0,setSelectElements([...selectElements]),Moveable}catch(error){return console.warn(error),refPromiseFirstRenderResolve.current?.(!1),null}}));setMoveable(lazy)}),[selectElements,disabled,disableDrag,disableResize]);const elemMoveable=(0,react.useMemo)((()=>!Moveable||disabled?null:(0,jsx_runtime.jsx)(react.Suspense,{children:(0,jsx_runtime.jsx)(Moveable,{className:(0,clsx.A)({dragging:isResizing||isMoving,resizing:isResizing,moving:isMoving}),container:null,ref:refMoveable,target:refMoveable.current?selectElements:[],draggable:!disabled&&!disableDrag,resizable:!disabled&&!disableResize,individualGroupable:!0,edgeDraggable:!1,throttleDrag:2,throttleResize:2,origin:!1,keepRatio:!1,renderDirections,onResizeStart:e=>{startMove(e.target,"Resize")},onResize:e=>{if(!refTransaction.current)return e.stopDrag(),void forceRender();setIsResizing(!0);const isCornerDrag=0!==e.direction[0]&&0!==e.direction[1];let widthMain=0,heightMain=0;for(let i=0;i<selectElements.length;i++){const element=selectElements[i],currentMove=refCurrentMoves.current.get(element),drawing=refDomsToModels.current.get(element);if(!currentMove||!drawing){console.warn("invalid element");continue}let xDist=e.dist[0],yDist=e.dist[1],xDragDist=e.drag.dist[0],yDragDist=e.drag.dist[1],widthOriginal=currentMove.startBounds.width,heightOriginal=currentMove.startBounds.height;0===i?(widthMain=widthOriginal,heightMain=heightOriginal):(xDist*=widthOriginal/widthMain,xDragDist*=widthOriginal/widthMain,yDist*=heightOriginal/heightMain,yDragDist*=heightOriginal/heightMain);const newBounds={...currentMove.startBounds};if(newBounds.width=Math.max(0,widthOriginal+xDist),newBounds.height=Math.max(0,heightOriginal+yDist),-1===e.direction[0]&&(newBounds.width=Math.max(0,Math.min(currentMove.startBounds.x+widthOriginal,widthOriginal-xDragDist))),-1===e.direction[1]&&(newBounds.height=Math.max(0,Math.min(currentMove.startBounds.y+heightOriginal,heightOriginal-yDragDist))),isCornerDrag&&drawing.isLockAspectRatio()){const aspect=widthOriginal/heightOriginal,newAspect=newBounds.width/newBounds.height;newAspect>aspect?newBounds.height=newBounds.width/aspect:newAspect<aspect&&(newBounds.width=newBounds.height*aspect)}-1===e.direction[0]&&(newBounds.x=Math.max(0,Math.min(currentMove.startBounds.x+widthOriginal,currentMove.startBounds.x+widthOriginal-newBounds.width))),-1===e.direction[1]&&(newBounds.y=Math.min(currentMove.startBounds.y+heightOriginal,currentMove.startBounds.y+heightOriginal-newBounds.height)),currentMove.drawing.setBounds(propView.toAbsoluteBounds(newBounds))}},onResizeEnd:_e=>{setIsResizing(!1),commitMove()},onDragStart:e=>{startMove(e.target,"Move")},onDrag:e=>{if(!refTransaction.current)return e.stopDrag(),void forceRender();setIsMoving(!0);for(let i=0;i<selectElements.length;i++){const element=selectElements[i],currentMove=refCurrentMoves.current.get(element);currentMove?currentMove.drawing.setBounds(propView.toAbsoluteBounds({...currentMove.startBounds,x:currentMove.startBounds.x+e.translate[0],y:currentMove.startBounds.y+e.translate[1]})):console.warn("invalid element")}},onDragEnd:_e=>{setIsMoving(!1),commitMove()}})})),[_,Moveable,selectElements,propView,disabled,disableDrag,disableResize,isResizing,isMoving]);return(0,jsx_runtime.jsx)("div",{className:(0,clsx.A)(propClassName,"drawing-area",drawing_DrawingArea_module["drawing-area"]),style:{position:"relative",width:bounds.width,height:bounds.height,overflow:"hidden",willChange:"transform"},ref:(0,dist.P)([refLocal,drawingAreaRef]),...rest,children:(0,jsx_runtime.jsx)("div",{className:"drawing-scroll",style:{position:"absolute",cursor:"initial",left:0,top:0,width:bounds.width,height:bounds.height},...rest,children:(0,jsx_runtime.jsxs)("div",{ref:refContainer,style:{position:"absolute",pointerEvents:"auto"},onFocus:_e=>{setHasFocus(!0)},onBlur:_e=>{setHasFocus(!1)},onKeyDownCapture:e=>{if(e.isDefaultPrevented())return;const isCtrlKey=e.nativeEvent.ctrlKey,isAltKey=e.nativeEvent.altKey,isShiftKey=e.nativeEvent.shiftKey;if(e.which===types_types.cK.Escape){let newSelection=[...drawingContainerView.drawingSelection];return selectElements.forEach((element=>{if(0===newSelection.length)return;const model=refDomsToModels.current.get(element);let index=newSelection.indexOf(model);newSelection.splice(index,1)})),newSelection.length!==drawingContainerView.drawingSelection.length&&(drawingContainerView.drawingSelection=newSelection),0===newSelection.length&&onUnFocus?.(),void e.preventDefault()}const updateDrawings=(action,update)=>{let trans=null;if(transactionStack){let description="Drawings";if(1===selectElements.length){const model=refDomsToModels.current.get(selectElements[0]);description=CommonUtils.ZH(model.type)??"Drawing"}trans=transactionStack.pushTransaction(`${action} ${description}`)}selectElements.forEach((element=>{const model=refDomsToModels.current.get(element);update(model)})),trans?.commit()},adjustRotations=amount=>{updateDrawings("Rotate",(drawing=>{drawing.setRotation(drawing.getRotation()+amount)}))},adjustSizes=(percent,increase=!0)=>{updateDrawings("Resize ",(drawing=>{const original=drawing.getBounds();let factor=1+percent;increase||(factor=1/factor);const h=Math.sqrt(Math.pow(original.width,2)+Math.pow(original.height,2)),angH=Math.atan2(original.height,original.width),newHyp=factor*h;if(newHyp<10)return;const newWidth=newHyp*Math.cos(angH),newHeight=newHyp*Math.sin(angH),adjusted={x:original.x+(original.width-newWidth)/2,y:original.y+(original.height-newHeight)/2,width:newWidth,height:newHeight};drawing.setBounds(adjusted)}))},nudgeBounds=bounds=>{updateDrawings("Nudge",(drawing=>{const original=drawing.getBounds(),adjusted={x:original.x+(bounds.x??0),y:original.y+(bounds.y??0),width:original.width+(bounds.width??0),height:original.height+(bounds.height??0)};drawing.setBounds(adjusted)}))};e.which===types_types.cK.Delete?(updateDrawings("Delete",(drawing=>{drawing.delete()})),e.preventDefault()):"ArrowLeft"===e.key?(isShiftKey?adjustSizes(.1,!1):isAltKey?adjustRotations(-10):nudgeBounds({x:isCtrlKey?-10:-1}),e.preventDefault()):"ArrowRight"===e.key?(isShiftKey?adjustSizes(.1,!0):isAltKey?adjustRotations(10):nudgeBounds({x:isCtrlKey?10:1}),e.preventDefault()):"ArrowUp"===e.key?(isShiftKey?adjustSizes(.1,!0):nudgeBounds({y:isCtrlKey?-10:-1}),e.preventDefault()):"ArrowDown"===e.key&&(isShiftKey?adjustSizes(.1,!1):nudgeBounds({y:isCtrlKey?10:1}),e.preventDefault())},children:[renderedDrawings,elemMoveable]})})})})));try{DrawingArea.displayName="DrawingArea",DrawingArea.__docgenInfo={description:"",displayName:"DrawingArea",props:{drawingContainer:{defaultValue:null,description:"The container to retrieve drawing objects",name:"drawingContainer",required:!0,type:{name:"IDrawingContainer<any>"}},drawingContainerView:{defaultValue:null,description:"The container view to retrieve selection information about the drawings.",name:"drawingContainerView",required:!0,type:{name:"IDrawingContainerView<any>"}},renderDrawing:{defaultValue:null,description:"Callback to render the Drawing\n@param props DrawingElementProps\n@returns",name:"renderDrawing",required:!0,type:{name:"(props: DrawingElementProps) => ReactElement<any, string | JSXElementConstructor<any>>"}},view:{defaultValue:null,description:"The gridView",name:"view",required:!0,type:{name:"GridOverlayView"}},transactionStack:{defaultValue:null,description:"If provided this will be used start and stop transactions on being/end move.",name:"transactionStack",required:!0,type:{name:"ITransactionStack"}},onUnFocus:{defaultValue:null,description:"Called when the final drawing is unselected.",name:"onUnFocus",required:!1,type:{name:"() => void"}},disabled:{defaultValue:null,description:"If disabled then drawing selection will not be allowed and frames will be passed disabled.\n@defaultValue false",name:"disabled",required:!1,type:{name:"boolean"}},disableDrag:{defaultValue:null,description:"If disabled then unable to move.\n@defaultValue false",name:"disableDrag",required:!1,type:{name:"boolean"}},disableResize:{defaultValue:null,description:"If disabled then unable to resize.\n@defaultValue false",name:"disableResize",required:!1,type:{name:"boolean"}},renderDirections:{defaultValue:null,description:"Provider the anchor element to render.",name:"renderDirections",required:!1,type:{name:"string[]"}},onFirstRender:{defaultValue:null,description:"Called after the first render of a drawing.\n@returns",name:"onFirstRender",required:!1,type:{name:"() => void"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<DrawingAreaElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/drawing/DrawingArea.tsx#DrawingArea"]={docgenInfo:DrawingArea.__docgenInfo,name:"DrawingArea",path:"../../packages/sheet-react/src/components/drawing/DrawingArea.tsx#DrawingArea"})}catch(__react_docgen_typescript_loader_error){}var IAnchoredItem=__webpack_require__("../../packages/models/src/anchor/IAnchoredItem.ts");const toGridSelection=cellSelection=>{let gridSelection=cellSelection?{}:null;if(cellSelection?.activeCoords&&(gridSelection.activeCoords=cellSelection.activeCoords),cellSelection?.ranges){gridSelection.ranges=[];for(let i=0;i<cellSelection.ranges.length;i++)gridSelection.ranges.push(cellSelection.ranges[i])}return gridSelection.activeRangeIndex=cellSelection?.activeRangeIndex,(0,useSelection.ef)(gridSelection)},STYLE_MAIN_GRID={position:"absolute",top:0,left:0,bottom:0,right:0},EMPTY_GRID_STYLE={},Sheet=(0,react.memo)((0,react.forwardRef)(((props,refForwarded)=>{const{model,gridStyle:propGridStyle=EMPTY_GRID_STYLE,onSheetContextMenu:propOnSheetContextMenu,showColumnHeaders:propShowColumnHeaders,columnHeaderProps,showRowHeaders:propShowRowHeaders,rowHeaderProps,showScrollbars=!0,scrollPaneProps,onViewportChange:propOnViewportChange,onCommandsChange:propOnCommandsChange,onSelectionDrag:propOnSelectionDrag,onRepeatCommandChange:propOnRepeatCommandChange,onMoveCell,editStateAndCoords:propEditStateAndCoords,onEditStateAndCoordsChange:propOnEditStateAndCoordsChange,overlays:propOverlays,renderDrawing,viewportComponent,onElementLoad:propOnElementLoad,getCellEditor:propGetCellEditor,onFocus:propOnFocus,onBlur:propOnBlur,style:propStyle=types_types.sY,notifier,onShowTooltip:propOnShowTooltip,onShowColumnTooltip:propOnShowColumnTooltip,onShowRowTooltip:propOnShowRowTooltip,onCloseTooltip:propOnCloseTooltip,onGoto,gridProps,...rest}=props;if(react.useEffect((()=>{LicenseManager.h.getLicenseDetails()}),[]),!model)throw new Error("ISheetModel must be provided.");const[onInvalidateMainGrid,invalidateMainGrid]=react.useReducer((s=>s+1),0),[onInvalidateDrawings,invalidateDrawings]=react.useReducer((s=>s+1),0),[refContainerMain,{width:containerWidth,height:containerHeight}]=(0,useMeasure.A)(),onShowTooltip=(0,useCallbackRef.c)(propOnShowTooltip,[propOnShowTooltip]),onShowColumnTooltip=(0,useCallbackRef.c)(propOnShowColumnTooltip,[propOnShowColumnTooltip]),onShowRowTooltip=(0,useCallbackRef.c)(propOnShowRowTooltip,[propOnShowRowTooltip]),onCloseTooltip=(0,useCallbackRef.c)(propOnCloseTooltip,[propOnCloseTooltip]),sheetModelInFlight=(0,react.useRef)(!1);(0,react.useLayoutEffect)((()=>{sheetModelInFlight.current=!0}),[model]);const gridStyleDefaulted=(0,react.useMemo)((()=>{const retValue={...propGridStyle},themeOverrides=retValue.body=CommonUtils.r(propGridStyle.body,{text:{fontFamily:model?.sheetStyle()?.getTheme().fontScheme?.minorFont,fontSize:model?.sheetStyle()?.getDefaultFontSize()}});return retValue.body=CommonUtils.r({fill:"#fff",strokeFill:"#dad8d6",strokeWidth:1,text:{fontWeight:"400",fontStyle:"normal",fill:"#040404"}},themeOverrides),retValue.selection={fill:"rgba(16, 124, 65, 0.1)",strokeFill:"#217346",strokeWidth:2,...propGridStyle.selection},retValue.selectionInactive={...retValue.selection,fill:"rgba(16, 124, 65, 0.1)",strokeFill:"#dad8d6",...propGridStyle.selectionInactive},retValue.selectionRemove={...retValue.selection,fill:"rgba(200, 0, 0, 0.1)",strokeFill:"rgba(200, 0, 0, 1)",...propGridStyle.selectionRemove},retValue.headerSelection={...retValue.selection,...propGridStyle.headerSelection},retValue.headerSelectionInactive={...retValue.selectionInactive,...propGridStyle.headerSelectionInactive},retValue.header=CommonUtils.r(retValue.body,{edgeStrokeFill:"rgb(171, 171, 171)",fill:"#f0f0f0",strokeShadow:void 0,edgeStrokeWidth:1},propGridStyle.header),retValue.headerSelect=CommonUtils.r(retValue.header,{fill:"rgba(16, 124, 65, 0.1)",text:{fill:retValue.headerSelection.strokeFill,fontWeight:"700"}},propGridStyle.headerSelect),retValue.headerSelectAll=CommonUtils.r(retValue.headerSelect,{},propGridStyle.headerSelectAll),retValue}),[propGridStyle,model?.sheetStyle()?.getTheme()]),{body:bodyStyle={},header:headerStyle={},headerSelect:headerStyleSelect={},headerSelectAll:headerStyleSelectAll={}}=gridStyleDefaulted||{},gridRef=(0,react.useRef)(null),[sheetView,setSheetView]=(0,react.useState)((()=>model?.getView())),zoom=(sheetView?.zoomScale??100)/100,gridLinesVisible=(0,react.useMemo)((()=>({vertical:sheetView.showColumnGridlines&&zoom>=.4,horizontal:sheetView.showRowGridlines&&zoom>=.4})),[sheetView?.showColumnGridlines,sheetView?.showRowGridlines,zoom]),gridLineProps=(0,react.useMemo)((()=>{if(sheetView?.gridLineColor)return{strokeDasharray:"1,1"}}),[sheetView?.gridLineColor,gridStyleDefaulted]),[isProtected,setProtected]=(0,react.useState)(!1),[isDrawingsSelected,setIsDrawingsSelected]=(0,react.useState)(sheetView?.drawingSelection.length>0),showColumnHeaders=propShowColumnHeaders??sheetView?.showColumnHeaders,showRowHeaders=propShowRowHeaders??sheetView?.showRowHeaders,headerHeight=showColumnHeaders?20*zoom:headerStyle.edgeStrokeWidth,headerWidth=showRowHeaders?60*zoom:headerStyle.edgeStrokeWidth,width=Math.max(containerWidth,(model?.getColumnHeaders().getDefaultHeaderSize()??60)+headerWidth+1),height=Math.max(containerHeight,(model?.getRowHeaders().getDefaultHeaderSize()??20)+headerHeight+1),refsDrawingArea=(0,react.useRef)(new Map),refRequestDrawingFocus=(0,react.useRef)(null),overlaysDrawings=(0,react.useMemo)((()=>renderDrawing&&0!==model.getDrawingsCount()?[view=>{const refAnchor=react.createRef();return refsDrawingArea.current.set(view.anchor,refAnchor),(0,jsx_runtime.jsx)(DrawingArea,{ref:refAnchor,view,drawingContainer:model,disableResize:isProtected,disableDrag:isProtected,drawingContainerView:model.getView(),renderDrawing,transactionStack:model,onFirstRender:()=>{refRequestDrawingFocus.current&&view.anchor===refRequestDrawingFocus.current.anchor&&refAnchor.current.focusDrawing(refRequestDrawingFocus.current.drawing),refRequestDrawingFocus.current=null},onUnFocus:()=>{refLocal.current.focus()}},"drawing-area")}]:null),[onInvalidateDrawings,model,model.getView(),renderDrawing,isProtected]),onViewportUpdate=(0,useCallbackRef.c)((viewport=>{model&&model.getView()&&(model.getView().topLeft=viewport?{left:viewport.left,top:viewport.top}:null),propOnViewportChange&&propOnViewportChange(viewport)}),[model,propOnViewportChange]),[viewport,setViewport]=(0,react.useState)(),handleViewChange=(0,react.useCallback)((viewport=>{setViewport(viewport),onViewportUpdate(viewport)}),[]),createSheetCellLayout=()=>({getColOffset:index=>model.getColumnHeaders().findOffset(index),getColIndex:offset=>model.getColumnHeaders().findIndex(offset),getRowOffset:index=>model.getRowHeaders().findOffset(index),getRowIndex:offset=>model.getRowHeaders().findIndex(offset)}),[sheetCellLayout,setSheetCellLayout]=(0,react.useState)((()=>createSheetCellLayout())),hiddenRowsAt=(0,useCallbackRef.c)(((index,forward)=>model.getRowHeaders().hiddenHeadersAt(index,forward)),[sheetCellLayout.getRowOffset,sheetCellLayout.getRowIndex]),hiddenColumnsAt=(0,useCallbackRef.c)(((index,forward)=>model.getColumnHeaders().hiddenHeadersAt(index,forward)),[sheetCellLayout.getColOffset,sheetCellLayout.getColIndex]),isContentfulCell=(0,useCallbackRef.c)((cellCoords=>{if(-1===cellCoords.colIndex||-1===cellCoords.rowIndex)return!1;let cell=model.getCell(cellCoords);if(cell?.isContentful())return!0;const merges=model.getMerges([RangeUtils.ug(cellCoords)]);return merges&&merges.length>0&&(cell=model.getCell({rowIndex:merges[0].rowStart,colIndex:merges[0].colStart})),!0===cell?.isContentful()}),[model]),[topLeft,setTopLeft]=(0,react.useState)((()=>model?.getView().topLeft)),[selectionGrid,setSelectionGrid]=(0,react.useState)((()=>toGridSelection(model?.getView().selection))),getMergedRanges=(0,useCallbackRef.c)((range=>model.getMerges([range])),[model]),toFreezeEdges=freezePanes=>{if(!freezePanes||0===freezePanes.coords.colIndex&&0===freezePanes.coords.rowIndex)return null;const retValue={};return freezePanes.coords.colIndex>0&&(retValue[Primitives.tb.Left]={index:freezePanes.coords.colIndex,scrollOffset:freezePanes.topLeft.left}),freezePanes.coords.rowIndex>0&&(retValue[Primitives.tb.Top]={index:freezePanes.coords.rowIndex,scrollOffset:freezePanes.topLeft.top}),retValue},[freezeEdges,setFreezeEdges]=(0,react.useState)((()=>toFreezeEdges(model.getView().freezePanes))),editModeHandler=(0,useEditMode.B)(),handleOnSelectionChange=(0,useCallbackRef.c)((change=>{if((0,helpers.D8)(change,selectionGrid))return;const cellSelection=(gridSelection=>{const cellSelection={activeCoords:gridSelection.activeCoords,activeRangeIndex:gridSelection.activeRangeIndex,ranges:[]};for(let i=0;i<gridSelection.ranges.length;i++)cellSelection.ranges.push(gridSelection.ranges[i]);return cellSelection})(change);model&&(model.getView().selection=cellSelection)}),[model.getView(),selectionGrid]),contentfulCellFinder=(0,useCallbackRef.c)(((activeCoords,_isContentfulCell,_hiddenHeadersAt,direction,first,_limit)=>model.findNextBoundary(activeCoords,direction,first)),[model]),getCellBounds=(0,useCallbackRef.c)((includeHeaders=>model.getCellBounds(includeHeaders)),[model,model.getCellBounds]),[hasFocus,setHasFocus]=(0,react.useState)(!1),[editingCoords,setEditingCoords]=(0,react.useState)(null),selectionBorderColorEffective=gridStyleDefaulted.selection?.strokeFill,refAutoFiller=(0,react.useRef)(),onSelectionDragStart=(0,useCallbackRef.c)((()=>{propOnSelectionDrag?.(selectionGrid)}),[propOnSelectionDrag,selectionGrid]),onSelectionDragEnd=(0,useCallbackRef.c)((async()=>{propOnSelectionDrag?.(null);const mode=editModeHandler.getMode();"formatPainter"===mode?.key&&(await(commandsCopyPaste?.getCommand("pasteFormats")?.execute({})),editModeHandler.setMode(null))}),[editModeHandler,selectionGrid,propOnSelectionDrag]),isCopyOrPasteMode=(0,react.useMemo)((()=>{const mode=editModeHandler.getMode();return"cut"===mode?.key||"copy"===mode?.key}),[editModeHandler]),isTouch="touch"===ReactUtils.th().primaryInput,enabledMouseEdit=!isTouch&&true,disableTouchSelection=null!==editingCoords||isDrawingsSelected,{setActiveCoords,setSelectionRanges,isAllSelected,clearSelections,cursor:selectionCursor,navigate,navigateSelection,commands:commandsSelection,selection:selectionActive,overlay:overlaySelection,...selectionProps}=(0,useSelection.Cd)({gridRef,cellLayout:gridRef.current?.cellLayout,selection:selectionGrid,fillHandleBorderColor:bodyStyle.fill,selectionBackgroundColor:gridStyleDefaulted.selection.fill,selectionBorderColor:gridStyleDefaulted.selection.strokeFill,selectionRemoveBackgroundColor:gridStyleDefaulted.selectionRemove.fill,selectionRemoveBorderColor:gridStyleDefaulted.selectionRemove.strokeFill,disableFillDrag:!(enabledMouseEdit&&selectionGrid.ranges.length<=1&&null===editingCoords&&!isProtected&&(!editModeHandler.getMode()||isCopyOrPasteMode)),disableMoveDrag:isTouch||!(selectionGrid.ranges.length<=1&&null===editingCoords&&!isProtected),disableTouchSelection,onSelectionChange:handleOnSelectionChange,onSelectionDragStart,onSelectionDragEnd,onMoveDragStart:(_from,_e,modifiers)=>{editModeHandler.setMode({key:modifiers.ctrlKey?"dragCopy":"dragMove"})},onMoveDragUpdate:(_from,_e,modifiers)=>{editModeHandler.setMode({key:modifiers.ctrlKey?"dragCopy":"dragMove"})},onMoveDragEnd:(_from,_e)=>{editModeHandler.setMode(null)},onMoveDragDone:async(from,to,e)=>{if(RangeUtils.hC(from,to))return;if(notifier?.showOptions){const rangesOverlap=RangeUtils.z4(to,from);let hasData=!1;for(let i=0;!hasData&&i<rangesOverlap.length;i++){const itemCount=model.countItems(rangesOverlap[i],{[ISheetModel.nW.Content]:1});hasData=itemCount?.[ISheetModel.nW.Content]>0}if(hasData){if("Replace"!==await(notifier?.showOptions({title:"Confirm",description:"There is already data here. Do you want to replace it?",options:["Replace","Cancel"],defaultOption:"Replace"})))return}}const hideBusy=await(notifier?.showBusy?.("Move Cells"));try{model.getRange(from).copyTo(model.getRange(to),{isCut:!e.ctrlKey})}catch(error){notifier?.showError?.(error)}finally{hideBusy?.()}},isContentfulCell,contentfulCellFinder,hiddenRowsAt,hiddenColumnsAt,mergedRanges:getMergedRanges,getCellBounds,canSelectionSpanMergedCells:range=>{const maxCellBounds=model.getMaxCellBounds(),isColumnAll=range.colStart===maxCellBounds.colStart&&range.colEnd===maxCellBounds.colEnd,isRowAll=range.rowStart===maxCellBounds.rowStart&&range.rowEnd===maxCellBounds.rowEnd;return isColumnAll||isRowAll},onFill:(range,fillBounds,direction,amount)=>new Promise((resolve=>{Promise.resolve(notifier?.showBusy?.("Auto Fill")).then((hideBusy=>{try{model.autoFill([{template:range,amount}],direction)}catch(error){notifier?.showError?.(error)}finally{refAutoFiller.current=null,resolve(),hideBusy?.()}}))})),onFillPreview:(template,fillBounds,direction,amount)=>{if(gridRef.current){editModeHandler.setMode({key:"fill"});try{refAutoFiller.current?.direction!==direction&&(refAutoFiller.current={filler:model.autoFill([{template,amount}],direction,{previewOnly:!0}),direction});const currentFiller=refAutoFiller.current?.filler,lastPair=currentFiller?.(amount);if(!lastPair)return;const rangeAndUpdate=SheetUtils.$e(lastPair,model.getMaxCellBounds());if(!rangeAndUpdate)return;const lastRange=rangeAndUpdate.range,lastUpdate=rangeAndUpdate.update,point=gridRef.current.getRelativePointFromOffset(0,0),scrollPosition=gridRef.current.getScrollPosition(),cellLayout=gridRef.current.cellLayout;let x=0,y=0,placement=ITooltip.H.Bottom;if(direction===Primitives.CF.Down){x=cellLayout.getColOffset(lastRange.colEnd+1)-point.x-scrollPosition.left;const start=cellLayout.getRowOffset(lastRange.rowEnd),end=cellLayout.getRowOffset(lastRange.rowEnd+1);y=end-(end-start)/2-point.y-scrollPosition.top,placement=ITooltip.H.Right}else if(direction===Primitives.CF.Right){y=cellLayout.getRowOffset(lastRange.rowEnd+1)-point.y-scrollPosition.top;const start=cellLayout.getColOffset(lastRange.colEnd),end=cellLayout.getColOffset(lastRange.colEnd+1);x=end-(end-start)/2-point.x-scrollPosition.left,placement=ITooltip.H.Bottom}else if(direction===Primitives.CF.Up){x=cellLayout.getColOffset(lastRange.colEnd+1)-point.x-scrollPosition.left;const start=cellLayout.getRowOffset(lastRange.rowStart),end=cellLayout.getRowOffset(lastRange.rowStart+1);y=end-(end-start)/2-point.y-scrollPosition.top,placement=ITooltip.H.Right}else if(direction===Primitives.CF.Left){y=cellLayout.getRowOffset(lastRange.rowEnd+1)-point.y-scrollPosition.top;const start=cellLayout.getColOffset(lastRange.colStart),end=cellLayout.getColOffset(lastRange.colStart+1);x=end-(end-start)/2-point.x-scrollPosition.left,placement=ITooltip.H.Bottom}if(null==lastUpdate?.value)return;let display=model.createCellTemplate(lastUpdate,{colIndex:lastRange.colStart,rowIndex:lastRange.rowStart}).formattedValue.displayText;display&&onShowTooltip?.({anchor:{x,y},display,placement})}catch(error){notifier?.showError?.(error)}}},onFillDone:()=>{refAutoFiller.current=null,editModeHandler.setMode(null),onCloseTooltip?.()}}),[controlledStateAndCoords,setControlledStateAndCoords]=(0,react.useState)(null),stateAndCoords=void 0!==propEditStateAndCoords?propEditStateAndCoords:controlledStateAndCoords,handleSubmitEdit=(0,useCallbackRef.c)((()=>{let strValue=stateAndCoords.editState.dirty??"";if(void 0!==stateAndCoords.editState.dirty){const setDescription={parseTextAsValue:!0,description:`Typing '${strValue.substring(0,36)+(strValue.length>36?"…":"")}' into ${AddressUtils.ho(stateAndCoords.coords)}`};0===strValue.length&&(strValue=null),stateAndCoords.sheetModel.setCellPairs([{address:stateAndCoords.coords,update:strValue}],setDescription)}setControlledStateAndCoords(null),propOnEditStateAndCoordsChange?.(null)}),[model,stateAndCoords]),[commandsEditor,setCommandsEditor]=(0,react.useState)(null),sheetEditor=(0,react.useCallback)(((props,coords)=>propGetCellEditor?propGetCellEditor(props,coords):model?(0,jsx_runtime.jsx)(SheetCellEditor.DV,{...props,sheetModel:model,bodyStyle,activeCoords:coords,onChangeEdit:editState=>{const newStateAndCoords={sheetModel:model,coords,editState};setControlledStateAndCoords?.(newStateAndCoords),propOnEditStateAndCoordsChange?.(newStateAndCoords)},editState:stateAndCoords.editState,onCommandsChange:commands=>{setCommandsEditor(commands)}}):null),[model,bodyStyle,propGetCellEditor,stateAndCoords,editingCoords]),[activeEditorCell,setActiveEditorCell]=(0,react.useState)((()=>model.getCell(selectionActive?.activeCoords))),getEditorCellBoundsRange=(0,useCallbackRef.c)((coords=>{let overflowed=model.getOverflows(RangeUtils.ug(coords));if(!overflowed||0===overflowed.length)return null;let overflow=null;for(let i=0;!overflow&&i<overflowed.length;i++){let testOverflow=overflowed[i];coords.colIndex===testOverflow.coords.colIndex&&coords.rowIndex===testOverflow.coords.rowIndex&&(overflow=testOverflow)}return overflow?{colStart:coords.colIndex-overflow.leftOverflowIndex,colEnd:coords.colIndex+overflow.rightOverflowIndex,rowStart:coords.rowIndex,rowEnd:coords.rowIndex}:null}),[model]);(0,react.useEffect)((()=>{setActiveEditorCell(model.getCell(selectionActive?.activeCoords))}),[model,selectionActive]);const[shownProtectError,setShownProtectError]=(0,react.useState)(!1);(0,react.useEffect)((()=>{setShownProtectError(!1)}),[model.getProtection()]);const showProtectedError=(0,useCallbackRef.c)((()=>{shownProtectError||(setShownProtectError(!0),notifier.inform?.((0,jsx_runtime.jsxs)("span",{children:["This sheet is protected.",(0,jsx_runtime.jsx)("br",{}),"To make a change, unprotect the sheet. You might be requested to enter a password."]}),{type:Notifier._.Error}))}),[notifier,shownProtectError]),editorProps=(0,react.useMemo)((()=>{if(null===editingCoords)return null;let style=activeEditorCell?.style.fill?.asCSS(gridStyleDefaulted.body.isDarkMode);return"none"!==style.background&&"transparent"!==style.background||(style=model.sheetStyle().getNormalStyle().fill.asCSS(gridStyleDefaulted.body.isDarkMode)),"none"!==style.background&&"transparent"!==style.background||(style={background:gridStyleDefaulted.body.fill}),{style}}),[activeEditorCell?.style.fill,gridStyleDefaulted,model,editingCoords]),{overlay:overlayEditor,startEdit,submitEdit,cancelEdit,onKeyboardEvent:overlayEditorOnKeyEvent,onPointerEvent:overlayEditorOnPointerEvent}=(0,useKeyboardEditorOverlay.m)({gridRef,activeCoords:selectionActive.activeCoords,getCellEditor:sheetEditor,canEdit:()=>{const canEdit=null===model.getProtection();return canEdit||showProtectedError(),canEdit},onBeforeStartEdit:coords=>{const cellCurrent=model.getCell(coords),editState=(0,SheetCellEditor.ON)(cellCurrent),newStateAndCoords={sheetModel:model,coords,editState:Object.freeze(editState)};setControlledStateAndCoords(newStateAndCoords),propOnEditStateAndCoordsChange?.(newStateAndCoords)},onStartEdit:coords=>{setEditingCoords(coords),invalidate(coords)},onSubmitEdit:handleSubmitEdit,onDoneEdit:coords=>{invalidate(coords??null),setControlledStateAndCoords(null),setEditingCoords(null),propOnEditStateAndCoordsChange?.(null)},onNavigate:navigate,onNavigateSelection:navigateSelection,containerProps:editorProps,borderStrokeFill:gridStyleDefaulted.selection?.strokeFill,borderStrokeWidth:selectionGrid?.ranges?.length>1?1:2,alignment:activeEditorCell?.renderHorizontalAlignment??types.OD.Left,getCellBoundsRange:getEditorCellBoundsRange});(0,react.useEffect)((()=>{sheetModelInFlight.current||null!==editingCoords&&handleSubmitEdit()}),[model]),(0,react.useEffect)((()=>{const mode=editModeHandler.getMode();let propEditMode=null;void 0!==stateAndCoords?.editState?.editMode&&(propEditMode=stateAndCoords?.editState?.editMode?"edit":"enter"),propEditMode?editModeHandler.setMode({key:propEditMode}):mode&&editModeHandler.setMode(null)}),[stateAndCoords?.editState?.editMode]);const getCellAt=(0,react.useMemo)((()=>coords=>model.getCell(coords)),[model]),getBorderAt=(0,useCallbackRef.c)(((value,_index)=>{let cell=null,overflowedCell=null;return value.cell?(cell=value.cell,(value.leftOverflowIndex>0||value.rightOverflowIndex>0||value.colSpan>1)&&(overflowedCell=value)):cell=value,cell.style.border}),[getCellAt]),getOverflowCells=(0,useCallbackRef.c)((view=>{const range=view.visibleCellRange;if(!range)return[];let overflowed=model.getOverflows(range);const overflowsVisible=[];if(0===overflowed.length)return overflowsVisible;const mergesView=model.getMerges([range]),getCoordsAsRange=coords=>{if(0===mergesView.length)return null;const asRange=RangeUtils.ug(coords),merges=model.getMerges([RangeUtils.ug(coords)]);return 0===merges.length?asRange:merges[0]},offsetCache=[];for(let overflowOffset=0;overflowOffset<overflowed.length;overflowOffset++){let overflow=overflowed[overflowOffset];const coords=overflow.coords,leftOverflowIndex=overflow.leftOverflowIndex,rightOverflowIndex=overflow.rightOverflowIndex,range={rowStart:coords.rowIndex,rowEnd:coords.rowIndex,colStart:coords.colIndex-leftOverflowIndex,colEnd:coords.colIndex+rightOverflowIndex+overflow.colSpan-1};if(leftOverflowIndex>0){let nextContent=contentfulCellFinder(coords,isContentfulCell,hiddenColumnsAt,Primitives.CF.Left,!0,Math.max(overflow.coords.colIndex-leftOverflowIndex,hiddenColumnsAt(0,!0)-1)-1);0!==nextContent||isContentfulCell?.({colIndex:nextContent,rowIndex:coords.rowIndex})||(nextContent-=1);let toColumn=Math.max(nextContent+1,overflow.coords.colIndex-leftOverflowIndex);const rangeToColumn=getCoordsAsRange({colIndex:toColumn,rowIndex:coords.rowIndex});if(rangeToColumn&&(toColumn=rangeToColumn.colEnd),toColumn!==overflow.coords.colIndex-leftOverflowIndex){range.colStart=toColumn;const offsetColIndex=offsetCache[coords.colIndex]=offsetCache[coords.colIndex]??view.cellLayout.getColOffset(coords.colIndex),newLeftOverflowOffset=(offsetCache[toColumn]=offsetCache[toColumn]??view.cellLayout.getColOffset(toColumn))-offsetColIndex,newAnchorBounds={...overflow.anchorBounds,x:0!==newLeftOverflowOffset?-newLeftOverflowOffset:0};overflow={...overflow,anchorBounds:newAnchorBounds}}}if(rightOverflowIndex>0){let nextContent=contentfulCellFinder(coords,isContentfulCell,hiddenColumnsAt,Primitives.CF.Right,!0,Math.min(overflow.coords.colIndex+rightOverflowIndex,columnCount-hiddenColumnsAt(columnCount,!1))+1);nextContent!==columnCount-1||isContentfulCell?.({colIndex:nextContent,rowIndex:coords.rowIndex})||(nextContent+=1);let toColumn=Math.min(nextContent-1,overflow.coords.colIndex+rightOverflowIndex);const rangeToColumn=getCoordsAsRange({colIndex:toColumn,rowIndex:coords.rowIndex});rangeToColumn&&(toColumn=rangeToColumn.colStart),toColumn!==overflow.coords.colIndex+rightOverflowIndex&&(range.colEnd=toColumn)}overflowsVisible.push({coords,range,value:overflow})}return overflowsVisible}),[model,editingCoords,stateAndCoords?.coords,contentfulCellFinder,isContentfulCell]),selectionAsRanges=(0,react.useMemo)((()=>SheetUtils.jS(selectionGrid)),[selectionGrid]),element=(0,react.useCallback)((()=>gridRef.current?.stage),[]),{commands:commandsCopyPaste,overlays:overlaysCopyPaste}=useSheetCopyPaste({element,sheetModel:model,copyForegroundColor:gridStyleDefaulted.selection.strokeFill,copyBackgroundColor:bodyStyle.fill,cutForegroundColor:gridStyleDefaulted.selectionRemove.strokeFill,cutBackgroundColor:bodyStyle.fill,ranges:selectionAsRanges,notifier,onPaste:item=>{const asSheetClipboardItem=item;if(!0!==asSheetClipboardItem.isCellSource?.())return;let shouldClearEdit="cut"===editModeHandler.getMode()?.key||asSheetClipboardItem.isCut?.();if(!shouldClearEdit&&"copy"===editModeHandler.getMode()?.key){const cellsFrom=asSheetClipboardItem.rangeFrom(),cellsTo=selectionAsRanges;let intersecting=!1;if(!intersecting&&asSheetClipboardItem.name?.()===model.getName())for(let i=0;!intersecting&&i<cellsTo.length;i++)intersecting=RangeUtils.IP(cellsFrom,cellsTo[i]);shouldClearEdit=intersecting}shouldClearEdit&&editModeHandler.setMode(null)}}),modeCursor=(0,react.useMemo)((()=>{const mode=editModeHandler.getMode();if("formatPainter"===mode?.key){const width=30,height=22;return`url("data:image/svg+xml,%3Csvg width='${width}' height='${height}' viewBox='0 0 ${width} ${height}' xmlns='http://www.w3.org/2000/svg' %3E%3Cg%3E%3Cpath d='${"M 26.737611,2.811068 V 2.0241451 c 0,-0.4328075 -0.354115,-0.7869227 -0.786923,-0.7869227 h -9.443074 c -0.432808,0 -0.786923,0.3541152 -0.786923,0.7869227 v 3.1476914 c 0,0.4328076 0.354115,0.7869235 0.786923,0.7869235 h 9.443074 c 0.432808,0 0.786923,-0.3541159 0.786923,-0.7869235 V 4.3849137 h 0.786923 v 3.1476915 h -7.869229 v 8.6561518 c 0,0.432808 0.354116,0.786923 0.786923,0.786923 h 1.573846 c 0.432807,0 0.786923,-0.354115 0.786923,-0.786923 V 9.1064513 H 29.09838 V 2.811068 Z M 10.714339,6.2116849 c -1.60877,0.0017 -3.2175361,0.00425 -4.8263048,0.00609 0.0012,1.5756989 0.00158,3.1513905 0.00244,4.7270891 -1.5978311,0.0017 -3.1956617,0.0034 -4.7934919,0.0043 0.00335,1.740011 0.00655,3.480012 0.00988,5.220023 1.5954589,0 3.1909181,0 4.7863775,0 -0.0017,1.606793 -0.00353,3.213585 -0.0051,4.820375 1.7440936,0.0016 3.4881881,0.0033 5.2322842,0.005 -0.0014,-1.608503 -0.0018,-3.217015 -0.0028,-4.825519 1.58518,0 3.17036,0 4.755543,0 0.0033,-1.741851 0.0073,-3.483705 0.01072,-5.225556 -1.58808,0 -3.176158,0 -4.764238,0 0,-1.5775391 0,-3.1550792 0,-4.7326117 -0.135065,1.3e-4 -0.270128,1.982e-4 -0.40519,4.047e-4 z"}' stroke='${"black"}' fill='${"white"}'/%3E%3C/g%3E%3C/svg%3E%0A") 7 12, pointer`}return null}),[selectionCursor,editModeHandler]),[overlaysHeaders,setOverlaysHeaders]=(0,react.useState)(null),refHasOverlayHeaders=(0,react.useRef)(!1),[overlays,setOverlays]=(0,react.useState)([]),prevOverlays=(0,react.useRef)(),[highlightCorner,setHighlightCorner]=(0,react.useState)(!1);(0,react.useEffect)((()=>{if(!selectionGrid||!gridRef.current)return void setHighlightCorner(!1);const topLeftCoord=gridRef.current.getViewFromOffset(-topLeft.left,-topLeft.top).getCellCoordsFromOffset(-topLeft.left,-topLeft.top);if(!topLeftCoord)return void setHighlightCorner(!1);let isHighlightCorner=selectionGrid.activeCoords.colIndex===topLeftCoord.colIndex||selectionGrid.activeCoords.rowIndex===topLeftCoord.rowIndex;for(let i=0;!isHighlightCorner&&selectionGrid.ranges&&i<selectionGrid.ranges.length;i++)isHighlightCorner=isHighlightCorner||selectionGrid.ranges[i].colStart<=topLeft.left&&selectionGrid.ranges[i].colEnd>=topLeft.left||selectionGrid.ranges[i].rowStart<=topLeft.top&&selectionGrid.ranges[i].rowEnd>=topLeft.top;setHighlightCorner(isHighlightCorner)}),[selectionGrid,topLeft?.left,topLeft?.top,sheetCellLayout]);const[scrollPointLeft,setScrollPointLeft]=(0,react.useState)(Primitives.CH),[scrollPointTop,setScrollPointTop]=(0,react.useState)(Primitives.CH);(0,react.useEffect)((()=>{setScrollPointLeft({left:topLeft?.left,top:0})}),[topLeft?.left]),(0,react.useEffect)((()=>{setScrollPointTop({left:0,top:topLeft?.top})}),[topLeft?.top]);const selectionMain=(0,react.useMemo)((()=>({setActiveCoords,setSelectionRanges,isAllSelected,clearSelections,commands:commandsSelection,overlay:overlaySelection,selection:selectionActive,navigate,navigateSelection,...selectionProps})),[selectionActive]);useModelEventListener(model.getColumnHeaders(),ISheetHeadersModel.k.Header,(()=>{setSheetCellLayout((prev=>({getRowOffset:prev.getRowOffset,getRowIndex:prev.getRowIndex,getColOffset:index=>model.getColumnHeaders().findOffset(index),getColIndex:offset=>model.getColumnHeaders().findIndex(offset)})))})),useModelEventListener(model.getRowHeaders(),ISheetHeadersModel.k.Header,(()=>{setSheetCellLayout((prev=>({getRowOffset:index=>model.getRowHeaders().findOffset(index),getRowIndex:offset=>model.getRowHeaders().findIndex(offset),getColOffset:prev.getColOffset,getColIndex:prev.getColIndex})))})),(0,useSheetViewListener.y)(model?.getView(),{onSelectionChange:_update=>{const newGridSelection=toGridSelection(model.getView().selection);setSelectionGrid(newGridSelection)},onFreezeSplitChange:_update=>{setFreezeEdges(toFreezeEdges(model.getView().freezePanes))},onTopLeftChange:update=>{setTopLeft(update)},onDrawingSelectionChange:()=>{setIsDrawingsSelected(model.getView().drawingSelection.length>0)}}),(0,useSheetListener.t)(model,{onCellsChange:()=>{if(invalidate(),setActiveEditorCell(model&&selectionActive?.activeCoords?model.getCell(selectionActive?.activeCoords):null),stateAndCoords){const newStateAndCoords={...stateAndCoords,editState:{...stateAndCoords.editState,clean:selectionGrid.activeCoords?model.getCell(selectionGrid.activeCoords):model.emptyCell()}};setControlledStateAndCoords(newStateAndCoords),propOnEditStateAndCoordsChange?.(newStateAndCoords)}},onMergesChange:()=>{setSheetCellLayout(createSheetCellLayout())},onProtectionChange:()=>{setProtected(null!==model.getProtection()),invalidateDrawings()},onViewChange(){setSheetView(model.getView()),setSheetCellLayout(createSheetCellLayout())},onStyleChange:()=>{invalidate()},onDrawingsChange:()=>{invalidateDrawings()},onOperation:operationName=>notifier?.showBusy?.(operationName)}),(0,react.useLayoutEffect)((()=>{invalidate()}),[sheetCellLayout,gridStyleDefaulted]);const maxCellBounds=model.getMaxCellBounds(),columnCount=maxCellBounds.colEnd+1,rowCount=maxCellBounds.rowEnd+1,columnHeaderPropsMerged=(0,react.useMemo)((()=>{const showResizeOverlays=(index,sizePX)=>{refHasOverlayHeaders.current=!0,setOverlaysHeaders([view=>{if(!view.clipBounds(view.getCellRangeBounds({rowStart:0,rowEnd:rowCount,colStart:index,colEnd:index})))return;const cellLayout=view.cellLayout,x=Math.max(0,cellLayout.getColOffset(index)),right=Math.min(view.bounds.x+view.bounds.width,cellLayout.getColOffset(index+1));if(null!==sizePX&&(view.anchor===Primitives.tb.Left||view.anchor===Primitives.tb.Center||view.anchor===Primitives.tb.Right)){const asPxs=CommonUtils.k_(sizePX*CommonUtils.aB(),0),asUnit=CommonUtils.k_(model?.getColumnWidthAsFontUnit(sizePX/zoom),2).toFixed(2),display="Width: "+(sizePX?asUnit+" ("+asPxs+" pixels)":"Hidden"),point=refColumnHeaders.current.elementGrid().getRelativePointFromOffset(0,0),y=0-point.y,bottom=0-point.y+headerHeight,anchor={x:x-(point.x-view.bounds.x),y,width:right-x,height:bottom-y};requestAnimationFrame((()=>{refHasOverlayHeaders.current&&onShowColumnTooltip?.({anchor,display})}))}const linePoints=[0,0,0,view.bounds.height],propsBefore={style:{boxShadow:`0.5px 0px 0px 0px ${propGridStyle?.body?.fill}`},pathProps:{stroke:selectionBorderColorEffective}},boundsBefore={x:x-1,y:0,width:1,height:view.bounds.height},propsAfter={style:{boxShadow:`-0.5px 0px 0px 0px ${propGridStyle?.body?.fill}`},pathProps:{stroke:selectionBorderColorEffective}},boundsAfter={x:right-1,y:0,width:1,height:view.bounds.height};return(0,jsx_runtime.jsxs)(react.Fragment,{children:[(0,jsx_runtime.jsx)(SVG.L,{linePoints,bounds:boundsBefore,...propsBefore}),(0,jsx_runtime.jsx)(SVG.L,{linePoints,bounds:boundsAfter,...propsAfter})]},"resize-dividers")}])};let trans=null;return{onResizeHeadersStart:(index,prevSize)=>{trans&&console.warn("trans already exists",index),trans=model.pushTransaction("Resize Column(s)"),showResizeOverlays(index,prevSize)},onResizeHeaders:(index,newSize,_prevSize)=>{showResizeOverlays(index,newSize)},onResizeHeadersDown:(index,size)=>{showResizeOverlays(index,size)},onResizeHeadersEnd:(_index,_newSize)=>{trans?.commit(),trans=null,requestAnimationFrame((()=>onCloseTooltip?.())),refHasOverlayHeaders.current=!1,setOverlaysHeaders(null)},onResizeHeadersUp:_index=>{requestAnimationFrame((()=>onCloseTooltip?.())),refHasOverlayHeaders.current=!1,setOverlaysHeaders(null)},...columnHeaderProps}}),[model,columnHeaderProps,headerHeight,overlaysHeaders]),rowHeaderPropsMerged=(0,react.useMemo)((()=>{const showResizeOverlays=(index,sizePX)=>{refHasOverlayHeaders.current=!0,setOverlaysHeaders([view=>{if(!view.clipBounds(view.getCellRangeBounds({rowStart:index,rowEnd:index,colStart:0,colEnd:columnCount})))return;const cellLayout=view.cellLayout,y=Math.max(0,cellLayout.getRowOffset(index)),bottom=Math.min(view.bounds.y+view.bounds.height,cellLayout.getRowOffset(index+1));if(null!==sizePX&&(view.anchor===Primitives.tb.Top||view.anchor===Primitives.tb.Center||view.anchor===Primitives.tb.Bottom)){const pxScale=Math.floor(10*CommonUtils.aB())/10,asPxs=CommonUtils.k_(sizePX*pxScale,0),asUnit=CommonUtils.k_(asPxs/zoom/(model?.getRowHeaders().scaleFactor()*CommonUtils.aB()),2).toFixed(2),display="Height: "+(sizePX?asUnit+" ("+asPxs+" pixels)":"Hidden"),point=refRowHeaders.current.elementGrid().getRelativePointFromOffset(0,0),x=0-point.x,right=0-point.x+headerWidth,anchor={x,y:y-(point.y-view.bounds.y),width:right-x,height:bottom-y};requestAnimationFrame((()=>{refHasOverlayHeaders.current&&onShowRowTooltip?.({anchor,display})}))}const linePoints=[0,0,view.bounds.width,0],propsBefore={style:{boxShadow:`0px 0.5px 0px 0px ${propGridStyle?.body?.fill}`},pathProps:{stroke:selectionBorderColorEffective}},boundsBefore={x:0,y:y-1,width:view.bounds.width,height:1},propsAfter={style:{boxShadow:`0px -0.5px 0px 0px ${propGridStyle?.body?.fill}`},pathProps:{stroke:selectionBorderColorEffective}},boundsAfter={x:0,y:bottom-1,width:view.bounds.width,height:1};return(0,jsx_runtime.jsxs)(react.Fragment,{children:[(0,jsx_runtime.jsx)(SVG.L,{linePoints,bounds:boundsBefore,...propsBefore}),(0,jsx_runtime.jsx)(SVG.L,{linePoints,bounds:boundsAfter,...propsAfter})]},"resize-dividers")}])};let trans=null;return{onResizeHeadersStart:(index,prevSize)=>{trans=model.pushTransaction("Resize Row(s)"),showResizeOverlays(index,prevSize)},onResizeHeaders:(index,newSize,_prevSize)=>{showResizeOverlays(index,newSize)},onResizeHeadersDown:(index,size)=>{showResizeOverlays(index,size)},onResizeHeadersEnd:(_index,_newSize)=>{trans?.commit(),trans=null,requestAnimationFrame((()=>onCloseTooltip?.())),refHasOverlayHeaders.current=!1,setOverlaysHeaders(null)},onResizeHeadersUp:_index=>{requestAnimationFrame((()=>onCloseTooltip?.())),refHasOverlayHeaders.current=!1,setOverlaysHeaders(null)},...rowHeaderProps}}),[model,rowHeaderProps,headerWidth]),refLocal=(0,useImperativeHandleElement.c)(refForwarded,(()=>{const focusSheet=options=>{model?.getView()&&(model.getView().drawingSelection=[]),refRequestDrawingFocus.current=null,gridRef?.current?.focus(options)},focusDrawing=(drawing=null)=>{if(drawing||(drawing=model?.getView().drawingSelection[0]),!drawing)return!1;const anchor=drawing.getAnchor(),view=gridRef.current?.getViewFromCoords({colIndex:anchor.colStart,rowIndex:anchor.rowStart});if(!view)return!1;model?.getView().selectDrawing(drawing);let drawingArea=refsDrawingArea.current?.get(view.anchor);return drawingArea?.current?(drawingArea.current.focusDrawing(drawing),!0):(refRequestDrawingFocus.current={drawing,anchor:view.anchor},!1)},retValue={elementGrid:()=>gridRef.current,elementRowHeader:()=>refRowHeaders.current,elementColHeader:()=>refColumnHeaders.current,rowHeaderHeight:()=>headerHeight,colHeaderWidth:()=>headerWidth,startEdit,submitEdit,cancelEdit,isEditing:null!==editingCoords,focus:options=>{let focused=!1;model?.getView().drawingSelection.length>0&&(focused=focusDrawing()),focused||focusSheet(options)},focusSheet,focusDrawing,contains:element=>gridRef?.current?.contains?.(element),navigate,navigateSelection,invalidate,isSheet:()=>!0,getModel:()=>model};return retValue}),[model]),refRowHeaders=(0,react.useRef)(null),gridRowHeader=(0,react.useMemo)((()=>(0,jsx_runtime.jsx)("div",{tabIndex:-1,style:{position:"relative",flex:"0",top:`${headerHeight+1}px`,width:`${headerWidth+headerStyle.edgeStrokeWidth}px`,minWidth:`${headerWidth+headerStyle.edgeStrokeWidth}px`,borderRight:`solid ${headerStyle.edgeStrokeWidth}px ${headerStyle.edgeStrokeFill}`,height:`calc(100% - ${headerHeight}px)`,boxSizing:"border-box",zIndex:"2"},children:(0,jsx_runtime.jsx)("div",{style:{position:"relative",width:headerWidth-headerStyle.edgeStrokeWidth+"px",minWidth:headerWidth-headerStyle.edgeStrokeWidth+"px"},children:(0,jsx_runtime.jsx)(SheetHeaders,{ref:refRowHeaders,sheet:refLocal.current,gridRef,direction:HeaderDirection.ROWS,headerCount:rowCount,freezeStart:freezeEdges?.[Primitives.tb.Top],oppositeSize:headerWidth-headerStyle.edgeStrokeWidth,containerWidth:headerWidth-headerStyle.edgeStrokeWidth,containerHeight:height,sheetHeadersModel:model.getRowHeaders(),selectionMain,gridStyle:gridStyleDefaulted,verticalPadding:Math.max(0,Math.floor(model.sheetStyle().getNormalStyle().font.size/10)),scrollPoint:scrollPointTop,onSheetContextMenu:propOnSheetContextMenu,onSelectionStart:onSelectionDragStart,onSelectionEnd:onSelectionDragEnd,...rowHeaderPropsMerged})})})),[rowCount,headerWidth,headerHeight,height,model,scrollPointTop,freezeEdges?.[Primitives.tb.Top],gridStyleDefaulted,true,propOnSheetContextMenu,headerStyle.fill,selectionMain,rowHeaderProps]),refColumnHeaders=(0,react.useRef)(null),gridColumnHeader=(0,react.useMemo)((()=>(0,jsx_runtime.jsx)("div",{style:{position:"relative",left:"0px",width:"100%",height:`${headerHeight+headerStyle.edgeStrokeWidth}px`,minHeight:`${headerHeight+headerStyle.edgeStrokeWidth}px`,borderBottom:`solid ${headerStyle.edgeStrokeWidth}px ${headerStyle.edgeStrokeFill}`,boxSizing:"border-box",zIndex:"1"},children:(0,jsx_runtime.jsx)("div",{tabIndex:-1,style:{position:"relative",height:headerHeight-headerStyle.edgeStrokeWidth+"px",minHeight:headerHeight-headerStyle.edgeStrokeWidth+"px"},children:(0,jsx_runtime.jsx)(SheetHeaders,{ref:refColumnHeaders,sheet:refLocal.current,gridRef,direction:HeaderDirection.COLS,headerCount:columnCount,freezeStart:freezeEdges?.[Primitives.tb.Left],oppositeSize:headerHeight-headerStyle.edgeStrokeWidth,containerWidth:width,containerHeight:headerHeight-headerStyle.edgeStrokeWidth,sheetHeadersModel:model.getColumnHeaders(),selectionMain,gridStyle:gridStyleDefaulted,scrollPoint:scrollPointLeft,onSheetContextMenu:propOnSheetContextMenu,onSelectionStart:onSelectionDragStart,onSelectionEnd:onSelectionDragEnd,...columnHeaderPropsMerged})})})),[columnCount,headerHeight,width,model,scrollPointLeft,freezeEdges?.[Primitives.tb.Left],gridStyleDefaulted,headerStyle.fill,true,propOnSheetContextMenu,selectionMain,columnHeaderProps]),getCellRenderer=(0,useCallbackRef.c)((props=>{const{value,...rest}=props;let cell=null,overflowedCell=null,hideCoords=editingCoords;if(value.cell?(cell=value.cell,(value.leftOverflowIndex>0||value.rightOverflowIndex>0||value.colSpan>1)&&(overflowedCell=value),!hideCoords||hideCoords.colIndex===value.coords.colIndex&&hideCoords.rowIndex===value.coords.rowIndex||(hideCoords=null)):cell=value,!cell){console.warn("no cell",value);const range=props.range;if(cell=model.getCell({rowIndex:range.rowStart,colIndex:range.colStart}),cell.isEmpty())return null}let onLinkMouseDown=null;cell.hyperlink&&(onLinkMouseDown=e=>{0===e.button&&(e.stopPropagation(),e.preventDefault(),cell.hyperlink.address.startsWith("#")?onGoto?.(cell.hyperlink.address.substring(1)):window.open(cell.hyperlink.address,"_blank"))}),hideCoords&&hideCoords.colIndex===props.range.colStart&&hideCoords.rowIndex===props.range.rowStart&&(cell=cell.cloneWithUpdate({value:null}));const tables=model.getTables(props.range);if(tables.length>0){const table=tables[0],tableStyle=table.getTableStyle(),anchorCoords={rowIndex:props.range.rowStart,colIndex:props.range.colStart},renderStyle=tableStyle.getCellStyleAt(table,anchorCoords,cell.style);cell=cell.cloneWithUpdate({style:renderStyle})}return(0,jsx_runtime.jsx)(SheetCellRenderer,{...rest,docTheme:model.sheetStyle().getTheme(),bodyStyle,showFormulas:sheetView.showFormulas,showZeros:sheetView.showZeros,overflowedCell,onLinkMouseDown,value:cell})}),[model,sheetCellLayout,bodyStyle,editingCoords,sheetView?.showFormulas,sheetView.showZeros,stateAndCoords,onGoto]),invalidate=(0,react.useCallback)((coords=>{sheetModelInFlight.current||(invalidateMainGrid?.(),gridRef?.current?.invalidate(coords))}),[]),selectAllBorder=isAllSelected?selectionBorderColorEffective:headerStyleSelect.fill,selectAllFill=isAllSelected?headerStyleSelectAll.fill:headerStyleSelect.fill,commandTarget=(0,react.useCallback)((()=>gridRef.current),[]),getViewport=(0,useCallbackRef.c)((()=>viewport),[viewport]),sheetCommands=useSheetCommands({sheetModel:model,onRepeatCommandChange:propOnRepeatCommandChange,bodyStyle,commandsCopyPaste,commandTarget,cellSelection:selectionGrid,notifier,onStartEdit:startEdit,onGoto,getViewport}),drawingCommands=function useDrawingCommands(props){const{drawingContainer,drawingContainerView,transactionStack,commandTarget,onRepeatCommandChange:propsOnRepeatCommandChange,commandDependencies,commandsCopyPaste,notifier}={...props},editModeHandler=(0,useEditMode.B)();(0,react.useRef)(editModeHandler.getMode()).current=editModeHandler.getMode();const doCommand=(0,useCallbackRef.c)((async(command,callback,descriptionRepeat=null,clearEditMode=!0)=>{const waitStatusCallback=async()=>{const hideBusy=await Promise.resolve(notifier?.showBusy?.(command.label()));try{await callback();const descriptionEffective=descriptionRepeat??command?.label?.();if(propsOnRepeatCommandChange){let commandRepeat=null;command&&!1!==descriptionEffective&&(commandRepeat=new Command.a2(command.key(),commandTarget,{label:descriptionEffective,description:descriptionEffective},waitStatusCallback)),propsOnRepeatCommandChange(commandRepeat)}hideBusy?.(),clearEditMode&&editModeHandler.setMode(null)}catch(error){hideBusy?.(),notifier?.showError?.(error)}};await waitStatusCallback()}),[propsOnRepeatCommandChange,notifier]),[currentRender,forceRender]=(0,react.useReducer)((s=>s+1),0),updateDrawings=(0,useCallbackRef.c)(((command,update)=>{if(!drawingContainerView)return;const selectedDrawings=drawingContainerView.drawingSelection;if(0===selectedDrawings.length)return;let subject="Drawings";if(1===selectedDrawings.length){const model=selectedDrawings[0];subject=CommonUtils.ZH(model.type)??"Drawing"}const description=`${command.label()} ${subject}`;doCommand(command,(()=>{let trans=null;transactionStack&&(trans=transactionStack.pushTransaction(description));const selectedDrawings=drawingContainerView.drawingSelection;if(0!==selectedDrawings.length){for(let i=0;i<selectedDrawings.length;i++){const model=selectedDrawings[i];update(model)}trans?.commit()}}))}),[drawingContainerView,transactionStack]),[activeDrawing,setActiveDrawing]=(0,react.useState)(drawingContainerView.drawingSelection[0]??null),[isProtected,setProtected]=(0,react.useState)(!activeDrawing||activeDrawing.isProtected()),commands=(0,react.useMemo)((()=>{let drawingCommands=new CommandMap.yc([new Command.uB("moveToFront",commandTarget,{label:"Bring to Front",description:"Move to the front of all of the other drawings.",shortcut:{key:"BracketRight",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateDrawings(this,(drawing=>{drawing.moveToFront()}))})),new Command.uB("moveForward",commandTarget,{label:"Bring Forward",description:"Move forward one layer in the z order.",shortcut:{key:"BracketRight",modifiers:[types_types.Uq.Ctrl]}},(function(){updateDrawings(this,(drawing=>{drawing.moveForward()}))})),new Command.uB("moveToBack",commandTarget,{label:"Send to Back",description:"Move to the back of all of the other drawings.",shortcut:{key:"BracketLeft",modifiers:[types_types.Uq.Ctrl,types_types.Uq.Shift]}},(function(){updateDrawings(this,(drawing=>{drawing.moveToBack()}))})),new Command.uB("moveBackward",commandTarget,{label:"Send Backward",description:"Move backwards one layer in the z order.",shortcut:{key:"BracketLeft",modifiers:[types_types.Uq.Ctrl]}},(function(){updateDrawings(this,(drawing=>{drawing.moveBackward()}))})),new Command.uB("toggleLockAspectRatio",commandTarget,{label:"Lock Aspect Ratio",description:"Toggle whether the aspect ratio should be maintained when resizing from corners."},(function(){updateDrawings(this,(drawing=>{drawing.setLockAspectRatio(!drawing.isLockAspectRatio())}))})),new Command.uB("formatAnchorTypeTwoCell",commandTarget,{label:"Move and size with cells",description:"Set your drawing to move and resize when underling sheet resizes."},(function(){updateDrawings(this,(drawing=>{drawing.setAnchorType(IAnchoredItem.I.TwoCell)}))})),new Command.uB("formatAnchorTypeOneCell",commandTarget,{label:"Move but don't size with cells",description:"Set your drawing to only move when underling sheet resizes."},(function(){updateDrawings(this,(drawing=>{drawing.setAnchorType(IAnchoredItem.I.OneCell)}))})),new Command.uB("formatAnchorTypeAbsolute",commandTarget,{label:"Don't move or size with cells",description:"Set your drawing to never move or resize when underling sheet resizes."},(function(){updateDrawings(this,(drawing=>{drawing.setAnchorType(IAnchoredItem.I.Absolute)}))}))]);return commandDependencies&&(drawingCommands=drawingCommands.merge(commandDependencies)),drawingCommands}),[activeDrawing,commandDependencies]);return(0,react.useEffect)((()=>{}),[commandsCopyPaste,editModeHandler]),(0,useDrawingModelListener.l)(activeDrawing,{onAnyChange:()=>{commands.getCommand("formatAnchorTypeTwoCell").update({state:activeDrawing?.getAnchorType()===IAnchoredItem.I.TwoCell}),commands.getCommand("formatAnchorTypeOneCell").update({state:activeDrawing?.getAnchorType()===IAnchoredItem.I.OneCell}),commands.getCommand("formatAnchorTypeAbsolute").update({state:activeDrawing?.getAnchorType()===IAnchoredItem.I.Absolute}),commands.getCommand("formatAnchorTypeAbsolute").update({state:activeDrawing?.getAnchorType()===IAnchoredItem.I.Absolute}),commands.getCommand("toggleLockAspectRatio").update({state:activeDrawing?.isLockAspectRatio()})},onProtectedChange:drawing=>{setProtected(drawing.isProtected())},onDelete:()=>{}}),useModelEventListener(drawingContainerView,DrawingContainerViewListenerType.DrawingSelection,(()=>{setActiveDrawing(drawingContainerView.drawingSelection[0]??null),forceRender()})),useModelEventListener(drawingContainer,DrawingContainerListenerType.Drawings,(()=>{forceRender()})),(0,react.useEffect)((()=>{const disabledProps={disabled:isProtected};commands.getCommand("formatAnchorTypeTwoCell").update(disabledProps),commands.getCommand("formatAnchorTypeOneCell").update(disabledProps),commands.getCommand("formatAnchorTypeAbsolute").update(disabledProps),commands.getCommand("toggleLockAspectRatio").update(disabledProps);const allDrawingsCount=drawingContainer.getDrawingsCount(),drawingSelection=drawingContainerView.drawingSelection,disabled=isProtected||allDrawingsCount<=1||0===drawingSelection.length;let disabledPropsZIndexBack={disabled},disabledPropsZIndexForward=disabledPropsZIndexBack;if(!disabled&&1===drawingSelection.length){const drawing=drawingSelection[0];0===drawing.zIndex&&(disabledPropsZIndexBack={disabled:!0}),drawing.zIndex===allDrawingsCount-1&&(disabledPropsZIndexForward={disabled:!0})}commands.getCommand("moveToFront").update(disabledPropsZIndexForward),commands.getCommand("moveForward").update(disabledPropsZIndexForward),commands.getCommand("moveToBack").update(disabledPropsZIndexBack),commands.getCommand("moveBackward").update(disabledPropsZIndexBack)}),[currentRender,isProtected,currentRender]),commands}({drawingContainer:model,drawingContainerView:model?.getView(),transactionStack:model,onRepeatCommandChange:propOnRepeatCommandChange,commandsCopyPaste,commandTarget,notifier}),commands=(0,react.useMemo)((()=>{let commandsNew=new CommandMap.yc([]);return commandsNew=commandsSelection.merge(commandsNew),commandsNew=commandsCopyPaste.merge(commandsNew),commandsNew=drawingCommands.merge(commandsNew),commandsNew=sheetCommands.merge(commandsNew),commandsEditor&&(commandsNew=commandsEditor.merge(commandsNew)),commandsNew}),[commandsSelection,commandsCopyPaste,drawingCommands,sheetCommands,commandsEditor]);(0,react.useEffect)((()=>{propOnCommandsChange?.(commands)}),[commands,propOnCommandsChange]);const viewportComponentWrapper=(0,react.useMemo)((()=>viewportComponent?(0,jsx_runtime.jsx)("div",{className:(0,clsx.A)("sheetxl-viewport-overlay",sheet_Sheet_module["viewport-overlay"]),style:{width:"100%",height:"100%",boxSizing:"border-box",position:"absolute"},children:viewportComponent}):(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{})),[viewportComponent]);let topCorner=null;showColumnHeaders&&showRowHeaders&&(topCorner=(0,jsx_runtime.jsxs)("div",{tabIndex:-1,style:{padding:"2 2",position:"absolute",height:`${headerHeight}px`,width:`${headerWidth}px`,zIndex:3,boxSizing:"border-box",cursor:"cell"},onMouseDown:e=>{const selectRegion=e.ctrlKey||isAllSelected;commands?.getCommand("selectAll")?.execute(!selectRegion||0!==e.button),e.nativeEvent.which===types_types.eZ.Right?propOnSheetContextMenu?.({originalEvent:e,clientX:e.clientX,clientY:e.clientY,rowIndex:-1,colIndex:-1}):gridRef.current?.focus()},children:[(0,jsx_runtime.jsx)("div",{style:{height:headerHeight-5+"px",width:headerHeight-5+"px",clipPath:`path('M${headerHeight-5} 0 L0 ${headerHeight-5} L${headerHeight-5} ${headerHeight-5} L${headerHeight-5} 0 Z')`,borderRight:`2px solid ${selectAllBorder}`,borderBottom:`2px solid ${selectAllBorder}`,background:`${selectAllFill}`,boxSizing:"border-box",position:"absolute",right:"2px",bottom:"2px"}}),(0,jsx_runtime.jsx)("div",{style:{position:"absolute",height:`${headerHeight}px`,width:`${headerWidth}px`,boxSizing:"border-box",borderRight:`solid 1px ${headerStyle.strokeFill}`,borderBottom:`solid 1px ${headerStyle.strokeFill}`,right:"-1px",bottom:"-1px"}}),(0,jsx_runtime.jsx)("div",{style:{position:"absolute",right:"-1px",bottom:"-1px",width:(highlightCorner?2:1)+"px",height:(highlightCorner?2:1)+"px",background:`${highlightCorner?selectionBorderColorEffective:headerStyle.edgeStrokeFill}`}})]}));const handleOnImmediateScroll=(0,useCallbackRef.c)((({_left,_top})=>{}),[]),handleOnContextMenu=(0,useCallbackRef.c)((e=>{if(!propOnSheetContextMenu)return;const coords=gridRef.current.getViewFromOffset(e.clientX,e.clientY)?.getCellCoordsFromOffset(e.clientX,e.clientY);coords&&(propOnSheetContextMenu({originalEvent:e,clientX:e.clientX,clientY:e.clientY,rowIndex:coords.rowIndex,colIndex:coords.colIndex}),e.stopPropagation(),e.preventDefault())}),[propOnSheetContextMenu]),handleOnWheelScroll=(0,useCallbackRef.c)((event=>{if(!(!event.shiftKey&&(event.ctrlKey||event.metaKey)))return;const{deltaY}=event;return deltaY>0?commands.getCommand("sheetZoomOut")?.execute():deltaY<0&&commands.getCommand("sheetZoomIn")?.execute(),0===deltaY}),[commands]);(0,react.useEffect)((()=>{setOverlays(null),prevOverlays.current=null,refHasOverlayHeaders.current=!1,setOverlaysHeaders(null),handleOnImmediateScroll(model?.getView().topLeft),gridRef.current?.scrollTo(model?.getView().topLeft),setTopLeft(model.getView().topLeft),setSheetView(model.getView()),setSelectionGrid((prev=>(0,helpers.D8)(prev,model.getView().selection)?prev:toGridSelection(model.getView().selection))),setFreezeEdges(toFreezeEdges(model.getView().freezePanes)),setSheetCellLayout(createSheetCellLayout()),setProtected(null!==model.getProtection()),invalidateMainGrid()}),[model?.getView()]);const getVisibleCells=(0,useCallbackRef.c)((view=>{const range=view.visibleCellRange;if(!range)return null;let visibleCells=[];const isVisibleCell=cell=>!!(cell.type!==CellTypes.vZ.Stub&&void 0!==cell.value&&null!==cell.value||cell.style.hasEmptyStyling())&&!(cell.type===CellTypes.vZ.Number&&0===cell.value&&!sheetView.showZeros);model.getRange(range).forEach(((_value,coords,context)=>{const cell=context.getCell();cell.colSpan>1||cell.rowSpan>1||cell.couldOverflow||isVisibleCell(cell)&&visibleCells.push({coords,value:cell})}),{includeStyles:!0});const merges=model.getMerges(range);for(let i=0;i<merges.length;i++){const merge=merges[i],coords={colIndex:merge.colStart,rowIndex:merge.rowStart},cell=model.getCell(coords);visibleCells.push({coords,range:merge,value:cell})}const overflowed=getOverflowCells(view);for(let i=0;i<overflowed.length;i++){const o=overflowed[i];null!==editingCoords&&RangeUtils.rv(editingCoords,o.value.coords)||isVisibleCell(o.value.cell)&&visibleCells.push(o)}return visibleCells}),[model,sheetView.showZeros,sheetView.showFormulas,stateAndCoords,editingCoords]),{overlays:overlaysBorder}=(0,useBordersOverlay.r)({getVisibleCells,getBorderAt,darkMode:gridStyleDefaulted.body.isDarkMode,shiftIfWide:!0});(0,react.useEffect)((()=>{const newValue=[];overlaysBorder&&newValue.push(...overlaysBorder),overlaySelection&&newValue.push(overlaySelection),overlaysCopyPaste&&newValue.push(...overlaysCopyPaste),propOverlays&&newValue.push(...propOverlays),overlaysDrawings&&newValue.push(...overlaysDrawings),overlayEditor&&newValue.push(overlayEditor),overlaysHeaders&&newValue.push(...overlaysHeaders),CommonUtils.j1(newValue,prevOverlays.current)||(prevOverlays.current=newValue,setOverlays(newValue))}),[overlaysBorder,overlaySelection,overlaysCopyPaste,overlayEditor,propOverlays,overlaysHeaders,gridStyleDefaulted,onInvalidateDrawings]);const freezeStyle=(0,react.useMemo)((()=>({style:{boxShadow:`0.5px 0.5px 0px 0px ${propGridStyle?.body?.fill}`},pathProps:{stroke:propGridStyle?.body?.text?.fill??"black"}})),[gridStyleDefaulted?.header?.edgeStrokeFill]),handleOnPointerDown=(0,useCallbackRef.c)((e=>{overlayEditorOnPointerEvent(e),selectionProps.onPointerDown(e),e.isDefaultPrevented()||e.isPropagationStopped()||(refRequestDrawingFocus.current=null,model?.getView().drawingSelection.length>0&&(model.getView().drawingSelection=[]))}),[selectionProps?.onPointerDown,model]),handleOnDoubleClick=(0,useCallbackRef.c)((e=>{overlayEditorOnPointerEvent(e)}),[overlayEditorOnPointerEvent]),handleOnKeyDown=(0,useCallbackRef.c)((async e=>{const mode=editModeHandler.getMode();return e.keyCode===types_types.cK.Escape&&mode?(e.preventDefault(),void editModeHandler.setMode(null)):e.keyCode===types_types.cK.Enter&&isCopyOrPasteMode?(e.preventDefault(),await(commandsCopyPaste?.getCommand("paste")?.execute()),void editModeHandler.setMode(null)):(commands.onKeyDown(e),void overlayEditorOnKeyEvent(e))}),[commands?.onKeyDown,editModeHandler,commandsCopyPaste]),[firstRender,setFirstRender]=(0,react.useState)(!1),mainGrid=(0,react.useMemo)((()=>{if(0===width||0===height)return null;const normalStyle=model.sheetStyle().getNormalStyle(),normalFont=normalStyle.font,normalFill=normalStyle.fill,normalBorder=normalStyle.border,isEmptyNormalFill=normalStyle.fill.fillType===IFill.kP.None;let gridLineColumnsProps=gridLineProps,gridLineRowsProps=gridLineProps;const applyBorderEdge=(borderEdge,props,apply)=>apply?{stroke:normalBorder.bottom.style!==ICellBorder.cz.None?borderEdge.color.toRGBA(bodyStyle.isDarkMode).toString():"none",...props}:props;gridLineRowsProps=applyBorderEdge(normalBorder.bottom,gridLineRowsProps,normalBorder.bottom.style!==ICellBorder.cz.None),gridLineRowsProps=applyBorderEdge(normalBorder.top,gridLineRowsProps,normalBorder.top.style!==ICellBorder.cz.None),gridLineColumnsProps=applyBorderEdge(normalBorder.right,gridLineColumnsProps,normalBorder.right.style!==ICellBorder.cz.None),gridLineColumnsProps=applyBorderEdge(normalBorder.left,gridLineColumnsProps,normalBorder.left.style!==ICellBorder.cz.None);let gridLineColor=sheetView?.gridLineColor?.toRGBA(bodyStyle.isDarkMode).toString()??bodyStyle.strokeFill;return isEmptyNormalFill||(gridLineRowsProps=applyBorderEdge(normalBorder.bottom,gridLineRowsProps,!0),gridLineRowsProps=applyBorderEdge(normalBorder.top,gridLineRowsProps,!0),gridLineColumnsProps=applyBorderEdge(normalBorder.right,gridLineColumnsProps,!0),gridLineColumnsProps=applyBorderEdge(normalBorder.left,gridLineColumnsProps,!0)),(0,jsx_runtime.jsx)(Grid.x,{className:"sheetxl-sheet-primary",style:{...STYLE_MAIN_GRID,...normalFill.asCSS(bodyStyle.isDarkMode),color:normalFont.fill.asCSS(bodyStyle.isDarkMode),fontFamily:normalFont.family,fontSize:normalFont.size*FontUtils.On(),"--sxl-app-color-background":bodyStyle.fill,"--sxl-app-color-shadow":gridStyleDefaulted.colorShadow,"--sxl-app-color-grey":gridStyleDefaulted.colorGrey,"--sxl-app-color-primary-dark":gridStyleDefaulted.selection.strokeFill},ref:gridRef,zoom,...gridProps,onFirstRender:grid=>{setFirstRender(!0),gridProps?.onFirstRender?.(grid)},showGridLines:gridLinesVisible,gridLineColor,gridLineColumnsProps,gridLineRowsProps,freezeLeft:freezeEdges?.[Primitives.tb.Left],freezeLeftProps:freezeStyle,freezeTop:freezeEdges?.[Primitives.tb.Top],freezeTopProps:freezeStyle,width,height,columnCount,rowCount,cursor:modeCursor??selectionCursor??"cell",clipCells:!0,cellLayout:sheetCellLayout,cellRenderer:getCellRenderer,mergedRanges:getMergedRanges,hiddenRowsAt,hiddenColumnsAt,getVisibleCells,onWheelScroll:handleOnWheelScroll,onPointerDown:handleOnPointerDown,onDoubleClick:handleOnDoubleClick,onViewportChange:handleViewChange,onImmediateScroll:handleOnImmediateScroll,scrollPoint:topLeft,onKeyDown:handleOnKeyDown,overlays})}),[onInvalidateMainGrid]);(0,react.useEffect)((()=>{sheetModelInFlight.current||invalidateMainGrid()}),[freezeEdges,zoom,commands,selectionProps?.onPointerDown,topLeft?.left,topLeft?.top,sheetCellLayout,bodyStyle,gridProps,width,height,selectionCursor,modeCursor,rowCount,columnCount,getOverflowCells,overlays]);let gridStyle={flex:"1 1 100%",display:"flex",alignContent:"stretch",position:"relative"};showScrollbars||(gridStyle={...gridStyle,...propStyle});const themeVars=(0,react.useMemo)((()=>{const docTheme=model.sheetStyle().getTheme();return{"--sxl-doc-color-dk1":docTheme.colorScheme.dk1.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-dk2":docTheme.colorScheme.dk2.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-lt1":docTheme.colorScheme.lt1.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-lt2":docTheme.colorScheme.lt2.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-accent1":docTheme.colorScheme.accent1.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-accent2":docTheme.colorScheme.accent2.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-accent3":docTheme.colorScheme.accent3.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-accent4":docTheme.colorScheme.accent4.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-accent5":docTheme.colorScheme.accent5.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-accent6":docTheme.colorScheme.accent6.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-hlink":docTheme.colorScheme.hlink.asCSS(bodyStyle.isDarkMode),"--sxl-doc-color-fol-hlink":docTheme.colorScheme.folHlink.asCSS(bodyStyle.isDarkMode),"--sxl-doc-font-major":docTheme.fontScheme.majorFont,"--sxl-doc-font-minor":docTheme.fontScheme.minorFont}}),[model.sheetStyle().getTheme()]);let elementSheetWrapper=(0,jsx_runtime.jsx)("div",{style:gridStyle,onTouchStart:()=>{warnNoTouch()},onFocus:e=>{setHasFocus(!0),propOnFocus?.(e)},onBlur:e=>{setHasFocus(!1),propOnBlur?.(e)},ref:refLocal,...rest,children:(0,jsx_runtime.jsx)("div",{className:(0,clsx.A)("sheetxl-sheet",sheet_Sheet_module["sheetxl-sheet"]),style:{position:"absolute",width:"100%",height:"100%",boxSizing:"border-box",display:"flex",flexDirection:"column",flex:"1 1 100%",overflow:"hidden",zIndex:"0",...themeVars},children:(0,jsx_runtime.jsxs)("div",{style:{display:"flex",flexDirection:"row",flex:"1 1 100%",overflow:"hidden"},children:[topCorner,gridRowHeader,(0,jsx_runtime.jsxs)("div",{style:{display:"flex",flexDirection:"column",flex:"1 1 100%",overflow:"hidden",position:"relative"},children:[gridColumnHeader,(0,jsx_runtime.jsxs)("div",{style:{display:"flex",flexDirection:"column",flex:"1 1 100%",overflow:"hidden",position:"relative",borderRight:`solid ${headerStyle.edgeStrokeWidth}px ${headerStyle.edgeStrokeFill}`,backgroundColor:bodyStyle.fill},ref:refContainerMain,onContextMenu:handleOnContextMenu,children:[mainGrid,viewportComponentWrapper,(0,jsx_runtime.jsx)(Watermark,{style:{position:"absolute",right:24,bottom:4},colorLicensee:gridStyleDefaulted?.selection?.strokeFill,colorCredits:gridStyleDefaulted?.body?.text?.fill})]})]})]})})});if(showScrollbars){const sheetScrollbarCreator=props=>(0,jsx_runtime.jsx)(SheetScrollbar.m,{...props,sheetModel:model});elementSheetWrapper=(0,jsx_runtime.jsx)(ScrollPane.Gr,{style:{flex:"1 1 100%",overflow:"hidden",background:`${headerStyle.fill}`,minHeight:40,minWidth:120,...propStyle},viewport,touchElement:gridRef.current?.stage,disableTouch:disableTouchSelection,onScrollViewport:scrollPosition=>{gridRef.current?.scrollTo(scrollPosition)},createHorizontalScrollbar:sheetScrollbarCreator,createVerticalScrollbar:sheetScrollbarCreator,...scrollPaneProps,children:elementSheetWrapper})}(0,react.useEffect)((()=>{sheetModelInFlight.current=!1,invalidateMainGrid?.(),hasFocus&&refLocal.current?.focus()}),[model]);const[shownTouchWarning,setShownTouchWarning]=(0,react.useState)(!1),warnNoTouch=(0,useCallbackRef.c)((()=>{shownTouchWarning||setShownTouchWarning(!0)}),[shownTouchWarning]);return(0,react.useEffect)((()=>{if(firstRender)return"function"==typeof propOnElementLoad&&propOnElementLoad(),"touch"===ReactUtils.th().primaryInput&&warnNoTouch(),()=>{}}),[propOnElementLoad,firstRender,shownTouchWarning]),elementSheetWrapper})));try{Sheet.displayName="Sheet",Sheet.__docgenInfo={description:"",displayName:"Sheet",props:{model:{defaultValue:null,description:"",name:"model",required:!0,type:{name:"ISheetModel"}},gridStyle:{defaultValue:null,description:"",name:"gridStyle",required:!1,type:{name:"GridStyle"}},onSheetContextMenu:{defaultValue:null,description:"Fire when a contentMenu is requested",name:"onSheetContextMenu",required:!1,type:{name:"(location: SheetLocation) => void"}},showRowHeaders:{defaultValue:null,description:"Show the row headers",name:"showRowHeaders",required:!1,type:{name:"boolean"}},rowHeaderProps:{defaultValue:null,description:"",name:"rowHeaderProps",required:!1,type:{name:"Partial<SheetHeadersProps<IRowHeader, RowHeaderJSON, RowHeaderUpdate>>"}},showColumnHeaders:{defaultValue:null,description:"Show the column headers",name:"showColumnHeaders",required:!1,type:{name:"boolean"}},columnHeaderProps:{defaultValue:null,description:"",name:"columnHeaderProps",required:!1,type:{name:"Partial<SheetHeadersProps<IColumnHeader, ColumnHeaderJSON, ColumnHeaderUpdate>>"}},showScrollbars:{defaultValue:null,description:"Show the scrollbars",name:"showScrollbars",required:!1,type:{name:"boolean"}},scrollPaneProps:{defaultValue:null,description:"Allow for customizations of scrollbar",name:"scrollPaneProps",required:!1,type:{name:"ScrollPaneProps"}},onViewportChange:{defaultValue:null,description:"Fired when the view port changes.\nThis is in pixel coordinates and slightly different then viewable cells because off screen location bounds could change",name:"onViewportChange",required:!1,type:{name:"(view: ScrollableViewport) => void"}},onSelectionDrag:{defaultValue:null,description:"When selection is being dragged this will be fired. At selectionDragend this will be fired with a null selection",name:"onSelectionDrag",required:!1,type:{name:"(selection: CellSelection) => void"}},onMoveCell:{defaultValue:null,description:"Callback when a paste is executed",name:"onMoveCell",required:!1,type:{name:"(from: CellCoords, to: CellCoords, cell?: CellUpdate) => CellUpdate"}},onElementLoad:{defaultValue:null,description:"Called when the sheet has been loaded",name:"onElementLoad",required:!1,type:{name:"() => void"}},notifier:{defaultValue:null,description:"",name:"notifier",required:!1,type:{name:"Notifier"}},editStateAndCoords:{defaultValue:null,description:"",name:"editStateAndCoords",required:!1,type:{name:"EditorStateAndCoords<ICellModel, string>"}},onEditStateAndCoordsChange:{defaultValue:null,description:"",name:"onEditStateAndCoordsChange",required:!1,type:{name:"(editStateAndCoords: EditorStateAndCoords<ICellModel, string>) => void"}},getCellEditor:{defaultValue:null,description:"Inject custom editors based on a cell.\nThis should not return null but rather can canEdit.\nThis is called during placement after scrolling and other bookkeeping has occurred",name:"getCellEditor",required:!1,type:{name:"(props: CellEditorProps<ICellModel, string> & CellEditorRefAttribute, coords: CellCoords) => ReactElement<CellEditorProps<ICellModel, string> & CellEditorRefAttribute, string | JSXElementConstructor<...>>"}},onCommandsChange:{defaultValue:null,description:"Notify that there is a new map of commands",name:"onCommandsChange",required:!1,type:{name:"(commands: CommandMap) => void"}},onRepeatCommandChange:{defaultValue:null,description:"Notify that there is a new repeatable command",name:"onRepeatCommandChange",required:!1,type:{name:"(command: ICommand<any, any>) => void"}},viewportComponent:{defaultValue:null,description:"",name:"viewportComponent",required:!1,type:{name:"ReactNode"}},renderDrawing:{defaultValue:null,description:"Render components for drawing elements.\nIf not provided drawings will not be rendered.\n@param props\n@returns",name:"renderDrawing",required:!1,type:{name:"(props: DrawingElementProps) => ReactElement<any, string | JSXElementConstructor<any>>"}},overlays:{defaultValue:null,description:"Render an element directly onto a gridView.",name:"overlays",required:!1,type:{name:"((view: GridOverlayView) => ReactNode)[]"}},onShowTooltip:{defaultValue:null,description:"To show the tooltip\n@param properties",name:"onShowTooltip",required:!1,type:{name:"(properties: IShowToolTipProperties) => void"}},onShowColumnTooltip:{defaultValue:null,description:"",name:"onShowColumnTooltip",required:!1,type:{name:"(properties: IShowToolTipProperties) => void"}},onShowRowTooltip:{defaultValue:null,description:"",name:"onShowRowTooltip",required:!1,type:{name:"(properties: IShowToolTipProperties) => void"}},onCloseTooltip:{defaultValue:null,description:"",name:"onCloseTooltip",required:!1,type:{name:"() => void"}},onGoto:{defaultValue:null,description:"",name:"onGoto",required:!1,type:{name:"(location: SheetCellCoordsAddress | GotoOptions | ISheetRange) => Promise<IWorkbookRange>"}},gridProps:{defaultValue:null,description:"Customize the grid.\n@remarks Not all props are passed through.",name:"gridProps",required:!0,type:{name:"GridProps"}},ref:{defaultValue:null,description:"",name:"ref",required:!1,type:{name:"Ref<SheetElement>"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/components/sheet/Sheet.tsx#Sheet"]={docgenInfo:Sheet.__docgenInfo,name:"Sheet",path:"../../packages/sheet-react/src/components/sheet/Sheet.tsx#Sheet"})}catch(__react_docgen_typescript_loader_error){}},"../../packages/sheet-react/src/components/sheet/SheetScrollbar.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{m:()=>SheetScrollbar});var react=__webpack_require__("../../node_modules/react/index.js"),RangeUtils=__webpack_require__("../../packages/models/src/range/RangeUtils.ts"),types=__webpack_require__("../../packages/common-react/src/types/types.ts"),useCallbackRef=__webpack_require__("../../packages/common-react/src/hooks/useCallbackRef.ts"),Scrollbar=__webpack_require__("../../packages/common-react/src/scroll/Scrollbar.tsx"),useSheetListener=__webpack_require__("../../packages/sheet-react/src/hooks/useSheetListener.ts"),useSheetViewListener=__webpack_require__("../../packages/sheet-react/src/hooks/useSheetViewListener.ts"),jsx_runtime=__webpack_require__("../../node_modules/react/jsx-runtime.js");const DEFAULT_GAP=100,DEFAULT_SCROLL_INCREMENT=100,DEFAULT_SCALE_LIMIT=1e6,DEFAULT_SCALE_FACTOR=100,DEFAULT_PRECISION_ADJUST=50,VirtualScrollbar=(0,react.memo)((0,react.forwardRef)(((props,refForwarded)=>{const{offset:propOffset=0,viewportSize:propViewportSize=0,totalSize:propTotalSize=0,minSize=0,endGap=DEFAULT_GAP,endScrollIncrement=DEFAULT_SCROLL_INCREMENT,style:propStyle=types.sY,onMouseDown:propOnMouseDown,onScrollOffset:propOnScrollOffset,onScroll:propOnScroll,scaleLimit=DEFAULT_SCALE_LIMIT,scaleFactor=DEFAULT_SCALE_FACTOR,precisionFactor=DEFAULT_PRECISION_ADJUST,...rest}=props;propOnScroll&&console.warn("onScroll not supported for VirtualScrollbar. Use onScrollOffset instead");const onMouseDown=(0,useCallbackRef.c)(propOnMouseDown,[propOnMouseDown]),calcElastic=()=>({offset:propOffset,totalSize:0===scaleLimit?propTotalSize:Math.min(propTotalSize??0,Math.max(minSize??0,(propOffset??0)+(propViewportSize??0))+(endGap??0))}),[elasticProps,setElasticProps]=(0,react.useState)(calcElastic),effectiveFactor=0!==scaleLimit&&elasticProps.totalSize>scaleLimit?scaleFactor:1,effectivePrecision=effectiveFactor/precisionFactor,totalSize=Math.ceil(elasticProps.totalSize/effectiveFactor),offset=Math.ceil(elasticProps.offset/effectiveFactor),viewportSize=Math.ceil(propViewportSize/effectiveFactor),handleMouseMove=(0,react.useCallback)((_e=>{}),[]),[isDraggingScroll,setDraggingScroll]=(0,react.useState)(!1),viewportInFlight=(0,react.useRef)(null);(0,react.useLayoutEffect)((()=>{if(!isDraggingScroll){viewportInFlight.current={propTotalSize,propViewportSize,propOffset};const newElastic=calcElastic();setElasticProps(newElastic)}}),[propTotalSize,propViewportSize,propOffset,isDraggingScroll,minSize,endGap,endScrollIncrement]);const handleOnScrollOffset=(0,useCallbackRef.c)(((offsetPhysical,_viewportSizePhysical,_totalSizePhysical)=>{const inFlight=viewportInFlight.current;viewportInFlight.current=null,inFlight&&inFlight.propTotalSize===propTotalSize&&inFlight.propViewportSize===propViewportSize&&inFlight.propOffset===propOffset||(Math.abs(offsetPhysical-offset)<effectivePrecision&&(offsetPhysical=offset),propOnScrollOffset?.(offsetPhysical*effectiveFactor,offset,viewportSize))}),[propOnScrollOffset,effectiveFactor,effectivePrecision,offset,viewportSize]),handleMouseUp=(0,react.useCallback)((_e=>{document.removeEventListener("mousemove",handleMouseMove),document.removeEventListener("mouseup",handleMouseUp),setDraggingScroll(!1)}),[]),handleMouseDown=(0,react.useCallback)((e=>{onMouseDown?.(e),setDraggingScroll(!0),document.addEventListener("mousemove",handleMouseMove,{passive:!0}),document.addEventListener("mouseup",handleMouseUp,{passive:!0})}),[handleMouseMove,handleMouseUp]);return(0,jsx_runtime.jsx)(Scrollbar.Ze,{ref:refForwarded,style:{...propStyle},...rest,offset,totalSize,viewportSize,onMouseDown:handleMouseDown,onScrollOffset:handleOnScrollOffset})})));var useMeasure=__webpack_require__("../../node_modules/react-use/esm/useMeasure.js"),useForkRef=__webpack_require__("../../node_modules/rooks/dist/esm/hooks/useForkRef.js");const SheetScrollbar=(0,react.memo)((0,react.forwardRef)(((props,refForwarded)=>{const{style:propStyle=types.sY,orientation,sheetModel,onShowTooltip:propOnShowTooltip,onCloseTooltip:propOnCloseTooltip,onScrollOffset:propOnScrollOffset,showCustomScrollButtons=!1,offset:propOffset=0,totalSize:propTotalSize=0,viewportSize:propViewportSize=0,...rest}=props;if(!sheetModel)throw new Error("SheetScrollBar needs a sheet model");const[refMeasure]=(0,useMeasure.A)(),onShowTooltip=(0,useCallbackRef.c)(propOnShowTooltip,[propOnShowTooltip]),onCloseTooltip=(0,useCallbackRef.c)(propOnCloseTooltip,[propOnCloseTooltip]),ref=(0,useForkRef.N)(refMeasure,refForwarded),[offset,setOffset]=(0,react.useState)((()=>orientation===Scrollbar.bv.Vertical?sheetModel.getView().topLeft.top:sheetModel.getView().topLeft.left)),calcFreezeOffset=()=>{if(orientation===Scrollbar.bv.Vertical){if(0===sheetModel.getView().freezePanes.coords.rowIndex)return{shift:0,scroll:0};return{shift:sheetModel.getRowHeaders().findOffset(sheetModel.getView().freezePanes.coords.rowIndex)-sheetModel.getView().freezePanes.topLeft.top,scroll:sheetModel.getView().freezePanes.topLeft.top}}if(0===sheetModel.getView().freezePanes.coords.colIndex)return{shift:0,scroll:0};return{shift:sheetModel.getColumnHeaders().findOffset(sheetModel.getView().freezePanes.coords.colIndex)-sheetModel.getView().freezePanes.topLeft.left,scroll:sheetModel.getView().freezePanes.topLeft.left}},[freezeOffset,setFreezeOffset]=(0,react.useState)(calcFreezeOffset),[tooltip,setTooltip]=(0,react.useState)(null),[showingTooltip,setShowingTooltip]=(0,react.useState)(!1),sheetHeader=orientation===Scrollbar.bv.Vertical?sheetModel.getRowHeaders():sheetModel.getColumnHeaders(),getMinLocation=()=>{const cellBounds=sheetModel.getCellBounds(),activeCoords=sheetModel.getView().selection.activeCoords;return{colIndex:Math.max(cellBounds.colEnd,activeCoords.colIndex),rowIndex:Math.max(cellBounds.rowEnd,activeCoords.rowIndex)}},[minCellLocation,setMinCellLocation]=(0,react.useState)(getMinLocation),minIndex=minCellLocation?(orientation===Scrollbar.bv.Vertical?minCellLocation.rowIndex:minCellLocation.colIndex)+1:0,updateLastLocation=()=>{const newMinLocation=getMinLocation();RangeUtils.rv(minCellLocation,newMinLocation)||setMinCellLocation(newMinLocation)};(0,useSheetViewListener.y)(sheetModel.getView(),{onSelectionChange:updateLastLocation,onFreezeSplitChange:()=>{setFreezeOffset(calcFreezeOffset)}}),(0,useSheetListener.t)(sheetModel,{onCellsChange:updateLastLocation}),(0,react.useEffect)((()=>{setMinCellLocation(getMinLocation())}),[sheetModel]),(0,react.useEffect)((()=>{if(!tooltip)return showingTooltip&&onCloseTooltip?.(),void setShowingTooltip(!1);const title=sheetHeader.getHeaderText(sheetHeader.findIndex(offset/(sheetModel.getView().zoomScale/100)+freezeOffset.scroll+freezeOffset.shift));setShowingTooltip(!0),onShowTooltip?.({...tooltip,display:(orientation===Scrollbar.bv.Vertical?"Row":"Column")+": "+title})}),[propOffset,offset,freezeOffset,orientation,tooltip,sheetHeader,showingTooltip,sheetModel]);const handleOnScrollOffset=(0,useCallbackRef.c)(((offset,viewPortSize,totalSize)=>{setOffset(offset);const nOffset=offset+freezeOffset.scroll,nViewPortSize=viewPortSize+freezeOffset.shift,nTotalSize=totalSize+freezeOffset.shift+freezeOffset.scroll;propOnScrollOffset?.(nOffset,nViewPortSize,nTotalSize)}),[propOnScrollOffset,freezeOffset]),vOffset=propOffset-freezeOffset.scroll,vViewportSize=propViewportSize-freezeOffset.shift,vTotalSize=propTotalSize-(freezeOffset.shift+freezeOffset.scroll),minSize=sheetHeader.findOffset(minIndex)*(sheetModel.getView().zoomScale/100)-(freezeOffset.scroll+freezeOffset.shift);return(0,jsx_runtime.jsx)(VirtualScrollbar,{ref,style:propStyle,offset:vOffset,viewportSize:vViewportSize,totalSize:vTotalSize,orientation,showCustomScrollButtons,onMouseDown:e=>{setTooltip({anchor:{x:e.clientX,y:e.clientY}}),e.preventDefault()},onScrollOffset:handleOnScrollOffset,onMouseOut:()=>{setTooltip(null)},onMouseUp:()=>{setTooltip(null)},minSize,...rest})})))},"../../packages/sheet-react/src/hooks/useBordersOverlay.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{r:()=>useBordersOverlay});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js"),_sheetxl_common__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("../../packages/common/src/utils/CommonUtils.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("../../packages/models/src/cell/ICellBorder.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("../../packages/models/src/range/RangeUtils.ts"),_sheetxl_models__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("../../packages/models/src/color/AdjustedColor.ts"),_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("../../packages/common-react/src/hooks/useCallbackRef.ts"),_components__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("../../packages/sheet-react/src/components/StyledStrokePath.tsx"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/react/jsx-runtime.js");const ColumnFirstSorter=(a,b)=>a.colStart===b.colStart?a.rowStart-b.rowStart:a.colStart-b.colStart,RowFirstSorter=(a,b)=>a.rowStart===b.rowStart?a.colStart-b.colStart:a.rowStart-b.rowStart,defaultBorderRenderer=props=>{const{key,points,range,stroke,darkMode,forceThinBorder=!1,shiftIfWide=!1,isVertical=!1,intersections,cellLayout}=props,definition=_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.tz.get(forceThinBorder?_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.Thin:stroke.style);if(!definition)return null;const x=points[0],y=points[1],x2=points[2],y2=points[3];let length=1+(isVertical?y2-y:x2-x),offset=0;const strokeColor=stroke.color.toRGBA(darkMode).toString(),isDouble=definition.description.toLowerCase().includes("double");let dashedBefore,dashedAfter;const start=isVertical?"rowStart":"colStart",end=isVertical?"rowEnd":"colEnd",startBounds=isVertical?y:x;if(intersections?.length>0){const firstIntersection=intersections[0];if(firstIntersection?.range[start]===range[start]){const definitionIntersect=_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.tz.get(firstIntersection.stroke.style);offset=Math.floor(definitionIntersect.width/2)}const lastIntersection=intersections[intersections.length-1];if(lastIntersection?.range[end]===range[end]){const definitionIntersect=_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.tz.get(intersections[intersections.length-1].stroke.style);length=Math.floor(length+(2===definitionIntersect.width?0:definitionIntersect.width/2))}if(isDouble){const startIntersect=isVertical?"colStart":"rowStart",endIntersect=isVertical?"colEnd":"rowEnd",offsetFn=isVertical?cellLayout?.getRowOffset:cellLayout?.getColOffset;let lastBoundsBefore=0,lastBoundsAfter=0;dashedBefore=[],dashedAfter=[];for(let i=0;i<intersections.length;i++){const intersection=intersections[i];if(intersection.stroke.style===_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.Double&&offsetFn){const boundsIntersect=offsetFn(intersection.range[start])-(startBounds-offset);intersection.range[startIntersect]<range[startIntersect]&&(dashedBefore.push(boundsIntersect-lastBoundsBefore),lastBoundsBefore=boundsIntersect,dashedBefore.push(1),lastBoundsBefore++),intersection.range[endIntersect]>range[endIntersect]&&(dashedAfter.push(boundsIntersect-lastBoundsAfter),lastBoundsAfter=boundsIntersect,dashedAfter.push(1),lastBoundsAfter++)}}dashedBefore.length>0&&lastBoundsBefore<length&&dashedBefore.push(length-lastBoundsBefore),dashedAfter.length>0&&lastBoundsAfter<length&&dashedAfter.push(length-lastBoundsAfter)}}let offsetX=isVertical?-Math.floor(definition.width/2):-offset,offsetY=isVertical?-offset:-Math.floor(definition.width/2);const shift=shiftIfWide&&definition.width>2?1:0;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components__WEBPACK_IMPORTED_MODULE_3__.$,{offsetX:x+offsetX-shift,offsetY:y+offsetY-shift,length:length+offset,isVertical,stroke:strokeColor,width:definition.width,dashArray:dashedBefore??definition.pattern,dashArrayAdditional:dashedAfter,isDouble,isAngled:definition.description.toLowerCase().includes("slant")},key)};defaultBorderRenderer.displayName="defaultBorderRenderer";const useBordersOverlay=({getBorderAt,borderRenderer=defaultBorderRenderer,getVisibleCells:propGetVisibleCells,darkMode,forceThinBorder=!1,defaultColor="black",shiftIfWide=!1})=>{const getVisibleCells=(0,_sheetxl_common_react__WEBPACK_IMPORTED_MODULE_4__.c)(propGetVisibleCells,[propGetVisibleCells]);return{overlays:(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)((()=>[view=>{const bounds=view.clipBounds(view.getCellRangeBounds(),-3);if(!bounds)return;const visibleCells=getVisibleCells(view);if(0===visibleCells.length)return;const colOffsets=view.getVisibleColumnOffsets(),rowOffsets=view.getVisibleRowOffsets();let horzRanges=[],vertRanges=[];const visibleColumns=view.getVisibleColumns(),visibleRows=view.getVisibleRows(),columns=[],rows=[],paths=[],pushStroke=(span,spanIndex,visibleIndex,index,stroke,edge,length)=>{const newStroke={index,stroke,visibleIndex,edge,length};span[spanIndex]||(span[spanIndex]=[]),span[spanIndex].length>0&&span[spanIndex][span[spanIndex].length-1]?.index===index?span[spanIndex][span[spanIndex].length-1]=newStroke:span[spanIndex].push(newStroke)};for(let cellOffset=0;cellOffset<visibleCells.length;cellOffset++){const cell=visibleCells[cellOffset],coords=cell.coords;if(!coords)continue;const range=cell?.range??{rowStart:coords.rowIndex,colStart:coords.colIndex,rowEnd:coords.rowIndex,colEnd:coords.colIndex};if(!_sheetxl_models__WEBPACK_IMPORTED_MODULE_5__.IP(range,view.visibleCellRange)&&!_sheetxl_models__WEBPACK_IMPORTED_MODULE_5__.mT(range,view.visibleCellRange))continue;const colIndex=coords.colIndex,rowIndex=coords.rowIndex,cOffset=colOffsets[colIndex],rOffset=rowOffsets[rowIndex];if(range.rowEnd!==range.rowStart){const s=rowOffsets[range.rowStart]?.spanIndex??-1,e=rowOffsets[range.rowEnd]?.spanIndex??rowOffsets[visibleRows[visibleRows.length-1]].spanIndex+1;horzRanges.push({...range,rowStart:s,rowEnd:e})}if(range.colEnd!==range.colStart){const s=colOffsets[range.colStart]?.spanIndex??-1,e=colOffsets[range.colEnd]?.spanIndex??colOffsets[visibleColumns[visibleColumns.length-1]].spanIndex+1;vertRanges.push({...range,colStart:s,colEnd:e})}const value=cell.value,border=getBorderAt(value,cellOffset);if(!border||border.isEmpty())continue;let left=border?.left,top=border?.top,right=border?.right,bottom=border?.bottom,rowLength=1,colLength=1;if(!cOffset||!rOffset)continue;const c=cOffset.spanIndex,r=rOffset.spanIndex;left?.style&&left?.style!==_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.None&&pushStroke(columns,c,r,rowIndex,left,_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.Mq.Left,rowLength),top?.style&&top?.style!==_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.None&&pushStroke(rows,r,c,colIndex,top,_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.Mq.Top,colLength),right?.style&&right?.style!==_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.None&&pushStroke(columns,c+colLength,r,rowIndex,right,_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.Mq.Right,rowLength),bottom?.style&&bottom?.style!==_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.None&&pushStroke(rows,r+rowLength,c,colIndex,bottom,_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.Mq.Bottom,colLength)}const mergeSpan=(spans,spanIndices,isHorz)=>{const mergedSpans=[];return spans.forEach(((segments,indexSpan)=>{let currentSegment=null;segments.sort(((a,b)=>a.visibleIndex-b.visibleIndex));for(let i=0;i<segments.length;i++){const segment=segments[i];if(!segment?.stroke)continue;if(void 0===spanIndices[indexSpan]&&void 0===spanIndices[indexSpan-1])continue;let hasIntersect=!1;if(isHorz)for(let j=0;!hasIntersect&&j<horzRanges.length;j++){let next=horzRanges[j];next.colStart<=segment.index&&next.colEnd>=segment.index&&next.rowStart<indexSpan&&next.rowEnd>=indexSpan&&(hasIntersect=!0)}else for(let j=0;!hasIntersect&&j<vertRanges.length;j++){let next=vertRanges[j];next.rowStart<=segment.index&&next.rowEnd>=segment.index&&next.colStart<indexSpan&&next.colEnd>=indexSpan&&(hasIntersect=!0)}if(hasIntersect)continue;const color=segment.stroke?.color?.toRGBA?segment.stroke.color.toRGBA().toString():defaultColor,key=segment.stroke.style+":"+color;(key!==currentSegment?.key||currentSegment&¤tSegment.visibleIndex+1<segment.visibleIndex)&&(currentSegment&&mergedSpans.push(currentSegment),currentSegment={key,index:spanIndices[indexSpan]??spanIndices[indexSpan-1]+1,visibleIndex:segment.visibleIndex,edge:segment.edge,stroke:segment.stroke,from:segment.index,to:segment.index+segment.length-1,intersections:[]}),currentSegment.to=segment.index+segment.length-1,currentSegment.visibleIndex=segment.visibleIndex}currentSegment&&mergedSpans.push(currentSegment)})),mergedSpans};horzRanges=horzRanges.sort(RowFirstSorter),vertRanges=vertRanges.sort(ColumnFirstSorter);const mergedColumns=mergeSpan(columns,visibleColumns,!1),mergedRows=mergeSpan(rows,visibleRows,!0);if(0===mergedColumns.length&&0===mergedRows.length)return null;for(let r=0;r<mergedRows.length;r++){const edgeRow=mergedRows[r];let intersectIndex=_sheetxl_common__WEBPACK_IMPORTED_MODULE_6__.Nn(mergedColumns,edgeRow.from,(v=>v.index)),done=!1;for(;!done;){const edgeColumn=mergedColumns[intersectIndex++];edgeColumn&&edgeColumn.index>=edgeRow.from&&edgeColumn.index<=edgeRow.to+1&&edgeColumn.from<=edgeRow.index&&edgeColumn.to+1>=edgeRow.index&&(edgeRow.intersections.push({stroke:edgeColumn.stroke,range:{rowStart:edgeColumn.from,rowEnd:edgeColumn.to+1,colStart:edgeColumn.index,colEnd:edgeColumn.index}}),edgeColumn.intersections.push({stroke:edgeRow.stroke,range:{rowStart:edgeRow.index,rowEnd:edgeRow.index,colStart:edgeRow.from,colEnd:edgeRow.to+1}})),done=!edgeColumn||edgeColumn.index>edgeRow.to+1}}for(let r=0;r<mergedRows.length;r++){const edge=mergedRows[r];let stroke=edge.stroke;stroke?.color||(stroke={...stroke,color:new _sheetxl_models__WEBPACK_IMPORTED_MODULE_7__.gE(defaultColor)}),stroke?.style||(stroke={...stroke,style:_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.Thin});const key=`rBorder:${edge.index}:${edge.from}:${edge.to}:${edge.edge}`,range={rowStart:edge.index,rowEnd:edge.index,colStart:edge.from,colEnd:edge.to+1},cellLayout=view.cellLayout,isVertical=!1,x=cellLayout.getColOffset(range.colStart),y=cellLayout.getRowOffset(range.rowStart),points=[x,y,isVertical?x:cellLayout.getColOffset(range.colEnd),isVertical?cellLayout.getRowOffset(range.rowEnd):y];paths.push(borderRenderer({key,points,stroke,darkMode,forceThinBorder,shiftIfWide,range,intersections:edge.intersections,cellLayout,isVertical}))}for(let c=0;c<mergedColumns.length;c++){const edge=mergedColumns[c];let stroke=edge.stroke;stroke?.color||(stroke={...stroke,color:new _sheetxl_models__WEBPACK_IMPORTED_MODULE_7__.gE(defaultColor)}),stroke?.style||(stroke={...stroke,style:_sheetxl_models__WEBPACK_IMPORTED_MODULE_2__.cz.Thin});const key=`cBorder:${edge.index}:${edge.from}:${edge.to}:${edge.edge}`,range={rowStart:edge.from,rowEnd:edge.to+1,colStart:edge.index,colEnd:edge.index},cellLayout=view.cellLayout,isVertical=!0,x=cellLayout.getColOffset(range.colStart),y=cellLayout.getRowOffset(range.rowStart),points=[x,y,isVertical?x:cellLayout.getColOffset(range.colEnd),isVertical?cellLayout.getRowOffset(range.rowEnd):y];paths.push(borderRenderer({key,stroke,points,darkMode,forceThinBorder,shiftIfWide,range,intersections:edge.intersections,cellLayout,isVertical}))}return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{width:`${bounds.width}`,height:`${bounds.height}`,viewBox:`0 0 ${bounds.width} ${bounds.height}`,preserveAspectRatio:"none",shapeRendering:"crispEdges",style:{position:"absolute",left:"0px",top:"0px",width:`${bounds.width}px`,height:`${bounds.height}px`,pointerEvents:"none",transitionTimingFunction:"linear",transitionDelay:"0",transitionProperty:"left, top, width, height",willChange:"left, top, width, height, stroke-dashoffset",overflow:"visible"},children:paths},"borders")}]),[getBorderAt,darkMode])}};try{useBordersOverlay.displayName="useBordersOverlay",useBordersOverlay.__docgenInfo={description:"useBordersOverlay\nRenders borders by combining individual cells border attributes.",displayName:"useBordersOverlay",props:{getVisibleCells:{defaultValue:null,description:"Returns a list of visible cells.\n@param view\n@returns",name:"getVisibleCells",required:!0,type:{name:"(view: GridOverlayView) => { coords: CellCoords; value?: any; range?: CellRangeCoords; }[]"}},getBorderAt:{defaultValue:null,description:"For finding the border. The value is the value returned from getVisibleCells and the index is the index found\n@param coords\n@returns",name:"getBorderAt",required:!0,type:{name:"(value: any, index: number) => ICellBorder"}},borderRenderer:{defaultValue:{value:"(props: BorderRenderProps): React.ReactNode => {\r\n const {\r\n key,\r\n points,\r\n range,\r\n stroke,\r\n darkMode,\r\n\r\n forceThinBorder=false,\r\n shiftIfWide=false,\r\n isVertical=false,\r\n\r\n intersections,\r\n cellLayout,\r\n } = props;\r\n const definition:BorderStyleDefinition = PRESET_CELL_BORDERS_DEFINITIONS_MAP.get(forceThinBorder ? BorderStrokeStyle.Thin : stroke.style);\r\n if (!definition)\r\n return null;\r\n\r\n const x = points[0];\r\n const y = points[1];\r\n const x2 = points[2];\r\n const y2 = points[3];\r\n\r\n let length = (isVertical ? y2 - y : x2 - x) + 1;// +1 for divider\r\n let offset = 0;\r\n const strokeColor = stroke.color.toRGBA(darkMode).toString();\r\n\r\n const isDouble = definition.description.toLowerCase().includes('double');\r\n let dashedBefore = undefined;\r\n let dashedAfter = undefined;\r\n\r\n const start = isVertical ? 'rowStart' : 'colStart';\r\n const end = isVertical ? 'rowEnd' : 'colEnd';\r\n const startBounds = isVertical ? y : x;\r\n\r\n if (intersections?.length > 0) {\r\n const firstIntersection = intersections[0];\r\n if (firstIntersection?.range[start] === range[start]) {\r\n const definitionIntersect:BorderStyleDefinition = PRESET_CELL_BORDERS_DEFINITIONS_MAP.get(firstIntersection.stroke.style);\r\n offset = Math.floor(definitionIntersect.width / 2);\r\n }\r\n const lastIntersection = intersections[intersections.length -1];\r\n if (lastIntersection?.range[end] === range[end]) {\r\n const definitionIntersect:BorderStyleDefinition = PRESET_CELL_BORDERS_DEFINITIONS_MAP.get(intersections[intersections.length -1].stroke.style);\r\n length = Math.floor(length + (definitionIntersect.width === 2 ? 0 : (definitionIntersect.width) / 2));\r\n }\r\n\r\n // special case. If double we look at the intersections to create additional gaps\r\n if (isDouble) {\r\n const startIntersect = isVertical ? 'colStart' : 'rowStart';\r\n const endIntersect = isVertical ? 'colEnd' : 'rowEnd';\r\n const offsetFn = isVertical ? cellLayout?.getRowOffset : cellLayout?.getColOffset;\r\n let lastBoundsBefore = 0;\r\n let lastBoundsAfter = 0;\r\n dashedBefore = [];\r\n dashedAfter = [];\r\n for (let i=0; i<intersections.length; i++) {\r\n const intersection = intersections[i];\r\n if (intersection.stroke.style !== BorderStrokeStyle.Double)\r\n continue;\r\n if (offsetFn) {\r\n const boundsIntersect = offsetFn(intersection.range[start]) - (startBounds - offset);\r\n if (intersection.range[startIntersect] < range[startIntersect]) {\r\n dashedBefore.push(boundsIntersect - lastBoundsBefore);\r\n lastBoundsBefore = boundsIntersect;\r\n dashedBefore.push(1);\r\n lastBoundsBefore++;\r\n }\r\n if (intersection.range[endIntersect] > range[endIntersect]) {\r\n dashedAfter.push(boundsIntersect - lastBoundsAfter);\r\n lastBoundsAfter = boundsIntersect;\r\n dashedAfter.push(1);\r\n lastBoundsAfter++;\r\n }\r\n }\r\n }\r\n // remainder\r\n if (dashedBefore.length > 0 && lastBoundsBefore < length) {\r\n dashedBefore.push(length - lastBoundsBefore);\r\n }\r\n if (dashedAfter.length > 0 && lastBoundsAfter < length) {\r\n dashedAfter.push(length - lastBoundsAfter);\r\n }\r\n }\r\n }\r\n\r\n let offsetX = isVertical ? - Math.floor(definition.width / 2) : -offset;\r\n let offsetY = !isVertical ? - Math.floor(definition.width / 2) : -offset;\r\n const shift = shiftIfWide && definition.width > 2 ? 1 : 0;\r\n\r\n return (\r\n <StyledStrokePath\r\n key={key}\r\n offsetX={x + offsetX - shift }\r\n offsetY={y + offsetY - shift }\r\n length={length + offset}\r\n isVertical={isVertical}\r\n // stroke={isVertical ? 'red' : strokeColor}\r\n stroke={strokeColor}\r\n width={definition.width}\r\n dashArray={dashedBefore ?? definition.pattern}\r\n dashArrayAdditional={dashedAfter}\r\n isDouble={isDouble}\r\n isAngled={definition.description.toLowerCase().includes('slant')}\r\n />\r\n )\r\n}"},description:"Allow users to customize border rendering.\nNote - This is wrapped in a single SVG so must be an SVG Element type (like a path).",name:"borderRenderer",required:!1,type:{name:"(props: BorderRenderProps) => ReactNode"}},defaultColor:{defaultValue:{value:"black"},description:"",name:"defaultColor",required:!1,type:{name:"string"}},darkMode:{defaultValue:null,description:"",name:"darkMode",required:!1,type:{name:"boolean"}},forceThinBorder:{defaultValue:{value:"false"},description:"Force all rendering to be a single border line.\nUse for previews.",name:"forceThinBorder",required:!1,type:{name:"boolean"}},shiftIfWide:{defaultValue:{value:"false"},description:"A special flag to shift large borders",name:"shiftIfWide",required:!1,type:{name:"boolean"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["../../packages/sheet-react/src/hooks/useBordersOverlay.tsx#useBordersOverlay"]={docgenInfo:useBordersOverlay.__docgenInfo,name:"useBordersOverlay",path:"../../packages/sheet-react/src/hooks/useBordersOverlay.tsx#useBordersOverlay"})}catch(__react_docgen_typescript_loader_error){}},"../../packages/sheet-react/src/hooks/useSheetListener.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{t:()=>useSheetListener});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js");const useSheetListener=(model,listener,options)=>{const listenerRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(listener);listenerRef.current=listener;const fireOnModelChange=options?.fireOnModelChange??!0;(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{if(!model||!listenerRef.current)return;const stableListener={onCellsChange(){listenerRef.current?.onCellsChange?.()},onMergesChange(){listenerRef.current?.onMergesChange?.()},onDrawingsChange(){listenerRef.current?.onDrawingsChange?.()},onLayoutChange(){listenerRef.current?.onLayoutChange?.()},onProtectionChange:()=>{listenerRef.current?.onProtectionChange?.()},onViewChange(update){listenerRef.current?.onViewChange?.(update)},onTabColorChange:()=>{listenerRef.current?.onTabColorChange?.()},onStyleChange:()=>{listenerRef.current?.onStyleChange?.()},onOperation:operationName=>listenerRef.current?.onOperation?.(operationName)},remover=model.addListener(stableListener);return fireOnModelChange&&(stableListener.onCellsChange(),stableListener.onMergesChange(),stableListener.onDrawingsChange(),stableListener.onProtectionChange(),stableListener.onViewChange(model.getView()),stableListener.onLayoutChange(),stableListener.onTabColorChange(),stableListener.onStyleChange()),()=>{remover?.()}}),[model])}},"../../packages/sheet-react/src/hooks/useSheetViewListener.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{y:()=>useSheetViewListener});var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/react/index.js");const useSheetViewListener=(model,listener,options)=>{const listenerRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(listener);listenerRef.current=listener;const fireOnSheetChange=options?.fireOnModelChange??!0;(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)((()=>{if(!model||!listenerRef.current)return;const stableListener={onSelectionChange(update){listenerRef.current?.onSelectionChange?.(update)},onTopLeftChange(update){listenerRef.current?.onTopLeftChange?.(update)},onFreezeSplitChange(update){listenerRef.current?.onFreezeSplitChange?.(update)},onViewChange(update){listenerRef.current?.onViewChange?.(update)},onDrawingSelectionChange(update){listenerRef.current?.onDrawingSelectionChange?.(update)}},remover=model.addListener(stableListener);return fireOnSheetChange&&(stableListener.onTopLeftChange(model.topLeft),stableListener.onSelectionChange(model.selection),stableListener.onFreezeSplitChange(model.freezePanes),stableListener.onViewChange(model),stableListener.onDrawingSelectionChange(model.drawingSelection)),()=>{remover?.()}}),[model])}},"../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].use[1]!../../packages/sheet-react/src/components/drawing/DrawingArea.module.css":(module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{A:()=>__WEBPACK_DEFAULT_EXPORT__});var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/css-loader/dist/runtime/noSourceMaps.js"),_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/css-loader/dist/runtime/api.js"),___CSS_LOADER_EXPORT___=__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)()(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default());___CSS_LOADER_EXPORT___.push([module.id,"/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n.KMiruiFH3_JmlvVKrH7R {\n & .moveable-control-box {\n & .dragging {\n opacity: 0;\n }\n & .moveable-control {\n width: 11px;\n height: 11px;\n margin-top: -5.5px;\n margin-left: -5.5px;\n background-color: var(--sxl-app-color-background, white);\n background-image: var(--sxl-app-image-background);\n border: 2px solid var(--sxl-app-color-primary-dark, grey);\n }\n & .moveable-line {\n background: var(--sxl-app-color-grey, grey);\n }\n }\n}\n\n@media (pointer: coarse) {\n .KMiruiFH3_JmlvVKrH7R {\n & .moveable-control-box {\n & .moveable-control {\n width: 22px;\n height: 22px;\n margin-top: -11px;\n margin-left: -11px;\n }\n }\n }\n}\n",""]),___CSS_LOADER_EXPORT___.locals={"drawing-area":"KMiruiFH3_JmlvVKrH7R"};const __WEBPACK_DEFAULT_EXPORT__=___CSS_LOADER_EXPORT___},"../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].use[1]!../../packages/sheet-react/src/components/sheet/Sheet.module.css":(module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{A:()=>__WEBPACK_DEFAULT_EXPORT__});var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("../../node_modules/css-loader/dist/runtime/noSourceMaps.js"),_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("../../node_modules/css-loader/dist/runtime/api.js"),___CSS_LOADER_EXPORT___=__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)()(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default());___CSS_LOADER_EXPORT___.push([module.id,"/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n.DPpoUahS2vI9G4cUYiPt {\n & .Db_yCtN1R1KQ9QT76F1U {\n pointer-events: none;\n & * {\n pointer-events: initial;\n }\n }\n}",""]),___CSS_LOADER_EXPORT___.locals={"sheetxl-sheet":"DPpoUahS2vI9G4cUYiPt","viewport-overlay":"Db_yCtN1R1KQ9QT76F1U"};const __WEBPACK_DEFAULT_EXPORT__=___CSS_LOADER_EXPORT___}}]);