@doxi/angular 0.11.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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/doxiva-doxiva-editor.component.d.ts +118 -0
  4. package/dist/doxiva-doxiva-editor.component.d.ts.map +1 -0
  5. package/dist/doxiva-doxiva-editor.component.js +1095 -0
  6. package/dist/doxiva-doxiva-editor.component.js.map +1 -0
  7. package/dist/doxiva-editor.component.d.ts +23 -0
  8. package/dist/doxiva-editor.component.d.ts.map +1 -0
  9. package/dist/doxiva-editor.component.js +92 -0
  10. package/dist/doxiva-editor.component.js.map +1 -0
  11. package/dist/doxiva-toolbar.component.d.ts +118 -0
  12. package/dist/doxiva-toolbar.component.d.ts.map +1 -0
  13. package/dist/doxiva-toolbar.component.js +339 -0
  14. package/dist/doxiva-toolbar.component.js.map +1 -0
  15. package/dist/doxiva.types.d.ts +71 -0
  16. package/dist/doxiva.types.d.ts.map +1 -0
  17. package/dist/doxiva.types.js +28 -0
  18. package/dist/doxiva.types.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +8 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/toolbar-builders/alignment.d.ts +4 -0
  24. package/dist/toolbar-builders/alignment.d.ts.map +1 -0
  25. package/dist/toolbar-builders/alignment.js +56 -0
  26. package/dist/toolbar-builders/alignment.js.map +1 -0
  27. package/dist/toolbar-builders/blocks.d.ts +4 -0
  28. package/dist/toolbar-builders/blocks.d.ts.map +1 -0
  29. package/dist/toolbar-builders/blocks.js +39 -0
  30. package/dist/toolbar-builders/blocks.js.map +1 -0
  31. package/dist/toolbar-builders/font-size.d.ts +4 -0
  32. package/dist/toolbar-builders/font-size.d.ts.map +1 -0
  33. package/dist/toolbar-builders/font-size.js +35 -0
  34. package/dist/toolbar-builders/font-size.js.map +1 -0
  35. package/dist/toolbar-builders/headings.d.ts +4 -0
  36. package/dist/toolbar-builders/headings.d.ts.map +1 -0
  37. package/dist/toolbar-builders/headings.js +18 -0
  38. package/dist/toolbar-builders/headings.js.map +1 -0
  39. package/dist/toolbar-builders/history.d.ts +3 -0
  40. package/dist/toolbar-builders/history.d.ts.map +1 -0
  41. package/dist/toolbar-builders/history.js +13 -0
  42. package/dist/toolbar-builders/history.js.map +1 -0
  43. package/dist/toolbar-builders/images.d.ts +4 -0
  44. package/dist/toolbar-builders/images.d.ts.map +1 -0
  45. package/dist/toolbar-builders/images.js +8 -0
  46. package/dist/toolbar-builders/images.js.map +1 -0
  47. package/dist/toolbar-builders/line-height.d.ts +4 -0
  48. package/dist/toolbar-builders/line-height.d.ts.map +1 -0
  49. package/dist/toolbar-builders/line-height.js +46 -0
  50. package/dist/toolbar-builders/line-height.js.map +1 -0
  51. package/dist/toolbar-builders/links.d.ts +4 -0
  52. package/dist/toolbar-builders/links.d.ts.map +1 -0
  53. package/dist/toolbar-builders/links.js +19 -0
  54. package/dist/toolbar-builders/links.js.map +1 -0
  55. package/dist/toolbar-builders/lists.d.ts +4 -0
  56. package/dist/toolbar-builders/lists.d.ts.map +1 -0
  57. package/dist/toolbar-builders/lists.js +38 -0
  58. package/dist/toolbar-builders/lists.js.map +1 -0
  59. package/dist/toolbar-builders/marks.d.ts +4 -0
  60. package/dist/toolbar-builders/marks.d.ts.map +1 -0
  61. package/dist/toolbar-builders/marks.js +41 -0
  62. package/dist/toolbar-builders/marks.js.map +1 -0
  63. package/dist/toolbar-builders/system.d.ts +12 -0
  64. package/dist/toolbar-builders/system.d.ts.map +1 -0
  65. package/dist/toolbar-builders/system.js +28 -0
  66. package/dist/toolbar-builders/system.js.map +1 -0
  67. package/dist/toolbar-builders/tables.d.ts +4 -0
  68. package/dist/toolbar-builders/tables.d.ts.map +1 -0
  69. package/dist/toolbar-builders/tables.js +212 -0
  70. package/dist/toolbar-builders/tables.js.map +1 -0
  71. package/dist/toolbar-builders/typography.d.ts +4 -0
  72. package/dist/toolbar-builders/typography.d.ts.map +1 -0
  73. package/dist/toolbar-builders/typography.js +118 -0
  74. package/dist/toolbar-builders/typography.js.map +1 -0
  75. package/package.json +50 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mahbub Hasan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # @doxi/angular
