@gridsheet/react-core 1.4.0-alpha.10 → 1.4.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/jsx-runtime.js +6 -0
- package/dist/_virtual/jsx-runtime.js.map +1 -0
- package/dist/_virtual/jsx-runtime2.js +5 -0
- package/dist/_virtual/jsx-runtime2.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.development.js +5 -0
- package/dist/_virtual/react-jsx-runtime.development.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.production.js +5 -0
- package/dist/_virtual/react-jsx-runtime.production.js.map +1 -0
- package/dist/components/Cell.js +8 -8
- package/dist/components/Cell.js.map +1 -1
- package/dist/components/ContextMenu.js +33 -33
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/Editor.js +11 -11
- package/dist/components/Editor.js.map +1 -1
- package/dist/components/Emitter.js +2 -2
- package/dist/components/Emitter.js.map +1 -1
- package/dist/components/Fixed.js +2 -2
- package/dist/components/Fixed.js.map +1 -1
- package/dist/components/FormulaBar.js +7 -7
- package/dist/components/FormulaBar.js.map +1 -1
- package/dist/components/GridSheet.js +10 -10
- package/dist/components/GridSheet.js.map +1 -1
- package/dist/components/HeaderCellLeft.js +5 -5
- package/dist/components/HeaderCellLeft.js.map +1 -1
- package/dist/components/HeaderCellTop.js +6 -6
- package/dist/components/HeaderCellTop.js.map +1 -1
- package/dist/components/PluginBase.js +3 -3
- package/dist/components/PluginBase.js.map +1 -1
- package/dist/components/Resizer.js +4 -4
- package/dist/components/Resizer.js.map +1 -1
- package/dist/components/SearchBar.js +8 -8
- package/dist/components/SearchBar.js.map +1 -1
- package/dist/components/SheetProvider.js +2 -2
- package/dist/components/SheetProvider.js.map +1 -1
- package/dist/components/StoreInitializer.js +2 -2
- package/dist/components/StoreInitializer.js.map +1 -1
- package/dist/components/Tabular.js +21 -21
- package/dist/components/Tabular.js.map +1 -1
- package/dist/components/svg/Base.js +2 -2
- package/dist/components/svg/Base.js.map +1 -1
- package/dist/components/svg/CloseIcon.js +5 -5
- package/dist/components/svg/CloseIcon.js.map +1 -1
- package/dist/components/svg/SearchIcon.js +5 -5
- package/dist/components/svg/SearchIcon.js.map +1 -1
- package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.development.js +454 -0
- package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.production.js +42 -0
- package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -0
- package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/jsx-runtime.js +18 -0
- package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/jsx-runtime.js.map +1 -0
- package/dist/parsers/core.js.map +1 -1
- package/dist/renderers/checkbox.js +2 -2
- package/dist/renderers/checkbox.js.map +1 -1
- package/package.json +2 -3
- package/README.md +0 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","sources":["../../components/Editor.tsx"],"sourcesContent":["import React from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { clip } from '../lib/clipboard';\nimport {\n clear,\n escape,\n select,\n setEditingCell,\n undo,\n redo,\n arrow,\n walk,\n write,\n copy,\n cut,\n paste,\n setSearchQuery,\n setEntering,\n setLastEdited,\n setLastFocusedRef,\n setInputting,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { areaToZone } from '../lib/structs';\nimport * as prevention from '../lib/prevention';\nimport { expandInput, insertTextAtCursor } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\nimport { Lexer } from '../formula/evaluator';\nimport { REF_PALETTE } from '../lib/palette';\nimport { ModeType } from '../types';\nimport { Fixed } from './Fixed';\n\ntype Props = {\n mode: ModeType;\n};\n\nexport const Editor: React.FC<Props> = ({ mode }: Props) => {\n const { store, dispatch } = React.useContext(Context);\n const {\n showAddress,\n editorRect,\n editingCell,\n choosing,\n inputting,\n selectingZone,\n searchQuery,\n editorRef,\n largeEditorRef,\n searchInputRef,\n editingOnEnter,\n onSave,\n table,\n sheetId,\n } = store;\n\n const [, sheetContext] = useSheetContext();\n React.useEffect(() => {\n editorRef?.current?.focus?.({ preventScroll: true });\n }, [editorRef]);\n\n React.useEffect(() => {\n if (!sheetContext?.lastFocusedRef) {\n return;\n }\n if (sheetContext.lastFocusedRef === editorRef) {\n return;\n }\n if (sheetContext.lastFocusedRef === largeEditorRef) {\n return;\n }\n dispatch(setEditingCell(''));\n }, [sheetContext?.lastFocusedRef]);\n React.useEffect(() => {\n sheetContext?.setEditingCell?.(editingCell);\n }, [editingCell]);\n\n const { y, x } = choosing;\n const rowId = `${y2r(y)}`;\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const editing = editingCell === address;\n\n const cell = table.getByPoint({ y, x });\n const value: any = cell?.value;\n const valueString = table.stringify({ y, x }, value);\n const [before, setBefore] = React.useState<string>(valueString);\n React.useEffect(() => {\n setBefore(valueString);\n }, [choosing]);\n\n const { y: top, x: left, height, width } = editorRect;\n\n const writeCell = (value: string) => {\n if (before !== value) {\n dispatch(write(value));\n }\n setBefore(value);\n };\n\n const numLines = valueString.split('\\n').length;\n const [isKeyDown, setIsKeyDown] = React.useState(false);\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (isKeyDown) {\n return;\n }\n // do not debounce it if control key is down.\n if (!(e.key === 'Meta' || e.key === 'Control')) {\n setIsKeyDown(true);\n const timeout = window.setTimeout(() => {\n setIsKeyDown(false);\n window.clearTimeout(timeout);\n }, 10);\n }\n const input = e.currentTarget;\n\n const shiftKey = e.shiftKey;\n switch (e.key) {\n case 'Tab': // TAB\n e.preventDefault();\n if (editing) {\n writeCell(input.value);\n dispatch(setEditingCell(''));\n dispatch(setInputting(''));\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: shiftKey ? -1 : 1,\n }),\n );\n dispatch(setEditingCell(''));\n resetSize(e.currentTarget);\n return false;\n\n case 'Enter': // ENTER\n if (editing) {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n dispatch(setInputting(input.value));\n e.preventDefault();\n return false;\n } else {\n if (e.nativeEvent.isComposing) {\n return false;\n }\n writeCell(input.value);\n dispatch(setEditingCell(''));\n }\n resetSize(e.currentTarget);\n } else if (editingOnEnter && selectingZone.endY === -1) {\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input.dispatchEvent(dblclick);\n e.preventDefault();\n return false;\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: shiftKey ? -1 : 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n\n case 'Backspace': // BACKSPACE\n if (!editing) {\n dispatch(clear(null));\n return false;\n }\n break;\n case 'Shift': // SHIFT\n return false;\n\n case 'Control': // CTRL\n return false;\n\n case 'Alt': // OPTION\n return false;\n\n case 'Meta': // COMMAND\n return false;\n\n case 'NumLock': // NUMLOCK\n return false;\n\n case 'Escape': // ESCAPE\n dispatch(escape(null));\n dispatch(setSearchQuery(undefined));\n // input.blur();\n return false;\n\n case 'ArrowLeft': // LEFT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: -1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowUp': // UP\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: -1,\n deltaX: 0,\n }),\n );\n return false;\n }\n break;\n case 'ArrowRight': // RIGHT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: 1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowDown': // DOWN\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n return false;\n }\n break;\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n return false;\n }\n }\n break;\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n input.focus(); // refocus\n return false;\n }\n }\n break;\n case 'f': // F\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (typeof searchQuery === 'undefined') {\n dispatch(setSearchQuery(''));\n }\n dispatch(setEntering(false));\n window.setTimeout(() => searchInputRef.current!.focus(), 100);\n return false;\n }\n }\n break;\n case 'r': // R\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(redo(null));\n window.setTimeout(() => dispatch(setInputting('')), 100); // resetting textarea\n return false;\n }\n }\n break;\n case 's': // S\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n onSave &&\n onSave(table, {\n pointing: choosing,\n selectingFrom: {\n y: selectingZone.startY,\n x: selectingZone.startX,\n },\n selectingTo: {\n y: selectingZone.endY,\n x: selectingZone.endX,\n },\n });\n return false;\n }\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n window.setTimeout(() => {\n dispatch(paste({ text: input.value }));\n dispatch(setInputting(''));\n }, 50);\n return false;\n }\n }\n break;\n case 'x': // X\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n input.focus(); // refocus\n\n return false;\n }\n }\n break;\n case 'z': // Z\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (e.shiftKey) {\n dispatch(redo(null));\n //window.setTimeout(() => dispatch(setInputting('')), 100); // resetting textarea\n } else {\n dispatch(undo(null));\n }\n return false;\n }\n }\n break;\n case ';': // semicolon\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n // MAYBE: need to aware timezone.\n writeCell(new Date().toDateString());\n }\n }\n break;\n }\n if (e.ctrlKey || e.metaKey) {\n return false;\n }\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return false;\n }\n dispatch(setEditingCell(address));\n if (!editing) {\n dispatch(setInputting(''));\n }\n return false;\n };\n\n return (\n <Fixed\n className={`gs-editor ${editing ? 'gs-editing' : ''}`}\n style={editing ? { top, left, height } : {}}\n {...{\n 'data-mode': mode,\n 'data-sheet-id': sheetId,\n }}\n >\n {showAddress && <div className=\"gs-cell-label\">{address}</div>}\n <div className=\"gs-editor-inner\" style={{ width }}>\n <pre\n className=\"gs-editor-hl\"\n style={{\n //...cell?.style,\n height: editorRef.current?.scrollHeight,\n width: (editorRef.current?.scrollWidth ?? 0) - 4,\n }}\n >\n {editorStyle(inputting)}\n </pre>\n <textarea\n autoFocus={true}\n spellCheck={false}\n draggable={false}\n ref={editorRef}\n rows={numLines}\n onFocus={() => {\n dispatch(setLastFocusedRef(editorRef));\n sheetContext?.setLastFocusedRef?.(editorRef);\n }}\n style={{ minWidth: width, minHeight: height }}\n onDoubleClick={(e) => {\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return;\n }\n const input = e.currentTarget;\n resetSize(input);\n if (!editing) {\n dispatch(setInputting(valueString));\n dispatch(setEditingCell(address));\n window.setTimeout(() => {\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n const length = new String(valueString).length;\n input.setSelectionRange(length, length);\n }, 20);\n }\n }}\n onBlur={(e) => {\n dispatch(setLastEdited(before));\n if (e.target.value.startsWith('=')) {\n return true;\n } else {\n if (editing) {\n writeCell(e.target.value);\n }\n }\n resetSize(e.target);\n }}\n value={inputting}\n onChange={(e) => {\n const input = e.currentTarget;\n expandInput(input);\n dispatch(setInputting(e.currentTarget.value));\n }}\n onKeyDown={handleKeyDown}\n />\n </div>\n </Fixed>\n );\n};\n\nexport const editorStyle = (text: string) => {\n if (text[0] !== '=') {\n return <>{text}</>;\n }\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n let palletIndex = 0;\n const exists: { [ref: string]: number } = {};\n return (\n <>\n =\n {lexer.tokens.map((token, i) => {\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedToken = token.stringify();\n const existsIndex = exists[normalizedToken];\n if (existsIndex !== undefined) {\n return (\n <span key={i} style={{ color: REF_PALETTE[existsIndex % REF_PALETTE.length] }}>\n {token.stringify()}\n </span>\n );\n }\n const color = REF_PALETTE[palletIndex % REF_PALETTE.length];\n exists[normalizedToken] = palletIndex++;\n return (\n <span key={i} style={{ color }} className={`gs-token-type-${token.type}`}>\n {normalizedToken}\n </span>\n );\n }\n\n return (\n <span key={i} className={`gs-token-type-${token.type} gs-token-entity-type-${typeof token.entity}`}>\n {token.stringify()}\n </span>\n );\n })}\n </>\n );\n};\n\nconst resetSize = (input: HTMLTextAreaElement) => {\n input.style.width = '0px';\n input.style.height = '0px';\n};\n"],"names":["React","_b","_a","value","prevention.isPrevented","prevention.Write"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Editor.js","sources":["../../components/Editor.tsx"],"sourcesContent":["import React from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { clip } from '../lib/clipboard';\nimport {\n clear,\n escape,\n select,\n setEditingCell,\n undo,\n redo,\n arrow,\n walk,\n write,\n copy,\n cut,\n paste,\n setSearchQuery,\n setEntering,\n setLastEdited,\n setLastFocusedRef,\n setInputting,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { areaToZone } from '../lib/structs';\nimport * as prevention from '../lib/prevention';\nimport { expandInput, insertTextAtCursor } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\nimport { Lexer } from '../formula/evaluator';\nimport { REF_PALETTE } from '../lib/palette';\nimport { ModeType } from '../types';\nimport { Fixed } from './Fixed';\n\ntype Props = {\n mode: ModeType;\n};\n\nexport const Editor: React.FC<Props> = ({ mode }: Props) => {\n const { store, dispatch } = React.useContext(Context);\n const {\n showAddress,\n editorRect,\n editingCell,\n choosing,\n inputting,\n selectingZone,\n searchQuery,\n editorRef,\n largeEditorRef,\n searchInputRef,\n editingOnEnter,\n onSave,\n table,\n sheetId,\n } = store;\n\n const [, sheetContext] = useSheetContext();\n React.useEffect(() => {\n editorRef?.current?.focus?.({ preventScroll: true });\n }, [editorRef]);\n\n React.useEffect(() => {\n if (!sheetContext?.lastFocusedRef) {\n return;\n }\n if (sheetContext.lastFocusedRef === editorRef) {\n return;\n }\n if (sheetContext.lastFocusedRef === largeEditorRef) {\n return;\n }\n dispatch(setEditingCell(''));\n }, [sheetContext?.lastFocusedRef]);\n React.useEffect(() => {\n sheetContext?.setEditingCell?.(editingCell);\n }, [editingCell]);\n\n const { y, x } = choosing;\n const rowId = `${y2r(y)}`;\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const editing = editingCell === address;\n\n const cell = table.getByPoint({ y, x });\n const value: any = cell?.value;\n const valueString = table.stringify({ y, x }, value);\n const [before, setBefore] = React.useState<string>(valueString);\n React.useEffect(() => {\n setBefore(valueString);\n }, [choosing]);\n\n const { y: top, x: left, height, width } = editorRect;\n\n const writeCell = (value: string) => {\n if (before !== value) {\n dispatch(write(value));\n }\n setBefore(value);\n };\n\n const numLines = valueString.split('\\n').length;\n const [isKeyDown, setIsKeyDown] = React.useState(false);\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (isKeyDown) {\n return;\n }\n // do not debounce it if control key is down.\n if (!(e.key === 'Meta' || e.key === 'Control')) {\n setIsKeyDown(true);\n const timeout = window.setTimeout(() => {\n setIsKeyDown(false);\n window.clearTimeout(timeout);\n }, 10);\n }\n const input = e.currentTarget;\n\n const shiftKey = e.shiftKey;\n switch (e.key) {\n case 'Tab': // TAB\n e.preventDefault();\n if (editing) {\n writeCell(input.value);\n dispatch(setEditingCell(''));\n dispatch(setInputting(''));\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: shiftKey ? -1 : 1,\n }),\n );\n dispatch(setEditingCell(''));\n resetSize(e.currentTarget);\n return false;\n\n case 'Enter': // ENTER\n if (editing) {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n dispatch(setInputting(input.value));\n e.preventDefault();\n return false;\n } else {\n if (e.nativeEvent.isComposing) {\n return false;\n }\n writeCell(input.value);\n dispatch(setEditingCell(''));\n }\n resetSize(e.currentTarget);\n } else if (editingOnEnter && selectingZone.endY === -1) {\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input.dispatchEvent(dblclick);\n e.preventDefault();\n return false;\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: shiftKey ? -1 : 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n\n case 'Backspace': // BACKSPACE\n if (!editing) {\n dispatch(clear(null));\n return false;\n }\n break;\n case 'Shift': // SHIFT\n return false;\n\n case 'Control': // CTRL\n return false;\n\n case 'Alt': // OPTION\n return false;\n\n case 'Meta': // COMMAND\n return false;\n\n case 'NumLock': // NUMLOCK\n return false;\n\n case 'Escape': // ESCAPE\n dispatch(escape(null));\n dispatch(setSearchQuery(undefined));\n // input.blur();\n return false;\n\n case 'ArrowLeft': // LEFT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: -1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowUp': // UP\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: -1,\n deltaX: 0,\n }),\n );\n return false;\n }\n break;\n case 'ArrowRight': // RIGHT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: 1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowDown': // DOWN\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n return false;\n }\n break;\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n return false;\n }\n }\n break;\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n input.focus(); // refocus\n return false;\n }\n }\n break;\n case 'f': // F\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (typeof searchQuery === 'undefined') {\n dispatch(setSearchQuery(''));\n }\n dispatch(setEntering(false));\n window.setTimeout(() => searchInputRef.current!.focus(), 100);\n return false;\n }\n }\n break;\n case 'r': // R\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(redo(null));\n window.setTimeout(() => dispatch(setInputting('')), 100); // resetting textarea\n return false;\n }\n }\n break;\n case 's': // S\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n onSave &&\n onSave(table, {\n pointing: choosing,\n selectingFrom: {\n y: selectingZone.startY,\n x: selectingZone.startX,\n },\n selectingTo: {\n y: selectingZone.endY,\n x: selectingZone.endX,\n },\n });\n return false;\n }\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n window.setTimeout(() => {\n dispatch(paste({ text: input.value }));\n dispatch(setInputting(''));\n }, 50);\n return false;\n }\n }\n break;\n case 'x': // X\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n input.focus(); // refocus\n\n return false;\n }\n }\n break;\n case 'z': // Z\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (e.shiftKey) {\n dispatch(redo(null));\n //window.setTimeout(() => dispatch(setInputting('')), 100); // resetting textarea\n } else {\n dispatch(undo(null));\n }\n return false;\n }\n }\n break;\n case ';': // semicolon\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n // MAYBE: need to aware timezone.\n writeCell(new Date().toDateString());\n }\n }\n break;\n }\n if (e.ctrlKey || e.metaKey) {\n return false;\n }\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return false;\n }\n dispatch(setEditingCell(address));\n if (!editing) {\n dispatch(setInputting(''));\n }\n return false;\n };\n\n return (\n <Fixed\n className={`gs-editor ${editing ? 'gs-editing' : ''}`}\n style={editing ? { top, left, height } : {}}\n {...{\n 'data-mode': mode,\n 'data-sheet-id': sheetId,\n }}\n >\n {showAddress && <div className=\"gs-cell-label\">{address}</div>}\n <div className=\"gs-editor-inner\" style={{ width }}>\n <pre\n className=\"gs-editor-hl\"\n style={{\n //...cell?.style,\n height: editorRef.current?.scrollHeight,\n width: (editorRef.current?.scrollWidth ?? 0) - 4,\n }}\n >\n {editorStyle(inputting)}\n </pre>\n <textarea\n autoFocus={true}\n spellCheck={false}\n draggable={false}\n ref={editorRef}\n rows={numLines}\n onFocus={() => {\n dispatch(setLastFocusedRef(editorRef));\n sheetContext?.setLastFocusedRef?.(editorRef);\n }}\n style={{ minWidth: width, minHeight: height }}\n onDoubleClick={(e) => {\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return;\n }\n const input = e.currentTarget;\n resetSize(input);\n if (!editing) {\n dispatch(setInputting(valueString));\n dispatch(setEditingCell(address));\n window.setTimeout(() => {\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n const length = new String(valueString).length;\n input.setSelectionRange(length, length);\n }, 20);\n }\n }}\n onBlur={(e) => {\n dispatch(setLastEdited(before));\n if (e.target.value.startsWith('=')) {\n return true;\n } else {\n if (editing) {\n writeCell(e.target.value);\n }\n }\n resetSize(e.target);\n }}\n value={inputting}\n onChange={(e) => {\n const input = e.currentTarget;\n expandInput(input);\n dispatch(setInputting(e.currentTarget.value));\n }}\n onKeyDown={handleKeyDown}\n />\n </div>\n </Fixed>\n );\n};\n\nexport const editorStyle = (text: string) => {\n if (text[0] !== '=') {\n return <>{text}</>;\n }\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n let palletIndex = 0;\n const exists: { [ref: string]: number } = {};\n return (\n <>\n =\n {lexer.tokens.map((token, i) => {\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedToken = token.stringify();\n const existsIndex = exists[normalizedToken];\n if (existsIndex !== undefined) {\n return (\n <span key={i} style={{ color: REF_PALETTE[existsIndex % REF_PALETTE.length] }}>\n {token.stringify()}\n </span>\n );\n }\n const color = REF_PALETTE[palletIndex % REF_PALETTE.length];\n exists[normalizedToken] = palletIndex++;\n return (\n <span key={i} style={{ color }} className={`gs-token-type-${token.type}`}>\n {normalizedToken}\n </span>\n );\n }\n\n return (\n <span key={i} className={`gs-token-type-${token.type} gs-token-entity-type-${typeof token.entity}`}>\n {token.stringify()}\n </span>\n );\n })}\n </>\n );\n};\n\nconst resetSize = (input: HTMLTextAreaElement) => {\n input.style.width = '0px';\n input.style.height = '0px';\n};\n"],"names":["React","_b","_a","value","prevention.isPrevented","prevention.Write","jsxs","jsx","Fragment"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import React__default from "react";
|
|
3
3
|
import { Context } from "../store/index.js";
|
|
4
4
|
const Emitter = ({ onChange, onSelect }) => {
|
|
@@ -18,7 +18,7 @@ const Emitter = ({ onChange, onSelect }) => {
|
|
|
18
18
|
selectingTo: { y: zone.endY, x: zone.endX }
|
|
19
19
|
});
|
|
20
20
|
}, [pointing, zone]);
|
|
21
|
-
return /* @__PURE__ */ jsx(Fragment, {});
|
|
21
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {});
|
|
22
22
|
};
|
|
23
23
|
export {
|
|
24
24
|
Emitter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Emitter.js","sources":["../../components/Emitter.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Context } from '../store';\nimport { FeedbackType } from '../types';\n\ntype Props = {\n onChange?: FeedbackType;\n onSelect?: FeedbackType;\n};\n\nexport const Emitter: React.FC<Props> = ({ onChange, onSelect }) => {\n const { store } = React.useContext(Context);\n const { choosing: pointing, selectingZone: zone, table, tableInitialized } = store;\n\n React.useEffect(() => {\n tableInitialized &&\n table &&\n onChange &&\n onChange(table, {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n });\n }, [table]);\n\n React.useEffect(() => {\n onSelect &&\n onSelect(table, {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n });\n }, [pointing, zone]);\n return <></>;\n};\n"],"names":["React"],"mappings":";;;AAUO,MAAM,UAA2B,CAAC,EAAE,UAAU,eAAe;AAClE,QAAM,EAAE,MAAU,IAAAA,eAAM,WAAW,OAAO;AAC1C,QAAM,EAAE,UAAU,UAAU,eAAe,MAAM,OAAO,qBAAqB;AAE7EA,iBAAM,UAAU,MAAM;AAElB,wBAAA,SACA,YACA,SAAS,OAAO;AAAA,MACd;AAAA,MACA,eAAe,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,MAChD,aAAa,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,IAAA,CAC3C;AAAA,EAAA,GACF,CAAC,KAAK,CAAC;AAEVA,iBAAM,UAAU,MAAM;AACpB,gBACE,SAAS,OAAO;AAAA,MACd;AAAA,MACA,eAAe,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,MAChD,aAAa,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,IAAA,CAC3C;AAAA,EAAA,GACF,CAAC,UAAU,IAAI,CAAC;AACnB,
|
|
1
|
+
{"version":3,"file":"Emitter.js","sources":["../../components/Emitter.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Context } from '../store';\nimport { FeedbackType } from '../types';\n\ntype Props = {\n onChange?: FeedbackType;\n onSelect?: FeedbackType;\n};\n\nexport const Emitter: React.FC<Props> = ({ onChange, onSelect }) => {\n const { store } = React.useContext(Context);\n const { choosing: pointing, selectingZone: zone, table, tableInitialized } = store;\n\n React.useEffect(() => {\n tableInitialized &&\n table &&\n onChange &&\n onChange(table, {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n });\n }, [table]);\n\n React.useEffect(() => {\n onSelect &&\n onSelect(table, {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n });\n }, [pointing, zone]);\n return <></>;\n};\n"],"names":["React","jsx","Fragment"],"mappings":";;;AAUO,MAAM,UAA2B,CAAC,EAAE,UAAU,eAAe;AAClE,QAAM,EAAE,MAAU,IAAAA,eAAM,WAAW,OAAO;AAC1C,QAAM,EAAE,UAAU,UAAU,eAAe,MAAM,OAAO,qBAAqB;AAE7EA,iBAAM,UAAU,MAAM;AAElB,wBAAA,SACA,YACA,SAAS,OAAO;AAAA,MACd;AAAA,MACA,eAAe,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,MAChD,aAAa,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,IAAA,CAC3C;AAAA,EAAA,GACF,CAAC,KAAK,CAAC;AAEVA,iBAAM,UAAU,MAAM;AACpB,gBACE,SAAS,OAAO;AAAA,MACd;AAAA,MACA,eAAe,EAAE,GAAG,KAAK,QAAQ,GAAG,KAAK,OAAO;AAAA,MAChD,aAAa,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK;AAAA,IAAA,CAC3C;AAAA,EAAA,GACF,CAAC,UAAU,IAAI,CAAC;AACnB,SAASC,kCAAA,IAAAC,kBAAA,UAAA,EAAA;AACX;"}
|
package/dist/components/Fixed.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import { createPortal } from "react-dom";
|
|
3
3
|
import { useBrowser } from "./hooks.js";
|
|
4
4
|
const Fixed = ({ children, style, className = "", ...attrs }) => {
|
|
@@ -7,7 +7,7 @@ const Fixed = ({ children, style, className = "", ...attrs }) => {
|
|
|
7
7
|
return null;
|
|
8
8
|
}
|
|
9
9
|
return createPortal(
|
|
10
|
-
/* @__PURE__ */ jsx("div", { ...attrs, className: `gs-fixed ${className}`, style, children }),
|
|
10
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ...attrs, className: `gs-fixed ${className}`, style, children }),
|
|
11
11
|
document.body
|
|
12
12
|
);
|
|
13
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fixed.js","sources":["../../components/Fixed.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useBrowser } from './hooks';\n\ntype Props = {\n className?: string;\n style?: CSSProperties;\n children: React.ReactNode;\n [attr: string]: any;\n};\n\nexport const Fixed: React.FC<Props> = ({ children, style, className = '', ...attrs }) => {\n const { document } = useBrowser();\n if (document == null) {\n return null;\n }\n return createPortal(\n <div {...attrs} className={`gs-fixed ${className}`} style={style}>\n {children}\n </div>,\n document.body,\n );\n};\n"],"names":[],"mappings":";;;AAWa,MAAA,QAAyB,CAAC,EAAE,UAAU,OAAO,YAAY,IAAI,GAAG,YAAY;AACjF,QAAA,EAAE,SAAS,IAAI,WAAW;AAChC,MAAI,YAAY,MAAM;AACb,WAAA;AAAA,EAAA;AAEF,SAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"Fixed.js","sources":["../../components/Fixed.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useBrowser } from './hooks';\n\ntype Props = {\n className?: string;\n style?: CSSProperties;\n children: React.ReactNode;\n [attr: string]: any;\n};\n\nexport const Fixed: React.FC<Props> = ({ children, style, className = '', ...attrs }) => {\n const { document } = useBrowser();\n if (document == null) {\n return null;\n }\n return createPortal(\n <div {...attrs} className={`gs-fixed ${className}`} style={style}>\n {children}\n </div>,\n document.body,\n );\n};\n"],"names":["jsx"],"mappings":";;;AAWa,MAAA,QAAyB,CAAC,EAAE,UAAU,OAAO,YAAY,IAAI,GAAG,YAAY;AACjF,QAAA,EAAE,SAAS,IAAI,WAAW;AAChC,MAAI,YAAY,MAAM;AACb,WAAA;AAAA,EAAA;AAEF,SAAA;AAAA,IACLA,kCAAAA,IAAC,SAAK,GAAG,OAAO,WAAW,YAAY,SAAS,IAAI,OACjD,SACH,CAAA;AAAA,IACA,SAAS;AAAA,EACX;AACF;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import React__default from "react";
|
|
3
3
|
import { Context } from "../store/index.js";
|
|
4
4
|
import { p2a } from "../lib/converters.js";
|
|
@@ -63,11 +63,11 @@ const FormulaBar = () => {
|
|
|
63
63
|
hlRef.current.scrollLeft = largeEditorRef.current.scrollLeft;
|
|
64
64
|
hlRef.current.scrollTop = largeEditorRef.current.scrollTop;
|
|
65
65
|
};
|
|
66
|
-
return /* @__PURE__ */ jsxs("label", { className: "gs-formula-bar", children: [
|
|
67
|
-
/* @__PURE__ */ jsx("div", { className: "gs-selecting-address", children: address }),
|
|
68
|
-
/* @__PURE__ */ jsx("div", { className: "gs-fx", children: "Fx" }),
|
|
69
|
-
/* @__PURE__ */ jsxs("div", { className: "gs-formula-bar-editor-inner", children: [
|
|
70
|
-
/* @__PURE__ */ jsx(
|
|
66
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "gs-formula-bar", children: [
|
|
67
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "gs-selecting-address", children: address }),
|
|
68
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "gs-fx", children: "Fx" }),
|
|
69
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "gs-formula-bar-editor-inner", children: [
|
|
70
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
71
71
|
"div",
|
|
72
72
|
{
|
|
73
73
|
className: "gs-editor-hl",
|
|
@@ -79,7 +79,7 @@ const FormulaBar = () => {
|
|
|
79
79
|
children: editorStyle(inputting)
|
|
80
80
|
}
|
|
81
81
|
),
|
|
82
|
-
/* @__PURE__ */ jsx(
|
|
82
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
83
83
|
"textarea",
|
|
84
84
|
{
|
|
85
85
|
rows: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormulaBar.js","sources":["../../components/FormulaBar.tsx"],"sourcesContent":["import React from 'react';\nimport { Context } from '../store';\nimport { p2a } from '../lib/converters';\nimport { setEditingCell, setInputting, setLastEdited, setLastFocusedRef, walk, write } from '../store/actions';\nimport * as prevention from '../lib/prevention';\nimport { insertTextAtCursor } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\nimport { editorStyle } from './Editor';\n\nexport const FormulaBar: React.FC = () => {\n const { store, dispatch } = React.useContext(Context);\n const [before, setBefore] = React.useState('');\n const { choosing, editorRef, largeEditorRef, table, inputting, editingCell } = store;\n const [, sheetContext] = useSheetContext();\n const hlRef = React.useRef<HTMLDivElement | null>(null);\n\n const address = choosing.x === -1 ? '' : p2a(choosing);\n React.useEffect(() => {\n let value = table.getByPoint(choosing)?.value ?? '';\n // debug to remove this line\n value = table.stringify(choosing, value);\n largeEditorRef.current!.value = value;\n setBefore(value as string);\n }, [address, table]);\n\n const writeCell = (value: string) => {\n if (before !== value) {\n dispatch(write(value));\n }\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n };\n React.useEffect(() => {\n const observer = new ResizeObserver((entries) => {\n entries.forEach(updateScroll);\n });\n if (largeEditorRef.current) {\n observer.observe(largeEditorRef.current);\n }\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const largeInput = largeEditorRef.current;\n\n const handleFocus = () => {\n if (!largeInput) {\n return;\n }\n dispatch(setEditingCell(address));\n dispatch(setLastFocusedRef(largeEditorRef));\n sheetContext?.setLastFocusedRef?.(largeEditorRef);\n };\n const handleInput = (e: React.FormEvent<HTMLTextAreaElement>) => {\n dispatch(setInputting(e.currentTarget.value));\n sheetContext?.forceRender?.();\n };\n\n const updateScroll = () => {\n if (!hlRef.current || !largeEditorRef.current) {\n return;\n }\n hlRef.current.style.height = `${largeEditorRef.current.clientHeight}px`;\n hlRef.current.scrollLeft = largeEditorRef.current.scrollLeft;\n hlRef.current.scrollTop = largeEditorRef.current.scrollTop;\n };\n\n return (\n <label className=\"gs-formula-bar\">\n <div className=\"gs-selecting-address\">{address}</div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <div\n className=\"gs-editor-hl\"\n ref={hlRef}\n style={{\n height: largeEditorRef.current?.clientHeight,\n width: largeEditorRef.current?.clientWidth,\n }}\n >\n {editorStyle(inputting)}\n </div>\n <textarea\n rows={1}\n spellCheck={false}\n ref={largeEditorRef}\n value={inputting}\n onInput={handleInput}\n onFocus={handleFocus}\n onBlur={(e) => {\n dispatch(setLastEdited(before));\n if (e.target.value.startsWith('=')) {\n return true;\n } else {\n if (editingCell) {\n writeCell(e.target.value);\n }\n }\n }}\n onKeyDown={(e) => {\n const input = e.currentTarget;\n switch (e.key) {\n case 'Enter': {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n } else {\n writeCell(input.value);\n dispatch(setInputting(''));\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n }\n break;\n }\n case 'Escape': {\n input.value = before;\n dispatch(setEditingCell(''));\n e.preventDefault();\n editorRef.current!.focus();\n\n break;\n }\n }\n\n const cell = table.getByPoint(choosing);\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n e.preventDefault();\n }\n updateScroll();\n return false;\n }}\n onKeyUp={updateScroll}\n onScroll={updateScroll}\n ></textarea>\n </div>\n </label>\n );\n};\n"],"names":["React","_a","prevention.isPrevented","prevention.Write"],"mappings":";;;;;;;;;AASO,MAAM,aAAuB,MAAM;;AACxC,QAAM,EAAE,OAAO,SAAA,IAAaA,eAAM,WAAW,OAAO;AACpD,QAAM,CAAC,QAAQ,SAAS,IAAIA,eAAM,SAAS,EAAE;AAC7C,QAAM,EAAE,UAAU,WAAW,gBAAgB,OAAO,WAAW,gBAAgB;AAC/E,QAAM,CAAG,EAAA,YAAY,IAAI,gBAAgB;AACnC,QAAA,QAAQA,eAAM,OAA8B,IAAI;AAEtD,QAAM,UAAU,SAAS,MAAM,KAAK,KAAK,IAAI,QAAQ;AACrDA,iBAAM,UAAU,MAAM;;AACpB,QAAI,UAAQC,MAAA,MAAM,WAAW,QAAQ,MAAzB,gBAAAA,IAA4B,UAAS;AAEzC,YAAA,MAAM,UAAU,UAAU,KAAK;AACvC,mBAAe,QAAS,QAAQ;AAChC,cAAU,KAAe;AAAA,EAAA,GACxB,CAAC,SAAS,KAAK,CAAC;AAEb,QAAA,YAAY,CAAC,UAAkB;AACnC,QAAI,WAAW,OAAO;AACX,eAAA,MAAM,KAAK,CAAC;AAAA,IAAA;AAEd,aAAA,eAAe,EAAE,CAAC;AAC3B,cAAU,QAAS,MAAM;AAAA,EAC3B;AACAD,iBAAM,UAAU,MAAM;AACpB,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAC/C,cAAQ,QAAQ,YAAY;AAAA,IAAA,CAC7B;AACD,QAAI,eAAe,SAAS;AACjB,eAAA,QAAQ,eAAe,OAAO;AAAA,IAAA;AAEzC,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,EAAE;AAEL,QAAM,aAAa,eAAe;AAElC,QAAM,cAAc,MAAM;;AACxB,QAAI,CAAC,YAAY;AACf;AAAA,IAAA;AAEO,aAAA,eAAe,OAAO,CAAC;AACvB,aAAA,kBAAkB,cAAc,CAAC;AAC1C,KAAAC,MAAA,6CAAc,sBAAd,gBAAAA,IAAA,mBAAkC;AAAA,EACpC;AACM,QAAA,cAAc,CAAC,MAA4C;;AAC/D,aAAS,aAAa,EAAE,cAAc,KAAK,CAAC;AAC5C,KAAAA,MAAA,6CAAc,gBAAd,gBAAAA,IAAA;AAAA,EACF;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,MAAM,WAAW,CAAC,eAAe,SAAS;AAC7C;AAAA,IAAA;AAEF,UAAM,QAAQ,MAAM,SAAS,GAAG,eAAe,QAAQ,YAAY;AAC7D,UAAA,QAAQ,aAAa,eAAe,QAAQ;AAC5C,UAAA,QAAQ,YAAY,eAAe,QAAQ;AAAA,EACnD;AAGE,
|
|
1
|
+
{"version":3,"file":"FormulaBar.js","sources":["../../components/FormulaBar.tsx"],"sourcesContent":["import React from 'react';\nimport { Context } from '../store';\nimport { p2a } from '../lib/converters';\nimport { setEditingCell, setInputting, setLastEdited, setLastFocusedRef, walk, write } from '../store/actions';\nimport * as prevention from '../lib/prevention';\nimport { insertTextAtCursor } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\nimport { editorStyle } from './Editor';\n\nexport const FormulaBar: React.FC = () => {\n const { store, dispatch } = React.useContext(Context);\n const [before, setBefore] = React.useState('');\n const { choosing, editorRef, largeEditorRef, table, inputting, editingCell } = store;\n const [, sheetContext] = useSheetContext();\n const hlRef = React.useRef<HTMLDivElement | null>(null);\n\n const address = choosing.x === -1 ? '' : p2a(choosing);\n React.useEffect(() => {\n let value = table.getByPoint(choosing)?.value ?? '';\n // debug to remove this line\n value = table.stringify(choosing, value);\n largeEditorRef.current!.value = value;\n setBefore(value as string);\n }, [address, table]);\n\n const writeCell = (value: string) => {\n if (before !== value) {\n dispatch(write(value));\n }\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n };\n React.useEffect(() => {\n const observer = new ResizeObserver((entries) => {\n entries.forEach(updateScroll);\n });\n if (largeEditorRef.current) {\n observer.observe(largeEditorRef.current);\n }\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const largeInput = largeEditorRef.current;\n\n const handleFocus = () => {\n if (!largeInput) {\n return;\n }\n dispatch(setEditingCell(address));\n dispatch(setLastFocusedRef(largeEditorRef));\n sheetContext?.setLastFocusedRef?.(largeEditorRef);\n };\n const handleInput = (e: React.FormEvent<HTMLTextAreaElement>) => {\n dispatch(setInputting(e.currentTarget.value));\n sheetContext?.forceRender?.();\n };\n\n const updateScroll = () => {\n if (!hlRef.current || !largeEditorRef.current) {\n return;\n }\n hlRef.current.style.height = `${largeEditorRef.current.clientHeight}px`;\n hlRef.current.scrollLeft = largeEditorRef.current.scrollLeft;\n hlRef.current.scrollTop = largeEditorRef.current.scrollTop;\n };\n\n return (\n <label className=\"gs-formula-bar\">\n <div className=\"gs-selecting-address\">{address}</div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <div\n className=\"gs-editor-hl\"\n ref={hlRef}\n style={{\n height: largeEditorRef.current?.clientHeight,\n width: largeEditorRef.current?.clientWidth,\n }}\n >\n {editorStyle(inputting)}\n </div>\n <textarea\n rows={1}\n spellCheck={false}\n ref={largeEditorRef}\n value={inputting}\n onInput={handleInput}\n onFocus={handleFocus}\n onBlur={(e) => {\n dispatch(setLastEdited(before));\n if (e.target.value.startsWith('=')) {\n return true;\n } else {\n if (editingCell) {\n writeCell(e.target.value);\n }\n }\n }}\n onKeyDown={(e) => {\n const input = e.currentTarget;\n switch (e.key) {\n case 'Enter': {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n } else {\n writeCell(input.value);\n dispatch(setInputting(''));\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n }\n break;\n }\n case 'Escape': {\n input.value = before;\n dispatch(setEditingCell(''));\n e.preventDefault();\n editorRef.current!.focus();\n\n break;\n }\n }\n\n const cell = table.getByPoint(choosing);\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n e.preventDefault();\n }\n updateScroll();\n return false;\n }}\n onKeyUp={updateScroll}\n onScroll={updateScroll}\n ></textarea>\n </div>\n </label>\n );\n};\n"],"names":["React","_a","jsxs","jsx","prevention.isPrevented","prevention.Write"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { HEADER_HEIGHT, HEADER_WIDTH, HISTORY_LIMIT, DEFAULT_HEIGHT, SHEET_HEIGHT, DEFAULT_WIDTH, SHEET_WIDTH } from "../constants.js";
|
|
4
4
|
import { functions } from "../formula/mapping.js";
|
|
@@ -170,7 +170,7 @@ function GridSheet({
|
|
|
170
170
|
}
|
|
171
171
|
}, [options.sheetWidth]);
|
|
172
172
|
const { onChange, onSelect } = options;
|
|
173
|
-
return /* @__PURE__ */ jsx(Context.Provider, { value: { store, dispatch }, children: /* @__PURE__ */ jsxs(
|
|
173
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Context.Provider, { value: { store, dispatch }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
174
174
|
"div",
|
|
175
175
|
{
|
|
176
176
|
className: `gs-root1`,
|
|
@@ -179,8 +179,8 @@ function GridSheet({
|
|
|
179
179
|
"data-mode": mode,
|
|
180
180
|
style: { maxWidth: `min(100%, ${store.table.totalWidth + 2}px)` },
|
|
181
181
|
children: [
|
|
182
|
-
typeof store.searchQuery === "undefined" ? showFormulaBar && /* @__PURE__ */ jsx(FormulaBar, {}) : /* @__PURE__ */ jsx(SearchBar, {}),
|
|
183
|
-
/* @__PURE__ */ jsxs(
|
|
182
|
+
typeof store.searchQuery === "undefined" ? showFormulaBar && /* @__PURE__ */ jsxRuntimeExports.jsx(FormulaBar, {}) : /* @__PURE__ */ jsxRuntimeExports.jsx(SearchBar, {}),
|
|
183
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
184
184
|
"div",
|
|
185
185
|
{
|
|
186
186
|
className: `gs-main ${className || ""}`,
|
|
@@ -192,9 +192,9 @@ function GridSheet({
|
|
|
192
192
|
resize: sheetResize
|
|
193
193
|
},
|
|
194
194
|
children: [
|
|
195
|
-
/* @__PURE__ */ jsx(Editor, { mode }),
|
|
196
|
-
/* @__PURE__ */ jsx(Tabular, { tableRef }),
|
|
197
|
-
/* @__PURE__ */ jsx(
|
|
195
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Editor, { mode }),
|
|
196
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Tabular, { tableRef }),
|
|
197
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
198
198
|
StoreInitializer,
|
|
199
199
|
{
|
|
200
200
|
initialCells,
|
|
@@ -202,9 +202,9 @@ function GridSheet({
|
|
|
202
202
|
additionalFunctions
|
|
203
203
|
}
|
|
204
204
|
),
|
|
205
|
-
/* @__PURE__ */ jsx(ContextMenu, {}),
|
|
206
|
-
/* @__PURE__ */ jsx(Resizer, {}),
|
|
207
|
-
/* @__PURE__ */ jsx(Emitter, { onChange, onSelect })
|
|
205
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenu, {}),
|
|
206
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Resizer, {}),
|
|
207
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Emitter, { onChange, onSelect })
|
|
208
208
|
]
|
|
209
209
|
}
|
|
210
210
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridSheet.js","sources":["../../components/GridSheet.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ReducerWithoutAction } from 'react';\n\nimport { CellsByAddressType, OptionsType, Props, StoreType } from '../types';\nimport {\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n HEADER_HEIGHT,\n HEADER_WIDTH,\n SHEET_HEIGHT,\n SHEET_WIDTH,\n HISTORY_LIMIT,\n} from '../constants';\nimport { functions } from '../formula/mapping';\nimport { Context } from '../store';\nimport { reducer as defaultReducer } from '../store/actions';\n\nimport { Editor } from './Editor';\nimport { StoreInitializer } from './StoreInitializer';\nimport { Resizer } from './Resizer';\nimport { Emitter } from './Emitter';\nimport { ContextMenu } from './ContextMenu';\nimport { Table } from '../lib/table';\nimport { Tabular } from './Tabular';\nimport { getMaxSizesFromCells } from '../lib/structs';\nimport { x2c, y2r } from '../lib/converters';\nimport { embedStyle } from '../styles/embedder';\nimport { useSheetContext } from './SheetProvider';\nimport { FormulaBar } from './FormulaBar';\nimport { SearchBar } from './SearchBar';\n\nexport function GridSheet({\n initialCells,\n sheetName = '',\n tableRef,\n options = {},\n className,\n style,\n additionalFunctions = {},\n}: Props) {\n const { sheetResize, showFormulaBar = true, onInit, mode = 'light' } = options;\n const [prevSheetName, setPrevSheetName] = React.useState(sheetName);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const mainRef = React.useRef<HTMLDivElement | null>(null);\n const searchInputRef = React.useRef<HTMLTextAreaElement | null>(null);\n const editorRef = React.useRef<HTMLTextAreaElement | null>(null);\n const largeEditorRef = React.useRef<HTMLTextAreaElement | null>(null);\n const tabularRef = React.useRef<HTMLDivElement | null>(null);\n const lastFocusedRef = React.useRef<HTMLTextAreaElement | null>(null);\n const [sheetProvided, sheetContext] = useSheetContext();\n\n const [initialState] = React.useState<StoreType>(() => {\n const {\n headerHeight = HEADER_HEIGHT,\n headerWidth = HEADER_WIDTH,\n historyLimit = HISTORY_LIMIT,\n renderers,\n parsers,\n labelers,\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n } = options;\n const table = new Table({\n historyLimit,\n parsers,\n renderers,\n labelers,\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n headerHeight,\n headerWidth,\n functions: { ...functions, ...additionalFunctions },\n });\n let sheetId = 0;\n if (sheetProvided) {\n sheetId = sheetContext.head.current++;\n table.tables = sheetContext.tables.current;\n table.sheets = sheetContext.sheets.current;\n }\n table.tables[sheetId] = table;\n table.sheetId = sheetId;\n table.initialize(initialCells);\n onInit?.(table);\n return {\n sheetId,\n table, // temporary (see StoreInitializer for detail)\n tableInitialized: false,\n rootRef,\n mainRef,\n searchInputRef,\n editorRef,\n largeEditorRef,\n tabularRef,\n lastFocusedRef,\n choosing: { y: 1, x: 1 },\n cutting: false,\n inputting: '',\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n autofillDraggingTo: null,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n editingCell: '',\n editorRect: { y: 0, x: 0, height: 0, width: 0 },\n resizingRect: { y: -1, x: -1, height: -1, width: -1 },\n sheetHeight: 0,\n sheetWidth: 0,\n headerHeight: 0,\n headerWidth: 0,\n entering: false,\n matchingCells: [],\n matchingCellIndex: 0,\n searchCaseSensitive: false,\n editingOnEnter: true,\n showAddress: true,\n contextMenuPosition: { y: -1, x: -1 },\n resizingPositionY: [-1, -1, -1],\n resizingPositionX: [-1, -1, -1],\n minNumRows: 1,\n maxNumRows: -1,\n minNumCols: 1,\n maxNumCols: -1,\n mode: 'light',\n lastEdited: '',\n };\n });\n\n const [store, dispatch] = React.useReducer(\n defaultReducer as unknown as ReducerWithoutAction<StoreType>,\n initialState,\n () => initialState,\n );\n\n React.useEffect(() => {\n embedStyle();\n }, []);\n\n React.useEffect(() => {\n if (!sheetProvided) {\n return;\n }\n sheetContext.tables.current[store.sheetId] = store.table;\n sheetContext?.forceRender?.();\n }, [store.table]);\n\n React.useEffect(() => {\n if (!sheetProvided) {\n return;\n }\n if (prevSheetName !== sheetName) {\n delete sheetContext.sheets.current[prevSheetName];\n setPrevSheetName(sheetName);\n }\n if (sheetName) {\n sheetContext.sheets.current[sheetName] = store.sheetId;\n }\n store.table.sheetName = sheetName;\n }, [sheetName]);\n\n const [sheetHeight, setSheetHeight] = React.useState(\n options?.sheetHeight || estimateSheetHeight({ options, initialData: initialCells }),\n );\n const [sheetWidth, setSheetWidth] = React.useState(\n options?.sheetWidth || estimateSheetWidth({ options, initialData: initialCells }),\n );\n React.useEffect(() => {\n const intervalId = window.setInterval(() => {\n setSheetHeight(mainRef.current?.clientHeight || 0);\n setSheetWidth(mainRef.current?.clientWidth || 0);\n }, 1000);\n return () => window.clearInterval(intervalId);\n }, []);\n React.useEffect(() => {\n if (options.sheetHeight) {\n setSheetHeight(options.sheetHeight);\n }\n }, [options.sheetHeight]);\n React.useEffect(() => {\n if (options.sheetWidth) {\n setSheetWidth(options.sheetWidth);\n }\n }, [options.sheetWidth]);\n\n const { onChange, onSelect } = options;\n return (\n <Context.Provider value={{ store, dispatch }}>\n <div\n className={`gs-root1`}\n ref={rootRef}\n data-sheet-name={sheetName}\n data-mode={mode}\n style={{ maxWidth: `min(100%, ${store.table.totalWidth + 2}px)` }}\n >\n {typeof store.searchQuery === 'undefined' ? showFormulaBar && <FormulaBar /> : <SearchBar />}\n <div\n className={`gs-main ${className || ''}`}\n ref={mainRef}\n style={{\n maxWidth: `min(100%-1px, ${store.table.totalWidth + 2}px)`,\n maxHeight: store.table.totalHeight + 2,\n ...style,\n resize: sheetResize,\n }}\n >\n <Editor mode={mode} />\n <Tabular tableRef={tableRef} />\n <StoreInitializer\n initialCells={initialCells}\n options={{ ...options, sheetHeight, sheetWidth }}\n additionalFunctions={additionalFunctions}\n />\n <ContextMenu />\n <Resizer />\n <Emitter onChange={onChange} onSelect={onSelect} />\n </div>\n </div>\n </Context.Provider>\n );\n}\n\ntype EstimateProps = {\n initialData: CellsByAddressType;\n options: OptionsType;\n};\n\nconst estimateSheetHeight = ({ initialData, options }: EstimateProps) => {\n const auto = getMaxSizesFromCells(initialData);\n let estimatedHeight = options.headerHeight || HEADER_HEIGHT;\n for (let y = 0; y < auto.numRows; y++) {\n const row = y2r(y);\n const height = initialData?.[row]?.height || initialData?.default?.height || DEFAULT_HEIGHT;\n if (estimatedHeight + height > SHEET_HEIGHT) {\n return SHEET_HEIGHT;\n }\n estimatedHeight += height;\n }\n return estimatedHeight + 3;\n};\n\nconst estimateSheetWidth = ({ initialData, options }: EstimateProps) => {\n const auto = getMaxSizesFromCells(initialData);\n let estimatedWidth = options.headerWidth || HEADER_WIDTH;\n for (let x = 0; x < auto.numCols; x++) {\n const col = x2c(x);\n const width = initialData?.[col]?.width || initialData?.default?.width || DEFAULT_WIDTH;\n if (estimatedWidth + width > SHEET_WIDTH) {\n return SHEET_WIDTH;\n }\n estimatedWidth += width;\n }\n return estimatedWidth + 3;\n};\n"],"names":["defaultReducer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GridSheet.js","sources":["../../components/GridSheet.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ReducerWithoutAction } from 'react';\n\nimport { CellsByAddressType, OptionsType, Props, StoreType } from '../types';\nimport {\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n HEADER_HEIGHT,\n HEADER_WIDTH,\n SHEET_HEIGHT,\n SHEET_WIDTH,\n HISTORY_LIMIT,\n} from '../constants';\nimport { functions } from '../formula/mapping';\nimport { Context } from '../store';\nimport { reducer as defaultReducer } from '../store/actions';\n\nimport { Editor } from './Editor';\nimport { StoreInitializer } from './StoreInitializer';\nimport { Resizer } from './Resizer';\nimport { Emitter } from './Emitter';\nimport { ContextMenu } from './ContextMenu';\nimport { Table } from '../lib/table';\nimport { Tabular } from './Tabular';\nimport { getMaxSizesFromCells } from '../lib/structs';\nimport { x2c, y2r } from '../lib/converters';\nimport { embedStyle } from '../styles/embedder';\nimport { useSheetContext } from './SheetProvider';\nimport { FormulaBar } from './FormulaBar';\nimport { SearchBar } from './SearchBar';\n\nexport function GridSheet({\n initialCells,\n sheetName = '',\n tableRef,\n options = {},\n className,\n style,\n additionalFunctions = {},\n}: Props) {\n const { sheetResize, showFormulaBar = true, onInit, mode = 'light' } = options;\n const [prevSheetName, setPrevSheetName] = React.useState(sheetName);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const mainRef = React.useRef<HTMLDivElement | null>(null);\n const searchInputRef = React.useRef<HTMLTextAreaElement | null>(null);\n const editorRef = React.useRef<HTMLTextAreaElement | null>(null);\n const largeEditorRef = React.useRef<HTMLTextAreaElement | null>(null);\n const tabularRef = React.useRef<HTMLDivElement | null>(null);\n const lastFocusedRef = React.useRef<HTMLTextAreaElement | null>(null);\n const [sheetProvided, sheetContext] = useSheetContext();\n\n const [initialState] = React.useState<StoreType>(() => {\n const {\n headerHeight = HEADER_HEIGHT,\n headerWidth = HEADER_WIDTH,\n historyLimit = HISTORY_LIMIT,\n renderers,\n parsers,\n labelers,\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n } = options;\n const table = new Table({\n historyLimit,\n parsers,\n renderers,\n labelers,\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n headerHeight,\n headerWidth,\n functions: { ...functions, ...additionalFunctions },\n });\n let sheetId = 0;\n if (sheetProvided) {\n sheetId = sheetContext.head.current++;\n table.tables = sheetContext.tables.current;\n table.sheets = sheetContext.sheets.current;\n }\n table.tables[sheetId] = table;\n table.sheetId = sheetId;\n table.initialize(initialCells);\n onInit?.(table);\n return {\n sheetId,\n table, // temporary (see StoreInitializer for detail)\n tableInitialized: false,\n rootRef,\n mainRef,\n searchInputRef,\n editorRef,\n largeEditorRef,\n tabularRef,\n lastFocusedRef,\n choosing: { y: 1, x: 1 },\n cutting: false,\n inputting: '',\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n autofillDraggingTo: null,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n editingCell: '',\n editorRect: { y: 0, x: 0, height: 0, width: 0 },\n resizingRect: { y: -1, x: -1, height: -1, width: -1 },\n sheetHeight: 0,\n sheetWidth: 0,\n headerHeight: 0,\n headerWidth: 0,\n entering: false,\n matchingCells: [],\n matchingCellIndex: 0,\n searchCaseSensitive: false,\n editingOnEnter: true,\n showAddress: true,\n contextMenuPosition: { y: -1, x: -1 },\n resizingPositionY: [-1, -1, -1],\n resizingPositionX: [-1, -1, -1],\n minNumRows: 1,\n maxNumRows: -1,\n minNumCols: 1,\n maxNumCols: -1,\n mode: 'light',\n lastEdited: '',\n };\n });\n\n const [store, dispatch] = React.useReducer(\n defaultReducer as unknown as ReducerWithoutAction<StoreType>,\n initialState,\n () => initialState,\n );\n\n React.useEffect(() => {\n embedStyle();\n }, []);\n\n React.useEffect(() => {\n if (!sheetProvided) {\n return;\n }\n sheetContext.tables.current[store.sheetId] = store.table;\n sheetContext?.forceRender?.();\n }, [store.table]);\n\n React.useEffect(() => {\n if (!sheetProvided) {\n return;\n }\n if (prevSheetName !== sheetName) {\n delete sheetContext.sheets.current[prevSheetName];\n setPrevSheetName(sheetName);\n }\n if (sheetName) {\n sheetContext.sheets.current[sheetName] = store.sheetId;\n }\n store.table.sheetName = sheetName;\n }, [sheetName]);\n\n const [sheetHeight, setSheetHeight] = React.useState(\n options?.sheetHeight || estimateSheetHeight({ options, initialData: initialCells }),\n );\n const [sheetWidth, setSheetWidth] = React.useState(\n options?.sheetWidth || estimateSheetWidth({ options, initialData: initialCells }),\n );\n React.useEffect(() => {\n const intervalId = window.setInterval(() => {\n setSheetHeight(mainRef.current?.clientHeight || 0);\n setSheetWidth(mainRef.current?.clientWidth || 0);\n }, 1000);\n return () => window.clearInterval(intervalId);\n }, []);\n React.useEffect(() => {\n if (options.sheetHeight) {\n setSheetHeight(options.sheetHeight);\n }\n }, [options.sheetHeight]);\n React.useEffect(() => {\n if (options.sheetWidth) {\n setSheetWidth(options.sheetWidth);\n }\n }, [options.sheetWidth]);\n\n const { onChange, onSelect } = options;\n return (\n <Context.Provider value={{ store, dispatch }}>\n <div\n className={`gs-root1`}\n ref={rootRef}\n data-sheet-name={sheetName}\n data-mode={mode}\n style={{ maxWidth: `min(100%, ${store.table.totalWidth + 2}px)` }}\n >\n {typeof store.searchQuery === 'undefined' ? showFormulaBar && <FormulaBar /> : <SearchBar />}\n <div\n className={`gs-main ${className || ''}`}\n ref={mainRef}\n style={{\n maxWidth: `min(100%-1px, ${store.table.totalWidth + 2}px)`,\n maxHeight: store.table.totalHeight + 2,\n ...style,\n resize: sheetResize,\n }}\n >\n <Editor mode={mode} />\n <Tabular tableRef={tableRef} />\n <StoreInitializer\n initialCells={initialCells}\n options={{ ...options, sheetHeight, sheetWidth }}\n additionalFunctions={additionalFunctions}\n />\n <ContextMenu />\n <Resizer />\n <Emitter onChange={onChange} onSelect={onSelect} />\n </div>\n </div>\n </Context.Provider>\n );\n}\n\ntype EstimateProps = {\n initialData: CellsByAddressType;\n options: OptionsType;\n};\n\nconst estimateSheetHeight = ({ initialData, options }: EstimateProps) => {\n const auto = getMaxSizesFromCells(initialData);\n let estimatedHeight = options.headerHeight || HEADER_HEIGHT;\n for (let y = 0; y < auto.numRows; y++) {\n const row = y2r(y);\n const height = initialData?.[row]?.height || initialData?.default?.height || DEFAULT_HEIGHT;\n if (estimatedHeight + height > SHEET_HEIGHT) {\n return SHEET_HEIGHT;\n }\n estimatedHeight += height;\n }\n return estimatedHeight + 3;\n};\n\nconst estimateSheetWidth = ({ initialData, options }: EstimateProps) => {\n const auto = getMaxSizesFromCells(initialData);\n let estimatedWidth = options.headerWidth || HEADER_WIDTH;\n for (let x = 0; x < auto.numCols; x++) {\n const col = x2c(x);\n const width = initialData?.[col]?.width || initialData?.default?.width || DEFAULT_WIDTH;\n if (estimatedWidth + width > SHEET_WIDTH) {\n return SHEET_WIDTH;\n }\n estimatedWidth += width;\n }\n return estimatedWidth + 3;\n};\n"],"names":["defaultReducer","jsx","jsxs"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import React__default from "react";
|
|
3
3
|
import { y2r } from "../lib/converters.js";
|
|
4
4
|
import { zoneToArea, between } from "../lib/structs.js";
|
|
@@ -27,7 +27,7 @@ const HeaderCellLeft = React__default.memo(({ y }) => {
|
|
|
27
27
|
const differentSheetFocused = sheetProvided && (sheetContext == null ? void 0 : sheetContext.lastFocusedRef) !== store.lastFocusedRef;
|
|
28
28
|
const lastFocusedRef = (sheetContext == null ? void 0 : sheetContext.lastFocusedRef) || store.lastFocusedRef;
|
|
29
29
|
const lastInput = lastFocusedRef.current;
|
|
30
|
-
return /* @__PURE__ */ jsx(
|
|
30
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31
31
|
"th",
|
|
32
32
|
{
|
|
33
33
|
"data-y": y,
|
|
@@ -60,7 +60,7 @@ const HeaderCellLeft = React__default.memo(({ y }) => {
|
|
|
60
60
|
dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));
|
|
61
61
|
return false;
|
|
62
62
|
},
|
|
63
|
-
children: /* @__PURE__ */ jsx(
|
|
63
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
64
64
|
"div",
|
|
65
65
|
{
|
|
66
66
|
className: "gs-th-inner-wrap",
|
|
@@ -105,9 +105,9 @@ const HeaderCellLeft = React__default.memo(({ y }) => {
|
|
|
105
105
|
e.dataTransfer.dropEffect = "move";
|
|
106
106
|
e.preventDefault();
|
|
107
107
|
},
|
|
108
|
-
children: /* @__PURE__ */ jsxs("div", { className: "gs-th-inner", style: { width: headerWidth, position: "relative" }, children: [
|
|
108
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "gs-th-inner", style: { width: headerWidth, position: "relative" }, children: [
|
|
109
109
|
(row == null ? void 0 : row.labeler) ? table.getLabel(row.labeler, y) : rowId,
|
|
110
|
-
/* @__PURE__ */ jsx(
|
|
110
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
111
111
|
"div",
|
|
112
112
|
{
|
|
113
113
|
className: `gs-resizer ${isPrevented(row == null ? void 0 : row.prevention, Resize) ? "gs-protected" : ""}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderCellLeft.js","sources":["../../components/HeaderCellLeft.tsx"],"sourcesContent":["import React from 'react';\nimport { y2r } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectRows,\n setContextMenuPosition,\n setEditingCell,\n setResizingPositionY,\n} from '../store/actions';\nimport { DUMMY_IMG, DEFAULT_HEIGHT } from '../constants';\nimport * as prevention from '../lib/prevention';\nimport { insertRef, isRefInsertable } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\n\ntype Props = {\n y: number;\n};\n\nexport const HeaderCellLeft: React.FC<Props> = React.memo(({ y }) => {\n const rowId = `${y2r(y)}`;\n const { store, dispatch } = React.useContext(Context);\n\n const {\n choosing,\n selectingZone,\n leftHeaderSelecting,\n resizingRect,\n headerWidth,\n editorRef,\n table,\n autofillDraggingTo,\n } = store;\n\n const row = table.getByPoint({ y, x: 0 });\n const height = row?.height || DEFAULT_HEIGHT;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n const lastInput = lastFocusedRef.current;\n\n return (\n <th\n data-y={y}\n className={`gs-th gs-th-left ${choosing.y === y ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startY, end: selectingZone.endY }, y)\n ? leftHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ height }}\n onClick={(e) => {\n let startY = e.shiftKey ? selectingZone.startY : y;\n if (startY === -1) {\n startY = choosing.y;\n }\n const fullColId = `${table.sheetPrefix(!differentSheetFocused)}${rowId}:${rowId}`;\n const inserted = insertRef(lastInput, fullColId);\n if (inserted) {\n return false;\n }\n\n dispatch(\n selectRows({\n range: { start: startY, end: y },\n numCols: table.getNumCols(),\n }),\n );\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n dispatch(choose({ y: startY, x: 1 }));\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n return false;\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n dispatch(select({ startY: y, startX: table.getNumCols(), endY: y, endX: 0 }));\n return false;\n }\n dispatch(\n selectRows({\n range: { start: y, end: y },\n numCols: table.getNumCols(),\n }),\n );\n dispatch(choose({ y, x: 1 }));\n return false;\n }}\n onDragEnd={() => {\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n }}\n onDragEnter={() => {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: 1 });\n const [top, bottom] = [y2r(newArea.top), y2r(newArea.bottom)];\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${top}:${bottom}`;\n insertRef(lastInput, fullRange);\n\n if (resizingRect.y === -1 && autofillDraggingTo == null) {\n const { startX } = selectingZone;\n if (startX === 1) {\n dispatch(drag({ y, x: table.getNumCols() }));\n } else {\n dispatch(drag({ y, x: 1 }));\n }\n }\n return false;\n }}\n onDragOver={(e) => {\n e.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n }}\n >\n <div className=\"gs-th-inner\" style={{ width: headerWidth, position: 'relative' }}>\n {row?.labeler ? table.getLabel(row.labeler, y) : rowId}\n <div\n className={`gs-resizer ${prevention.isPrevented(row?.prevention, prevention.Resize) ? 'gs-protected' : ''}`}\n style={{ width: headerWidth }}\n onMouseDown={(e) => {\n dispatch(setResizingPositionY([y, e.clientY, e.clientY]));\n e.preventDefault();\n e.stopPropagation();\n }}\n ></div>\n </div>\n </div>\n </th>\n );\n});\n"],"names":["React","prevention.isPrevented","prevention.Resize"],"mappings":";;;;;;;;;;AAsBO,MAAM,iBAAkCA,eAAM,KAAK,CAAC,EAAE,QAAQ;AACnE,QAAM,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvB,QAAM,EAAE,OAAO,SAAA,IAAaA,eAAM,WAAW,OAAO;AAE9C,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,MAAM,MAAM,WAAW,EAAE,GAAG,GAAG,GAAG;AAClC,QAAA,UAAS,2BAAK,WAAU;AAE9B,QAAM,CAAC,eAAe,YAAY,IAAI,gBAAgB;AACtD,QAAM,wBAAwB,kBAAiB,6CAAc,oBAAmB,MAAM;AAEhF,QAAA,kBAAiB,6CAAc,mBAAkB,MAAM;AAC7D,QAAM,YAAY,eAAe;AAG/B,
|
|
1
|
+
{"version":3,"file":"HeaderCellLeft.js","sources":["../../components/HeaderCellLeft.tsx"],"sourcesContent":["import React from 'react';\nimport { y2r } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectRows,\n setContextMenuPosition,\n setEditingCell,\n setResizingPositionY,\n} from '../store/actions';\nimport { DUMMY_IMG, DEFAULT_HEIGHT } from '../constants';\nimport * as prevention from '../lib/prevention';\nimport { insertRef, isRefInsertable } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\n\ntype Props = {\n y: number;\n};\n\nexport const HeaderCellLeft: React.FC<Props> = React.memo(({ y }) => {\n const rowId = `${y2r(y)}`;\n const { store, dispatch } = React.useContext(Context);\n\n const {\n choosing,\n selectingZone,\n leftHeaderSelecting,\n resizingRect,\n headerWidth,\n editorRef,\n table,\n autofillDraggingTo,\n } = store;\n\n const row = table.getByPoint({ y, x: 0 });\n const height = row?.height || DEFAULT_HEIGHT;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n const lastInput = lastFocusedRef.current;\n\n return (\n <th\n data-y={y}\n className={`gs-th gs-th-left ${choosing.y === y ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startY, end: selectingZone.endY }, y)\n ? leftHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ height }}\n onClick={(e) => {\n let startY = e.shiftKey ? selectingZone.startY : y;\n if (startY === -1) {\n startY = choosing.y;\n }\n const fullColId = `${table.sheetPrefix(!differentSheetFocused)}${rowId}:${rowId}`;\n const inserted = insertRef(lastInput, fullColId);\n if (inserted) {\n return false;\n }\n\n dispatch(\n selectRows({\n range: { start: startY, end: y },\n numCols: table.getNumCols(),\n }),\n );\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n dispatch(choose({ y: startY, x: 1 }));\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n return false;\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n dispatch(select({ startY: y, startX: table.getNumCols(), endY: y, endX: 0 }));\n return false;\n }\n dispatch(\n selectRows({\n range: { start: y, end: y },\n numCols: table.getNumCols(),\n }),\n );\n dispatch(choose({ y, x: 1 }));\n return false;\n }}\n onDragEnd={() => {\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n }}\n onDragEnter={() => {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: 1 });\n const [top, bottom] = [y2r(newArea.top), y2r(newArea.bottom)];\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${top}:${bottom}`;\n insertRef(lastInput, fullRange);\n\n if (resizingRect.y === -1 && autofillDraggingTo == null) {\n const { startX } = selectingZone;\n if (startX === 1) {\n dispatch(drag({ y, x: table.getNumCols() }));\n } else {\n dispatch(drag({ y, x: 1 }));\n }\n }\n return false;\n }}\n onDragOver={(e) => {\n e.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n }}\n >\n <div className=\"gs-th-inner\" style={{ width: headerWidth, position: 'relative' }}>\n {row?.labeler ? table.getLabel(row.labeler, y) : rowId}\n <div\n className={`gs-resizer ${prevention.isPrevented(row?.prevention, prevention.Resize) ? 'gs-protected' : ''}`}\n style={{ width: headerWidth }}\n onMouseDown={(e) => {\n dispatch(setResizingPositionY([y, e.clientY, e.clientY]));\n e.preventDefault();\n e.stopPropagation();\n }}\n ></div>\n </div>\n </div>\n </th>\n );\n});\n"],"names":["React","jsx","jsxs","prevention.isPrevented","prevention.Resize"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import React__default from "react";
|
|
3
3
|
import { x2c } from "../lib/converters.js";
|
|
4
4
|
import { zoneToArea, between } from "../lib/structs.js";
|
|
@@ -27,7 +27,7 @@ const HeaderCellTop = React__default.memo(({ x }) => {
|
|
|
27
27
|
const differentSheetFocused = sheetProvided && (sheetContext == null ? void 0 : sheetContext.lastFocusedRef) !== store.lastFocusedRef;
|
|
28
28
|
const lastFocusedRef = (sheetContext == null ? void 0 : sheetContext.lastFocusedRef) || store.lastFocusedRef;
|
|
29
29
|
const lastInput = lastFocusedRef.current;
|
|
30
|
-
return /* @__PURE__ */ jsx(
|
|
30
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31
31
|
"th",
|
|
32
32
|
{
|
|
33
33
|
"data-x": x,
|
|
@@ -60,7 +60,7 @@ const HeaderCellTop = React__default.memo(({ x }) => {
|
|
|
60
60
|
dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));
|
|
61
61
|
return false;
|
|
62
62
|
},
|
|
63
|
-
children: /* @__PURE__ */ jsx(
|
|
63
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
64
64
|
"div",
|
|
65
65
|
{
|
|
66
66
|
className: "gs-th-inner-wrap",
|
|
@@ -105,9 +105,9 @@ const HeaderCellTop = React__default.memo(({ x }) => {
|
|
|
105
105
|
e.dataTransfer.dropEffect = "move";
|
|
106
106
|
e.preventDefault();
|
|
107
107
|
},
|
|
108
|
-
children: /* @__PURE__ */ jsxs("div", { className: "gs-th-inner", style: { height: headerHeight, position: "relative" }, children: [
|
|
108
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "gs-th-inner", style: { height: headerHeight, position: "relative" }, children: [
|
|
109
109
|
(col == null ? void 0 : col.labeler) ? table.getLabel(col.labeler, x) : colId,
|
|
110
|
-
/* @__PURE__ */ jsx(
|
|
110
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
111
111
|
"div",
|
|
112
112
|
{
|
|
113
113
|
className: `gs-resizer ${isPrevented(col == null ? void 0 : col.prevention, Resize) ? "gs-protected" : ""}`,
|
|
@@ -117,7 +117,7 @@ const HeaderCellTop = React__default.memo(({ x }) => {
|
|
|
117
117
|
e.preventDefault();
|
|
118
118
|
e.stopPropagation();
|
|
119
119
|
},
|
|
120
|
-
children: /* @__PURE__ */ jsx("i", {})
|
|
120
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("i", {})
|
|
121
121
|
}
|
|
122
122
|
)
|
|
123
123
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderCellTop.js","sources":["../../components/HeaderCellTop.tsx"],"sourcesContent":["import React from 'react';\nimport { x2c } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectCols,\n setContextMenuPosition,\n setEditingCell,\n setResizingPositionX,\n} from '../store/actions';\nimport { DUMMY_IMG, DEFAULT_WIDTH } from '../constants';\nimport * as prevention from '../lib/prevention';\nimport { useSheetContext } from './SheetProvider';\nimport { insertRef, isRefInsertable } from '../lib/input';\n\ntype Props = {\n x: number;\n};\n\nexport const HeaderCellTop: React.FC<Props> = React.memo(({ x }) => {\n const { store, dispatch } = React.useContext(Context);\n const colId = x2c(x);\n\n const {\n table,\n choosing,\n selectingZone,\n resizingRect,\n topHeaderSelecting,\n headerHeight,\n editorRef,\n autofillDraggingTo,\n } = store;\n\n const col = table.getByPoint({ y: 0, x });\n const width = col?.width || DEFAULT_WIDTH;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n const lastInput = lastFocusedRef.current;\n\n return (\n <th\n data-x={x}\n className={`gs-th gs-th-top ${choosing.x === x ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startX, end: selectingZone.endX }, x)\n ? topHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ width, minWidth: width, maxWidth: width }}\n onClick={(e) => {\n let startX = e.shiftKey ? selectingZone.startX : x;\n if (startX === -1) {\n startX = choosing.x;\n }\n const fullColId = `${table.sheetPrefix(!differentSheetFocused)}${colId}:${colId}`;\n const inserted = insertRef(lastInput, fullColId);\n if (inserted) {\n return false;\n }\n\n dispatch(\n selectCols({\n range: { start: startX, end: x },\n numRows: table.getNumRows(),\n }),\n );\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n dispatch(choose({ y: 1, x: startX }));\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n return false;\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n dispatch(select({ startY: table.getNumRows(), startX: x, endY: 0, endX: x }));\n return false;\n }\n dispatch(\n selectCols({\n range: { start: x, end: x },\n numRows: table.getNumRows(),\n }),\n );\n dispatch(choose({ y: 1, x }));\n return false;\n }}\n onDragEnd={() => {\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n }}\n onDragEnter={() => {\n const newArea = zoneToArea({ ...selectingZone, endY: 1, endX: x });\n const [left, right] = [x2c(newArea.left), x2c(newArea.right)];\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${left}:${right}`;\n insertRef(lastInput, fullRange);\n\n if (resizingRect.x === -1 && autofillDraggingTo == null) {\n const { startY } = selectingZone;\n if (startY === 1) {\n dispatch(drag({ y: table.getNumRows(), x }));\n } else {\n dispatch(drag({ y: 1, x }));\n }\n }\n return false;\n }}\n onDragOver={(e) => {\n e.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n }}\n >\n <div className=\"gs-th-inner\" style={{ height: headerHeight, position: 'relative' }}>\n {col?.labeler ? table.getLabel(col.labeler, x) : colId}\n <div\n className={`gs-resizer ${prevention.isPrevented(col?.prevention, prevention.Resize) ? 'gs-protected' : ''}`}\n style={{ height: headerHeight }}\n onMouseDown={(e) => {\n dispatch(setResizingPositionX([x, e.clientX, e.clientX]));\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <i />\n </div>\n </div>\n </div>\n </th>\n );\n});\n"],"names":["React","prevention.isPrevented","prevention.Resize"],"mappings":";;;;;;;;;;AAsBO,MAAM,gBAAiCA,eAAM,KAAK,CAAC,EAAE,QAAQ;AAClE,QAAM,EAAE,OAAO,SAAA,IAAaA,eAAM,WAAW,OAAO;AAC9C,QAAA,QAAQ,IAAI,CAAC;AAEb,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,MAAM,MAAM,WAAW,EAAE,GAAG,GAAG,GAAG;AAClC,QAAA,SAAQ,2BAAK,UAAS;AAE5B,QAAM,CAAC,eAAe,YAAY,IAAI,gBAAgB;AACtD,QAAM,wBAAwB,kBAAiB,6CAAc,oBAAmB,MAAM;AAEhF,QAAA,kBAAiB,6CAAc,mBAAkB,MAAM;AAC7D,QAAM,YAAY,eAAe;AAG/B,
|
|
1
|
+
{"version":3,"file":"HeaderCellTop.js","sources":["../../components/HeaderCellTop.tsx"],"sourcesContent":["import React from 'react';\nimport { x2c } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectCols,\n setContextMenuPosition,\n setEditingCell,\n setResizingPositionX,\n} from '../store/actions';\nimport { DUMMY_IMG, DEFAULT_WIDTH } from '../constants';\nimport * as prevention from '../lib/prevention';\nimport { useSheetContext } from './SheetProvider';\nimport { insertRef, isRefInsertable } from '../lib/input';\n\ntype Props = {\n x: number;\n};\n\nexport const HeaderCellTop: React.FC<Props> = React.memo(({ x }) => {\n const { store, dispatch } = React.useContext(Context);\n const colId = x2c(x);\n\n const {\n table,\n choosing,\n selectingZone,\n resizingRect,\n topHeaderSelecting,\n headerHeight,\n editorRef,\n autofillDraggingTo,\n } = store;\n\n const col = table.getByPoint({ y: 0, x });\n const width = col?.width || DEFAULT_WIDTH;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n const lastInput = lastFocusedRef.current;\n\n return (\n <th\n data-x={x}\n className={`gs-th gs-th-top ${choosing.x === x ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startX, end: selectingZone.endX }, x)\n ? topHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ width, minWidth: width, maxWidth: width }}\n onClick={(e) => {\n let startX = e.shiftKey ? selectingZone.startX : x;\n if (startX === -1) {\n startX = choosing.x;\n }\n const fullColId = `${table.sheetPrefix(!differentSheetFocused)}${colId}:${colId}`;\n const inserted = insertRef(lastInput, fullColId);\n if (inserted) {\n return false;\n }\n\n dispatch(\n selectCols({\n range: { start: startX, end: x },\n numRows: table.getNumRows(),\n }),\n );\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n dispatch(choose({ y: 1, x: startX }));\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n return false;\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n dispatch(select({ startY: table.getNumRows(), startX: x, endY: 0, endX: x }));\n return false;\n }\n dispatch(\n selectCols({\n range: { start: x, end: x },\n numRows: table.getNumRows(),\n }),\n );\n dispatch(choose({ y: 1, x }));\n return false;\n }}\n onDragEnd={() => {\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n }}\n onDragEnter={() => {\n const newArea = zoneToArea({ ...selectingZone, endY: 1, endX: x });\n const [left, right] = [x2c(newArea.left), x2c(newArea.right)];\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${left}:${right}`;\n insertRef(lastInput, fullRange);\n\n if (resizingRect.x === -1 && autofillDraggingTo == null) {\n const { startY } = selectingZone;\n if (startY === 1) {\n dispatch(drag({ y: table.getNumRows(), x }));\n } else {\n dispatch(drag({ y: 1, x }));\n }\n }\n return false;\n }}\n onDragOver={(e) => {\n e.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n }}\n >\n <div className=\"gs-th-inner\" style={{ height: headerHeight, position: 'relative' }}>\n {col?.labeler ? table.getLabel(col.labeler, x) : colId}\n <div\n className={`gs-resizer ${prevention.isPrevented(col?.prevention, prevention.Resize) ? 'gs-protected' : ''}`}\n style={{ height: headerHeight }}\n onMouseDown={(e) => {\n dispatch(setResizingPositionX([x, e.clientX, e.clientX]));\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <i />\n </div>\n </div>\n </div>\n </th>\n );\n});\n"],"names":["React","jsx","jsxs","prevention.isPrevented","prevention.Resize"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import React__default from "react";
|
|
3
3
|
const PluginContext = React__default.createContext({});
|
|
4
4
|
function useInitialPluginContext() {
|
|
@@ -22,9 +22,9 @@ function usePluginContext() {
|
|
|
22
22
|
function PluginBase({ children, context }) {
|
|
23
23
|
const [provided] = usePluginContext();
|
|
24
24
|
if (provided) {
|
|
25
|
-
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
25
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children });
|
|
26
26
|
}
|
|
27
|
-
return /* @__PURE__ */ jsx(PluginContext.Provider, { value: context, children });
|
|
27
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PluginContext.Provider, { value: context, children });
|
|
28
28
|
}
|
|
29
29
|
export {
|
|
30
30
|
PluginBase,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginBase.js","sources":["../../components/PluginBase.tsx"],"sourcesContent":["import React from 'react';\n\nimport { StoreType } from '../types';\nimport { Dispatcher } from '../store';\n\nexport type PluginContextType = {\n provided: boolean;\n store?: StoreType;\n dispatch?: Dispatcher;\n setStore: (store: StoreType) => void;\n setDispatch: (dispatch: Dispatcher) => void;\n};\n\nexport const PluginContext = React.createContext({} as PluginContextType);\n\nexport function useInitialPluginContext(): PluginContextType {\n const [store, setStore] = React.useState<StoreType | undefined>(undefined);\n const [dispatch, setDispatch] = React.useState<Dispatcher>();\n return {\n provided: true,\n store,\n dispatch,\n setStore,\n setDispatch,\n };\n}\n\nexport function usePluginContext(): [boolean, PluginContextType] {\n const ctx = React.useContext(PluginContext);\n if (ctx?.provided == null) {\n return [false, ctx];\n }\n return [true, ctx];\n}\n\nexport function usePluginDispatch() {\n const dispatch = React.useContext(PluginContext);\n if (!dispatch) {\n return undefined;\n }\n return dispatch;\n}\n\ntype Props = {\n children: React.ReactNode;\n context: PluginContextType;\n};\n\nexport function PluginBase({ children, context }: Props) {\n const [provided] = usePluginContext();\n if (provided) {\n return <>{children}</>;\n }\n return <PluginContext.Provider value={context}>{children}</PluginContext.Provider>;\n}\n"],"names":["React"],"mappings":";;AAaO,MAAM,gBAAgBA,eAAM,cAAc,CAAuB,CAAA;AAEjE,SAAS,0BAA6C;AAC3D,QAAM,CAAC,OAAO,QAAQ,IAAIA,eAAM,SAAgC,MAAS;AACzE,QAAM,CAAC,UAAU,WAAW,IAAIA,eAAM,SAAqB;AACpD,SAAA;AAAA,IACL,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,mBAAiD;AACzD,QAAA,MAAMA,eAAM,WAAW,aAAa;AACtC,OAAA,2BAAK,aAAY,MAAM;AAClB,WAAA,CAAC,OAAO,GAAG;AAAA,EAAA;AAEb,SAAA,CAAC,MAAM,GAAG;AACnB;AAeO,SAAS,WAAW,EAAE,UAAU,WAAkB;AACjD,QAAA,CAAC,QAAQ,IAAI,iBAAiB;AACpC,MAAI,UAAU;AACZ,
|
|
1
|
+
{"version":3,"file":"PluginBase.js","sources":["../../components/PluginBase.tsx"],"sourcesContent":["import React from 'react';\n\nimport { StoreType } from '../types';\nimport { Dispatcher } from '../store';\n\nexport type PluginContextType = {\n provided: boolean;\n store?: StoreType;\n dispatch?: Dispatcher;\n setStore: (store: StoreType) => void;\n setDispatch: (dispatch: Dispatcher) => void;\n};\n\nexport const PluginContext = React.createContext({} as PluginContextType);\n\nexport function useInitialPluginContext(): PluginContextType {\n const [store, setStore] = React.useState<StoreType | undefined>(undefined);\n const [dispatch, setDispatch] = React.useState<Dispatcher>();\n return {\n provided: true,\n store,\n dispatch,\n setStore,\n setDispatch,\n };\n}\n\nexport function usePluginContext(): [boolean, PluginContextType] {\n const ctx = React.useContext(PluginContext);\n if (ctx?.provided == null) {\n return [false, ctx];\n }\n return [true, ctx];\n}\n\nexport function usePluginDispatch() {\n const dispatch = React.useContext(PluginContext);\n if (!dispatch) {\n return undefined;\n }\n return dispatch;\n}\n\ntype Props = {\n children: React.ReactNode;\n context: PluginContextType;\n};\n\nexport function PluginBase({ children, context }: Props) {\n const [provided] = usePluginContext();\n if (provided) {\n return <>{children}</>;\n }\n return <PluginContext.Provider value={context}>{children}</PluginContext.Provider>;\n}\n"],"names":["React"],"mappings":";;AAaO,MAAM,gBAAgBA,eAAM,cAAc,CAAuB,CAAA;AAEjE,SAAS,0BAA6C;AAC3D,QAAM,CAAC,OAAO,QAAQ,IAAIA,eAAM,SAAgC,MAAS;AACzE,QAAM,CAAC,UAAU,WAAW,IAAIA,eAAM,SAAqB;AACpD,SAAA;AAAA,IACL,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,mBAAiD;AACzD,QAAA,MAAMA,eAAM,WAAW,aAAa;AACtC,OAAA,2BAAK,aAAY,MAAM;AAClB,WAAA,CAAC,OAAO,GAAG;AAAA,EAAA;AAEb,SAAA,CAAC,MAAM,GAAG;AACnB;AAeO,SAAS,WAAW,EAAE,UAAU,WAAkB;AACjD,QAAA,CAAC,QAAQ,IAAI,iBAAiB;AACpC,MAAI,UAAU;AACZ,+EAAU,UAAS;AAAA,EAAA;AAErB,+CAAQ,cAAc,UAAd,EAAuB,OAAO,SAAU,UAAS;AAC3D;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
|
|
2
2
|
import React__default from "react";
|
|
3
3
|
import { Context } from "../store/index.js";
|
|
4
4
|
import { setResizingPositionY, setResizingPositionX, updateTable } from "../store/actions.js";
|
|
@@ -81,12 +81,12 @@ const Resizer = React__default.memo(() => {
|
|
|
81
81
|
dispatch(setResizingPositionX([x, startX, endX2]));
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
|
-
return /* @__PURE__ */ jsxs("div", { className: "gs-resizing", onMouseUp: handleResizeEnd, onMouseMove: handleResizeMove, children: [
|
|
85
|
-
x !== -1 && /* @__PURE__ */ jsx("div", { className: "gs-line", style: { width: 1, height: "100%", left: endX - offsetX }, children: /* @__PURE__ */ jsxs("span", { style: { left: "-50%" }, children: [
|
|
84
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "gs-resizing", onMouseUp: handleResizeEnd, onMouseMove: handleResizeMove, children: [
|
|
85
|
+
x !== -1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "gs-line", style: { width: 1, height: "100%", left: endX - offsetX }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { style: { left: "-50%" }, children: [
|
|
86
86
|
width,
|
|
87
87
|
"px"
|
|
88
88
|
] }) }),
|
|
89
|
-
y !== -1 && /* @__PURE__ */ jsx("div", { className: "gs-line", style: { width: "100%", height: 1, top: endY - offsetY }, children: /* @__PURE__ */ jsxs("span", { style: { top: "-50%" }, children: [
|
|
89
|
+
y !== -1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "gs-line", style: { width: "100%", height: 1, top: endY - offsetY }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { style: { top: "-50%" }, children: [
|
|
90
90
|
height,
|
|
91
91
|
"px"
|
|
92
92
|
] }) })
|