@lax-wp/design-system 0.13.41 → 0.13.43
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/components/data-display/code-editor/CodeEditor.cjs.js +1 -1
- package/dist/components/data-display/code-editor/CodeEditor.cjs.js.map +1 -1
- package/dist/components/data-display/code-editor/CodeEditor.es.js +38 -38
- package/dist/components/data-display/code-editor/CodeEditor.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/context.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.d.ts +1 -0
- package/dist/components/data-display/infinite-table/context.es.js +1 -0
- package/dist/components/data-display/infinite-table/context.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/Options.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/Options.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/Options.d.ts +2 -1
- package/dist/components/data-display/infinite-table/head/cell/Options.es.js +79 -70
- package/dist/components/data-display/infinite-table/head/cell/Options.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/Resizer.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/Resizer.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/Resizer.d.ts +2 -1
- package/dist/components/data-display/infinite-table/head/cell/Resizer.es.js +23 -19
- package/dist/components/data-display/infinite-table/head/cell/Resizer.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.es.js +46 -44
- package/dist/components/data-display/infinite-table/head/cell/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.es.js +474 -470
- package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
- package/dist/components/data-display/tag/Tag.cjs.js +1 -1
- package/dist/components/data-display/tag/Tag.cjs.js.map +1 -1
- package/dist/components/data-display/tag/Tag.es.js +9 -9
- package/dist/components/data-display/tag/Tag.es.js.map +1 -1
- package/dist/components/floating-bar/FloatingBar.cjs.js +1 -1
- package/dist/components/floating-bar/FloatingBar.cjs.js.map +1 -1
- package/dist/components/floating-bar/FloatingBar.es.js +1 -1
- package/dist/components/floating-bar/FloatingBar.es.js.map +1 -1
- package/dist/components/forms/search-bar/SearchBar.cjs.js +1 -1
- package/dist/components/forms/search-bar/SearchBar.cjs.js.map +1 -1
- package/dist/components/forms/search-bar/SearchBar.es.js +1 -1
- package/dist/components/forms/search-bar/SearchBar.es.js.map +1 -1
- package/dist/utils/table.cjs.js +1 -1
- package/dist/utils/table.cjs.js.map +1 -1
- package/dist/utils/table.d.ts +2 -1
- package/dist/utils/table.es.js +19 -18
- package/dist/utils/table.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.es.js","sources":["../../../../src/components/data-display/code-editor/CodeEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport classNames from 'classnames';\nimport { type FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { FullScreen, useFullScreenHandle } from 'react-full-screen';\nimport { toast } from 'react-toastify';\nimport { useMonaco } from '../../../hooks/useMonaco';\nimport { usePythonSyntax } from '../../../hooks/usePythonSyntax';\nimport { type CodeEditorProps } from '../../../types';\nimport { systemMessages } from '../../../utils/messageConstants';\nimport { JsonGrid } from './JsonGrid';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { Toggle } from '../../forms/toggle/Toggle';\nimport { cn } from '../../../lib/utils';\nimport { CodeIcon, GridOnIcon } from '../../icon';\n\n// Icon class styling (matching web portal)\nconst iconClass = classNames(\n 'text-neutral-600 cursor-pointer hover:text-neutral-800',\n 'dark:text-neutral-300 dark:hover:text-neutral-50'\n);\n\n// Material Icons converted to SVG components (matching web portal icons)\nconst AddIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n);\n\nconst ContentPasteRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>\n);\n\nconst DarkModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M9.5 2c-1.82 0-3.53.5-5 1.35 2.99 1.73 5 4.95 5 8.65s-2.01 6.92-5 8.65c1.47.85 3.18 1.35 5 1.35 5.52 0 10-4.48 10-10S15.02 2 9.5 2z\" />\n </svg>\n);\n\nconst FileDownloadRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 15v3H6v-3H4v3c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-3h-2zm-1-4-5 5-5-5h3V4h4v7h3z\" />\n </svg>\n);\n\nconst FullscreenRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowDownIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z\" />\n <path d=\"m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowUpIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M6 17.59 7.41 19 12 14.42 16.59 19 18 17.59l-6-6z\" />\n <path d=\"m6 11 1.41 1.41L12 7.83l4.59 4.58L18 11l-6-6z\" />\n </svg>\n);\n\nconst LightModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M12 9c1.65 0 3 1.35 3 3s-1.35 3-3 3-3-1.35-3-3 1.35-3 3-3m0-2c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n);\n\nconst SubjectOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z\" />\n </svg>\n);\n\ntype TTabKey = 'JSON' | 'Grid';\n\nexport const CodeEditor: FC<CodeEditorProps> = ({\n value,\n onChange = () => false,\n withFullScreen = true,\n withTheme = true,\n isEditMode = false,\n height = \"55vh\",\n language = \"json\",\n monacoEditor,\n isShowCopy = true,\n isShowDownload = true,\n setIsDisableSave,\n withJsonGrid = true,\n editorTheme: externalEditorTheme,\n setEditorTheme: externalSetEditorTheme,\n theme: externalTheme,\n className,\n enableAutoFormatting = true,\n renderToolbarActions,\n onBlockClick,\n focusBlock,\n focusBlockTopLevelOnly = false,\n}) => {\n const editorRef = useRef<any>(null);\n\n // Internal theme state (used when not provided by parent)\n const [internalEditorTheme, setInternalEditorTheme] = useState<\n \"vs\" | \"vs-dark\"\n >(\"vs\");\n const [internalTheme, setInternalTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n // Use external theme if provided, otherwise use internal\n const editorTheme = externalEditorTheme ?? internalEditorTheme;\n const theme = externalTheme ?? internalTheme;\n const setEditorTheme =\n externalSetEditorTheme ??\n ((newTheme: \"vs\" | \"vs-dark\") => {\n setInternalEditorTheme(newTheme);\n setInternalTheme(newTheme === \"vs-dark\" ? \"dark\" : \"light\");\n });\n\n const [allExpanded, setAllExpanded] = useState<boolean>(false);\n const [currentEditorModel, setCurrentEditorModel] = useState<any>(null);\n const monacoInstance = useMonaco();\n\n // Use provided monacoEditor prop or fall back to our managed instance\n const activeMonacoEditor = monacoEditor || monacoInstance;\n\n const {\n handleFormatCode: handleFormatPythonCode,\n pythonError,\n pythonLoading,\n } = usePythonSyntax({\n code: value,\n setCode: onChange,\n currentEditorModel,\n monacoEditor: activeMonacoEditor,\n enable: isEditMode === true && language === \"python\",\n });\n\n const fullScreenHandle = useFullScreenHandle();\n const [activeTab, setActiveTab] = useState<TTabKey>(\"JSON\");\n const [isAddKeyModalOpen, setIsAddKeyModalOpen] = useState(false);\n const isLanguageJson = language === \"json\";\n\n const toggleFocusMode = () => {\n if (fullScreenHandle?.active) {\n fullScreenHandle.exit();\n } else {\n fullScreenHandle.enter();\n }\n };\n\n const onBlockClickRef = useRef(onBlockClick);\n onBlockClickRef.current = onBlockClick;\n\n const detectBlock = useCallback(\n async (editor: any, lineNumber: number, column: number) => {\n if (!onBlockClickRef.current) return;\n\n const model = editor.getModel();\n if (!model) return;\n\n const getTextForRange = (startLine: number, endLine: number) =>\n model.getValueInRange({\n startLineNumber: startLine,\n startColumn: 1,\n endLineNumber: endLine,\n endColumn: model.getLineMaxColumn(endLine),\n });\n\n const emitBlock = (\n startLine: number,\n endLine: number,\n text: string,\n kind?: string,\n parentBlock?: { startLine: number; endLine: number; text: string; kind?: string }\n ) => {\n onBlockClickRef.current!({\n startLine,\n endLine,\n text,\n kind,\n cursorLine: lineNumber,\n cursorColumn: column,\n parentBlock,\n });\n };\n\n try {\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n const totalLines = model.getLineCount();\n\n // Collect all folding ranges that contain the cursor line\n const containingRanges: {\n start: number;\n end: number;\n size: number;\n kind?: string;\n }[] = [];\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, totalLines);\n const size = end - start;\n\n if (lineNumber >= start && lineNumber <= end) {\n const rawKind = regions.getType(i);\n const kind =\n rawKind === 1\n ? \"comment\"\n : rawKind === 2\n ? \"imports\"\n : rawKind === 3\n ? \"region\"\n : undefined;\n containingRanges.push({ start, end, size, kind });\n }\n }\n\n if (containingRanges.length > 0) {\n // Sort by size: smallest first (innermost) → largest last (outermost)\n containingRanges.sort((a, b) => a.size - b.size);\n\n const innermost = containingRanges[0];\n const text = getTextForRange(innermost.start, innermost.end);\n\n // Find the outermost block that isn't the root document range.\n // Walk from largest to smallest, skip any range that starts at\n // line 1 and ends at the last line (that's the root `{}`).\n let outermost: typeof containingRanges[number] | undefined;\n for (let j = containingRanges.length - 1; j > 0; j--) {\n const r = containingRanges[j];\n const isRoot = r.start <= 1 && r.end >= totalLines;\n if (!isRoot) {\n outermost = r;\n break;\n }\n }\n\n const parentBlock =\n outermost && outermost !== innermost\n ? {\n startLine: outermost.start,\n endLine: outermost.end,\n text: getTextForRange(outermost.start, outermost.end),\n kind: outermost.kind,\n }\n : undefined;\n\n emitBlock(innermost.start, innermost.end, text, innermost.kind, parentBlock);\n return;\n }\n }\n }\n\n // Bracket matching fallback — no parent detection available\n const position = { lineNumber, column };\n const brackets = model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n const startLine = openRange.startLineNumber;\n const endLine = closeRange.endLineNumber;\n const text = getTextForRange(startLine, endLine);\n emitBlock(startLine, endLine, text);\n return;\n }\n\n // Full document fallback\n const totalLines = model.getLineCount();\n const text = model.getValue();\n emitBlock(1, totalLines, text);\n } catch {\n // Editor not ready — ignore silently\n }\n },\n []\n );\n\n // Navigate to a block when focusBlock changes\n useEffect(() => {\n if (!focusBlock || !editorRef.current) return;\n\n const editor = editorRef.current;\n const model = editor.getModel();\n if (!model) return;\n\n const allMatches = model.findMatches(\n focusBlock,\n true,\n false,\n true,\n null,\n false\n );\n\n if (allMatches.length === 0) return;\n\n let match = allMatches[0];\n\n if (focusBlockTopLevelOnly && allMatches.length > 1) {\n // A top-level key in formatted JSON has minimal leading whitespace\n // (one indent level). Find the match closest to column 1.\n let bestCol = Infinity;\n for (const m of allMatches) {\n const lineContent = model.getLineContent(m.range.startLineNumber);\n const leadingSpaces = lineContent.length - lineContent.trimStart().length;\n if (leadingSpaces < bestCol) {\n bestCol = leadingSpaces;\n match = m;\n }\n }\n }\n\n const matchLine = match.range.startLineNumber;\n const matchCol = match.range.startColumn;\n\n // Move cursor to the match with smooth scroll\n editor.setPosition({ lineNumber: matchLine, column: matchCol });\n editor.revealLineInCenter(matchLine, 1);\n\n // Find the enclosing block and highlight it\n const findAndHighlightBlock = async () => {\n try {\n // Try folding ranges first\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n let bestStart = -1;\n let bestEnd = -1;\n let bestSize = Infinity;\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, model.getLineCount());\n const size = end - start;\n\n if (\n matchLine >= start &&\n matchLine <= end &&\n size < bestSize\n ) {\n bestStart = start;\n bestEnd = end;\n bestSize = size;\n }\n }\n\n if (bestStart !== -1) {\n editor.setSelection({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n });\n editor.revealRangeInCenter({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n }, 1);\n return;\n }\n }\n }\n\n // Fall back to bracket matching\n const position = { lineNumber: matchLine, column: matchCol };\n const brackets =\n model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n editor.setSelection({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n });\n editor.revealRangeInCenter({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n }, 1);\n return;\n }\n\n // Last resort — just highlight the matched text\n editor.setSelection(match.range);\n } catch {\n // Folding model not ready — just highlight the match\n editor.setSelection(match.range);\n }\n };\n\n // Small delay to let folding model compute after content may have changed\n requestAnimationFrame(() => {\n findAndHighlightBlock();\n });\n }, [focusBlock, focusBlockTopLevelOnly]);\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n\n const initializeEditor = () => {\n try {\n if (language === \"python\") {\n const model = editor.getModel();\n if (model) {\n setCurrentEditorModel(model);\n }\n }\n\n if (language === \"json\" && enableAutoFormatting) {\n requestAnimationFrame(() => {\n handleFormatCode();\n });\n }\n } catch (error) {\n console.warn(\"Failed to initialize editor:\", error);\n }\n };\n\n if (editor.getModel()) {\n initializeEditor();\n } else {\n const disposable = editor.onDidChangeModel(() => {\n initializeEditor();\n disposable.dispose();\n });\n }\n\n // Detect block on mouse click — use onMouseDown + small delay so cursor\n // position is settled before we read it\n if (onBlockClickRef.current) {\n editor.onMouseDown(() => {\n requestAnimationFrame(() => {\n const pos = editor.getPosition();\n if (pos) {\n detectBlock(editor, pos.lineNumber, pos.column);\n }\n });\n });\n }\n };\n\n const handleFormatJsonCode = () => {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n onChange(formattedJson);\n\n // Also update the editor model if it exists\n if (currentEditorModel && activeMonacoEditor) {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n []\n );\n }\n } catch (error) {\n // Display error visually instead of logging to console\n if (currentEditorModel && activeMonacoEditor) {\n const errorMessage =\n error instanceof Error ? error.message : \"Invalid JSON\";\n try {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n [\n {\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: 1,\n endColumn: 1,\n message: `Cannot format: ${errorMessage}`,\n severity: activeMonacoEditor.MarkerSeverity.Error,\n },\n ]\n );\n } catch (markerError) {\n console.warn(\"Failed to set JSON error markers:\", markerError);\n }\n }\n }\n };\n\n const handleFormatCode = () => {\n if (language === \"python\") {\n handleFormatPythonCode();\n return;\n }\n\n if (language === \"json\") {\n handleFormatJsonCode();\n return;\n }\n\n if (editorRef.current) {\n try {\n const formatAction = editorRef.current.getAction(\n \"editor.action.formatDocument\"\n );\n if (formatAction) {\n formatAction.run();\n }\n } catch (error) {\n console.warn(\"Failed to format document:\", error);\n }\n }\n };\n\n const handleChange = (newValue: string | undefined) => {\n if (typeof newValue === \"string\") {\n onChange(newValue);\n }\n };\n\n useEffect(() => {\n if (setIsDisableSave) {\n setIsDisableSave(pythonError || pythonLoading);\n }\n }, [pythonError, pythonLoading, setIsDisableSave]);\n\n // Don't render the editor until Monaco is ready (unless we have a provided instance)\n if (!monacoEditor && !monacoInstance) {\n return (\n <div className=\"flex items-center justify-center p-8 border border-neutral-200 dark:border-neutral-700 rounded-lg\">\n <div className=\"text-neutral-600 dark:text-neutral-400\">\n Loading editor...\n </div>\n </div>\n );\n }\n\n const hoverClass = classNames(\n \"hover:bg-neutral-300 hover:dark:bg-neutral-700 p-0.5 rounded-md flex items-center justify-center\"\n );\n\n const handleCopyCode = () => {\n if (language === \"python\") {\n try {\n let formattedCode = value;\n if (formattedCode) {\n formattedCode = formattedCode\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\");\n formattedCode = formattedCode\n .split(\"\\n\")\n .map((line) => line.trimEnd())\n .join(\"\\n\");\n formattedCode = formattedCode.replace(/\\n+$/, \"\") + \"\\n\";\n }\n\n navigator?.clipboard\n ?.writeText(formattedCode)\n .then(() => {\n // show success toast (kept silent as in web portal)\n })\n .catch((_error: unknown) => {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n });\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n }\n } else if (language === \"json\") {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n navigator?.clipboard?.writeText(formattedJson);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(error?.message || systemMessages.copyFailure(\"JSON Code\"), {\n toastId: systemMessages.copyFailure(\"JSON Code\"),\n });\n }\n } else {\n navigator?.clipboard?.writeText(value);\n }\n };\n\n const getConfig = (code: string) => {\n if (code === \"python\") {\n return {\n type: \"text/x-python\",\n extension: \"py\",\n };\n }\n if (code === \"json\") {\n return {\n type: \"application/json\",\n extension: \"json\",\n };\n }\n return {\n type: \"text/plain\",\n extension: \"txt\",\n };\n };\n\n // Sanitize filename utility (matching web portal implementation)\n const sanitizeFilename = (filename: string, fallback: string): string => {\n // Remove or replace potentially dangerous characters\n const sanitized = filename\n .replace(/[<>:\"/\\\\|?*\\x00-\\x1f]/g, \"_\") // Replace illegal chars\n .replace(/\\.{2,}/g, \".\") // Replace multiple dots\n .replace(/^\\.+|\\.+$/g, \"\") // Remove leading/trailing dots\n .trim();\n\n return sanitized || fallback;\n };\n\n const handleDownloadCode = () => {\n try {\n const blob = new Blob([value], { type: getConfig(language)?.type });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n const extension = getConfig(language)?.extension || \"txt\";\n const sanitizedExtension = sanitizeFilename(extension, \"txt\");\n anchor.download = sanitizeFilename(\n `code_${Date.now()}.${sanitizedExtension}`,\n `code_${Date.now()}.${sanitizedExtension}`\n );\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Code download\"),\n {\n toastId: systemMessages.copyFailure(\"Code download\"),\n }\n );\n }\n };\n\n return (\n <FullScreen handle={fullScreenHandle} className=\"h-full\">\n <div\n className={cn(\n \"relative border border-neutral-200 dark:border-neutral-700 rounded-lg h-full overflow-hidden\",\n className\n )}\n id=\"code-editor-container-with-json-grid\"\n >\n <div\n className={classNames(\n `px-3 py-2 flex items-center bg-neutral-50 dark:bg-neutral-800`,\n // withJsonGrid\n // ? \"border-none\"\n // : \"border-b border-neutral-200 dark:border-neutral-700\",\n \"border-b border-neutral-200 dark:border-neutral-700\",\n isLanguageJson ? \"justify-between\" : \"justify-end\"\n )}\n >\n {isLanguageJson && withJsonGrid ? (\n <Toggle\n isChecked={activeTab === \"Grid\"}\n onChange={(checked) => setActiveTab(checked ? \"Grid\" : \"JSON\")}\n statusText=''\n hideStatus\n withIcon\n tooltip={activeTab === \"JSON\" ? \"Grid view\" : \"Code view\"}\n icon={{\n checkedIcon: <GridOnIcon fontSize={6} className=\"cursor-pointer !block text-primary-600 dark:text-neutral-300\" />,\n uncheckedIcon: <CodeIcon fontSize={10} className=\"cursor-pointer !block text-neutral-700 dark:text-neutral-400\" />,\n }}\n />\n ) : null}\n <div className=\"flex items-center gap-0.5\">\n {renderToolbarActions?.({\n editor: editorRef.current,\n value,\n onChange,\n language,\n isEditMode,\n activeTab,\n })}\n {activeTab === \"Grid\" && isEditMode && withJsonGrid && (\n <span className=\"flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5\">\n <Tooltip title=\"Add key\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setIsAddKeyModalOpen(true)}\n className={classNames(\n \"p-0.5 rounded-md flex items-center justify-center\",\n \"hover:bg-primary-100 hover:dark:bg-neutral-800 text-primary-600 dark:text-neutral-100\"\n )}\n >\n <AddIcon fontSize={16} />\n </button>\n </Tooltip>\n </span>\n )}\n {activeTab === \"Grid\" ? (\n <>\n <Tooltip title=\"Collapse all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setAllExpanded(false)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowUpIcon fontSize={16} />\n </button>\n </Tooltip>\n\n <Tooltip title=\"Expand all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-down\"\n onClick={() => setAllExpanded(true)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowDownIcon fontSize={16} />\n </button>\n </Tooltip>\n </>\n ) : null}\n {activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip title=\"Format\">\n <button\n type='button'\n id=\"btn-code-editor-format-code\"\n onClick={handleFormatCode}\n className={hoverClass}\n >\n <SubjectOutlinedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withTheme && activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip\n title={editorTheme === \"vs\" ? \"Dark mode\" : \"Light mode\"}\n >\n <button\n type='button'\n id=\"btn-code-editor-with-theme\"\n onClick={() =>\n setEditorTheme(editorTheme === \"vs\" ? \"vs-dark\" : \"vs\")\n }\n className={hoverClass}\n >\n {editorTheme === \"vs\" ? (\n <DarkModeOutlinedIcon fontSize={14} />\n ) : (\n <LightModeOutlinedIcon fontSize={14} />\n )}\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") && isShowCopy ? (\n <Tooltip title=\"Copy\">\n <button\n type='button'\n id=\"btn-code-editor-copy-code\"\n onClick={handleCopyCode}\n className={hoverClass}\n >\n <ContentPasteRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") &&\n isShowDownload ? (\n <Tooltip title=\"Download\">\n <button\n type='button'\n id=\"btn-code-editor-download-code\"\n onClick={handleDownloadCode}\n className={hoverClass}\n >\n <FileDownloadRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withFullScreen ? (\n <Tooltip title=\"Fullscreen\">\n <button\n onClick={toggleFocusMode}\n type='button'\n id=\"btn-code-editor-fullscreen\"\n className={hoverClass}\n >\n <FullscreenRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n </div>\n </div>\n\n {activeTab === \"Grid\" && language === \"json\" ? (\n <div>\n <JsonGrid\n isFullScreen={fullScreenHandle?.active}\n allExpanded={allExpanded}\n toggleAll={() => setAllExpanded((prev) => !prev)}\n isEditMode={Boolean(isEditMode)}\n isDarkMode={theme === \"dark\"}\n style={{\n height: fullScreenHandle?.active ? \"100vh\" : height,\n }}\n value={value}\n onChange={onChange}\n setIsAddKeyModalOpen={setIsAddKeyModalOpen}\n isAddKeyModalOpen={isAddKeyModalOpen}\n />\n </div>\n ) : (\n <Editor\n height={fullScreenHandle?.active ? \"100vh\" : height}\n language={language}\n value={value}\n onChange={handleChange}\n theme={editorTheme}\n onMount={handleEditorDidMount}\n options={{\n fontSize: 16,\n folding: true,\n fontFamily: \"Menlo, Monaco, 'Courier New', monospace\",\n fontLigatures: true,\n readOnly: !isEditMode,\n }}\n />\n )}\n </div>\n </FullScreen>\n );\n};\n"],"names":["iconClass","classNames","AddIcon","fontSize","jsx","ContentPasteRoundedIcon","DarkModeOutlinedIcon","FileDownloadRoundedIcon","FullscreenRoundedIcon","KeyboardDoubleArrowDownIcon","KeyboardDoubleArrowUpIcon","LightModeOutlinedIcon","SubjectOutlinedIcon","CodeEditor","value","onChange","withFullScreen","withTheme","isEditMode","height","language","monacoEditor","isShowCopy","isShowDownload","setIsDisableSave","withJsonGrid","externalEditorTheme","externalSetEditorTheme","externalTheme","className","enableAutoFormatting","renderToolbarActions","onBlockClick","focusBlock","focusBlockTopLevelOnly","editorRef","useRef","internalEditorTheme","setInternalEditorTheme","useState","internalTheme","setInternalTheme","editorTheme","theme","setEditorTheme","newTheme","allExpanded","setAllExpanded","currentEditorModel","setCurrentEditorModel","monacoInstance","useMonaco","activeMonacoEditor","handleFormatPythonCode","pythonError","pythonLoading","usePythonSyntax","fullScreenHandle","useFullScreenHandle","activeTab","setActiveTab","isAddKeyModalOpen","setIsAddKeyModalOpen","isLanguageJson","toggleFocusMode","onBlockClickRef","detectBlock","useCallback","editor","lineNumber","column","model","getTextForRange","startLine","endLine","emitBlock","text","kind","parentBlock","foldingContrib","foldingModel","regions","totalLines","containingRanges","start","foldEnd","end","size","rawKind","a","b","innermost","outermost","j","r","position","brackets","openRange","closeRange","useEffect","allMatches","match","bestCol","m","lineContent","leadingSpaces","matchLine","matchCol","findAndHighlightBlock","bestStart","bestEnd","bestSize","handleEditorDidMount","initializeEditor","handleFormatCode","error","disposable","pos","handleFormatJsonCode","parsedJson","formattedJson","errorMessage","markerError","formatAction","handleChange","newValue","hoverClass","handleCopyCode","formattedCode","line","_error","toast","systemMessages","getConfig","code","sanitizeFilename","filename","fallback","handleDownloadCode","blob","url","anchor","extension","sanitizedExtension","FullScreen","jsxs","cn","Toggle","checked","GridOnIcon","CodeIcon","Tooltip","Fragment","JsonGrid","prev","Editor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeEditor.es.js","sources":["../../../../src/components/data-display/code-editor/CodeEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport classNames from 'classnames';\nimport { type FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { FullScreen, useFullScreenHandle } from 'react-full-screen';\nimport { toast } from 'react-toastify';\nimport { useMonaco } from '../../../hooks/useMonaco';\nimport { usePythonSyntax } from '../../../hooks/usePythonSyntax';\nimport { type CodeEditorProps } from '../../../types';\nimport { systemMessages } from '../../../utils/messageConstants';\nimport { JsonGrid } from './JsonGrid';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { Toggle } from '../../forms/toggle/Toggle';\nimport { cn } from '../../../lib/utils';\nimport { CodeIcon, GridOnIcon } from '../../icon';\n\n// Icon class styling (matching web portal)\nconst iconClass = classNames(\n 'text-neutral-600 cursor-pointer hover:text-neutral-800',\n 'dark:text-neutral-300 dark:hover:text-neutral-50'\n);\n\n// Material Icons converted to SVG components (matching web portal icons)\nconst AddIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n);\n\nconst ContentPasteRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>\n);\n\nconst DarkModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M9.5 2c-1.82 0-3.53.5-5 1.35 2.99 1.73 5 4.95 5 8.65s-2.01 6.92-5 8.65c1.47.85 3.18 1.35 5 1.35 5.52 0 10-4.48 10-10S15.02 2 9.5 2z\" />\n </svg>\n);\n\nconst FileDownloadRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 15v3H6v-3H4v3c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-3h-2zm-1-4-5 5-5-5h3V4h4v7h3z\" />\n </svg>\n);\n\nconst FullscreenRoundedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowDownIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z\" />\n <path d=\"m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z\" />\n </svg>\n);\n\nconst KeyboardDoubleArrowUpIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M6 17.59 7.41 19 12 14.42 16.59 19 18 17.59l-6-6z\" />\n <path d=\"m6 11 1.41 1.41L12 7.83l4.59 4.58L18 11l-6-6z\" />\n </svg>\n);\n\nconst LightModeOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M12 9c1.65 0 3 1.35 3 3s-1.35 3-3 3-3-1.35-3-3 1.35-3 3-3m0-2c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\" />\n </svg>\n);\n\nconst SubjectOutlinedIcon = ({ fontSize }: { fontSize: number }) => (\n <svg width={fontSize} height={fontSize} viewBox=\"0 0 24 24\" fill=\"currentColor\" className={iconClass}>\n <path d=\"M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z\" />\n </svg>\n);\n\ntype TTabKey = 'JSON' | 'Grid';\n\nexport const CodeEditor: FC<CodeEditorProps> = ({\n value,\n onChange = () => false,\n withFullScreen = true,\n withTheme = true,\n isEditMode = false,\n height = \"55vh\",\n language = \"json\",\n monacoEditor,\n isShowCopy = true,\n isShowDownload = true,\n setIsDisableSave,\n withJsonGrid = true,\n editorTheme: externalEditorTheme,\n setEditorTheme: externalSetEditorTheme,\n theme: externalTheme,\n className,\n enableAutoFormatting = true,\n renderToolbarActions,\n onBlockClick,\n focusBlock,\n focusBlockTopLevelOnly = false,\n}) => {\n const editorRef = useRef<any>(null);\n\n // Internal theme state (used when not provided by parent)\n const [internalEditorTheme, setInternalEditorTheme] = useState<\n \"vs\" | \"vs-dark\"\n >(\"vs\");\n const [internalTheme, setInternalTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n // Use external theme if provided, otherwise use internal\n const editorTheme = externalEditorTheme ?? internalEditorTheme;\n const theme = externalTheme ?? internalTheme;\n const setEditorTheme =\n externalSetEditorTheme ??\n ((newTheme: \"vs\" | \"vs-dark\") => {\n setInternalEditorTheme(newTheme);\n setInternalTheme(newTheme === \"vs-dark\" ? \"dark\" : \"light\");\n });\n\n const [allExpanded, setAllExpanded] = useState<boolean>(false);\n const [currentEditorModel, setCurrentEditorModel] = useState<any>(null);\n const monacoInstance = useMonaco();\n\n // Use provided monacoEditor prop or fall back to our managed instance\n const activeMonacoEditor = monacoEditor || monacoInstance;\n\n const {\n handleFormatCode: handleFormatPythonCode,\n pythonError,\n pythonLoading,\n } = usePythonSyntax({\n code: value,\n setCode: onChange,\n currentEditorModel,\n monacoEditor: activeMonacoEditor,\n enable: isEditMode === true && language === \"python\",\n });\n\n const fullScreenHandle = useFullScreenHandle();\n const [activeTab, setActiveTab] = useState<TTabKey>(\"JSON\");\n const [isAddKeyModalOpen, setIsAddKeyModalOpen] = useState(false);\n const isLanguageJson = language === \"json\";\n\n const toggleFocusMode = () => {\n if (fullScreenHandle?.active) {\n fullScreenHandle.exit();\n } else {\n fullScreenHandle.enter();\n }\n };\n\n const onBlockClickRef = useRef(onBlockClick);\n onBlockClickRef.current = onBlockClick;\n\n const detectBlock = useCallback(\n async (editor: any, lineNumber: number, column: number) => {\n if (!onBlockClickRef.current) return;\n\n const model = editor.getModel();\n if (!model) return;\n\n const getTextForRange = (startLine: number, endLine: number) =>\n model.getValueInRange({\n startLineNumber: startLine,\n startColumn: 1,\n endLineNumber: endLine,\n endColumn: model.getLineMaxColumn(endLine),\n });\n\n const emitBlock = (\n startLine: number,\n endLine: number,\n text: string,\n kind?: string,\n parentBlock?: { startLine: number; endLine: number; text: string; kind?: string }\n ) => {\n onBlockClickRef.current!({\n startLine,\n endLine,\n text,\n kind,\n cursorLine: lineNumber,\n cursorColumn: column,\n parentBlock,\n });\n };\n\n try {\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n const totalLines = model.getLineCount();\n\n // Collect all folding ranges that contain the cursor line\n const containingRanges: {\n start: number;\n end: number;\n size: number;\n kind?: string;\n }[] = [];\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, totalLines);\n const size = end - start;\n\n if (lineNumber >= start && lineNumber <= end) {\n const rawKind = regions.getType(i);\n const kind =\n rawKind === 1\n ? \"comment\"\n : rawKind === 2\n ? \"imports\"\n : rawKind === 3\n ? \"region\"\n : undefined;\n containingRanges.push({ start, end, size, kind });\n }\n }\n\n if (containingRanges.length > 0) {\n // Sort by size: smallest first (innermost) → largest last (outermost)\n containingRanges.sort((a, b) => a.size - b.size);\n\n const innermost = containingRanges[0];\n const text = getTextForRange(innermost.start, innermost.end);\n\n // Find the outermost block that isn't the root document range.\n // Walk from largest to smallest, skip any range that starts at\n // line 1 and ends at the last line (that's the root `{}`).\n let outermost: typeof containingRanges[number] | undefined;\n for (let j = containingRanges.length - 1; j > 0; j--) {\n const r = containingRanges[j];\n const isRoot = r.start <= 1 && r.end >= totalLines;\n if (!isRoot) {\n outermost = r;\n break;\n }\n }\n\n const parentBlock =\n outermost && outermost !== innermost\n ? {\n startLine: outermost.start,\n endLine: outermost.end,\n text: getTextForRange(outermost.start, outermost.end),\n kind: outermost.kind,\n }\n : undefined;\n\n emitBlock(innermost.start, innermost.end, text, innermost.kind, parentBlock);\n return;\n }\n }\n }\n\n // Bracket matching fallback — no parent detection available\n const position = { lineNumber, column };\n const brackets = model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n const startLine = openRange.startLineNumber;\n const endLine = closeRange.endLineNumber;\n const text = getTextForRange(startLine, endLine);\n emitBlock(startLine, endLine, text);\n return;\n }\n\n // Full document fallback\n const totalLines = model.getLineCount();\n const text = model.getValue();\n emitBlock(1, totalLines, text);\n } catch {\n // Editor not ready — ignore silently\n }\n },\n []\n );\n\n // Navigate to a block when focusBlock changes\n useEffect(() => {\n if (!focusBlock || !editorRef.current) return;\n\n const editor = editorRef.current;\n const model = editor.getModel();\n if (!model) return;\n\n const allMatches = model.findMatches(\n focusBlock,\n true,\n false,\n true,\n null,\n false\n );\n\n if (allMatches.length === 0) return;\n\n let match = allMatches[0];\n\n if (focusBlockTopLevelOnly && allMatches.length > 1) {\n // A top-level key in formatted JSON has minimal leading whitespace\n // (one indent level). Find the match closest to column 1.\n let bestCol = Infinity;\n for (const m of allMatches) {\n const lineContent = model.getLineContent(m.range.startLineNumber);\n const leadingSpaces = lineContent.length - lineContent.trimStart().length;\n if (leadingSpaces < bestCol) {\n bestCol = leadingSpaces;\n match = m;\n }\n }\n }\n\n const matchLine = match.range.startLineNumber;\n const matchCol = match.range.startColumn;\n\n // Move cursor to the match with smooth scroll\n editor.setPosition({ lineNumber: matchLine, column: matchCol });\n editor.revealLineInCenter(matchLine, 1);\n\n // Find the enclosing block and highlight it\n const findAndHighlightBlock = async () => {\n try {\n // Try folding ranges first\n const foldingContrib = editor.getContribution(\n \"editor.contrib.folding\"\n );\n if (foldingContrib) {\n const foldingModel = await (foldingContrib as any).getFoldingModel();\n if (foldingModel?.regions) {\n const regions = foldingModel.regions;\n let bestStart = -1;\n let bestEnd = -1;\n let bestSize = Infinity;\n\n for (let i = 0; i < regions.length; i++) {\n const start = regions.getStartLineNumber(i);\n const foldEnd = regions.getEndLineNumber(i);\n const end = Math.min(foldEnd + 1, model.getLineCount());\n const size = end - start;\n\n if (\n matchLine >= start &&\n matchLine <= end &&\n size < bestSize\n ) {\n bestStart = start;\n bestEnd = end;\n bestSize = size;\n }\n }\n\n if (bestStart !== -1) {\n editor.setSelection({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n });\n editor.revealRangeInCenter({\n startLineNumber: bestStart,\n startColumn: 1,\n endLineNumber: bestEnd,\n endColumn: model.getLineMaxColumn(bestEnd),\n }, 1);\n return;\n }\n }\n }\n\n // Fall back to bracket matching\n const position = { lineNumber: matchLine, column: matchCol };\n const brackets =\n model.bracketPairs?.findEnclosingBrackets?.(position);\n\n if (brackets && brackets.length === 2) {\n const [openRange, closeRange] = brackets;\n editor.setSelection({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n });\n editor.revealRangeInCenter({\n startLineNumber: openRange.startLineNumber,\n startColumn: 1,\n endLineNumber: closeRange.endLineNumber,\n endColumn: model.getLineMaxColumn(closeRange.endLineNumber),\n }, 1);\n return;\n }\n\n // Last resort — just highlight the matched text\n editor.setSelection(match.range);\n } catch {\n // Folding model not ready — just highlight the match\n editor.setSelection(match.range);\n }\n };\n\n // Small delay to let folding model compute after content may have changed\n requestAnimationFrame(() => {\n findAndHighlightBlock();\n });\n }, [focusBlock, focusBlockTopLevelOnly]);\n\n const handleEditorDidMount: OnMount = (editor) => {\n editorRef.current = editor;\n\n const initializeEditor = () => {\n try {\n if (language === \"python\") {\n const model = editor.getModel();\n if (model) {\n setCurrentEditorModel(model);\n }\n }\n\n if (language === \"json\" && enableAutoFormatting) {\n requestAnimationFrame(() => {\n handleFormatCode();\n });\n }\n } catch (error) {\n console.warn(\"Failed to initialize editor:\", error);\n }\n };\n\n if (editor.getModel()) {\n initializeEditor();\n } else {\n const disposable = editor.onDidChangeModel(() => {\n initializeEditor();\n disposable.dispose();\n });\n }\n\n // Detect block on mouse click — use onMouseDown + small delay so cursor\n // position is settled before we read it\n if (onBlockClickRef.current) {\n editor.onMouseDown(() => {\n requestAnimationFrame(() => {\n const pos = editor.getPosition();\n if (pos) {\n detectBlock(editor, pos.lineNumber, pos.column);\n }\n });\n });\n }\n };\n\n const handleFormatJsonCode = () => {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n onChange(formattedJson);\n\n // Also update the editor model if it exists\n if (currentEditorModel && activeMonacoEditor) {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n []\n );\n }\n } catch (error) {\n // Display error visually instead of logging to console\n if (currentEditorModel && activeMonacoEditor) {\n const errorMessage =\n error instanceof Error ? error.message : \"Invalid JSON\";\n try {\n activeMonacoEditor.editor.setModelMarkers(\n currentEditorModel,\n \"json\",\n [\n {\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: 1,\n endColumn: 1,\n message: `Cannot format: ${errorMessage}`,\n severity: activeMonacoEditor.MarkerSeverity.Error,\n },\n ]\n );\n } catch (markerError) {\n console.warn(\"Failed to set JSON error markers:\", markerError);\n }\n }\n }\n };\n\n const handleFormatCode = () => {\n if (language === \"python\") {\n handleFormatPythonCode();\n return;\n }\n\n if (language === \"json\") {\n handleFormatJsonCode();\n return;\n }\n\n if (editorRef.current) {\n try {\n const formatAction = editorRef.current.getAction(\n \"editor.action.formatDocument\"\n );\n if (formatAction) {\n formatAction.run();\n }\n } catch (error) {\n console.warn(\"Failed to format document:\", error);\n }\n }\n };\n\n const handleChange = (newValue: string | undefined) => {\n if (typeof newValue === \"string\") {\n onChange(newValue);\n }\n };\n\n useEffect(() => {\n if (setIsDisableSave) {\n setIsDisableSave(pythonError || pythonLoading);\n }\n }, [pythonError, pythonLoading, setIsDisableSave]);\n\n // Don't render the editor until Monaco is ready (unless we have a provided instance)\n if (!monacoEditor && !monacoInstance) {\n return (\n <div className=\"flex items-center justify-center p-8 border border-neutral-200 dark:border-neutral-700 rounded-lg\">\n <div className=\"text-neutral-600 dark:text-neutral-400\">\n Loading editor...\n </div>\n </div>\n );\n }\n\n const hoverClass = classNames(\n \"hover:bg-neutral-300 hover:dark:bg-neutral-700 p-0.5 rounded-md flex items-center justify-center\"\n );\n\n const handleCopyCode = () => {\n if (language === \"python\") {\n try {\n let formattedCode = value;\n if (formattedCode) {\n formattedCode = formattedCode\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\");\n formattedCode = formattedCode\n .split(\"\\n\")\n .map((line) => line.trimEnd())\n .join(\"\\n\");\n formattedCode = formattedCode.replace(/\\n+$/, \"\") + \"\\n\";\n }\n\n navigator?.clipboard\n ?.writeText(formattedCode)\n .then(() => {\n // show success toast (kept silent as in web portal)\n })\n .catch((_error: unknown) => {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n });\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Python Code\"),\n {\n toastId: systemMessages.copyFailure(\"Python Code\"),\n }\n );\n }\n } else if (language === \"json\") {\n try {\n const parsedJson = JSON.parse(value);\n const formattedJson = JSON.stringify(parsedJson, null, 4);\n navigator?.clipboard?.writeText(formattedJson);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(error?.message || systemMessages.copyFailure(\"JSON Code\"), {\n toastId: systemMessages.copyFailure(\"JSON Code\"),\n });\n }\n } else {\n navigator?.clipboard?.writeText(value);\n }\n };\n\n const getConfig = (code: string) => {\n if (code === \"python\") {\n return {\n type: \"text/x-python\",\n extension: \"py\",\n };\n }\n if (code === \"json\") {\n return {\n type: \"application/json\",\n extension: \"json\",\n };\n }\n return {\n type: \"text/plain\",\n extension: \"txt\",\n };\n };\n\n // Sanitize filename utility (matching web portal implementation)\n const sanitizeFilename = (filename: string, fallback: string): string => {\n // Remove or replace potentially dangerous characters\n const sanitized = filename\n .replace(/[<>:\"/\\\\|?*\\x00-\\x1f]/g, \"_\") // Replace illegal chars\n .replace(/\\.{2,}/g, \".\") // Replace multiple dots\n .replace(/^\\.+|\\.+$/g, \"\") // Remove leading/trailing dots\n .trim();\n\n return sanitized || fallback;\n };\n\n const handleDownloadCode = () => {\n try {\n const blob = new Blob([value], { type: getConfig(language)?.type });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n const extension = getConfig(language)?.extension || \"txt\";\n const sanitizedExtension = sanitizeFilename(extension, \"txt\");\n anchor.download = sanitizeFilename(\n `code_${Date.now()}.${sanitizedExtension}`,\n `code_${Date.now()}.${sanitizedExtension}`\n );\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n } catch (_error: unknown) {\n const error = _error as Error;\n toast.error(\n error?.message || systemMessages.copyFailure(\"Code download\"),\n {\n toastId: systemMessages.copyFailure(\"Code download\"),\n }\n );\n }\n };\n\n return (\n <FullScreen handle={fullScreenHandle} className=\"h-full\">\n <div\n className={cn(\n \"relative border border-neutral-200 dark:border-neutral-700 rounded-lg h-full overflow-hidden\",\n className\n )}\n id=\"code-editor-container-with-json-grid\"\n >\n <div\n className={classNames(\n `px-3 py-2 flex items-center bg-neutral-50 dark:bg-neutral-800`,\n // withJsonGrid\n // ? \"border-none\"\n // : \"border-b border-neutral-200 dark:border-neutral-700\",\n \"border-b border-neutral-200 dark:border-neutral-700\",\n isLanguageJson ? \"justify-between\" : \"justify-end\"\n )}\n >\n {isLanguageJson && withJsonGrid ? (\n <Toggle\n isChecked={activeTab === \"Grid\"}\n onChange={(checked) => setActiveTab(checked ? \"Grid\" : \"JSON\")}\n statusText=''\n hideStatus\n withIcon\n tooltip={activeTab === \"JSON\" ? \"Grid view\" : \"Code view\"}\n icon={{\n checkedIcon: <GridOnIcon className=\"cursor-pointer !block text-primary-600 dark:text-neutral-300 h-2xs w-2xs lg:h-xs lg:w-xs\" />,\n uncheckedIcon: <CodeIcon className=\"cursor-pointer !block text-neutral-700 dark:text-neutral-400 h-2xs w-2xs lg:h-xs lg:w-xs\" />,\n }}\n />\n ) : null}\n <div className=\"flex items-center gap-0.5\">\n {renderToolbarActions?.({\n editor: editorRef.current,\n value,\n onChange,\n language,\n isEditMode,\n activeTab,\n })}\n {activeTab === \"Grid\" && isEditMode && withJsonGrid && (\n <span className=\"flex items-center justify-center border-r border-neutral-200 dark:border-neutral-700 mr-1.5 pr-1.5\">\n <Tooltip title=\"Add key\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setIsAddKeyModalOpen(true)}\n className={classNames(\n \"p-0.5 rounded-md flex items-center justify-center\",\n \"hover:bg-primary-100 hover:dark:bg-neutral-800 text-primary-600 dark:text-neutral-100\"\n )}\n >\n <AddIcon fontSize={16} />\n </button>\n </Tooltip>\n </span>\n )}\n {activeTab === \"Grid\" ? (\n <>\n <Tooltip title=\"Collapse all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-up\"\n onClick={() => setAllExpanded(false)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowUpIcon fontSize={16} />\n </button>\n </Tooltip>\n\n <Tooltip title=\"Expand all\">\n <button\n type='button'\n id=\"btn-code-editor-json-grid-down\"\n onClick={() => setAllExpanded(true)}\n className={hoverClass}\n >\n <KeyboardDoubleArrowDownIcon fontSize={16} />\n </button>\n </Tooltip>\n </>\n ) : null}\n {activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip title=\"Format\">\n <button\n type='button'\n id=\"btn-code-editor-format-code\"\n onClick={handleFormatCode}\n className={hoverClass}\n >\n <SubjectOutlinedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withTheme && activeTab === \"JSON\" && withJsonGrid ? (\n <Tooltip\n title={editorTheme === \"vs\" ? \"Dark mode\" : \"Light mode\"}\n >\n <button\n type='button'\n id=\"btn-code-editor-with-theme\"\n onClick={() =>\n setEditorTheme(editorTheme === \"vs\" ? \"vs-dark\" : \"vs\")\n }\n className={hoverClass}\n >\n {editorTheme === \"vs\" ? (\n <DarkModeOutlinedIcon fontSize={14} />\n ) : (\n <LightModeOutlinedIcon fontSize={14} />\n )}\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") && isShowCopy ? (\n <Tooltip title=\"Copy\">\n <button\n type='button'\n id=\"btn-code-editor-copy-code\"\n onClick={handleCopyCode}\n className={hoverClass}\n >\n <ContentPasteRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {(language === \"python\" || language === \"json\") &&\n isShowDownload ? (\n <Tooltip title=\"Download\">\n <button\n type='button'\n id=\"btn-code-editor-download-code\"\n onClick={handleDownloadCode}\n className={hoverClass}\n >\n <FileDownloadRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n {withFullScreen ? (\n <Tooltip title=\"Fullscreen\">\n <button\n onClick={toggleFocusMode}\n type='button'\n id=\"btn-code-editor-fullscreen\"\n className={hoverClass}\n >\n <FullscreenRoundedIcon fontSize={14} />\n </button>\n </Tooltip>\n ) : null}\n </div>\n </div>\n\n {activeTab === \"Grid\" && language === \"json\" ? (\n <div>\n <JsonGrid\n isFullScreen={fullScreenHandle?.active}\n allExpanded={allExpanded}\n toggleAll={() => setAllExpanded((prev) => !prev)}\n isEditMode={Boolean(isEditMode)}\n isDarkMode={theme === \"dark\"}\n style={{\n height: fullScreenHandle?.active ? \"100vh\" : height,\n }}\n value={value}\n onChange={onChange}\n setIsAddKeyModalOpen={setIsAddKeyModalOpen}\n isAddKeyModalOpen={isAddKeyModalOpen}\n />\n </div>\n ) : (\n <Editor\n height={fullScreenHandle?.active ? \"100vh\" : height}\n language={language}\n value={value}\n onChange={handleChange}\n theme={editorTheme}\n onMount={handleEditorDidMount}\n options={{\n fontSize: 16,\n folding: true,\n fontFamily: \"Menlo, Monaco, 'Courier New', monospace\",\n fontLigatures: true,\n readOnly: !isEditMode,\n }}\n />\n )}\n </div>\n </FullScreen>\n );\n};\n"],"names":["iconClass","classNames","AddIcon","fontSize","jsx","ContentPasteRoundedIcon","DarkModeOutlinedIcon","FileDownloadRoundedIcon","FullscreenRoundedIcon","KeyboardDoubleArrowDownIcon","KeyboardDoubleArrowUpIcon","LightModeOutlinedIcon","SubjectOutlinedIcon","CodeEditor","value","onChange","withFullScreen","withTheme","isEditMode","height","language","monacoEditor","isShowCopy","isShowDownload","setIsDisableSave","withJsonGrid","externalEditorTheme","externalSetEditorTheme","externalTheme","className","enableAutoFormatting","renderToolbarActions","onBlockClick","focusBlock","focusBlockTopLevelOnly","editorRef","useRef","internalEditorTheme","setInternalEditorTheme","useState","internalTheme","setInternalTheme","editorTheme","theme","setEditorTheme","newTheme","allExpanded","setAllExpanded","currentEditorModel","setCurrentEditorModel","monacoInstance","useMonaco","activeMonacoEditor","handleFormatPythonCode","pythonError","pythonLoading","usePythonSyntax","fullScreenHandle","useFullScreenHandle","activeTab","setActiveTab","isAddKeyModalOpen","setIsAddKeyModalOpen","isLanguageJson","toggleFocusMode","onBlockClickRef","detectBlock","useCallback","editor","lineNumber","column","model","getTextForRange","startLine","endLine","emitBlock","text","kind","parentBlock","foldingContrib","foldingModel","regions","totalLines","containingRanges","start","foldEnd","end","size","rawKind","a","b","innermost","outermost","j","r","position","brackets","openRange","closeRange","useEffect","allMatches","match","bestCol","m","lineContent","leadingSpaces","matchLine","matchCol","findAndHighlightBlock","bestStart","bestEnd","bestSize","handleEditorDidMount","initializeEditor","handleFormatCode","error","disposable","pos","handleFormatJsonCode","parsedJson","formattedJson","errorMessage","markerError","formatAction","handleChange","newValue","hoverClass","handleCopyCode","formattedCode","line","_error","toast","systemMessages","getConfig","code","sanitizeFilename","filename","fallback","handleDownloadCode","blob","url","anchor","extension","sanitizedExtension","FullScreen","jsxs","cn","Toggle","checked","GridOnIcon","CodeIcon","Tooltip","Fragment","JsonGrid","prev","Editor"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),e=l.createContext({tableWrapper:null,tableBodyWrapper:null,lastNonStickyColumnIndex:()=>null,search:null,columnFilters:[],onRowClick:null,onSort:null,onFilter:null,onRemoveFilter:null,onClearFilter:null,rowOptions:null,checkboxConfig:null,onResetFilter:null,isColumnConfigurable:!1,onAddColumnClick:null,onEditColumnClick:null,onDeleteColumnClick:null,toggleShowFilters:null,toggleShowSorts:null,onRowTooltipClick:null,tooltiptext:null,cascadingTableConfig:null,originalsOnly:!1,disableOptionsForRowIndex:null,getFullRowDataOnClick:!1,getSumOfNextVisibleColumnWidth:()=>null,onRowEdit:null,inlineEditColumns:[],tableActions:null,dndSortableUtils:null,withSortable:!1,withDraggable:!1,onCascadingRowExpand:null,getInnerRowData:null,tableHeaders:null,maxLevel:0,expandedRows:{},setExpandedRows:null,showNewItem:!1,rawData:null,dragConfig:null,rowWrapper:null,asyncRowOptionsFilter:null,rowLinkConfig:{isEnabled:!1,linkTo:null},isCellClickDisabled:!1,activeInlineEdit:null,setActiveInlineEdit:void 0,handleUpdateColumnWidth:()=>{},multiSelectConfig:null,headerContextOptions:null,showHeaderContextOptions:null,setShowHeaderContextOptions:void 0,showDataTypeIcon:!1,rowAdditionalActions:null,rowAdditionalActionsWidth:0,hoverConfig:null,openMasterDataModal:void 0,closeMasterDataModal:void 0,selectedMasterData:null,clearSelectedMasterData:void 0,openCurrencyDropdown:void 0,closeCurrencyDropdown:void 0,currencyDropdownConfig:null,selectedCurrenciesMap:{},setCurrencyForCell:void 0,getCurrencyForCell:void 0});exports.TableContext=e;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),e=l.createContext({tableWrapper:null,tableBodyWrapper:null,lastNonStickyColumnIndex:()=>null,search:null,columnFilters:[],onRowClick:null,onSort:null,onFilter:null,onRemoveFilter:null,onClearFilter:null,rowOptions:null,checkboxConfig:null,onResetFilter:null,isColumnConfigurable:!1,onAddColumnClick:null,onEditColumnClick:null,onDeleteColumnClick:null,toggleShowFilters:null,toggleShowSorts:null,onRowTooltipClick:null,tooltiptext:null,cascadingTableConfig:null,originalsOnly:!1,disableOptionsForRowIndex:null,getFullRowDataOnClick:!1,getSumOfNextVisibleColumnWidth:()=>null,onRowEdit:null,inlineEditColumns:[],tableActions:null,dndSortableUtils:null,withSortable:!1,withDraggable:!1,onCascadingRowExpand:null,getInnerRowData:null,tableHeaders:null,maxLevel:0,expandedRows:{},setExpandedRows:null,showNewItem:!1,rawData:null,dragConfig:null,rowWrapper:null,asyncRowOptionsFilter:null,rowLinkConfig:{isEnabled:!1,linkTo:null},isCellClickDisabled:!1,activeInlineEdit:null,setActiveInlineEdit:void 0,handleUpdateColumnWidth:()=>{},isTableViewReadOnly:!1,multiSelectConfig:null,headerContextOptions:null,showHeaderContextOptions:null,setShowHeaderContextOptions:void 0,showDataTypeIcon:!1,rowAdditionalActions:null,rowAdditionalActionsWidth:0,hoverConfig:null,openMasterDataModal:void 0,closeMasterDataModal:void 0,selectedMasterData:null,clearSelectedMasterData:void 0,openCurrencyDropdown:void 0,closeCurrencyDropdown:void 0,currencyDropdownConfig:null,selectedCurrenciesMap:{},setCurrencyForCell:void 0,getCurrencyForCell:void 0});exports.TableContext=e;
|
|
2
2
|
//# sourceMappingURL=context.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.cjs.js","sources":["../../../../src/components/data-display/infinite-table/context.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext } from 'react';\nimport type { ICurrencyDropdownConfig, IMasterDataModalConfig, IMultiSelectConfig, IPendingEdit, PendingEditsMap } from './types';\n\nexport interface ITableContext {\n tableWrapper?: any;\n tableBodyWrapper?: any;\n lastNonStickyColumnIndex?: () => number | null;\n search?: string | null;\n columnFilters?: any[];\n onRowClick?: any;\n onSort?: any;\n onFilter?: any;\n toggleShowFilters?: any;\n toggleShowSorts?: any;\n onRemoveFilter?: any;\n onClearFilter?: any;\n rowOptions?: any;\n checkboxConfig?: any;\n onResetFilter?: any;\n isColumnConfigurable?: boolean;\n onAddColumnClick?: any;\n onEditColumnClick?: any;\n onDeleteColumnClick?: any;\n onRowTooltipClick?: any;\n tooltiptext?: any;\n cascadingTableConfig?: any;\n originalsOnly?: boolean;\n disableOptionsForRowIndex?: any;\n getFullRowDataOnClick?: boolean;\n selectedRowId?: string | number | null;\n getSumOfNextVisibleColumnWidth?: (currentIndex: number) => number | null;\n onRowEdit?: any;\n inlineEditColumns?: string[];\n tableActions?: any;\n dndSortableUtils?: any;\n withSortable?: boolean;\n withDraggable?: boolean;\n onCascadingRowExpand?: any;\n getInnerRowData?: any;\n tableHeaders?: any[];\n maxLevel?: number;\n expandedRows?: any;\n setExpandedRows?: any;\n showNewItem?: boolean;\n rawData?: any;\n dragConfig?: any;\n rowWrapper?: any;\n asyncRowOptionsFilter?: any;\n rowLinkConfig?: {\n isEnabled: boolean;\n linkTo: any;\n };\n isCellClickDisabled?: boolean;\n activeInlineEdit?: { rowId: string; columnKey: string } | null;\n setActiveInlineEdit?: (value: { rowId: string; columnKey: string } | null) => void;\n handleUpdateColumnWidth?: (columnName: string, width: number) => void;\n multiSelectConfig?: IMultiSelectConfig | null;\n headerContextOptions?: React.ReactNode;\n showHeaderContextOptions?: string | null;\n setShowHeaderContextOptions?: (value: string | null) => void;\n headerDivWidth?: number;\n showDataTypeIcon?: boolean;\n rowAdditionalActions?: any;\n rowAdditionalActionsWidth?: number;\n hoverConfig?: any;\n cellEditing?: string | string[] | null;\n cellEditingValue?: string | Record<string, string> | null;\n openMasterDataModal?: (config: IMasterDataModalConfig) => void;\n closeMasterDataModal?: () => void;\n selectedMasterData?: { value: any; reference: any } | null;\n clearSelectedMasterData?: () => void;\n allowInlineEdit?: boolean;\n openCurrencyDropdown?: (config: ICurrencyDropdownConfig) => void;\n closeCurrencyDropdown?: () => void;\n currencyDropdownConfig?: ICurrencyDropdownConfig | null;\n selectedCurrenciesMap?: Record<string, string>;\n setCurrencyForCell?: (cellKey: string, currency: string) => void;\n getCurrencyForCell?: (cellKey: string) => string | undefined;\n pendingEdits?: PendingEditsMap;\n addPendingEdit?: (rowId: string, columnKey: string, edit: IPendingEdit) => void;\n removePendingEdit?: (rowId: string, columnKey: string) => void;\n getPendingEdit?: (rowId: string, columnKey: string) => IPendingEdit | undefined;\n hasPendingEdit?: (rowId: string, columnKey: string) => boolean;\n clearAllPendingEdits?: () => void;\n saveAllPendingEdits?: () => void;\n clearRowPendingEdits?: (rowId: string) => void;\n saveRowPendingEdits?: (rowId: string) => void;\n pendingEditsCount?: number;\n scrollToCell?: (rowId: string, columnKey: string, rowIndex: number) => void;\n onFieldOperationFlow?: (params: {\n value: unknown;\n fieldId: string;\n rowId: string;\n rowData: any;\n columnKey: string;\n flowName?: string;\n isLiveField?: boolean;\n meta?: { reference?: unknown; currency_code?: string };\n }) => Promise<void>;\n fieldOperationLoading?: string | null;\n validateAllPendingEdits?: any;\n}\n\nexport const TableContext = createContext<ITableContext>({\n tableWrapper: null,\n tableBodyWrapper: null,\n lastNonStickyColumnIndex: () => null,\n search: null,\n columnFilters: [],\n onRowClick: null,\n onSort: null,\n onFilter: null,\n onRemoveFilter: null,\n onClearFilter: null,\n rowOptions: null,\n checkboxConfig: null,\n onResetFilter: null,\n isColumnConfigurable: false,\n onAddColumnClick: null,\n onEditColumnClick: null,\n onDeleteColumnClick: null,\n toggleShowFilters: null,\n toggleShowSorts: null,\n onRowTooltipClick: null,\n tooltiptext: null,\n cascadingTableConfig: null,\n originalsOnly: false,\n disableOptionsForRowIndex: null,\n getFullRowDataOnClick: false,\n getSumOfNextVisibleColumnWidth: () => null,\n onRowEdit: null,\n inlineEditColumns: [],\n tableActions: null,\n dndSortableUtils: null,\n withSortable: false,\n withDraggable: false,\n onCascadingRowExpand: null,\n getInnerRowData: null,\n tableHeaders: null as any,\n maxLevel: 0,\n expandedRows: {},\n setExpandedRows: null,\n showNewItem: false,\n rawData: null,\n dragConfig: null,\n rowWrapper: null,\n asyncRowOptionsFilter: null,\n rowLinkConfig: {\n isEnabled: false,\n linkTo: null,\n },\n isCellClickDisabled: false,\n activeInlineEdit: null,\n setActiveInlineEdit: undefined,\n handleUpdateColumnWidth: () => undefined,\n multiSelectConfig: null,\n headerContextOptions: null,\n showHeaderContextOptions: null,\n setShowHeaderContextOptions: undefined,\n showDataTypeIcon: false,\n rowAdditionalActions: null,\n rowAdditionalActionsWidth: 0,\n hoverConfig: null,\n openMasterDataModal: undefined,\n closeMasterDataModal: undefined,\n selectedMasterData: null,\n clearSelectedMasterData: undefined,\n openCurrencyDropdown: undefined,\n closeCurrencyDropdown: undefined,\n currencyDropdownConfig: null,\n selectedCurrenciesMap: {},\n setCurrencyForCell: undefined,\n getCurrencyForCell: undefined,\n});\n"],"names":["TableContext","createContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.cjs.js","sources":["../../../../src/components/data-display/infinite-table/context.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext } from 'react';\nimport type { ICurrencyDropdownConfig, IMasterDataModalConfig, IMultiSelectConfig, IPendingEdit, PendingEditsMap } from './types';\n\nexport interface ITableContext {\n tableWrapper?: any;\n tableBodyWrapper?: any;\n lastNonStickyColumnIndex?: () => number | null;\n search?: string | null;\n columnFilters?: any[];\n onRowClick?: any;\n onSort?: any;\n onFilter?: any;\n toggleShowFilters?: any;\n toggleShowSorts?: any;\n onRemoveFilter?: any;\n onClearFilter?: any;\n rowOptions?: any;\n checkboxConfig?: any;\n onResetFilter?: any;\n isColumnConfigurable?: boolean;\n onAddColumnClick?: any;\n onEditColumnClick?: any;\n onDeleteColumnClick?: any;\n onRowTooltipClick?: any;\n tooltiptext?: any;\n cascadingTableConfig?: any;\n originalsOnly?: boolean;\n disableOptionsForRowIndex?: any;\n getFullRowDataOnClick?: boolean;\n selectedRowId?: string | number | null;\n getSumOfNextVisibleColumnWidth?: (currentIndex: number) => number | null;\n onRowEdit?: any;\n inlineEditColumns?: string[];\n tableActions?: any;\n dndSortableUtils?: any;\n withSortable?: boolean;\n withDraggable?: boolean;\n onCascadingRowExpand?: any;\n getInnerRowData?: any;\n tableHeaders?: any[];\n maxLevel?: number;\n expandedRows?: any;\n setExpandedRows?: any;\n showNewItem?: boolean;\n rawData?: any;\n dragConfig?: any;\n rowWrapper?: any;\n asyncRowOptionsFilter?: any;\n rowLinkConfig?: {\n isEnabled: boolean;\n linkTo: any;\n };\n isCellClickDisabled?: boolean;\n activeInlineEdit?: { rowId: string; columnKey: string } | null;\n setActiveInlineEdit?: (value: { rowId: string; columnKey: string } | null) => void;\n handleUpdateColumnWidth?: (columnName: string, width: number) => void;\n isTableViewReadOnly?: boolean;\n multiSelectConfig?: IMultiSelectConfig | null;\n headerContextOptions?: React.ReactNode;\n showHeaderContextOptions?: string | null;\n setShowHeaderContextOptions?: (value: string | null) => void;\n headerDivWidth?: number;\n showDataTypeIcon?: boolean;\n rowAdditionalActions?: any;\n rowAdditionalActionsWidth?: number;\n hoverConfig?: any;\n cellEditing?: string | string[] | null;\n cellEditingValue?: string | Record<string, string> | null;\n openMasterDataModal?: (config: IMasterDataModalConfig) => void;\n closeMasterDataModal?: () => void;\n selectedMasterData?: { value: any; reference: any } | null;\n clearSelectedMasterData?: () => void;\n allowInlineEdit?: boolean;\n openCurrencyDropdown?: (config: ICurrencyDropdownConfig) => void;\n closeCurrencyDropdown?: () => void;\n currencyDropdownConfig?: ICurrencyDropdownConfig | null;\n selectedCurrenciesMap?: Record<string, string>;\n setCurrencyForCell?: (cellKey: string, currency: string) => void;\n getCurrencyForCell?: (cellKey: string) => string | undefined;\n pendingEdits?: PendingEditsMap;\n addPendingEdit?: (rowId: string, columnKey: string, edit: IPendingEdit) => void;\n removePendingEdit?: (rowId: string, columnKey: string) => void;\n getPendingEdit?: (rowId: string, columnKey: string) => IPendingEdit | undefined;\n hasPendingEdit?: (rowId: string, columnKey: string) => boolean;\n clearAllPendingEdits?: () => void;\n saveAllPendingEdits?: () => void;\n clearRowPendingEdits?: (rowId: string) => void;\n saveRowPendingEdits?: (rowId: string) => void;\n pendingEditsCount?: number;\n scrollToCell?: (rowId: string, columnKey: string, rowIndex: number) => void;\n onFieldOperationFlow?: (params: {\n value: unknown;\n fieldId: string;\n rowId: string;\n rowData: any;\n columnKey: string;\n flowName?: string;\n isLiveField?: boolean;\n meta?: { reference?: unknown; currency_code?: string };\n }) => Promise<void>;\n fieldOperationLoading?: string | null;\n validateAllPendingEdits?: any;\n}\n\nexport const TableContext = createContext<ITableContext>({\n tableWrapper: null,\n tableBodyWrapper: null,\n lastNonStickyColumnIndex: () => null,\n search: null,\n columnFilters: [],\n onRowClick: null,\n onSort: null,\n onFilter: null,\n onRemoveFilter: null,\n onClearFilter: null,\n rowOptions: null,\n checkboxConfig: null,\n onResetFilter: null,\n isColumnConfigurable: false,\n onAddColumnClick: null,\n onEditColumnClick: null,\n onDeleteColumnClick: null,\n toggleShowFilters: null,\n toggleShowSorts: null,\n onRowTooltipClick: null,\n tooltiptext: null,\n cascadingTableConfig: null,\n originalsOnly: false,\n disableOptionsForRowIndex: null,\n getFullRowDataOnClick: false,\n getSumOfNextVisibleColumnWidth: () => null,\n onRowEdit: null,\n inlineEditColumns: [],\n tableActions: null,\n dndSortableUtils: null,\n withSortable: false,\n withDraggable: false,\n onCascadingRowExpand: null,\n getInnerRowData: null,\n tableHeaders: null as any,\n maxLevel: 0,\n expandedRows: {},\n setExpandedRows: null,\n showNewItem: false,\n rawData: null,\n dragConfig: null,\n rowWrapper: null,\n asyncRowOptionsFilter: null,\n rowLinkConfig: {\n isEnabled: false,\n linkTo: null,\n },\n isCellClickDisabled: false,\n activeInlineEdit: null,\n setActiveInlineEdit: undefined,\n handleUpdateColumnWidth: () => undefined,\n isTableViewReadOnly: false,\n multiSelectConfig: null,\n headerContextOptions: null,\n showHeaderContextOptions: null,\n setShowHeaderContextOptions: undefined,\n showDataTypeIcon: false,\n rowAdditionalActions: null,\n rowAdditionalActionsWidth: 0,\n hoverConfig: null,\n openMasterDataModal: undefined,\n closeMasterDataModal: undefined,\n selectedMasterData: null,\n clearSelectedMasterData: undefined,\n openCurrencyDropdown: undefined,\n closeCurrencyDropdown: undefined,\n currencyDropdownConfig: null,\n selectedCurrenciesMap: {},\n setCurrencyForCell: undefined,\n getCurrencyForCell: undefined,\n});\n"],"names":["TableContext","createContext"],"mappings":"yGAyGaA,EAAeC,EAAAA,cAA6B,CACvD,aAAc,KACd,iBAAkB,KAClB,yBAA0B,IAAM,KAChC,OAAQ,KACR,cAAe,CAAA,EACf,WAAY,KACZ,OAAQ,KACR,SAAU,KACV,eAAgB,KAChB,cAAe,KACf,WAAY,KACZ,eAAgB,KAChB,cAAe,KACf,qBAAsB,GACtB,iBAAkB,KAClB,kBAAmB,KACnB,oBAAqB,KACrB,kBAAmB,KACnB,gBAAiB,KACjB,kBAAmB,KACnB,YAAa,KACb,qBAAsB,KACtB,cAAe,GACf,0BAA2B,KAC3B,sBAAuB,GACvB,+BAAgC,IAAM,KACtC,UAAW,KACX,kBAAmB,CAAA,EACnB,aAAc,KACd,iBAAkB,KAClB,aAAc,GACd,cAAe,GACf,qBAAsB,KACtB,gBAAiB,KACjB,aAAc,KACd,SAAU,EACV,aAAc,CAAA,EACd,gBAAiB,KACjB,YAAa,GACb,QAAS,KACT,WAAY,KACZ,WAAY,KACZ,sBAAuB,KACvB,cAAe,CACb,UAAW,GACX,OAAQ,IAAA,EAEV,oBAAqB,GACrB,iBAAkB,KAClB,oBAAqB,OACrB,wBAAyB,IAAA,GACzB,oBAAqB,GACrB,kBAAmB,KACnB,qBAAsB,KACtB,yBAA0B,KAC1B,4BAA6B,OAC7B,iBAAkB,GAClB,qBAAsB,KACtB,0BAA2B,EAC3B,YAAa,KACb,oBAAqB,OACrB,qBAAsB,OACtB,mBAAoB,KACpB,wBAAyB,OACzB,qBAAsB,OACtB,sBAAuB,OACvB,uBAAwB,KACxB,sBAAuB,CAAA,EACvB,mBAAoB,OACpB,mBAAoB,MACtB,CAAC"}
|
|
@@ -58,6 +58,7 @@ export interface ITableContext {
|
|
|
58
58
|
columnKey: string;
|
|
59
59
|
} | null) => void;
|
|
60
60
|
handleUpdateColumnWidth?: (columnName: string, width: number) => void;
|
|
61
|
+
isTableViewReadOnly?: boolean;
|
|
61
62
|
multiSelectConfig?: IMultiSelectConfig | null;
|
|
62
63
|
headerContextOptions?: React.ReactNode;
|
|
63
64
|
showHeaderContextOptions?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.es.js","sources":["../../../../src/components/data-display/infinite-table/context.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext } from 'react';\nimport type { ICurrencyDropdownConfig, IMasterDataModalConfig, IMultiSelectConfig, IPendingEdit, PendingEditsMap } from './types';\n\nexport interface ITableContext {\n tableWrapper?: any;\n tableBodyWrapper?: any;\n lastNonStickyColumnIndex?: () => number | null;\n search?: string | null;\n columnFilters?: any[];\n onRowClick?: any;\n onSort?: any;\n onFilter?: any;\n toggleShowFilters?: any;\n toggleShowSorts?: any;\n onRemoveFilter?: any;\n onClearFilter?: any;\n rowOptions?: any;\n checkboxConfig?: any;\n onResetFilter?: any;\n isColumnConfigurable?: boolean;\n onAddColumnClick?: any;\n onEditColumnClick?: any;\n onDeleteColumnClick?: any;\n onRowTooltipClick?: any;\n tooltiptext?: any;\n cascadingTableConfig?: any;\n originalsOnly?: boolean;\n disableOptionsForRowIndex?: any;\n getFullRowDataOnClick?: boolean;\n selectedRowId?: string | number | null;\n getSumOfNextVisibleColumnWidth?: (currentIndex: number) => number | null;\n onRowEdit?: any;\n inlineEditColumns?: string[];\n tableActions?: any;\n dndSortableUtils?: any;\n withSortable?: boolean;\n withDraggable?: boolean;\n onCascadingRowExpand?: any;\n getInnerRowData?: any;\n tableHeaders?: any[];\n maxLevel?: number;\n expandedRows?: any;\n setExpandedRows?: any;\n showNewItem?: boolean;\n rawData?: any;\n dragConfig?: any;\n rowWrapper?: any;\n asyncRowOptionsFilter?: any;\n rowLinkConfig?: {\n isEnabled: boolean;\n linkTo: any;\n };\n isCellClickDisabled?: boolean;\n activeInlineEdit?: { rowId: string; columnKey: string } | null;\n setActiveInlineEdit?: (value: { rowId: string; columnKey: string } | null) => void;\n handleUpdateColumnWidth?: (columnName: string, width: number) => void;\n multiSelectConfig?: IMultiSelectConfig | null;\n headerContextOptions?: React.ReactNode;\n showHeaderContextOptions?: string | null;\n setShowHeaderContextOptions?: (value: string | null) => void;\n headerDivWidth?: number;\n showDataTypeIcon?: boolean;\n rowAdditionalActions?: any;\n rowAdditionalActionsWidth?: number;\n hoverConfig?: any;\n cellEditing?: string | string[] | null;\n cellEditingValue?: string | Record<string, string> | null;\n openMasterDataModal?: (config: IMasterDataModalConfig) => void;\n closeMasterDataModal?: () => void;\n selectedMasterData?: { value: any; reference: any } | null;\n clearSelectedMasterData?: () => void;\n allowInlineEdit?: boolean;\n openCurrencyDropdown?: (config: ICurrencyDropdownConfig) => void;\n closeCurrencyDropdown?: () => void;\n currencyDropdownConfig?: ICurrencyDropdownConfig | null;\n selectedCurrenciesMap?: Record<string, string>;\n setCurrencyForCell?: (cellKey: string, currency: string) => void;\n getCurrencyForCell?: (cellKey: string) => string | undefined;\n pendingEdits?: PendingEditsMap;\n addPendingEdit?: (rowId: string, columnKey: string, edit: IPendingEdit) => void;\n removePendingEdit?: (rowId: string, columnKey: string) => void;\n getPendingEdit?: (rowId: string, columnKey: string) => IPendingEdit | undefined;\n hasPendingEdit?: (rowId: string, columnKey: string) => boolean;\n clearAllPendingEdits?: () => void;\n saveAllPendingEdits?: () => void;\n clearRowPendingEdits?: (rowId: string) => void;\n saveRowPendingEdits?: (rowId: string) => void;\n pendingEditsCount?: number;\n scrollToCell?: (rowId: string, columnKey: string, rowIndex: number) => void;\n onFieldOperationFlow?: (params: {\n value: unknown;\n fieldId: string;\n rowId: string;\n rowData: any;\n columnKey: string;\n flowName?: string;\n isLiveField?: boolean;\n meta?: { reference?: unknown; currency_code?: string };\n }) => Promise<void>;\n fieldOperationLoading?: string | null;\n validateAllPendingEdits?: any;\n}\n\nexport const TableContext = createContext<ITableContext>({\n tableWrapper: null,\n tableBodyWrapper: null,\n lastNonStickyColumnIndex: () => null,\n search: null,\n columnFilters: [],\n onRowClick: null,\n onSort: null,\n onFilter: null,\n onRemoveFilter: null,\n onClearFilter: null,\n rowOptions: null,\n checkboxConfig: null,\n onResetFilter: null,\n isColumnConfigurable: false,\n onAddColumnClick: null,\n onEditColumnClick: null,\n onDeleteColumnClick: null,\n toggleShowFilters: null,\n toggleShowSorts: null,\n onRowTooltipClick: null,\n tooltiptext: null,\n cascadingTableConfig: null,\n originalsOnly: false,\n disableOptionsForRowIndex: null,\n getFullRowDataOnClick: false,\n getSumOfNextVisibleColumnWidth: () => null,\n onRowEdit: null,\n inlineEditColumns: [],\n tableActions: null,\n dndSortableUtils: null,\n withSortable: false,\n withDraggable: false,\n onCascadingRowExpand: null,\n getInnerRowData: null,\n tableHeaders: null as any,\n maxLevel: 0,\n expandedRows: {},\n setExpandedRows: null,\n showNewItem: false,\n rawData: null,\n dragConfig: null,\n rowWrapper: null,\n asyncRowOptionsFilter: null,\n rowLinkConfig: {\n isEnabled: false,\n linkTo: null,\n },\n isCellClickDisabled: false,\n activeInlineEdit: null,\n setActiveInlineEdit: undefined,\n handleUpdateColumnWidth: () => undefined,\n multiSelectConfig: null,\n headerContextOptions: null,\n showHeaderContextOptions: null,\n setShowHeaderContextOptions: undefined,\n showDataTypeIcon: false,\n rowAdditionalActions: null,\n rowAdditionalActionsWidth: 0,\n hoverConfig: null,\n openMasterDataModal: undefined,\n closeMasterDataModal: undefined,\n selectedMasterData: null,\n clearSelectedMasterData: undefined,\n openCurrencyDropdown: undefined,\n closeCurrencyDropdown: undefined,\n currencyDropdownConfig: null,\n selectedCurrenciesMap: {},\n setCurrencyForCell: undefined,\n getCurrencyForCell: undefined,\n});\n"],"names":["TableContext","createContext"],"mappings":";
|
|
1
|
+
{"version":3,"file":"context.es.js","sources":["../../../../src/components/data-display/infinite-table/context.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext } from 'react';\nimport type { ICurrencyDropdownConfig, IMasterDataModalConfig, IMultiSelectConfig, IPendingEdit, PendingEditsMap } from './types';\n\nexport interface ITableContext {\n tableWrapper?: any;\n tableBodyWrapper?: any;\n lastNonStickyColumnIndex?: () => number | null;\n search?: string | null;\n columnFilters?: any[];\n onRowClick?: any;\n onSort?: any;\n onFilter?: any;\n toggleShowFilters?: any;\n toggleShowSorts?: any;\n onRemoveFilter?: any;\n onClearFilter?: any;\n rowOptions?: any;\n checkboxConfig?: any;\n onResetFilter?: any;\n isColumnConfigurable?: boolean;\n onAddColumnClick?: any;\n onEditColumnClick?: any;\n onDeleteColumnClick?: any;\n onRowTooltipClick?: any;\n tooltiptext?: any;\n cascadingTableConfig?: any;\n originalsOnly?: boolean;\n disableOptionsForRowIndex?: any;\n getFullRowDataOnClick?: boolean;\n selectedRowId?: string | number | null;\n getSumOfNextVisibleColumnWidth?: (currentIndex: number) => number | null;\n onRowEdit?: any;\n inlineEditColumns?: string[];\n tableActions?: any;\n dndSortableUtils?: any;\n withSortable?: boolean;\n withDraggable?: boolean;\n onCascadingRowExpand?: any;\n getInnerRowData?: any;\n tableHeaders?: any[];\n maxLevel?: number;\n expandedRows?: any;\n setExpandedRows?: any;\n showNewItem?: boolean;\n rawData?: any;\n dragConfig?: any;\n rowWrapper?: any;\n asyncRowOptionsFilter?: any;\n rowLinkConfig?: {\n isEnabled: boolean;\n linkTo: any;\n };\n isCellClickDisabled?: boolean;\n activeInlineEdit?: { rowId: string; columnKey: string } | null;\n setActiveInlineEdit?: (value: { rowId: string; columnKey: string } | null) => void;\n handleUpdateColumnWidth?: (columnName: string, width: number) => void;\n isTableViewReadOnly?: boolean;\n multiSelectConfig?: IMultiSelectConfig | null;\n headerContextOptions?: React.ReactNode;\n showHeaderContextOptions?: string | null;\n setShowHeaderContextOptions?: (value: string | null) => void;\n headerDivWidth?: number;\n showDataTypeIcon?: boolean;\n rowAdditionalActions?: any;\n rowAdditionalActionsWidth?: number;\n hoverConfig?: any;\n cellEditing?: string | string[] | null;\n cellEditingValue?: string | Record<string, string> | null;\n openMasterDataModal?: (config: IMasterDataModalConfig) => void;\n closeMasterDataModal?: () => void;\n selectedMasterData?: { value: any; reference: any } | null;\n clearSelectedMasterData?: () => void;\n allowInlineEdit?: boolean;\n openCurrencyDropdown?: (config: ICurrencyDropdownConfig) => void;\n closeCurrencyDropdown?: () => void;\n currencyDropdownConfig?: ICurrencyDropdownConfig | null;\n selectedCurrenciesMap?: Record<string, string>;\n setCurrencyForCell?: (cellKey: string, currency: string) => void;\n getCurrencyForCell?: (cellKey: string) => string | undefined;\n pendingEdits?: PendingEditsMap;\n addPendingEdit?: (rowId: string, columnKey: string, edit: IPendingEdit) => void;\n removePendingEdit?: (rowId: string, columnKey: string) => void;\n getPendingEdit?: (rowId: string, columnKey: string) => IPendingEdit | undefined;\n hasPendingEdit?: (rowId: string, columnKey: string) => boolean;\n clearAllPendingEdits?: () => void;\n saveAllPendingEdits?: () => void;\n clearRowPendingEdits?: (rowId: string) => void;\n saveRowPendingEdits?: (rowId: string) => void;\n pendingEditsCount?: number;\n scrollToCell?: (rowId: string, columnKey: string, rowIndex: number) => void;\n onFieldOperationFlow?: (params: {\n value: unknown;\n fieldId: string;\n rowId: string;\n rowData: any;\n columnKey: string;\n flowName?: string;\n isLiveField?: boolean;\n meta?: { reference?: unknown; currency_code?: string };\n }) => Promise<void>;\n fieldOperationLoading?: string | null;\n validateAllPendingEdits?: any;\n}\n\nexport const TableContext = createContext<ITableContext>({\n tableWrapper: null,\n tableBodyWrapper: null,\n lastNonStickyColumnIndex: () => null,\n search: null,\n columnFilters: [],\n onRowClick: null,\n onSort: null,\n onFilter: null,\n onRemoveFilter: null,\n onClearFilter: null,\n rowOptions: null,\n checkboxConfig: null,\n onResetFilter: null,\n isColumnConfigurable: false,\n onAddColumnClick: null,\n onEditColumnClick: null,\n onDeleteColumnClick: null,\n toggleShowFilters: null,\n toggleShowSorts: null,\n onRowTooltipClick: null,\n tooltiptext: null,\n cascadingTableConfig: null,\n originalsOnly: false,\n disableOptionsForRowIndex: null,\n getFullRowDataOnClick: false,\n getSumOfNextVisibleColumnWidth: () => null,\n onRowEdit: null,\n inlineEditColumns: [],\n tableActions: null,\n dndSortableUtils: null,\n withSortable: false,\n withDraggable: false,\n onCascadingRowExpand: null,\n getInnerRowData: null,\n tableHeaders: null as any,\n maxLevel: 0,\n expandedRows: {},\n setExpandedRows: null,\n showNewItem: false,\n rawData: null,\n dragConfig: null,\n rowWrapper: null,\n asyncRowOptionsFilter: null,\n rowLinkConfig: {\n isEnabled: false,\n linkTo: null,\n },\n isCellClickDisabled: false,\n activeInlineEdit: null,\n setActiveInlineEdit: undefined,\n handleUpdateColumnWidth: () => undefined,\n isTableViewReadOnly: false,\n multiSelectConfig: null,\n headerContextOptions: null,\n showHeaderContextOptions: null,\n setShowHeaderContextOptions: undefined,\n showDataTypeIcon: false,\n rowAdditionalActions: null,\n rowAdditionalActionsWidth: 0,\n hoverConfig: null,\n openMasterDataModal: undefined,\n closeMasterDataModal: undefined,\n selectedMasterData: null,\n clearSelectedMasterData: undefined,\n openCurrencyDropdown: undefined,\n closeCurrencyDropdown: undefined,\n currencyDropdownConfig: null,\n selectedCurrenciesMap: {},\n setCurrencyForCell: undefined,\n getCurrencyForCell: undefined,\n});\n"],"names":["TableContext","createContext"],"mappings":";AAyGO,MAAMA,IAAeC,EAA6B;AAAA,EACvD,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,0BAA0B,MAAM;AAAA,EAChC,QAAQ;AAAA,EACR,eAAe,CAAA;AAAA,EACf,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,gCAAgC,MAAM;AAAA,EACtC,WAAW;AAAA,EACX,mBAAmB,CAAA;AAAA,EACnB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,UAAU;AAAA,EACV,cAAc,CAAA;AAAA,EACd,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,uBAAuB;AAAA,EACvB,eAAe;AAAA,IACb,WAAW;AAAA,IACX,QAAQ;AAAA,EAAA;AAAA,EAEV,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,yBAAyB,MAAA;AAAA;AAAA,EACzB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,6BAA6B;AAAA,EAC7B,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,2BAA2B;AAAA,EAC3B,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,uBAAuB,CAAA;AAAA,EACvB,oBAAoB;AAAA,EACpB,oBAAoB;AACtB,CAAC;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),B=require("../../../../../hooks/useOutsideClick.cjs.js"),L=require("../../../../../providers/design-system-provider/hooks.cjs.js"),a=require("@mui/icons-material"),O=require("../../../../../_virtual/index.cjs.js"),T=require("framer-motion"),z=require("react"),i=({id:r,label:u,onClick:e,icon:l,isDisabled:o=!1})=>t.jsxs("button",{id:r,type:"button",disabled:o,className:O("flex w-full px-4 py-2 text-neutral-900 dark:text-white font-inter text-sm font-medium rounded-[4px] items-center gap-3",o?"opacity-60 cursor-not-allowed":"hover:bg-neutral-100 dark:hover:bg-neutral-900"),onClick:e,children:[l,u]}),D=({headerIndex:r,headerGroup:u,column:e,onSort:l,onFilter:o,toggleHeaderOption:d,setIsShowSortArrowAsc:b,setIsShowSortArrowDesc:p,setShowHeaderOptions:y,toggleDataFilterModal:m,isColumnConfigurable:c,onAddColumnClick:j,onEditColumnClick:R,onDeleteColumnClick:N,disabled:x=!1})=>{const k=L.useTableConfig(),s=()=>y(null),f=z.useRef(null);B.useOutsideClick({ref:f,handler:s});const n=k?.t??(h=>h),q=e?.dataType==="date",C=e?.dataType==="boolean",v=n(q?"Least Recent":"Sort By A-Z"),w=n(q?"Most Recent":"Sort By Z-A");return z.useEffect(()=>{f.current?.querySelector("button:not([disabled])")?.focus()},[]),k?.renderColumnOptions?k.renderColumnOptions({headerIndex:r,headerGroup:u,column:e,onSort:l,onFilter:o,toggleHeaderOption:d,setIsShowSortArrowAsc:b,setIsShowSortArrowDesc:p,setShowHeaderOptions:y,toggleDataFilterModal:m,isColumnConfigurable:c,onAddColumnClick:j,onEditColumnClick:R,onDeleteColumnClick:N,onClose:s,disabled:x}):t.jsxs("div",{ref:f,children:[t.jsx("div",{className:"absolute inset-0",onClick:s}),t.jsxs(T.motion.div,{className:O("absolute top-full bg-white dark:bg-black-700 rounded-lg shadow-lg cursor-pointer w-[220px] py-1 px-1 z-50 border border-neutral-200 dark:border-black-600",r+1===(u.headers?.length??0)?"-right-6":"left-0"),initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{ease:"linear",duration:.2},role:"menu",children:[l&&!C?t.jsx(i,{id:"btn-column-options-arrow-down",label:v,icon:t.jsx(a.ArrowDownwardRounded,{fontSize:"small",className:"text-neutral-900 dark:text-neutral-100"}),isDisabled:x,onClick:()=>{l(e.key,"asc"),d(e.key),b(e.key),p(null)}}):null,l&&!C?t.jsx(i,{id:"btn-column-options-arrow-up",label:w,icon:t.jsx(a.ArrowUpwardRounded,{fontSize:"small",className:"text-neutral-900 dark:text-neutral-100"}),isDisabled:x,onClick:()=>{l(e.key,"desc"),d(e.key),b(null),p(e.key)}}):null,o?t.jsx(i,{id:"btn-column-options-filter-by",label:n("Filter By"),icon:t.jsx(a.FilterListRounded,{fontSize:"small",className:"text-neutral-900 dark:text-neutral-100"}),isDisabled:x,onClick:()=>{m(e),d(e.key)}}):null,c?t.jsx(i,{id:"btn-column-options-add-column",label:n("Add Column"),icon:t.jsx(a.AddRounded,{fontSize:"small",className:"text-neutral-900 dark:text-neutral-100"}),onClick:()=>{j?.(e),s()}}):null,c?t.jsx(i,{id:"btn-column-options-edit-column",label:n("Edit Column"),icon:t.jsx(a.EditRounded,{fontSize:"small",className:"text-neutral-900 dark:text-neutral-100"}),onClick:()=>{R?.(e),s()}}):null,c?t.jsx(i,{id:"btn-column-options-delete-column",label:n("Delete Column"),icon:t.jsx(a.DeleteOutlineRounded,{fontSize:"small",className:"text-neutral-900 dark:text-neutral-100"}),onClick:()=>{N?.(e),s()}}):null]})]})};exports.Options=D;
|
|
2
2
|
//# sourceMappingURL=Options.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Options.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/head/cell/Options.tsx"],"sourcesContent":["import { useOutsideClick } from '../../../../../hooks/useOutsideClick';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\nimport { AddRounded, ArrowDownwardRounded, ArrowUpwardRounded, DeleteOutlineRounded, EditRounded, FilterListRounded } from '@mui/icons-material';\nimport cn from 'classnames';\nimport { motion } from 'framer-motion';\nimport { useEffect, useRef } from 'react';\n\ninterface HeaderColumn {\n id: string;\n key: string;\n dataType?: string;\n [k: string]: unknown;\n}\n\ninterface OptionsProps {\n headerIndex: number;\n headerGroup: { headers?: unknown[]; [k: string]: unknown };\n column: HeaderColumn;\n onSort?: (field: string, order?: string) => void;\n onFilter?: (column: string, value: unknown) => void;\n toggleHeaderOption: (key: string) => void;\n setIsShowSortArrowAsc: (value: string | null) => void;\n setIsShowSortArrowDesc: (value: string | null) => void;\n setShowHeaderOptions: (value: string | null) => void;\n toggleDataFilterModal: (column: unknown) => void;\n isColumnConfigurable: boolean;\n onAddColumnClick?: (column: HeaderColumn) => void;\n onEditColumnClick?: (column: HeaderColumn) => void;\n onDeleteColumnClick?: (column: HeaderColumn) => void;\n}\n\ntype OptionButtonProps = {\n id: string;\n label: string;\n onClick: () => void;\n icon: JSX.Element;\n};\n\nconst OptionButton = ({ id, label, onClick, icon }: OptionButtonProps) => {\n return (\n <button\n id={id}\n type='button'\n className='flex w-full px-4 py-2 text-neutral-900 dark:text-white font-inter text-sm font-medium rounded-[4px] hover:bg-neutral-100 dark:hover:bg-neutral-900 items-center gap-3'\n onClick={onClick}\n >\n {icon}\n {label}\n </button>\n );\n};\n\nexport const Options = ({\n headerIndex,\n headerGroup,\n column,\n onSort,\n onFilter,\n toggleHeaderOption,\n setIsShowSortArrowAsc,\n setIsShowSortArrowDesc,\n setShowHeaderOptions,\n toggleDataFilterModal,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n}: OptionsProps) => {\n const tableConfig = useTableConfig();\n const handleCloseFilters = () => setShowHeaderOptions(null);\n const ref = useRef<HTMLDivElement>(null);\n useOutsideClick({\n ref,\n handler: handleCloseFilters,\n });\n const t = tableConfig?.t ?? ((key: string) => key);\n const isDateColumn = column?.dataType === 'date';\n const isBooleanColumn = column?.dataType === 'boolean';\n const sortAscLabel = isDateColumn ? t('Least Recent') : t('Sort By A-Z');\n const sortDescLabel = isDateColumn ? t('Most Recent') : t('Sort By Z-A');\n\n useEffect(() => {\n const firstOption = ref.current?.querySelector<HTMLButtonElement>('button:not([disabled])');\n firstOption?.focus();\n }, []);\n\n if (tableConfig?.renderColumnOptions) {\n return tableConfig.renderColumnOptions({\n headerIndex,\n headerGroup,\n column,\n onSort,\n onFilter,\n toggleHeaderOption,\n setIsShowSortArrowAsc,\n setIsShowSortArrowDesc,\n setShowHeaderOptions,\n toggleDataFilterModal,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n onClose: handleCloseFilters,\n }) as JSX.Element;\n }\n\n return (\n <div ref={ref}>\n <div className='absolute inset-0' onClick={handleCloseFilters} />\n <motion.div\n className={cn(\n 'absolute top-full bg-white dark:bg-black-700 rounded-lg shadow-lg cursor-pointer w-[220px] py-1 px-1 z-50 border border-neutral-200 dark:border-black-600',\n headerIndex + 1 === (headerGroup.headers?.length ?? 0) ? '-right-6' : 'left-0',\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ ease: 'linear', duration: 0.2 }}\n role='menu'\n >\n {onSort && !isBooleanColumn ? (\n <OptionButton\n id='btn-column-options-arrow-down'\n label={sortAscLabel}\n icon={<ArrowDownwardRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onSort(column.key, 'asc');\n toggleHeaderOption(column.key);\n setIsShowSortArrowAsc(column.key);\n setIsShowSortArrowDesc(null);\n }}\n />\n ) : null}\n {onSort && !isBooleanColumn ? (\n <OptionButton\n id='btn-column-options-arrow-up'\n label={sortDescLabel}\n icon={<ArrowUpwardRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onSort(column.key, 'desc');\n toggleHeaderOption(column.key);\n setIsShowSortArrowAsc(null);\n setIsShowSortArrowDesc(column.key);\n }}\n />\n ) : null}\n {onFilter ? (\n <OptionButton\n id='btn-column-options-filter-by'\n label={t('Filter By')}\n icon={<FilterListRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n toggleDataFilterModal(column);\n toggleHeaderOption(column.key);\n }}\n />\n ) : null}\n {isColumnConfigurable ? (\n <OptionButton\n id='btn-column-options-add-column'\n label={t('Add Column')}\n icon={<AddRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onAddColumnClick?.(column);\n handleCloseFilters();\n }}\n />\n ) : null}\n {isColumnConfigurable ? (\n <OptionButton\n id='btn-column-options-edit-column'\n label={t('Edit Column')}\n icon={<EditRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onEditColumnClick?.(column);\n handleCloseFilters();\n }}\n />\n ) : null}\n {isColumnConfigurable ? (\n <OptionButton\n id='btn-column-options-delete-column'\n label={t('Delete Column')}\n icon={<DeleteOutlineRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onDeleteColumnClick?.(column);\n handleCloseFilters();\n }}\n />\n ) : null}\n </motion.div>\n </div>\n );\n};\n"],"names":["OptionButton","id","label","onClick","icon","jsxs","Options","headerIndex","headerGroup","column","onSort","onFilter","toggleHeaderOption","setIsShowSortArrowAsc","setIsShowSortArrowDesc","setShowHeaderOptions","toggleDataFilterModal","isColumnConfigurable","onAddColumnClick","onEditColumnClick","onDeleteColumnClick","tableConfig","useTableConfig","handleCloseFilters","ref","useRef","useOutsideClick","t","key","isDateColumn","isBooleanColumn","sortAscLabel","sortDescLabel","useEffect","jsx","motion","cn","ArrowDownwardRounded","ArrowUpwardRounded","FilterListRounded","AddRounded","EditRounded","DeleteOutlineRounded"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Options.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/head/cell/Options.tsx"],"sourcesContent":["import { useOutsideClick } from '../../../../../hooks/useOutsideClick';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\nimport { AddRounded, ArrowDownwardRounded, ArrowUpwardRounded, DeleteOutlineRounded, EditRounded, FilterListRounded } from '@mui/icons-material';\nimport cn from 'classnames';\nimport { motion } from 'framer-motion';\nimport { useEffect, useRef } from 'react';\n\ninterface HeaderColumn {\n id: string;\n key: string;\n dataType?: string;\n [k: string]: unknown;\n}\n\ninterface OptionsProps {\n headerIndex: number;\n headerGroup: { headers?: unknown[]; [k: string]: unknown };\n column: HeaderColumn;\n onSort?: (field: string, order?: string) => void;\n onFilter?: (column: string, value: unknown) => void;\n toggleHeaderOption: (key: string) => void;\n setIsShowSortArrowAsc: (value: string | null) => void;\n setIsShowSortArrowDesc: (value: string | null) => void;\n setShowHeaderOptions: (value: string | null) => void;\n toggleDataFilterModal: (column: unknown) => void;\n isColumnConfigurable: boolean;\n onAddColumnClick?: (column: HeaderColumn) => void;\n onEditColumnClick?: (column: HeaderColumn) => void;\n onDeleteColumnClick?: (column: HeaderColumn) => void;\n disabled?: boolean;\n}\n\ntype OptionButtonProps = {\n id: string;\n label: string;\n onClick: () => void;\n icon: JSX.Element;\n isDisabled?: boolean;\n};\n\nconst OptionButton = ({ id, label, onClick, icon, isDisabled = false }: OptionButtonProps) => {\n return (\n <button\n id={id}\n type='button'\n disabled={isDisabled}\n className={cn(\n 'flex w-full px-4 py-2 text-neutral-900 dark:text-white font-inter text-sm font-medium rounded-[4px] items-center gap-3',\n isDisabled ? 'opacity-60 cursor-not-allowed' : 'hover:bg-neutral-100 dark:hover:bg-neutral-900',\n )}\n onClick={onClick}\n >\n {icon}\n {label}\n </button>\n );\n};\n\nexport const Options = ({\n headerIndex,\n headerGroup,\n column,\n onSort,\n onFilter,\n toggleHeaderOption,\n setIsShowSortArrowAsc,\n setIsShowSortArrowDesc,\n setShowHeaderOptions,\n toggleDataFilterModal,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n disabled = false,\n}: OptionsProps) => {\n const tableConfig = useTableConfig();\n const handleCloseFilters = () => setShowHeaderOptions(null);\n const ref = useRef<HTMLDivElement>(null);\n useOutsideClick({\n ref,\n handler: handleCloseFilters,\n });\n const t = tableConfig?.t ?? ((key: string) => key);\n const isDateColumn = column?.dataType === 'date';\n const isBooleanColumn = column?.dataType === 'boolean';\n const sortAscLabel = isDateColumn ? t('Least Recent') : t('Sort By A-Z');\n const sortDescLabel = isDateColumn ? t('Most Recent') : t('Sort By Z-A');\n\n useEffect(() => {\n const firstOption = ref.current?.querySelector<HTMLButtonElement>('button:not([disabled])');\n firstOption?.focus();\n }, []);\n\n if (tableConfig?.renderColumnOptions) {\n return tableConfig.renderColumnOptions({\n headerIndex,\n headerGroup,\n column,\n onSort,\n onFilter,\n toggleHeaderOption,\n setIsShowSortArrowAsc,\n setIsShowSortArrowDesc,\n setShowHeaderOptions,\n toggleDataFilterModal,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n onClose: handleCloseFilters,\n disabled,\n }) as JSX.Element;\n }\n\n return (\n <div ref={ref}>\n <div className='absolute inset-0' onClick={handleCloseFilters} />\n <motion.div\n className={cn(\n 'absolute top-full bg-white dark:bg-black-700 rounded-lg shadow-lg cursor-pointer w-[220px] py-1 px-1 z-50 border border-neutral-200 dark:border-black-600',\n headerIndex + 1 === (headerGroup.headers?.length ?? 0) ? '-right-6' : 'left-0',\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ ease: 'linear', duration: 0.2 }}\n role='menu'\n >\n {onSort && !isBooleanColumn ? (\n <OptionButton\n id='btn-column-options-arrow-down'\n label={sortAscLabel}\n icon={<ArrowDownwardRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n isDisabled={disabled}\n onClick={() => {\n onSort(column.key, 'asc');\n toggleHeaderOption(column.key);\n setIsShowSortArrowAsc(column.key);\n setIsShowSortArrowDesc(null);\n }}\n />\n ) : null}\n {onSort && !isBooleanColumn ? (\n <OptionButton\n id='btn-column-options-arrow-up'\n label={sortDescLabel}\n icon={<ArrowUpwardRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n isDisabled={disabled}\n onClick={() => {\n onSort(column.key, 'desc');\n toggleHeaderOption(column.key);\n setIsShowSortArrowAsc(null);\n setIsShowSortArrowDesc(column.key);\n }}\n />\n ) : null}\n {onFilter ? (\n <OptionButton\n id='btn-column-options-filter-by'\n label={t('Filter By')}\n icon={<FilterListRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n isDisabled={disabled}\n onClick={() => {\n toggleDataFilterModal(column);\n toggleHeaderOption(column.key);\n }}\n />\n ) : null}\n {isColumnConfigurable ? (\n <OptionButton\n id='btn-column-options-add-column'\n label={t('Add Column')}\n icon={<AddRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onAddColumnClick?.(column);\n handleCloseFilters();\n }}\n />\n ) : null}\n {isColumnConfigurable ? (\n <OptionButton\n id='btn-column-options-edit-column'\n label={t('Edit Column')}\n icon={<EditRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onEditColumnClick?.(column);\n handleCloseFilters();\n }}\n />\n ) : null}\n {isColumnConfigurable ? (\n <OptionButton\n id='btn-column-options-delete-column'\n label={t('Delete Column')}\n icon={<DeleteOutlineRounded fontSize='small' className='text-neutral-900 dark:text-neutral-100' />}\n onClick={() => {\n onDeleteColumnClick?.(column);\n handleCloseFilters();\n }}\n />\n ) : null}\n </motion.div>\n </div>\n );\n};\n"],"names":["OptionButton","id","label","onClick","icon","isDisabled","jsxs","cn","Options","headerIndex","headerGroup","column","onSort","onFilter","toggleHeaderOption","setIsShowSortArrowAsc","setIsShowSortArrowDesc","setShowHeaderOptions","toggleDataFilterModal","isColumnConfigurable","onAddColumnClick","onEditColumnClick","onDeleteColumnClick","disabled","tableConfig","useTableConfig","handleCloseFilters","ref","useRef","useOutsideClick","t","key","isDateColumn","isBooleanColumn","sortAscLabel","sortDescLabel","useEffect","jsx","motion","ArrowDownwardRounded","ArrowUpwardRounded","FilterListRounded","AddRounded","EditRounded","DeleteOutlineRounded"],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ interface OptionsProps {
|
|
|
22
22
|
onAddColumnClick?: (column: HeaderColumn) => void;
|
|
23
23
|
onEditColumnClick?: (column: HeaderColumn) => void;
|
|
24
24
|
onDeleteColumnClick?: (column: HeaderColumn) => void;
|
|
25
|
+
disabled?: boolean;
|
|
25
26
|
}
|
|
26
|
-
export declare const Options: ({ headerIndex, headerGroup, column, onSort, onFilter, toggleHeaderOption, setIsShowSortArrowAsc, setIsShowSortArrowDesc, setShowHeaderOptions, toggleDataFilterModal, isColumnConfigurable, onAddColumnClick, onEditColumnClick, onDeleteColumnClick, }: OptionsProps) => import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare const Options: ({ headerIndex, headerGroup, column, onSort, onFilter, toggleHeaderOption, setIsShowSortArrowAsc, setIsShowSortArrowDesc, setShowHeaderOptions, toggleDataFilterModal, isColumnConfigurable, onAddColumnClick, onEditColumnClick, onDeleteColumnClick, disabled, }: OptionsProps) => import("react/jsx-runtime").JSX.Element;
|
|
27
28
|
export {};
|