@openleaf-editor/plugins-table 0.1.0-beta.1 → 0.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands.d.ts +101 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +445 -0
- package/dist/commands.js.map +1 -0
- package/dist/dialogs.d.ts +14 -0
- package/dist/dialogs.d.ts.map +1 -0
- package/dist/dialogs.js +159 -0
- package/dist/dialogs.js.map +1 -0
- package/dist/grid.d.ts +15 -0
- package/dist/grid.d.ts.map +1 -0
- package/dist/grid.js +225 -0
- package/dist/grid.js.map +1 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +4 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +7 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -105
- package/dist/index.js.map +1 -1
- package/dist/menu.d.ts +15 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +195 -0
- package/dist/menu.js.map +1 -0
- package/dist/styles.d.ts +9 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +93 -0
- package/dist/styles.js.map +1 -0
- package/package.json +4 -4
package/dist/dialogs.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table, row and cell property dialogs.
|
|
3
|
+
*
|
|
4
|
+
* These are the editing surface for attributes the schema already stores:
|
|
5
|
+
* border, padding, background, alignment, caption and column widths. A caption
|
|
6
|
+
* is still an attribute rather than a child node -- see tables.ts -- so this
|
|
7
|
+
* dialog is how an author changes it without an upstream cell-map fix.
|
|
8
|
+
*/
|
|
9
|
+
import { parseDeclarations } from '@openleaf-editor/core';
|
|
10
|
+
import { promptFields } from '@openleaf-editor/ui';
|
|
11
|
+
import { TableMap } from 'prosemirror-tables';
|
|
12
|
+
import { captionHtmlFromText, captionTextFromHtml, colorOrNull, colgroupHtmlWithWidths, emptyToNull, findCell, findRow, findTable, mergeStyle, setCellAttrs, setRowAttrs, setTableAttrs, setTableCaption, styleValueOrNull, widthsFromColgroup, } from './commands.js';
|
|
13
|
+
const ALIGN_OPTIONS = [
|
|
14
|
+
{ value: '', label: 'Default' },
|
|
15
|
+
{ value: 'left', label: 'Left' },
|
|
16
|
+
{ value: 'center', label: 'Center' },
|
|
17
|
+
{ value: 'right', label: 'Right' },
|
|
18
|
+
];
|
|
19
|
+
const VALIGN_OPTIONS = [
|
|
20
|
+
{ value: '', label: 'Default' },
|
|
21
|
+
{ value: 'top', label: 'Top' },
|
|
22
|
+
{ value: 'middle', label: 'Middle' },
|
|
23
|
+
{ value: 'bottom', label: 'Bottom' },
|
|
24
|
+
];
|
|
25
|
+
function select(name, label, value, options) {
|
|
26
|
+
return { name, label, value: value ?? '', options: [...options] };
|
|
27
|
+
}
|
|
28
|
+
function backgroundField(value) {
|
|
29
|
+
return {
|
|
30
|
+
name: 'background',
|
|
31
|
+
label: 'Background',
|
|
32
|
+
value: value ?? '',
|
|
33
|
+
hint: 'A CSS colour, for example #cc0000.',
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function openTableProperties(view, host) {
|
|
37
|
+
const table = findTable(view.state.selection.$from);
|
|
38
|
+
if (!table)
|
|
39
|
+
return;
|
|
40
|
+
const attrs = table.node.attrs;
|
|
41
|
+
const style = parseDeclarations(attrs['style']);
|
|
42
|
+
const columns = TableMap.get(table.node).width;
|
|
43
|
+
const widths = widthsFromColgroup(attrs['colgroup'], columns);
|
|
44
|
+
const result = await promptFields(host.ownerDocument, 'Table properties', [
|
|
45
|
+
{ name: 'border', label: 'Border', value: attrs['border'] ?? '' },
|
|
46
|
+
{ name: 'cellpadding', label: 'Cell padding', value: attrs['cellpadding'] ?? '' },
|
|
47
|
+
{ name: 'cellspacing', label: 'Cell spacing', value: attrs['cellspacing'] ?? '' },
|
|
48
|
+
{ name: 'width', label: 'Width', value: attrs['width'] ?? style.get('width') ?? '' },
|
|
49
|
+
select('align', 'Alignment', attrs['align'], ALIGN_OPTIONS),
|
|
50
|
+
backgroundField(style.get('background-color')),
|
|
51
|
+
{
|
|
52
|
+
name: 'caption',
|
|
53
|
+
label: 'Caption',
|
|
54
|
+
value: captionTextFromHtml(attrs['caption']),
|
|
55
|
+
hint: 'The table’s accessible name. Shown above the grid.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'columns',
|
|
59
|
+
label: 'Column widths',
|
|
60
|
+
value: widths.join(', '),
|
|
61
|
+
hint: 'Comma-separated, one value per column. Empty slots are omitted.',
|
|
62
|
+
},
|
|
63
|
+
], {}, (values) => ({ value: values }));
|
|
64
|
+
if (!result)
|
|
65
|
+
return;
|
|
66
|
+
const parsed = (result['columns'] ?? '').split(',').map((part) => emptyToNull(part));
|
|
67
|
+
while (parsed.length < columns)
|
|
68
|
+
parsed.push(null);
|
|
69
|
+
setTableAttrs({
|
|
70
|
+
border: emptyToNull(result['border']),
|
|
71
|
+
cellpadding: emptyToNull(result['cellpadding']),
|
|
72
|
+
cellspacing: emptyToNull(result['cellspacing']),
|
|
73
|
+
width: emptyToNull(result['width']),
|
|
74
|
+
align: emptyToNull(result['align']),
|
|
75
|
+
caption: captionHtmlFromText(result['caption'] ?? '', attrs['caption']),
|
|
76
|
+
// Patched, not rebuilt: the stored colgroup may carry a class, a span, or
|
|
77
|
+
// attributes from whatever wrote it, and a save that changes no width must
|
|
78
|
+
// not throw those away.
|
|
79
|
+
colgroup: colgroupHtmlWithWidths(attrs['colgroup'], parsed.slice(0, columns)),
|
|
80
|
+
style: mergeStyle(attrs['style'], {
|
|
81
|
+
'background-color': colorOrNull(result['background']),
|
|
82
|
+
width: null,
|
|
83
|
+
}),
|
|
84
|
+
})(view.state, view.dispatch);
|
|
85
|
+
}
|
|
86
|
+
export async function openRowProperties(view, host) {
|
|
87
|
+
const row = findRow(view.state.selection.$from);
|
|
88
|
+
if (!row)
|
|
89
|
+
return;
|
|
90
|
+
const attrs = row.node.attrs;
|
|
91
|
+
const style = parseDeclarations(attrs['style']);
|
|
92
|
+
const result = await promptFields(host.ownerDocument, 'Row properties', [
|
|
93
|
+
select('align', 'Alignment', attrs['align'], ALIGN_OPTIONS),
|
|
94
|
+
select('valign', 'Vertical alignment', attrs['valign'], VALIGN_OPTIONS),
|
|
95
|
+
backgroundField(style.get('background-color')),
|
|
96
|
+
], {}, (values) => ({ value: values }));
|
|
97
|
+
if (!result)
|
|
98
|
+
return;
|
|
99
|
+
setRowAttrs({
|
|
100
|
+
align: emptyToNull(result['align']),
|
|
101
|
+
valign: emptyToNull(result['valign']),
|
|
102
|
+
style: mergeStyle(attrs['style'], {
|
|
103
|
+
'background-color': colorOrNull(result['background']),
|
|
104
|
+
}),
|
|
105
|
+
})(view.state, view.dispatch);
|
|
106
|
+
}
|
|
107
|
+
export async function openCellProperties(view, host) {
|
|
108
|
+
const cell = findCell(view.state.selection.$from);
|
|
109
|
+
if (!cell)
|
|
110
|
+
return;
|
|
111
|
+
const attrs = cell.node.attrs;
|
|
112
|
+
const style = parseDeclarations(attrs['style']);
|
|
113
|
+
const result = await promptFields(host.ownerDocument, 'Cell properties', [
|
|
114
|
+
{ name: 'width', label: 'Width', value: attrs['width'] ?? '' },
|
|
115
|
+
{ name: 'height', label: 'Height', value: attrs['height'] ?? '' },
|
|
116
|
+
{ name: 'padding', label: 'Padding', value: style.get('padding') ?? '' },
|
|
117
|
+
select('align', 'Alignment', attrs['align'], ALIGN_OPTIONS),
|
|
118
|
+
select('valign', 'Vertical alignment', attrs['valign'], VALIGN_OPTIONS),
|
|
119
|
+
backgroundField(style.get('background-color')),
|
|
120
|
+
], {},
|
|
121
|
+
// Reported rather than silently dropped: mergeStyle would refuse the value
|
|
122
|
+
// anyway, and an author who typed something is owed the reason it went.
|
|
123
|
+
(values) => {
|
|
124
|
+
const padding = emptyToNull(values['padding']);
|
|
125
|
+
if (padding !== null && styleValueOrNull('padding', padding) === null) {
|
|
126
|
+
return { error: 'Padding takes one to four lengths, for example 4px or 2px 4px.' };
|
|
127
|
+
}
|
|
128
|
+
return { value: values };
|
|
129
|
+
});
|
|
130
|
+
if (!result)
|
|
131
|
+
return;
|
|
132
|
+
setCellAttrs({
|
|
133
|
+
width: emptyToNull(result['width']),
|
|
134
|
+
height: emptyToNull(result['height']),
|
|
135
|
+
align: emptyToNull(result['align']),
|
|
136
|
+
valign: emptyToNull(result['valign']),
|
|
137
|
+
style: mergeStyle(attrs['style'], {
|
|
138
|
+
'background-color': colorOrNull(result['background']),
|
|
139
|
+
padding: emptyToNull(result['padding']),
|
|
140
|
+
}),
|
|
141
|
+
})(view.state, view.dispatch);
|
|
142
|
+
}
|
|
143
|
+
export async function openCaptionDialog(view, host) {
|
|
144
|
+
const table = findTable(view.state.selection.$from);
|
|
145
|
+
if (!table)
|
|
146
|
+
return;
|
|
147
|
+
const result = await promptFields(host.ownerDocument, 'Table caption', [
|
|
148
|
+
{
|
|
149
|
+
name: 'caption',
|
|
150
|
+
label: 'Caption',
|
|
151
|
+
value: captionTextFromHtml(table.node.attrs['caption']),
|
|
152
|
+
hint: 'The table’s accessible name.',
|
|
153
|
+
},
|
|
154
|
+
], {}, (values) => ({ value: { caption: values['caption'] ?? '' } }));
|
|
155
|
+
if (!result)
|
|
156
|
+
return;
|
|
157
|
+
setTableCaption(result.caption)(view.state, view.dispatch);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=dialogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogs.js","sourceRoot":"","sources":["../src/dialogs.ts"],"names":[],"mappings":"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"}
|
package/dist/grid.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick-insert table grid.
|
|
3
|
+
*
|
|
4
|
+
* A 8×8 chooser next to the Insert table button. A modal asking for rows and
|
|
5
|
+
* columns is slower than the grid every other editor ships, and a hardcoded
|
|
6
|
+
* 3×3 is what authors then spend the rest of the session repairing.
|
|
7
|
+
*
|
|
8
|
+
* The trigger is the one toolbar tab stop. The grid lives on the host, not in
|
|
9
|
+
* the toolbar element, for the same reason the colour picker does: the bar's
|
|
10
|
+
* roving tabindex walks every `button.ol-btn` inside itself.
|
|
11
|
+
*/
|
|
12
|
+
import { type ToolbarContext, type ToolbarControl } from '@openleaf-editor/ui';
|
|
13
|
+
export declare const GRID_SIZE = 8;
|
|
14
|
+
export declare function buildInsertGrid(ctx: ToolbarContext): ToolbarControl;
|
|
15
|
+
//# sourceMappingURL=grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAe,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAK3F,eAAO,MAAM,SAAS,IAAI,CAAA;AAK1B,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAoNnE"}
|
package/dist/grid.js
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick-insert table grid.
|
|
3
|
+
*
|
|
4
|
+
* A 8×8 chooser next to the Insert table button. A modal asking for rows and
|
|
5
|
+
* columns is slower than the grid every other editor ships, and a hardcoded
|
|
6
|
+
* 3×3 is what authors then spend the rest of the session repairing.
|
|
7
|
+
*
|
|
8
|
+
* The trigger is the one toolbar tab stop. The grid lives on the host, not in
|
|
9
|
+
* the toolbar element, for the same reason the colour picker does: the bar's
|
|
10
|
+
* roving tabindex walks every `button.ol-btn` inside itself.
|
|
11
|
+
*/
|
|
12
|
+
import { iconElement } from '@openleaf-editor/ui';
|
|
13
|
+
import { canInsert } from '@openleaf-editor/core';
|
|
14
|
+
import { insertTable } from './commands.js';
|
|
15
|
+
export const GRID_SIZE = 8;
|
|
16
|
+
const SUPPORTS_POPOVER = typeof HTMLElement !== 'undefined' && 'popover' in HTMLElement.prototype;
|
|
17
|
+
export function buildInsertGrid(ctx) {
|
|
18
|
+
const { view, host } = ctx;
|
|
19
|
+
const doc = host.ownerDocument;
|
|
20
|
+
const wrap = doc.createElement('div');
|
|
21
|
+
wrap.className = 'ol-table-grid';
|
|
22
|
+
const trigger = doc.createElement('button');
|
|
23
|
+
trigger.type = 'button';
|
|
24
|
+
trigger.className = 'ol-btn';
|
|
25
|
+
trigger.dataset['olId'] = 'Insert table';
|
|
26
|
+
trigger.setAttribute('aria-label', 'Insert table');
|
|
27
|
+
trigger.setAttribute('aria-haspopup', 'dialog');
|
|
28
|
+
trigger.setAttribute('aria-expanded', 'false');
|
|
29
|
+
trigger.title = 'Insert table';
|
|
30
|
+
trigger.appendChild(iconElement('table', doc));
|
|
31
|
+
wrap.appendChild(trigger);
|
|
32
|
+
const popover = doc.createElement('div');
|
|
33
|
+
popover.className = 'ol-table-pop';
|
|
34
|
+
popover.setAttribute('role', 'dialog');
|
|
35
|
+
popover.setAttribute('aria-label', 'Table size');
|
|
36
|
+
if (SUPPORTS_POPOVER)
|
|
37
|
+
popover.setAttribute('popover', 'manual');
|
|
38
|
+
else
|
|
39
|
+
popover.hidden = true;
|
|
40
|
+
const status = doc.createElement('div');
|
|
41
|
+
status.className = 'ol-table-pop-status';
|
|
42
|
+
status.setAttribute('aria-live', 'polite');
|
|
43
|
+
status.textContent = '1 × 1';
|
|
44
|
+
const grid = doc.createElement('div');
|
|
45
|
+
grid.className = 'ol-table-size';
|
|
46
|
+
grid.setAttribute('role', 'grid');
|
|
47
|
+
const cells = [];
|
|
48
|
+
for (let row = 1; row <= GRID_SIZE; row += 1) {
|
|
49
|
+
const gridRow = doc.createElement('div');
|
|
50
|
+
gridRow.setAttribute('role', 'row');
|
|
51
|
+
gridRow.className = 'ol-table-size-row';
|
|
52
|
+
for (let col = 1; col <= GRID_SIZE; col += 1) {
|
|
53
|
+
const cell = doc.createElement('button');
|
|
54
|
+
cell.type = 'button';
|
|
55
|
+
cell.className = 'ol-table-size-cell';
|
|
56
|
+
cell.setAttribute('role', 'gridcell');
|
|
57
|
+
cell.setAttribute('aria-label', `${row} by ${col} table`);
|
|
58
|
+
cell.dataset['olRows'] = String(row);
|
|
59
|
+
cell.dataset['olCols'] = String(col);
|
|
60
|
+
cell.tabIndex = row === 1 && col === 1 ? 0 : -1;
|
|
61
|
+
gridRow.appendChild(cell);
|
|
62
|
+
cells.push(cell);
|
|
63
|
+
}
|
|
64
|
+
grid.appendChild(gridRow);
|
|
65
|
+
}
|
|
66
|
+
popover.append(status, grid);
|
|
67
|
+
let open = false;
|
|
68
|
+
let hoverRows = 1;
|
|
69
|
+
let hoverCols = 1;
|
|
70
|
+
const paint = (rows, cols) => {
|
|
71
|
+
hoverRows = rows;
|
|
72
|
+
hoverCols = cols;
|
|
73
|
+
status.textContent = `${rows} × ${cols}`;
|
|
74
|
+
for (const cell of cells) {
|
|
75
|
+
const r = Number(cell.dataset['olRows']);
|
|
76
|
+
const c = Number(cell.dataset['olCols']);
|
|
77
|
+
cell.setAttribute('aria-pressed', r <= rows && c <= cols ? 'true' : 'false');
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const position = () => {
|
|
81
|
+
const rect = trigger.getBoundingClientRect();
|
|
82
|
+
popover.style.position = 'fixed';
|
|
83
|
+
popover.style.left = `${Math.round(rect.left)}px`;
|
|
84
|
+
popover.style.top = `${Math.round(rect.bottom + 4)}px`;
|
|
85
|
+
};
|
|
86
|
+
const onPointerDown = (event) => {
|
|
87
|
+
const target = event.target;
|
|
88
|
+
if (!(target instanceof Node))
|
|
89
|
+
return;
|
|
90
|
+
if (popover.contains(target) || trigger.contains(target))
|
|
91
|
+
return;
|
|
92
|
+
close();
|
|
93
|
+
};
|
|
94
|
+
const onViewportChange = () => close();
|
|
95
|
+
const show = () => {
|
|
96
|
+
if (open)
|
|
97
|
+
return;
|
|
98
|
+
if (!popover.isConnected)
|
|
99
|
+
host.appendChild(popover);
|
|
100
|
+
position();
|
|
101
|
+
if (SUPPORTS_POPOVER)
|
|
102
|
+
popover.showPopover();
|
|
103
|
+
else
|
|
104
|
+
popover.hidden = false;
|
|
105
|
+
open = true;
|
|
106
|
+
trigger.setAttribute('aria-expanded', 'true');
|
|
107
|
+
paint(1, 1);
|
|
108
|
+
doc.addEventListener('pointerdown', onPointerDown, true);
|
|
109
|
+
doc.defaultView?.addEventListener('resize', onViewportChange);
|
|
110
|
+
doc.defaultView?.addEventListener('scroll', onViewportChange, true);
|
|
111
|
+
cells[0]?.focus();
|
|
112
|
+
};
|
|
113
|
+
const close = (options = {}) => {
|
|
114
|
+
if (!open)
|
|
115
|
+
return;
|
|
116
|
+
if (SUPPORTS_POPOVER)
|
|
117
|
+
popover.hidePopover();
|
|
118
|
+
else
|
|
119
|
+
popover.hidden = true;
|
|
120
|
+
open = false;
|
|
121
|
+
trigger.setAttribute('aria-expanded', 'false');
|
|
122
|
+
doc.removeEventListener('pointerdown', onPointerDown, true);
|
|
123
|
+
doc.defaultView?.removeEventListener('resize', onViewportChange);
|
|
124
|
+
doc.defaultView?.removeEventListener('scroll', onViewportChange, true);
|
|
125
|
+
if (options.returnFocus === 'trigger')
|
|
126
|
+
trigger.focus();
|
|
127
|
+
else if (options.returnFocus === 'content')
|
|
128
|
+
view.focus();
|
|
129
|
+
};
|
|
130
|
+
const choose = (rows, cols) => {
|
|
131
|
+
insertTable(rows, cols)(view.state, view.dispatch, view);
|
|
132
|
+
close({ returnFocus: 'content' });
|
|
133
|
+
};
|
|
134
|
+
const focusCell = (rows, cols) => {
|
|
135
|
+
const next = cells.find((cell) => Number(cell.dataset['olRows']) === rows && Number(cell.dataset['olCols']) === cols);
|
|
136
|
+
if (!next)
|
|
137
|
+
return;
|
|
138
|
+
for (const cell of cells)
|
|
139
|
+
cell.tabIndex = cell === next ? 0 : -1;
|
|
140
|
+
paint(rows, cols);
|
|
141
|
+
next.focus();
|
|
142
|
+
};
|
|
143
|
+
trigger.addEventListener('mousedown', (event) => event.preventDefault());
|
|
144
|
+
trigger.addEventListener('click', () => {
|
|
145
|
+
if (!canInsert(view.state, 'table'))
|
|
146
|
+
return;
|
|
147
|
+
if (open)
|
|
148
|
+
close({ returnFocus: 'content' });
|
|
149
|
+
else
|
|
150
|
+
show();
|
|
151
|
+
});
|
|
152
|
+
for (const cell of cells) {
|
|
153
|
+
cell.addEventListener('mouseenter', () => {
|
|
154
|
+
paint(Number(cell.dataset['olRows']), Number(cell.dataset['olCols']));
|
|
155
|
+
});
|
|
156
|
+
cell.addEventListener('click', () => {
|
|
157
|
+
choose(Number(cell.dataset['olRows']), Number(cell.dataset['olCols']));
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
popover.addEventListener('keydown', (event) => {
|
|
161
|
+
if (event.key === 'Escape') {
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
close({ returnFocus: 'trigger' });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const target = event.target;
|
|
167
|
+
if (!(target instanceof HTMLButtonElement) || !cells.includes(target))
|
|
168
|
+
return;
|
|
169
|
+
let rows = Number(target.dataset['olRows']);
|
|
170
|
+
let cols = Number(target.dataset['olCols']);
|
|
171
|
+
const move = (nextRows, nextCols) => {
|
|
172
|
+
event.preventDefault();
|
|
173
|
+
focusCell(Math.max(1, Math.min(GRID_SIZE, nextRows)), Math.max(1, Math.min(GRID_SIZE, nextCols)));
|
|
174
|
+
};
|
|
175
|
+
switch (event.key) {
|
|
176
|
+
case 'ArrowRight':
|
|
177
|
+
move(rows, cols + 1);
|
|
178
|
+
break;
|
|
179
|
+
case 'ArrowLeft':
|
|
180
|
+
move(rows, cols - 1);
|
|
181
|
+
break;
|
|
182
|
+
case 'ArrowDown':
|
|
183
|
+
move(rows + 1, cols);
|
|
184
|
+
break;
|
|
185
|
+
case 'ArrowUp':
|
|
186
|
+
move(rows - 1, cols);
|
|
187
|
+
break;
|
|
188
|
+
case 'Home':
|
|
189
|
+
move(rows, 1);
|
|
190
|
+
break;
|
|
191
|
+
case 'End':
|
|
192
|
+
move(rows, GRID_SIZE);
|
|
193
|
+
break;
|
|
194
|
+
case 'Enter':
|
|
195
|
+
case ' ':
|
|
196
|
+
event.preventDefault();
|
|
197
|
+
choose(hoverRows, hoverCols);
|
|
198
|
+
break;
|
|
199
|
+
default:
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
popover.addEventListener('focusout', () => {
|
|
204
|
+
setTimeout(() => {
|
|
205
|
+
if (!open)
|
|
206
|
+
return;
|
|
207
|
+
const active = doc.activeElement;
|
|
208
|
+
if (active && (popover.contains(active) || trigger.contains(active)))
|
|
209
|
+
return;
|
|
210
|
+
close();
|
|
211
|
+
}, 0);
|
|
212
|
+
});
|
|
213
|
+
return {
|
|
214
|
+
el: wrap,
|
|
215
|
+
update(state) {
|
|
216
|
+
const enabled = canInsert(state, 'table');
|
|
217
|
+
trigger.setAttribute('aria-disabled', enabled ? 'false' : 'true');
|
|
218
|
+
},
|
|
219
|
+
destroy() {
|
|
220
|
+
close();
|
|
221
|
+
popover.remove();
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=grid.js.map
|
package/dist/grid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"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"}
|
package/dist/icons.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBnD,CAAA"}
|
package/dist/icons.js
CHANGED
|
@@ -17,5 +17,9 @@ export const TABLE_ICON_PATHS = {
|
|
|
17
17
|
splitCell: 'M3 5h18v14H3zM12 5v14M9 9l-2 3 2 3M15 9l2 3-2 3',
|
|
18
18
|
headerRow: 'M3 4h18v5H3zM3 9v11h18V9M3 14h18M9 9v11M15 9v11',
|
|
19
19
|
tableDelete: 'M3 4h18v16H3zM3 10h18M9 4v16M8 14l8-8M16 14l-8-8',
|
|
20
|
+
tableProperties: 'M3 4h18v16H3zM3 10h18M9 4v16M16 14h4M18 12v4',
|
|
21
|
+
rowProperties: 'M3 9h18v6H3zM16 6h4M18 4v4',
|
|
22
|
+
cellProperties: 'M3 4h18v16H3zM12 4v16M3 12h18M16 8h4M18 6v4',
|
|
23
|
+
tableCaption: 'M3 9h18v11H3zM7 4h10M12 4v3',
|
|
20
24
|
};
|
|
21
25
|
//# sourceMappingURL=icons.js.map
|
package/dist/icons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,KAAK,EAAE,8CAA8C;IACrD,SAAS,EAAE,kCAAkC;IAC7C,QAAQ,EAAE,oCAAoC;IAC9C,SAAS,EAAE,iCAAiC;IAC5C,YAAY,EAAE,mCAAmC;IACjD,WAAW,EAAE,oCAAoC;IACjD,YAAY,EAAE,iCAAiC;IAC/C,UAAU,EAAE,kEAAkE;IAC9E,SAAS,EAAE,iDAAiD;IAC5D,SAAS,EAAE,iDAAiD;IAC5D,WAAW,EAAE,kDAAkD;
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,KAAK,EAAE,8CAA8C;IACrD,SAAS,EAAE,kCAAkC;IAC7C,QAAQ,EAAE,oCAAoC;IAC9C,SAAS,EAAE,iCAAiC;IAC5C,YAAY,EAAE,mCAAmC;IACjD,WAAW,EAAE,oCAAoC;IACjD,YAAY,EAAE,iCAAiC;IAC/C,UAAU,EAAE,kEAAkE;IAC9E,SAAS,EAAE,iDAAiD;IAC5D,SAAS,EAAE,iDAAiD;IAC5D,WAAW,EAAE,kDAAkD;IAC/D,eAAe,EAAE,8CAA8C;IAC/D,aAAa,EAAE,4BAA4B;IAC3C,cAAc,EAAE,6CAA6C;IAC7D,YAAY,EAAE,6BAA6B;CAC5C,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*
|
|
13
13
|
* So everyone gets tables that read and write correctly, for about a kilobyte.
|
|
14
14
|
* What is opt-in is the weight: cell selection, column resizing, the row and
|
|
15
|
-
* column commands,
|
|
16
|
-
*
|
|
15
|
+
* column commands, property dialogs, the insert grid, the context menu, and the
|
|
16
|
+
* toolbar controls.
|
|
17
17
|
*
|
|
18
18
|
* ## Loading it
|
|
19
19
|
*
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* ```
|
|
26
26
|
*
|
|
27
27
|
* The second bundle shares the first one's ProseMirror runtime rather than
|
|
28
|
-
* carrying its own copy
|
|
28
|
+
* carrying its own copy.
|
|
29
29
|
*
|
|
30
30
|
* Or as a module:
|
|
31
31
|
*
|
|
@@ -34,25 +34,9 @@
|
|
|
34
34
|
* installTableEditing()
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
|
-
|
|
38
|
-
export declare const TABLE_TOOLBAR_ITEMS: readonly ["insertTable", "addRowBefore", "addRowAfter", "deleteRow", "addColumnBefore", "addColumnAfter", "deleteColumn", "mergeCells", "splitCell", "toggleHeaderRow", "deleteTable"];
|
|
37
|
+
export declare const TABLE_TOOLBAR_ITEMS: readonly ["insertTable", "tableProperties", "rowProperties", "cellProperties", "tableCaption", "addRowBefore", "addRowAfter", "deleteRow", "addColumnBefore", "addColumnAfter", "deleteColumn", "mergeCells", "splitCell", "toggleHeaderRow", "deleteTable"];
|
|
39
38
|
/** A layout string for the default toolbar plus the table controls. */
|
|
40
39
|
export declare const TABLE_LAYOUT_SUFFIX: string;
|
|
41
|
-
/** Is the selection inside a table? Table commands are useless outside one. */
|
|
42
|
-
export declare function inTable(state: EditorState): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Insert a table with a header row.
|
|
45
|
-
*
|
|
46
|
-
* A header row by default rather than a plain grid: a table without headers is
|
|
47
|
-
* an accessibility problem that authors rarely go back and fix, and defaults
|
|
48
|
-
* decide what most documents look like.
|
|
49
|
-
*/
|
|
50
|
-
export declare function insertTable(rows?: number, cols?: number): Command;
|
|
51
|
-
export declare const addColumnAfter: Command;
|
|
52
|
-
export declare const addColumnBefore: Command;
|
|
53
|
-
export declare const addRowAfter: Command;
|
|
54
|
-
export declare const addRowBefore: Command;
|
|
55
|
-
export declare const toggleHeaderRow: Command;
|
|
56
40
|
/** The ProseMirror plugins table editing needs. */
|
|
57
41
|
export declare function tableEditingPlugins(): import("prosemirror-state").Plugin<any>[];
|
|
58
42
|
/**
|
|
@@ -62,5 +46,8 @@ export declare function tableEditingPlugins(): import("prosemirror-state").Plugi
|
|
|
62
46
|
* more often than anyone would like -- should not produce two sets of buttons.
|
|
63
47
|
*/
|
|
64
48
|
export declare function installTableEditing(): void;
|
|
49
|
+
export { addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, colgroupHtmlWithWidths, colgroupSyncPlugin, inTable, insertTable, mergeStyle, setCellAttrs, setCellVerticalAlign, setRowAttrs, setTableAttrs, setTableCaption, setTableColgroup, styleValueOrNull, toggleHeaderRow, widthsFromColgroup, } from './commands.js';
|
|
50
|
+
export { buildInsertGrid, GRID_SIZE } from './grid.js';
|
|
51
|
+
export { tableContextMenu } from './menu.js';
|
|
65
52
|
export { deleteColumn, deleteRow, deleteTable, mergeCells, splitCell, } from 'prosemirror-tables';
|
|
66
53
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAiCH,eAAO,MAAM,mBAAmB,8PAgBtB,CAAA;AAEV,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,QAAwC,CAAA;AAkFxE,mDAAmD;AACnD,wBAAgB,mBAAmB,8CASlC;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CA2E1C;AAED,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,OAAO,EACP,WAAW,EACX,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,oBAAoB,CAAA"}
|