@uva-glass/component-library 3.45.4 → 3.45.6
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/{LexicalClipboard.prod-BP8LNbol.js → LexicalClipboard.prod-pXq91TBU.js} +2 -2
- package/dist/{LexicalClipboard.prod-BP8LNbol.js.map → LexicalClipboard.prod-pXq91TBU.js.map} +1 -1
- package/dist/{LexicalList.prod-D6IAptR7.js → LexicalList.prod--mkvX0uW.js} +2 -2
- package/dist/{LexicalList.prod-D6IAptR7.js.map → LexicalList.prod--mkvX0uW.js.map} +1 -1
- package/dist/{LexicalSelection.prod-ZvNRDI9l.js → LexicalSelection.prod-Ct4PZOht.js} +5 -5
- package/dist/{LexicalSelection.prod-ZvNRDI9l.js.map → LexicalSelection.prod-Ct4PZOht.js.map} +1 -1
- package/dist/{LexicalTable.prod-DJktN6jF.js → LexicalTable.prod-Bexd4dGG.js} +2 -2
- package/dist/{LexicalTable.prod-DJktN6jF.js.map → LexicalTable.prod-Bexd4dGG.js.map} +1 -1
- package/dist/{TableCellResizerPlugin-DFzNK-ve.js → TableCellResizerPlugin-Cpbankb8.js} +2 -2
- package/dist/{TableCellResizerPlugin-DFzNK-ve.js.map → TableCellResizerPlugin-Cpbankb8.js.map} +1 -1
- package/dist/{TablePlugin-4Zj0xZie.js → TablePlugin-FTN9oxnI.js} +2 -2
- package/dist/{TablePlugin-4Zj0xZie.js.map → TablePlugin-FTN9oxnI.js.map} +1 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.d.ts +3 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.js +45 -44
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.js.map +1 -1
- package/dist/components/CheckboxTree/CheckboxTree.js +1 -1
- package/dist/components/FormInput/FormInput.js +1 -1
- package/dist/components/InputField/InputField.stories.js +1 -1
- package/dist/components/MultiSelect/MultiSelect.js +1 -1
- package/dist/components/MultiSelect/MultiSelect.stories.js +1 -1
- package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -1
- package/dist/components/MultiSelect/index.js +1 -1
- package/dist/components/PeriodSelector/PeriodSelector.js +1 -1
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.js +1 -1
- package/dist/components/RadioTabSelector/RadioTabSelector.js +1 -1
- package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -1
- package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js +43 -49
- package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js.map +1 -1
- package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/TableCellResizerPlugin/TableCellResizerPlugin.js +2 -2
- package/dist/components/RteEditor/Plugins/TableCellResizerPlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +2 -2
- package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +2 -2
- package/dist/components/RteEditor/Plugins/index.js +2 -2
- package/dist/components/RteEditor/RteEditor.js +303 -312
- package/dist/components/RteEditor/RteEditor.js.map +1 -1
- package/dist/components/RteEditor/RteEditor.stories.js +29 -29
- package/dist/components/RteEditor/RteEditor.stories.js.map +1 -1
- package/dist/components/RteEditor/helpers.d.ts +0 -1
- package/dist/components/RteEditor/helpers.js +18 -19
- package/dist/components/RteEditor/helpers.js.map +1 -1
- package/dist/components/RteEditor/nodes/TableWrapperNode/TableWrapperNode.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +7 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as M, jsxs as J, Fragment as Q } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo as F, useState as x, useRef as E, useLayoutEffect as Z, useEffect as L, useCallback as b } from "react";
|
|
3
3
|
import { o as A } from "./LexicalComposerContext.prod-DOyoZx0P.js";
|
|
4
|
-
import { b as ee, y as te, R as k, H, P as ne, E as oe, h as re, M as le, c as se } from "./LexicalTable.prod-
|
|
4
|
+
import { b as ee, y as te, R as k, H, P as ne, E as oe, h as re, M as le, c as se } from "./LexicalTable.prod-Bexd4dGG.js";
|
|
5
5
|
import { v as ie, M as K } from "./LexicalUtils.prod-Ckfw0Hjt.js";
|
|
6
6
|
import { n as _, y as ce } from "./Lexical.prod-nXWuyOKD.js";
|
|
7
7
|
import { createPortal as ue } from "react-dom";
|
|
@@ -245,4 +245,4 @@ export {
|
|
|
245
245
|
He as T,
|
|
246
246
|
pe as a
|
|
247
247
|
};
|
|
248
|
-
//# sourceMappingURL=TableCellResizerPlugin-
|
|
248
|
+
//# sourceMappingURL=TableCellResizerPlugin-Cpbankb8.js.map
|
package/dist/{TableCellResizerPlugin-DFzNK-ve.js.map → TableCellResizerPlugin-Cpbankb8.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCellResizerPlugin-DFzNK-ve.js","sources":["../node_modules/@lexical/react/useLexicalEditable.prod.mjs","../src/components/RteEditor/Plugins/TableCellResizerPlugin/TableCellResizerPlugin.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{useLexicalComposerContext as e}from\"@lexical/react/LexicalComposerContext\";import{useLayoutEffect as n,useEffect as t,useMemo as i,useState as r,useRef as o}from\"react\";const c=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?n:t;function u(e){return{initialValueFn:()=>e.isEditable(),subscribe:n=>e.registerEditableListener(n)}}function a(){return function(n){const[t]=e(),u=i((()=>n(t)),[t,n]),[a,l]=r((()=>u.initialValueFn())),d=o(a);return c((()=>{const{initialValueFn:e,subscribe:n}=u,t=e();return d.current!==t&&(d.current=t,l(t)),n((e=>{d.current=e,l(e)}))}),[u,n]),a}(u)}export{a as useLexicalEditable};\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n * Modified from original to fit project needs wim jurriaans.\r\n *\r\n *\r\n */\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\r\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable';\r\nimport {\r\n $computeTableMapSkipCellCheck,\r\n $getTableNodeFromLexicalNodeOrThrow,\r\n $getTableRowIndexFromTableCellNode,\r\n $isTableCellNode,\r\n $isTableRowNode,\r\n TableNode,\r\n getDOMCellFromTarget,\r\n getTableElement,\r\n TableCellNode,\r\n} from '@lexical/table';\r\nimport { $getNearestNodeOfType, calculateZoomLevel } from '@lexical/utils';\r\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from 'lexical';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { LexicalEditor } from 'lexical';\r\nimport type { TableDOMCell, TableMapType, TableRowNode } from '@lexical/table';\r\nimport type { JSX, MouseEventHandler, ReactPortal } from 'react';\r\n\r\nimport styles from './TableCellResizerPlugin.module.css';\r\n\r\nimport {\r\n getEditorContentWidth,\r\n getEditorParrentCellWidth,\r\n tableHasContent,\r\n} from 'components/RteEditor/Plugins/TablePlugin/helpers';\r\nimport { $createTableWrapperNode, TableWrapperNode } from 'components/RteEditor/nodes';\r\n\r\ntype MousePosition = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\ntype MouseDraggingDirection = 'right' | 'bottom';\r\n\r\nconst MIN_ROW_HEIGHT = 33;\r\nconst MIN_COLUMN_WIDTH = 32;\r\nconst HALF = 2;\r\n\r\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\r\n const targetRef = useRef<HTMLElement | null>(null);\r\n const resizerRef = useRef<HTMLDivElement | null>(null);\r\n const tableRectRef = useRef<DOMRect | null>(null);\r\n\r\n const mouseStartPosRef = useRef<MousePosition | null>(null);\r\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null);\r\n\r\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null);\r\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false);\r\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null);\r\n\r\n const resetState = useCallback(() => {\r\n updateActiveCell(null);\r\n targetRef.current = null;\r\n updateDraggingDirection(null);\r\n mouseStartPosRef.current = null;\r\n tableRectRef.current = null;\r\n }, []);\r\n\r\n const isMouseDownOnEvent = (event: MouseEvent) => {\r\n return (event.buttons & 1) === 1;\r\n };\r\n\r\n useEffect(() => {\r\n return editor.registerNodeTransform(TableNode, (tableNode) => {\r\n // modification: set default column widths if not defined or table cells of imported tables has the width set\r\n if (!tableNode.getColWidths()) {\r\n const tableRows = tableNode.getChildren();\r\n const columnCount = tableNode.getColumnCount();\r\n const colWidths = new Array(columnCount).fill(undefined);\r\n\r\n const firstRow = tableRows[0] as TableRowNode;\r\n const cells = firstRow.getChildren();\r\n cells.forEach((cell, colIdx) => {\r\n const domCell = editor.getElementByKey(cell.getKey());\r\n if (domCell && domCell.style.width) {\r\n colWidths[colIdx] = parseInt(domCell.style.width, 10);\r\n domCell.style.width = '';\r\n } else if (tableHasContent(tableNode)) {\r\n const isNested = tableNode ? $getNearestNodeOfType(tableNode, TableCellNode) : null;\r\n\r\n const availableWidth = isNested\r\n ? getEditorParrentCellWidth(isNested, columnCount, editor)\r\n : getEditorContentWidth(editor);\r\n const newColWidth = availableWidth / columnCount;\r\n colWidths[colIdx] = Math.max(newColWidth, MIN_COLUMN_WIDTH);\r\n } else {\r\n colWidths[colIdx] = MIN_COLUMN_WIDTH;\r\n }\r\n });\r\n\r\n tableNode.setColWidths(colWidths);\r\n }\r\n\r\n // modification: wrap table node in a wrapper node if there is no wrapper node present\r\n if (tableNode && !(tableNode.getParent() instanceof TableWrapperNode)) {\r\n const wrapperNode = $createTableWrapperNode();\r\n tableNode.replace(wrapperNode);\r\n wrapperNode.append(tableNode);\r\n }\r\n\r\n return tableNode;\r\n });\r\n }, [editor]);\r\n\r\n useEffect(() => {\r\n const onMouseMove = (event: MouseEvent) => {\r\n const target = event.target;\r\n if (!isHTMLElement(target)) {\r\n return;\r\n }\r\n\r\n if (draggingDirection) {\r\n updateMouseCurrentPos({\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n return;\r\n }\r\n updateIsMouseDown(isMouseDownOnEvent(event));\r\n if (resizerRef.current && resizerRef.current.contains(target)) {\r\n return;\r\n }\r\n\r\n if (targetRef.current !== target) {\r\n targetRef.current = target;\r\n const cell = getDOMCellFromTarget(target);\r\n\r\n if (cell && activeCell !== cell) {\r\n editor.getEditorState().read(\r\n () => {\r\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem);\r\n if (!tableCellNode) {\r\n throw new Error('TableCellResizer: Table cell node not found.');\r\n }\r\n\r\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\r\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));\r\n\r\n if (!tableElement) {\r\n throw new Error('TableCellResizer: Table element not found.');\r\n }\r\n\r\n targetRef.current = target;\r\n tableRectRef.current = tableElement.getBoundingClientRect();\r\n updateActiveCell(cell);\r\n },\r\n { editor }\r\n );\r\n } else if (cell == null) {\r\n resetState();\r\n }\r\n }\r\n };\r\n\r\n const onMouseDown = () => {\r\n updateIsMouseDown(true);\r\n };\r\n\r\n const onMouseUp = () => {\r\n updateIsMouseDown(false);\r\n };\r\n\r\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\r\n prevRootElement?.removeEventListener('mousemove', onMouseMove);\r\n prevRootElement?.removeEventListener('mousedown', onMouseDown);\r\n prevRootElement?.removeEventListener('mouseup', onMouseUp);\r\n rootElement?.addEventListener('mousemove', onMouseMove);\r\n rootElement?.addEventListener('mousedown', onMouseDown);\r\n rootElement?.addEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n return () => {\r\n removeRootListener();\r\n };\r\n }, [activeCell, draggingDirection, editor, resetState]);\r\n\r\n const isHeightChanging = (direction: MouseDraggingDirection) => {\r\n if (direction === 'bottom') {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const updateRowHeight = useCallback(\r\n (heightChange: number) => {\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n\r\n editor.update(\r\n () => {\r\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);\r\n if (!$isTableCellNode(tableCellNode)) {\r\n throw new Error('TableCellResizer: Table cell node not found.');\r\n }\r\n\r\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\r\n\r\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode) + tableCellNode.getRowSpan() - 1;\r\n\r\n const tableRows = tableNode.getChildren();\r\n\r\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\r\n throw new Error('Expected table cell to be inside of table row.');\r\n }\r\n\r\n const tableRow = tableRows[tableRowIndex];\r\n\r\n if (!$isTableRowNode(tableRow)) {\r\n throw new Error('Expected table row');\r\n }\r\n\r\n let height = tableRow.getHeight();\r\n if (height === undefined) {\r\n const rowCells = tableRow.getChildren<TableCellNode>();\r\n height = Math.min(...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity));\r\n }\r\n\r\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT);\r\n tableRow.setHeight(newHeight);\r\n },\r\n { tag: 'skip-scroll-into-view' }\r\n );\r\n },\r\n [activeCell, editor]\r\n );\r\n\r\n const getCellNodeHeight = (cell: TableCellNode, activeEditor: LexicalEditor): number | undefined => {\r\n const domCellNode = activeEditor.getElementByKey(cell.getKey());\r\n return domCellNode?.clientHeight;\r\n };\r\n\r\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\r\n for (let row = 0; row < tableMap.length; row++) {\r\n for (let column = 0; column < tableMap[row].length; column++) {\r\n if (tableMap[row][column].cell === tableCellNode) {\r\n return column;\r\n }\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const updateColumnWidth = useCallback(\r\n (widthChange: number) => {\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n editor.update(\r\n () => {\r\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);\r\n if (!$isTableCellNode(tableCellNode)) {\r\n throw new Error('TableCellResizer: Table cell node not found.');\r\n }\r\n\r\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\r\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);\r\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap);\r\n if (columnIndex === undefined) {\r\n throw new Error('TableCellResizer: Table column not found.');\r\n }\r\n\r\n const colWidths = tableNode.getColWidths();\r\n if (!colWidths) {\r\n return;\r\n }\r\n const width = colWidths[columnIndex];\r\n if (width === undefined) {\r\n return;\r\n }\r\n const newColWidths = [...colWidths];\r\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH);\r\n newColWidths[columnIndex] = newWidth;\r\n tableNode.setColWidths(newColWidths);\r\n\r\n // modification: when resizing a column, also resize the next column so the table doesn't overflow\r\n if (columnIndex < tableNode.getColumnCount() - 1) {\r\n const nextColWidths = tableNode.getColWidths();\r\n if (!nextColWidths) {\r\n return;\r\n }\r\n const newNextColWidths = [...nextColWidths];\r\n const newColumnIndex = columnIndex + 1;\r\n const newNextWidth = nextColWidths[newColumnIndex];\r\n const nextWidth = Math.max(newNextWidth - widthChange, MIN_COLUMN_WIDTH);\r\n newNextColWidths[newColumnIndex] = nextWidth;\r\n tableNode.setColWidths(newNextColWidths);\r\n }\r\n },\r\n { tag: 'skip-scroll-into-view' }\r\n );\r\n },\r\n [activeCell, editor]\r\n );\r\n\r\n const mouseUpHandler = useCallback(\r\n (direction: MouseDraggingDirection) => {\r\n const handler = (event: MouseEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n\r\n if (mouseStartPosRef.current) {\r\n const { x, y } = mouseStartPosRef.current;\r\n\r\n if (activeCell === null) {\r\n return;\r\n }\r\n const zoom = calculateZoomLevel(event.target as Element);\r\n\r\n if (isHeightChanging(direction)) {\r\n const heightChange = (event.clientY - y) / zoom;\r\n updateRowHeight(heightChange);\r\n } else {\r\n const widthChange = (event.clientX - x) / zoom;\r\n updateColumnWidth(widthChange);\r\n }\r\n\r\n resetState();\r\n document.removeEventListener('mouseup', handler);\r\n }\r\n };\r\n return handler;\r\n },\r\n [activeCell, resetState, updateColumnWidth, updateRowHeight]\r\n );\r\n\r\n const toggleResize = useCallback(\r\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\r\n (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n\r\n mouseStartPosRef.current = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n updateMouseCurrentPos(mouseStartPosRef.current);\r\n updateDraggingDirection(direction);\r\n\r\n document.addEventListener('mouseup', mouseUpHandler(direction));\r\n },\r\n [activeCell, mouseUpHandler]\r\n );\r\n\r\n const getResizers = useCallback(() => {\r\n if (activeCell) {\r\n const { height, width, top, left } = activeCell.elem.getBoundingClientRect();\r\n const zoom = calculateZoomLevel(activeCell.elem);\r\n const zoneWidth = 10; // Pixel width of the zone where you can drag the edge\r\n const styles = {\r\n bottom: {\r\n backgroundColor: 'none',\r\n cursor: 'ns-resize',\r\n height: `${zoneWidth}px`,\r\n left: `${window.pageXOffset + left}px`,\r\n top: `${window.pageYOffset + top + height - zoneWidth / HALF}px`,\r\n width: `${width}px`,\r\n zIndex: 5000,\r\n },\r\n right: {\r\n backgroundColor: 'none',\r\n cursor: 'ew-resize',\r\n height: `${height}px`,\r\n left: `${window.pageXOffset + left + width - zoneWidth / HALF}px`,\r\n top: `${window.pageYOffset + top}px`,\r\n width: `${zoneWidth}px`,\r\n zIndex: 5000,\r\n },\r\n };\r\n\r\n const tableRect = tableRectRef.current;\r\n\r\n if (draggingDirection && mouseCurrentPos && tableRect) {\r\n if (isHeightChanging(draggingDirection)) {\r\n styles[draggingDirection].left = `${window.pageXOffset + tableRect.left}px`;\r\n styles[draggingDirection].top = `${window.pageYOffset + mouseCurrentPos.y / zoom}px`;\r\n styles[draggingDirection].height = '3px';\r\n styles[draggingDirection].width = `${tableRect.width}px`;\r\n } else {\r\n styles[draggingDirection].top = `${window.pageYOffset + tableRect.top}px`;\r\n styles[draggingDirection].left = `${window.pageXOffset + mouseCurrentPos.x / zoom}px`;\r\n styles[draggingDirection].width = '3px';\r\n styles[draggingDirection].height = `${tableRect.height}px`;\r\n }\r\n\r\n styles[draggingDirection].backgroundColor = '#adf';\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n return {\r\n bottom: null,\r\n left: null,\r\n right: null,\r\n top: null,\r\n };\r\n }, [activeCell, draggingDirection, mouseCurrentPos]);\r\n\r\n const resizerStyles = getResizers();\r\n\r\n return (\r\n <div ref={resizerRef}>\r\n {activeCell != null && !isMouseDown && (\r\n <>\r\n <div\r\n className={styles['table-cell-resizer__resizer']}\r\n style={resizerStyles.right || undefined}\r\n onMouseDown={toggleResize('right')}\r\n />\r\n <div\r\n className={styles['table-cell-resizer__resizer']}\r\n style={resizerStyles.bottom || undefined}\r\n onMouseDown={toggleResize('bottom')}\r\n />\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport const TableCellResizerPlugin = (): null | ReactPortal => {\r\n const [editor] = useLexicalComposerContext();\r\n const isEditable = useLexicalEditable();\r\n\r\n return useMemo(\r\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\r\n [editor, isEditable]\r\n );\r\n};\r\n"],"names":["c","n","t","u","e","a","i","l","r","d","o","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","HALF","TableCellResizer","editor","targetRef","useRef","resizerRef","tableRectRef","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","useState","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","useCallback","isMouseDownOnEvent","event","useEffect","TableNode","tableNode","tableRows","columnCount","colWidths","cell","colIdx","domCell","tableHasContent","isNested","$getNearestNodeOfType","TableCellNode","newColWidth","getEditorParrentCellWidth","getEditorContentWidth","TableWrapperNode","wrapperNode","$createTableWrapperNode","onMouseMove","target","isHTMLElement","getDOMCellFromTarget","tableCellNode","$getNearestNodeFromDOMNode","$getTableNodeFromLexicalNodeOrThrow","tableElement","getTableElement","onMouseDown","onMouseUp","removeRootListener","rootElement","prevRootElement","isHeightChanging","direction","updateRowHeight","heightChange","$isTableCellNode","tableRowIndex","$getTableRowIndexFromTableCellNode","tableRow","$isTableRowNode","height","rowCells","getCellNodeHeight","newHeight","activeEditor","getCellColumnIndex","tableMap","row","column","updateColumnWidth","widthChange","$computeTableMapSkipCellCheck","columnIndex","width","newColWidths","newWidth","nextColWidths","newNextColWidths","newColumnIndex","newNextWidth","nextWidth","mouseUpHandler","handler","x","y","zoom","calculateZoomLevel","toggleResize","resizerStyles","top","left","zoneWidth","styles","tableRect","jsx","jsxs","Fragment","TableCellResizerPlugin","useLexicalComposerContext","isEditable","useLexicalEditable","useMemo","createPortal"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"TableCellResizerPlugin-Cpbankb8.js","sources":["../node_modules/@lexical/react/useLexicalEditable.prod.mjs","../src/components/RteEditor/Plugins/TableCellResizerPlugin/TableCellResizerPlugin.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{useLexicalComposerContext as e}from\"@lexical/react/LexicalComposerContext\";import{useLayoutEffect as n,useEffect as t,useMemo as i,useState as r,useRef as o}from\"react\";const c=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?n:t;function u(e){return{initialValueFn:()=>e.isEditable(),subscribe:n=>e.registerEditableListener(n)}}function a(){return function(n){const[t]=e(),u=i((()=>n(t)),[t,n]),[a,l]=r((()=>u.initialValueFn())),d=o(a);return c((()=>{const{initialValueFn:e,subscribe:n}=u,t=e();return d.current!==t&&(d.current=t,l(t)),n((e=>{d.current=e,l(e)}))}),[u,n]),a}(u)}export{a as useLexicalEditable};\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n * Modified from original to fit project needs wim jurriaans.\r\n *\r\n *\r\n */\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\r\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable';\r\nimport {\r\n $computeTableMapSkipCellCheck,\r\n $getTableNodeFromLexicalNodeOrThrow,\r\n $getTableRowIndexFromTableCellNode,\r\n $isTableCellNode,\r\n $isTableRowNode,\r\n TableNode,\r\n getDOMCellFromTarget,\r\n getTableElement,\r\n TableCellNode,\r\n} from '@lexical/table';\r\nimport { $getNearestNodeOfType, calculateZoomLevel } from '@lexical/utils';\r\nimport { $getNearestNodeFromDOMNode, isHTMLElement } from 'lexical';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport type { LexicalEditor } from 'lexical';\r\nimport type { TableDOMCell, TableMapType, TableRowNode } from '@lexical/table';\r\nimport type { JSX, MouseEventHandler, ReactPortal } from 'react';\r\n\r\nimport styles from './TableCellResizerPlugin.module.css';\r\n\r\nimport {\r\n getEditorContentWidth,\r\n getEditorParrentCellWidth,\r\n tableHasContent,\r\n} from 'components/RteEditor/Plugins/TablePlugin/helpers';\r\nimport { $createTableWrapperNode, TableWrapperNode } from 'components/RteEditor/nodes';\r\n\r\ntype MousePosition = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\ntype MouseDraggingDirection = 'right' | 'bottom';\r\n\r\nconst MIN_ROW_HEIGHT = 33;\r\nconst MIN_COLUMN_WIDTH = 32;\r\nconst HALF = 2;\r\n\r\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\r\n const targetRef = useRef<HTMLElement | null>(null);\r\n const resizerRef = useRef<HTMLDivElement | null>(null);\r\n const tableRectRef = useRef<DOMRect | null>(null);\r\n\r\n const mouseStartPosRef = useRef<MousePosition | null>(null);\r\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null);\r\n\r\n const [activeCell, updateActiveCell] = useState<TableDOMCell | null>(null);\r\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false);\r\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null);\r\n\r\n const resetState = useCallback(() => {\r\n updateActiveCell(null);\r\n targetRef.current = null;\r\n updateDraggingDirection(null);\r\n mouseStartPosRef.current = null;\r\n tableRectRef.current = null;\r\n }, []);\r\n\r\n const isMouseDownOnEvent = (event: MouseEvent) => {\r\n return (event.buttons & 1) === 1;\r\n };\r\n\r\n useEffect(() => {\r\n return editor.registerNodeTransform(TableNode, (tableNode) => {\r\n // modification: set default column widths if not defined or table cells of imported tables has the width set\r\n if (!tableNode.getColWidths()) {\r\n const tableRows = tableNode.getChildren();\r\n const columnCount = tableNode.getColumnCount();\r\n const colWidths = new Array(columnCount).fill(undefined);\r\n\r\n const firstRow = tableRows[0] as TableRowNode;\r\n const cells = firstRow.getChildren();\r\n cells.forEach((cell, colIdx) => {\r\n const domCell = editor.getElementByKey(cell.getKey());\r\n if (domCell && domCell.style.width) {\r\n colWidths[colIdx] = parseInt(domCell.style.width, 10);\r\n domCell.style.width = '';\r\n } else if (tableHasContent(tableNode)) {\r\n const isNested = tableNode ? $getNearestNodeOfType(tableNode, TableCellNode) : null;\r\n\r\n const availableWidth = isNested\r\n ? getEditorParrentCellWidth(isNested, columnCount, editor)\r\n : getEditorContentWidth(editor);\r\n const newColWidth = availableWidth / columnCount;\r\n colWidths[colIdx] = Math.max(newColWidth, MIN_COLUMN_WIDTH);\r\n } else {\r\n colWidths[colIdx] = MIN_COLUMN_WIDTH;\r\n }\r\n });\r\n\r\n tableNode.setColWidths(colWidths);\r\n }\r\n\r\n // modification: wrap table node in a wrapper node if there is no wrapper node present\r\n if (tableNode && !(tableNode.getParent() instanceof TableWrapperNode)) {\r\n const wrapperNode = $createTableWrapperNode();\r\n tableNode.replace(wrapperNode);\r\n wrapperNode.append(tableNode);\r\n }\r\n\r\n return tableNode;\r\n });\r\n }, [editor]);\r\n\r\n useEffect(() => {\r\n const onMouseMove = (event: MouseEvent) => {\r\n const target = event.target;\r\n if (!isHTMLElement(target)) {\r\n return;\r\n }\r\n\r\n if (draggingDirection) {\r\n updateMouseCurrentPos({\r\n x: event.clientX,\r\n y: event.clientY,\r\n });\r\n return;\r\n }\r\n updateIsMouseDown(isMouseDownOnEvent(event));\r\n if (resizerRef.current && resizerRef.current.contains(target)) {\r\n return;\r\n }\r\n\r\n if (targetRef.current !== target) {\r\n targetRef.current = target;\r\n const cell = getDOMCellFromTarget(target);\r\n\r\n if (cell && activeCell !== cell) {\r\n editor.getEditorState().read(\r\n () => {\r\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem);\r\n if (!tableCellNode) {\r\n throw new Error('TableCellResizer: Table cell node not found.');\r\n }\r\n\r\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\r\n const tableElement = getTableElement(tableNode, editor.getElementByKey(tableNode.getKey()));\r\n\r\n if (!tableElement) {\r\n throw new Error('TableCellResizer: Table element not found.');\r\n }\r\n\r\n targetRef.current = target;\r\n tableRectRef.current = tableElement.getBoundingClientRect();\r\n updateActiveCell(cell);\r\n },\r\n { editor }\r\n );\r\n } else if (cell == null) {\r\n resetState();\r\n }\r\n }\r\n };\r\n\r\n const onMouseDown = () => {\r\n updateIsMouseDown(true);\r\n };\r\n\r\n const onMouseUp = () => {\r\n updateIsMouseDown(false);\r\n };\r\n\r\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\r\n prevRootElement?.removeEventListener('mousemove', onMouseMove);\r\n prevRootElement?.removeEventListener('mousedown', onMouseDown);\r\n prevRootElement?.removeEventListener('mouseup', onMouseUp);\r\n rootElement?.addEventListener('mousemove', onMouseMove);\r\n rootElement?.addEventListener('mousedown', onMouseDown);\r\n rootElement?.addEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n return () => {\r\n removeRootListener();\r\n };\r\n }, [activeCell, draggingDirection, editor, resetState]);\r\n\r\n const isHeightChanging = (direction: MouseDraggingDirection) => {\r\n if (direction === 'bottom') {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const updateRowHeight = useCallback(\r\n (heightChange: number) => {\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n\r\n editor.update(\r\n () => {\r\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);\r\n if (!$isTableCellNode(tableCellNode)) {\r\n throw new Error('TableCellResizer: Table cell node not found.');\r\n }\r\n\r\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\r\n\r\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode) + tableCellNode.getRowSpan() - 1;\r\n\r\n const tableRows = tableNode.getChildren();\r\n\r\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\r\n throw new Error('Expected table cell to be inside of table row.');\r\n }\r\n\r\n const tableRow = tableRows[tableRowIndex];\r\n\r\n if (!$isTableRowNode(tableRow)) {\r\n throw new Error('Expected table row');\r\n }\r\n\r\n let height = tableRow.getHeight();\r\n if (height === undefined) {\r\n const rowCells = tableRow.getChildren<TableCellNode>();\r\n height = Math.min(...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity));\r\n }\r\n\r\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT);\r\n tableRow.setHeight(newHeight);\r\n },\r\n { tag: 'skip-scroll-into-view' }\r\n );\r\n },\r\n [activeCell, editor]\r\n );\r\n\r\n const getCellNodeHeight = (cell: TableCellNode, activeEditor: LexicalEditor): number | undefined => {\r\n const domCellNode = activeEditor.getElementByKey(cell.getKey());\r\n return domCellNode?.clientHeight;\r\n };\r\n\r\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\r\n for (let row = 0; row < tableMap.length; row++) {\r\n for (let column = 0; column < tableMap[row].length; column++) {\r\n if (tableMap[row][column].cell === tableCellNode) {\r\n return column;\r\n }\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const updateColumnWidth = useCallback(\r\n (widthChange: number) => {\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n editor.update(\r\n () => {\r\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem);\r\n if (!$isTableCellNode(tableCellNode)) {\r\n throw new Error('TableCellResizer: Table cell node not found.');\r\n }\r\n\r\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode);\r\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null);\r\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap);\r\n if (columnIndex === undefined) {\r\n throw new Error('TableCellResizer: Table column not found.');\r\n }\r\n\r\n const colWidths = tableNode.getColWidths();\r\n if (!colWidths) {\r\n return;\r\n }\r\n const width = colWidths[columnIndex];\r\n if (width === undefined) {\r\n return;\r\n }\r\n const newColWidths = [...colWidths];\r\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH);\r\n newColWidths[columnIndex] = newWidth;\r\n tableNode.setColWidths(newColWidths);\r\n\r\n // modification: when resizing a column, also resize the next column so the table doesn't overflow\r\n if (columnIndex < tableNode.getColumnCount() - 1) {\r\n const nextColWidths = tableNode.getColWidths();\r\n if (!nextColWidths) {\r\n return;\r\n }\r\n const newNextColWidths = [...nextColWidths];\r\n const newColumnIndex = columnIndex + 1;\r\n const newNextWidth = nextColWidths[newColumnIndex];\r\n const nextWidth = Math.max(newNextWidth - widthChange, MIN_COLUMN_WIDTH);\r\n newNextColWidths[newColumnIndex] = nextWidth;\r\n tableNode.setColWidths(newNextColWidths);\r\n }\r\n },\r\n { tag: 'skip-scroll-into-view' }\r\n );\r\n },\r\n [activeCell, editor]\r\n );\r\n\r\n const mouseUpHandler = useCallback(\r\n (direction: MouseDraggingDirection) => {\r\n const handler = (event: MouseEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n\r\n if (mouseStartPosRef.current) {\r\n const { x, y } = mouseStartPosRef.current;\r\n\r\n if (activeCell === null) {\r\n return;\r\n }\r\n const zoom = calculateZoomLevel(event.target as Element);\r\n\r\n if (isHeightChanging(direction)) {\r\n const heightChange = (event.clientY - y) / zoom;\r\n updateRowHeight(heightChange);\r\n } else {\r\n const widthChange = (event.clientX - x) / zoom;\r\n updateColumnWidth(widthChange);\r\n }\r\n\r\n resetState();\r\n document.removeEventListener('mouseup', handler);\r\n }\r\n };\r\n return handler;\r\n },\r\n [activeCell, resetState, updateColumnWidth, updateRowHeight]\r\n );\r\n\r\n const toggleResize = useCallback(\r\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\r\n (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (!activeCell) {\r\n throw new Error('TableCellResizer: Expected active cell.');\r\n }\r\n\r\n mouseStartPosRef.current = {\r\n x: event.clientX,\r\n y: event.clientY,\r\n };\r\n updateMouseCurrentPos(mouseStartPosRef.current);\r\n updateDraggingDirection(direction);\r\n\r\n document.addEventListener('mouseup', mouseUpHandler(direction));\r\n },\r\n [activeCell, mouseUpHandler]\r\n );\r\n\r\n const getResizers = useCallback(() => {\r\n if (activeCell) {\r\n const { height, width, top, left } = activeCell.elem.getBoundingClientRect();\r\n const zoom = calculateZoomLevel(activeCell.elem);\r\n const zoneWidth = 10; // Pixel width of the zone where you can drag the edge\r\n const styles = {\r\n bottom: {\r\n backgroundColor: 'none',\r\n cursor: 'ns-resize',\r\n height: `${zoneWidth}px`,\r\n left: `${window.pageXOffset + left}px`,\r\n top: `${window.pageYOffset + top + height - zoneWidth / HALF}px`,\r\n width: `${width}px`,\r\n zIndex: 5000,\r\n },\r\n right: {\r\n backgroundColor: 'none',\r\n cursor: 'ew-resize',\r\n height: `${height}px`,\r\n left: `${window.pageXOffset + left + width - zoneWidth / HALF}px`,\r\n top: `${window.pageYOffset + top}px`,\r\n width: `${zoneWidth}px`,\r\n zIndex: 5000,\r\n },\r\n };\r\n\r\n const tableRect = tableRectRef.current;\r\n\r\n if (draggingDirection && mouseCurrentPos && tableRect) {\r\n if (isHeightChanging(draggingDirection)) {\r\n styles[draggingDirection].left = `${window.pageXOffset + tableRect.left}px`;\r\n styles[draggingDirection].top = `${window.pageYOffset + mouseCurrentPos.y / zoom}px`;\r\n styles[draggingDirection].height = '3px';\r\n styles[draggingDirection].width = `${tableRect.width}px`;\r\n } else {\r\n styles[draggingDirection].top = `${window.pageYOffset + tableRect.top}px`;\r\n styles[draggingDirection].left = `${window.pageXOffset + mouseCurrentPos.x / zoom}px`;\r\n styles[draggingDirection].width = '3px';\r\n styles[draggingDirection].height = `${tableRect.height}px`;\r\n }\r\n\r\n styles[draggingDirection].backgroundColor = '#adf';\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n return {\r\n bottom: null,\r\n left: null,\r\n right: null,\r\n top: null,\r\n };\r\n }, [activeCell, draggingDirection, mouseCurrentPos]);\r\n\r\n const resizerStyles = getResizers();\r\n\r\n return (\r\n <div ref={resizerRef}>\r\n {activeCell != null && !isMouseDown && (\r\n <>\r\n <div\r\n className={styles['table-cell-resizer__resizer']}\r\n style={resizerStyles.right || undefined}\r\n onMouseDown={toggleResize('right')}\r\n />\r\n <div\r\n className={styles['table-cell-resizer__resizer']}\r\n style={resizerStyles.bottom || undefined}\r\n onMouseDown={toggleResize('bottom')}\r\n />\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport const TableCellResizerPlugin = (): null | ReactPortal => {\r\n const [editor] = useLexicalComposerContext();\r\n const isEditable = useLexicalEditable();\r\n\r\n return useMemo(\r\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\r\n [editor, isEditable]\r\n );\r\n};\r\n"],"names":["c","n","t","u","e","a","i","l","r","d","o","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","HALF","TableCellResizer","editor","targetRef","useRef","resizerRef","tableRectRef","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","useState","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","useCallback","isMouseDownOnEvent","event","useEffect","TableNode","tableNode","tableRows","columnCount","colWidths","cell","colIdx","domCell","tableHasContent","isNested","$getNearestNodeOfType","TableCellNode","newColWidth","getEditorParrentCellWidth","getEditorContentWidth","TableWrapperNode","wrapperNode","$createTableWrapperNode","onMouseMove","target","isHTMLElement","getDOMCellFromTarget","tableCellNode","$getNearestNodeFromDOMNode","$getTableNodeFromLexicalNodeOrThrow","tableElement","getTableElement","onMouseDown","onMouseUp","removeRootListener","rootElement","prevRootElement","isHeightChanging","direction","updateRowHeight","heightChange","$isTableCellNode","tableRowIndex","$getTableRowIndexFromTableCellNode","tableRow","$isTableRowNode","height","rowCells","getCellNodeHeight","newHeight","activeEditor","getCellColumnIndex","tableMap","row","column","updateColumnWidth","widthChange","$computeTableMapSkipCellCheck","columnIndex","width","newColWidths","newWidth","nextColWidths","newNextColWidths","newColumnIndex","newNextWidth","nextWidth","mouseUpHandler","handler","x","y","zoom","calculateZoomLevel","toggleResize","resizerStyles","top","left","zoneWidth","styles","tableRect","jsx","jsxs","Fragment","TableCellResizerPlugin","useLexicalComposerContext","isEditable","useLexicalEditable","useMemo","createPortal"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as c, jsx as e, Fragment as Z } from "react/jsx-runtime";
|
|
2
2
|
import { o as ee } from "./LexicalComposerContext.prod-DOyoZx0P.js";
|
|
3
3
|
import { c as z } from "./clsx-OuTLNxxd.js";
|
|
4
|
-
import { W as te, R as oe, y as re } from "./LexicalTable.prod-
|
|
4
|
+
import { W as te, R as oe, y as re } from "./LexicalTable.prod-Bexd4dGG.js";
|
|
5
5
|
import { as as le, I as ne, w as Y, a as O, f as ie, ah as ae } from "./Lexical.prod-nXWuyOKD.js";
|
|
6
6
|
import { v as se } from "./LexicalUtils.prod-Ckfw0Hjt.js";
|
|
7
7
|
import { forwardRef as V, useState as y, useRef as g, useId as P, useImperativeHandle as K, useEffect as R } from "react";
|
|
@@ -304,4 +304,4 @@ export {
|
|
|
304
304
|
ge as a,
|
|
305
305
|
Se as b
|
|
306
306
|
};
|
|
307
|
-
//# sourceMappingURL=TablePlugin-
|
|
307
|
+
//# sourceMappingURL=TablePlugin-FTN9oxnI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePlugin-4Zj0xZie.js","sources":["../src/components/MultiSelect/components/MultiSelectHeader.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/AddTableFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/TablePlugin.tsx"],"sourcesContent":["import styles from 'components/MultiSelect/MultiSelect.module.css';\nimport { Label } from 'components/Label';\nimport { Button } from 'components';\n\nexport interface MultiSelectHeaderProps {\n label: string;\n clearTrigger?: string;\n onClear?: () => void;\n}\n\nexport function MultiSelectHeader({ label, clearTrigger, onClear }: MultiSelectHeaderProps) {\n return (\n <header className={styles['multi-select__header']}>\n <Label htmlFor=\"multi-select-list\">{label}</Label>\n {clearTrigger && (\n <Button variant={'blank'} onClick={onClear}>\n {clearTrigger}\n </Button>\n )}\n </header>\n );\n}\n","import { clsx } from 'clsx';\n\nimport type { PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './MultiSelect.module.css';\n\nimport { MultiSelectItem } from 'components/MultiSelect/components/MultiSelectItem';\nimport { MultiSelectHeader } from 'components/MultiSelect/components/MultiSelectHeader';\n\nexport interface MultiSelectProps {\n /** `true` if the container should scroll on overflow; otherwise, `false` to resize the container to its contents. The default is `true`. */\n scrollable?: boolean;\n /** `true` to disable the border around the container; otherwise, `false`. The default is `false`. */\n noBorder?: boolean;\n /** The header contents. */\n header?: ReactNode;\n}\n\n/** Represents a component to list a number of checkboxes. */\nexport const MultiSelect = ({ scrollable = true, noBorder, header, children }: PropsWithChildren<MultiSelectProps>) => (\n <>\n {header}\n <div\n className={clsx(styles['multi-select'], {\n [styles['multi-select--no-border']]: noBorder,\n })}\n >\n <ul\n className={clsx(styles['multi-select__list'], {\n [styles['multi-select__list--scrollable']]: scrollable,\n })}\n id=\"multi-select-list\"\n >\n {children}\n </ul>\n </div>\n </>\n);\n\nMultiSelect.MultiSelectHeader = MultiSelectHeader;\nMultiSelect.MultiSelectItem = MultiSelectItem;\n","import { useState, forwardRef, useImperativeHandle, useRef, useId } from 'react';\n\nimport type { ChangeEvent, JSX } from 'react';\nimport type { LinkType } from 'components/RteEditor/Plugins/LinkPlugin';\n\nimport styles from './AddLinkForm.module.css';\n\nimport { ensureHttps, validateUrlWithProtocol } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Button, FeedbackBox, FormField, Icon, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ninterface AddLinkFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (url: string, linktext: string) => void;\n isLink: LinkType;\n}\n\nexport interface addLinkFormMethods {\n clearForm: () => void;\n focusFirstField: () => void;\n setDefaults: (url: string, linktext: string) => void;\n}\n\nexport const AddLinkForm = forwardRef(\n (\n { onCloseHandler, onSaveHandler, isLink = { active: false, url: '', linktext: '' } }: AddLinkFormProps,\n ref\n ): JSX.Element => {\n const t = useTranslation();\n const [url, setUrl] = useState<string>(isLink.url || '');\n const [linkText, setLinkText] = useState<string>(isLink.linktext || '');\n const [showLinktextField, setShowLinktextField] = useState<boolean>(false);\n const [urlError, setUrlError] = useState<string | null>(null);\n const [linkTextError, setLinkTextError] = useState<string | null>(null);\n const firstField = useRef<HTMLInputElement>(null);\n const linkId = `link_${useId()}`;\n const textId = `text_${useId()}`;\n\n const handleOpenUrl = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n const handleUrl = (event: ChangeEvent<HTMLInputElement>) => {\n setUrl(event.target.value);\n };\n\n const handleLinkText = (event: ChangeEvent<HTMLInputElement>) => {\n setLinkText(event.target.value);\n };\n\n const validateUrl = (url: string): boolean => {\n if (validateUrlWithProtocol(url) === false || url.trim() === '') {\n setUrlError(t.errortext.urlNotValid);\n return false;\n }\n setUrlError(null);\n return true;\n };\n\n const validateLinkText = (linkText: string): boolean => {\n if (linkText.trim() === '') {\n setLinkTextError(t.errortext.linkTextNotValid);\n return false;\n }\n setLinkTextError(null);\n return true;\n };\n\n const handleSave = () => {\n if (!validateUrl(url) || (showLinktextField && !validateLinkText(linkText))) {\n return;\n }\n\n onSaveHandler(url, linkText);\n resetForm();\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setUrl('');\n setShowLinktextField(false);\n setUrlError(null);\n setLinkTextError(null);\n };\n\n const setDefaults = (url: string, linktext: string) => {\n setUrl(url);\n if (!linktext && !url) {\n setShowLinktextField(true);\n }\n };\n\n const focusFirstField = () => {\n if (firstField.current) {\n firstField.current.focus();\n }\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField,\n setDefaults,\n }));\n\n return (\n <div className={styles['linkform']}>\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={linkId}>{t.links.linkLabel}</Label>\n <div className={styles['linkform__input-url-wrapper']}>\n <InputField\n id={linkId}\n placeholder={t.links.linkPlaceholder}\n value={url}\n onChange={(event) => handleUrl(event)}\n onFocus={() => setUrlError(null)}\n ref={firstField}\n aria-label={t.aria.labels.linkField}\n />\n {url && (\n <button type=\"button\" onClick={handleOpenUrl} className={styles['linkform__open-url-button']}>\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n )}\n </div>\n {urlError && <FeedbackBox level=\"error\" feedback={urlError} />}\n </FormField>\n {showLinktextField && (\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={textId}>{t.links.linkText}</Label>\n <InputField\n id={textId}\n value={linkText}\n onChange={(event) => handleLinkText(event)}\n onFocus={() => setLinkTextError(null)}\n aria-label={t.aria.labels.linkTextfield}\n />\n {linkTextError && <FeedbackBox level=\"error\" feedback={linkTextError} />}\n </FormField>\n )}\n <div className={styles['linkform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\n {t.common.cancel}\n </Button>\n <Button variant={'primary'} onClick={handleSave} aria-label={t.aria.labels.linkOkButton} type=\"button\">\n {t.links.addLink}\n </Button>\n </div>\n </div>\n );\n }\n);\n","import { useState, forwardRef, useImperativeHandle, useRef, useId, useEffect } from 'react';\n\nimport type { ChangeEvent } from 'react';\n\nimport styles from './AddTableFrom.module.css';\n\nimport { Button, FormField, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\ninterface AddTableFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (nrfOfRows: number, nrOfColumns: number) => void;\n}\n\nexport interface addTableForm {\n clearForm: () => void;\n focusFirstField: () => void;\n}\n\nexport const AddTableForm = forwardRef(({ onCloseHandler, onSaveHandler }: AddTableFormProps, ref) => {\n const t = useTranslation();\n const [rowCount, setRowCount] = useState<number>();\n const [columnCount, setColumnCount] = useState<number>();\n const firstField = useRef<HTMLInputElement>(null);\n const rowId = `row_${useId()}`;\n const columnId = `column_${useId()}`;\n\n const handleDimentionChange = (event: ChangeEvent<HTMLInputElement>, type: string) => {\n const value = event.target.value;\n type === 'row' ? setRowCount(parseInt(value)) : setColumnCount(parseInt(value));\n };\n\n const handleSave = () => {\n if (rowCount !== undefined && columnCount !== undefined) {\n onSaveHandler(rowCount, columnCount);\n resetForm();\n }\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setRowCount(undefined);\n setColumnCount(undefined);\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField: () => firstField.current?.focus(),\n }));\n\n useEffect(() => {\n const handleResizeScroll = () => {\n handleClose();\n };\n\n setScrollableContainers(handleResizeScroll);\n\n window.addEventListener('scroll', handleResizeScroll);\n window.addEventListener('resize', handleResizeScroll);\n\n return () => {\n window.removeEventListener('scroll', handleResizeScroll);\n window.removeEventListener('resize', handleResizeScroll);\n removeScrollableContainers(handleResizeScroll);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className={styles['tableform']}>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={rowId}>{t.table.nrofRows}</Label>\n <InputField\n id={rowId}\n placeholder={t.table.nrofRowsPlaceholder}\n value={rowCount ? rowCount : ''}\n onChange={(event) => handleDimentionChange(event, 'row')}\n aria-label={t.aria.labels.tableRowfield}\n ref={firstField}\n />\n </FormField>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={columnId}>{t.table.nrofColumns}</Label>\n <InputField\n id={columnId}\n placeholder={t.table.nrofColumnsPlaceholder}\n value={columnCount ? columnCount : ''}\n onChange={(event) => handleDimentionChange(event, 'column')}\n aria-label={t.aria.labels.tableColumnfield}\n />\n </FormField>\n <div className={styles['tableform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel}>\n {t.common.cancel}\n </Button>\n <Button\n variant={'primary'}\n onClick={handleSave}\n disabled={!rowCount || !columnCount}\n aria-label={t.aria.labels.tableOkButton}\n >\n {t.common.add}\n </Button>\n </div>\n </div>\n );\n});\n","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { clsx } from 'clsx';\nimport { $getTableCellNodeFromLexicalNode, $isTableCellNode, TableCellNode } from '@lexical/table';\nimport {\n $getSelection,\n $isRangeSelection,\n $getRoot,\n KEY_DOWN_COMMAND,\n COMMAND_PRIORITY_EDITOR,\n $isNodeSelection,\n} from 'lexical';\nimport { $getNearestNodeOfType } from '@lexical/utils';\nimport { useRef, useEffect, useImperativeHandle, forwardRef } from 'react';\n\nimport type { TableNode } from '@lexical/table';\nimport type { JSX } from 'react';\nimport type { TextNode } from 'lexical';\nimport type { addTableForm } from './AddTableFrom';\nimport type { Actions } from './TableCellContextMenu';\n\nimport { AddTableForm } from './AddTableFrom';\nimport {\n createTable,\n DEFAULT_COL_WIDTH,\n DEFAULT_EDITOR_WIDTH,\n deleteColumn,\n deleteRow,\n deleteTable,\n getEditorContentWidth,\n getEditorParrentCellWidth,\n insertColumn,\n insertRow,\n PREVENT_OPEN_DELAY,\n} from './helpers';\n\nimport { $createTableWrapperNode } from 'components/RteEditor/nodes';\nimport { useFlyout } from 'components/RteEditor/hooks/useFlyout';\nimport { Icon } from 'components';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ninterface TablePluginProps {\n isActive: boolean;\n}\nexport interface TableMutation {\n mutateTable: (type: Actions) => void;\n}\n\nexport const TablePlugin = forwardRef(({ isActive }: TablePluginProps, ref): JSX.Element => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const { flyout, showFlyout, hideFlyout, isVisible } = useFlyout();\n const addTableForm = useRef<addTableForm>(undefined);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const preventOpen = useRef(false);\n const isVisibleRef = useRef(isVisible);\n\n const openFlyout = () => {\n const rect = buttonRef.current?.getBoundingClientRect();\n if (!preventOpen.current && rect) {\n showFlyout({ position: { top: rect.bottom, left: rect.left }, ...flyoutOptions });\n }\n };\n\n const closeFlyout = () => {\n hideFlyout();\n };\n\n const insertTable = (nrOfRows: number, nrOfColumns: number) => {\n editor.update(() => {\n const selection = $getSelection();\n const tableNode = createTable(nrOfRows, nrOfColumns);\n\n const anchorNode =\n ($isRangeSelection(selection) && selection.anchor.getNode()) ||\n ($isNodeSelection(selection) && selection.getNodes()[0]) ||\n null;\n\n const willBeNested = anchorNode ? $getNearestNodeOfType(anchorNode, TableCellNode) : null;\n\n const availibleWidth = willBeNested\n ? getEditorParrentCellWidth(willBeNested, nrOfColumns, editor)\n : getEditorContentWidth(editor) || DEFAULT_EDITOR_WIDTH;\n\n const perCol = Math.max(DEFAULT_COL_WIDTH, Math.floor(availibleWidth / Math.max(1, nrOfColumns)));\n\n const colWidths = Array.from({ length: nrOfColumns }, () => perCol);\n\n (tableNode as TableNode).setColWidths(colWidths);\n\n const tableWrapper = $createTableWrapperNode();\n tableWrapper.append(tableNode);\n if ($isRangeSelection(selection)) {\n selection.insertNodes([tableWrapper]);\n } else {\n $getRoot().append(tableWrapper);\n }\n const firstDescendant = tableWrapper.getFirstDescendant();\n if (firstDescendant) {\n (firstDescendant as TextNode).select();\n }\n });\n\n closeFlyout();\n };\n\n const mutateTable = (action: Actions) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const currentNode = $getTableCellNodeFromLexicalNode(anchorNode);\n\n if ($isTableCellNode(currentNode)) {\n switch (action) {\n case 'insertRowAbove':\n case 'insertRowBelow':\n insertRow(currentNode, action);\n break;\n case 'deleteRow':\n deleteRow(currentNode);\n break;\n case 'insertColumnLeft':\n case 'insertColumnRight':\n insertColumn(currentNode, action);\n break;\n case 'deleteColumn':\n deleteColumn(currentNode);\n break;\n case 'deleteTable':\n deleteTable(currentNode);\n break;\n }\n }\n }\n });\n };\n\n const flyoutOptions = {\n children: (\n <AddTableForm\n onCloseHandler={closeFlyout}\n onSaveHandler={(rows, columns) => insertTable(rows, columns)}\n ref={addTableForm}\n />\n ),\n };\n\n useEffect(() => {\n if (!isVisible) {\n addTableForm.current?.clearForm();\n setTimeout(() => (preventOpen.current = false), PREVENT_OPEN_DELAY);\n } else {\n preventOpen.current = true;\n addTableForm.current?.focusFirstField();\n }\n }, [addTableForm, isVisible]);\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit9') {\n event.preventDefault();\n openFlyout();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n return () => {\n removeKeyboardShortcut();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n isVisibleRef.current = isVisible;\n }, [isVisible]);\n\n useEffect(() => {\n const removeKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isVisibleRef.current) {\n event.preventDefault();\n event.stopPropagation();\n closeFlyout();\n }\n };\n\n document.addEventListener('keydown', removeKeydown, { capture: true });\n\n return () => {\n document.removeEventListener('keydown', removeKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useImperativeHandle(ref, () => ({\n mutateTable,\n }));\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\n <button\n onClick={openFlyout}\n title={t.table.tableTooltip}\n className={clsx(styles['editor__toolbar-button'], isActive && styles[`editor__toolbar-button--active`])}\n aria-label={t.aria.labels.table}\n aria-keyshortcuts={t.aria.keyshortcuts.table}\n ref={buttonRef}\n type=\"button\"\n >\n <Icon name=\"Table\" size={24} />\n </button>\n {flyout}\n </div>\n </div>\n );\n});\n"],"names":["MultiSelectHeader","label","clearTrigger","onClear","jsxs","styles","jsx","Label","Button","MultiSelect","scrollable","noBorder","header","children","Fragment","clsx","MultiSelectItem","AddLinkForm","forwardRef","onCloseHandler","onSaveHandler","isLink","ref","t","useTranslation","url","setUrl","useState","linkText","setLinkText","showLinktextField","setShowLinktextField","urlError","setUrlError","linkTextError","setLinkTextError","firstField","useRef","linkId","useId","textId","handleOpenUrl","ensureHttps","handleUrl","event","handleLinkText","validateUrl","validateUrlWithProtocol","validateLinkText","handleSave","resetForm","handleClose","setDefaults","linktext","focusFirstField","useImperativeHandle","FormField","InputField","Icon","FeedbackBox","AddTableForm","rowCount","setRowCount","columnCount","setColumnCount","rowId","columnId","handleDimentionChange","type","value","useEffect","handleResizeScroll","setScrollableContainers","removeScrollableContainers","TablePlugin","isActive","editor","useLexicalComposerContext","flyout","showFlyout","hideFlyout","isVisible","useFlyout","addTableForm","buttonRef","preventOpen","isVisibleRef","openFlyout","rect","flyoutOptions","closeFlyout","insertTable","nrOfRows","nrOfColumns","selection","$getSelection","tableNode","createTable","anchorNode","$isRangeSelection","$isNodeSelection","willBeNested","$getNearestNodeOfType","TableCellNode","availibleWidth","getEditorParrentCellWidth","getEditorContentWidth","DEFAULT_EDITOR_WIDTH","perCol","DEFAULT_COL_WIDTH","colWidths","tableWrapper","$createTableWrapperNode","$getRoot","firstDescendant","mutateTable","action","currentNode","$getTableCellNodeFromLexicalNode","$isTableCellNode","insertRow","deleteRow","insertColumn","deleteColumn","deleteTable","rows","columns","PREVENT_OPEN_DELAY","removeKeyboardShortcut","KEY_DOWN_COMMAND","COMMAND_PRIORITY_EDITOR","removeKeydown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TablePlugin-FTN9oxnI.js","sources":["../src/components/MultiSelect/components/MultiSelectHeader.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/AddTableFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/TablePlugin.tsx"],"sourcesContent":["import styles from 'components/MultiSelect/MultiSelect.module.css';\nimport { Label } from 'components/Label';\nimport { Button } from 'components';\n\nexport interface MultiSelectHeaderProps {\n label: string;\n clearTrigger?: string;\n onClear?: () => void;\n}\n\nexport function MultiSelectHeader({ label, clearTrigger, onClear }: MultiSelectHeaderProps) {\n return (\n <header className={styles['multi-select__header']}>\n <Label htmlFor=\"multi-select-list\">{label}</Label>\n {clearTrigger && (\n <Button variant={'blank'} onClick={onClear}>\n {clearTrigger}\n </Button>\n )}\n </header>\n );\n}\n","import { clsx } from 'clsx';\n\nimport type { PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './MultiSelect.module.css';\n\nimport { MultiSelectItem } from 'components/MultiSelect/components/MultiSelectItem';\nimport { MultiSelectHeader } from 'components/MultiSelect/components/MultiSelectHeader';\n\nexport interface MultiSelectProps {\n /** `true` if the container should scroll on overflow; otherwise, `false` to resize the container to its contents. The default is `true`. */\n scrollable?: boolean;\n /** `true` to disable the border around the container; otherwise, `false`. The default is `false`. */\n noBorder?: boolean;\n /** The header contents. */\n header?: ReactNode;\n}\n\n/** Represents a component to list a number of checkboxes. */\nexport const MultiSelect = ({ scrollable = true, noBorder, header, children }: PropsWithChildren<MultiSelectProps>) => (\n <>\n {header}\n <div\n className={clsx(styles['multi-select'], {\n [styles['multi-select--no-border']]: noBorder,\n })}\n >\n <ul\n className={clsx(styles['multi-select__list'], {\n [styles['multi-select__list--scrollable']]: scrollable,\n })}\n id=\"multi-select-list\"\n >\n {children}\n </ul>\n </div>\n </>\n);\n\nMultiSelect.MultiSelectHeader = MultiSelectHeader;\nMultiSelect.MultiSelectItem = MultiSelectItem;\n","import { useState, forwardRef, useImperativeHandle, useRef, useId } from 'react';\n\nimport type { ChangeEvent, JSX } from 'react';\nimport type { LinkType } from 'components/RteEditor/Plugins/LinkPlugin';\n\nimport styles from './AddLinkForm.module.css';\n\nimport { ensureHttps, validateUrlWithProtocol } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Button, FeedbackBox, FormField, Icon, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ninterface AddLinkFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (url: string, linktext: string) => void;\n isLink: LinkType;\n}\n\nexport interface addLinkFormMethods {\n clearForm: () => void;\n focusFirstField: () => void;\n setDefaults: (url: string, linktext: string) => void;\n}\n\nexport const AddLinkForm = forwardRef(\n (\n { onCloseHandler, onSaveHandler, isLink = { active: false, url: '', linktext: '' } }: AddLinkFormProps,\n ref\n ): JSX.Element => {\n const t = useTranslation();\n const [url, setUrl] = useState<string>(isLink.url || '');\n const [linkText, setLinkText] = useState<string>(isLink.linktext || '');\n const [showLinktextField, setShowLinktextField] = useState<boolean>(false);\n const [urlError, setUrlError] = useState<string | null>(null);\n const [linkTextError, setLinkTextError] = useState<string | null>(null);\n const firstField = useRef<HTMLInputElement>(null);\n const linkId = `link_${useId()}`;\n const textId = `text_${useId()}`;\n\n const handleOpenUrl = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n const handleUrl = (event: ChangeEvent<HTMLInputElement>) => {\n setUrl(event.target.value);\n };\n\n const handleLinkText = (event: ChangeEvent<HTMLInputElement>) => {\n setLinkText(event.target.value);\n };\n\n const validateUrl = (url: string): boolean => {\n if (validateUrlWithProtocol(url) === false || url.trim() === '') {\n setUrlError(t.errortext.urlNotValid);\n return false;\n }\n setUrlError(null);\n return true;\n };\n\n const validateLinkText = (linkText: string): boolean => {\n if (linkText.trim() === '') {\n setLinkTextError(t.errortext.linkTextNotValid);\n return false;\n }\n setLinkTextError(null);\n return true;\n };\n\n const handleSave = () => {\n if (!validateUrl(url) || (showLinktextField && !validateLinkText(linkText))) {\n return;\n }\n\n onSaveHandler(url, linkText);\n resetForm();\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setUrl('');\n setShowLinktextField(false);\n setUrlError(null);\n setLinkTextError(null);\n };\n\n const setDefaults = (url: string, linktext: string) => {\n setUrl(url);\n if (!linktext && !url) {\n setShowLinktextField(true);\n }\n };\n\n const focusFirstField = () => {\n if (firstField.current) {\n firstField.current.focus();\n }\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField,\n setDefaults,\n }));\n\n return (\n <div className={styles['linkform']}>\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={linkId}>{t.links.linkLabel}</Label>\n <div className={styles['linkform__input-url-wrapper']}>\n <InputField\n id={linkId}\n placeholder={t.links.linkPlaceholder}\n value={url}\n onChange={(event) => handleUrl(event)}\n onFocus={() => setUrlError(null)}\n ref={firstField}\n aria-label={t.aria.labels.linkField}\n />\n {url && (\n <button type=\"button\" onClick={handleOpenUrl} className={styles['linkform__open-url-button']}>\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n )}\n </div>\n {urlError && <FeedbackBox level=\"error\" feedback={urlError} />}\n </FormField>\n {showLinktextField && (\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={textId}>{t.links.linkText}</Label>\n <InputField\n id={textId}\n value={linkText}\n onChange={(event) => handleLinkText(event)}\n onFocus={() => setLinkTextError(null)}\n aria-label={t.aria.labels.linkTextfield}\n />\n {linkTextError && <FeedbackBox level=\"error\" feedback={linkTextError} />}\n </FormField>\n )}\n <div className={styles['linkform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\n {t.common.cancel}\n </Button>\n <Button variant={'primary'} onClick={handleSave} aria-label={t.aria.labels.linkOkButton} type=\"button\">\n {t.links.addLink}\n </Button>\n </div>\n </div>\n );\n }\n);\n","import { useState, forwardRef, useImperativeHandle, useRef, useId, useEffect } from 'react';\n\nimport type { ChangeEvent } from 'react';\n\nimport styles from './AddTableFrom.module.css';\n\nimport { Button, FormField, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\ninterface AddTableFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (nrfOfRows: number, nrOfColumns: number) => void;\n}\n\nexport interface addTableForm {\n clearForm: () => void;\n focusFirstField: () => void;\n}\n\nexport const AddTableForm = forwardRef(({ onCloseHandler, onSaveHandler }: AddTableFormProps, ref) => {\n const t = useTranslation();\n const [rowCount, setRowCount] = useState<number>();\n const [columnCount, setColumnCount] = useState<number>();\n const firstField = useRef<HTMLInputElement>(null);\n const rowId = `row_${useId()}`;\n const columnId = `column_${useId()}`;\n\n const handleDimentionChange = (event: ChangeEvent<HTMLInputElement>, type: string) => {\n const value = event.target.value;\n type === 'row' ? setRowCount(parseInt(value)) : setColumnCount(parseInt(value));\n };\n\n const handleSave = () => {\n if (rowCount !== undefined && columnCount !== undefined) {\n onSaveHandler(rowCount, columnCount);\n resetForm();\n }\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setRowCount(undefined);\n setColumnCount(undefined);\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField: () => firstField.current?.focus(),\n }));\n\n useEffect(() => {\n const handleResizeScroll = () => {\n handleClose();\n };\n\n setScrollableContainers(handleResizeScroll);\n\n window.addEventListener('scroll', handleResizeScroll);\n window.addEventListener('resize', handleResizeScroll);\n\n return () => {\n window.removeEventListener('scroll', handleResizeScroll);\n window.removeEventListener('resize', handleResizeScroll);\n removeScrollableContainers(handleResizeScroll);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className={styles['tableform']}>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={rowId}>{t.table.nrofRows}</Label>\n <InputField\n id={rowId}\n placeholder={t.table.nrofRowsPlaceholder}\n value={rowCount ? rowCount : ''}\n onChange={(event) => handleDimentionChange(event, 'row')}\n aria-label={t.aria.labels.tableRowfield}\n ref={firstField}\n />\n </FormField>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={columnId}>{t.table.nrofColumns}</Label>\n <InputField\n id={columnId}\n placeholder={t.table.nrofColumnsPlaceholder}\n value={columnCount ? columnCount : ''}\n onChange={(event) => handleDimentionChange(event, 'column')}\n aria-label={t.aria.labels.tableColumnfield}\n />\n </FormField>\n <div className={styles['tableform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel}>\n {t.common.cancel}\n </Button>\n <Button\n variant={'primary'}\n onClick={handleSave}\n disabled={!rowCount || !columnCount}\n aria-label={t.aria.labels.tableOkButton}\n >\n {t.common.add}\n </Button>\n </div>\n </div>\n );\n});\n","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { clsx } from 'clsx';\nimport { $getTableCellNodeFromLexicalNode, $isTableCellNode, TableCellNode } from '@lexical/table';\nimport {\n $getSelection,\n $isRangeSelection,\n $getRoot,\n KEY_DOWN_COMMAND,\n COMMAND_PRIORITY_EDITOR,\n $isNodeSelection,\n} from 'lexical';\nimport { $getNearestNodeOfType } from '@lexical/utils';\nimport { useRef, useEffect, useImperativeHandle, forwardRef } from 'react';\n\nimport type { TableNode } from '@lexical/table';\nimport type { JSX } from 'react';\nimport type { TextNode } from 'lexical';\nimport type { addTableForm } from './AddTableFrom';\nimport type { Actions } from './TableCellContextMenu';\n\nimport { AddTableForm } from './AddTableFrom';\nimport {\n createTable,\n DEFAULT_COL_WIDTH,\n DEFAULT_EDITOR_WIDTH,\n deleteColumn,\n deleteRow,\n deleteTable,\n getEditorContentWidth,\n getEditorParrentCellWidth,\n insertColumn,\n insertRow,\n PREVENT_OPEN_DELAY,\n} from './helpers';\n\nimport { $createTableWrapperNode } from 'components/RteEditor/nodes';\nimport { useFlyout } from 'components/RteEditor/hooks/useFlyout';\nimport { Icon } from 'components';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ninterface TablePluginProps {\n isActive: boolean;\n}\nexport interface TableMutation {\n mutateTable: (type: Actions) => void;\n}\n\nexport const TablePlugin = forwardRef(({ isActive }: TablePluginProps, ref): JSX.Element => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const { flyout, showFlyout, hideFlyout, isVisible } = useFlyout();\n const addTableForm = useRef<addTableForm>(undefined);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const preventOpen = useRef(false);\n const isVisibleRef = useRef(isVisible);\n\n const openFlyout = () => {\n const rect = buttonRef.current?.getBoundingClientRect();\n if (!preventOpen.current && rect) {\n showFlyout({ position: { top: rect.bottom, left: rect.left }, ...flyoutOptions });\n }\n };\n\n const closeFlyout = () => {\n hideFlyout();\n };\n\n const insertTable = (nrOfRows: number, nrOfColumns: number) => {\n editor.update(() => {\n const selection = $getSelection();\n const tableNode = createTable(nrOfRows, nrOfColumns);\n\n const anchorNode =\n ($isRangeSelection(selection) && selection.anchor.getNode()) ||\n ($isNodeSelection(selection) && selection.getNodes()[0]) ||\n null;\n\n const willBeNested = anchorNode ? $getNearestNodeOfType(anchorNode, TableCellNode) : null;\n\n const availibleWidth = willBeNested\n ? getEditorParrentCellWidth(willBeNested, nrOfColumns, editor)\n : getEditorContentWidth(editor) || DEFAULT_EDITOR_WIDTH;\n\n const perCol = Math.max(DEFAULT_COL_WIDTH, Math.floor(availibleWidth / Math.max(1, nrOfColumns)));\n\n const colWidths = Array.from({ length: nrOfColumns }, () => perCol);\n\n (tableNode as TableNode).setColWidths(colWidths);\n\n const tableWrapper = $createTableWrapperNode();\n tableWrapper.append(tableNode);\n if ($isRangeSelection(selection)) {\n selection.insertNodes([tableWrapper]);\n } else {\n $getRoot().append(tableWrapper);\n }\n const firstDescendant = tableWrapper.getFirstDescendant();\n if (firstDescendant) {\n (firstDescendant as TextNode).select();\n }\n });\n\n closeFlyout();\n };\n\n const mutateTable = (action: Actions) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const currentNode = $getTableCellNodeFromLexicalNode(anchorNode);\n\n if ($isTableCellNode(currentNode)) {\n switch (action) {\n case 'insertRowAbove':\n case 'insertRowBelow':\n insertRow(currentNode, action);\n break;\n case 'deleteRow':\n deleteRow(currentNode);\n break;\n case 'insertColumnLeft':\n case 'insertColumnRight':\n insertColumn(currentNode, action);\n break;\n case 'deleteColumn':\n deleteColumn(currentNode);\n break;\n case 'deleteTable':\n deleteTable(currentNode);\n break;\n }\n }\n }\n });\n };\n\n const flyoutOptions = {\n children: (\n <AddTableForm\n onCloseHandler={closeFlyout}\n onSaveHandler={(rows, columns) => insertTable(rows, columns)}\n ref={addTableForm}\n />\n ),\n };\n\n useEffect(() => {\n if (!isVisible) {\n addTableForm.current?.clearForm();\n setTimeout(() => (preventOpen.current = false), PREVENT_OPEN_DELAY);\n } else {\n preventOpen.current = true;\n addTableForm.current?.focusFirstField();\n }\n }, [addTableForm, isVisible]);\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit9') {\n event.preventDefault();\n openFlyout();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n return () => {\n removeKeyboardShortcut();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n isVisibleRef.current = isVisible;\n }, [isVisible]);\n\n useEffect(() => {\n const removeKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isVisibleRef.current) {\n event.preventDefault();\n event.stopPropagation();\n closeFlyout();\n }\n };\n\n document.addEventListener('keydown', removeKeydown, { capture: true });\n\n return () => {\n document.removeEventListener('keydown', removeKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useImperativeHandle(ref, () => ({\n mutateTable,\n }));\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\n <button\n onClick={openFlyout}\n title={t.table.tableTooltip}\n className={clsx(styles['editor__toolbar-button'], isActive && styles[`editor__toolbar-button--active`])}\n aria-label={t.aria.labels.table}\n aria-keyshortcuts={t.aria.keyshortcuts.table}\n ref={buttonRef}\n type=\"button\"\n >\n <Icon name=\"Table\" size={24} />\n </button>\n {flyout}\n </div>\n </div>\n );\n});\n"],"names":["MultiSelectHeader","label","clearTrigger","onClear","jsxs","styles","jsx","Label","Button","MultiSelect","scrollable","noBorder","header","children","Fragment","clsx","MultiSelectItem","AddLinkForm","forwardRef","onCloseHandler","onSaveHandler","isLink","ref","t","useTranslation","url","setUrl","useState","linkText","setLinkText","showLinktextField","setShowLinktextField","urlError","setUrlError","linkTextError","setLinkTextError","firstField","useRef","linkId","useId","textId","handleOpenUrl","ensureHttps","handleUrl","event","handleLinkText","validateUrl","validateUrlWithProtocol","validateLinkText","handleSave","resetForm","handleClose","setDefaults","linktext","focusFirstField","useImperativeHandle","FormField","InputField","Icon","FeedbackBox","AddTableForm","rowCount","setRowCount","columnCount","setColumnCount","rowId","columnId","handleDimentionChange","type","value","useEffect","handleResizeScroll","setScrollableContainers","removeScrollableContainers","TablePlugin","isActive","editor","useLexicalComposerContext","flyout","showFlyout","hideFlyout","isVisible","useFlyout","addTableForm","buttonRef","preventOpen","isVisibleRef","openFlyout","rect","flyoutOptions","closeFlyout","insertTable","nrOfRows","nrOfColumns","selection","$getSelection","tableNode","createTable","anchorNode","$isRangeSelection","$isNodeSelection","willBeNested","$getNearestNodeOfType","TableCellNode","availibleWidth","getEditorParrentCellWidth","getEditorContentWidth","DEFAULT_EDITOR_WIDTH","perCol","DEFAULT_COL_WIDTH","colWidths","tableWrapper","$createTableWrapperNode","$getRoot","firstDescendant","mutateTable","action","currentNode","$getTableCellNodeFromLexicalNode","$isTableCellNode","insertRow","deleteRow","insertColumn","deleteColumn","deleteTable","rows","columns","PREVENT_OPEN_DELAY","removeKeyboardShortcut","KEY_DOWN_COMMAND","COMMAND_PRIORITY_EDITOR","removeKeydown"],"mappings":"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"}
|
|
@@ -28,7 +28,9 @@ export interface CheckboxButtonBarProps {
|
|
|
28
28
|
disableGroup?: boolean;
|
|
29
29
|
/** `true` to sepearte each button in their own bordered container */
|
|
30
30
|
segmented?: boolean;
|
|
31
|
+
/** `true` sets forceSquared on all buttons */
|
|
32
|
+
forceSquared?: boolean;
|
|
31
33
|
onSetValues: (value: string[]) => void;
|
|
32
34
|
}
|
|
33
|
-
export declare const CheckboxButtonBar: ({ checkboxes, defaultValues, label, labelPosition, required, notValidated, notValidatedText, actAsRadioButtonBar, footerText, disableGroup, segmented, onSetValues, }: CheckboxButtonBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare const CheckboxButtonBar: ({ checkboxes, defaultValues, label, labelPosition, required, notValidated, notValidatedText, actAsRadioButtonBar, footerText, disableGroup, segmented, forceSquared, onSetValues, }: CheckboxButtonBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
34
36
|
export {};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
1
|
+
import { jsxs as F, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { useState as S } from "react";
|
|
3
3
|
import { c as _ } from "../../clsx-OuTLNxxd.js";
|
|
4
|
-
import { Label as
|
|
5
|
-
import { FeedbackBox as
|
|
6
|
-
import { ControlsButton as
|
|
7
|
-
import '../../assets/CheckboxButtonBar.css';const
|
|
4
|
+
import { Label as L } from "../Label/Label.js";
|
|
5
|
+
import { FeedbackBox as $ } from "../FeedbackBox/FeedbackBox.js";
|
|
6
|
+
import { ControlsButton as C } from "../ControlsButton/ControlsButton.js";
|
|
7
|
+
import '../../assets/CheckboxButtonBar.css';const e = {
|
|
8
8
|
"checkbox-button-bar__container": "_checkbox-button-bar__container_u8hmc_1",
|
|
9
9
|
"checkbox-button-bar__container--label-left": "_checkbox-button-bar__container--label-left_u8hmc_6",
|
|
10
10
|
"checkbox-button-bar__container--label-top": "_checkbox-button-bar__container--label-top_u8hmc_12",
|
|
@@ -13,60 +13,61 @@ import '../../assets/CheckboxButtonBar.css';const c = {
|
|
|
13
13
|
"checkbox-button-bar__row": "_checkbox-button-bar__row_u8hmc_18",
|
|
14
14
|
"checkbox-button-bar__row--not-validated": "_checkbox-button-bar__row--not-validated_u8hmc_39",
|
|
15
15
|
"checkbox-button-bar__footer": "_checkbox-button-bar__footer_u8hmc_43"
|
|
16
|
-
},
|
|
17
|
-
checkboxes:
|
|
18
|
-
defaultValues:
|
|
19
|
-
label:
|
|
20
|
-
labelPosition:
|
|
21
|
-
required:
|
|
16
|
+
}, J = ({
|
|
17
|
+
checkboxes: m,
|
|
18
|
+
defaultValues: r,
|
|
19
|
+
label: u,
|
|
20
|
+
labelPosition: y = "top",
|
|
21
|
+
required: j = !1,
|
|
22
22
|
notValidated: x = !1,
|
|
23
23
|
notValidatedText: n = "",
|
|
24
24
|
actAsRadioButtonBar: a = !1,
|
|
25
25
|
footerText: d = "",
|
|
26
26
|
disableGroup: f = !1,
|
|
27
27
|
segmented: p = !1,
|
|
28
|
-
|
|
28
|
+
forceSquared: w = !1,
|
|
29
|
+
onSetValues: g
|
|
29
30
|
}) => {
|
|
30
|
-
const [h,
|
|
31
|
-
|
|
32
|
-
),
|
|
31
|
+
const [h, v] = S(
|
|
32
|
+
r && !a ? r.map(String) : r && a ? r.slice(0, 1) : []
|
|
33
|
+
), N = (c) => {
|
|
33
34
|
let o = h;
|
|
34
|
-
a ? (
|
|
35
|
+
a ? (v([c]), g([c])) : (o.includes(c) ? o = o.filter((b) => b !== c) : o = [...o, c], v(o), g(o));
|
|
35
36
|
};
|
|
36
|
-
return /* @__PURE__ */
|
|
37
|
+
return /* @__PURE__ */ F(
|
|
37
38
|
"div",
|
|
38
39
|
{
|
|
39
40
|
className: _(
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
e["checkbox-button-bar__container"],
|
|
42
|
+
e[`checkbox-button-bar__container--label-${y}`]
|
|
42
43
|
),
|
|
43
44
|
children: [
|
|
44
|
-
|
|
45
|
+
u && /* @__PURE__ */ t(L, { htmlFor: "", required: j, children: u }),
|
|
45
46
|
/* @__PURE__ */ t(
|
|
46
47
|
"div",
|
|
47
48
|
{
|
|
48
|
-
className: _(
|
|
49
|
-
[
|
|
49
|
+
className: _(e["checkbox-button-bar__row-container"], {
|
|
50
|
+
[e["checkbox-button-bar__row-container--segmented"]]: p
|
|
50
51
|
}),
|
|
51
|
-
children: p ?
|
|
52
|
+
children: p ? m.map(({ label: c, value: o, prefix: b, tooltip: l, tooltipPosition: i, disabled: s }) => /* @__PURE__ */ t(
|
|
52
53
|
"div",
|
|
53
54
|
{
|
|
54
|
-
className: _(
|
|
55
|
-
[
|
|
55
|
+
className: _(e["checkbox-button-bar__row"], {
|
|
56
|
+
[e["checkbox-button-bar__row--not-validated"]]: x || n
|
|
56
57
|
}),
|
|
57
58
|
children: /* @__PURE__ */ t(
|
|
58
|
-
|
|
59
|
+
C,
|
|
59
60
|
{
|
|
60
61
|
type: "checkbox",
|
|
61
|
-
label:
|
|
62
|
-
prefix:
|
|
62
|
+
label: c,
|
|
63
|
+
prefix: b,
|
|
63
64
|
tooltip: l,
|
|
64
65
|
tooltipPosition: i,
|
|
65
|
-
forceSquared:
|
|
66
|
+
forceSquared: w,
|
|
66
67
|
value: o,
|
|
67
68
|
checked: h.includes(o),
|
|
68
|
-
disabled:
|
|
69
|
-
onSetValue: (
|
|
69
|
+
disabled: s || f,
|
|
70
|
+
onSetValue: (k) => N(k.target.value)
|
|
70
71
|
}
|
|
71
72
|
)
|
|
72
73
|
},
|
|
@@ -74,22 +75,22 @@ import '../../assets/CheckboxButtonBar.css';const c = {
|
|
|
74
75
|
)) : /* @__PURE__ */ t(
|
|
75
76
|
"div",
|
|
76
77
|
{
|
|
77
|
-
className: _(
|
|
78
|
-
[
|
|
78
|
+
className: _(e["checkbox-button-bar__row"], {
|
|
79
|
+
[e["checkbox-button-bar__row--not-validated"]]: x || n
|
|
79
80
|
}),
|
|
80
|
-
children:
|
|
81
|
-
|
|
81
|
+
children: m.map(({ label: c, value: o, prefix: b, tooltip: l, tooltipPosition: i, disabled: s }) => /* @__PURE__ */ t(
|
|
82
|
+
C,
|
|
82
83
|
{
|
|
83
84
|
type: "checkbox",
|
|
84
|
-
label:
|
|
85
|
-
prefix:
|
|
85
|
+
label: c,
|
|
86
|
+
prefix: b,
|
|
86
87
|
tooltip: l,
|
|
87
88
|
tooltipPosition: i,
|
|
88
|
-
forceSquared:
|
|
89
|
+
forceSquared: w,
|
|
89
90
|
value: o,
|
|
90
91
|
checked: h.includes(o),
|
|
91
|
-
disabled:
|
|
92
|
-
onSetValue: (
|
|
92
|
+
disabled: s || f,
|
|
93
|
+
onSetValue: (k) => N(k.target.value)
|
|
93
94
|
},
|
|
94
95
|
o
|
|
95
96
|
))
|
|
@@ -97,13 +98,13 @@ import '../../assets/CheckboxButtonBar.css';const c = {
|
|
|
97
98
|
)
|
|
98
99
|
}
|
|
99
100
|
),
|
|
100
|
-
d && /* @__PURE__ */ t("div", { className:
|
|
101
|
-
n !== "" && /* @__PURE__ */ t(
|
|
101
|
+
d && /* @__PURE__ */ t("div", { className: e["checkbox-button-bar__footer"], children: d }),
|
|
102
|
+
n !== "" && /* @__PURE__ */ t($, { level: "error", feedback: n })
|
|
102
103
|
]
|
|
103
104
|
}
|
|
104
105
|
);
|
|
105
106
|
};
|
|
106
107
|
export {
|
|
107
|
-
|
|
108
|
+
J as CheckboxButtonBar
|
|
108
109
|
};
|
|
109
110
|
//# sourceMappingURL=CheckboxButtonBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxButtonBar.js","sources":["../../../src/components/CheckboxButtonBar/CheckboxButtonBar.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { ReactNode } from 'react';\n\nimport styles from './CheckboxButtonBar.module.css';\n\nimport { Label } from 'components/Label';\nimport { FeedbackBox } from 'components/FeedbackBox';\nimport { ControlsButton } from 'components/ControlsButton';\n\ntype CheckboxProps = {\n label: string | ReactNode;\n value: string;\n prefix?: string;\n tooltip?: ReactNode;\n tooltipPosition?: 'left' | 'center' | 'right';\n disabled?: boolean;\n};\n\nexport interface CheckboxButtonBarProps {\n /** array with objects with label, value, prefix and disabled*/\n checkboxes: CheckboxProps[];\n //** array with value(s) */\n defaultValues?: string[];\n label?: string;\n /** 'top' | 'left' */\n labelPosition?: 'top' | 'left';\n /** `true` to show an asterisk to indicate an item is required; otherwise, `false`. */\n required?: boolean;\n /** `true` to color border red to show missing in validation; otherwise, `false`. */\n notValidated?: boolean;\n /** error text to display under the bar */\n notValidatedText?: string;\n /** returns an array with only one value */\n actAsRadioButtonBar?: boolean;\n /** optional footer text */\n footerText?: string;\n /** disables all checkboxes in the bar */\n disableGroup?: boolean;\n /** `true` to sepearte each button in their own bordered container */\n segmented?: boolean;\n onSetValues: (value: string[]) => void;\n}\n\nexport const CheckboxButtonBar = ({\n checkboxes,\n defaultValues,\n label,\n labelPosition = 'top',\n required = false,\n notValidated = false,\n notValidatedText = '',\n actAsRadioButtonBar = false,\n footerText = '',\n disableGroup = false,\n segmented = false,\n onSetValues,\n}: CheckboxButtonBarProps) => {\n const [currentValues, setCurrentValues] = useState<string[]>(\n defaultValues && !actAsRadioButtonBar\n ? defaultValues.map(String)\n : defaultValues && actAsRadioButtonBar\n ? defaultValues.slice(0, 1)\n : []\n );\n\n const handleChange = (value: string) => {\n let values = currentValues;\n\n if (actAsRadioButtonBar) {\n setCurrentValues([value]);\n onSetValues([value]);\n } else {\n if (values.includes(value)) {\n values = values.filter((val) => val !== value);\n } else {\n values = [...values, value];\n }\n setCurrentValues(values);\n onSetValues(values);\n }\n };\n\n return (\n <div\n className={clsx(\n styles['checkbox-button-bar__container'],\n styles[`checkbox-button-bar__container--label-${labelPosition}`]\n )}\n >\n {label && (\n <Label htmlFor=\"\" required={required}>\n {label}\n </Label>\n )}\n\n <div\n className={clsx(styles['checkbox-button-bar__row-container'], {\n [styles['checkbox-button-bar__row-container--segmented']]: segmented,\n })}\n >\n {segmented ? (\n checkboxes.map(({ label, value, prefix, tooltip, tooltipPosition, disabled }) => (\n <div\n key={value}\n className={clsx(styles['checkbox-button-bar__row'], {\n [styles['checkbox-button-bar__row--not-validated']]: notValidated || notValidatedText,\n })}\n >\n <ControlsButton\n type=\"checkbox\"\n label={label}\n prefix={prefix}\n tooltip={tooltip}\n tooltipPosition={tooltipPosition}\n forceSquared={
|
|
1
|
+
{"version":3,"file":"CheckboxButtonBar.js","sources":["../../../src/components/CheckboxButtonBar/CheckboxButtonBar.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { ReactNode } from 'react';\n\nimport styles from './CheckboxButtonBar.module.css';\n\nimport { Label } from 'components/Label';\nimport { FeedbackBox } from 'components/FeedbackBox';\nimport { ControlsButton } from 'components/ControlsButton';\n\ntype CheckboxProps = {\n label: string | ReactNode;\n value: string;\n prefix?: string;\n tooltip?: ReactNode;\n tooltipPosition?: 'left' | 'center' | 'right';\n disabled?: boolean;\n};\n\nexport interface CheckboxButtonBarProps {\n /** array with objects with label, value, prefix and disabled*/\n checkboxes: CheckboxProps[];\n //** array with value(s) */\n defaultValues?: string[];\n label?: string;\n /** 'top' | 'left' */\n labelPosition?: 'top' | 'left';\n /** `true` to show an asterisk to indicate an item is required; otherwise, `false`. */\n required?: boolean;\n /** `true` to color border red to show missing in validation; otherwise, `false`. */\n notValidated?: boolean;\n /** error text to display under the bar */\n notValidatedText?: string;\n /** returns an array with only one value */\n actAsRadioButtonBar?: boolean;\n /** optional footer text */\n footerText?: string;\n /** disables all checkboxes in the bar */\n disableGroup?: boolean;\n /** `true` to sepearte each button in their own bordered container */\n segmented?: boolean;\n /** `true` sets forceSquared on all buttons */\n forceSquared?: boolean;\n onSetValues: (value: string[]) => void;\n}\n\nexport const CheckboxButtonBar = ({\n checkboxes,\n defaultValues,\n label,\n labelPosition = 'top',\n required = false,\n notValidated = false,\n notValidatedText = '',\n actAsRadioButtonBar = false,\n footerText = '',\n disableGroup = false,\n segmented = false,\n forceSquared = false,\n onSetValues,\n}: CheckboxButtonBarProps) => {\n const [currentValues, setCurrentValues] = useState<string[]>(\n defaultValues && !actAsRadioButtonBar\n ? defaultValues.map(String)\n : defaultValues && actAsRadioButtonBar\n ? defaultValues.slice(0, 1)\n : []\n );\n\n const handleChange = (value: string) => {\n let values = currentValues;\n\n if (actAsRadioButtonBar) {\n setCurrentValues([value]);\n onSetValues([value]);\n } else {\n if (values.includes(value)) {\n values = values.filter((val) => val !== value);\n } else {\n values = [...values, value];\n }\n setCurrentValues(values);\n onSetValues(values);\n }\n };\n\n return (\n <div\n className={clsx(\n styles['checkbox-button-bar__container'],\n styles[`checkbox-button-bar__container--label-${labelPosition}`]\n )}\n >\n {label && (\n <Label htmlFor=\"\" required={required}>\n {label}\n </Label>\n )}\n\n <div\n className={clsx(styles['checkbox-button-bar__row-container'], {\n [styles['checkbox-button-bar__row-container--segmented']]: segmented,\n })}\n >\n {segmented ? (\n checkboxes.map(({ label, value, prefix, tooltip, tooltipPosition, disabled }) => (\n <div\n key={value}\n className={clsx(styles['checkbox-button-bar__row'], {\n [styles['checkbox-button-bar__row--not-validated']]: notValidated || notValidatedText,\n })}\n >\n <ControlsButton\n type=\"checkbox\"\n label={label}\n prefix={prefix}\n tooltip={tooltip}\n tooltipPosition={tooltipPosition}\n forceSquared={forceSquared}\n value={value}\n checked={currentValues.includes(value)}\n disabled={disabled || disableGroup}\n onSetValue={(event) => handleChange(event.target.value)}\n />\n </div>\n ))\n ) : (\n <div\n className={clsx(styles['checkbox-button-bar__row'], {\n [styles['checkbox-button-bar__row--not-validated']]: notValidated || notValidatedText,\n })}\n >\n {checkboxes.map(({ label, value, prefix, tooltip, tooltipPosition, disabled }) => (\n <ControlsButton\n key={value}\n type=\"checkbox\"\n label={label}\n prefix={prefix}\n tooltip={tooltip}\n tooltipPosition={tooltipPosition}\n forceSquared={forceSquared}\n value={value}\n checked={currentValues.includes(value)}\n disabled={disabled || disableGroup}\n onSetValue={(event) => handleChange(event.target.value)}\n />\n ))}\n </div>\n )}\n </div>\n\n {footerText && <div className={styles['checkbox-button-bar__footer']}>{footerText}</div>}\n {notValidatedText !== '' && <FeedbackBox level=\"error\" feedback={notValidatedText} />}\n </div>\n );\n};\n"],"names":["CheckboxButtonBar","checkboxes","defaultValues","label","labelPosition","required","notValidated","notValidatedText","actAsRadioButtonBar","footerText","disableGroup","segmented","forceSquared","onSetValues","currentValues","setCurrentValues","useState","handleChange","value","values","val","jsxs","clsx","styles","jsx","Label","prefix","tooltip","tooltipPosition","disabled","ControlsButton","event","FeedbackBox"],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ import "../IconButton/IconButton.js";
|
|
|
18
18
|
import "../Input/Input.js";
|
|
19
19
|
import "../InputField/InputField.js";
|
|
20
20
|
import "react-router";
|
|
21
|
-
import "../../TablePlugin-
|
|
21
|
+
import "../../TablePlugin-FTN9oxnI.js";
|
|
22
22
|
import "../RteEditor/Providers/LanguageProvider.js";
|
|
23
23
|
import "../RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js";
|
|
24
24
|
import "../RteEditor/hooks/components/Flyout.js";
|
|
@@ -17,7 +17,7 @@ import "../IconButton/IconButton.js";
|
|
|
17
17
|
import "../Input/Input.js";
|
|
18
18
|
import "../InputField/InputField.js";
|
|
19
19
|
import "react-router";
|
|
20
|
-
import "../../TablePlugin-
|
|
20
|
+
import "../../TablePlugin-FTN9oxnI.js";
|
|
21
21
|
import "../RteEditor/Providers/LanguageProvider.js";
|
|
22
22
|
import "../RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js";
|
|
23
23
|
import "../RteEditor/hooks/components/Flyout.js";
|
|
@@ -17,7 +17,7 @@ import "../GridRow/GridRow.js";
|
|
|
17
17
|
import "../IconButton/IconButton.js";
|
|
18
18
|
import "../Input/Input.js";
|
|
19
19
|
import "react-router";
|
|
20
|
-
import "../../TablePlugin-
|
|
20
|
+
import "../../TablePlugin-FTN9oxnI.js";
|
|
21
21
|
import "../RteEditor/Providers/LanguageProvider.js";
|
|
22
22
|
import "../RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js";
|
|
23
23
|
import "../RteEditor/hooks/components/Flyout.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as S, jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import { l as d } from "../../index-DvUwfXNb.js";
|
|
3
3
|
import { useState as p } from "react";
|
|
4
|
-
import { M as e } from "../../TablePlugin-
|
|
4
|
+
import { M as e } from "../../TablePlugin-FTN9oxnI.js";
|
|
5
5
|
import { Container as M } from "../../storyComponents/Container/Container.js";
|
|
6
6
|
const C = `
|
|
7
7
|
// MultiSelectHeader can be added optionally
|
|
@@ -16,7 +16,7 @@ import "../../IconButton/IconButton.js";
|
|
|
16
16
|
import "../../Input/Input.js";
|
|
17
17
|
import "../../InputField/InputField.js";
|
|
18
18
|
import "react-router";
|
|
19
|
-
import { a as B } from "../../../TablePlugin-
|
|
19
|
+
import { a as B } from "../../../TablePlugin-FTN9oxnI.js";
|
|
20
20
|
import "../../RteEditor/Providers/LanguageProvider.js";
|
|
21
21
|
import "../../RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js";
|
|
22
22
|
import "../../RteEditor/hooks/components/Flyout.js";
|