@seed-ship/mcp-ui-solid 2.0.1 → 2.1.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 (136) hide show
  1. package/dist/components/AutocompleteDropdown.cjs +201 -0
  2. package/dist/components/AutocompleteDropdown.cjs.map +1 -0
  3. package/dist/components/AutocompleteDropdown.d.ts +71 -0
  4. package/dist/components/AutocompleteDropdown.d.ts.map +1 -0
  5. package/dist/components/AutocompleteDropdown.js +201 -0
  6. package/dist/components/AutocompleteDropdown.js.map +1 -0
  7. package/dist/components/AutocompleteFormField.cjs +289 -0
  8. package/dist/components/AutocompleteFormField.cjs.map +1 -0
  9. package/dist/components/AutocompleteFormField.d.ts +52 -0
  10. package/dist/components/AutocompleteFormField.d.ts.map +1 -0
  11. package/dist/components/AutocompleteFormField.js +289 -0
  12. package/dist/components/AutocompleteFormField.js.map +1 -0
  13. package/dist/components/DraggableGridItem.cjs +133 -0
  14. package/dist/components/DraggableGridItem.cjs.map +1 -0
  15. package/dist/components/DraggableGridItem.d.ts +95 -0
  16. package/dist/components/DraggableGridItem.d.ts.map +1 -0
  17. package/dist/components/DraggableGridItem.js +133 -0
  18. package/dist/components/DraggableGridItem.js.map +1 -0
  19. package/dist/components/EditableUIResourceRenderer.cjs +199 -0
  20. package/dist/components/EditableUIResourceRenderer.cjs.map +1 -0
  21. package/dist/components/EditableUIResourceRenderer.d.ts +43 -0
  22. package/dist/components/EditableUIResourceRenderer.d.ts.map +1 -0
  23. package/dist/components/EditableUIResourceRenderer.js +199 -0
  24. package/dist/components/EditableUIResourceRenderer.js.map +1 -0
  25. package/dist/components/GhostText.cjs +105 -0
  26. package/dist/components/GhostText.cjs.map +1 -0
  27. package/dist/components/GhostText.d.ts +113 -0
  28. package/dist/components/GhostText.d.ts.map +1 -0
  29. package/dist/components/GhostText.js +105 -0
  30. package/dist/components/GhostText.js.map +1 -0
  31. package/dist/components/ResizeHandle.cjs +177 -0
  32. package/dist/components/ResizeHandle.cjs.map +1 -0
  33. package/dist/components/ResizeHandle.d.ts +50 -0
  34. package/dist/components/ResizeHandle.d.ts.map +1 -0
  35. package/dist/components/ResizeHandle.js +177 -0
  36. package/dist/components/ResizeHandle.js.map +1 -0
  37. package/dist/context/AutocompleteContext.cjs +158 -0
  38. package/dist/context/AutocompleteContext.cjs.map +1 -0
  39. package/dist/context/AutocompleteContext.d.ts +77 -0
  40. package/dist/context/AutocompleteContext.d.ts.map +1 -0
  41. package/dist/context/AutocompleteContext.js +158 -0
  42. package/dist/context/AutocompleteContext.js.map +1 -0
  43. package/dist/hooks/index.d.ts +6 -0
  44. package/dist/hooks/index.d.ts.map +1 -1
  45. package/dist/hooks/useAutocomplete.cjs +242 -0
  46. package/dist/hooks/useAutocomplete.cjs.map +1 -0
  47. package/dist/hooks/useAutocomplete.d.ts +119 -0
  48. package/dist/hooks/useAutocomplete.d.ts.map +1 -0
  49. package/dist/hooks/useAutocomplete.js +242 -0
  50. package/dist/hooks/useAutocomplete.js.map +1 -0
  51. package/dist/hooks/useDragDrop.cjs +170 -0
  52. package/dist/hooks/useDragDrop.cjs.map +1 -0
  53. package/dist/hooks/useDragDrop.d.ts +100 -0
  54. package/dist/hooks/useDragDrop.d.ts.map +1 -0
  55. package/dist/hooks/useDragDrop.js +170 -0
  56. package/dist/hooks/useDragDrop.js.map +1 -0
  57. package/dist/hooks/useResize.cjs +209 -0
  58. package/dist/hooks/useResize.cjs.map +1 -0
  59. package/dist/hooks/useResize.d.ts +87 -0
  60. package/dist/hooks/useResize.d.ts.map +1 -0
  61. package/dist/hooks/useResize.js +209 -0
  62. package/dist/hooks/useResize.js.map +1 -0
  63. package/dist/hooks.cjs +6 -0
  64. package/dist/hooks.cjs.map +1 -1
  65. package/dist/hooks.d.cts +6 -0
  66. package/dist/hooks.d.ts +6 -0
  67. package/dist/hooks.js +6 -0
  68. package/dist/hooks.js.map +1 -1
  69. package/dist/index.cjs +29 -0
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.cts +18 -3
  72. package/dist/index.d.ts +18 -3
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +29 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/plugins/duckdb.cjs +192 -0
  77. package/dist/plugins/duckdb.cjs.map +1 -0
  78. package/dist/plugins/duckdb.d.ts +20 -0
  79. package/dist/plugins/duckdb.d.ts.map +1 -0
  80. package/dist/plugins/duckdb.js +170 -0
  81. package/dist/plugins/duckdb.js.map +1 -0
  82. package/dist/plugins/groq.cjs +97 -0
  83. package/dist/plugins/groq.cjs.map +1 -0
  84. package/dist/plugins/groq.d.ts +13 -0
  85. package/dist/plugins/groq.d.ts.map +1 -0
  86. package/dist/plugins/groq.js +97 -0
  87. package/dist/plugins/groq.js.map +1 -0
  88. package/dist/plugins/index.d.ts +10 -0
  89. package/dist/plugins/index.d.ts.map +1 -0
  90. package/dist/plugins/rest.cjs +92 -0
  91. package/dist/plugins/rest.cjs.map +1 -0
  92. package/dist/plugins/rest.d.ts +13 -0
  93. package/dist/plugins/rest.d.ts.map +1 -0
  94. package/dist/plugins/rest.js +92 -0
  95. package/dist/plugins/rest.js.map +1 -0
  96. package/dist/plugins/supabase.cjs +79 -0
  97. package/dist/plugins/supabase.cjs.map +1 -0
  98. package/dist/plugins/supabase.d.ts +13 -0
  99. package/dist/plugins/supabase.d.ts.map +1 -0
  100. package/dist/plugins/supabase.js +79 -0
  101. package/dist/plugins/supabase.js.map +1 -0
  102. package/dist/types/index.d.ts +430 -0
  103. package/dist/types/index.d.ts.map +1 -1
  104. package/dist/types.d.cts +430 -0
  105. package/dist/types.d.ts +430 -0
  106. package/esbuild-why-Full bundle (with deps).html +51 -0
  107. package/esbuild-why-Hooks only.html +51 -0
  108. package/esbuild-why-Streaming renderer.html +51 -0
  109. package/package.json +16 -1
  110. package/src/components/AutocompleteDropdown.tsx +329 -0
  111. package/src/components/AutocompleteFormField.tsx +288 -0
  112. package/src/components/DraggableGridItem.tsx +274 -0
  113. package/src/components/EditableUIResourceRenderer.tsx +268 -0
  114. package/src/components/GhostText.tsx +262 -0
  115. package/src/components/ResizeHandle.tsx +267 -0
  116. package/src/context/AutocompleteContext.tsx +317 -0
  117. package/src/hooks/index.ts +23 -0
  118. package/src/hooks/useAutocomplete.test.ts +334 -0
  119. package/src/hooks/useAutocomplete.ts +482 -0
  120. package/src/hooks/useDragDrop.test.ts +355 -0
  121. package/src/hooks/useDragDrop.ts +379 -0
  122. package/src/hooks/useResize.test.ts +313 -0
  123. package/src/hooks/useResize.ts +372 -0
  124. package/src/index.ts +71 -0
  125. package/src/plugins/duckdb.ts +269 -0
  126. package/src/plugins/groq.ts +137 -0
  127. package/src/plugins/index.ts +14 -0
  128. package/src/plugins/rest.ts +147 -0
  129. package/src/plugins/supabase.ts +120 -0
  130. package/src/styles/autocomplete.css +356 -0
  131. package/src/styles/drag-drop.css +297 -0
  132. package/src/styles/index.css +7 -0
  133. package/src/types/index.ts +529 -0
  134. package/src/vite-env.d.ts +18 -0
  135. package/tsconfig.tsbuildinfo +1 -1
  136. package/vite.config.ts +2 -0
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const web = require("solid-js/web");
4
+ const solidJs = require("solid-js");
5
+ const useConditionalField = require("../hooks/useConditionalField.cjs");
6
+ const useAutocomplete = require("../hooks/useAutocomplete.cjs");
7
+ const AutocompleteContext = require("../context/AutocompleteContext.cjs");
8
+ const GhostText = require("./GhostText.cjs");
9
+ const AutocompleteDropdown = require("./AutocompleteDropdown.cjs");
10
+ var _tmpl$ = /* @__PURE__ */ web.template(`<span class="text-red-500 ml-1"aria-hidden=true>*`), _tmpl$2 = /* @__PURE__ */ web.template(`<label class="block text-sm font-medium text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$3 = /* @__PURE__ */ web.template(`<div class=relative><!$><!/><input aria-autocomplete=list aria-haspopup=listbox autocomplete=off style=position:relative;z-index:2><!$><!/>`), _tmpl$4 = /* @__PURE__ */ web.template(`<p class="text-xs text-gray-500 dark:text-gray-400">`), _tmpl$5 = /* @__PURE__ */ web.template(`<p role=alert class="text-xs text-red-600 dark:text-red-400">`), _tmpl$6 = /* @__PURE__ */ web.template(`<div class=space-y-1><!$><!/><div class=relative></div><!$><!/><!$><!/>`), _tmpl$7 = /* @__PURE__ */ web.template(`<input>`);
11
+ const AutocompleteFormField = (props) => {
12
+ var _a, _b, _c, _d;
13
+ const autocompleteCtx = AutocompleteContext.useAutocompleteContextSafe();
14
+ const {
15
+ isVisible
16
+ } = useConditionalField.useConditionalField({
17
+ condition: props.field.showWhen,
18
+ formData: props.formData || (() => ({}))
19
+ });
20
+ const [localValue, setLocalValue] = solidJs.createSignal(String(props.value || ""));
21
+ solidJs.createEffect(solidJs.on(() => props.value, (newValue) => {
22
+ setLocalValue(String(newValue || ""));
23
+ }));
24
+ const autocompleteContext = solidJs.createMemo(() => {
25
+ var _a2, _b2;
26
+ const formData = (_a2 = props.formData) == null ? void 0 : _a2.call(props);
27
+ const config = props.field.autocomplete;
28
+ if (!((_b2 = config == null ? void 0 : config.contextFields) == null ? void 0 : _b2.length) && !formData) {
29
+ return {
30
+ fieldName: props.field.name
31
+ };
32
+ }
33
+ const contextData = {};
34
+ if ((config == null ? void 0 : config.contextFields) && formData) {
35
+ config.contextFields.forEach((field) => {
36
+ if (formData[field] !== void 0) {
37
+ contextData[field] = formData[field];
38
+ }
39
+ });
40
+ }
41
+ return {
42
+ fieldName: props.field.name,
43
+ formData: contextData
44
+ };
45
+ });
46
+ const autocomplete = useAutocomplete.useAutocomplete({
47
+ inputValue: localValue,
48
+ pluginId: (_a = props.field.autocomplete) == null ? void 0 : _a.plugin,
49
+ fieldConfig: props.field.autocomplete,
50
+ context: () => autocompleteContext() || {
51
+ fieldName: props.field.name
52
+ },
53
+ enabled: !!(((_b = props.field.autocomplete) == null ? void 0 : _b.enabled) && autocompleteCtx),
54
+ minChars: (_c = props.field.autocomplete) == null ? void 0 : _c.minChars,
55
+ debounceMs: (_d = props.field.autocomplete) == null ? void 0 : _d.debounceMs,
56
+ onInputChange: (value) => {
57
+ setLocalValue(value);
58
+ props.onChange(value);
59
+ }
60
+ });
61
+ const handleInput = (value) => {
62
+ setLocalValue(value);
63
+ props.onChange(value);
64
+ };
65
+ const handleKeyDown = (e) => {
66
+ if (autocomplete.handleKeyDown(e)) {
67
+ return;
68
+ }
69
+ };
70
+ const baseInputClass = () => `
71
+ w-full px-3 py-2 border rounded-md
72
+ focus:ring-2 focus:ring-blue-500 focus:border-blue-500
73
+ disabled:bg-gray-100 disabled:cursor-not-allowed
74
+ ${props.error ? "border-red-500 focus:ring-red-500" : "border-gray-300 dark:border-gray-600"}
75
+ dark:bg-gray-700 dark:text-white
76
+ `;
77
+ const fieldId = () => `field-${props.field.name}`;
78
+ const errorId = () => `${props.field.name}-error`;
79
+ const supportsAutocomplete = solidJs.createMemo(() => ["text", "email"].includes(props.field.type));
80
+ const showAutocomplete = solidJs.createMemo(() => {
81
+ var _a2;
82
+ return supportsAutocomplete() && ((_a2 = props.field.autocomplete) == null ? void 0 : _a2.enabled) && autocompleteCtx !== void 0;
83
+ });
84
+ return web.createComponent(solidJs.Show, {
85
+ get when() {
86
+ return isVisible();
87
+ },
88
+ get children() {
89
+ var _el$ = web.getNextElement(_tmpl$6), _el$15 = _el$.firstChild, [_el$16, _co$5] = web.getNextMarker(_el$15.nextSibling), _el$8 = _el$16.nextSibling, _el$17 = _el$8.nextSibling, [_el$18, _co$6] = web.getNextMarker(_el$17.nextSibling), _el$19 = _el$18.nextSibling, [_el$20, _co$7] = web.getNextMarker(_el$19.nextSibling);
90
+ web.insert(_el$, web.createComponent(solidJs.Show, {
91
+ get when() {
92
+ return props.field.label;
93
+ },
94
+ get children() {
95
+ var _el$2 = web.getNextElement(_tmpl$2), _el$4 = _el$2.firstChild, [_el$5, _co$] = web.getNextMarker(_el$4.nextSibling), _el$6 = _el$5.nextSibling, [_el$7, _co$2] = web.getNextMarker(_el$6.nextSibling);
96
+ web.insert(_el$2, () => props.field.label, _el$5, _co$);
97
+ web.insert(_el$2, web.createComponent(solidJs.Show, {
98
+ get when() {
99
+ return props.field.required;
100
+ },
101
+ get children() {
102
+ return web.getNextElement(_tmpl$);
103
+ }
104
+ }), _el$7, _co$2);
105
+ web.effect(() => web.setAttribute(_el$2, "for", fieldId()));
106
+ return _el$2;
107
+ }
108
+ }), _el$16, _co$5);
109
+ web.insert(_el$8, web.createComponent(solidJs.Show, {
110
+ get when() {
111
+ return showAutocomplete();
112
+ },
113
+ get fallback() {
114
+ return (
115
+ /* Standard input without autocomplete */
116
+ (() => {
117
+ var _el$21 = web.getNextElement(_tmpl$7);
118
+ _el$21.$$input = (e) => props.onChange(e.currentTarget.value);
119
+ web.effect((_p$) => {
120
+ var _v$12 = fieldId(), _v$13 = props.field.type, _v$14 = props.field.name, _v$15 = props.field.placeholder, _v$16 = props.disabled, _v$17 = props.field.required, _v$18 = props.field.minLength, _v$19 = props.field.maxLength, _v$20 = props.field.pattern, _v$21 = !!props.error, _v$22 = props.error ? errorId() : void 0, _v$23 = baseInputClass();
121
+ _v$12 !== _p$.e && web.setAttribute(_el$21, "id", _p$.e = _v$12);
122
+ _v$13 !== _p$.t && web.setAttribute(_el$21, "type", _p$.t = _v$13);
123
+ _v$14 !== _p$.a && web.setAttribute(_el$21, "name", _p$.a = _v$14);
124
+ _v$15 !== _p$.o && web.setAttribute(_el$21, "placeholder", _p$.o = _v$15);
125
+ _v$16 !== _p$.i && web.setProperty(_el$21, "disabled", _p$.i = _v$16);
126
+ _v$17 !== _p$.n && web.setProperty(_el$21, "required", _p$.n = _v$17);
127
+ _v$18 !== _p$.s && web.setAttribute(_el$21, "minlength", _p$.s = _v$18);
128
+ _v$19 !== _p$.h && web.setAttribute(_el$21, "maxlength", _p$.h = _v$19);
129
+ _v$20 !== _p$.r && web.setAttribute(_el$21, "pattern", _p$.r = _v$20);
130
+ _v$21 !== _p$.d && web.setAttribute(_el$21, "aria-invalid", _p$.d = _v$21);
131
+ _v$22 !== _p$.l && web.setAttribute(_el$21, "aria-describedby", _p$.l = _v$22);
132
+ _v$23 !== _p$.u && web.className(_el$21, _p$.u = _v$23);
133
+ return _p$;
134
+ }, {
135
+ e: void 0,
136
+ t: void 0,
137
+ a: void 0,
138
+ o: void 0,
139
+ i: void 0,
140
+ n: void 0,
141
+ s: void 0,
142
+ h: void 0,
143
+ r: void 0,
144
+ d: void 0,
145
+ l: void 0,
146
+ u: void 0
147
+ });
148
+ web.effect(() => web.setProperty(_el$21, "value", props.value || ""));
149
+ web.runHydrationEvents();
150
+ return _el$21;
151
+ })()
152
+ );
153
+ },
154
+ get children() {
155
+ var _el$9 = web.getNextElement(_tmpl$3), _el$1 = _el$9.firstChild, [_el$10, _co$3] = web.getNextMarker(_el$1.nextSibling), _el$0 = _el$10.nextSibling, _el$11 = _el$0.nextSibling, [_el$12, _co$4] = web.getNextMarker(_el$11.nextSibling);
156
+ web.insert(_el$9, web.createComponent(solidJs.Show, {
157
+ get when() {
158
+ return autocomplete.resultType() === "completion";
159
+ },
160
+ get children() {
161
+ return web.createComponent(GhostText.GhostText, {
162
+ get inputValue() {
163
+ return localValue();
164
+ },
165
+ get ghostText() {
166
+ return autocomplete.ghostText();
167
+ },
168
+ get visible() {
169
+ return autocomplete.isOpen();
170
+ },
171
+ get hintText() {
172
+ return autocomplete.ghostText() ? "Tab to accept" : void 0;
173
+ },
174
+ get isLoading() {
175
+ return autocomplete.isLoading();
176
+ }
177
+ });
178
+ }
179
+ }), _el$10, _co$3);
180
+ _el$0.addEventListener("focus", () => {
181
+ var _a2;
182
+ if (localValue().length >= (((_a2 = props.field.autocomplete) == null ? void 0 : _a2.minChars) || 1)) {
183
+ autocomplete.open();
184
+ }
185
+ });
186
+ _el$0.addEventListener("blur", () => {
187
+ setTimeout(() => autocomplete.dismiss(), 150);
188
+ });
189
+ _el$0.$$keydown = handleKeyDown;
190
+ _el$0.$$input = (e) => handleInput(e.currentTarget.value);
191
+ web.insert(_el$9, web.createComponent(solidJs.Show, {
192
+ get when() {
193
+ return autocomplete.resultType() === "options";
194
+ },
195
+ get children() {
196
+ return web.createComponent(AutocompleteDropdown.AutocompleteDropdown, {
197
+ get options() {
198
+ return autocomplete.options();
199
+ },
200
+ get selectedIndex() {
201
+ return autocomplete.selectedIndex();
202
+ },
203
+ get isOpen() {
204
+ return autocomplete.isOpen();
205
+ },
206
+ get isLoading() {
207
+ return autocomplete.isLoading();
208
+ },
209
+ onSelect: (option) => {
210
+ handleInput(option.value);
211
+ autocomplete.dismiss();
212
+ },
213
+ onHover: (_index) => {
214
+ },
215
+ get highlightMatch() {
216
+ return localValue();
217
+ },
218
+ get loadingMessage() {
219
+ var _a2;
220
+ return (_a2 = props.field.autocomplete) == null ? void 0 : _a2.loadingPlaceholder;
221
+ }
222
+ });
223
+ }
224
+ }), _el$12, _co$4);
225
+ web.effect((_p$) => {
226
+ var _v$ = fieldId(), _v$2 = props.field.type, _v$3 = props.field.name, _v$4 = props.field.placeholder, _v$5 = props.disabled, _v$6 = props.field.required, _v$7 = props.field.minLength, _v$8 = props.field.maxLength, _v$9 = props.field.pattern, _v$0 = !!props.error, _v$1 = props.error ? errorId() : void 0, _v$10 = autocomplete.isOpen(), _v$11 = `${baseInputClass()} ${autocomplete.resultType() === "completion" ? "bg-transparent" : ""}`;
227
+ _v$ !== _p$.e && web.setAttribute(_el$0, "id", _p$.e = _v$);
228
+ _v$2 !== _p$.t && web.setAttribute(_el$0, "type", _p$.t = _v$2);
229
+ _v$3 !== _p$.a && web.setAttribute(_el$0, "name", _p$.a = _v$3);
230
+ _v$4 !== _p$.o && web.setAttribute(_el$0, "placeholder", _p$.o = _v$4);
231
+ _v$5 !== _p$.i && web.setProperty(_el$0, "disabled", _p$.i = _v$5);
232
+ _v$6 !== _p$.n && web.setProperty(_el$0, "required", _p$.n = _v$6);
233
+ _v$7 !== _p$.s && web.setAttribute(_el$0, "minlength", _p$.s = _v$7);
234
+ _v$8 !== _p$.h && web.setAttribute(_el$0, "maxlength", _p$.h = _v$8);
235
+ _v$9 !== _p$.r && web.setAttribute(_el$0, "pattern", _p$.r = _v$9);
236
+ _v$0 !== _p$.d && web.setAttribute(_el$0, "aria-invalid", _p$.d = _v$0);
237
+ _v$1 !== _p$.l && web.setAttribute(_el$0, "aria-describedby", _p$.l = _v$1);
238
+ _v$10 !== _p$.u && web.setAttribute(_el$0, "aria-expanded", _p$.u = _v$10);
239
+ _v$11 !== _p$.c && web.className(_el$0, _p$.c = _v$11);
240
+ return _p$;
241
+ }, {
242
+ e: void 0,
243
+ t: void 0,
244
+ a: void 0,
245
+ o: void 0,
246
+ i: void 0,
247
+ n: void 0,
248
+ s: void 0,
249
+ h: void 0,
250
+ r: void 0,
251
+ d: void 0,
252
+ l: void 0,
253
+ u: void 0,
254
+ c: void 0
255
+ });
256
+ web.effect(() => web.setProperty(_el$0, "value", localValue()));
257
+ web.runHydrationEvents();
258
+ return _el$9;
259
+ }
260
+ }));
261
+ web.insert(_el$, web.createComponent(solidJs.Show, {
262
+ get when() {
263
+ return web.memo(() => !!props.field.helpText)() && !props.error;
264
+ },
265
+ get children() {
266
+ var _el$13 = web.getNextElement(_tmpl$4);
267
+ web.insert(_el$13, () => props.field.helpText);
268
+ return _el$13;
269
+ }
270
+ }), _el$18, _co$6);
271
+ web.insert(_el$, web.createComponent(solidJs.Show, {
272
+ get when() {
273
+ return props.error;
274
+ },
275
+ get children() {
276
+ var _el$14 = web.getNextElement(_tmpl$5);
277
+ web.insert(_el$14, () => props.error);
278
+ web.effect(() => web.setAttribute(_el$14, "id", errorId()));
279
+ return _el$14;
280
+ }
281
+ }), _el$20, _co$7);
282
+ return _el$;
283
+ }
284
+ });
285
+ };
286
+ web.delegateEvents(["input", "keydown"]);
287
+ exports.AutocompleteFormField = AutocompleteFormField;
288
+ exports.default = AutocompleteFormField;
289
+ //# sourceMappingURL=AutocompleteFormField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutocompleteFormField.cjs","sources":["../../src/components/AutocompleteFormField.tsx"],"sourcesContent":["/**\n * AutocompleteFormField Component\n * Form field with integrated autocomplete support\n *\n * Sprint Autocomplete Feature\n */\n\nimport { Component, Show, createSignal, createMemo, Accessor, createEffect, on } from 'solid-js'\nimport type { FormFieldParams, FieldAutocompleteConfig, AutocompleteContext } from '../types'\nimport { useConditionalField } from '../hooks/useConditionalField'\nimport { useAutocomplete } from '../hooks/useAutocomplete'\nimport { useAutocompleteContextSafe } from '../context/AutocompleteContext'\nimport { GhostText } from './GhostText'\nimport { AutocompleteDropdown } from './AutocompleteDropdown'\n\n/**\n * Extended FormFieldParams with autocomplete config\n */\nexport interface AutocompleteFormFieldParams extends FormFieldParams {\n /**\n * Autocomplete configuration for this field\n */\n autocomplete?: FieldAutocompleteConfig\n}\n\n/**\n * Props for AutocompleteFormField\n */\nexport interface AutocompleteFormFieldProps {\n /**\n * Field configuration\n */\n field: AutocompleteFormFieldParams\n\n /**\n * Current field value\n */\n value: any\n\n /**\n * Error message\n */\n error?: string\n\n /**\n * Change handler\n */\n onChange: (value: any) => void\n\n /**\n * Whether field is disabled\n */\n disabled?: boolean\n\n /**\n * Form data accessor for conditional visibility and context\n */\n formData?: Accessor<Record<string, any>>\n}\n\n/**\n * AutocompleteFormField Component\n */\nexport const AutocompleteFormField: Component<AutocompleteFormFieldProps> = (props) => {\n // Check if autocomplete context is available\n const autocompleteCtx = useAutocompleteContextSafe()\n\n // Conditional visibility\n const { isVisible } = useConditionalField({\n condition: props.field.showWhen,\n formData: props.formData || (() => ({}))\n })\n\n // Local input value for autocomplete (may differ during suggestion)\n const [localValue, setLocalValue] = createSignal(String(props.value || ''))\n\n // Sync external value changes\n createEffect(on(() => props.value, (newValue) => {\n setLocalValue(String(newValue || ''))\n }))\n\n // Build autocomplete context\n const autocompleteContext = createMemo((): AutocompleteContext | undefined => {\n const formData = props.formData?.()\n const config = props.field.autocomplete\n\n if (!config?.contextFields?.length && !formData) {\n return { fieldName: props.field.name }\n }\n\n const contextData: Record<string, any> = {}\n if (config?.contextFields && formData) {\n config.contextFields.forEach(field => {\n if (formData[field] !== undefined) {\n contextData[field] = formData[field]\n }\n })\n }\n\n return {\n fieldName: props.field.name,\n formData: contextData\n }\n })\n\n // Initialize autocomplete hook\n const autocomplete = useAutocomplete({\n inputValue: localValue,\n pluginId: props.field.autocomplete?.plugin,\n fieldConfig: props.field.autocomplete,\n context: () => autocompleteContext() || { fieldName: props.field.name },\n enabled: !!(props.field.autocomplete?.enabled && autocompleteCtx),\n minChars: props.field.autocomplete?.minChars,\n debounceMs: props.field.autocomplete?.debounceMs,\n onInputChange: (value) => {\n setLocalValue(value)\n props.onChange(value)\n }\n })\n\n // Handle input change\n const handleInput = (value: string) => {\n setLocalValue(value)\n props.onChange(value)\n }\n\n // Handle key down\n const handleKeyDown = (e: KeyboardEvent) => {\n if (autocomplete.handleKeyDown(e)) {\n return\n }\n }\n\n // Base input class\n const baseInputClass = () => `\n w-full px-3 py-2 border rounded-md\n focus:ring-2 focus:ring-blue-500 focus:border-blue-500\n disabled:bg-gray-100 disabled:cursor-not-allowed\n ${props.error\n ? 'border-red-500 focus:ring-red-500'\n : 'border-gray-300 dark:border-gray-600'}\n dark:bg-gray-700 dark:text-white\n `\n\n const fieldId = () => `field-${props.field.name}`\n const errorId = () => `${props.field.name}-error`\n\n // Check if field supports autocomplete (text-based fields only)\n const supportsAutocomplete = createMemo(() =>\n ['text', 'email'].includes(props.field.type)\n )\n\n // Whether to show autocomplete features\n const showAutocomplete = createMemo(() =>\n supportsAutocomplete() &&\n props.field.autocomplete?.enabled &&\n autocompleteCtx !== undefined\n )\n\n return (\n <Show when={isVisible()}>\n <div class=\"space-y-1\">\n {/* Label */}\n <Show when={props.field.label}>\n <label\n for={fieldId()}\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {props.field.label}\n <Show when={props.field.required}>\n <span class=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </Show>\n </label>\n </Show>\n\n {/* Input with autocomplete */}\n <div class=\"relative\">\n <Show\n when={showAutocomplete()}\n fallback={\n /* Standard input without autocomplete */\n <input\n id={fieldId()}\n type={props.field.type}\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n pattern={props.field.pattern}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n }\n >\n {/* Autocomplete-enabled input */}\n <div class=\"relative\">\n {/* Ghost text overlay (for completion type) */}\n <Show when={autocomplete.resultType() === 'completion'}>\n <GhostText\n inputValue={localValue()}\n ghostText={autocomplete.ghostText()}\n visible={autocomplete.isOpen()}\n hintText={autocomplete.ghostText() ? 'Tab to accept' : undefined}\n isLoading={autocomplete.isLoading()}\n />\n </Show>\n\n <input\n id={fieldId()}\n type={props.field.type}\n name={props.field.name}\n value={localValue()}\n onInput={(e) => handleInput(e.currentTarget.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n // Delay dismiss to allow click on dropdown\n setTimeout(() => autocomplete.dismiss(), 150)\n }}\n onFocus={() => {\n if (localValue().length >= (props.field.autocomplete?.minChars || 1)) {\n autocomplete.open()\n }\n }}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n pattern={props.field.pattern}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n aria-autocomplete=\"list\"\n aria-expanded={autocomplete.isOpen()}\n aria-haspopup=\"listbox\"\n class={`${baseInputClass()} ${autocomplete.resultType() === 'completion' ? 'bg-transparent' : ''}`}\n style={{\n position: 'relative',\n 'z-index': '2'\n }}\n autocomplete=\"off\"\n />\n\n {/* Dropdown (for options type) */}\n <Show when={autocomplete.resultType() === 'options'}>\n <AutocompleteDropdown\n options={autocomplete.options()}\n selectedIndex={autocomplete.selectedIndex()}\n isOpen={autocomplete.isOpen()}\n isLoading={autocomplete.isLoading()}\n onSelect={(option) => {\n handleInput(option.value)\n autocomplete.dismiss()\n }}\n onHover={(_index) => {\n // Could add hover selection here\n }}\n highlightMatch={localValue()}\n loadingMessage={props.field.autocomplete?.loadingPlaceholder}\n />\n </Show>\n </div>\n </Show>\n </div>\n\n {/* Help text */}\n <Show when={props.field.helpText && !props.error}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400\">\n {props.field.helpText}\n </p>\n </Show>\n\n {/* Error message */}\n <Show when={props.error}>\n <p id={errorId()} role=\"alert\" class=\"text-xs text-red-600 dark:text-red-400\">\n {props.error}\n </p>\n </Show>\n </div>\n </Show>\n )\n}\n\nexport default AutocompleteFormField\n"],"names":["AutocompleteFormField","props","autocompleteCtx","useAutocompleteContextSafe","isVisible","useConditionalField","condition","field","showWhen","formData","localValue","setLocalValue","createSignal","String","value","createEffect","on","newValue","autocompleteContext","createMemo","config","autocomplete","contextFields","length","fieldName","name","contextData","forEach","undefined","useAutocomplete","inputValue","pluginId","plugin","fieldConfig","context","enabled","minChars","debounceMs","onInputChange","onChange","handleInput","handleKeyDown","e","baseInputClass","error","fieldId","errorId","supportsAutocomplete","includes","type","showAutocomplete","_$createComponent","Show","when","children","_el$","_$getNextElement","_tmpl$6","_el$15","firstChild","_el$16","_co$5","_$getNextMarker","nextSibling","_el$8","_el$17","_el$18","_co$6","_el$19","_el$20","_co$7","_$insert","label","_el$2","_tmpl$2","_el$4","_el$5","_co$","_el$6","_el$7","_co$2","required","_tmpl$","_$effect","_$setAttribute","fallback","_el$21","_tmpl$7","$$input","currentTarget","_p$","_v$12","_v$13","_v$14","_v$15","placeholder","_v$16","disabled","_v$17","_v$18","minLength","_v$19","maxLength","_v$20","pattern","_v$21","_v$22","_v$23","t","a","o","i","_$setProperty","n","s","h","r","d","l","u","_$className","_$runHydrationEvents","_el$9","_tmpl$3","_el$1","_el$10","_co$3","_el$0","_el$11","_el$12","_co$4","resultType","GhostText","ghostText","visible","isOpen","hintText","isLoading","addEventListener","open","setTimeout","dismiss","$$keydown","AutocompleteDropdown","options","selectedIndex","onSelect","option","onHover","_index","highlightMatch","loadingMessage","loadingPlaceholder","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","c","_$memo","helpText","_el$13","_tmpl$4","_el$14","_tmpl$5","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * AutocompleteFormField Component
3
+ * Form field with integrated autocomplete support
4
+ *
5
+ * Sprint Autocomplete Feature
6
+ */
7
+ import { Component, Accessor } from 'solid-js';
8
+ import type { FormFieldParams, FieldAutocompleteConfig } from '../types';
9
+ /**
10
+ * Extended FormFieldParams with autocomplete config
11
+ */
12
+ export interface AutocompleteFormFieldParams extends FormFieldParams {
13
+ /**
14
+ * Autocomplete configuration for this field
15
+ */
16
+ autocomplete?: FieldAutocompleteConfig;
17
+ }
18
+ /**
19
+ * Props for AutocompleteFormField
20
+ */
21
+ export interface AutocompleteFormFieldProps {
22
+ /**
23
+ * Field configuration
24
+ */
25
+ field: AutocompleteFormFieldParams;
26
+ /**
27
+ * Current field value
28
+ */
29
+ value: any;
30
+ /**
31
+ * Error message
32
+ */
33
+ error?: string;
34
+ /**
35
+ * Change handler
36
+ */
37
+ onChange: (value: any) => void;
38
+ /**
39
+ * Whether field is disabled
40
+ */
41
+ disabled?: boolean;
42
+ /**
43
+ * Form data accessor for conditional visibility and context
44
+ */
45
+ formData?: Accessor<Record<string, any>>;
46
+ }
47
+ /**
48
+ * AutocompleteFormField Component
49
+ */
50
+ export declare const AutocompleteFormField: Component<AutocompleteFormFieldProps>;
51
+ export default AutocompleteFormField;
52
+ //# sourceMappingURL=AutocompleteFormField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutocompleteFormField.d.ts","sourceRoot":"","sources":["../../src/components/AutocompleteFormField.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAkC,QAAQ,EAAoB,MAAM,UAAU,CAAA;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAuB,MAAM,UAAU,CAAA;AAO7F;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,eAAe;IAClE;;OAEG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAA;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,KAAK,EAAE,2BAA2B,CAAA;IAElC;;OAEG;IACH,KAAK,EAAE,GAAG,CAAA;IAEV;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IAE9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,CAAC,0BAA0B,CA8NvE,CAAA;AAED,eAAe,qBAAqB,CAAA"}