@phuong-tran-redoc/document-engine-core 0.0.29 → 0.0.32

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phuong-tran-redoc/document-engine-core",
3
- "version": "0.0.29",
3
+ "version": "0.0.32",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "Duc Phuong (Jack) <tdp99.business@gmail.com>",
@@ -122,6 +122,12 @@ export const StyledTableHeader = TableHeader.extend({
122
122
  export const StyledTable = Table.extend({
123
123
  // name: 'styledTable',
124
124
  // draggable: true,
125
+ addOptions () {
126
+ return {
127
+ ...this.parent?.(),
128
+ enableNodeView: true
129
+ };
130
+ },
125
131
  addAttributes () {
126
132
  const parent = this.parent?.() ?? {};
127
133
  return {
@@ -431,12 +437,16 @@ export const StyledTable = Table.extend({
431
437
  };
432
438
  },
433
439
  addNodeView () {
440
+ const options = this.options;
441
+ if (options.enableNodeView === false) {
442
+ return undefined;
443
+ }
434
444
  // Only use custom NodeView (with handle) when editor is editable
435
445
  return (props)=>{
436
446
  // Check if editor is editable
437
447
  if (!props.editor.isEditable) {
438
448
  // Return undefined to use default table rendering (no widget wrapper)
439
- return null;
449
+ return undefined;
440
450
  }
441
451
  // Editor is editable → use custom NodeView with handle
442
452
  return createTableNodeView(props);
@@ -4,10 +4,22 @@ export const PageBreak = Node.create({
4
4
  group: 'block',
5
5
  atom: true,
6
6
  selectable: true,
7
+ // addNodeView() {
8
+ // return createPageBreakNodeView;
9
+ // },
7
10
  parseHTML () {
8
11
  return [
12
+ // ----------------------------------------------------------
13
+ // RULE 1: Standard Tiptap Format (Ưu tiên cao nhất)
14
+ // ----------------------------------------------------------
9
15
  {
10
16
  tag: 'div[data-page-break]'
17
+ },
18
+ // ----------------------------------------------------------
19
+ // RULE 2: CKEditor Format (Ưu tiên thấp nhất)
20
+ // ----------------------------------------------------------
21
+ {
22
+ tag: 'div.page-break'
11
23
  }
12
24
  ];
13
25
  },
@@ -17,7 +29,7 @@ export const PageBreak = Node.create({
17
29
  mergeAttributes(HTMLAttributes, {
18
30
  'data-page-break': 'true',
19
31
  class: 'document-engine-page-break',
20
- style: 'break-before: page;'
32
+ style: 'break-before: page; page-break-before: always;'
21
33
  }),
22
34
  [
23
35
  'span',
@@ -42,3 +42,7 @@ export declare class TableNodeView extends HandleNodeView {
42
42
  private updateColgroup;
43
43
  }
44
44
  export declare const createTableNodeView: (props: NodeViewRendererProps) => TableNodeView;
45
+ export declare class PageBreakNodeView extends HandleNodeView {
46
+ createContentElement(): HTMLElement;
47
+ }
48
+ export declare const createPageBreakNodeView: (props: NodeViewRendererProps) => PageBreakNodeView;
@@ -288,3 +288,24 @@ export class TableNodeView extends HandleNodeView {
288
288
  export const createTableNodeView = (props)=>{
289
289
  return new TableNodeView(props.node, props.view, props.getPos);
290
290
  };
291
+ export class PageBreakNodeView extends HandleNodeView {
292
+ createContentElement() {
293
+ // Create page break container
294
+ const pageBreakDiv = document.createElement('div');
295
+ pageBreakDiv.className = 'document-engine-page-break';
296
+ pageBreakDiv.setAttribute('data-page-break', 'true');
297
+ pageBreakDiv.style.cssText = 'break-before: page;';
298
+ pageBreakDiv.contentEditable = 'false';
299
+ // Create label
300
+ const label = document.createElement('span');
301
+ label.className = 'document-engine-page-break-label';
302
+ label.textContent = 'Page break';
303
+ label.contentEditable = 'false';
304
+ pageBreakDiv.appendChild(label);
305
+ return pageBreakDiv;
306
+ }
307
+ }
308
+ // Factory function for PageBreak NodeView
309
+ export const createPageBreakNodeView = (props)=>{
310
+ return new PageBreakNodeView(props.node, props.view, props.getPos);
311
+ };