+export function $getTableRowsFromSelection(selection: BaseSelection|null): TableRowNode[] {
+ const cells = $getTableCellsFromSelection(selection);
+ const rowsByKey: Record<string, TableRowNode> = {};
+ for (const cell of cells) {
+ const row = cell.getParent();
+ if ($isTableRowNode(row)) {
+ rowsByKey[row.getKey()] = row;
+ }
+ }
+
+ return Object.values(rowsByKey);
+}
+
+export function $getTableFromSelection(selection: BaseSelection|null): TableNode|null {
+ const cells = $getTableCellsFromSelection(selection);
+ if (cells.length === 0) {
+ return null;
+ }
+
+ const table = $getParentOfType(cells[0], $isTableNode);
+ if ($isTableNode(table)) {
+ return table;
+ }
+
+ return null;
+}
+
+export function $clearTableSizes(table: TableNode): void {
+ table.setColWidths([]);
+
+ // TODO - Extra form things once table properties and extra things
+ // are supported
+
+ for (const row of table.getChildren()) {
+ if (!$isTableRowNode(row)) {
+ continue;
+ }
+
+ const rowStyles = row.getStyles();
+ rowStyles.delete('height');
+ rowStyles.delete('width');
+ row.setStyles(rowStyles);
+
+ const cells = row.getChildren().filter(c => $isTableCellNode(c));
+ for (const cell of cells) {
+ const cellStyles = cell.getStyles();
+ cellStyles.delete('height');
+ cellStyles.delete('width');
+ cell.setStyles(cellStyles);
+ cell.clearWidth();
+ }
+ }
+}
+
+export function $clearTableFormatting(table: TableNode): void {
+ table.setColWidths([]);
+ table.setStyles(new Map);