2
+
3
+ Angular adapter for [`@doxi/core`](../core). Ships a standalone `<dx-editor>` component wrapping the underlying `EditorView`.
4
+
5
+ > **Status:** v0.10.x preview. Public API may evolve until v1.0.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @doxi/angular @doxi/core @angular/core @angular/common rxjs
11
+ ```
12
+
13
+ Peer-deps: `@angular/core` ≥ 18 (works under 19), `@angular/common` ≥ 18, `rxjs` ≥ 7, `@doxi/core`. Zero runtime deps beyond the peers.
14
+
15
+ ## Quickstart
16
+
17
+ ```ts
18
+ import { Component } from '@angular/core'
19
+ import { DoxivaEditorComponent } from '@doxi/angular'
20
+ import {
21
+ defaultRenderer,
22
+ defaultSchema,
23
+ EditorState,
24
+ historyPlugin,
25
+ } from '@doxi/core'
26
+
27
+ @Component({
28
+ selector: 'app-root',
29
+ standalone: true,
30
+ imports: [DoxivaEditorComponent],
31
+ template: `
32
+ <dx-editor
33
+ [state]="state"
34
+ [renderer]="renderer"
35
+ [ariaLabel]="'Dokumentredigerer'"
36
+ (dispatch)="onDispatch($event)"
37
+ />
38
+ `,
39
+ })
40
+ export class AppComponent {
41
+ state = EditorState.create({
42
+ schema: defaultSchema,
43
+ plugins: [historyPlugin().plugin],
44
+ })
45
+ renderer = defaultRenderer
46
+
47
+ onDispatch(tr: any) {
48
+ this.state = this.state.apply(tr)
49
+ }
50
+ }
51
+ ```
52
+
53
+ Don't forget to import the stylesheets in your global styles:
54
+
55
+ ```scss
56
+ @import '@doxi/core/styles/base.css';
57
+ @import '@doxi/core/styles/light.css';
58
+ ```
59
+
60
+ ## Change-detection model
61
+
62
+ `<dx-editor>` runs the underlying `EditorView` **outside** `NgZone` to avoid Angular's change-detection thrashing on high-frequency editor updates. Dispatched transactions re-enter the zone so consumer handlers run in-zone as normal.
63
+
64
+ ## Toolbar
65
+
66
+ `@doxi/angular` ships a default toolbar; consumers can compose their own from the per-group builders. See the [example app](../example-angular) for a full reference setup.
67
+
68
+ ## License
69
+
70
+ [MIT](LICENSE)
@@ -0,0 +1,118 @@
1
+ import { EventEmitter, TemplateRef, type AfterViewInit, type OnChanges, type OnDestroy, type OnInit, type SimpleChanges } from '@angular/core';
2
+ import { EditorState, type DxNode, type EditorView, type PageConfig, type Renderer, type Transaction } from '@doxi/core';
3
+ import type { ImportWarning } from '@doxi/docx';
4
+ import { type ToolbarItem, type ToolbarPopoverContext } from './doxiva-toolbar.component.js';
5
+ import { type FeatureFlags, type PageSizePreset, type Theme } from './doxiva.types.js';
6
+ /**
7
+ * The bundled Doxiva editor — a single Angular standalone component that
8
+ * internally orchestrates the toolbar, popovers (link / table / image /
9
+ * header-footer / page-settings), keymap, print bridge, DOCX import/export,
10
+ * page chrome, and theme handling. Hosts pass `features` to disable parts
11
+ * of the UX and `theme` to switch palettes. The low-level
12
+ * `DoxivaEditorComponent` (`<dx-editor>`), `DoxivaToolbarComponent`
13
+ * (`<dx-toolbar>`), and `defaultToolbarActions` remain exported for power
14
+ * users.
15
+ */
16
+ export declare class DxDoxivaEditorComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {
17
+ initialDoc?: DxNode;
18
+ theme: Theme;
19
+ features?: FeatureFlags;
20
+ paginated: boolean;
21
+ defaultPageSize: PageSizePreset;
22
+ editable: boolean;
23
+ ariaLabel?: string;
24
+ /**
25
+ * When set to `null`, suppresses the default warnings panel entirely.
26
+ * Otherwise the panel renders inline and (if `importWarnings` is also
27
+ * subscribed to) the host can mirror them.
28
+ */
29
+ onImportWarnings?: ((warnings: ReadonlyArray<ImportWarning>) => void) | null;
30
+ change: EventEmitter<DxNode>;
31
+ stateChange: EventEmitter<EditorState>;
32
+ importWarnings: EventEmitter<readonly ImportWarning[]>;
33
+ /** Emitted once the underlying EditorView is mounted (and again on remount). */
34
+ ready: EventEmitter<EditorView>;
35
+ private readonly cdr;
36
+ private readonly host;
37
+ private readonly history;
38
+ readonly renderer: Renderer;
39
+ state: EditorState;
40
+ effectiveFeatures: Required<FeatureFlags>;
41
+ actions: ToolbarItem[];
42
+ pageSize: PageSizePreset;
43
+ pageOrientation: 'portrait' | 'landscape';
44
+ pageMargins: 'normal' | 'narrow' | 'wide';
45
+ editorVisible: boolean;
46
+ chromeHeaderEnabled: boolean;
47
+ chromeFooterEnabled: boolean;
48
+ chromeHeaderHeightPx: number;
49
+ chromeFooterHeightPx: number;
50
+ headerText: string;
51
+ footerText: string;
52
+ headerPageNum: boolean;
53
+ footerPageNum: boolean;
54
+ imageSrc: string;
55
+ imageAlt: string;
56
+ readonly tablePickerRows: ReadonlyArray<number>;
57
+ readonly tablePickerCols: ReadonlyArray<number>;
58
+ tableHover: {
59
+ r: number;
60
+ c: number;
61
+ } | null;
62
+ view: EditorView | null;
63
+ importWarningsList: ReadonlyArray<ImportWarning>;
64
+ resolvedTheme: 'light' | 'dark';
65
+ private mediaQuery;
66
+ private mediaListener;
67
+ private onPrintListener;
68
+ linkTpl: TemplateRef<ToolbarPopoverContext>;
69
+ tableTpl: TemplateRef<ToolbarPopoverContext>;
70
+ imageTpl: TemplateRef<ToolbarPopoverContext>;
71
+ pageSettingsTpl: TemplateRef<ToolbarPopoverContext>;
72
+ headerFooterTpl: TemplateRef<ToolbarPopoverContext>;
73
+ popoverTemplates: Record<string, TemplateRef<ToolbarPopoverContext>>;
74
+ ngOnInit(): void;
75
+ ngAfterViewInit(): void;
76
+ ngOnChanges(changes: SimpleChanges): void;
77
+ ngOnDestroy(): void;
78
+ get showTopRow(): boolean;
79
+ get showWarningsPanel(): boolean;
80
+ get paginatedConfig(): PageConfig;
81
+ private recomputeFeatures;
82
+ private recomputeActions;
83
+ private buildPopoverTemplates;
84
+ private resolveTheme;
85
+ private installMediaListener;
86
+ private uninstallMediaListener;
87
+ onDispatch(tr: Transaction): void;
88
+ onReady(view: EditorView): void;
89
+ onPrintClick(): void;
90
+ onDownloadPdfClick(): void;
91
+ onExportDocxClick(): Promise<void>;
92
+ onImportFile(event: Event): Promise<void>;
93
+ applyPageSettings(close: () => void): void;
94
+ private remountEditor;
95
+ setChromeHeaderEnabled(v: boolean): void;
96
+ setChromeFooterEnabled(v: boolean): void;
97
+ setChromeHeaderHeight(raw: string | number): void;
98
+ setChromeFooterHeight(raw: string | number): void;
99
+ private clampChromeHeight;
100
+ private fragmentFromText;
101
+ private fragmentWithPageNumbers;
102
+ applyHeaderFooter(state: EditorState, dispatch: (tr: Transaction) => void, close: () => void): void;
103
+ clearHeaderFooter(state: EditorState, dispatch: (tr: Transaction) => void, close: () => void): void;
104
+ applyImage(state: EditorState, dispatch: (tr: Transaction) => void, close: () => void): void;
105
+ onImageKeydown(event: KeyboardEvent, state: EditorState, dispatch: (tr: Transaction) => void, close: () => void): void;
106
+ setTableHover(r: number, c: number): void;
107
+ resetTableHover(): void;
108
+ isTableCellOn(r: number, c: number): boolean;
109
+ tablePickerLabel(): string;
110
+ pickTable(state: EditorState, dispatch: (tr: Transaction) => void, close: () => void, r: number, c: number): void;
111
+ private get linkType();
112
+ hasExistingLink(state: EditorState): boolean;
113
+ linkInitialHref(state: EditorState): string;
114
+ applyLink(state: EditorState, dispatch: (tr: Transaction) => void, close: () => void, rawHref: string): void;
115
+ removeLink(state: EditorState, dispatch: (tr: Transaction) => void, close: () => void): void;
116
+ onLinkKeydown(event: KeyboardEvent, state: EditorState, dispatch: (tr: Transaction) => void, close: () => void, rawHref: string): void;
117
+ }
118
+ //# sourceMappingURL=doxiva-doxiva-editor.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doxiva-doxiva-editor.component.d.ts","sourceRoot":"","sources":["../src/doxiva-doxiva-editor.component.ts"],"names":[],"mappings":"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"}