@od-labs/payloadcms-dynamic-value-richtext 1.0.2 → 1.1.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.
- package/README.md +128 -96
- package/dist/exports/jsx.d.ts +9 -0
- package/dist/exports/jsx.js +73 -0
- package/dist/exports/jsx.js.map +1 -0
- package/dist/exports/react.d.ts +19 -0
- package/dist/exports/react.js +22 -0
- package/dist/exports/react.js.map +1 -0
- package/dist/exports/rsc.d.ts +1 -0
- package/dist/exports/rsc.js +3 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/features/DynamicValue/feature.client.d.ts +4 -8
- package/dist/features/DynamicValue/feature.client.js +187 -89
- package/dist/features/DynamicValue/feature.client.js.map +1 -1
- package/dist/features/DynamicValue/feature.server.d.ts +16 -5
- package/dist/features/DynamicValue/feature.server.js +78 -39
- package/dist/features/DynamicValue/feature.server.js.map +1 -1
- package/dist/features/DynamicValue/types.d.ts +23 -23
- package/dist/features/DynamicValue/types.js.map +1 -1
- package/dist/icons/dynamicValue/bold.d.ts +2 -0
- package/dist/icons/dynamicValue/bold.js +6 -0
- package/dist/icons/dynamicValue/bold.js.map +1 -0
- package/dist/icons/dynamicValue/index.d.ts +3 -0
- package/dist/icons/dynamicValue/index.js +14 -0
- package/dist/icons/dynamicValue/index.js.map +1 -0
- package/dist/icons/dynamicValue/italic.d.ts +2 -0
- package/dist/icons/dynamicValue/italic.js +6 -0
- package/dist/icons/dynamicValue/italic.js.map +1 -0
- package/dist/icons/dynamicValue/link.d.ts +2 -0
- package/dist/icons/dynamicValue/link.js +6 -0
- package/dist/icons/dynamicValue/link.js.map +1 -0
- package/dist/icons/dynamicValue/strikethrough.d.ts +2 -0
- package/dist/icons/dynamicValue/strikethrough.js +6 -0
- package/dist/icons/dynamicValue/strikethrough.js.map +1 -0
- package/dist/icons/dynamicValue/types.d.ts +5 -0
- package/dist/icons/dynamicValue/types.js +3 -0
- package/dist/icons/dynamicValue/types.js.map +1 -0
- package/dist/icons/dynamicValue/underline.d.ts +2 -0
- package/dist/icons/dynamicValue/underline.js +6 -0
- package/dist/icons/dynamicValue/underline.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +75 -3
- package/dist/index.js.map +1 -1
- package/dist/nodes/DynamicValueNode/index.d.ts +13 -13
- package/dist/nodes/DynamicValueNode/index.js +155 -83
- package/dist/nodes/DynamicValueNode/index.js.map +1 -1
- package/package.json +41 -1
|
@@ -1,125 +1,197 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export
|
|
1
|
+
import { $applyNodeReplacement, TextNode } from '@payloadcms/richtext-lexical/lexical';
|
|
2
|
+
import { dynamicValueIcons } from '../../icons/dynamicValue/index.js';
|
|
3
|
+
export const DYNAMIC_VALUE_NODE_TYPE = 'dynamic-value';
|
|
4
|
+
export const LEGACY_DYNAMIC_VALUE_NODE_TYPE = 'dynamicValue';
|
|
5
|
+
const getAppliedIconTypes = (node)=>{
|
|
6
|
+
const iconTypes = [];
|
|
7
|
+
const parent = node.getParent();
|
|
8
|
+
if (parent?.getType() === 'link') {
|
|
9
|
+
iconTypes.push('link');
|
|
10
|
+
}
|
|
11
|
+
if (node.hasFormat('bold')) {
|
|
12
|
+
iconTypes.push('bold');
|
|
13
|
+
}
|
|
14
|
+
if (node.hasFormat('italic')) {
|
|
15
|
+
iconTypes.push('italic');
|
|
16
|
+
}
|
|
17
|
+
if (node.hasFormat('underline')) {
|
|
18
|
+
iconTypes.push('underline');
|
|
19
|
+
}
|
|
20
|
+
if (node.hasFormat('strikethrough')) {
|
|
21
|
+
iconTypes.push('strikethrough');
|
|
22
|
+
}
|
|
23
|
+
return iconTypes;
|
|
24
|
+
};
|
|
25
|
+
const buildIconsDataURI = (iconTypes)=>{
|
|
26
|
+
if (!iconTypes.length) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const fillColor = '#b7c4ff';
|
|
30
|
+
const strokeColor = '#b7c4ff';
|
|
31
|
+
const iconGap = 2;
|
|
32
|
+
const iconSize = 14;
|
|
33
|
+
const totalWidth = iconTypes.length * iconSize + (iconTypes.length - 1) * iconGap;
|
|
34
|
+
const paths = iconTypes.map((iconType, index)=>{
|
|
35
|
+
const icon = dynamicValueIcons[iconType];
|
|
36
|
+
const x = index * (iconSize + iconGap);
|
|
37
|
+
if (icon.mode === 'stroke') {
|
|
38
|
+
return `<g transform='translate(${x} 0)'><path d='${icon.path}' fill='none' stroke='${strokeColor}' stroke-linecap='square'/></g>`;
|
|
39
|
+
}
|
|
40
|
+
return `<g transform='translate(${x} 0)'><path d='${icon.path}' fill='${fillColor}'/></g>`;
|
|
41
|
+
}).join('');
|
|
42
|
+
const svg = `<svg xmlns='http://www.w3.org/2000/svg' width='${totalWidth}' height='14' viewBox='0 0 ${totalWidth} 20'>${paths}</svg>`;
|
|
43
|
+
return `url("data:image/svg+xml,${encodeURIComponent(svg)}")`;
|
|
44
|
+
};
|
|
45
|
+
const selectElementText = (dom)=>{
|
|
46
|
+
const selection = window.getSelection();
|
|
47
|
+
if (!selection) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const range = document.createRange();
|
|
51
|
+
range.selectNodeContents(dom);
|
|
52
|
+
selection.removeAllRanges();
|
|
53
|
+
selection.addRange(range);
|
|
54
|
+
};
|
|
55
|
+
let hasRegisteredSelectionStyle = false;
|
|
56
|
+
const ensureInvisibleSelectionStyle = ()=>{
|
|
57
|
+
if (hasRegisteredSelectionStyle || typeof document === 'undefined') {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const styleElement = document.createElement('style');
|
|
61
|
+
styleElement.textContent = `
|
|
62
|
+
.payload-dynamic-value-node::selection {
|
|
63
|
+
background: transparent;
|
|
64
|
+
color: inherit;
|
|
65
|
+
-webkit-text-fill-color: inherit;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.payload-dynamic-value-node::-moz-selection {
|
|
69
|
+
background: transparent;
|
|
70
|
+
color: inherit;
|
|
71
|
+
-webkit-text-fill-color: inherit;
|
|
72
|
+
}
|
|
73
|
+
`;
|
|
74
|
+
document.head.append(styleElement);
|
|
75
|
+
hasRegisteredSelectionStyle = true;
|
|
76
|
+
};
|
|
77
|
+
const applyDynamicValueStyles = (node, dom)=>{
|
|
78
|
+
ensureInvisibleSelectionStyle();
|
|
79
|
+
const iconTypes = getAppliedIconTypes(node);
|
|
80
|
+
const iconDataURI = buildIconsDataURI(iconTypes);
|
|
81
|
+
const iconBlockWidth = iconTypes.length ? iconTypes.length * 16 : 0;
|
|
82
|
+
dom.classList.add('payload-dynamic-value-node');
|
|
83
|
+
dom.setAttribute('data-payload-dynamic-value', 'true');
|
|
84
|
+
dom.setAttribute('data-payload-dynamic-field', node.__field);
|
|
85
|
+
dom.setAttribute('data-payload-dynamic-icons', iconTypes.join(','));
|
|
86
|
+
dom.style.alignItems = 'center';
|
|
87
|
+
dom.style.backgroundColor = 'var(--theme-elevation-150)';
|
|
88
|
+
dom.style.backgroundImage = iconDataURI || 'none';
|
|
89
|
+
dom.style.backgroundPosition = '6px center';
|
|
90
|
+
dom.style.backgroundRepeat = 'no-repeat';
|
|
91
|
+
dom.style.backgroundSize = iconTypes.length ? `${iconBlockWidth - 2}px 14px` : '0 0';
|
|
92
|
+
dom.style.border = '1px solid var(--theme-elevation-300)';
|
|
93
|
+
dom.style.borderRadius = '4px';
|
|
94
|
+
dom.style.boxShadow = '0 1px 2px rgba(0,0,0,0.05)';
|
|
95
|
+
dom.style.color = 'var(--theme-text)';
|
|
96
|
+
dom.style.cursor = 'pointer';
|
|
97
|
+
dom.style.display = 'inline-flex';
|
|
98
|
+
dom.style.fontFamily = 'var(--font-mono, monospace)';
|
|
99
|
+
dom.style.fontSize = '0.85em';
|
|
100
|
+
dom.style.margin = '0 2px';
|
|
101
|
+
dom.style.minHeight = '1.6em';
|
|
102
|
+
dom.style.padding = iconTypes.length ? `1px 6px 1px ${iconBlockWidth + 12}px` : '1px 6px';
|
|
103
|
+
dom.style.userSelect = 'all';
|
|
104
|
+
dom.style.verticalAlign = 'middle';
|
|
105
|
+
dom.style.webkitTextFillColor = 'var(--theme-text)';
|
|
106
|
+
dom.onmousedown = (event)=>{
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
selectElementText(dom);
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
export class DynamicValueNode extends TextNode {
|
|
5
112
|
__field;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
super(key);
|
|
113
|
+
constructor(field, text, key){
|
|
114
|
+
super(text, key);
|
|
9
115
|
this.__field = field;
|
|
10
|
-
this.__label = label ?? field;
|
|
11
116
|
}
|
|
12
117
|
static clone(node) {
|
|
13
|
-
return new DynamicValueNode(node.__field, node.
|
|
118
|
+
return new DynamicValueNode(node.__field, node.__text, node.__key);
|
|
14
119
|
}
|
|
15
120
|
static getType() {
|
|
16
|
-
return
|
|
121
|
+
return DYNAMIC_VALUE_NODE_TYPE;
|
|
17
122
|
}
|
|
18
123
|
static importDOM() {
|
|
19
124
|
return {
|
|
20
125
|
span: (domNode)=>{
|
|
21
|
-
if (
|
|
22
|
-
return
|
|
126
|
+
if (domNode instanceof HTMLSpanElement && domNode.hasAttribute('data-payload-dynamic-value')) {
|
|
127
|
+
return {
|
|
128
|
+
conversion: convertDynamicValueElement,
|
|
129
|
+
priority: 2
|
|
130
|
+
};
|
|
23
131
|
}
|
|
24
|
-
return
|
|
25
|
-
conversion: (domNode)=>{
|
|
26
|
-
const field = domNode.getAttribute('data-payload-dynamic-field');
|
|
27
|
-
const label = domNode.textContent || undefined;
|
|
28
|
-
if (field) {
|
|
29
|
-
return {
|
|
30
|
-
node: $createDynamicValueNode(field, label)
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
node: null
|
|
35
|
-
};
|
|
36
|
-
},
|
|
37
|
-
priority: 1
|
|
38
|
-
};
|
|
132
|
+
return null;
|
|
39
133
|
}
|
|
40
134
|
};
|
|
41
135
|
}
|
|
42
136
|
static importJSON(serializedNode) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
style: {
|
|
55
|
-
alignItems: 'center',
|
|
56
|
-
backgroundColor: 'var(--theme-elevation-150)',
|
|
57
|
-
border: '1px solid var(--theme-elevation-300)',
|
|
58
|
-
borderRadius: '4px',
|
|
59
|
-
boxShadow: '0 1px 2px rgba(0,0,0,0.05)',
|
|
60
|
-
color: 'var(--theme-text)',
|
|
61
|
-
cursor: 'default',
|
|
62
|
-
display: 'inline-flex',
|
|
63
|
-
fontFamily: 'var(--font-mono, monospace)',
|
|
64
|
-
fontSize: '0.85em',
|
|
65
|
-
fontWeight: 600,
|
|
66
|
-
margin: '0 2px',
|
|
67
|
-
padding: '1px 6px',
|
|
68
|
-
userSelect: 'none',
|
|
69
|
-
verticalAlign: 'middle'
|
|
70
|
-
},
|
|
71
|
-
children: [
|
|
72
|
-
/*#__PURE__*/ _jsx("span", {
|
|
73
|
-
style: {
|
|
74
|
-
color: 'var(--theme-primary)',
|
|
75
|
-
fontSize: '0.8em',
|
|
76
|
-
marginRight: '4px',
|
|
77
|
-
opacity: 0.4
|
|
78
|
-
},
|
|
79
|
-
children: "VAR"
|
|
80
|
-
}),
|
|
81
|
-
this.__label
|
|
82
|
-
]
|
|
83
|
-
});
|
|
137
|
+
const node = $createDynamicValueNode(serializedNode.field, serializedNode.label || serializedNode.text);
|
|
138
|
+
node.setFormat(serializedNode.format);
|
|
139
|
+
node.setStyle(serializedNode.style);
|
|
140
|
+
node.setMode(serializedNode.mode);
|
|
141
|
+
node.setDetail(serializedNode.detail);
|
|
142
|
+
return node;
|
|
143
|
+
}
|
|
144
|
+
createDOM(config) {
|
|
145
|
+
const dom = super.createDOM(config);
|
|
146
|
+
applyDynamicValueStyles(this, dom);
|
|
147
|
+
return dom;
|
|
84
148
|
}
|
|
85
149
|
exportDOM() {
|
|
86
150
|
const element = document.createElement('span');
|
|
87
151
|
element.setAttribute('data-payload-dynamic-value', 'true');
|
|
88
152
|
element.setAttribute('data-payload-dynamic-field', this.__field);
|
|
89
|
-
element.textContent = this.
|
|
153
|
+
element.textContent = this.getTextContent();
|
|
90
154
|
return {
|
|
91
155
|
element
|
|
92
156
|
};
|
|
93
157
|
}
|
|
94
158
|
exportJSON() {
|
|
95
159
|
return {
|
|
96
|
-
|
|
160
|
+
...super.exportJSON(),
|
|
161
|
+
type: DYNAMIC_VALUE_NODE_TYPE,
|
|
97
162
|
field: this.__field,
|
|
98
|
-
label: this.
|
|
163
|
+
label: this.getTextContent(),
|
|
99
164
|
version: 1
|
|
100
165
|
};
|
|
101
166
|
}
|
|
102
167
|
getField() {
|
|
103
168
|
return this.__field;
|
|
104
169
|
}
|
|
105
|
-
|
|
106
|
-
return this.__label;
|
|
107
|
-
}
|
|
108
|
-
isInline() {
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
isToken() {
|
|
170
|
+
isTextEntity() {
|
|
112
171
|
return true;
|
|
113
172
|
}
|
|
114
|
-
updateDOM() {
|
|
115
|
-
|
|
173
|
+
updateDOM(prevNode, dom, config) {
|
|
174
|
+
const didUpdate = super.updateDOM(prevNode, dom, config);
|
|
175
|
+
if (prevNode.__field !== this.__field || prevNode.getFormat() !== this.getFormat()) {
|
|
176
|
+
applyDynamicValueStyles(this, dom);
|
|
177
|
+
}
|
|
178
|
+
return didUpdate;
|
|
116
179
|
}
|
|
117
180
|
}
|
|
118
|
-
|
|
119
|
-
|
|
181
|
+
function convertDynamicValueElement(domNode) {
|
|
182
|
+
const span = domNode;
|
|
183
|
+
const field = span.getAttribute('data-payload-dynamic-field') || span.textContent || '';
|
|
184
|
+
return {
|
|
185
|
+
node: $createDynamicValueNode(field, span.textContent || field)
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
export function $createDynamicValueNode(field, text) {
|
|
189
|
+
const node = new DynamicValueNode(field, text || field);
|
|
190
|
+
node.setMode('token');
|
|
191
|
+
return $applyNodeReplacement(node);
|
|
120
192
|
}
|
|
121
193
|
export function $isDynamicValueNode(node) {
|
|
122
|
-
return node?.getType() ===
|
|
194
|
+
return node?.getType() === DYNAMIC_VALUE_NODE_TYPE;
|
|
123
195
|
}
|
|
124
196
|
|
|
125
197
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/nodes/DynamicValueNode/index.tsx"],"sourcesContent":["import {\r\n DecoratorNode,\r\n type DOMConversionMap,\r\n type DOMConversionOutput,\r\n type DOMExportOutput,\r\n type LexicalNode,\r\n type NodeKey,\r\n type SerializedLexicalNode,\r\n type Spread,\r\n} from '@payloadcms/richtext-lexical/lexical'\r\nimport React from 'react'\r\n\r\nexport type SerializedDynamicValueNode = Spread<\r\n {\r\n field: string\r\n label?: string\r\n },\r\n SerializedLexicalNode\r\n>\r\n\r\nexport class DynamicValueNode extends DecoratorNode<React.ReactNode> {\r\n __field: string\r\n __label: string\r\n\r\n constructor(field: string, label?: string, key?: NodeKey) {\r\n super(key)\r\n this.__field = field\r\n this.__label = label ?? field\r\n }\r\n\r\n static clone(node: DynamicValueNode): DynamicValueNode {\r\n return new DynamicValueNode(node.__field, node.__label, node.getKey())\r\n }\r\n\r\n static getType(): string {\r\n return 'dynamic-value'\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n span: (domNode: HTMLElement) => {\r\n if (!domNode.hasAttribute('data-payload-dynamic-value')) {\r\n return null\r\n }\r\n return {\r\n conversion: (domNode: HTMLElement): DOMConversionOutput => {\r\n const field = domNode.getAttribute('data-payload-dynamic-field')\r\n const label = domNode.textContent || undefined\r\n if (field) {\r\n return { node: $createDynamicValueNode(field, label) }\r\n }\r\n return { node: null }\r\n },\r\n priority: 1,\r\n }\r\n },\r\n }\r\n }\r\n\r\n static importJSON(serializedNode: SerializedDynamicValueNode): DynamicValueNode {\r\n return $createDynamicValueNode(serializedNode.field, serializedNode.label)\r\n }\r\n\r\n createDOM(): HTMLElement {\r\n const span = document.createElement('span')\r\n span.style.display = 'inline-block'\r\n span.className = 'payload-dynamic-value-node'\r\n return span\r\n }\r\n\r\n decorate(): React.ReactNode {\r\n return (\r\n <span\r\n contentEditable={false}\r\n style={{\r\n alignItems: 'center',\r\n backgroundColor: 'var(--theme-elevation-150)',\r\n border: '1px solid var(--theme-elevation-300)',\r\n borderRadius: '4px',\r\n boxShadow: '0 1px 2px rgba(0,0,0,0.05)',\r\n color: 'var(--theme-text)',\r\n cursor: 'default',\r\n display: 'inline-flex',\r\n fontFamily: 'var(--font-mono, monospace)',\r\n fontSize: '0.85em',\r\n fontWeight: 600,\r\n margin: '0 2px',\r\n padding: '1px 6px',\r\n userSelect: 'none',\r\n verticalAlign: 'middle',\r\n }}\r\n >\r\n <span\r\n style={{\r\n color: 'var(--theme-primary)',\r\n fontSize: '0.8em',\r\n marginRight: '4px',\r\n opacity: 0.4,\r\n }}\r\n >\r\n VAR\r\n </span>\r\n {this.__label}\r\n </span>\r\n )\r\n }\r\n\r\n exportDOM(): DOMExportOutput {\r\n const element = document.createElement('span')\r\n element.setAttribute('data-payload-dynamic-value', 'true')\r\n element.setAttribute('data-payload-dynamic-field', this.__field)\r\n element.textContent = this.__label\r\n return { element }\r\n }\r\n\r\n exportJSON(): SerializedDynamicValueNode {\r\n return {\r\n type: 'dynamic-value',\r\n field: this.__field,\r\n label: this.__label,\r\n version: 1,\r\n }\r\n }\r\n\r\n getField(): string {\r\n return this.__field\r\n }\r\n\r\n getTextContent(): string {\r\n return this.__label\r\n }\r\n\r\n isInline(): boolean {\r\n return true\r\n }\r\n\r\n isToken(): boolean {\r\n return true\r\n }\r\n\r\n updateDOM(): boolean {\r\n return false\r\n }\r\n}\r\n\r\nexport function $createDynamicValueNode(field: string, label?: string): DynamicValueNode {\r\n return new DynamicValueNode(field, label)\r\n}\r\n\r\nexport function $isDynamicValueNode(\r\n node: LexicalNode | null | undefined,\r\n): node is DynamicValueNode {\r\n return node?.getType() === 'dynamic-value'\r\n}\r\n"],"names":["DecoratorNode","React","DynamicValueNode","__field","__label","field","label","key","clone","node","getKey","getType","importDOM","span","domNode","hasAttribute","conversion","getAttribute","textContent","undefined","$createDynamicValueNode","priority","importJSON","serializedNode","createDOM","document","createElement","style","display","className","decorate","contentEditable","alignItems","backgroundColor","border","borderRadius","boxShadow","color","cursor","fontFamily","fontSize","fontWeight","margin","padding","userSelect","verticalAlign","marginRight","opacity","exportDOM","element","setAttribute","exportJSON","type","version","getField","getTextContent","isInline","isToken","updateDOM","$isDynamicValueNode"],"mappings":";AAAA,SACEA,aAAa,QAQR,uCAAsC;AAC7C,OAAOC,WAAW,QAAO;AAUzB,OAAO,MAAMC,yBAAyBF;IACpCG,QAAe;IACfC,QAAe;IAEf,YAAYC,KAAa,EAAEC,KAAc,EAAEC,GAAa,CAAE;QACxD,KAAK,CAACA;QACN,IAAI,CAACJ,OAAO,GAAGE;QACf,IAAI,CAACD,OAAO,GAAGE,SAASD;IAC1B;IAEA,OAAOG,MAAMC,IAAsB,EAAoB;QACrD,OAAO,IAAIP,iBAAiBO,KAAKN,OAAO,EAAEM,KAAKL,OAAO,EAAEK,KAAKC,MAAM;IACrE;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAqC;QAC1C,OAAO;YACLC,MAAM,CAACC;gBACL,IAAI,CAACA,QAAQC,YAAY,CAAC,+BAA+B;oBACvD,OAAO;gBACT;gBACA,OAAO;oBACLC,YAAY,CAACF;wBACX,MAAMT,QAAQS,QAAQG,YAAY,CAAC;wBACnC,MAAMX,QAAQQ,QAAQI,WAAW,IAAIC;wBACrC,IAAId,OAAO;4BACT,OAAO;gCAAEI,MAAMW,wBAAwBf,OAAOC;4BAAO;wBACvD;wBACA,OAAO;4BAAEG,MAAM;wBAAK;oBACtB;oBACAY,UAAU;gBACZ;YACF;QACF;IACF;IAEA,OAAOC,WAAWC,cAA0C,EAAoB;QAC9E,OAAOH,wBAAwBG,eAAelB,KAAK,EAAEkB,eAAejB,KAAK;IAC3E;IAEAkB,YAAyB;QACvB,MAAMX,OAAOY,SAASC,aAAa,CAAC;QACpCb,KAAKc,KAAK,CAACC,OAAO,GAAG;QACrBf,KAAKgB,SAAS,GAAG;QACjB,OAAOhB;IACT;IAEAiB,WAA4B;QAC1B,qBACE,MAACjB;YACCkB,iBAAiB;YACjBJ,OAAO;gBACLK,YAAY;gBACZC,iBAAiB;gBACjBC,QAAQ;gBACRC,cAAc;gBACdC,WAAW;gBACXC,OAAO;gBACPC,QAAQ;gBACRV,SAAS;gBACTW,YAAY;gBACZC,UAAU;gBACVC,YAAY;gBACZC,QAAQ;gBACRC,SAAS;gBACTC,YAAY;gBACZC,eAAe;YACjB;;8BAEA,KAAChC;oBACCc,OAAO;wBACLU,OAAO;wBACPG,UAAU;wBACVM,aAAa;wBACbC,SAAS;oBACX;8BACD;;gBAGA,IAAI,CAAC3C,OAAO;;;IAGnB;IAEA4C,YAA6B;QAC3B,MAAMC,UAAUxB,SAASC,aAAa,CAAC;QACvCuB,QAAQC,YAAY,CAAC,8BAA8B;QACnDD,QAAQC,YAAY,CAAC,8BAA8B,IAAI,CAAC/C,OAAO;QAC/D8C,QAAQ/B,WAAW,GAAG,IAAI,CAACd,OAAO;QAClC,OAAO;YAAE6C;QAAQ;IACnB;IAEAE,aAAyC;QACvC,OAAO;YACLC,MAAM;YACN/C,OAAO,IAAI,CAACF,OAAO;YACnBG,OAAO,IAAI,CAACF,OAAO;YACnBiD,SAAS;QACX;IACF;IAEAC,WAAmB;QACjB,OAAO,IAAI,CAACnD,OAAO;IACrB;IAEAoD,iBAAyB;QACvB,OAAO,IAAI,CAACnD,OAAO;IACrB;IAEAoD,WAAoB;QAClB,OAAO;IACT;IAEAC,UAAmB;QACjB,OAAO;IACT;IAEAC,YAAqB;QACnB,OAAO;IACT;AACF;AAEA,OAAO,SAAStC,wBAAwBf,KAAa,EAAEC,KAAc;IACnE,OAAO,IAAIJ,iBAAiBG,OAAOC;AACrC;AAEA,OAAO,SAASqD,oBACdlD,IAAoC;IAEpC,OAAOA,MAAME,cAAc;AAC7B"}
|
|
1
|
+
{"version":3,"sources":["../../../src/nodes/DynamicValueNode/index.tsx"],"sourcesContent":["import type {\r\n DOMConversionMap,\r\n DOMConversionOutput,\r\n DOMExportOutput,\r\n EditorConfig,\r\n LexicalNode,\r\n NodeKey,\r\n SerializedTextNode,\r\n Spread,\r\n} from '@payloadcms/richtext-lexical/lexical'\r\n\r\nimport { $applyNodeReplacement, TextNode } from '@payloadcms/richtext-lexical/lexical'\r\n\r\nimport { dynamicValueIcons, type DynamicValueIconType } from '../../icons/dynamicValue/index.js'\r\n\r\nexport const DYNAMIC_VALUE_NODE_TYPE = 'dynamic-value'\r\nexport const LEGACY_DYNAMIC_VALUE_NODE_TYPE = 'dynamicValue'\r\n\r\nexport type SerializedDynamicValueNode = Spread<\r\n {\r\n field: string\r\n label?: string\r\n type: typeof DYNAMIC_VALUE_NODE_TYPE\r\n version: 1\r\n },\r\n SerializedTextNode\r\n>\r\n\r\nconst getAppliedIconTypes = (node: DynamicValueNode): DynamicValueIconType[] => {\r\n const iconTypes: DynamicValueIconType[] = []\r\n const parent = node.getParent()\r\n\r\n if (parent?.getType() === 'link') {\r\n iconTypes.push('link')\r\n }\r\n\r\n if (node.hasFormat('bold')) {\r\n iconTypes.push('bold')\r\n }\r\n\r\n if (node.hasFormat('italic')) {\r\n iconTypes.push('italic')\r\n }\r\n\r\n if (node.hasFormat('underline')) {\r\n iconTypes.push('underline')\r\n }\r\n\r\n if (node.hasFormat('strikethrough')) {\r\n iconTypes.push('strikethrough')\r\n }\r\n\r\n return iconTypes\r\n}\r\n\r\nconst buildIconsDataURI = (iconTypes: DynamicValueIconType[]): null | string => {\r\n if (!iconTypes.length) {\r\n return null\r\n }\r\n\r\n const fillColor = '#b7c4ff'\r\n const strokeColor = '#b7c4ff'\r\n const iconGap = 2\r\n const iconSize = 14\r\n const totalWidth = iconTypes.length * iconSize + (iconTypes.length - 1) * iconGap\r\n\r\n const paths = iconTypes\r\n .map((iconType, index) => {\r\n const icon = dynamicValueIcons[iconType]\r\n const x = index * (iconSize + iconGap)\r\n\r\n if (icon.mode === 'stroke') {\r\n return `<g transform='translate(${x} 0)'><path d='${icon.path}' fill='none' stroke='${strokeColor}' stroke-linecap='square'/></g>`\r\n }\r\n\r\n return `<g transform='translate(${x} 0)'><path d='${icon.path}' fill='${fillColor}'/></g>`\r\n })\r\n .join('')\r\n\r\n const svg = `<svg xmlns='http://www.w3.org/2000/svg' width='${totalWidth}' height='14' viewBox='0 0 ${totalWidth} 20'>${paths}</svg>`\r\n\r\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`\r\n}\r\n\r\nconst selectElementText = (dom: HTMLElement): void => {\r\n const selection = window.getSelection()\r\n if (!selection) {\r\n return\r\n }\r\n\r\n const range = document.createRange()\r\n range.selectNodeContents(dom)\r\n selection.removeAllRanges()\r\n selection.addRange(range)\r\n}\r\n\r\n\r\nlet hasRegisteredSelectionStyle = false\r\n\r\nconst ensureInvisibleSelectionStyle = (): void => {\r\n if (hasRegisteredSelectionStyle || typeof document === 'undefined') {\r\n return\r\n }\r\n\r\n const styleElement = document.createElement('style')\r\n styleElement.textContent = `\r\n .payload-dynamic-value-node::selection {\r\n background: transparent;\r\n color: inherit;\r\n -webkit-text-fill-color: inherit;\r\n }\r\n\r\n .payload-dynamic-value-node::-moz-selection {\r\n background: transparent;\r\n color: inherit;\r\n -webkit-text-fill-color: inherit;\r\n }\r\n `\r\n\r\n document.head.append(styleElement)\r\n hasRegisteredSelectionStyle = true\r\n}\r\n\r\nconst applyDynamicValueStyles = (node: DynamicValueNode, dom: HTMLElement): void => {\r\n ensureInvisibleSelectionStyle()\r\n const iconTypes = getAppliedIconTypes(node)\r\n const iconDataURI = buildIconsDataURI(iconTypes)\r\n const iconBlockWidth = iconTypes.length ? iconTypes.length * 16 : 0\r\n\r\n dom.classList.add('payload-dynamic-value-node')\r\n dom.setAttribute('data-payload-dynamic-value', 'true')\r\n dom.setAttribute('data-payload-dynamic-field', node.__field)\r\n dom.setAttribute('data-payload-dynamic-icons', iconTypes.join(','))\r\n\r\n dom.style.alignItems = 'center'\r\n dom.style.backgroundColor = 'var(--theme-elevation-150)'\r\n dom.style.backgroundImage = iconDataURI || 'none'\r\n dom.style.backgroundPosition = '6px center'\r\n dom.style.backgroundRepeat = 'no-repeat'\r\n dom.style.backgroundSize = iconTypes.length ? `${iconBlockWidth - 2}px 14px` : '0 0'\r\n dom.style.border = '1px solid var(--theme-elevation-300)'\r\n dom.style.borderRadius = '4px'\r\n dom.style.boxShadow = '0 1px 2px rgba(0,0,0,0.05)'\r\n dom.style.color = 'var(--theme-text)'\r\n dom.style.cursor = 'pointer'\r\n dom.style.display = 'inline-flex'\r\n dom.style.fontFamily = 'var(--font-mono, monospace)'\r\n dom.style.fontSize = '0.85em'\r\n dom.style.margin = '0 2px'\r\n dom.style.minHeight = '1.6em'\r\n dom.style.padding = iconTypes.length ? `1px 6px 1px ${iconBlockWidth + 12}px` : '1px 6px'\r\n dom.style.userSelect = 'all'\r\n dom.style.verticalAlign = 'middle'\r\n dom.style.webkitTextFillColor = 'var(--theme-text)'\r\n\r\n dom.onmousedown = (event) => {\r\n event.preventDefault()\r\n selectElementText(dom)\r\n }\r\n}\r\n\r\nexport class DynamicValueNode extends TextNode {\r\n __field: string\r\n\r\n constructor(field: string, text: string, key?: NodeKey) {\r\n super(text, key)\r\n this.__field = field\r\n }\r\n\r\n static clone(node: DynamicValueNode): DynamicValueNode {\r\n return new DynamicValueNode(node.__field, node.__text, node.__key)\r\n }\r\n\r\n static getType(): string {\r\n return DYNAMIC_VALUE_NODE_TYPE\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n span: (domNode: Node) => {\r\n if (\r\n domNode instanceof HTMLSpanElement &&\r\n domNode.hasAttribute('data-payload-dynamic-value')\r\n ) {\r\n return {\r\n conversion: convertDynamicValueElement,\r\n priority: 2,\r\n }\r\n }\r\n\r\n return null\r\n },\r\n }\r\n }\r\n\r\n static importJSON(serializedNode: SerializedDynamicValueNode): DynamicValueNode {\r\n const node = $createDynamicValueNode(\r\n serializedNode.field,\r\n serializedNode.label || serializedNode.text,\r\n )\r\n\r\n node.setFormat(serializedNode.format)\r\n node.setStyle(serializedNode.style)\r\n node.setMode(serializedNode.mode)\r\n node.setDetail(serializedNode.detail)\r\n\r\n return node\r\n }\r\n\r\n createDOM(config: EditorConfig): HTMLElement {\r\n const dom = super.createDOM(config)\r\n applyDynamicValueStyles(this, dom)\r\n return dom\r\n }\r\n\r\n exportDOM(): DOMExportOutput {\r\n const element = document.createElement('span')\r\n element.setAttribute('data-payload-dynamic-value', 'true')\r\n element.setAttribute('data-payload-dynamic-field', this.__field)\r\n element.textContent = this.getTextContent()\r\n\r\n return {\r\n element,\r\n }\r\n }\r\n\r\n exportJSON(): SerializedDynamicValueNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: DYNAMIC_VALUE_NODE_TYPE,\r\n field: this.__field,\r\n label: this.getTextContent(),\r\n version: 1,\r\n }\r\n }\r\n\r\n getField(): string {\r\n return this.__field\r\n }\r\n\r\n isTextEntity(): true {\r\n return true\r\n }\r\n\r\n updateDOM(prevNode: DynamicValueNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n const didUpdate = (super.updateDOM as (\r\n node: DynamicValueNode,\r\n element: HTMLElement,\r\n editorConfig: EditorConfig,\r\n ) => boolean)(prevNode, dom, config)\r\n\r\n if (prevNode.__field !== this.__field || prevNode.getFormat() !== this.getFormat()) {\r\n applyDynamicValueStyles(this, dom)\r\n }\r\n\r\n return didUpdate\r\n }\r\n}\r\n\r\nfunction convertDynamicValueElement(domNode: Node): DOMConversionOutput {\r\n const span = domNode as HTMLSpanElement\r\n const field = span.getAttribute('data-payload-dynamic-field') || span.textContent || ''\r\n\r\n return {\r\n node: $createDynamicValueNode(field, span.textContent || field),\r\n }\r\n}\r\n\r\nexport function $createDynamicValueNode(field: string, text?: string): DynamicValueNode {\r\n const node = new DynamicValueNode(field, text || field)\r\n node.setMode('token')\r\n return $applyNodeReplacement(node)\r\n}\r\n\r\nexport function $isDynamicValueNode(node: LexicalNode | null | undefined): node is DynamicValueNode {\r\n return node?.getType() === DYNAMIC_VALUE_NODE_TYPE\r\n}\r\n"],"names":["$applyNodeReplacement","TextNode","dynamicValueIcons","DYNAMIC_VALUE_NODE_TYPE","LEGACY_DYNAMIC_VALUE_NODE_TYPE","getAppliedIconTypes","node","iconTypes","parent","getParent","getType","push","hasFormat","buildIconsDataURI","length","fillColor","strokeColor","iconGap","iconSize","totalWidth","paths","map","iconType","index","icon","x","mode","path","join","svg","encodeURIComponent","selectElementText","dom","selection","window","getSelection","range","document","createRange","selectNodeContents","removeAllRanges","addRange","hasRegisteredSelectionStyle","ensureInvisibleSelectionStyle","styleElement","createElement","textContent","head","append","applyDynamicValueStyles","iconDataURI","iconBlockWidth","classList","add","setAttribute","__field","style","alignItems","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","border","borderRadius","boxShadow","color","cursor","display","fontFamily","fontSize","margin","minHeight","padding","userSelect","verticalAlign","webkitTextFillColor","onmousedown","event","preventDefault","DynamicValueNode","field","text","key","clone","__text","__key","importDOM","span","domNode","HTMLSpanElement","hasAttribute","conversion","convertDynamicValueElement","priority","importJSON","serializedNode","$createDynamicValueNode","label","setFormat","format","setStyle","setMode","setDetail","detail","createDOM","config","exportDOM","element","getTextContent","exportJSON","type","version","getField","isTextEntity","updateDOM","prevNode","didUpdate","getFormat","getAttribute","$isDynamicValueNode"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@od-labs/payloadcms-dynamic-value-richtext",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Dynamic Value Rich Text Plugin for PayloadCMS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "OD LABS",
|
|
@@ -15,6 +15,26 @@
|
|
|
15
15
|
"import": "./dist/exports/client.js",
|
|
16
16
|
"types": "./dist/exports/client.d.ts",
|
|
17
17
|
"default": "./dist/exports/client.js"
|
|
18
|
+
},
|
|
19
|
+
"./server": {
|
|
20
|
+
"import": "./dist/exports/server.js",
|
|
21
|
+
"types": "./dist/exports/server.d.ts",
|
|
22
|
+
"default": "./dist/exports/server.js"
|
|
23
|
+
},
|
|
24
|
+
"./jsx": {
|
|
25
|
+
"import": "./dist/exports/jsx.js",
|
|
26
|
+
"types": "./dist/exports/jsx.d.ts",
|
|
27
|
+
"default": "./dist/exports/jsx.js"
|
|
28
|
+
},
|
|
29
|
+
"./rsc": {
|
|
30
|
+
"import": "./dist/exports/rsc.js",
|
|
31
|
+
"types": "./dist/exports/rsc.d.ts",
|
|
32
|
+
"default": "./dist/exports/rsc.js"
|
|
33
|
+
},
|
|
34
|
+
"./react": {
|
|
35
|
+
"import": "./dist/exports/react.js",
|
|
36
|
+
"types": "./dist/exports/react.d.ts",
|
|
37
|
+
"default": "./dist/exports/react.js"
|
|
18
38
|
}
|
|
19
39
|
},
|
|
20
40
|
"main": "./dist/index.js",
|
|
@@ -93,6 +113,26 @@
|
|
|
93
113
|
"import": "./dist/exports/client.js",
|
|
94
114
|
"types": "./dist/exports/client.d.ts",
|
|
95
115
|
"default": "./dist/exports/client.js"
|
|
116
|
+
},
|
|
117
|
+
"./server": {
|
|
118
|
+
"import": "./dist/exports/server.js",
|
|
119
|
+
"types": "./dist/exports/server.d.ts",
|
|
120
|
+
"default": "./dist/exports/server.js"
|
|
121
|
+
},
|
|
122
|
+
"./jsx": {
|
|
123
|
+
"import": "./dist/exports/jsx.js",
|
|
124
|
+
"types": "./dist/exports/jsx.d.ts",
|
|
125
|
+
"default": "./dist/exports/jsx.js"
|
|
126
|
+
},
|
|
127
|
+
"./rsc": {
|
|
128
|
+
"import": "./dist/exports/rsc.js",
|
|
129
|
+
"types": "./dist/exports/rsc.d.ts",
|
|
130
|
+
"default": "./dist/exports/rsc.js"
|
|
131
|
+
},
|
|
132
|
+
"./react": {
|
|
133
|
+
"import": "./dist/exports/react.js",
|
|
134
|
+
"types": "./dist/exports/react.d.ts",
|
|
135
|
+
"default": "./dist/exports/react.js"
|
|
96
136
|
}
|
|
97
137
|
},
|
|
98
138
|
"main": "./dist/index.js",
|