@flogeez/angular-tiptap-editor 3.4.4 → 3.4.5
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/CHANGELOG.md +7 -0
- package/package.json +6 -2
- package/styles/ate-bubble-menu.global.css +48 -0
- package/styles/ate-tooltip.global.css +47 -0
- package/styles/ate-variables.global.css +173 -0
- package/styles/index.css +42 -0
- package/styles/material-symbols.css +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to `@flogeez/angular-tiptap-editor` will be documented in th
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), with the exception that the major version is specifically aligned with the major version of [Tiptap](https://tiptap.dev).
|
|
7
7
|
|
|
8
|
+
## [3.4.5] - 2026-08-04
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Styles Export Path**: Exported styles to both `styles/` and `src/lib/styles/` in `ng-package.json` to fix README path alignment while maintaining backward compatibility.
|
|
13
|
+
- **Package Manifest**: Added `"style"` field and updated `"sideEffects"` in `package.json` for CSS compatibility.
|
|
14
|
+
|
|
8
15
|
## [3.4.4] - 2026-08-03
|
|
9
16
|
|
|
10
17
|
### Added
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flogeez/angular-tiptap-editor",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.5",
|
|
4
4
|
"description": "A modern, customizable rich-text editor for Angular (18+), built with Tiptap and featuring complete internationalization support",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -44,7 +44,11 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"tslib": "^2.3.0"
|
|
46
46
|
},
|
|
47
|
-
"
|
|
47
|
+
"style": "styles/index.css",
|
|
48
|
+
"sideEffects": [
|
|
49
|
+
"*.css",
|
|
50
|
+
"**/*.css"
|
|
51
|
+
],
|
|
48
52
|
"module": "fesm2022/flogeez-angular-tiptap-editor.mjs",
|
|
49
53
|
"typings": "index.d.ts",
|
|
50
54
|
"exports": {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* Global styles for Tiptap bubble menus & Slash menu */
|
|
2
|
+
.tippy-box[data-theme~="ate-bubble-menu"],
|
|
3
|
+
.tippy-box[data-theme~="slash-menu"] {
|
|
4
|
+
/* Default Tippy limits to 350px */
|
|
5
|
+
max-width: none !important;
|
|
6
|
+
background: transparent !important;
|
|
7
|
+
box-shadow: none !important;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.tippy-box[data-theme~="ate-bubble-menu"] .tippy-content,
|
|
11
|
+
.tippy-box[data-theme~="slash-menu"] .tippy-content {
|
|
12
|
+
/* Internal container shouldn't add padding, we handle it in .bubble-menu or .slash-commands-menu */
|
|
13
|
+
padding: 0 !important;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Scoped bubble-menu styles - Restoring original design exactly as requested */
|
|
17
|
+
.tippy-box[data-theme~="ate-bubble-menu"] .bubble-menu {
|
|
18
|
+
display: flex !important;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: var(--ate-menu-gap, 2px);
|
|
21
|
+
background: var(--ate-menu-bg, rgb(255, 255, 255)) !important;
|
|
22
|
+
border: 1px solid var(--ate-menu-border, rgba(0, 0, 0, 0.1));
|
|
23
|
+
border-radius: var(--ate-menu-border-radius, 12px);
|
|
24
|
+
padding: var(--ate-menu-padding, 4px);
|
|
25
|
+
box-shadow: var(--ate-menu-shadow, 0 8px 32px rgba(0, 0, 0, 0.12));
|
|
26
|
+
z-index: 1000;
|
|
27
|
+
animation: slideUp 0.18s cubic-bezier(0, 0, 0.2, 1);
|
|
28
|
+
white-space: nowrap;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Hidden state when reference scrolls out of view */
|
|
32
|
+
.tippy-box[data-theme~="ate-bubble-menu"][data-reference-hidden],
|
|
33
|
+
.tippy-box[data-theme~="slash-menu"][data-reference-hidden] {
|
|
34
|
+
opacity: 0 !important;
|
|
35
|
+
transition: opacity 0.18s cubic-bezier(0, 0, 0.2, 1);
|
|
36
|
+
pointer-events: none !important;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@keyframes slideUp {
|
|
40
|
+
from {
|
|
41
|
+
opacity: 0;
|
|
42
|
+
transform: translateY(6px) scale(0.98);
|
|
43
|
+
}
|
|
44
|
+
to {
|
|
45
|
+
opacity: 1;
|
|
46
|
+
transform: translateY(0) scale(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* ate-tooltip tippy theme */
|
|
2
|
+
.tippy-box[data-theme~="ate-tooltip"] {
|
|
3
|
+
background-color: var(--ate-tooltip-bg, #0f172a);
|
|
4
|
+
color: var(--ate-tooltip-color, #e2e8f0);
|
|
5
|
+
border-radius: var(--ate-sub-border-radius, 6px);
|
|
6
|
+
font-size: 12px;
|
|
7
|
+
line-height: 1.4;
|
|
8
|
+
padding: 0;
|
|
9
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
|
|
10
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
11
|
+
pointer-events: none;
|
|
12
|
+
transition: opacity 0.1s ease-out;
|
|
13
|
+
text-align: center;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.tippy-box[data-theme~="ate-tooltip"] .tippy-content {
|
|
17
|
+
padding: 4px 6px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Multi-line support */
|
|
21
|
+
.tippy-box[data-theme~="ate-tooltip"] .ate-tooltip-label {
|
|
22
|
+
display: block;
|
|
23
|
+
color: var(--ate-tooltip-color, #e2e8f0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.tippy-box[data-theme~="ate-tooltip"] .ate-tooltip-shortcut {
|
|
27
|
+
display: block;
|
|
28
|
+
font-size: 10px;
|
|
29
|
+
opacity: 0.6;
|
|
30
|
+
margin-top: 2px;
|
|
31
|
+
font-family:
|
|
32
|
+
ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
|
|
33
|
+
monospace;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.tippy-box[data-theme~="ate-tooltip"] .ate-tooltip-shortcut kbd {
|
|
37
|
+
background: none;
|
|
38
|
+
border: none;
|
|
39
|
+
padding: 0;
|
|
40
|
+
color: inherit;
|
|
41
|
+
font: inherit;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Visibility state */
|
|
45
|
+
.tippy-box[data-theme~="ate-tooltip"][data-state="hidden"] {
|
|
46
|
+
opacity: 0;
|
|
47
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Full Design Tokens & CSS Custom Properties for angular-tiptap-editor
|
|
3
|
+
========================================================================== */
|
|
4
|
+
:root {
|
|
5
|
+
/* ===== BASE TOKENS ===== */
|
|
6
|
+
--ate-primary: #2563eb;
|
|
7
|
+
--ate-primary-hover: #153ca9;
|
|
8
|
+
--ate-primary-contrast: #ffffff;
|
|
9
|
+
--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 90%);
|
|
10
|
+
--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 95%);
|
|
11
|
+
--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 85%);
|
|
12
|
+
|
|
13
|
+
--ate-surface: #ffffff;
|
|
14
|
+
--ate-surface-secondary: #f8f9fa;
|
|
15
|
+
--ate-surface-tertiary: #f1f5f9;
|
|
16
|
+
--ate-surface-hover: rgba(37, 99, 235, 0.05);
|
|
17
|
+
|
|
18
|
+
--ate-text: #2d3748;
|
|
19
|
+
--ate-text-primary: #1e293b;
|
|
20
|
+
--ate-text-secondary: #64748b;
|
|
21
|
+
--ate-text-muted: #a0aec0;
|
|
22
|
+
|
|
23
|
+
--ate-border: #e2e8f0;
|
|
24
|
+
|
|
25
|
+
--ate-highlight-bg: #fef08a;
|
|
26
|
+
--ate-highlight-color: #854d0e;
|
|
27
|
+
|
|
28
|
+
--ate-button-hover: #f1f5f9;
|
|
29
|
+
--ate-button-active: #e2e8f0;
|
|
30
|
+
|
|
31
|
+
--ate-selection-bg: var(--ate-primary-light-alpha);
|
|
32
|
+
|
|
33
|
+
--ate-error-color: #c53030;
|
|
34
|
+
--ate-error-bg: #fed7d7;
|
|
35
|
+
--ate-error-border: #feb2b2;
|
|
36
|
+
|
|
37
|
+
/* ===== COMPONENT TOKENS ===== */
|
|
38
|
+
--ate-border-color: var(--ate-border);
|
|
39
|
+
--ate-border-width: 2px;
|
|
40
|
+
--ate-border-radius: 12px;
|
|
41
|
+
--ate-sub-border-radius: 8px;
|
|
42
|
+
--ate-focus-color: var(--ate-primary);
|
|
43
|
+
--ate-background: var(--ate-surface);
|
|
44
|
+
|
|
45
|
+
/* Content */
|
|
46
|
+
--ate-text-color: var(--ate-text);
|
|
47
|
+
--ate-placeholder-color: var(--ate-text-muted);
|
|
48
|
+
--ate-line-height: 1.6;
|
|
49
|
+
--ate-content-padding-block: 16px;
|
|
50
|
+
--ate-content-padding-inline: 16px;
|
|
51
|
+
--ate-content-gutter: 0px;
|
|
52
|
+
|
|
53
|
+
/* Menus (Slash/Bubble/TOC) */
|
|
54
|
+
--ate-menu-bg: var(--ate-surface);
|
|
55
|
+
--ate-menu-border-radius: var(--ate-border-radius);
|
|
56
|
+
--ate-menu-border: var(--ate-border);
|
|
57
|
+
--ate-menu-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
58
|
+
--ate-menu-padding: 4px;
|
|
59
|
+
--ate-menu-gap: 2px;
|
|
60
|
+
|
|
61
|
+
/* Toolbar */
|
|
62
|
+
--ate-toolbar-padding: var(--ate-menu-padding);
|
|
63
|
+
--ate-toolbar-gap: var(--ate-menu-gap);
|
|
64
|
+
--ate-toolbar-background: var(--ate-surface-secondary);
|
|
65
|
+
--ate-toolbar-border-color: var(--ate-border);
|
|
66
|
+
--ate-toolbar-button-color: var(--ate-text-secondary);
|
|
67
|
+
--ate-toolbar-button-hover-background: transparent;
|
|
68
|
+
--ate-toolbar-button-active-background: var(--ate-primary-light);
|
|
69
|
+
--ate-toolbar-button-active-color: var(--ate-primary);
|
|
70
|
+
|
|
71
|
+
/* Counter & Footer */
|
|
72
|
+
--ate-counter-color: var(--ate-text-secondary);
|
|
73
|
+
--ate-counter-background: var(--ate-surface-secondary);
|
|
74
|
+
--ate-counter-border-color: var(--ate-border);
|
|
75
|
+
|
|
76
|
+
/* Table of Contents (TOC) */
|
|
77
|
+
--ate-toc-width: 240px;
|
|
78
|
+
--ate-toc-gap: 2px;
|
|
79
|
+
--ate-toc-item-height: 16px;
|
|
80
|
+
--ate-toc-item-hover-height: 24px;
|
|
81
|
+
--ate-toc-border-radius: var(--ate-border-radius);
|
|
82
|
+
--ate-toc-padding: var(--ate-menu-padding);
|
|
83
|
+
--ate-toc-hitbox-padding: 16px;
|
|
84
|
+
--ate-toc-hitbox-padding-vertical: 8px;
|
|
85
|
+
|
|
86
|
+
/* Drag & Drop */
|
|
87
|
+
--ate-drag-background: #f0f8ff;
|
|
88
|
+
--ate-drag-border-color: var(--ate-primary);
|
|
89
|
+
|
|
90
|
+
/* Blockquote */
|
|
91
|
+
--ate-blockquote-border-color: var(--ate-border);
|
|
92
|
+
--ate-blockquote-background: var(--ate-surface-secondary);
|
|
93
|
+
|
|
94
|
+
/* Code */
|
|
95
|
+
--ate-code-background: var(--ate-surface-secondary);
|
|
96
|
+
--ate-code-color: var(--ate-text);
|
|
97
|
+
--ate-code-border-color: var(--ate-border);
|
|
98
|
+
|
|
99
|
+
--ate-code-block-background: #0f172a;
|
|
100
|
+
--ate-code-block-color: #e2e8f0;
|
|
101
|
+
--ate-code-block-border-color: var(--ate-border);
|
|
102
|
+
|
|
103
|
+
/* Images */
|
|
104
|
+
--ate-image-border-radius: 16px;
|
|
105
|
+
--ate-image-selected-color: var(--ate-primary);
|
|
106
|
+
|
|
107
|
+
/* Scrollbars */
|
|
108
|
+
--ate-scrollbar-width: 10px;
|
|
109
|
+
--ate-scrollbar-thumb: var(--ate-border);
|
|
110
|
+
--ate-scrollbar-thumb-hover: var(--ate-text-muted);
|
|
111
|
+
--ate-scrollbar-track: transparent;
|
|
112
|
+
|
|
113
|
+
/* Tables */
|
|
114
|
+
--ate-table-border-color: var(--ate-border);
|
|
115
|
+
--ate-table-header-background: var(--ate-surface-secondary);
|
|
116
|
+
--ate-table-header-color: var(--ate-text);
|
|
117
|
+
--ate-table-cell-background: var(--ate-surface);
|
|
118
|
+
--ate-table-cell-selected-background: var(--ate-primary-light);
|
|
119
|
+
--ate-table-resize-handle-color: var(--ate-primary);
|
|
120
|
+
--ate-table-row-hover-background: var(--ate-primary-lighter);
|
|
121
|
+
|
|
122
|
+
/* Floating UI & Tooltips */
|
|
123
|
+
--ate-tooltip-bg: var(--ate-code-block-background, #0f172a);
|
|
124
|
+
--ate-tooltip-color: var(--ate-code-block-color, #e2e8f0);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Dark mode global theme support */
|
|
128
|
+
.dark,
|
|
129
|
+
:root.dark,
|
|
130
|
+
body.dark,
|
|
131
|
+
:root[data-theme="dark"],
|
|
132
|
+
[data-theme="dark"] {
|
|
133
|
+
--ate-primary: #3b82f6;
|
|
134
|
+
--ate-primary-contrast: #ffffff;
|
|
135
|
+
--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 85%);
|
|
136
|
+
--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 92%);
|
|
137
|
+
--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 80%);
|
|
138
|
+
|
|
139
|
+
--ate-surface: #020617;
|
|
140
|
+
--ate-surface-secondary: #0f172a;
|
|
141
|
+
--ate-surface-tertiary: #1e293b;
|
|
142
|
+
--ate-surface-hover: rgba(59, 130, 246, 0.1);
|
|
143
|
+
|
|
144
|
+
--ate-text: #f8fafc;
|
|
145
|
+
--ate-text-primary: #f8fafc;
|
|
146
|
+
--ate-text-secondary: #94a3b8;
|
|
147
|
+
--ate-text-muted: #64748b;
|
|
148
|
+
|
|
149
|
+
--ate-border: #1e293b;
|
|
150
|
+
|
|
151
|
+
--ate-highlight-bg: #854d0e;
|
|
152
|
+
--ate-highlight-color: #fef08a;
|
|
153
|
+
|
|
154
|
+
--ate-button-hover: #1e293b;
|
|
155
|
+
--ate-button-active: #0f172a;
|
|
156
|
+
|
|
157
|
+
--ate-menu-border: rgba(255, 255, 255, 0.1);
|
|
158
|
+
--ate-menu-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
|
|
159
|
+
|
|
160
|
+
--ate-error-color: #f87171;
|
|
161
|
+
--ate-error-bg: #450a0a;
|
|
162
|
+
--ate-error-border: #7f1d1d;
|
|
163
|
+
|
|
164
|
+
--ate-drag-background: var(--ate-surface-tertiary);
|
|
165
|
+
--ate-drag-border-color: var(--ate-primary);
|
|
166
|
+
--ate-blockquote-border-color: var(--ate-primary);
|
|
167
|
+
--ate-toolbar-button-active-background: var(--ate-primary-light);
|
|
168
|
+
--ate-toolbar-button-active-color: var(--ate-primary);
|
|
169
|
+
--ate-button-hover: var(--ate-surface-tertiary);
|
|
170
|
+
--ate-button-active: var(--ate-surface-secondary);
|
|
171
|
+
--ate-scrollbar-thumb: var(--ate-surface-tertiary);
|
|
172
|
+
--ate-scrollbar-thumb-hover: var(--ate-text-muted);
|
|
173
|
+
}
|
package/styles/index.css
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
@import "./ate-variables.global.css";
|
|
2
|
+
@import "./ate-bubble-menu.global.css";
|
|
3
|
+
@import "./ate-tooltip.global.css";
|
|
4
|
+
@import "./material-symbols.css";
|
|
5
|
+
|
|
6
|
+
/* Styles for links */
|
|
7
|
+
.ate-link {
|
|
8
|
+
color: var(--ate-primary, #2563eb);
|
|
9
|
+
text-decoration: underline;
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
transition: color 0.2s ease;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.ate-link:hover {
|
|
15
|
+
color: var(--ate-primary-hover, #153ca9);
|
|
16
|
+
text-decoration: underline;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Styles for highlight */
|
|
20
|
+
.ate-highlight {
|
|
21
|
+
background-color: var(--ate-highlight-bg, #fef08a);
|
|
22
|
+
padding: 0.1em 0.2em;
|
|
23
|
+
border-radius: 2px;
|
|
24
|
+
color: var(--ate-highlight-color, #854d0e);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Styles for text alignment - Tiptap uses classes */
|
|
28
|
+
.ProseMirror .has-text-align-left {
|
|
29
|
+
text-align: left;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ProseMirror .has-text-align-center {
|
|
33
|
+
text-align: center;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.ProseMirror .has-text-align-right {
|
|
37
|
+
text-align: right;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ProseMirror .has-text-align-justify {
|
|
41
|
+
text-align: justify;
|
|
42
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.material-symbols-outlined {
|
|
2
|
+
font-family: "Material Symbols Outlined";
|
|
3
|
+
font-weight: normal;
|
|
4
|
+
font-style: normal;
|
|
5
|
+
font-size: 24px;
|
|
6
|
+
line-height: 1;
|
|
7
|
+
letter-spacing: normal;
|
|
8
|
+
text-transform: none;
|
|
9
|
+
display: inline-block;
|
|
10
|
+
white-space: nowrap;
|
|
11
|
+
word-wrap: normal;
|
|
12
|
+
direction: ltr;
|
|
13
|
+
font-feature-settings: "liga";
|
|
14
|
+
-webkit-font-feature-settings: "liga";
|
|
15
|
+
-webkit-font-smoothing: antialiased;
|
|
16
|
+
font-variation-settings:
|
|
17
|
+
"FILL" 0,
|
|
18
|
+
"wght" 400,
|
|
19
|
+
"GRAD" 0,
|
|
20
|
+
"opsz" 24;
|
|
21
|
+
}
|