@tiptap/extension-table 2.9.1 → 2.10.0

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.
@@ -1,13 +1,14 @@
1
1
  import { Node as ProseMirrorNode } from '@tiptap/pm/model';
2
2
  import { NodeView } from '@tiptap/pm/view';
3
- export declare function updateColumns(node: ProseMirrorNode, colgroup: Element, table: Element, cellMinWidth: number, overrideCol?: number, overrideValue?: any): void;
3
+ export declare function updateColumns(node: ProseMirrorNode, colgroup: HTMLTableColElement, // <colgroup> has the same prototype as <col>
4
+ table: HTMLTableElement, cellMinWidth: number, overrideCol?: number, overrideValue?: number): void;
4
5
  export declare class TableView implements NodeView {
5
6
  node: ProseMirrorNode;
6
7
  cellMinWidth: number;
7
- dom: Element;
8
- table: Element;
9
- colgroup: Element;
10
- contentDOM: Element;
8
+ dom: HTMLDivElement;
9
+ table: HTMLTableElement;
10
+ colgroup: HTMLTableColElement;
11
+ contentDOM: HTMLTableSectionElement;
11
12
  constructor(node: ProseMirrorNode, cellMinWidth: number);
12
13
  update(node: ProseMirrorNode): boolean;
13
14
  ignoreMutation(mutation: MutationRecord | {
@@ -1 +1 @@
1
- {"version":3,"file":"TableView.d.ts","sourceRoot":"","sources":["../src/TableView.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,wBAAgB,aAAa,CAC3B,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,GAAG,QA8CpB;AAED,qBAAa,SAAU,YAAW,QAAQ;IACxC,IAAI,EAAE,eAAe,CAAA;IAErB,YAAY,EAAE,MAAM,CAAA;IAEpB,GAAG,EAAE,OAAO,CAAA;IAEZ,KAAK,EAAE,OAAO,CAAA;IAEd,QAAQ,EAAE,OAAO,CAAA;IAEjB,UAAU,EAAE,OAAO,CAAA;gBAEP,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM;IAWvD,MAAM,CAAC,IAAI,EAAE,eAAe;IAW5B,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;CAMjF"}
1
+ {"version":3,"file":"TableView.d.ts","sourceRoot":"","sources":["../src/TableView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI1C,wBAAgB,aAAa,CAC3B,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,mBAAmB,EAAE,6CAA6C;AAC5E,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,QAwDvB;AAED,qBAAa,SAAU,YAAW,QAAQ;IACxC,IAAI,EAAE,eAAe,CAAA;IAErB,YAAY,EAAE,MAAM,CAAA;IAEpB,GAAG,EAAE,cAAc,CAAA;IAEnB,KAAK,EAAE,gBAAgB,CAAA;IAEvB,QAAQ,EAAE,mBAAmB,CAAA;IAE7B,UAAU,EAAE,uBAAuB,CAAA;gBAEvB,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM;IAWvD,MAAM,CAAC,IAAI,EAAE,eAAe;IAW5B,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;CAMjF"}
package/dist/index.cjs CHANGED
@@ -6,34 +6,51 @@ var core = require('@tiptap/core');
6
6
  var state = require('@tiptap/pm/state');
7
7
  var tables = require('@tiptap/pm/tables');
8
8
 
9
- function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {
9
+ function getColStyleDeclaration(minWidth, width) {
10
+ if (width) {
11
+ // apply the stored width unless it is below the configured minimum cell width
12
+ return ['width', `${Math.max(width, minWidth)}px`];
13
+ }
14
+ // set the minimum with on the column if it has no stored width
15
+ return ['min-width', `${minWidth}px`];
16
+ }
17
+
18
+ function updateColumns(node, colgroup, // <colgroup> has the same prototype as <col>
19
+ table, cellMinWidth, overrideCol, overrideValue) {
20
+ var _a;
10
21
  let totalWidth = 0;
11
22
  let fixedWidth = true;
12
23
  let nextDOM = colgroup.firstChild;
13
24
  const row = node.firstChild;
14
- for (let i = 0, col = 0; i < row.childCount; i += 1) {
15
- const { colspan, colwidth } = row.child(i).attrs;
16
- for (let j = 0; j < colspan; j += 1, col += 1) {
17
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
18
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
19
- totalWidth += hasWidth || cellMinWidth;
20
- if (!hasWidth) {
21
- fixedWidth = false;
22
- }
23
- if (!nextDOM) {
24
- colgroup.appendChild(document.createElement('col')).style.width = cssWidth;
25
- }
26
- else {
27
- if (nextDOM.style.width !== cssWidth) {
28
- nextDOM.style.width = cssWidth;
25
+ if (row !== null) {
26
+ for (let i = 0, col = 0; i < row.childCount; i += 1) {
27
+ const { colspan, colwidth } = row.child(i).attrs;
28
+ for (let j = 0; j < colspan; j += 1, col += 1) {
29
+ const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]);
30
+ const cssWidth = hasWidth ? `${hasWidth}px` : '';
31
+ totalWidth += hasWidth || cellMinWidth;
32
+ if (!hasWidth) {
33
+ fixedWidth = false;
34
+ }
35
+ if (!nextDOM) {
36
+ const colElement = document.createElement('col');
37
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
38
+ colElement.style.setProperty(propertyKey, propertyValue);
39
+ colgroup.appendChild(colElement);
40
+ }
41
+ else {
42
+ if (nextDOM.style.width !== cssWidth) {
43
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
44
+ nextDOM.style.setProperty(propertyKey, propertyValue);
45
+ }
46
+ nextDOM = nextDOM.nextSibling;
29
47
  }
30
- nextDOM = nextDOM.nextSibling;
31
48
  }
32
49
  }
33
50
  }
34
51
  while (nextDOM) {
35
52
  const after = nextDOM.nextSibling;
36
- nextDOM.parentNode.removeChild(nextDOM);
53
+ (_a = nextDOM.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(nextDOM);
37
54
  nextDOM = after;
38
55
  }
39
56
  if (fixedWidth) {
@@ -70,15 +87,6 @@ class TableView {
70
87
  }
71
88
  }
72
89
 
73
- /**
74
- * Creates a colgroup element for a table node in ProseMirror.
75
- *
76
- * @param node - The ProseMirror node representing the table.
77
- * @param cellMinWidth - The minimum width of a cell in the table.
78
- * @param overrideCol - (Optional) The index of the column to override the width of.
79
- * @param overrideValue - (Optional) The width value to use for the overridden column.
80
- * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
81
- */
82
90
  function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
83
91
  let totalWidth = 0;
84
92
  let fixedWidth = true;
@@ -91,12 +99,15 @@ function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
91
99
  const { colspan, colwidth } = row.child(i).attrs;
92
100
  for (let j = 0; j < colspan; j += 1, col += 1) {
93
101
  const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
94
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
95
102
  totalWidth += hasWidth || cellMinWidth;
96
103
  if (!hasWidth) {
97
104
  fixedWidth = false;
98
105
  }
99
- cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}]);
106
+ const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth);
107
+ cols.push([
108
+ 'col',
109
+ { style: `${property}: ${value}` },
110
+ ]);
100
111
  }
101
112
  }
102
113
  const tableWidth = fixedWidth ? `${totalWidth}px` : '';
@@ -324,6 +335,7 @@ const Table = core.Node.create({
324
335
  tables.columnResizing({
325
336
  handleWidth: this.options.handleWidth,
326
337
  cellMinWidth: this.options.cellMinWidth,
338
+ defaultCellMinWidth: this.options.cellMinWidth,
327
339
  View: this.options.View,
328
340
  lastColumnResizable: this.options.lastColumnResizable,
329
341
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/TableView.ts","../src/utilities/createColGroup.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["// @ts-nocheck\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: Element,\n table: Element,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n colgroup.appendChild(document.createElement('col')).style.width = cssWidth\n } else {\n if (nextDOM.style.width !== cssWidth) {\n nextDOM.style.width = cssWidth\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: Element\n\n table: Element\n\n colgroup: Element\n\n contentDOM: Element\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n const cols: DOMOutputSpec[] = []\n const row = node.firstChild\n\n if (!row) {\n return {}\n }\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}])\n }\n }\n\n const tableWidth = fixedWidth ? `${totalWidth}px` : ''\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`\n\n const colgroup: DOMOutputSpec = ['colgroup', {}, ...cols]\n\n return { colgroup, tableWidth, tableMinWidth }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell.js'\nimport { getTableNodeTypes } from './getTableNodeTypes.js'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection.js'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { EditorView, NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView.js'\nimport { createColGroup } from './utilities/createColGroup.js'\nimport { createTable } from './utilities/createTable.js'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected.js'\n\nexport interface TableOptions {\n /**\n * HTML attributes for the table element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n\n /**\n * Enables the resizing of tables.\n * @default false\n * @example true\n */\n resizable: boolean\n\n /**\n * The width of the resize handle.\n * @default 5\n * @example 10\n */\n handleWidth: number\n\n /**\n * The minimum width of a cell.\n * @default 25\n * @example 50\n */\n cellMinWidth: number\n\n /**\n * The node view to render the table.\n * @default TableView\n */\n View: (new (node: ProseMirrorNode, cellMinWidth: number, view: EditorView) => NodeView) | null\n\n /**\n * Enables the resizing of the last column.\n * @default true\n * @example false\n */\n lastColumnResizable: boolean\n\n /**\n * Allow table node selection.\n * @default false\n * @example true\n */\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n /**\n * Insert a table\n * @param options The table attributes\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n */\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n\n /**\n * Add a column before the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnBefore()\n */\n addColumnBefore: () => ReturnType\n\n /**\n * Add a column after the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnAfter()\n */\n addColumnAfter: () => ReturnType\n\n /**\n * Delete the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteColumn()\n */\n deleteColumn: () => ReturnType\n\n /**\n * Add a row before the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowBefore()\n */\n addRowBefore: () => ReturnType\n\n /**\n * Add a row after the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowAfter()\n */\n addRowAfter: () => ReturnType\n\n /**\n * Delete the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteRow()\n */\n deleteRow: () => ReturnType\n\n /**\n * Delete the current table\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteTable()\n */\n deleteTable: () => ReturnType\n\n /**\n * Merge the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeCells()\n */\n mergeCells: () => ReturnType\n\n /**\n * Split the currently selected cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.splitCell()\n */\n splitCell: () => ReturnType\n\n /**\n * Toggle the header column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderColumn()\n */\n toggleHeaderColumn: () => ReturnType\n\n /**\n * Toggle the header row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderRow()\n */\n toggleHeaderRow: () => ReturnType\n\n /**\n * Toggle the header cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderCell()\n */\n toggleHeaderCell: () => ReturnType\n\n /**\n * Merge or split the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeOrSplit()\n */\n mergeOrSplit: () => ReturnType\n\n /**\n * Set a cell attribute\n * @param name The attribute name\n * @param value The attribute value\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellAttribute('align', 'right')\n */\n setCellAttribute: (name: string, value: any) => ReturnType\n\n /**\n * Moves the selection to the next cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToNextCell()\n */\n goToNextCell: () => ReturnType\n\n /**\n * Moves the selection to the previous cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToPreviousCell()\n */\n goToPreviousCell: () => ReturnType\n\n /**\n * Try to fix the table structure if necessary\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.fixTables()\n */\n fixTables: () => ReturnType\n\n /**\n * Set a cell selection inside the current table\n * @param position The cell position\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellSelection({ anchorCell: 1, headCell: 2 })\n */\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * A string or function to determine the role of the table.\n * @default 'table'\n * @example () => 'table'\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(\n node,\n this.options.cellMinWidth,\n )\n\n const table: DOMOutputSpec = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ]\n\n return table\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.from + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":["CellSelection","findParentNodeClosestToPos","Node","mergeAttributes","TextSelection","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","deleteTable","mergeCells","splitCell","toggleHeader","toggleHeaderCell","setCellAttr","goToNextCell","fixTables","columnResizing","tableEditing","callOrReturn","getExtensionField"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utilities/colStyle.ts","../src/TableView.ts","../src/utilities/createColGroup.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["export function getColStyleDeclaration(minWidth: number, width: number | undefined): [string, string] {\n if (width) {\n // apply the stored width unless it is below the configured minimum cell width\n return ['width', `${Math.max(width, minWidth)}px`]\n }\n\n // set the minimum with on the column if it has no stored width\n return ['min-width', `${minWidth}px`]\n\n}\n","import { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nimport { getColStyleDeclaration } from './utilities/colStyle.js'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: HTMLTableColElement, // <colgroup> has the same prototype as <col>\n table: HTMLTableElement,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n if (row !== null) {\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]) as number | undefined\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n const colElement = document.createElement('col')\n\n const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth)\n\n colElement.style.setProperty(propertyKey, propertyValue)\n\n colgroup.appendChild(colElement)\n } else {\n if ((nextDOM as HTMLTableColElement).style.width !== cssWidth) {\n const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n\n (nextDOM as HTMLTableColElement).style.setProperty(propertyKey, propertyValue)\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode?.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: HTMLDivElement\n\n table: HTMLTableElement\n\n colgroup: HTMLTableColElement\n\n contentDOM: HTMLTableSectionElement\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\n\nimport { getColStyleDeclaration } from './colStyle.js'\n\nexport type ColGroup = {\n colgroup: DOMOutputSpec\n tableWidth: string\n tableMinWidth: string\n} | Record<string, never>;\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n): ColGroup\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol: number,\n overrideValue: number,\n): ColGroup\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n): ColGroup {\n let totalWidth = 0\n let fixedWidth = true\n const cols: DOMOutputSpec[] = []\n const row = node.firstChild\n\n if (!row) {\n return {}\n }\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j] as number | undefined\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth)\n\n cols.push([\n 'col',\n { style: `${property}: ${value}` },\n ])\n }\n }\n\n const tableWidth = fixedWidth ? `${totalWidth}px` : ''\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`\n\n const colgroup: DOMOutputSpec = ['colgroup', {}, ...cols]\n\n return { colgroup, tableWidth, tableMinWidth }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell.js'\nimport { getTableNodeTypes } from './getTableNodeTypes.js'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection.js'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { EditorView, NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView.js'\nimport { createColGroup } from './utilities/createColGroup.js'\nimport { createTable } from './utilities/createTable.js'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected.js'\n\nexport interface TableOptions {\n /**\n * HTML attributes for the table element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n\n /**\n * Enables the resizing of tables.\n * @default false\n * @example true\n */\n resizable: boolean\n\n /**\n * The width of the resize handle.\n * @default 5\n * @example 10\n */\n handleWidth: number\n\n /**\n * The minimum width of a cell.\n * @default 25\n * @example 50\n */\n cellMinWidth: number\n\n /**\n * The node view to render the table.\n * @default TableView\n */\n View: (new (node: ProseMirrorNode, cellMinWidth: number, view: EditorView) => NodeView) | null\n\n /**\n * Enables the resizing of the last column.\n * @default true\n * @example false\n */\n lastColumnResizable: boolean\n\n /**\n * Allow table node selection.\n * @default false\n * @example true\n */\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n /**\n * Insert a table\n * @param options The table attributes\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n */\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n\n /**\n * Add a column before the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnBefore()\n */\n addColumnBefore: () => ReturnType\n\n /**\n * Add a column after the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnAfter()\n */\n addColumnAfter: () => ReturnType\n\n /**\n * Delete the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteColumn()\n */\n deleteColumn: () => ReturnType\n\n /**\n * Add a row before the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowBefore()\n */\n addRowBefore: () => ReturnType\n\n /**\n * Add a row after the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowAfter()\n */\n addRowAfter: () => ReturnType\n\n /**\n * Delete the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteRow()\n */\n deleteRow: () => ReturnType\n\n /**\n * Delete the current table\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteTable()\n */\n deleteTable: () => ReturnType\n\n /**\n * Merge the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeCells()\n */\n mergeCells: () => ReturnType\n\n /**\n * Split the currently selected cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.splitCell()\n */\n splitCell: () => ReturnType\n\n /**\n * Toggle the header column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderColumn()\n */\n toggleHeaderColumn: () => ReturnType\n\n /**\n * Toggle the header row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderRow()\n */\n toggleHeaderRow: () => ReturnType\n\n /**\n * Toggle the header cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderCell()\n */\n toggleHeaderCell: () => ReturnType\n\n /**\n * Merge or split the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeOrSplit()\n */\n mergeOrSplit: () => ReturnType\n\n /**\n * Set a cell attribute\n * @param name The attribute name\n * @param value The attribute value\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellAttribute('align', 'right')\n */\n setCellAttribute: (name: string, value: any) => ReturnType\n\n /**\n * Moves the selection to the next cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToNextCell()\n */\n goToNextCell: () => ReturnType\n\n /**\n * Moves the selection to the previous cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToPreviousCell()\n */\n goToPreviousCell: () => ReturnType\n\n /**\n * Try to fix the table structure if necessary\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.fixTables()\n */\n fixTables: () => ReturnType\n\n /**\n * Set a cell selection inside the current table\n * @param position The cell position\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellSelection({ anchorCell: 1, headCell: 2 })\n */\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * A string or function to determine the role of the table.\n * @default 'table'\n * @example () => 'table'\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(\n node,\n this.options.cellMinWidth,\n )\n\n const table: DOMOutputSpec = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ]\n\n return table\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.from + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n defaultCellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":["CellSelection","findParentNodeClosestToPos","Node","mergeAttributes","TextSelection","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","deleteTable","mergeCells","splitCell","toggleHeader","toggleHeaderCell","setCellAttr","goToNextCell","fixTables","columnResizing","tableEditing","callOrReturn","getExtensionField"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,34 +2,51 @@ import { findParentNodeClosestToPos, Node, mergeAttributes, callOrReturn, getExt
2
2
  import { TextSelection } from '@tiptap/pm/state';
3
3
  import { CellSelection, addColumnBefore, addColumnAfter, deleteColumn, addRowBefore, addRowAfter, deleteRow, deleteTable, mergeCells, splitCell, toggleHeader, toggleHeaderCell, setCellAttr, goToNextCell, fixTables, columnResizing, tableEditing } from '@tiptap/pm/tables';
4
4
 
5
- function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {
5
+ function getColStyleDeclaration(minWidth, width) {
6
+ if (width) {
7
+ // apply the stored width unless it is below the configured minimum cell width
8
+ return ['width', `${Math.max(width, minWidth)}px`];
9
+ }
10
+ // set the minimum with on the column if it has no stored width
11
+ return ['min-width', `${minWidth}px`];
12
+ }
13
+
14
+ function updateColumns(node, colgroup, // <colgroup> has the same prototype as <col>
15
+ table, cellMinWidth, overrideCol, overrideValue) {
16
+ var _a;
6
17
  let totalWidth = 0;
7
18
  let fixedWidth = true;
8
19
  let nextDOM = colgroup.firstChild;
9
20
  const row = node.firstChild;
10
- for (let i = 0, col = 0; i < row.childCount; i += 1) {
11
- const { colspan, colwidth } = row.child(i).attrs;
12
- for (let j = 0; j < colspan; j += 1, col += 1) {
13
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
14
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
15
- totalWidth += hasWidth || cellMinWidth;
16
- if (!hasWidth) {
17
- fixedWidth = false;
18
- }
19
- if (!nextDOM) {
20
- colgroup.appendChild(document.createElement('col')).style.width = cssWidth;
21
- }
22
- else {
23
- if (nextDOM.style.width !== cssWidth) {
24
- nextDOM.style.width = cssWidth;
21
+ if (row !== null) {
22
+ for (let i = 0, col = 0; i < row.childCount; i += 1) {
23
+ const { colspan, colwidth } = row.child(i).attrs;
24
+ for (let j = 0; j < colspan; j += 1, col += 1) {
25
+ const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]);
26
+ const cssWidth = hasWidth ? `${hasWidth}px` : '';
27
+ totalWidth += hasWidth || cellMinWidth;
28
+ if (!hasWidth) {
29
+ fixedWidth = false;
30
+ }
31
+ if (!nextDOM) {
32
+ const colElement = document.createElement('col');
33
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
34
+ colElement.style.setProperty(propertyKey, propertyValue);
35
+ colgroup.appendChild(colElement);
36
+ }
37
+ else {
38
+ if (nextDOM.style.width !== cssWidth) {
39
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
40
+ nextDOM.style.setProperty(propertyKey, propertyValue);
41
+ }
42
+ nextDOM = nextDOM.nextSibling;
25
43
  }
26
- nextDOM = nextDOM.nextSibling;
27
44
  }
28
45
  }
29
46
  }
30
47
  while (nextDOM) {
31
48
  const after = nextDOM.nextSibling;
32
- nextDOM.parentNode.removeChild(nextDOM);
49
+ (_a = nextDOM.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(nextDOM);
33
50
  nextDOM = after;
34
51
  }
35
52
  if (fixedWidth) {
@@ -66,15 +83,6 @@ class TableView {
66
83
  }
67
84
  }
68
85
 
69
- /**
70
- * Creates a colgroup element for a table node in ProseMirror.
71
- *
72
- * @param node - The ProseMirror node representing the table.
73
- * @param cellMinWidth - The minimum width of a cell in the table.
74
- * @param overrideCol - (Optional) The index of the column to override the width of.
75
- * @param overrideValue - (Optional) The width value to use for the overridden column.
76
- * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
77
- */
78
86
  function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
79
87
  let totalWidth = 0;
80
88
  let fixedWidth = true;
@@ -87,12 +95,15 @@ function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
87
95
  const { colspan, colwidth } = row.child(i).attrs;
88
96
  for (let j = 0; j < colspan; j += 1, col += 1) {
89
97
  const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
90
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
91
98
  totalWidth += hasWidth || cellMinWidth;
92
99
  if (!hasWidth) {
93
100
  fixedWidth = false;
94
101
  }
95
- cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}]);
102
+ const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth);
103
+ cols.push([
104
+ 'col',
105
+ { style: `${property}: ${value}` },
106
+ ]);
96
107
  }
97
108
  }
98
109
  const tableWidth = fixedWidth ? `${totalWidth}px` : '';
@@ -320,6 +331,7 @@ const Table = Node.create({
320
331
  columnResizing({
321
332
  handleWidth: this.options.handleWidth,
322
333
  cellMinWidth: this.options.cellMinWidth,
334
+ defaultCellMinWidth: this.options.cellMinWidth,
323
335
  View: this.options.View,
324
336
  lastColumnResizable: this.options.lastColumnResizable,
325
337
  }),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/TableView.ts","../src/utilities/createColGroup.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["// @ts-nocheck\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: Element,\n table: Element,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n colgroup.appendChild(document.createElement('col')).style.width = cssWidth\n } else {\n if (nextDOM.style.width !== cssWidth) {\n nextDOM.style.width = cssWidth\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: Element\n\n table: Element\n\n colgroup: Element\n\n contentDOM: Element\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n const cols: DOMOutputSpec[] = []\n const row = node.firstChild\n\n if (!row) {\n return {}\n }\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}])\n }\n }\n\n const tableWidth = fixedWidth ? `${totalWidth}px` : ''\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`\n\n const colgroup: DOMOutputSpec = ['colgroup', {}, ...cols]\n\n return { colgroup, tableWidth, tableMinWidth }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell.js'\nimport { getTableNodeTypes } from './getTableNodeTypes.js'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection.js'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { EditorView, NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView.js'\nimport { createColGroup } from './utilities/createColGroup.js'\nimport { createTable } from './utilities/createTable.js'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected.js'\n\nexport interface TableOptions {\n /**\n * HTML attributes for the table element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n\n /**\n * Enables the resizing of tables.\n * @default false\n * @example true\n */\n resizable: boolean\n\n /**\n * The width of the resize handle.\n * @default 5\n * @example 10\n */\n handleWidth: number\n\n /**\n * The minimum width of a cell.\n * @default 25\n * @example 50\n */\n cellMinWidth: number\n\n /**\n * The node view to render the table.\n * @default TableView\n */\n View: (new (node: ProseMirrorNode, cellMinWidth: number, view: EditorView) => NodeView) | null\n\n /**\n * Enables the resizing of the last column.\n * @default true\n * @example false\n */\n lastColumnResizable: boolean\n\n /**\n * Allow table node selection.\n * @default false\n * @example true\n */\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n /**\n * Insert a table\n * @param options The table attributes\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n */\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n\n /**\n * Add a column before the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnBefore()\n */\n addColumnBefore: () => ReturnType\n\n /**\n * Add a column after the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnAfter()\n */\n addColumnAfter: () => ReturnType\n\n /**\n * Delete the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteColumn()\n */\n deleteColumn: () => ReturnType\n\n /**\n * Add a row before the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowBefore()\n */\n addRowBefore: () => ReturnType\n\n /**\n * Add a row after the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowAfter()\n */\n addRowAfter: () => ReturnType\n\n /**\n * Delete the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteRow()\n */\n deleteRow: () => ReturnType\n\n /**\n * Delete the current table\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteTable()\n */\n deleteTable: () => ReturnType\n\n /**\n * Merge the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeCells()\n */\n mergeCells: () => ReturnType\n\n /**\n * Split the currently selected cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.splitCell()\n */\n splitCell: () => ReturnType\n\n /**\n * Toggle the header column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderColumn()\n */\n toggleHeaderColumn: () => ReturnType\n\n /**\n * Toggle the header row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderRow()\n */\n toggleHeaderRow: () => ReturnType\n\n /**\n * Toggle the header cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderCell()\n */\n toggleHeaderCell: () => ReturnType\n\n /**\n * Merge or split the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeOrSplit()\n */\n mergeOrSplit: () => ReturnType\n\n /**\n * Set a cell attribute\n * @param name The attribute name\n * @param value The attribute value\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellAttribute('align', 'right')\n */\n setCellAttribute: (name: string, value: any) => ReturnType\n\n /**\n * Moves the selection to the next cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToNextCell()\n */\n goToNextCell: () => ReturnType\n\n /**\n * Moves the selection to the previous cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToPreviousCell()\n */\n goToPreviousCell: () => ReturnType\n\n /**\n * Try to fix the table structure if necessary\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.fixTables()\n */\n fixTables: () => ReturnType\n\n /**\n * Set a cell selection inside the current table\n * @param position The cell position\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellSelection({ anchorCell: 1, headCell: 2 })\n */\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * A string or function to determine the role of the table.\n * @default 'table'\n * @example () => 'table'\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(\n node,\n this.options.cellMinWidth,\n )\n\n const table: DOMOutputSpec = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ]\n\n return table\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.from + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utilities/colStyle.ts","../src/TableView.ts","../src/utilities/createColGroup.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["export function getColStyleDeclaration(minWidth: number, width: number | undefined): [string, string] {\n if (width) {\n // apply the stored width unless it is below the configured minimum cell width\n return ['width', `${Math.max(width, minWidth)}px`]\n }\n\n // set the minimum with on the column if it has no stored width\n return ['min-width', `${minWidth}px`]\n\n}\n","import { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nimport { getColStyleDeclaration } from './utilities/colStyle.js'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: HTMLTableColElement, // <colgroup> has the same prototype as <col>\n table: HTMLTableElement,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n if (row !== null) {\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]) as number | undefined\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n const colElement = document.createElement('col')\n\n const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth)\n\n colElement.style.setProperty(propertyKey, propertyValue)\n\n colgroup.appendChild(colElement)\n } else {\n if ((nextDOM as HTMLTableColElement).style.width !== cssWidth) {\n const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n\n (nextDOM as HTMLTableColElement).style.setProperty(propertyKey, propertyValue)\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode?.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: HTMLDivElement\n\n table: HTMLTableElement\n\n colgroup: HTMLTableColElement\n\n contentDOM: HTMLTableSectionElement\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\n\nimport { getColStyleDeclaration } from './colStyle.js'\n\nexport type ColGroup = {\n colgroup: DOMOutputSpec\n tableWidth: string\n tableMinWidth: string\n} | Record<string, never>;\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n): ColGroup\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol: number,\n overrideValue: number,\n): ColGroup\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n): ColGroup {\n let totalWidth = 0\n let fixedWidth = true\n const cols: DOMOutputSpec[] = []\n const row = node.firstChild\n\n if (!row) {\n return {}\n }\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j] as number | undefined\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth)\n\n cols.push([\n 'col',\n { style: `${property}: ${value}` },\n ])\n }\n }\n\n const tableWidth = fixedWidth ? `${totalWidth}px` : ''\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`\n\n const colgroup: DOMOutputSpec = ['colgroup', {}, ...cols]\n\n return { colgroup, tableWidth, tableMinWidth }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell.js'\nimport { getTableNodeTypes } from './getTableNodeTypes.js'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection.js'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { EditorView, NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView.js'\nimport { createColGroup } from './utilities/createColGroup.js'\nimport { createTable } from './utilities/createTable.js'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected.js'\n\nexport interface TableOptions {\n /**\n * HTML attributes for the table element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n\n /**\n * Enables the resizing of tables.\n * @default false\n * @example true\n */\n resizable: boolean\n\n /**\n * The width of the resize handle.\n * @default 5\n * @example 10\n */\n handleWidth: number\n\n /**\n * The minimum width of a cell.\n * @default 25\n * @example 50\n */\n cellMinWidth: number\n\n /**\n * The node view to render the table.\n * @default TableView\n */\n View: (new (node: ProseMirrorNode, cellMinWidth: number, view: EditorView) => NodeView) | null\n\n /**\n * Enables the resizing of the last column.\n * @default true\n * @example false\n */\n lastColumnResizable: boolean\n\n /**\n * Allow table node selection.\n * @default false\n * @example true\n */\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n /**\n * Insert a table\n * @param options The table attributes\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n */\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n\n /**\n * Add a column before the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnBefore()\n */\n addColumnBefore: () => ReturnType\n\n /**\n * Add a column after the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnAfter()\n */\n addColumnAfter: () => ReturnType\n\n /**\n * Delete the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteColumn()\n */\n deleteColumn: () => ReturnType\n\n /**\n * Add a row before the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowBefore()\n */\n addRowBefore: () => ReturnType\n\n /**\n * Add a row after the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowAfter()\n */\n addRowAfter: () => ReturnType\n\n /**\n * Delete the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteRow()\n */\n deleteRow: () => ReturnType\n\n /**\n * Delete the current table\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteTable()\n */\n deleteTable: () => ReturnType\n\n /**\n * Merge the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeCells()\n */\n mergeCells: () => ReturnType\n\n /**\n * Split the currently selected cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.splitCell()\n */\n splitCell: () => ReturnType\n\n /**\n * Toggle the header column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderColumn()\n */\n toggleHeaderColumn: () => ReturnType\n\n /**\n * Toggle the header row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderRow()\n */\n toggleHeaderRow: () => ReturnType\n\n /**\n * Toggle the header cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderCell()\n */\n toggleHeaderCell: () => ReturnType\n\n /**\n * Merge or split the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeOrSplit()\n */\n mergeOrSplit: () => ReturnType\n\n /**\n * Set a cell attribute\n * @param name The attribute name\n * @param value The attribute value\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellAttribute('align', 'right')\n */\n setCellAttribute: (name: string, value: any) => ReturnType\n\n /**\n * Moves the selection to the next cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToNextCell()\n */\n goToNextCell: () => ReturnType\n\n /**\n * Moves the selection to the previous cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToPreviousCell()\n */\n goToPreviousCell: () => ReturnType\n\n /**\n * Try to fix the table structure if necessary\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.fixTables()\n */\n fixTables: () => ReturnType\n\n /**\n * Set a cell selection inside the current table\n * @param position The cell position\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellSelection({ anchorCell: 1, headCell: 2 })\n */\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * A string or function to determine the role of the table.\n * @default 'table'\n * @example () => 'table'\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(\n node,\n this.options.cellMinWidth,\n )\n\n const table: DOMOutputSpec = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ]\n\n return table\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.from + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n defaultCellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":[],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -4,34 +4,51 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/extension-table"] = {}, global.core, global.state, global.tables));
5
5
  })(this, (function (exports, core, state, tables) { 'use strict';
6
6
 
7
- function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {
7
+ function getColStyleDeclaration(minWidth, width) {
8
+ if (width) {
9
+ // apply the stored width unless it is below the configured minimum cell width
10
+ return ['width', `${Math.max(width, minWidth)}px`];
11
+ }
12
+ // set the minimum with on the column if it has no stored width
13
+ return ['min-width', `${minWidth}px`];
14
+ }
15
+
16
+ function updateColumns(node, colgroup, // <colgroup> has the same prototype as <col>
17
+ table, cellMinWidth, overrideCol, overrideValue) {
18
+ var _a;
8
19
  let totalWidth = 0;
9
20
  let fixedWidth = true;
10
21
  let nextDOM = colgroup.firstChild;
11
22
  const row = node.firstChild;
12
- for (let i = 0, col = 0; i < row.childCount; i += 1) {
13
- const { colspan, colwidth } = row.child(i).attrs;
14
- for (let j = 0; j < colspan; j += 1, col += 1) {
15
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
16
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
17
- totalWidth += hasWidth || cellMinWidth;
18
- if (!hasWidth) {
19
- fixedWidth = false;
20
- }
21
- if (!nextDOM) {
22
- colgroup.appendChild(document.createElement('col')).style.width = cssWidth;
23
- }
24
- else {
25
- if (nextDOM.style.width !== cssWidth) {
26
- nextDOM.style.width = cssWidth;
23
+ if (row !== null) {
24
+ for (let i = 0, col = 0; i < row.childCount; i += 1) {
25
+ const { colspan, colwidth } = row.child(i).attrs;
26
+ for (let j = 0; j < colspan; j += 1, col += 1) {
27
+ const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]);
28
+ const cssWidth = hasWidth ? `${hasWidth}px` : '';
29
+ totalWidth += hasWidth || cellMinWidth;
30
+ if (!hasWidth) {
31
+ fixedWidth = false;
32
+ }
33
+ if (!nextDOM) {
34
+ const colElement = document.createElement('col');
35
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
36
+ colElement.style.setProperty(propertyKey, propertyValue);
37
+ colgroup.appendChild(colElement);
38
+ }
39
+ else {
40
+ if (nextDOM.style.width !== cssWidth) {
41
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
42
+ nextDOM.style.setProperty(propertyKey, propertyValue);
43
+ }
44
+ nextDOM = nextDOM.nextSibling;
27
45
  }
28
- nextDOM = nextDOM.nextSibling;
29
46
  }
30
47
  }
31
48
  }
32
49
  while (nextDOM) {
33
50
  const after = nextDOM.nextSibling;
34
- nextDOM.parentNode.removeChild(nextDOM);
51
+ (_a = nextDOM.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(nextDOM);
35
52
  nextDOM = after;
36
53
  }
37
54
  if (fixedWidth) {
@@ -68,15 +85,6 @@
68
85
  }
69
86
  }
70
87
 
71
- /**
72
- * Creates a colgroup element for a table node in ProseMirror.
73
- *
74
- * @param node - The ProseMirror node representing the table.
75
- * @param cellMinWidth - The minimum width of a cell in the table.
76
- * @param overrideCol - (Optional) The index of the column to override the width of.
77
- * @param overrideValue - (Optional) The width value to use for the overridden column.
78
- * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
79
- */
80
88
  function createColGroup(node, cellMinWidth, overrideCol, overrideValue) {
81
89
  let totalWidth = 0;
82
90
  let fixedWidth = true;
@@ -89,12 +97,15 @@
89
97
  const { colspan, colwidth } = row.child(i).attrs;
90
98
  for (let j = 0; j < colspan; j += 1, col += 1) {
91
99
  const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];
92
- const cssWidth = hasWidth ? `${hasWidth}px` : '';
93
100
  totalWidth += hasWidth || cellMinWidth;
94
101
  if (!hasWidth) {
95
102
  fixedWidth = false;
96
103
  }
97
- cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}]);
104
+ const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth);
105
+ cols.push([
106
+ 'col',
107
+ { style: `${property}: ${value}` },
108
+ ]);
98
109
  }
99
110
  }
100
111
  const tableWidth = fixedWidth ? `${totalWidth}px` : '';
@@ -322,6 +333,7 @@
322
333
  tables.columnResizing({
323
334
  handleWidth: this.options.handleWidth,
324
335
  cellMinWidth: this.options.cellMinWidth,
336
+ defaultCellMinWidth: this.options.cellMinWidth,
325
337
  View: this.options.View,
326
338
  lastColumnResizable: this.options.lastColumnResizable,
327
339
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/TableView.ts","../src/utilities/createColGroup.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["// @ts-nocheck\nimport { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: Element,\n table: Element,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n colgroup.appendChild(document.createElement('col')).style.width = cssWidth\n } else {\n if (nextDOM.style.width !== cssWidth) {\n nextDOM.style.width = cssWidth\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: Element\n\n table: Element\n\n colgroup: Element\n\n contentDOM: Element\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: any,\n) {\n let totalWidth = 0\n let fixedWidth = true\n const cols: DOMOutputSpec[] = []\n const row = node.firstChild\n\n if (!row) {\n return {}\n }\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}])\n }\n }\n\n const tableWidth = fixedWidth ? `${totalWidth}px` : ''\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`\n\n const colgroup: DOMOutputSpec = ['colgroup', {}, ...cols]\n\n return { colgroup, tableWidth, tableMinWidth }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell.js'\nimport { getTableNodeTypes } from './getTableNodeTypes.js'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection.js'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { EditorView, NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView.js'\nimport { createColGroup } from './utilities/createColGroup.js'\nimport { createTable } from './utilities/createTable.js'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected.js'\n\nexport interface TableOptions {\n /**\n * HTML attributes for the table element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n\n /**\n * Enables the resizing of tables.\n * @default false\n * @example true\n */\n resizable: boolean\n\n /**\n * The width of the resize handle.\n * @default 5\n * @example 10\n */\n handleWidth: number\n\n /**\n * The minimum width of a cell.\n * @default 25\n * @example 50\n */\n cellMinWidth: number\n\n /**\n * The node view to render the table.\n * @default TableView\n */\n View: (new (node: ProseMirrorNode, cellMinWidth: number, view: EditorView) => NodeView) | null\n\n /**\n * Enables the resizing of the last column.\n * @default true\n * @example false\n */\n lastColumnResizable: boolean\n\n /**\n * Allow table node selection.\n * @default false\n * @example true\n */\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n /**\n * Insert a table\n * @param options The table attributes\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n */\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n\n /**\n * Add a column before the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnBefore()\n */\n addColumnBefore: () => ReturnType\n\n /**\n * Add a column after the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnAfter()\n */\n addColumnAfter: () => ReturnType\n\n /**\n * Delete the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteColumn()\n */\n deleteColumn: () => ReturnType\n\n /**\n * Add a row before the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowBefore()\n */\n addRowBefore: () => ReturnType\n\n /**\n * Add a row after the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowAfter()\n */\n addRowAfter: () => ReturnType\n\n /**\n * Delete the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteRow()\n */\n deleteRow: () => ReturnType\n\n /**\n * Delete the current table\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteTable()\n */\n deleteTable: () => ReturnType\n\n /**\n * Merge the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeCells()\n */\n mergeCells: () => ReturnType\n\n /**\n * Split the currently selected cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.splitCell()\n */\n splitCell: () => ReturnType\n\n /**\n * Toggle the header column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderColumn()\n */\n toggleHeaderColumn: () => ReturnType\n\n /**\n * Toggle the header row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderRow()\n */\n toggleHeaderRow: () => ReturnType\n\n /**\n * Toggle the header cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderCell()\n */\n toggleHeaderCell: () => ReturnType\n\n /**\n * Merge or split the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeOrSplit()\n */\n mergeOrSplit: () => ReturnType\n\n /**\n * Set a cell attribute\n * @param name The attribute name\n * @param value The attribute value\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellAttribute('align', 'right')\n */\n setCellAttribute: (name: string, value: any) => ReturnType\n\n /**\n * Moves the selection to the next cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToNextCell()\n */\n goToNextCell: () => ReturnType\n\n /**\n * Moves the selection to the previous cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToPreviousCell()\n */\n goToPreviousCell: () => ReturnType\n\n /**\n * Try to fix the table structure if necessary\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.fixTables()\n */\n fixTables: () => ReturnType\n\n /**\n * Set a cell selection inside the current table\n * @param position The cell position\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellSelection({ anchorCell: 1, headCell: 2 })\n */\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * A string or function to determine the role of the table.\n * @default 'table'\n * @example () => 'table'\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(\n node,\n this.options.cellMinWidth,\n )\n\n const table: DOMOutputSpec = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ]\n\n return table\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.from + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":["CellSelection","findParentNodeClosestToPos","Node","mergeAttributes","TextSelection","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","deleteTable","mergeCells","splitCell","toggleHeader","toggleHeaderCell","setCellAttr","goToNextCell","fixTables","columnResizing","tableEditing","callOrReturn","getExtensionField"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/utilities/colStyle.ts","../src/TableView.ts","../src/utilities/createColGroup.ts","../src/utilities/createCell.ts","../src/utilities/getTableNodeTypes.ts","../src/utilities/createTable.ts","../src/utilities/isCellSelection.ts","../src/utilities/deleteTableWhenAllCellsSelected.ts","../src/table.ts"],"sourcesContent":["export function getColStyleDeclaration(minWidth: number, width: number | undefined): [string, string] {\n if (width) {\n // apply the stored width unless it is below the configured minimum cell width\n return ['width', `${Math.max(width, minWidth)}px`]\n }\n\n // set the minimum with on the column if it has no stored width\n return ['min-width', `${minWidth}px`]\n\n}\n","import { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { NodeView } from '@tiptap/pm/view'\n\nimport { getColStyleDeclaration } from './utilities/colStyle.js'\n\nexport function updateColumns(\n node: ProseMirrorNode,\n colgroup: HTMLTableColElement, // <colgroup> has the same prototype as <col>\n table: HTMLTableElement,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n) {\n let totalWidth = 0\n let fixedWidth = true\n let nextDOM = colgroup.firstChild\n const row = node.firstChild\n\n if (row !== null) {\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]) as number | undefined\n const cssWidth = hasWidth ? `${hasWidth}px` : ''\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n if (!nextDOM) {\n const colElement = document.createElement('col')\n\n const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth)\n\n colElement.style.setProperty(propertyKey, propertyValue)\n\n colgroup.appendChild(colElement)\n } else {\n if ((nextDOM as HTMLTableColElement).style.width !== cssWidth) {\n const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n\n (nextDOM as HTMLTableColElement).style.setProperty(propertyKey, propertyValue)\n }\n\n nextDOM = nextDOM.nextSibling\n }\n }\n }\n }\n\n while (nextDOM) {\n const after = nextDOM.nextSibling\n\n nextDOM.parentNode?.removeChild(nextDOM)\n nextDOM = after\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`\n table.style.minWidth = ''\n } else {\n table.style.width = ''\n table.style.minWidth = `${totalWidth}px`\n }\n}\n\nexport class TableView implements NodeView {\n node: ProseMirrorNode\n\n cellMinWidth: number\n\n dom: HTMLDivElement\n\n table: HTMLTableElement\n\n colgroup: HTMLTableColElement\n\n contentDOM: HTMLTableSectionElement\n\n constructor(node: ProseMirrorNode, cellMinWidth: number) {\n this.node = node\n this.cellMinWidth = cellMinWidth\n this.dom = document.createElement('div')\n this.dom.className = 'tableWrapper'\n this.table = this.dom.appendChild(document.createElement('table'))\n this.colgroup = this.table.appendChild(document.createElement('colgroup'))\n updateColumns(node, this.colgroup, this.table, cellMinWidth)\n this.contentDOM = this.table.appendChild(document.createElement('tbody'))\n }\n\n update(node: ProseMirrorNode) {\n if (node.type !== this.node.type) {\n return false\n }\n\n this.node = node\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth)\n\n return true\n }\n\n ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return (\n mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target))\n )\n }\n}\n","import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\n\nimport { getColStyleDeclaration } from './colStyle.js'\n\nexport type ColGroup = {\n colgroup: DOMOutputSpec\n tableWidth: string\n tableMinWidth: string\n} | Record<string, never>;\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n): ColGroup\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol: number,\n overrideValue: number,\n): ColGroup\nexport function createColGroup(\n node: ProseMirrorNode,\n cellMinWidth: number,\n overrideCol?: number,\n overrideValue?: number,\n): ColGroup {\n let totalWidth = 0\n let fixedWidth = true\n const cols: DOMOutputSpec[] = []\n const row = node.firstChild\n\n if (!row) {\n return {}\n }\n\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs\n\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j] as number | undefined\n\n totalWidth += hasWidth || cellMinWidth\n\n if (!hasWidth) {\n fixedWidth = false\n }\n\n const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth)\n\n cols.push([\n 'col',\n { style: `${property}: ${value}` },\n ])\n }\n }\n\n const tableWidth = fixedWidth ? `${totalWidth}px` : ''\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`\n\n const colgroup: DOMOutputSpec = ['colgroup', {}, ...cols]\n\n return { colgroup, tableWidth, tableMinWidth }\n}\n","import { Fragment, Node as ProsemirrorNode, NodeType } from '@tiptap/pm/model'\n\nexport function createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode | null | undefined {\n if (cellContent) {\n return cellType.createChecked(null, cellContent)\n }\n\n return cellType.createAndFill()\n}\n","import { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getTableNodeTypes(schema: Schema): { [key: string]: NodeType } {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes\n }\n\n const roles: { [key: string]: NodeType } = {}\n\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type]\n\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType\n }\n })\n\n schema.cached.tableNodeTypes = roles\n\n return roles\n}\n","import { Fragment, Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'\n\nimport { createCell } from './createCell.js'\nimport { getTableNodeTypes } from './getTableNodeTypes.js'\n\nexport function createTable(\n schema: Schema,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = getTableNodeTypes(schema)\n const headerCells: ProsemirrorNode[] = []\n const cells: ProsemirrorNode[] = []\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows: ProsemirrorNode[] = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n","import { CellSelection } from '@tiptap/pm/tables'\n\nexport function isCellSelection(value: unknown): value is CellSelection {\n return value instanceof CellSelection\n}\n","import { findParentNodeClosestToPos, KeyboardShortcutCommand } from '@tiptap/core'\n\nimport { isCellSelection } from './isCellSelection.js'\n\nexport const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => {\n const { selection } = editor.state\n\n if (!isCellSelection(selection)) {\n return false\n }\n\n let cellCount = 0\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table'\n })\n\n table?.node.descendants(node => {\n if (node.type.name === 'table') {\n return false\n }\n\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1\n }\n })\n\n const allCellsSelected = cellCount === selection.ranges.length\n\n if (!allCellsSelected) {\n return false\n }\n\n editor.commands.deleteTable()\n\n return true\n}\n","import {\n callOrReturn, getExtensionField, mergeAttributes, Node, ParentConfig,\n} from '@tiptap/core'\nimport { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n CellSelection,\n columnResizing,\n deleteColumn,\n deleteRow,\n deleteTable,\n fixTables,\n goToNextCell,\n mergeCells,\n setCellAttr,\n splitCell,\n tableEditing,\n toggleHeader,\n toggleHeaderCell,\n} from '@tiptap/pm/tables'\nimport { EditorView, NodeView } from '@tiptap/pm/view'\n\nimport { TableView } from './TableView.js'\nimport { createColGroup } from './utilities/createColGroup.js'\nimport { createTable } from './utilities/createTable.js'\nimport { deleteTableWhenAllCellsSelected } from './utilities/deleteTableWhenAllCellsSelected.js'\n\nexport interface TableOptions {\n /**\n * HTML attributes for the table element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n\n /**\n * Enables the resizing of tables.\n * @default false\n * @example true\n */\n resizable: boolean\n\n /**\n * The width of the resize handle.\n * @default 5\n * @example 10\n */\n handleWidth: number\n\n /**\n * The minimum width of a cell.\n * @default 25\n * @example 50\n */\n cellMinWidth: number\n\n /**\n * The node view to render the table.\n * @default TableView\n */\n View: (new (node: ProseMirrorNode, cellMinWidth: number, view: EditorView) => NodeView) | null\n\n /**\n * Enables the resizing of the last column.\n * @default true\n * @example false\n */\n lastColumnResizable: boolean\n\n /**\n * Allow table node selection.\n * @default false\n * @example true\n */\n allowTableNodeSelection: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n table: {\n /**\n * Insert a table\n * @param options The table attributes\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n */\n insertTable: (options?: {\n rows?: number\n cols?: number\n withHeaderRow?: boolean\n }) => ReturnType\n\n /**\n * Add a column before the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnBefore()\n */\n addColumnBefore: () => ReturnType\n\n /**\n * Add a column after the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addColumnAfter()\n */\n addColumnAfter: () => ReturnType\n\n /**\n * Delete the current column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteColumn()\n */\n deleteColumn: () => ReturnType\n\n /**\n * Add a row before the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowBefore()\n */\n addRowBefore: () => ReturnType\n\n /**\n * Add a row after the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.addRowAfter()\n */\n addRowAfter: () => ReturnType\n\n /**\n * Delete the current row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteRow()\n */\n deleteRow: () => ReturnType\n\n /**\n * Delete the current table\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.deleteTable()\n */\n deleteTable: () => ReturnType\n\n /**\n * Merge the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeCells()\n */\n mergeCells: () => ReturnType\n\n /**\n * Split the currently selected cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.splitCell()\n */\n splitCell: () => ReturnType\n\n /**\n * Toggle the header column\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderColumn()\n */\n toggleHeaderColumn: () => ReturnType\n\n /**\n * Toggle the header row\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderRow()\n */\n toggleHeaderRow: () => ReturnType\n\n /**\n * Toggle the header cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.toggleHeaderCell()\n */\n toggleHeaderCell: () => ReturnType\n\n /**\n * Merge or split the currently selected cells\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.mergeOrSplit()\n */\n mergeOrSplit: () => ReturnType\n\n /**\n * Set a cell attribute\n * @param name The attribute name\n * @param value The attribute value\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellAttribute('align', 'right')\n */\n setCellAttribute: (name: string, value: any) => ReturnType\n\n /**\n * Moves the selection to the next cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToNextCell()\n */\n goToNextCell: () => ReturnType\n\n /**\n * Moves the selection to the previous cell\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.goToPreviousCell()\n */\n goToPreviousCell: () => ReturnType\n\n /**\n * Try to fix the table structure if necessary\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.fixTables()\n */\n fixTables: () => ReturnType\n\n /**\n * Set a cell selection inside the current table\n * @param position The cell position\n * @returns True if the command was successful, otherwise false\n * @example editor.commands.setCellSelection({ anchorCell: 1, headCell: 2 })\n */\n setCellSelection: (position: { anchorCell: number; headCell?: number }) => ReturnType\n }\n }\n\n interface NodeConfig<Options, Storage> {\n /**\n * A string or function to determine the role of the table.\n * @default 'table'\n * @example () => 'table'\n */\n tableRole?:\n | string\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options>>['tableRole']\n }) => string)\n }\n}\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nexport const Table = Node.create<TableOptions>({\n name: 'table',\n\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n }\n },\n\n content: 'tableRow+',\n\n tableRole: 'table',\n\n isolating: true,\n\n group: 'block',\n\n parseHTML() {\n return [{ tag: 'table' }]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(\n node,\n this.options.cellMinWidth,\n )\n\n const table: DOMOutputSpec = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ]\n\n return table\n },\n\n addCommands() {\n return {\n insertTable:\n ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow)\n\n if (dispatch) {\n const offset = tr.selection.from + 1\n\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)))\n }\n\n return true\n },\n addColumnBefore:\n () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch)\n },\n addColumnAfter:\n () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch)\n },\n deleteColumn:\n () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch)\n },\n addRowBefore:\n () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch)\n },\n addRowAfter:\n () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch)\n },\n deleteRow:\n () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch)\n },\n deleteTable:\n () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch)\n },\n mergeCells:\n () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch)\n },\n splitCell:\n () => ({ state, dispatch }) => {\n return splitCell(state, dispatch)\n },\n toggleHeaderColumn:\n () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch)\n },\n toggleHeaderRow:\n () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch)\n },\n toggleHeaderCell:\n () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch)\n },\n mergeOrSplit:\n () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true\n }\n\n return splitCell(state, dispatch)\n },\n setCellAttribute:\n (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch)\n },\n goToNextCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch)\n },\n goToPreviousCell:\n () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch)\n },\n fixTables:\n () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state)\n }\n\n return true\n },\n setCellSelection:\n position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell)\n\n // @ts-ignore\n tr.setSelection(selection)\n }\n\n return true\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true\n }\n\n if (!this.editor.can().addRowAfter()) {\n return false\n }\n\n return this.editor.chain().addRowAfter().goToNextCell().run()\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n }\n },\n\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable\n\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n defaultCellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ]\n },\n\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n }\n },\n})\n"],"names":["CellSelection","findParentNodeClosestToPos","Node","mergeAttributes","TextSelection","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","deleteTable","mergeCells","splitCell","toggleHeader","toggleHeaderCell","setCellAttr","goToNextCell","fixTables","columnResizing","tableEditing","callOrReturn","getExtensionField"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getColStyleDeclaration(minWidth: number, width: number | undefined): [string, string];
2
+ //# sourceMappingURL=colStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colStyle.d.ts","sourceRoot":"","sources":["../../src/utilities/colStyle.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CASpG"}
@@ -1,4 +1,9 @@
1
- import { Node as ProseMirrorNode } from '@tiptap/pm/model';
1
+ import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model';
2
+ export type ColGroup = {
3
+ colgroup: DOMOutputSpec;
4
+ tableWidth: string;
5
+ tableMinWidth: string;
6
+ } | Record<string, never>;
2
7
  /**
3
8
  * Creates a colgroup element for a table node in ProseMirror.
4
9
  *
@@ -8,13 +13,6 @@ import { Node as ProseMirrorNode } from '@tiptap/pm/model';
8
13
  * @param overrideValue - (Optional) The width value to use for the overridden column.
9
14
  * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
10
15
  */
11
- export declare function createColGroup(node: ProseMirrorNode, cellMinWidth: number, overrideCol?: number, overrideValue?: any): {
12
- colgroup?: undefined;
13
- tableWidth?: undefined;
14
- tableMinWidth?: undefined;
15
- } | {
16
- colgroup: readonly [string, ...any[]];
17
- tableWidth: string;
18
- tableMinWidth: string;
19
- };
16
+ export declare function createColGroup(node: ProseMirrorNode, cellMinWidth: number): ColGroup;
17
+ export declare function createColGroup(node: ProseMirrorNode, cellMinWidth: number, overrideCol: number, overrideValue: number): ColGroup;
20
18
  //# sourceMappingURL=createColGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createColGroup.d.ts","sourceRoot":"","sources":["../../src/utilities/createColGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,IAAI,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEzE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,GAAG;;;;;;;;EAkCpB"}
1
+ {"version":3,"file":"createColGroup.d.ts","sourceRoot":"","sources":["../../src/utilities/createColGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIzE,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1B;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,GACnB,QAAQ,CAAA;AACX,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,QAAQ,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiptap/extension-table",
3
3
  "description": "table extension for tiptap",
4
- "version": "2.9.1",
4
+ "version": "2.10.0",
5
5
  "homepage": "https://tiptap.dev",
6
6
  "keywords": [
7
7
  "tiptap",
@@ -29,8 +29,8 @@
29
29
  "dist"
30
30
  ],
31
31
  "devDependencies": {
32
- "@tiptap/core": "^2.9.1",
33
- "@tiptap/pm": "^2.9.1"
32
+ "@tiptap/core": "^2.10.0",
33
+ "@tiptap/pm": "^2.10.0"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@tiptap/core": "^2.7.0",
package/src/TableView.ts CHANGED
@@ -1,41 +1,52 @@
1
- // @ts-nocheck
2
1
  import { Node as ProseMirrorNode } from '@tiptap/pm/model'
3
2
  import { NodeView } from '@tiptap/pm/view'
4
3
 
4
+ import { getColStyleDeclaration } from './utilities/colStyle.js'
5
+
5
6
  export function updateColumns(
6
7
  node: ProseMirrorNode,
7
- colgroup: Element,
8
- table: Element,
8
+ colgroup: HTMLTableColElement, // <colgroup> has the same prototype as <col>
9
+ table: HTMLTableElement,
9
10
  cellMinWidth: number,
10
11
  overrideCol?: number,
11
- overrideValue?: any,
12
+ overrideValue?: number,
12
13
  ) {
13
14
  let totalWidth = 0
14
15
  let fixedWidth = true
15
16
  let nextDOM = colgroup.firstChild
16
17
  const row = node.firstChild
17
18
 
18
- for (let i = 0, col = 0; i < row.childCount; i += 1) {
19
- const { colspan, colwidth } = row.child(i).attrs
20
-
21
- for (let j = 0; j < colspan; j += 1, col += 1) {
22
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]
23
- const cssWidth = hasWidth ? `${hasWidth}px` : ''
19
+ if (row !== null) {
20
+ for (let i = 0, col = 0; i < row.childCount; i += 1) {
21
+ const { colspan, colwidth } = row.child(i).attrs
24
22
 
25
- totalWidth += hasWidth || cellMinWidth
23
+ for (let j = 0; j < colspan; j += 1, col += 1) {
24
+ const hasWidth = overrideCol === col ? overrideValue : (colwidth && colwidth[j]) as number | undefined
25
+ const cssWidth = hasWidth ? `${hasWidth}px` : ''
26
26
 
27
- if (!hasWidth) {
28
- fixedWidth = false
29
- }
27
+ totalWidth += hasWidth || cellMinWidth
30
28
 
31
- if (!nextDOM) {
32
- colgroup.appendChild(document.createElement('col')).style.width = cssWidth
33
- } else {
34
- if (nextDOM.style.width !== cssWidth) {
35
- nextDOM.style.width = cssWidth
29
+ if (!hasWidth) {
30
+ fixedWidth = false
36
31
  }
37
32
 
38
- nextDOM = nextDOM.nextSibling
33
+ if (!nextDOM) {
34
+ const colElement = document.createElement('col')
35
+
36
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth)
37
+
38
+ colElement.style.setProperty(propertyKey, propertyValue)
39
+
40
+ colgroup.appendChild(colElement)
41
+ } else {
42
+ if ((nextDOM as HTMLTableColElement).style.width !== cssWidth) {
43
+ const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);
44
+
45
+ (nextDOM as HTMLTableColElement).style.setProperty(propertyKey, propertyValue)
46
+ }
47
+
48
+ nextDOM = nextDOM.nextSibling
49
+ }
39
50
  }
40
51
  }
41
52
  }
@@ -43,7 +54,7 @@ export function updateColumns(
43
54
  while (nextDOM) {
44
55
  const after = nextDOM.nextSibling
45
56
 
46
- nextDOM.parentNode.removeChild(nextDOM)
57
+ nextDOM.parentNode?.removeChild(nextDOM)
47
58
  nextDOM = after
48
59
  }
49
60
 
@@ -61,13 +72,13 @@ export class TableView implements NodeView {
61
72
 
62
73
  cellMinWidth: number
63
74
 
64
- dom: Element
75
+ dom: HTMLDivElement
65
76
 
66
- table: Element
77
+ table: HTMLTableElement
67
78
 
68
- colgroup: Element
79
+ colgroup: HTMLTableColElement
69
80
 
70
- contentDOM: Element
81
+ contentDOM: HTMLTableSectionElement
71
82
 
72
83
  constructor(node: ProseMirrorNode, cellMinWidth: number) {
73
84
  this.node = node
package/src/table.ts CHANGED
@@ -431,6 +431,7 @@ export const Table = Node.create<TableOptions>({
431
431
  columnResizing({
432
432
  handleWidth: this.options.handleWidth,
433
433
  cellMinWidth: this.options.cellMinWidth,
434
+ defaultCellMinWidth: this.options.cellMinWidth,
434
435
  View: this.options.View,
435
436
  lastColumnResizable: this.options.lastColumnResizable,
436
437
  }),
@@ -0,0 +1,10 @@
1
+ export function getColStyleDeclaration(minWidth: number, width: number | undefined): [string, string] {
2
+ if (width) {
3
+ // apply the stored width unless it is below the configured minimum cell width
4
+ return ['width', `${Math.max(width, minWidth)}px`]
5
+ }
6
+
7
+ // set the minimum with on the column if it has no stored width
8
+ return ['min-width', `${minWidth}px`]
9
+
10
+ }
@@ -1,5 +1,13 @@
1
1
  import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'
2
2
 
3
+ import { getColStyleDeclaration } from './colStyle.js'
4
+
5
+ export type ColGroup = {
6
+ colgroup: DOMOutputSpec
7
+ tableWidth: string
8
+ tableMinWidth: string
9
+ } | Record<string, never>;
10
+
3
11
  /**
4
12
  * Creates a colgroup element for a table node in ProseMirror.
5
13
  *
@@ -9,12 +17,22 @@ import { DOMOutputSpec, Node as ProseMirrorNode } from '@tiptap/pm/model'
9
17
  * @param overrideValue - (Optional) The width value to use for the overridden column.
10
18
  * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.
11
19
  */
20
+ export function createColGroup(
21
+ node: ProseMirrorNode,
22
+ cellMinWidth: number,
23
+ ): ColGroup
24
+ export function createColGroup(
25
+ node: ProseMirrorNode,
26
+ cellMinWidth: number,
27
+ overrideCol: number,
28
+ overrideValue: number,
29
+ ): ColGroup
12
30
  export function createColGroup(
13
31
  node: ProseMirrorNode,
14
32
  cellMinWidth: number,
15
33
  overrideCol?: number,
16
- overrideValue?: any,
17
- ) {
34
+ overrideValue?: number,
35
+ ): ColGroup {
18
36
  let totalWidth = 0
19
37
  let fixedWidth = true
20
38
  const cols: DOMOutputSpec[] = []
@@ -28,8 +46,7 @@ export function createColGroup(
28
46
  const { colspan, colwidth } = row.child(i).attrs
29
47
 
30
48
  for (let j = 0; j < colspan; j += 1, col += 1) {
31
- const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]
32
- const cssWidth = hasWidth ? `${hasWidth}px` : ''
49
+ const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j] as number | undefined
33
50
 
34
51
  totalWidth += hasWidth || cellMinWidth
35
52
 
@@ -37,7 +54,12 @@ export function createColGroup(
37
54
  fixedWidth = false
38
55
  }
39
56
 
40
- cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}])
57
+ const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth)
58
+
59
+ cols.push([
60
+ 'col',
61
+ { style: `${property}: ${value}` },
62
+ ])
41
63
  }
42
64
  }
43
65