@ai-stack/payloadcms 3.0.0-beta.104.2 → 3.0.0-beta.65.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +2 -16
  2. package/dist/ai/{schemas → editor}/lexical.schema.d.ts +2 -2
  3. package/dist/ai/editor/lexical.schema.d.ts.map +1 -0
  4. package/dist/ai/editor/lexical.schema.js.map +1 -0
  5. package/dist/ai/models/anthropic/generateRichText.js.map +1 -1
  6. package/dist/ai/models/anthropic/index.d.ts.map +1 -1
  7. package/dist/ai/models/anthropic/index.js +3 -3
  8. package/dist/ai/models/anthropic/index.js.map +1 -1
  9. package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
  10. package/dist/ai/models/elevenLabs/index.js +11 -1
  11. package/dist/ai/models/elevenLabs/index.js.map +1 -1
  12. package/dist/ai/models/index.js +2 -2
  13. package/dist/ai/models/index.js.map +1 -1
  14. package/dist/ai/models/openai/generateRichText.js.map +1 -1
  15. package/dist/ai/models/openai/index.d.ts.map +1 -1
  16. package/dist/ai/models/openai/index.js +2 -3
  17. package/dist/ai/models/openai/index.js.map +1 -1
  18. package/dist/ai/models/style.d.ts +2 -0
  19. package/dist/ai/models/style.d.ts.map +1 -0
  20. package/dist/ai/models/style.js +31 -0
  21. package/dist/ai/models/style.js.map +1 -0
  22. package/dist/ai/prompts.d.ts +0 -1
  23. package/dist/ai/prompts.d.ts.map +1 -1
  24. package/dist/ai/prompts.js +2 -8
  25. package/dist/ai/prompts.js.map +1 -1
  26. package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
  27. package/dist/collections/Instructions.d.ts.map +1 -1
  28. package/dist/collections/Instructions.js +12 -9
  29. package/dist/collections/Instructions.js.map +1 -1
  30. package/dist/defaults.d.ts +1 -1
  31. package/dist/defaults.d.ts.map +1 -1
  32. package/dist/defaults.js +1 -1
  33. package/dist/defaults.js.map +1 -1
  34. package/dist/endpoints/index.d.ts +1 -1
  35. package/dist/endpoints/index.d.ts.map +1 -1
  36. package/dist/endpoints/index.js +51 -17
  37. package/dist/endpoints/index.js.map +1 -1
  38. package/dist/exports/fields.d.ts +1 -3
  39. package/dist/exports/fields.d.ts.map +1 -1
  40. package/dist/exports/fields.js +0 -3
  41. package/dist/exports/fields.js.map +1 -1
  42. package/dist/fields/DescriptionField/DescriptionField.d.ts +3 -0
  43. package/dist/fields/DescriptionField/DescriptionField.d.ts.map +1 -0
  44. package/dist/fields/DescriptionField/DescriptionField.js +15 -0
  45. package/dist/fields/DescriptionField/DescriptionField.js.map +1 -0
  46. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts +4 -0
  47. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts.map +1 -0
  48. package/dist/fields/{ComposeField/ComposeField.js → DescriptionField/DescriptionFieldComponent.js} +5 -5
  49. package/dist/fields/DescriptionField/DescriptionFieldComponent.js.map +1 -0
  50. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts +2 -0
  51. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts.map +1 -0
  52. package/dist/fields/LexicalEditor/{ComposeFeatureComponent.js → ActionsFeatureComponent.js} +5 -5
  53. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +1 -0
  54. package/dist/fields/LexicalEditor/feature.client.d.ts +4 -1
  55. package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
  56. package/dist/fields/LexicalEditor/feature.client.js +2 -2
  57. package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
  58. package/dist/fields/LexicalEditor/feature.server.d.ts +7 -1
  59. package/dist/fields/LexicalEditor/feature.server.d.ts.map +1 -1
  60. package/dist/fields/LexicalEditor/feature.server.js +11 -3
  61. package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
  62. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +2 -2
  63. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
  64. package/dist/fields/PromptEditorField/PromptEditorField.js +51 -32
  65. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  66. package/dist/fields/SelectField/SelectField.d.ts +2 -9
  67. package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
  68. package/dist/fields/SelectField/SelectField.js +23 -26
  69. package/dist/fields/SelectField/SelectField.js.map +1 -1
  70. package/dist/index.d.ts +2 -2
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +3 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/init.d.ts +1 -2
  75. package/dist/init.d.ts.map +1 -1
  76. package/dist/init.js +9 -26
  77. package/dist/init.js.map +1 -1
  78. package/dist/plugin.d.ts.map +1 -1
  79. package/dist/plugin.js +8 -27
  80. package/dist/plugin.js.map +1 -1
  81. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +3 -1
  82. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
  83. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  84. package/dist/providers/InstructionsProvider/hook.d.ts +9 -0
  85. package/dist/providers/InstructionsProvider/hook.d.ts.map +1 -0
  86. package/dist/providers/InstructionsProvider/hook.js +17 -0
  87. package/dist/providers/InstructionsProvider/hook.js.map +1 -0
  88. package/dist/providers/InstructionsProvider/index.d.ts +5 -0
  89. package/dist/providers/InstructionsProvider/index.d.ts.map +1 -0
  90. package/dist/providers/InstructionsProvider/index.js +10 -0
  91. package/dist/providers/InstructionsProvider/index.js.map +1 -0
  92. package/dist/types.d.ts +1 -2
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/types.js.map +1 -1
  95. package/dist/ui/Actions/Actions.d.ts +5 -0
  96. package/dist/ui/Actions/Actions.d.ts.map +1 -0
  97. package/dist/ui/{Compose/Compose.js → Actions/Actions.js} +9 -9
  98. package/dist/ui/Actions/Actions.js.map +1 -0
  99. package/dist/ui/{Compose → Actions}/UndoRedoActions.d.ts.map +1 -1
  100. package/dist/ui/{Compose → Actions}/UndoRedoActions.js +2 -15
  101. package/dist/ui/Actions/UndoRedoActions.js.map +1 -0
  102. package/dist/ui/{Compose → Actions}/hooks/menu/Item.d.ts.map +1 -1
  103. package/dist/ui/{Compose → Actions}/hooks/menu/Item.js.map +1 -1
  104. package/dist/ui/Actions/hooks/menu/TranslateMenu.d.ts.map +1 -0
  105. package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.js.map +1 -1
  106. package/dist/ui/{Compose → Actions}/hooks/menu/items.d.ts.map +1 -1
  107. package/dist/ui/{Compose → Actions}/hooks/menu/items.js.map +1 -1
  108. package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.d.ts.map +1 -1
  109. package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.js.map +1 -1
  110. package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.d.ts.map +1 -1
  111. package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.js.map +1 -1
  112. package/dist/ui/{Compose → Actions}/hooks/useGenerate.d.ts.map +1 -1
  113. package/dist/ui/{Compose → Actions}/hooks/useGenerate.js +6 -5
  114. package/dist/ui/Actions/hooks/useGenerate.js.map +1 -0
  115. package/dist/ui/Actions/hooks/useHistory.d.ts.map +1 -0
  116. package/dist/ui/{Compose → Actions}/hooks/useHistory.js +1 -3
  117. package/dist/ui/Actions/hooks/useHistory.js.map +1 -0
  118. package/dist/ui/Floatype/Floatype.d.ts +21 -0
  119. package/dist/ui/Floatype/Floatype.d.ts.map +1 -0
  120. package/dist/ui/Floatype/Floatype.js +245 -0
  121. package/dist/ui/Floatype/Floatype.js.map +1 -0
  122. package/dist/ui/Floatype/floatype.module.css +25 -0
  123. package/dist/utilities/getFieldBySchemaPath.d.ts +2 -2
  124. package/dist/utilities/getFieldBySchemaPath.d.ts.map +1 -1
  125. package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
  126. package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
  127. package/dist/utilities/updateFieldsConfig.js +8 -14
  128. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  129. package/package.json +30 -49
  130. package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
  131. package/dist/ai/schemas/lexical.schema.js.map +0 -1
  132. package/dist/exports/client.d.ts +0 -3
  133. package/dist/exports/client.d.ts.map +0 -1
  134. package/dist/exports/client.js +0 -4
  135. package/dist/exports/client.js.map +0 -1
  136. package/dist/fields/ComposeField/ComposeField.d.ts +0 -4
  137. package/dist/fields/ComposeField/ComposeField.d.ts.map +0 -1
  138. package/dist/fields/ComposeField/ComposeField.js.map +0 -1
  139. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +0 -2
  140. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +0 -1
  141. package/dist/fields/LexicalEditor/ComposeFeatureComponent.js.map +0 -1
  142. package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts +0 -8
  143. package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts.map +0 -1
  144. package/dist/libraries/autocomplete/AutocompleteTextArea.js +0 -437
  145. package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +0 -1
  146. package/dist/libraries/autocomplete/AutocompleteTextArea.module.scss +0 -35
  147. package/dist/libraries/handlebars/asyncHandlebars.d.ts +0 -2
  148. package/dist/libraries/handlebars/asyncHandlebars.d.ts.map +0 -1
  149. package/dist/libraries/handlebars/asyncHandlebars.js +0 -5
  150. package/dist/libraries/handlebars/asyncHandlebars.js.map +0 -1
  151. package/dist/libraries/handlebars/helpers.d.ts +0 -2
  152. package/dist/libraries/handlebars/helpers.d.ts.map +0 -1
  153. package/dist/libraries/handlebars/helpers.js +0 -22
  154. package/dist/libraries/handlebars/helpers.js.map +0 -1
  155. package/dist/libraries/handlebars/helpersMap.d.ts +0 -12
  156. package/dist/libraries/handlebars/helpersMap.d.ts.map +0 -1
  157. package/dist/libraries/handlebars/helpersMap.js +0 -13
  158. package/dist/libraries/handlebars/helpersMap.js.map +0 -1
  159. package/dist/libraries/handlebars/replacePlaceholders.d.ts +0 -2
  160. package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +0 -1
  161. package/dist/libraries/handlebars/replacePlaceholders.js +0 -8
  162. package/dist/libraries/handlebars/replacePlaceholders.js.map +0 -1
  163. package/dist/providers/InstructionsProvider/useInstructions.d.ts +0 -4
  164. package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +0 -1
  165. package/dist/providers/InstructionsProvider/useInstructions.js +0 -38
  166. package/dist/providers/InstructionsProvider/useInstructions.js.map +0 -1
  167. package/dist/ui/Compose/Compose.d.ts +0 -9
  168. package/dist/ui/Compose/Compose.d.ts.map +0 -1
  169. package/dist/ui/Compose/Compose.js.map +0 -1
  170. package/dist/ui/Compose/UndoRedoActions.js.map +0 -1
  171. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +0 -1
  172. package/dist/ui/Compose/hooks/useGenerate.js.map +0 -1
  173. package/dist/ui/Compose/hooks/useHistory.d.ts.map +0 -1
  174. package/dist/ui/Compose/hooks/useHistory.js.map +0 -1
  175. package/dist/utilities/getFieldInfo.d.ts +0 -3
  176. package/dist/utilities/getFieldInfo.d.ts.map +0 -1
  177. package/dist/utilities/getFieldInfo.js +0 -14
  178. package/dist/utilities/getFieldInfo.js.map +0 -1
  179. /package/dist/ai/{schemas → editor}/lexical.schema.js +0 -0
  180. /package/dist/ui/{Compose → Actions}/UndoRedoActions.d.ts +0 -0
  181. /package/dist/ui/{Compose/compose.module.scss → Actions/actions.module.scss} +0 -0
  182. /package/dist/ui/{Compose → Actions}/hooks/menu/Item.d.ts +0 -0
  183. /package/dist/ui/{Compose → Actions}/hooks/menu/Item.js +0 -0
  184. /package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.d.ts +0 -0
  185. /package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.js +0 -0
  186. /package/dist/ui/{Compose → Actions}/hooks/menu/items.d.ts +0 -0
  187. /package/dist/ui/{Compose → Actions}/hooks/menu/items.js +0 -0
  188. /package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.d.ts +0 -0
  189. /package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.js +0 -0
  190. /package/dist/ui/{Compose → Actions}/hooks/menu/menu.module.scss +0 -0
  191. /package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.d.ts +0 -0
  192. /package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.js +0 -0
  193. /package/dist/ui/{Compose → Actions}/hooks/useGenerate.d.ts +0 -0
  194. /package/dist/ui/{Compose → Actions}/hooks/useHistory.d.ts +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;AAE9E,eAAO,MAAM,oBAAoB,qBACb,sBAAsB,GAAG,gBAAgB,cAC/C,MAAM,KACjB,KAAK,GAAG,IAyCV,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;AAE/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,kBA0FvE,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,20 +30,16 @@ export const updateFieldsConfig = (collectionConfig)=>{
30
30
  'textarea',
31
31
  'upload'
32
32
  ].includes(field.type)) {
33
- let customField = {};
34
- // Custom fields don't fully adhere to the Payload schema, making it difficult to
35
- // determine which components support injecting ComposeField as a Description.
36
- if (field.admin?.components?.Field || field.admin?.components?.Description) {
37
- // TODO: Do something?
38
- }
39
33
  return {
40
34
  ...field,
41
35
  admin: {
42
36
  ...field.admin,
43
37
  components: {
44
38
  ...field.admin?.components || {},
45
- Description: '@ai-stack/payloadcms/fields#ComposeField',
46
- ...customField
39
+ // @ts-expect-error
40
+ Description: DescriptionField({
41
+ Description: field.admin?.components?.Description
42
+ })
47
43
  }
48
44
  }
49
45
  };
@@ -57,12 +53,10 @@ export const updateFieldsConfig = (collectionConfig)=>{
57
53
  if (field.tabs) {
58
54
  return {
59
55
  ...field,
60
- tabs: field.tabs.map((tab)=>{
61
- return {
56
+ tabs: field.tabs.map((tab)=>({
62
57
  ...tab,
63
- fields: tab.fields.map((subField)=>updateField(subField, tab.name))
64
- };
65
- })
58
+ fields: tab.fields.map((subField)=>updateField(subField, currentPath))
59
+ }))
66
60
  };
67
61
  }
68
62
  if (field.blocks) {
@@ -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 let customComponentsFound = false\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 },\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 let customField = {}\n\n // Custom fields don't fully adhere to the Payload schema, making it difficult to\n // determine which components support injecting ComposeField as a Description.\n if (field.admin?.components?.Field || field.admin?.components?.Description) {\n // TODO: Do something?\n }\n\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n Description: '@ai-stack/payloadcms/fields#ComposeField',\n ...customField,\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 return {\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, tab.name)),\n }\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":["updateFieldsConfig","collectionConfig","schemaPathMap","customComponentsFound","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","includes","type","label","customField","components","Field","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"AAOA,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IACrB,IAAIC,wBAAwB;IAC5B,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,GAAGA,WAAW,CAAC,EAAED,MAAMG,IAAI,EAAE,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,GAAGR,iBAAiBS,IAAI,CAAC,CAAC,EAAEH,aAAa;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;YACnEd,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACO,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,IAAIE,cAAc,CAAC;YAEnB,iFAAiF;YACjF,8EAA8E;YAC9E,IAAIb,MAAMM,KAAK,EAAEQ,YAAYC,SAASf,MAAMM,KAAK,EAAEQ,YAAYE,aAAa;YAC1E,sBAAsB;YACxB;YAEA,OAAO;gBACL,GAAGhB,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdQ,YAAY;wBACV,GAAId,MAAMM,KAAK,EAAEQ,cAAc,CAAC,CAAC;wBACjCE,aAAa;wBACb,GAAGH,WAAW;oBAChB;gBACF;YACF;QACF;QAEA,IAAIb,MAAMiB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGjB,KAAK;gBACRiB,QAAQjB,MAAMiB,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBpB,YAAYoB,UAAUjB;YACpE;QACF;QAEA,IAAIF,MAAMoB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGpB,KAAK;gBACRoB,MAAMpB,MAAMoB,IAAI,CAACF,GAAG,CAAC,CAACG;oBACpB,OAAO;wBACL,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBpB,YAAYoB,UAAUE,IAAIlB,IAAI;oBAC1E;gBACF;YACF;QACF;QAEA,IAAIH,MAAMsB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGtB,KAAK;gBACRsB,QAAQtB,MAAMsB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBpB,YAAYoB,UAAU,GAAGjB,YAAY,CAAC,EAAEqB,MAAMlB,IAAI,EAAE;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMwB,0BAA0B;QAC9B,GAAG5B,gBAAgB;QACnBqB,QAAQrB,iBAAiBqB,MAAM,CAACC,GAAG,CAAC,CAAClB,QAAUD,YAAYC;IAC7D;IAEA,OAAO;QACLH;QACA2B;IACF;AACF,EAAC"}
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 },\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,11 +1,14 @@
1
1
  {
2
2
  "name": "@ai-stack/payloadcms",
3
- "version": "3.0.0-beta.104.2",
3
+ "version": "3.0.0-beta.65.1",
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
+ "type": "module",
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
9
12
  "keywords": [
10
13
  "plugin",
11
14
  "text-to-speech",
@@ -19,29 +22,11 @@
19
22
  "ai-translate",
20
23
  "ai-writing-tool"
21
24
  ],
22
- "type": "module",
23
- "main": "./dist/index.js",
24
- "types": "./dist/index.d.ts",
25
25
  "exports": {
26
26
  ".": {
27
27
  "import": "./dist/index.js",
28
- "types": "./dist/index.d.ts",
29
- "default": "./dist/index.js"
30
- },
31
- "./types": {
32
- "import": "./dist/exports/types.js",
33
- "types": "./dist/exports/types.d.ts",
34
- "default": "./dist/exports/types.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
- "./client": {
42
- "import": "./dist/exports/client.js",
43
- "types": "./dist/exports/client.d.ts",
44
- "default": "./dist/exports/client.js"
28
+ "require": "./dist/index.js",
29
+ "types": "./dist/index.d.ts"
45
30
  }
46
31
  },
47
32
  "files": [
@@ -50,67 +35,63 @@
50
35
  "dependencies": {
51
36
  "@ai-sdk/anthropic": "^0.0.38",
52
37
  "@ai-sdk/openai": "^0.0.43",
53
- "@ai-sdk/provider-utils": "^1.0.17",
38
+ "@ai-sdk/provider-utils": "^1.0.8",
54
39
  "@ai-sdk/ui-utils": "^0.0.27",
55
40
  "@anthropic-ai/sdk": "^0.24.3",
56
- "@langchain/core": "^0.2.31",
57
- "@langchain/openai": "^0.2.8",
41
+ "@langchain/core": "^0.2.15",
42
+ "@langchain/openai": "^0.2.1",
58
43
  "@lexical/html": "^0.16.1",
59
- "ai": "^3.3.20",
44
+ "ai": "^3.3.3",
60
45
  "elevenlabs": "^0.8.2",
61
- "get-input-selection": "^1.1.4",
62
46
  "handlebars": "4.7.8",
63
47
  "handlebars-async-helpers": "^1.0.6",
64
- "langchain": "^0.2.17",
65
- "lexical": "^0.17.0",
48
+ "langchain": "^0.2.9",
49
+ "lexical": "^0.16.1",
66
50
  "locale-codes": "^1.3.1",
67
- "lodash.isequal": "^4.5.0",
68
- "openai": "^4.56.1",
69
- "scroll-into-view-if-needed": "^3.1.0",
70
- "textarea-caret": "^3.0.2",
51
+ "openai": "^4.47.1",
71
52
  "zod": "^3.23.8",
72
- "zod-to-json-schema": "^3.23.2"
53
+ "zod-to-json-schema": "^3.23.1"
73
54
  },
74
55
  "devDependencies": {
75
56
  "@eslint/compat": "^1.1.1",
76
- "@eslint/js": "^9.9.1",
57
+ "@eslint/js": "^9.9.0",
77
58
  "@swc/cli": "0.4.0",
78
59
  "@types/dot-object": "2.1.6",
79
- "@types/handlebars": "^4.1.0",
80
60
  "@types/react": "npm:types-react@19.0.0-beta.2",
81
61
  "@types/react-dom": "npm:types-react-dom@19.0.0-beta.2",
82
- "@typescript-eslint/eslint-plugin": "^7.18.0",
83
- "@typescript-eslint/parser": "^7.18.0",
62
+ "@typescript-eslint/eslint-plugin": "^7.16.1",
63
+ "@typescript-eslint/parser": "^7.16.1",
64
+ "chokidar": "^3.6.0",
84
65
  "copyfiles": "2.4.1",
85
- "eslint": "^9.9.1",
66
+ "eslint": "^9.7.0",
86
67
  "eslint-config-prettier": "^9.1.0",
87
68
  "eslint-plugin-import": "^2.29.1",
88
- "eslint-plugin-import-x": "^3.1.0",
69
+ "eslint-plugin-import-x": "^3.0.1",
89
70
  "eslint-plugin-jsx-a11y": "^6.9.0",
90
71
  "eslint-plugin-perfectionist": "^2.11.0",
91
72
  "eslint-plugin-prettier": "^5.2.1",
92
73
  "eslint-plugin-react": "^7.35.0",
93
74
  "eslint-plugin-react-hooks": "^4.6.2",
94
75
  "eslint-plugin-regexp": "^2.6.0",
95
- "globals": "^15.9.0",
96
- "payload": "3.0.0-beta.104",
76
+ "globals": "^15.8.0",
77
+ "payload": "3.0.0-beta.65",
97
78
  "prettier": "^3.3.3",
98
79
  "react": "19.0.0-rc-f994737d14-20240522",
99
80
  "react-dom": "19.0.0-rc-f994737d14-20240522",
100
81
  "rimraf": "6.0.1",
101
- "typescript": "^5.5.4",
102
- "typescript-eslint": "^7.18.0"
82
+ "typescript": "^5.5.3",
83
+ "typescript-eslint": "^7.16.1"
103
84
  },
104
85
  "peerDependencies": {
105
- "@payloadcms/richtext-lexical": "3.0.0-beta.104",
106
- "@payloadcms/translations": "3.0.0-beta.104",
107
- "@payloadcms/ui": "3.0.0-beta.104",
108
- "payload": "3.0.0-beta.104"
86
+ "@payloadcms/next": "3.0.0-beta.65",
87
+ "@payloadcms/richtext-lexical": "3.0.0-beta.65",
88
+ "@payloadcms/translations": "3.0.0-beta.65",
89
+ "@payloadcms/ui": "3.0.0-beta.65",
90
+ "payload": "3.0.0-beta.65"
109
91
  },
110
92
  "publishConfig": {
111
93
  "@ai-stack:registry": "https://registry.npmjs.org",
112
- "access": "public",
113
- "provenance": true
94
+ "access": "public"
114
95
  },
115
96
  "scripts": {
116
97
  "build": "pnpm build:types && pnpm build:swc",
@@ -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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"}
@@ -1,3 +0,0 @@
1
- export { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js';
2
- export { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js';
3
- //# sourceMappingURL=client.d.ts.map
@@ -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"}
@@ -1,4 +0,0 @@
1
- export { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js';
2
- export { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js';
3
-
4
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js'\nexport { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js'\n"],"names":["LexicalEditorFeatureClient","InstructionsProvider"],"mappings":"AAAA,SAASA,0BAA0B,QAAQ,4CAA2C;AACtF,SAASC,oBAAoB,QAAQ,4DAA2D"}
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import { FieldDescriptionClientProps } from 'payload';
3
- export declare const ComposeField: React.FC<FieldDescriptionClientProps>;
4
- //# sourceMappingURL=ComposeField.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComposeField.d.ts","sourceRoot":"","sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAErD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAO9D,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"sourcesContent":["'use client'\n\nimport { useFieldProps } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\nimport { FieldDescriptionClientProps } from 'payload'\n\nexport const ComposeField: React.FC<FieldDescriptionClientProps> = (props) => {\n const { schemaPath } = useFieldProps()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n return <Compose descriptionProps={props} instructionId={instructionId} />\n}\n"],"names":["useFieldProps","React","useInstructions","Compose","ComposeField","props","schemaPath","id","instructionId","path","descriptionProps"],"mappings":"AAAA;;AAEA,SAASA,aAAa,QAAQ,iBAAgB;AAC9C,OAAOC,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAGrD,OAAO,MAAMC,eAAsD,CAACC;IAClE,MAAM,EAAEC,UAAU,EAAE,GAAGN;IACvB,MAAM,EAAEO,IAAIC,aAAa,EAAE,GAAGN,gBAAgB;QAC5CO,MAAMH;IACR;IAEA,qBAAO,KAACH;QAAQO,kBAAkBL;QAAOG,eAAeA;;AAC1D,EAAC"}
@@ -1,2 +0,0 @@
1
- export declare const ComposeFeatureComponent: () => import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=ComposeFeatureComponent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComposeFeatureComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,+CAQnC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"sourcesContent":["import { useFieldProps } from '@payloadcms/ui'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\nexport const ComposeFeatureComponent = () => {\n const { schemaPath } = useFieldProps()\n\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n return <Compose instructionId={instructionId} />\n}\n"],"names":["useFieldProps","useInstructions","Compose","ComposeFeatureComponent","schemaPath","id","instructionId","path"],"mappings":";AAAA,SAASA,aAAa,QAAQ,iBAAgB;AAE9C,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,0BAA0B;IACrC,MAAM,EAAEC,UAAU,EAAE,GAAGJ;IAEvB,MAAM,EAAEK,IAAIC,aAAa,EAAE,GAAGL,gBAAgB;QAC5CM,MAAMH;IACR;IAEA,qBAAO,KAACF;QAAQI,eAAeA;;AACjC,EAAC"}