@ai-stack/payloadcms 3.0.0-beta.104.1 → 3.0.0-beta.65.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 +2 -2
- package/dist/ai/{schemas → editor}/lexical.schema.d.ts +2 -2
- package/dist/ai/editor/lexical.schema.d.ts.map +1 -0
- package/dist/ai/editor/lexical.schema.js.map +1 -0
- package/dist/ai/models/anthropic/index.d.ts.map +1 -1
- package/dist/ai/models/anthropic/index.js +4 -43
- package/dist/ai/models/anthropic/index.js.map +1 -1
- package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
- package/dist/ai/models/elevenLabs/index.js +11 -1
- package/dist/ai/models/elevenLabs/index.js.map +1 -1
- package/dist/ai/models/index.d.ts.map +1 -1
- package/dist/ai/models/index.js +3 -3
- package/dist/ai/models/index.js.map +1 -1
- package/dist/ai/models/openai/index.js +3 -3
- package/dist/ai/models/openai/index.js.map +1 -1
- package/dist/ai/models/style.d.ts +2 -0
- package/dist/ai/models/style.d.ts.map +1 -0
- package/dist/ai/models/style.js +31 -0
- package/dist/ai/models/style.js.map +1 -0
- package/dist/ai/prompts.d.ts +6 -7
- package/dist/ai/prompts.d.ts.map +1 -1
- package/dist/ai/prompts.js +16 -21
- package/dist/ai/prompts.js.map +1 -1
- package/dist/ai/utils/generateSeedPrompt.d.ts.map +1 -1
- package/dist/ai/utils/generateSeedPrompt.js +5 -14
- package/dist/ai/utils/generateSeedPrompt.js.map +1 -1
- package/dist/collections/Instructions.d.ts.map +1 -1
- package/dist/collections/Instructions.js +13 -10
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +2 -3
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +2 -3
- package/dist/defaults.js.map +1 -1
- package/dist/endpoints/index.d.ts +1 -1
- package/dist/endpoints/index.d.ts.map +1 -1
- package/dist/endpoints/index.js +51 -17
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/fields.d.ts +1 -3
- package/dist/exports/fields.d.ts.map +1 -1
- package/dist/exports/fields.js +0 -3
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/DescriptionField/DescriptionField.d.ts +2 -3
- package/dist/fields/DescriptionField/DescriptionField.d.ts.map +1 -1
- package/dist/fields/DescriptionField/DescriptionField.js +11 -14
- package/dist/fields/DescriptionField/DescriptionField.js.map +1 -1
- package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts +4 -0
- package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts.map +1 -0
- package/dist/fields/DescriptionField/DescriptionFieldComponent.js +18 -0
- package/dist/fields/DescriptionField/DescriptionFieldComponent.js.map +1 -0
- package/dist/fields/LexicalEditor/ActionsFeatureComponent.js +1 -1
- package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +1 -1
- package/dist/fields/LexicalEditor/feature.server.d.ts +7 -1
- package/dist/fields/LexicalEditor/feature.server.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/feature.server.js +11 -4
- package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.js +51 -32
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/SelectField/SelectField.d.ts +2 -9
- package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
- package/dist/fields/SelectField/SelectField.js +23 -26
- package/dist/fields/SelectField/SelectField.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +19 -35
- package/dist/init.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +73 -96
- package/dist/plugin.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +3 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/hook.d.ts +9 -0
- package/dist/providers/InstructionsProvider/hook.d.ts.map +1 -0
- package/dist/providers/InstructionsProvider/hook.js +17 -0
- package/dist/providers/InstructionsProvider/hook.js.map +1 -0
- package/dist/providers/InstructionsProvider/index.d.ts +5 -0
- package/dist/providers/InstructionsProvider/index.d.ts.map +1 -0
- package/dist/providers/InstructionsProvider/index.js +10 -0
- package/dist/providers/InstructionsProvider/index.js.map +1 -0
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/Actions/Actions.d.ts.map +1 -1
- package/dist/ui/Actions/Actions.js +48 -40
- package/dist/ui/Actions/Actions.js.map +1 -1
- package/dist/ui/Actions/hooks/highlight.module.scss +3 -0
- package/dist/ui/Actions/hooks/useGenerate.d.ts.map +1 -1
- package/dist/ui/Actions/hooks/useGenerate.js +10 -9
- package/dist/ui/Actions/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Floatype/Floatype.d.ts +21 -0
- package/dist/ui/Floatype/Floatype.d.ts.map +1 -0
- package/dist/ui/Floatype/Floatype.js +245 -0
- package/dist/ui/Floatype/Floatype.js.map +1 -0
- package/dist/ui/Floatype/floatype.module.css +25 -0
- package/dist/utilities/getFieldBySchemaPath.d.ts +2 -2
- package/dist/utilities/getFieldBySchemaPath.d.ts.map +1 -1
- package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
- package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
- package/dist/utilities/updateFieldsConfig.js +8 -18
- package/dist/utilities/updateFieldsConfig.js.map +1 -1
- package/package.json +33 -79
- package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
- package/dist/ai/schemas/lexical.schema.js.map +0 -1
- package/dist/exports/client.d.ts +0 -3
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js +0 -4
- package/dist/exports/client.js.map +0 -1
- package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts +0 -8
- package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts.map +0 -1
- package/dist/libraries/autocomplete/AutocompleteTextArea.js +0 -437
- package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +0 -1
- package/dist/libraries/autocomplete/AutocompleteTextArea.module.scss +0 -35
- package/dist/libraries/handlebars/asyncHandlebars.d.ts +0 -2
- package/dist/libraries/handlebars/asyncHandlebars.d.ts.map +0 -1
- package/dist/libraries/handlebars/asyncHandlebars.js +0 -5
- package/dist/libraries/handlebars/asyncHandlebars.js.map +0 -1
- package/dist/libraries/handlebars/helpers.d.ts +0 -2
- package/dist/libraries/handlebars/helpers.d.ts.map +0 -1
- package/dist/libraries/handlebars/helpers.js +0 -22
- package/dist/libraries/handlebars/helpers.js.map +0 -1
- package/dist/libraries/handlebars/helpersMap.d.ts +0 -12
- package/dist/libraries/handlebars/helpersMap.d.ts.map +0 -1
- package/dist/libraries/handlebars/helpersMap.js +0 -13
- package/dist/libraries/handlebars/helpersMap.js.map +0 -1
- package/dist/libraries/handlebars/replacePlaceholders.d.ts +0 -2
- package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +0 -1
- package/dist/libraries/handlebars/replacePlaceholders.js +0 -8
- package/dist/libraries/handlebars/replacePlaceholders.js.map +0 -1
- package/dist/providers/InstructionsProvider/useInstructions.d.ts +0 -4
- package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +0 -1
- package/dist/providers/InstructionsProvider/useInstructions.js +0 -38
- package/dist/providers/InstructionsProvider/useInstructions.js.map +0 -1
- package/dist/utilities/getFieldInfo.d.ts +0 -3
- package/dist/utilities/getFieldInfo.d.ts.map +0 -1
- package/dist/utilities/getFieldInfo.js +0 -14
- package/dist/utilities/getFieldInfo.js.map +0 -1
- package/dist/utilities/isPluginActivated.d.ts +0 -2
- package/dist/utilities/isPluginActivated.d.ts.map +0 -1
- package/dist/utilities/isPluginActivated.js +0 -5
- package/dist/utilities/isPluginActivated.js.map +0 -1
- /package/dist/ai/{schemas → editor}/lexical.schema.js +0 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OG Creator: Kailash Nadh
|
|
3
|
+
* Github: https://github.com/knadh/floatype.js
|
|
4
|
+
*
|
|
5
|
+
* Reacted By: Claude 3.5 Sonnet and Ashbuilds
|
|
6
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
8
|
+
import styles from './floatype.module.css';
|
|
9
|
+
export const Floatype = /*#__PURE__*/ forwardRef(({ options }, inputRef)=>{
|
|
10
|
+
const [items, setItems] = useState([]);
|
|
11
|
+
const [currentIndex, setCurrentIndex] = useState(0);
|
|
12
|
+
const [query, setQuery] = useState(null);
|
|
13
|
+
const [coords, setCoords] = useState(null);
|
|
14
|
+
const boxRef = useRef(null);
|
|
15
|
+
const shadowRef = useRef(null);
|
|
16
|
+
const opt = {
|
|
17
|
+
debounce: 100,
|
|
18
|
+
onNavigate: undefined,
|
|
19
|
+
onQuery: ()=>[],
|
|
20
|
+
onRender: undefined,
|
|
21
|
+
onSelect: undefined,
|
|
22
|
+
onUpdate: ()=>{},
|
|
23
|
+
...options
|
|
24
|
+
};
|
|
25
|
+
const destroy = useCallback(()=>{
|
|
26
|
+
setItems([]);
|
|
27
|
+
setCurrentIndex(0);
|
|
28
|
+
setQuery(null);
|
|
29
|
+
}, []);
|
|
30
|
+
const getLastWord = useCallback((el)=>{
|
|
31
|
+
const text = el.value.substring(0, el.selectionStart ?? 0);
|
|
32
|
+
const match = text.match(/\S+\s*$/);
|
|
33
|
+
return match ? match[0] : null;
|
|
34
|
+
}, []);
|
|
35
|
+
const insertWord = useCallback((el, val)=>{
|
|
36
|
+
const start = Math.max(el.value.lastIndexOf(' ', (el.selectionStart ?? 0) - 1), el.value.lastIndexOf('\n', (el.selectionStart ?? 0) - 1)) + 1;
|
|
37
|
+
el.value = el.value.substring(0, start) + val + (el.value[el.selectionStart ?? 0] !== ' ' ? ' ' : '') + el.value.substring(el.selectionStart ?? 0);
|
|
38
|
+
el.setSelectionRange(start + val.length + 1, start + val.length + 1);
|
|
39
|
+
opt.onUpdate(el.value);
|
|
40
|
+
}, [
|
|
41
|
+
opt
|
|
42
|
+
]);
|
|
43
|
+
const getCaret = useCallback(()=>{
|
|
44
|
+
if (!inputRef || !('current' in inputRef) || !inputRef.current || !shadowRef.current) return null;
|
|
45
|
+
const el = inputRef.current;
|
|
46
|
+
const shadow = shadowRef.current;
|
|
47
|
+
const txt = el.value.substring(0, el.selectionStart ?? 0);
|
|
48
|
+
const start = Math.max(txt.lastIndexOf('\n'), txt.lastIndexOf(' ')) + 1;
|
|
49
|
+
const cl = 'floatype-caret';
|
|
50
|
+
shadow.innerHTML = el.value.substring(0, start) + `<span id="${cl}" style="display: inline-block;">${el.value.substring(start)}</span>`;
|
|
51
|
+
const m = shadow.querySelector(`#${cl}`);
|
|
52
|
+
const elRect = el.getBoundingClientRect();
|
|
53
|
+
const mRect = m?.getBoundingClientRect();
|
|
54
|
+
if (!mRect) return null;
|
|
55
|
+
let top = mRect.top - elRect.top + el.scrollTop;
|
|
56
|
+
let left = mRect.left - elRect.left + el.scrollLeft;
|
|
57
|
+
if (boxRef.current && currentIndex !== null) {
|
|
58
|
+
const box = boxRef.current;
|
|
59
|
+
const selected = box.children[currentIndex];
|
|
60
|
+
if (selected) {
|
|
61
|
+
top -= selected.offsetTop + (selected.clientHeight / 2 - 5);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (boxRef.current) {
|
|
65
|
+
const box = boxRef.current;
|
|
66
|
+
if (box.clientWidth + left + elRect.left + 50 > window.innerWidth) {
|
|
67
|
+
left = left - box.offsetWidth - 50;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
x: left + elRect.left,
|
|
72
|
+
y: top + elRect.top
|
|
73
|
+
};
|
|
74
|
+
}, [
|
|
75
|
+
inputRef,
|
|
76
|
+
shadowRef,
|
|
77
|
+
boxRef,
|
|
78
|
+
currentIndex
|
|
79
|
+
]);
|
|
80
|
+
const handleInput = useCallback(()=>{
|
|
81
|
+
if (!inputRef || !('current' in inputRef) || !inputRef.current) return;
|
|
82
|
+
const w = getLastWord(inputRef.current);
|
|
83
|
+
if (!w) {
|
|
84
|
+
destroy();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
setQuery(w);
|
|
88
|
+
}, [
|
|
89
|
+
inputRef,
|
|
90
|
+
getLastWord,
|
|
91
|
+
destroy
|
|
92
|
+
]);
|
|
93
|
+
const handleKeyDown = useCallback((e)=>{
|
|
94
|
+
if (!boxRef.current) return;
|
|
95
|
+
switch(e.key){
|
|
96
|
+
case 'ArrowUp':
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
setCurrentIndex((prev)=>(prev - 1 + items.length) % items.length);
|
|
99
|
+
break;
|
|
100
|
+
case 'ArrowDown':
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
setCurrentIndex((prev)=>(prev + 1) % items.length);
|
|
103
|
+
break;
|
|
104
|
+
case 'Enter':
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
if (inputRef && 'current' in inputRef && inputRef.current) {
|
|
107
|
+
const selectedItem = items[currentIndex];
|
|
108
|
+
const newVal = opt.onSelect ? opt.onSelect(selectedItem, query) : selectedItem;
|
|
109
|
+
insertWord(inputRef.current, newVal);
|
|
110
|
+
}
|
|
111
|
+
destroy();
|
|
112
|
+
break;
|
|
113
|
+
case 'Escape':
|
|
114
|
+
destroy();
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}, [
|
|
118
|
+
boxRef,
|
|
119
|
+
items,
|
|
120
|
+
currentIndex,
|
|
121
|
+
inputRef,
|
|
122
|
+
opt.onSelect,
|
|
123
|
+
insertWord,
|
|
124
|
+
destroy,
|
|
125
|
+
query
|
|
126
|
+
]);
|
|
127
|
+
useEffect(()=>{
|
|
128
|
+
if (!inputRef || !('current' in inputRef) || !inputRef.current) return;
|
|
129
|
+
const el = inputRef.current;
|
|
130
|
+
el.addEventListener('input', handleInput);
|
|
131
|
+
el.addEventListener('keydown', handleKeyDown);
|
|
132
|
+
el.addEventListener('blur', destroy);
|
|
133
|
+
return ()=>{
|
|
134
|
+
el.removeEventListener('input', handleInput);
|
|
135
|
+
el.removeEventListener('keydown', handleKeyDown);
|
|
136
|
+
el.removeEventListener('blur', destroy);
|
|
137
|
+
};
|
|
138
|
+
}, [
|
|
139
|
+
inputRef,
|
|
140
|
+
handleInput,
|
|
141
|
+
handleKeyDown
|
|
142
|
+
]);
|
|
143
|
+
useEffect(()=>{
|
|
144
|
+
if (!shadowRef.current || !inputRef || !('current' in inputRef) || !inputRef.current) return;
|
|
145
|
+
const shadow = shadowRef.current;
|
|
146
|
+
const el = inputRef.current;
|
|
147
|
+
const stylesCss = window.getComputedStyle(el);
|
|
148
|
+
const { fontFamily, fontSize, fontWeight } = stylesCss;
|
|
149
|
+
shadow.style.fontFamily = fontFamily;
|
|
150
|
+
shadow.style.fontSize = fontSize;
|
|
151
|
+
shadow.style.fontWeight = fontWeight;
|
|
152
|
+
const updateShadowPosition = ()=>{
|
|
153
|
+
const elRect = el.getBoundingClientRect();
|
|
154
|
+
shadow.style.position = 'fixed';
|
|
155
|
+
shadow.style.top = `${elRect.top}px`;
|
|
156
|
+
shadow.style.left = `${elRect.left - 52}px`;
|
|
157
|
+
shadow.style.width = `${elRect.width}px`;
|
|
158
|
+
shadow.style.height = `${elRect.height}px`;
|
|
159
|
+
shadow.style.opacity = '0';
|
|
160
|
+
shadow.style.padding = '0';
|
|
161
|
+
shadow.style.visibility = 'hidden';
|
|
162
|
+
};
|
|
163
|
+
setTimeout(updateShadowPosition, 300);
|
|
164
|
+
window.addEventListener('resize', updateShadowPosition);
|
|
165
|
+
window.addEventListener('scroll', updateShadowPosition);
|
|
166
|
+
return ()=>{
|
|
167
|
+
window.removeEventListener('resize', updateShadowPosition);
|
|
168
|
+
window.removeEventListener('scroll', updateShadowPosition);
|
|
169
|
+
};
|
|
170
|
+
}, [
|
|
171
|
+
inputRef,
|
|
172
|
+
shadowRef
|
|
173
|
+
]);
|
|
174
|
+
useEffect(()=>{
|
|
175
|
+
const fetchItems = ()=>{
|
|
176
|
+
if (!query) return;
|
|
177
|
+
const newItems = opt.onQuery(query);
|
|
178
|
+
setItems(newItems);
|
|
179
|
+
setCoords(getCaret());
|
|
180
|
+
};
|
|
181
|
+
const timeoutId = setTimeout(fetchItems, opt.debounce);
|
|
182
|
+
return ()=>clearTimeout(timeoutId);
|
|
183
|
+
}, [
|
|
184
|
+
query,
|
|
185
|
+
opt.onQuery,
|
|
186
|
+
opt.debounce,
|
|
187
|
+
getCaret
|
|
188
|
+
]);
|
|
189
|
+
useEffect(()=>{
|
|
190
|
+
if (opt.onNavigate) {
|
|
191
|
+
opt.onNavigate(1, items, currentIndex);
|
|
192
|
+
}
|
|
193
|
+
}, [
|
|
194
|
+
currentIndex,
|
|
195
|
+
items,
|
|
196
|
+
opt
|
|
197
|
+
]);
|
|
198
|
+
useEffect(()=>{
|
|
199
|
+
if (boxRef.current && coords && inputRef && 'current' in inputRef && inputRef.current) {
|
|
200
|
+
const box = boxRef.current;
|
|
201
|
+
box.style.position = 'fixed';
|
|
202
|
+
box.style.left = `${coords.x}px`;
|
|
203
|
+
box.style.top = `${coords.y}px`;
|
|
204
|
+
box.style.width = window.getComputedStyle(inputRef.current).width;
|
|
205
|
+
box.style.display = items.length > 0 ? 'block' : 'none';
|
|
206
|
+
}
|
|
207
|
+
}, [
|
|
208
|
+
coords,
|
|
209
|
+
items,
|
|
210
|
+
inputRef
|
|
211
|
+
]);
|
|
212
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
213
|
+
className: "field-type textarea",
|
|
214
|
+
style: {
|
|
215
|
+
position: 'relative'
|
|
216
|
+
},
|
|
217
|
+
children: [
|
|
218
|
+
/*#__PURE__*/ _jsx("div", {
|
|
219
|
+
className: "textarea-clone",
|
|
220
|
+
ref: shadowRef,
|
|
221
|
+
style: {
|
|
222
|
+
position: 'absolute'
|
|
223
|
+
}
|
|
224
|
+
}),
|
|
225
|
+
items.length > 0 && /*#__PURE__*/ _jsx("div", {
|
|
226
|
+
className: styles.floatype,
|
|
227
|
+
ref: boxRef,
|
|
228
|
+
children: items.map((item, idx)=>/*#__PURE__*/ _jsx("div", {
|
|
229
|
+
className: `${styles.floatype_item} ${idx === currentIndex ? styles.floatype_sel : ''}`,
|
|
230
|
+
"data-selected": idx === currentIndex,
|
|
231
|
+
onMouseDown: ()=>{
|
|
232
|
+
if (inputRef && 'current' in inputRef && inputRef.current) {
|
|
233
|
+
const newVal = opt.onSelect ? opt.onSelect(item, query) : item;
|
|
234
|
+
insertWord(inputRef.current, newVal);
|
|
235
|
+
}
|
|
236
|
+
destroy();
|
|
237
|
+
},
|
|
238
|
+
children: opt.onRender ? opt.onRender(item) : item
|
|
239
|
+
}, idx))
|
|
240
|
+
})
|
|
241
|
+
]
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
//# sourceMappingURL=Floatype.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/Floatype/Floatype.tsx"],"sourcesContent":["/**\n * OG Creator: Kailash Nadh\n * Github: https://github.com/knadh/floatype.js\n *\n * Reacted By: Claude 3.5 Sonnet and Ashbuilds\n */\n\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport styles from './floatype.module.css'\n\ntype Options = {\n debounce?: number\n onNavigate?: (direction: number, items: any[], currentIndex: number) => void\n onQuery: (query: string) => any[]\n onRender?: (item: any) => React.ReactNode\n onSelect?: (item: any, query: string) => string\n onUpdate: (value: string) => void\n}\n\ntype FloatypeProps = {\n options: Partial<Options>\n}\n\nexport const Floatype = forwardRef<HTMLTextAreaElement, FloatypeProps>(({ options }, inputRef) => {\n const [items, setItems] = useState<any[]>([])\n const [currentIndex, setCurrentIndex] = useState(0)\n const [query, setQuery] = useState<null | string>(null)\n const [coords, setCoords] = useState<{ x: number; y: number } | null>(null)\n\n const boxRef = useRef<HTMLDivElement>(null)\n const shadowRef = useRef<HTMLDivElement>(null)\n\n const opt: Options = {\n debounce: 100,\n onNavigate: undefined,\n onQuery: () => [],\n onRender: undefined,\n onSelect: undefined,\n onUpdate: () => {},\n ...options,\n }\n\n const destroy = useCallback(() => {\n setItems([])\n setCurrentIndex(0)\n setQuery(null)\n }, [])\n\n const getLastWord = useCallback((el: HTMLTextAreaElement): null | string => {\n const text = el.value.substring(0, el.selectionStart ?? 0)\n const match = text.match(/\\S+\\s*$/)\n return match ? match[0] : null\n }, [])\n\n const insertWord = useCallback(\n (el: HTMLInputElement | HTMLTextAreaElement, val: string): void => {\n const start =\n Math.max(\n el.value.lastIndexOf(' ', (el.selectionStart ?? 0) - 1),\n el.value.lastIndexOf('\\n', (el.selectionStart ?? 0) - 1),\n ) + 1\n el.value =\n el.value.substring(0, start) +\n val +\n (el.value[el.selectionStart ?? 0] !== ' ' ? ' ' : '') +\n el.value.substring(el.selectionStart ?? 0)\n el.setSelectionRange(start + val.length + 1, start + val.length + 1)\n opt.onUpdate(el.value)\n },\n [opt],\n )\n\n const getCaret = useCallback(() => {\n if (!inputRef || !('current' in inputRef) || !inputRef.current || !shadowRef.current)\n return null\n\n const el = inputRef.current\n const shadow = shadowRef.current\n\n const txt = el.value.substring(0, el.selectionStart ?? 0)\n const start = Math.max(txt.lastIndexOf('\\n'), txt.lastIndexOf(' ')) + 1\n\n const cl = 'floatype-caret'\n shadow.innerHTML =\n el.value.substring(0, start) +\n `<span id=\"${cl}\" style=\"display: inline-block;\">${el.value.substring(start)}</span>`\n\n const m = shadow.querySelector(`#${cl}`)\n const elRect = el.getBoundingClientRect()\n const mRect = m?.getBoundingClientRect()\n\n if (!mRect) return null\n\n let top = mRect.top - elRect.top + el.scrollTop\n let left = mRect.left - elRect.left + el.scrollLeft\n\n if (boxRef.current && currentIndex !== null) {\n const box = boxRef.current\n const selected = box.children[currentIndex] as HTMLElement\n if (selected) {\n top -= selected.offsetTop + (selected.clientHeight / 2 - 5)\n }\n }\n\n if (boxRef.current) {\n const box = boxRef.current\n if (box.clientWidth + left + elRect.left + 50 > window.innerWidth) {\n left = left - box.offsetWidth - 50\n }\n }\n\n return {\n x: left + elRect.left,\n y: top + elRect.top,\n }\n }, [inputRef, shadowRef, boxRef, currentIndex])\n\n const handleInput = useCallback(() => {\n if (!inputRef || !('current' in inputRef) || !inputRef.current) return\n const w = getLastWord(inputRef.current)\n if (!w) {\n destroy()\n return\n }\n setQuery(w)\n }, [inputRef, getLastWord, destroy])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!boxRef.current) return\n\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault()\n setCurrentIndex((prev) => (prev - 1 + items.length) % items.length)\n break\n case 'ArrowDown':\n e.preventDefault()\n setCurrentIndex((prev) => (prev + 1) % items.length)\n break\n case 'Enter':\n e.preventDefault()\n if (inputRef && 'current' in inputRef && inputRef.current) {\n const selectedItem = items[currentIndex]\n const newVal = opt.onSelect\n ? opt.onSelect(selectedItem, query)\n : (selectedItem as unknown as string)\n insertWord(inputRef.current, newVal)\n }\n destroy()\n break\n case 'Escape':\n destroy()\n break\n }\n },\n [boxRef, items, currentIndex, inputRef, opt.onSelect, insertWord, destroy, query],\n )\n\n useEffect(() => {\n if (!inputRef || !('current' in inputRef) || !inputRef.current) return\n\n const el = inputRef.current\n el.addEventListener('input', handleInput)\n el.addEventListener('keydown', handleKeyDown as any)\n el.addEventListener('blur', destroy)\n\n return () => {\n el.removeEventListener('input', handleInput)\n el.removeEventListener('keydown', handleKeyDown as any)\n el.removeEventListener('blur', destroy)\n }\n }, [inputRef, handleInput, handleKeyDown])\n\n useEffect(() => {\n if (!shadowRef.current || !inputRef || !('current' in inputRef) || !inputRef.current) return\n\n const shadow = shadowRef.current\n const el = inputRef.current\n\n const stylesCss = window.getComputedStyle(el)\n const { fontFamily, fontSize, fontWeight } = stylesCss\n\n shadow.style.fontFamily = fontFamily\n shadow.style.fontSize = fontSize\n shadow.style.fontWeight = fontWeight\n\n const updateShadowPosition = () => {\n const elRect = el.getBoundingClientRect()\n shadow.style.position = 'fixed'\n shadow.style.top = `${elRect.top}px`\n shadow.style.left = `${elRect.left - 52}px`\n shadow.style.width = `${elRect.width}px`\n shadow.style.height = `${elRect.height}px`\n shadow.style.opacity = '0'\n shadow.style.padding = '0'\n shadow.style.visibility = 'hidden'\n }\n\n setTimeout(updateShadowPosition, 300)\n window.addEventListener('resize', updateShadowPosition)\n window.addEventListener('scroll', updateShadowPosition)\n\n return () => {\n window.removeEventListener('resize', updateShadowPosition)\n window.removeEventListener('scroll', updateShadowPosition)\n }\n }, [inputRef, shadowRef])\n\n useEffect(() => {\n const fetchItems = () => {\n if (!query) return\n const newItems = opt.onQuery(query)\n setItems(newItems)\n setCoords(getCaret())\n }\n\n const timeoutId = setTimeout(fetchItems, opt.debounce)\n return () => clearTimeout(timeoutId)\n }, [query, opt.onQuery, opt.debounce, getCaret])\n\n useEffect(() => {\n if (opt.onNavigate) {\n opt.onNavigate(1, items, currentIndex)\n }\n }, [currentIndex, items, opt])\n\n useEffect(() => {\n if (boxRef.current && coords && inputRef && 'current' in inputRef && inputRef.current) {\n const box = boxRef.current\n box.style.position = 'fixed'\n box.style.left = `${coords.x}px`\n box.style.top = `${coords.y}px`\n box.style.width = window.getComputedStyle(inputRef.current).width\n box.style.display = items.length > 0 ? 'block' : 'none'\n }\n }, [coords, items, inputRef])\n\n return (\n <div className=\"field-type textarea\" style={{ position: 'relative' }}>\n <div className=\"textarea-clone\" ref={shadowRef} style={{ position: 'absolute' }} />\n {items.length > 0 && (\n <div className={styles.floatype} ref={boxRef}>\n {items.map((item, idx) => (\n <div\n className={`${styles.floatype_item} ${idx === currentIndex ? styles.floatype_sel : ''}`}\n data-selected={idx === currentIndex}\n key={idx}\n onMouseDown={() => {\n if (inputRef && 'current' in inputRef && inputRef.current) {\n const newVal = opt.onSelect\n ? opt.onSelect(item, query)\n : (item as unknown as string)\n insertWord(inputRef.current, newVal)\n }\n destroy()\n }}\n >\n {opt.onRender ? opt.onRender(item) : (item as unknown as string)}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n})\n"],"names":["React","forwardRef","useCallback","useEffect","useRef","useState","styles","Floatype","options","inputRef","items","setItems","currentIndex","setCurrentIndex","query","setQuery","coords","setCoords","boxRef","shadowRef","opt","debounce","onNavigate","undefined","onQuery","onRender","onSelect","onUpdate","destroy","getLastWord","el","text","value","substring","selectionStart","match","insertWord","val","start","Math","max","lastIndexOf","setSelectionRange","length","getCaret","current","shadow","txt","cl","innerHTML","m","querySelector","elRect","getBoundingClientRect","mRect","top","scrollTop","left","scrollLeft","box","selected","children","offsetTop","clientHeight","clientWidth","window","innerWidth","offsetWidth","x","y","handleInput","w","handleKeyDown","e","key","preventDefault","prev","selectedItem","newVal","addEventListener","removeEventListener","stylesCss","getComputedStyle","fontFamily","fontSize","fontWeight","style","updateShadowPosition","position","width","height","opacity","padding","visibility","setTimeout","fetchItems","newItems","timeoutId","clearTimeout","display","div","className","ref","floatype","map","item","idx","floatype_item","floatype_sel","data-selected","onMouseDown"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.floatype {
|
|
2
|
+
background: var(--theme-bg);
|
|
3
|
+
color: var(--theme-text);
|
|
4
|
+
border: 1px solid var(--theme-elevation-250);
|
|
5
|
+
box-shadow:
|
|
6
|
+
0px 10px 4px -8px rgba(0, 2, 4, 0.02),
|
|
7
|
+
0px 2px 3px 0px rgba(0, 2, 4, 0.05);
|
|
8
|
+
text-align: left;
|
|
9
|
+
max-width: 200px;
|
|
10
|
+
z-index: 1000;
|
|
11
|
+
position: fixed;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.floatype_item {
|
|
15
|
+
padding: 5px 10px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.floatype_item:hover {
|
|
19
|
+
background: var(--theme-elevation-100);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.floatype_sel {
|
|
23
|
+
background: var(--theme-input-bg);
|
|
24
|
+
font-weight: bold;
|
|
25
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { ClientCollectionConfig, CollectionConfig, Field } from 'payload';
|
|
2
|
-
export declare const getFieldBySchemaPath: (collectionConfig: ClientCollectionConfig | CollectionConfig, schemaPath: string) => Field | null;
|
|
1
|
+
import type { ClientCollectionConfig, ClientFieldConfig, CollectionConfig, Field } from 'payload';
|
|
2
|
+
export declare const getFieldBySchemaPath: (collectionConfig: ClientCollectionConfig | CollectionConfig, schemaPath: string) => ClientFieldConfig | Field | null;
|
|
3
3
|
//# sourceMappingURL=getFieldBySchemaPath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFieldBySchemaPath.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldBySchemaPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"getFieldBySchemaPath.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldBySchemaPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEjG,eAAO,MAAM,oBAAoB,qBACb,sBAAsB,GAAG,gBAAgB,cAC/C,MAAM,KACjB,iBAAiB,GAAG,KAAK,GAAG,IAyC9B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getFieldBySchemaPath.ts"],"sourcesContent":["import type { ClientCollectionConfig, CollectionConfig, Field } from 'payload'\n\nexport const getFieldBySchemaPath = (\n collectionConfig: ClientCollectionConfig | CollectionConfig,\n schemaPath: string, // e.g., \"posts.content\"\n): Field | null => {\n const pathParts = schemaPath.split('.')\n const targetFieldName = pathParts[pathParts.length - 1]\n\n const findField = (fields, remainingPath: string[]): Field | null => {\n for (const field of fields) {\n if (remainingPath.length === 1 && field.name === targetFieldName) {\n return field\n }\n\n if (field.type === 'group' && field.fields) {\n const result = findField(field.fields, remainingPath.slice(1))\n if (result) return result\n }\n\n if (field.type === 'array' && field.fields) {\n const result = findField(field.fields, remainingPath.slice(1))\n if (result) return result\n }\n\n if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n const result = findField(tab.fields, remainingPath)\n if (result) return result\n }\n }\n\n if (field.type === 'blocks') {\n for (const block of field.blocks) {\n if (block.slug === remainingPath[0]) {\n const result = findField(block.fields, remainingPath.slice(1))\n if (result) return result\n }\n }\n }\n }\n\n return null\n }\n\n return findField(collectionConfig.fields, pathParts.slice(1))\n}\n"],"names":["getFieldBySchemaPath","collectionConfig","schemaPath","pathParts","split","targetFieldName","length","findField","fields","remainingPath","field","name","type","result","slice","tab","tabs","block","blocks","slug"],"mappings":"AAEA,OAAO,MAAMA,uBAAuB,CAClCC,kBACAC;IAEA,MAAMC,YAAYD,WAAWE,KAAK,CAAC;IACnC,MAAMC,kBAAkBF,SAAS,CAACA,UAAUG,MAAM,GAAG,EAAE;IAEvD,MAAMC,YAAY,CAACC,QAAQC;QACzB,KAAK,MAAMC,SAASF,OAAQ;YAC1B,IAAIC,cAAcH,MAAM,KAAK,KAAKI,MAAMC,IAAI,KAAKN,iBAAiB;gBAChE,OAAOK;YACT;YAEA,IAAIA,MAAME,IAAI,KAAK,WAAWF,MAAMF,MAAM,EAAE;gBAC1C,MAAMK,SAASN,UAAUG,MAAMF,MAAM,EAAEC,cAAcK,KAAK,CAAC;gBAC3D,IAAID,QAAQ,OAAOA;YACrB;YAEA,IAAIH,MAAME,IAAI,KAAK,WAAWF,MAAMF,MAAM,EAAE;gBAC1C,MAAMK,SAASN,UAAUG,MAAMF,MAAM,EAAEC,cAAcK,KAAK,CAAC;gBAC3D,IAAID,QAAQ,OAAOA;YACrB;YAEA,IAAIH,MAAME,IAAI,KAAK,QAAQ;gBACzB,KAAK,MAAMG,OAAOL,MAAMM,IAAI,CAAE;oBAC5B,MAAMH,SAASN,UAAUQ,IAAIP,MAAM,EAAEC;oBACrC,IAAII,QAAQ,OAAOA;gBACrB;YACF;YAEA,IAAIH,MAAME,IAAI,KAAK,UAAU;gBAC3B,KAAK,MAAMK,SAASP,MAAMQ,MAAM,CAAE;oBAChC,IAAID,MAAME,IAAI,KAAKV,aAAa,CAAC,EAAE,EAAE;wBACnC,MAAMI,SAASN,UAAUU,MAAMT,MAAM,EAAEC,cAAcK,KAAK,CAAC;wBAC3D,IAAID,QAAQ,OAAOA;oBACrB;gBACF;YACF;QACF;QAEA,OAAO;IACT;IAEA,OAAON,UAAUN,iBAAiBO,MAAM,EAAEL,UAAUW,KAAK,CAAC;AAC5D,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getFieldBySchemaPath.ts"],"sourcesContent":["import type { ClientCollectionConfig, ClientFieldConfig, CollectionConfig, Field } from 'payload'\n\nexport const getFieldBySchemaPath = (\n collectionConfig: ClientCollectionConfig | CollectionConfig,\n schemaPath: string, // e.g., \"posts.content\"\n): ClientFieldConfig | Field | null => {\n const pathParts = schemaPath.split('.')\n const targetFieldName = pathParts[pathParts.length - 1]\n\n const findField = (fields, remainingPath: string[]): Field | null => {\n for (const field of fields) {\n if (remainingPath.length === 1 && field.name === targetFieldName) {\n return field\n }\n\n if (field.type === 'group' && field.fields) {\n const result = findField(field.fields, remainingPath.slice(1))\n if (result) return result\n }\n\n if (field.type === 'array' && field.fields) {\n const result = findField(field.fields, remainingPath.slice(1))\n if (result) return result\n }\n\n if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n const result = findField(tab.fields, remainingPath)\n if (result) return result\n }\n }\n\n if (field.type === 'blocks') {\n for (const block of field.blocks) {\n if (block.slug === remainingPath[0]) {\n const result = findField(block.fields, remainingPath.slice(1))\n if (result) return result\n }\n }\n }\n }\n\n return null\n }\n\n return findField(collectionConfig.fields, pathParts.slice(1))\n}\n"],"names":["getFieldBySchemaPath","collectionConfig","schemaPath","pathParts","split","targetFieldName","length","findField","fields","remainingPath","field","name","type","result","slice","tab","tabs","block","blocks","slug"],"mappings":"AAEA,OAAO,MAAMA,uBAAuB,CAClCC,kBACAC;IAEA,MAAMC,YAAYD,WAAWE,KAAK,CAAC;IACnC,MAAMC,kBAAkBF,SAAS,CAACA,UAAUG,MAAM,GAAG,EAAE;IAEvD,MAAMC,YAAY,CAACC,QAAQC;QACzB,KAAK,MAAMC,SAASF,OAAQ;YAC1B,IAAIC,cAAcH,MAAM,KAAK,KAAKI,MAAMC,IAAI,KAAKN,iBAAiB;gBAChE,OAAOK;YACT;YAEA,IAAIA,MAAME,IAAI,KAAK,WAAWF,MAAMF,MAAM,EAAE;gBAC1C,MAAMK,SAASN,UAAUG,MAAMF,MAAM,EAAEC,cAAcK,KAAK,CAAC;gBAC3D,IAAID,QAAQ,OAAOA;YACrB;YAEA,IAAIH,MAAME,IAAI,KAAK,WAAWF,MAAMF,MAAM,EAAE;gBAC1C,MAAMK,SAASN,UAAUG,MAAMF,MAAM,EAAEC,cAAcK,KAAK,CAAC;gBAC3D,IAAID,QAAQ,OAAOA;YACrB;YAEA,IAAIH,MAAME,IAAI,KAAK,QAAQ;gBACzB,KAAK,MAAMG,OAAOL,MAAMM,IAAI,CAAE;oBAC5B,MAAMH,SAASN,UAAUQ,IAAIP,MAAM,EAAEC;oBACrC,IAAII,QAAQ,OAAOA;gBACrB;YACF;YAEA,IAAIH,MAAME,IAAI,KAAK,UAAU;gBAC3B,KAAK,MAAMK,SAASP,MAAMQ,MAAM,CAAE;oBAChC,IAAID,MAAME,IAAI,KAAKV,aAAa,CAAC,EAAE,EAAE;wBACnC,MAAMI,SAASN,UAAUU,MAAMT,MAAM,EAAEC,cAAcK,KAAK,CAAC;wBAC3D,IAAID,QAAQ,OAAOA;oBACrB;gBACF;YACF;QACF;QAEA,OAAO;IACT;IAEA,OAAON,UAAUN,iBAAiBO,MAAM,EAAEL,UAAUW,KAAK,CAAC;AAC5D,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateFieldsConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/updateFieldsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"updateFieldsConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/updateFieldsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAI/C,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,uBAAuB,EAAE,gBAAgB,CAAA;CAC1C;AAED,eAAO,MAAM,kBAAkB,qBAAsB,gBAAgB,KAAG,kBAiFvE,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { DescriptionField } from '../fields/DescriptionField/DescriptionField.js';
|
|
1
2
|
export const updateFieldsConfig = (collectionConfig)=>{
|
|
2
3
|
let schemaPathMap = {};
|
|
3
|
-
let customComponentsFound = false;
|
|
4
4
|
function updateField(field, parentPath = '') {
|
|
5
5
|
const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name;
|
|
6
6
|
const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`;
|
|
@@ -30,18 +30,16 @@ export const updateFieldsConfig = (collectionConfig)=>{
|
|
|
30
30
|
'textarea',
|
|
31
31
|
'upload'
|
|
32
32
|
].includes(field.type)) {
|
|
33
|
-
let customField = {};
|
|
34
|
-
if (field.admin?.components?.Field || field.admin?.components?.Description) {
|
|
35
|
-
customComponentsFound = true;
|
|
36
|
-
}
|
|
37
33
|
return {
|
|
38
34
|
...field,
|
|
39
35
|
admin: {
|
|
40
36
|
...field.admin,
|
|
41
37
|
components: {
|
|
42
38
|
...field.admin?.components || {},
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
// @ts-expect-error
|
|
40
|
+
Description: DescriptionField({
|
|
41
|
+
Description: field.admin?.components?.Description
|
|
42
|
+
})
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
45
|
};
|
|
@@ -55,12 +53,10 @@ export const updateFieldsConfig = (collectionConfig)=>{
|
|
|
55
53
|
if (field.tabs) {
|
|
56
54
|
return {
|
|
57
55
|
...field,
|
|
58
|
-
tabs: field.tabs.map((tab)=>{
|
|
59
|
-
return {
|
|
56
|
+
tabs: field.tabs.map((tab)=>({
|
|
60
57
|
...tab,
|
|
61
|
-
fields: tab.fields.map((subField)=>updateField(subField,
|
|
62
|
-
}
|
|
63
|
-
})
|
|
58
|
+
fields: tab.fields.map((subField)=>updateField(subField, currentPath))
|
|
59
|
+
}))
|
|
64
60
|
};
|
|
65
61
|
}
|
|
66
62
|
if (field.blocks) {
|
|
@@ -78,12 +74,6 @@ export const updateFieldsConfig = (collectionConfig)=>{
|
|
|
78
74
|
...collectionConfig,
|
|
79
75
|
fields: collectionConfig.fields.map((field)=>updateField(field))
|
|
80
76
|
};
|
|
81
|
-
if (customComponentsFound) {
|
|
82
|
-
console.warn(`\n— AI Plugin Alert 🚨:
|
|
83
|
-
Uh-oh, custom component(s) spotted! We might not be able to inject the AI Composer automatically for these components 🤖.
|
|
84
|
-
No worries, though! You can add it manually using below path:
|
|
85
|
-
'@ai-stack/payloadcms/fields#DescriptionField'.\n`);
|
|
86
|
-
}
|
|
87
77
|
return {
|
|
88
78
|
schemaPathMap,
|
|
89
79
|
updatedCollectionConfig
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { DescriptionField } from '../fields/DescriptionField/DescriptionField.js'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n }, // TODO add field name to support seed time prompt generation\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n if (['text', 'textarea', 'upload'].includes(field.type)) {\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n // @ts-expect-error\n Description: DescriptionField({\n Description: field.admin?.components?.Description,\n }),\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => ({\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, currentPath)),\n })),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["DescriptionField","updateFieldsConfig","collectionConfig","schemaPathMap","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","includes","type","label","components","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,iDAAgD;AAOjF,OAAO,MAAMC,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IACrB,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,CAAC,EAAEA,WAAW,CAAC,EAAED,MAAMG,IAAI,CAAC,CAAC,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,CAAC,EAAEP,iBAAiBQ,IAAI,CAAC,CAAC,EAAEH,YAAY,CAAC;QAEnE,IAAIF,MAAMM,KAAK,EAAEC,YAAYP,MAAMM,KAAK,EAAEE,YAAYR,MAAMM,KAAK,EAAEG,QAAQ;YACzE,OAAOT;QACT;QAEA,8EAA8E;QAC9E,wGAAwG;QACxG,yEAAyE;QACzE,IAAI;YAAC;YAAY;YAAQ;YAAY;SAAS,CAACU,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACnEb,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACM,kBAAkB,EAAE;oBACnBO,MAAMX,MAAMW,IAAI;oBAChBC,OAAOZ,MAAMY,KAAK,IAAIZ,MAAMG,IAAI;gBAClC;YACF;QACF;QAEA,8FAA8F;QAC9F,IAAI;YAAC;YAAQ;YAAY;SAAS,CAACO,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACvD,OAAO;gBACL,GAAGX,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdO,YAAY;wBACV,GAAIb,MAAMM,KAAK,EAAEO,cAAc,CAAC,CAAC;wBACjC,mBAAmB;wBACnBC,aAAanB,iBAAiB;4BAC5BmB,aAAad,MAAMM,KAAK,EAAEO,YAAYC;wBACxC;oBACF;gBACF;YACF;QACF;QAEA,IAAId,MAAMe,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGf,KAAK;gBACRe,QAAQf,MAAMe,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBlB,YAAYkB,UAAUf;YACpE;QACF;QAEA,IAAIF,MAAMkB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGlB,KAAK;gBACRkB,MAAMlB,MAAMkB,IAAI,CAACF,GAAG,CAAC,CAACG,MAAc,CAAA;wBAClC,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBlB,YAAYkB,UAAUf;oBAClE,CAAA;YACF;QACF;QAEA,IAAIF,MAAMoB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGpB,KAAK;gBACRoB,QAAQpB,MAAMoB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBlB,YAAYkB,UAAU,CAAC,EAAEf,YAAY,CAAC,EAAEmB,MAAMhB,IAAI,CAAC,CAAC;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMsB,0BAA0B;QAC9B,GAAGzB,gBAAgB;QACnBkB,QAAQlB,iBAAiBkB,MAAM,CAACC,GAAG,CAAC,CAAChB,QAAUD,YAAYC;IAC7D;IAEA,OAAO;QACLF;QACAwB;IACF;AACF,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,47 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-stack/payloadcms",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.65.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"bugs": "https://github.com/ashbuilds/payload-ai/issues",
|
|
6
6
|
"repository": "https://github.com/ashbuilds/payload-ai",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "ashbuilds",
|
|
9
|
-
"keywords": [
|
|
10
|
-
"plugin",
|
|
11
|
-
"text-to-speech",
|
|
12
|
-
"ai",
|
|
13
|
-
"text-generation",
|
|
14
|
-
"text-to-image",
|
|
15
|
-
"content-generation",
|
|
16
|
-
"ai-writing",
|
|
17
|
-
"payloadcms",
|
|
18
|
-
"smart-generation",
|
|
19
|
-
"ai-translate",
|
|
20
|
-
"ai-writing-tool"
|
|
21
|
-
],
|
|
22
9
|
"type": "module",
|
|
23
10
|
"main": "dist/index.js",
|
|
24
11
|
"types": "dist/index.d.ts",
|
|
12
|
+
"keywords": ["plugin", "text-to-speech", "ai", "text-generation", "text-to-image", "content-generation", "ai-writing","payloadcms","smart-generation","ai-translate","ai-writing-tool"],
|
|
25
13
|
"exports": {
|
|
26
14
|
".": {
|
|
27
15
|
"import": "./dist/index.js",
|
|
28
16
|
"require": "./dist/index.js",
|
|
29
17
|
"types": "./dist/index.d.ts"
|
|
30
|
-
},
|
|
31
|
-
"./client": {
|
|
32
|
-
"import": "./dist/exports/client.js",
|
|
33
|
-
"types": "./dist/exports/client.d.ts",
|
|
34
|
-
"default": "./dist/exports/client.js"
|
|
35
|
-
},
|
|
36
|
-
"./fields": {
|
|
37
|
-
"import": "./dist/exports/fields.js",
|
|
38
|
-
"types": "./dist/exports/fields.d.ts",
|
|
39
|
-
"default": "./dist/exports/fields.js"
|
|
40
|
-
},
|
|
41
|
-
"./types": {
|
|
42
|
-
"import": "./dist/exports/types.js",
|
|
43
|
-
"types": "./dist/exports/types.d.ts",
|
|
44
|
-
"default": "./dist/exports/types.js"
|
|
45
18
|
}
|
|
46
19
|
},
|
|
47
20
|
"files": [
|
|
@@ -60,89 +33,70 @@
|
|
|
60
33
|
"dependencies": {
|
|
61
34
|
"@ai-sdk/anthropic": "^0.0.38",
|
|
62
35
|
"@ai-sdk/openai": "^0.0.43",
|
|
63
|
-
"@ai-sdk/provider-utils": "^1.0.
|
|
36
|
+
"@ai-sdk/provider-utils": "^1.0.8",
|
|
64
37
|
"@ai-sdk/ui-utils": "^0.0.27",
|
|
65
38
|
"@anthropic-ai/sdk": "^0.24.3",
|
|
66
|
-
"@langchain/core": "^0.2.
|
|
67
|
-
"@langchain/openai": "^0.2.
|
|
39
|
+
"@langchain/core": "^0.2.15",
|
|
40
|
+
"@langchain/openai": "^0.2.1",
|
|
68
41
|
"@lexical/html": "^0.16.1",
|
|
69
|
-
"ai": "^3.3.
|
|
42
|
+
"ai": "^3.3.3",
|
|
70
43
|
"elevenlabs": "^0.8.2",
|
|
71
44
|
"handlebars": "4.7.8",
|
|
72
45
|
"handlebars-async-helpers": "^1.0.6",
|
|
73
|
-
"langchain": "^0.2.
|
|
74
|
-
"lexical": "^0.
|
|
46
|
+
"langchain": "^0.2.9",
|
|
47
|
+
"lexical": "^0.16.1",
|
|
75
48
|
"locale-codes": "^1.3.1",
|
|
76
|
-
"openai": "^4.
|
|
49
|
+
"openai": "^4.47.1",
|
|
77
50
|
"zod": "^3.23.8",
|
|
78
|
-
"zod-to-json-schema": "^3.23.
|
|
79
|
-
"get-input-selection": "^1.1.4",
|
|
80
|
-
"lodash.isequal": "^4.5.0",
|
|
81
|
-
"scroll-into-view-if-needed": "^3.1.0",
|
|
82
|
-
"textarea-caret": "^3.0.2"
|
|
51
|
+
"zod-to-json-schema": "^3.23.1"
|
|
83
52
|
},
|
|
84
53
|
"devDependencies": {
|
|
85
54
|
"@eslint/compat": "^1.1.1",
|
|
86
|
-
"@eslint/js": "^9.9.
|
|
55
|
+
"@eslint/js": "^9.9.0",
|
|
87
56
|
"@swc/cli": "0.4.0",
|
|
88
57
|
"@types/dot-object": "2.1.6",
|
|
89
58
|
"@types/react": "npm:types-react@19.0.0-beta.2",
|
|
90
59
|
"@types/react-dom": "npm:types-react-dom@19.0.0-beta.2",
|
|
91
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
92
|
-
"@typescript-eslint/parser": "^7.
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^7.16.1",
|
|
61
|
+
"@typescript-eslint/parser": "^7.16.1",
|
|
62
|
+
"chokidar": "^3.6.0",
|
|
93
63
|
"copyfiles": "2.4.1",
|
|
94
|
-
"eslint": "^9.
|
|
64
|
+
"eslint": "^9.7.0",
|
|
95
65
|
"eslint-config-prettier": "^9.1.0",
|
|
96
66
|
"eslint-plugin-import": "^2.29.1",
|
|
97
|
-
"eslint-plugin-import-x": "^3.1
|
|
67
|
+
"eslint-plugin-import-x": "^3.0.1",
|
|
98
68
|
"eslint-plugin-jsx-a11y": "^6.9.0",
|
|
99
69
|
"eslint-plugin-perfectionist": "^2.11.0",
|
|
100
70
|
"eslint-plugin-prettier": "^5.2.1",
|
|
101
71
|
"eslint-plugin-react": "^7.35.0",
|
|
102
72
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
103
73
|
"eslint-plugin-regexp": "^2.6.0",
|
|
104
|
-
"globals": "^15.
|
|
105
|
-
"payload": "3.0.0-beta.
|
|
74
|
+
"globals": "^15.8.0",
|
|
75
|
+
"payload": "3.0.0-beta.65",
|
|
106
76
|
"prettier": "^3.3.3",
|
|
107
77
|
"react": "19.0.0-rc-f994737d14-20240522",
|
|
108
78
|
"react-dom": "19.0.0-rc-f994737d14-20240522",
|
|
109
79
|
"rimraf": "6.0.1",
|
|
110
|
-
"typescript": "^5.5.
|
|
111
|
-
"typescript-eslint": "^7.
|
|
80
|
+
"typescript": "^5.5.3",
|
|
81
|
+
"typescript-eslint": "^7.16.1"
|
|
112
82
|
},
|
|
113
83
|
"peerDependencies": {
|
|
114
|
-
"@payloadcms/
|
|
115
|
-
"@payloadcms/
|
|
116
|
-
"@payloadcms/
|
|
117
|
-
"
|
|
84
|
+
"@payloadcms/next": "3.0.0-beta.65",
|
|
85
|
+
"@payloadcms/richtext-lexical": "3.0.0-beta.65",
|
|
86
|
+
"@payloadcms/translations": "3.0.0-beta.65",
|
|
87
|
+
"@payloadcms/ui": "3.0.0-beta.65",
|
|
88
|
+
"payload": "3.0.0-beta.65"
|
|
118
89
|
},
|
|
119
90
|
"publishConfig": {
|
|
120
|
-
"main": "./dist/index.js",
|
|
121
|
-
"types": "./dist/index.d.ts",
|
|
122
|
-
"@ai-stack:registry": "https://registry.npmjs.org",
|
|
123
|
-
"access": "public",
|
|
124
|
-
"provenance": true,
|
|
125
91
|
"exports": {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
},
|
|
131
|
-
"./types": {
|
|
132
|
-
"import": "./dist/exports/types.js",
|
|
133
|
-
"types": "./dist/exports/types.d.ts",
|
|
134
|
-
"default": "./dist/exports/types.js"
|
|
135
|
-
},
|
|
136
|
-
"./fields": {
|
|
137
|
-
"import": "./dist/exports/fields.js",
|
|
138
|
-
"types": "./dist/exports/fields.d.ts",
|
|
139
|
-
"default": "./dist/exports/fields.js"
|
|
140
|
-
},
|
|
141
|
-
"./client": {
|
|
142
|
-
"import": "./dist/exports/client.js",
|
|
143
|
-
"types": "./dist/exports/client.d.ts",
|
|
144
|
-
"default": "./dist/exports/client.js"
|
|
145
|
-
}
|
|
92
|
+
".": {
|
|
93
|
+
"import": "./dist/index.js",
|
|
94
|
+
"require": "./dist/index.js",
|
|
95
|
+
"types": "./dist/index.d.ts"
|
|
146
96
|
}
|
|
97
|
+
},
|
|
98
|
+
"main": "./dist/index.js",
|
|
99
|
+
"registry": "https://registry.npmjs.org/",
|
|
100
|
+
"types": "./dist/index.d.ts"
|
|
147
101
|
}
|
|
148
102
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lexical.schema.d.ts","sourceRoot":"","sources":["../../../src/ai/schemas/lexical.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAA;AAEF,eAAO,MAAM,aAAa,iBAAkB,CAAC,OAAO,eAAe,CAAC,EAAE;;;;;;EA0ErE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/schemas/lexical.schema.ts"],"sourcesContent":["import { z } from 'zod'\n\nexport const LexicalBaseNode = z.object({\n type: z.string(),\n children: z.array(z.any()).optional(),\n direction: z.enum(['ltr']).nullable().optional(),\n format: z.string().optional(),\n indent: z.number().optional(),\n version: z.number().optional(),\n})\n\nexport const lexicalSchema = (customNodes?: (typeof LexicalBaseNode)[]) => {\n const BaseNode = z.object({\n type: z.string(),\n children: z.array(z.lazy(() => Node)).optional(),\n direction: z.enum(['ltr']).nullable().optional(),\n format: z.string().optional(),\n indent: z.number().optional(),\n version: z.number().optional(),\n })\n\n const TextNode = BaseNode.extend({\n type: z.literal('text'),\n format: z.number().optional(),\n text: z.string(),\n })\n\n const LinkNode = BaseNode.extend({\n id: z.string(),\n type: z.literal('link'),\n fields: z.object({\n linkType: z.string(),\n newTab: z.boolean(),\n url: z.string(),\n }),\n })\n\n const ListItemNode = BaseNode.extend({\n type: z.literal('listitem'),\n checked: z.boolean().optional(),\n value: z.number(),\n })\n\n const ListNode = BaseNode.extend({\n type: z.literal('list'),\n listType: z.enum(['check', 'number', 'bullet']),\n start: z.number(),\n tag: z.enum(['ul', 'ol']),\n })\n\n const HeadingNode = BaseNode.extend({\n type: z.literal('heading'),\n tag: z.enum(['h1', 'h2', 'h3', 'h4']),\n })\n\n // Example of custom node - wip\n const MediaNode = BaseNode.extend({\n type: z.literal('block'),\n version: z.literal(2),\n fields: z.object({\n id: z.string(),\n media: z.string(),\n position: z.enum(['fullscreen', 'default']),\n blockName: z.string(),\n blockType: z.literal('mediaBlock'),\n }),\n })\n\n const Node = z.union([\n TextNode,\n LinkNode,\n ListItemNode,\n ListNode,\n HeadingNode,\n BaseNode.extend({ type: z.enum(['paragraph', 'quote', 'horizontalrule']) }),\n ...(customNodes || []),\n ])\n\n const RootNode = BaseNode.extend({\n type: z.literal('root'),\n })\n\n return z.object({\n root: RootNode,\n })\n}\n"],"names":["z","LexicalBaseNode","object","type","string","children","array","any","optional","direction","enum","nullable","format","indent","number","version","lexicalSchema","customNodes","BaseNode","lazy","Node","TextNode","extend","literal","text","LinkNode","id","fields","linkType","newTab","boolean","url","ListItemNode","checked","value","ListNode","listType","start","tag","HeadingNode","MediaNode","media","position","blockName","blockType","union","RootNode","root"],"mappings":"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"}
|
package/dist/exports/client.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAA"}
|
package/dist/exports/client.js
DELETED