@seed-ship/mcp-ui-solid 2.6.3 → 2.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ChatPrompt.cjs +1 -1
- package/dist/components/ChatPrompt.cjs.map +1 -1
- package/dist/components/ChatPrompt.js +1 -1
- package/dist/components/ChatPrompt.js.map +1 -1
- package/dist/components/FormFieldRenderer.cjs +1 -1
- package/dist/components/FormFieldRenderer.cjs.map +1 -1
- package/dist/components/FormFieldRenderer.js +1 -1
- package/dist/components/FormFieldRenderer.js.map +1 -1
- package/package.json +1 -1
- package/src/components/ChatPrompt.tsx +1 -1
- package/src/components/FormFieldRenderer.tsx +7 -4
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const web = require("solid-js/web");
|
|
4
4
|
const solidJs = require("solid-js");
|
|
5
5
|
const FormFieldRenderer = require("./FormFieldRenderer.cjs");
|
|
6
|
-
var _tmpl$ = /* @__PURE__ */ web.template(`<div class="w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-
|
|
6
|
+
var _tmpl$ = /* @__PURE__ */ web.template(`<div class="w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-visible"role=dialog style="animation:chat-prompt-slide-up 0.2s ease-out"><div class="flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700"><p class="text-sm font-medium text-gray-900 dark:text-white"></p><button></button></div><div class="px-4 py-3"></div><style>
|
|
7
7
|
@keyframes chat-prompt-slide-up {
|
|
8
8
|
from { opacity: 0; transform: translateY(8px); }
|
|
9
9
|
to { opacity: 1; transform: translateY(0); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPrompt.cjs","sources":["../../src/components/ChatPrompt.tsx"],"sourcesContent":["/**\n * ChatPrompt — Ephemeral structured interaction above chat input\n * v2.4.0: choice, confirm, form subtypes\n *\n * @experimental — This component may change without major bump until v2.5.0.\n *\n * Renders above the chat input. User responds → Promise resolves → prompt disappears.\n * Supports AbortSignal for cleanup on navigation (C4).\n */\n\nimport { Component, Show, For, createSignal, onCleanup, Switch, Match } from 'solid-js'\nimport type {\n ChatPromptConfig,\n ChatPromptResponse,\n ChoicePromptConfig,\n ConfirmPromptConfig,\n FormPromptConfig,\n} from '../types/chat-bus'\nimport { FormFieldRenderer } from './FormFieldRenderer'\nimport type { FormFieldParams } from '../types'\n\nexport interface ChatPromptProps {\n /** Prompt configuration */\n config: ChatPromptConfig\n /** Called when user responds */\n onSubmit: (response: ChatPromptResponse) => void\n /** Called when user dismisses (e.g. \"send as-is\") */\n onDismiss?: () => void\n /** Label for the dismiss button (replaces X icon). Default: shows X icon. */\n dismissLabel?: string\n}\n\n/**\n * @experimental\n * Ephemeral interaction component — choice buttons, confirmation dialog, or quick form.\n * Designed to sit between the chat messages and the input area.\n *\n * @example\n * <ChatPrompt\n * config={{ type: 'choice', title: 'Format?', config: { options: [...] } }}\n * onSubmit={(r) => bus.events.emit('onChatPromptResponse', { streamKey, response: r })}\n * onDismiss={() => setActivePrompt(null)}\n * />\n */\nexport const ChatPrompt: Component<ChatPromptProps> = (props) => {\n // F1: Guard against null/undefined config (e.g. after dismiss clears state)\n if (!props.config) return null\n\n return (\n <div\n class=\"w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-hidden\"\n style={{ animation: 'chat-prompt-slide-up 0.2s ease-out' }}\n role=\"dialog\"\n aria-label={props.config.title}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700\">\n <p class=\"text-sm font-medium text-gray-900 dark:text-white\">{props.config.title}</p>\n <button\n onClick={() => {\n props.onDismiss?.()\n props.onSubmit({ type: props.config.type, value: '', label: '', dismissed: true })\n }}\n class={props.dismissLabel\n ? 'px-3 py-1 text-xs font-medium text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20 rounded-lg transition-colors'\n : 'p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors'\n }\n aria-label={props.dismissLabel || 'Dismiss'}\n >\n <Show when={props.dismissLabel} fallback={\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n }>\n {props.dismissLabel}\n </Show>\n </button>\n </div>\n\n {/* Body — type-specific */}\n <div class=\"px-4 py-3\">\n <Switch>\n <Match when={props.config.type === 'choice'}>\n <ChoiceBody\n config={props.config.config as ChoicePromptConfig}\n onSelect={(value, label) => props.onSubmit({ type: 'choice', value, label })}\n />\n </Match>\n <Match when={props.config.type === 'confirm'}>\n <ConfirmBody\n config={props.config.config as ConfirmPromptConfig}\n onConfirm={() => props.onSubmit({ type: 'confirm', value: 'confirmed', label: (props.config.config as ConfirmPromptConfig).confirmLabel || 'Confirmed' })}\n onCancel={() => {\n props.onDismiss?.()\n props.onSubmit({ type: 'confirm', value: 'cancelled', label: (props.config.config as ConfirmPromptConfig).cancelLabel || 'Cancelled', dismissed: true })\n }}\n />\n </Match>\n <Match when={props.config.type === 'form'}>\n <FormBody\n config={props.config.config as FormPromptConfig}\n onSubmit={(data, label) => props.onSubmit({ type: 'form', value: data, label })}\n />\n </Match>\n </Switch>\n </div>\n\n <style>{`\n @keyframes chat-prompt-slide-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n\n// ─── Choice ──────────────────────────────────────────────────\n\nconst ChoiceBody: Component<{\n config: ChoicePromptConfig\n onSelect: (value: string, label: string) => void\n}> = (props) => {\n const layoutClass = () => {\n switch (props.config.layout) {\n case 'vertical': return 'flex flex-col gap-2'\n case 'grid': return 'grid grid-cols-2 gap-2'\n default: return 'flex flex-wrap gap-2'\n }\n }\n\n return (\n <div class={layoutClass()}>\n <For each={props.config.options}>\n {(option) => (\n <button\n onClick={() => props.onSelect(option.value, option.label)}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white hover:bg-blue-50 hover:border-blue-300 dark:hover:bg-blue-900/30 dark:hover:border-blue-600 transition-colors text-left\"\n >\n <Show when={option.icon}>\n <span class=\"mr-2\">{option.icon}</span>\n </Show>\n {option.label}\n <Show when={option.description}>\n <span class=\"block text-xs text-gray-500 dark:text-gray-400 mt-0.5 font-normal\">{option.description}</span>\n </Show>\n </button>\n )}\n </For>\n </div>\n )\n}\n\n// ─── Confirm ─────────────────────────────────────────────────\n\nconst ConfirmBody: Component<{\n config: ConfirmPromptConfig\n onConfirm: () => void\n onCancel: () => void\n}> = (props) => {\n const isDanger = () => props.config.variant === 'danger'\n\n return (\n <div>\n <Show when={props.config.message}>\n <p class=\"text-sm text-gray-600 dark:text-gray-400 mb-3\">{props.config.message}</p>\n </Show>\n <div class=\"flex gap-2 justify-end\">\n <button\n onClick={props.onCancel}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n {props.config.cancelLabel || 'Cancel'}\n </button>\n <button\n onClick={props.onConfirm}\n class={`px-4 py-2 text-sm font-medium rounded-lg text-white transition-colors ${\n isDanger()\n ? 'bg-red-600 hover:bg-red-700'\n : 'bg-blue-600 hover:bg-blue-700'\n }`}\n >\n {props.config.confirmLabel || 'Confirm'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── Form (delegates to FormFieldRenderer for all field types) ───\n\nconst FormBody: Component<{\n config: FormPromptConfig\n onSubmit: (data: Record<string, unknown>, label: string) => void\n}> = (props) => {\n const [formData, setFormData] = createSignal<Record<string, any>>({})\n\n const updateField = (name: string, value: any) => {\n setFormData((prev) => ({ ...prev, [name]: value }))\n }\n\n const handleSubmit = (e: Event) => {\n e.preventDefault()\n const data = formData()\n const label = Object.entries(data)\n .filter(([, v]) => v !== undefined && v !== '' && !(Array.isArray(v) && v.length === 0))\n .map(([k, v]) => `${k}: ${Array.isArray(v) ? v.join(', ') : v}`)\n .join(', ')\n props.onSubmit(data, label || 'Form submitted')\n }\n\n const isValid = () => {\n const data = formData()\n return (props.config.fields || [])\n .filter((f) => f.required)\n .every((f) => {\n const val = data[f.name]\n if (Array.isArray(val)) return val.length > 0\n if (typeof val === 'boolean') return true\n return val !== undefined && val !== ''\n })\n }\n\n return (\n <form onSubmit={handleSubmit} class=\"flex flex-col gap-3\">\n <For each={props.config.fields}>\n {(field) => (\n <FormFieldRenderer\n field={field as FormFieldParams}\n value={formData()[field.name]}\n onChange={(val) => updateField(field.name, val)}\n formData={formData}\n />\n )}\n </For>\n <div class=\"flex justify-end\">\n <button\n type=\"submit\"\n disabled={!isValid()}\n class=\"px-4 py-2 text-sm font-medium rounded-lg text-white bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed transition-colors\"\n >\n {props.config.submitLabel || 'Submit'}\n </button>\n </div>\n </form>\n )\n}\n"],"names":["ChatPrompt","props","config","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_$insert","title","$$click","onDismiss","onSubmit","type","value","label","dismissed","_$createComponent","Show","when","dismissLabel","fallback","_tmpl$2","children","Switch","Match","ChoiceBody","onSelect","ConfirmBody","onConfirm","confirmLabel","onCancel","cancelLabel","FormBody","data","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","undefined","_$runHydrationEvents","layoutClass","layout","_el$7","_tmpl$3","For","each","options","option","_el$8","_tmpl$6","_el$1","_el$10","_co$","_$getNextMarker","_el$11","_el$12","_co$2","_el$13","_el$14","_co$3","icon","_el$9","_tmpl$4","description","_el$0","_tmpl$5","isDanger","variant","_el$15","_tmpl$8","_el$20","_el$21","_co$4","_el$17","_el$18","_el$19","message","_el$16","_tmpl$7","_$addEventListener","formData","setFormData","createSignal","updateField","name","prev","handleSubmit","preventDefault","Object","entries","filter","v","Array","isArray","length","map","k","join","isValid","fields","f","required","every","val","_el$22","_tmpl$9","_el$25","_el$26","_co$5","_el$23","_el$24","addEventListener","field","FormFieldRenderer","onChange","submitLabel","_$setProperty","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatPrompt.cjs","sources":["../../src/components/ChatPrompt.tsx"],"sourcesContent":["/**\n * ChatPrompt — Ephemeral structured interaction above chat input\n * v2.4.0: choice, confirm, form subtypes\n *\n * @experimental — This component may change without major bump until v2.5.0.\n *\n * Renders above the chat input. User responds → Promise resolves → prompt disappears.\n * Supports AbortSignal for cleanup on navigation (C4).\n */\n\nimport { Component, Show, For, createSignal, onCleanup, Switch, Match } from 'solid-js'\nimport type {\n ChatPromptConfig,\n ChatPromptResponse,\n ChoicePromptConfig,\n ConfirmPromptConfig,\n FormPromptConfig,\n} from '../types/chat-bus'\nimport { FormFieldRenderer } from './FormFieldRenderer'\nimport type { FormFieldParams } from '../types'\n\nexport interface ChatPromptProps {\n /** Prompt configuration */\n config: ChatPromptConfig\n /** Called when user responds */\n onSubmit: (response: ChatPromptResponse) => void\n /** Called when user dismisses (e.g. \"send as-is\") */\n onDismiss?: () => void\n /** Label for the dismiss button (replaces X icon). Default: shows X icon. */\n dismissLabel?: string\n}\n\n/**\n * @experimental\n * Ephemeral interaction component — choice buttons, confirmation dialog, or quick form.\n * Designed to sit between the chat messages and the input area.\n *\n * @example\n * <ChatPrompt\n * config={{ type: 'choice', title: 'Format?', config: { options: [...] } }}\n * onSubmit={(r) => bus.events.emit('onChatPromptResponse', { streamKey, response: r })}\n * onDismiss={() => setActivePrompt(null)}\n * />\n */\nexport const ChatPrompt: Component<ChatPromptProps> = (props) => {\n // F1: Guard against null/undefined config (e.g. after dismiss clears state)\n if (!props.config) return null\n\n return (\n <div\n class=\"w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-visible\"\n style={{ animation: 'chat-prompt-slide-up 0.2s ease-out' }}\n role=\"dialog\"\n aria-label={props.config.title}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700\">\n <p class=\"text-sm font-medium text-gray-900 dark:text-white\">{props.config.title}</p>\n <button\n onClick={() => {\n props.onDismiss?.()\n props.onSubmit({ type: props.config.type, value: '', label: '', dismissed: true })\n }}\n class={props.dismissLabel\n ? 'px-3 py-1 text-xs font-medium text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20 rounded-lg transition-colors'\n : 'p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors'\n }\n aria-label={props.dismissLabel || 'Dismiss'}\n >\n <Show when={props.dismissLabel} fallback={\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n }>\n {props.dismissLabel}\n </Show>\n </button>\n </div>\n\n {/* Body — type-specific */}\n <div class=\"px-4 py-3\">\n <Switch>\n <Match when={props.config.type === 'choice'}>\n <ChoiceBody\n config={props.config.config as ChoicePromptConfig}\n onSelect={(value, label) => props.onSubmit({ type: 'choice', value, label })}\n />\n </Match>\n <Match when={props.config.type === 'confirm'}>\n <ConfirmBody\n config={props.config.config as ConfirmPromptConfig}\n onConfirm={() => props.onSubmit({ type: 'confirm', value: 'confirmed', label: (props.config.config as ConfirmPromptConfig).confirmLabel || 'Confirmed' })}\n onCancel={() => {\n props.onDismiss?.()\n props.onSubmit({ type: 'confirm', value: 'cancelled', label: (props.config.config as ConfirmPromptConfig).cancelLabel || 'Cancelled', dismissed: true })\n }}\n />\n </Match>\n <Match when={props.config.type === 'form'}>\n <FormBody\n config={props.config.config as FormPromptConfig}\n onSubmit={(data, label) => props.onSubmit({ type: 'form', value: data, label })}\n />\n </Match>\n </Switch>\n </div>\n\n <style>{`\n @keyframes chat-prompt-slide-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n\n// ─── Choice ──────────────────────────────────────────────────\n\nconst ChoiceBody: Component<{\n config: ChoicePromptConfig\n onSelect: (value: string, label: string) => void\n}> = (props) => {\n const layoutClass = () => {\n switch (props.config.layout) {\n case 'vertical': return 'flex flex-col gap-2'\n case 'grid': return 'grid grid-cols-2 gap-2'\n default: return 'flex flex-wrap gap-2'\n }\n }\n\n return (\n <div class={layoutClass()}>\n <For each={props.config.options}>\n {(option) => (\n <button\n onClick={() => props.onSelect(option.value, option.label)}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white hover:bg-blue-50 hover:border-blue-300 dark:hover:bg-blue-900/30 dark:hover:border-blue-600 transition-colors text-left\"\n >\n <Show when={option.icon}>\n <span class=\"mr-2\">{option.icon}</span>\n </Show>\n {option.label}\n <Show when={option.description}>\n <span class=\"block text-xs text-gray-500 dark:text-gray-400 mt-0.5 font-normal\">{option.description}</span>\n </Show>\n </button>\n )}\n </For>\n </div>\n )\n}\n\n// ─── Confirm ─────────────────────────────────────────────────\n\nconst ConfirmBody: Component<{\n config: ConfirmPromptConfig\n onConfirm: () => void\n onCancel: () => void\n}> = (props) => {\n const isDanger = () => props.config.variant === 'danger'\n\n return (\n <div>\n <Show when={props.config.message}>\n <p class=\"text-sm text-gray-600 dark:text-gray-400 mb-3\">{props.config.message}</p>\n </Show>\n <div class=\"flex gap-2 justify-end\">\n <button\n onClick={props.onCancel}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n {props.config.cancelLabel || 'Cancel'}\n </button>\n <button\n onClick={props.onConfirm}\n class={`px-4 py-2 text-sm font-medium rounded-lg text-white transition-colors ${\n isDanger()\n ? 'bg-red-600 hover:bg-red-700'\n : 'bg-blue-600 hover:bg-blue-700'\n }`}\n >\n {props.config.confirmLabel || 'Confirm'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── Form (delegates to FormFieldRenderer for all field types) ───\n\nconst FormBody: Component<{\n config: FormPromptConfig\n onSubmit: (data: Record<string, unknown>, label: string) => void\n}> = (props) => {\n const [formData, setFormData] = createSignal<Record<string, any>>({})\n\n const updateField = (name: string, value: any) => {\n setFormData((prev) => ({ ...prev, [name]: value }))\n }\n\n const handleSubmit = (e: Event) => {\n e.preventDefault()\n const data = formData()\n const label = Object.entries(data)\n .filter(([, v]) => v !== undefined && v !== '' && !(Array.isArray(v) && v.length === 0))\n .map(([k, v]) => `${k}: ${Array.isArray(v) ? v.join(', ') : v}`)\n .join(', ')\n props.onSubmit(data, label || 'Form submitted')\n }\n\n const isValid = () => {\n const data = formData()\n return (props.config.fields || [])\n .filter((f) => f.required)\n .every((f) => {\n const val = data[f.name]\n if (Array.isArray(val)) return val.length > 0\n if (typeof val === 'boolean') return true\n return val !== undefined && val !== ''\n })\n }\n\n return (\n <form onSubmit={handleSubmit} class=\"flex flex-col gap-3\">\n <For each={props.config.fields}>\n {(field) => (\n <FormFieldRenderer\n field={field as FormFieldParams}\n value={formData()[field.name]}\n onChange={(val) => updateField(field.name, val)}\n formData={formData}\n />\n )}\n </For>\n <div class=\"flex justify-end\">\n <button\n type=\"submit\"\n disabled={!isValid()}\n class=\"px-4 py-2 text-sm font-medium rounded-lg text-white bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed transition-colors\"\n >\n {props.config.submitLabel || 'Submit'}\n </button>\n </div>\n </form>\n )\n}\n"],"names":["ChatPrompt","props","config","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_$insert","title","$$click","onDismiss","onSubmit","type","value","label","dismissed","_$createComponent","Show","when","dismissLabel","fallback","_tmpl$2","children","Switch","Match","ChoiceBody","onSelect","ConfirmBody","onConfirm","confirmLabel","onCancel","cancelLabel","FormBody","data","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","undefined","_$runHydrationEvents","layoutClass","layout","_el$7","_tmpl$3","For","each","options","option","_el$8","_tmpl$6","_el$1","_el$10","_co$","_$getNextMarker","_el$11","_el$12","_co$2","_el$13","_el$14","_co$3","icon","_el$9","_tmpl$4","description","_el$0","_tmpl$5","isDanger","variant","_el$15","_tmpl$8","_el$20","_el$21","_co$4","_el$17","_el$18","_el$19","message","_el$16","_tmpl$7","_$addEventListener","formData","setFormData","createSignal","updateField","name","prev","handleSubmit","preventDefault","Object","entries","filter","v","Array","isArray","length","map","k","join","isValid","fields","f","required","every","val","_el$22","_tmpl$9","_el$25","_el$26","_co$5","_el$23","_el$24","addEventListener","field","FormFieldRenderer","onChange","submitLabel","_$setProperty","_$delegateEvents"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { delegateEvents, getNextElement, template, insert, createComponent, effect, setAttribute, className, runHydrationEvents, getNextMarker, addEventListener, setProperty } from "solid-js/web";
|
|
2
2
|
import { Show, Switch, Match, For, createSignal } from "solid-js";
|
|
3
3
|
import { FormFieldRenderer } from "./FormFieldRenderer.js";
|
|
4
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div class="w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-
|
|
4
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div class="w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-visible"role=dialog style="animation:chat-prompt-slide-up 0.2s ease-out"><div class="flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700"><p class="text-sm font-medium text-gray-900 dark:text-white"></p><button></button></div><div class="px-4 py-3"></div><style>
|
|
5
5
|
@keyframes chat-prompt-slide-up {
|
|
6
6
|
from { opacity: 0; transform: translateY(8px); }
|
|
7
7
|
to { opacity: 1; transform: translateY(0); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPrompt.js","sources":["../../src/components/ChatPrompt.tsx"],"sourcesContent":["/**\n * ChatPrompt — Ephemeral structured interaction above chat input\n * v2.4.0: choice, confirm, form subtypes\n *\n * @experimental — This component may change without major bump until v2.5.0.\n *\n * Renders above the chat input. User responds → Promise resolves → prompt disappears.\n * Supports AbortSignal for cleanup on navigation (C4).\n */\n\nimport { Component, Show, For, createSignal, onCleanup, Switch, Match } from 'solid-js'\nimport type {\n ChatPromptConfig,\n ChatPromptResponse,\n ChoicePromptConfig,\n ConfirmPromptConfig,\n FormPromptConfig,\n} from '../types/chat-bus'\nimport { FormFieldRenderer } from './FormFieldRenderer'\nimport type { FormFieldParams } from '../types'\n\nexport interface ChatPromptProps {\n /** Prompt configuration */\n config: ChatPromptConfig\n /** Called when user responds */\n onSubmit: (response: ChatPromptResponse) => void\n /** Called when user dismisses (e.g. \"send as-is\") */\n onDismiss?: () => void\n /** Label for the dismiss button (replaces X icon). Default: shows X icon. */\n dismissLabel?: string\n}\n\n/**\n * @experimental\n * Ephemeral interaction component — choice buttons, confirmation dialog, or quick form.\n * Designed to sit between the chat messages and the input area.\n *\n * @example\n * <ChatPrompt\n * config={{ type: 'choice', title: 'Format?', config: { options: [...] } }}\n * onSubmit={(r) => bus.events.emit('onChatPromptResponse', { streamKey, response: r })}\n * onDismiss={() => setActivePrompt(null)}\n * />\n */\nexport const ChatPrompt: Component<ChatPromptProps> = (props) => {\n // F1: Guard against null/undefined config (e.g. after dismiss clears state)\n if (!props.config) return null\n\n return (\n <div\n class=\"w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-hidden\"\n style={{ animation: 'chat-prompt-slide-up 0.2s ease-out' }}\n role=\"dialog\"\n aria-label={props.config.title}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700\">\n <p class=\"text-sm font-medium text-gray-900 dark:text-white\">{props.config.title}</p>\n <button\n onClick={() => {\n props.onDismiss?.()\n props.onSubmit({ type: props.config.type, value: '', label: '', dismissed: true })\n }}\n class={props.dismissLabel\n ? 'px-3 py-1 text-xs font-medium text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20 rounded-lg transition-colors'\n : 'p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors'\n }\n aria-label={props.dismissLabel || 'Dismiss'}\n >\n <Show when={props.dismissLabel} fallback={\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n }>\n {props.dismissLabel}\n </Show>\n </button>\n </div>\n\n {/* Body — type-specific */}\n <div class=\"px-4 py-3\">\n <Switch>\n <Match when={props.config.type === 'choice'}>\n <ChoiceBody\n config={props.config.config as ChoicePromptConfig}\n onSelect={(value, label) => props.onSubmit({ type: 'choice', value, label })}\n />\n </Match>\n <Match when={props.config.type === 'confirm'}>\n <ConfirmBody\n config={props.config.config as ConfirmPromptConfig}\n onConfirm={() => props.onSubmit({ type: 'confirm', value: 'confirmed', label: (props.config.config as ConfirmPromptConfig).confirmLabel || 'Confirmed' })}\n onCancel={() => {\n props.onDismiss?.()\n props.onSubmit({ type: 'confirm', value: 'cancelled', label: (props.config.config as ConfirmPromptConfig).cancelLabel || 'Cancelled', dismissed: true })\n }}\n />\n </Match>\n <Match when={props.config.type === 'form'}>\n <FormBody\n config={props.config.config as FormPromptConfig}\n onSubmit={(data, label) => props.onSubmit({ type: 'form', value: data, label })}\n />\n </Match>\n </Switch>\n </div>\n\n <style>{`\n @keyframes chat-prompt-slide-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n\n// ─── Choice ──────────────────────────────────────────────────\n\nconst ChoiceBody: Component<{\n config: ChoicePromptConfig\n onSelect: (value: string, label: string) => void\n}> = (props) => {\n const layoutClass = () => {\n switch (props.config.layout) {\n case 'vertical': return 'flex flex-col gap-2'\n case 'grid': return 'grid grid-cols-2 gap-2'\n default: return 'flex flex-wrap gap-2'\n }\n }\n\n return (\n <div class={layoutClass()}>\n <For each={props.config.options}>\n {(option) => (\n <button\n onClick={() => props.onSelect(option.value, option.label)}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white hover:bg-blue-50 hover:border-blue-300 dark:hover:bg-blue-900/30 dark:hover:border-blue-600 transition-colors text-left\"\n >\n <Show when={option.icon}>\n <span class=\"mr-2\">{option.icon}</span>\n </Show>\n {option.label}\n <Show when={option.description}>\n <span class=\"block text-xs text-gray-500 dark:text-gray-400 mt-0.5 font-normal\">{option.description}</span>\n </Show>\n </button>\n )}\n </For>\n </div>\n )\n}\n\n// ─── Confirm ─────────────────────────────────────────────────\n\nconst ConfirmBody: Component<{\n config: ConfirmPromptConfig\n onConfirm: () => void\n onCancel: () => void\n}> = (props) => {\n const isDanger = () => props.config.variant === 'danger'\n\n return (\n <div>\n <Show when={props.config.message}>\n <p class=\"text-sm text-gray-600 dark:text-gray-400 mb-3\">{props.config.message}</p>\n </Show>\n <div class=\"flex gap-2 justify-end\">\n <button\n onClick={props.onCancel}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n {props.config.cancelLabel || 'Cancel'}\n </button>\n <button\n onClick={props.onConfirm}\n class={`px-4 py-2 text-sm font-medium rounded-lg text-white transition-colors ${\n isDanger()\n ? 'bg-red-600 hover:bg-red-700'\n : 'bg-blue-600 hover:bg-blue-700'\n }`}\n >\n {props.config.confirmLabel || 'Confirm'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── Form (delegates to FormFieldRenderer for all field types) ───\n\nconst FormBody: Component<{\n config: FormPromptConfig\n onSubmit: (data: Record<string, unknown>, label: string) => void\n}> = (props) => {\n const [formData, setFormData] = createSignal<Record<string, any>>({})\n\n const updateField = (name: string, value: any) => {\n setFormData((prev) => ({ ...prev, [name]: value }))\n }\n\n const handleSubmit = (e: Event) => {\n e.preventDefault()\n const data = formData()\n const label = Object.entries(data)\n .filter(([, v]) => v !== undefined && v !== '' && !(Array.isArray(v) && v.length === 0))\n .map(([k, v]) => `${k}: ${Array.isArray(v) ? v.join(', ') : v}`)\n .join(', ')\n props.onSubmit(data, label || 'Form submitted')\n }\n\n const isValid = () => {\n const data = formData()\n return (props.config.fields || [])\n .filter((f) => f.required)\n .every((f) => {\n const val = data[f.name]\n if (Array.isArray(val)) return val.length > 0\n if (typeof val === 'boolean') return true\n return val !== undefined && val !== ''\n })\n }\n\n return (\n <form onSubmit={handleSubmit} class=\"flex flex-col gap-3\">\n <For each={props.config.fields}>\n {(field) => (\n <FormFieldRenderer\n field={field as FormFieldParams}\n value={formData()[field.name]}\n onChange={(val) => updateField(field.name, val)}\n formData={formData}\n />\n )}\n </For>\n <div class=\"flex justify-end\">\n <button\n type=\"submit\"\n disabled={!isValid()}\n class=\"px-4 py-2 text-sm font-medium rounded-lg text-white bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed transition-colors\"\n >\n {props.config.submitLabel || 'Submit'}\n </button>\n </div>\n </form>\n )\n}\n"],"names":["ChatPrompt","props","config","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_$insert","title","$$click","onDismiss","onSubmit","type","value","label","dismissed","_$createComponent","Show","when","dismissLabel","fallback","_tmpl$2","children","Switch","Match","ChoiceBody","onSelect","ConfirmBody","onConfirm","confirmLabel","onCancel","cancelLabel","FormBody","data","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","undefined","_$runHydrationEvents","layoutClass","layout","_el$7","_tmpl$3","For","each","options","option","_el$8","_tmpl$6","_el$1","_el$10","_co$","_$getNextMarker","_el$11","_el$12","_co$2","_el$13","_el$14","_co$3","icon","_el$9","_tmpl$4","description","_el$0","_tmpl$5","isDanger","variant","_el$15","_tmpl$8","_el$20","_el$21","_co$4","_el$17","_el$18","_el$19","message","_el$16","_tmpl$7","_$addEventListener","formData","setFormData","createSignal","updateField","name","prev","handleSubmit","preventDefault","Object","entries","filter","v","Array","isArray","length","map","k","join","isValid","fields","f","required","every","val","_el$22","_tmpl$9","_el$25","_el$26","_co$5","_el$23","_el$24","addEventListener","field","FormFieldRenderer","onChange","submitLabel","_$setProperty","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatPrompt.js","sources":["../../src/components/ChatPrompt.tsx"],"sourcesContent":["/**\n * ChatPrompt — Ephemeral structured interaction above chat input\n * v2.4.0: choice, confirm, form subtypes\n *\n * @experimental — This component may change without major bump until v2.5.0.\n *\n * Renders above the chat input. User responds → Promise resolves → prompt disappears.\n * Supports AbortSignal for cleanup on navigation (C4).\n */\n\nimport { Component, Show, For, createSignal, onCleanup, Switch, Match } from 'solid-js'\nimport type {\n ChatPromptConfig,\n ChatPromptResponse,\n ChoicePromptConfig,\n ConfirmPromptConfig,\n FormPromptConfig,\n} from '../types/chat-bus'\nimport { FormFieldRenderer } from './FormFieldRenderer'\nimport type { FormFieldParams } from '../types'\n\nexport interface ChatPromptProps {\n /** Prompt configuration */\n config: ChatPromptConfig\n /** Called when user responds */\n onSubmit: (response: ChatPromptResponse) => void\n /** Called when user dismisses (e.g. \"send as-is\") */\n onDismiss?: () => void\n /** Label for the dismiss button (replaces X icon). Default: shows X icon. */\n dismissLabel?: string\n}\n\n/**\n * @experimental\n * Ephemeral interaction component — choice buttons, confirmation dialog, or quick form.\n * Designed to sit between the chat messages and the input area.\n *\n * @example\n * <ChatPrompt\n * config={{ type: 'choice', title: 'Format?', config: { options: [...] } }}\n * onSubmit={(r) => bus.events.emit('onChatPromptResponse', { streamKey, response: r })}\n * onDismiss={() => setActivePrompt(null)}\n * />\n */\nexport const ChatPrompt: Component<ChatPromptProps> = (props) => {\n // F1: Guard against null/undefined config (e.g. after dismiss clears state)\n if (!props.config) return null\n\n return (\n <div\n class=\"w-full max-w-2xl mx-auto mb-2 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-lg overflow-visible\"\n style={{ animation: 'chat-prompt-slide-up 0.2s ease-out' }}\n role=\"dialog\"\n aria-label={props.config.title}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 dark:border-gray-700\">\n <p class=\"text-sm font-medium text-gray-900 dark:text-white\">{props.config.title}</p>\n <button\n onClick={() => {\n props.onDismiss?.()\n props.onSubmit({ type: props.config.type, value: '', label: '', dismissed: true })\n }}\n class={props.dismissLabel\n ? 'px-3 py-1 text-xs font-medium text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20 rounded-lg transition-colors'\n : 'p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors'\n }\n aria-label={props.dismissLabel || 'Dismiss'}\n >\n <Show when={props.dismissLabel} fallback={\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n }>\n {props.dismissLabel}\n </Show>\n </button>\n </div>\n\n {/* Body — type-specific */}\n <div class=\"px-4 py-3\">\n <Switch>\n <Match when={props.config.type === 'choice'}>\n <ChoiceBody\n config={props.config.config as ChoicePromptConfig}\n onSelect={(value, label) => props.onSubmit({ type: 'choice', value, label })}\n />\n </Match>\n <Match when={props.config.type === 'confirm'}>\n <ConfirmBody\n config={props.config.config as ConfirmPromptConfig}\n onConfirm={() => props.onSubmit({ type: 'confirm', value: 'confirmed', label: (props.config.config as ConfirmPromptConfig).confirmLabel || 'Confirmed' })}\n onCancel={() => {\n props.onDismiss?.()\n props.onSubmit({ type: 'confirm', value: 'cancelled', label: (props.config.config as ConfirmPromptConfig).cancelLabel || 'Cancelled', dismissed: true })\n }}\n />\n </Match>\n <Match when={props.config.type === 'form'}>\n <FormBody\n config={props.config.config as FormPromptConfig}\n onSubmit={(data, label) => props.onSubmit({ type: 'form', value: data, label })}\n />\n </Match>\n </Switch>\n </div>\n\n <style>{`\n @keyframes chat-prompt-slide-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n\n// ─── Choice ──────────────────────────────────────────────────\n\nconst ChoiceBody: Component<{\n config: ChoicePromptConfig\n onSelect: (value: string, label: string) => void\n}> = (props) => {\n const layoutClass = () => {\n switch (props.config.layout) {\n case 'vertical': return 'flex flex-col gap-2'\n case 'grid': return 'grid grid-cols-2 gap-2'\n default: return 'flex flex-wrap gap-2'\n }\n }\n\n return (\n <div class={layoutClass()}>\n <For each={props.config.options}>\n {(option) => (\n <button\n onClick={() => props.onSelect(option.value, option.label)}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white hover:bg-blue-50 hover:border-blue-300 dark:hover:bg-blue-900/30 dark:hover:border-blue-600 transition-colors text-left\"\n >\n <Show when={option.icon}>\n <span class=\"mr-2\">{option.icon}</span>\n </Show>\n {option.label}\n <Show when={option.description}>\n <span class=\"block text-xs text-gray-500 dark:text-gray-400 mt-0.5 font-normal\">{option.description}</span>\n </Show>\n </button>\n )}\n </For>\n </div>\n )\n}\n\n// ─── Confirm ─────────────────────────────────────────────────\n\nconst ConfirmBody: Component<{\n config: ConfirmPromptConfig\n onConfirm: () => void\n onCancel: () => void\n}> = (props) => {\n const isDanger = () => props.config.variant === 'danger'\n\n return (\n <div>\n <Show when={props.config.message}>\n <p class=\"text-sm text-gray-600 dark:text-gray-400 mb-3\">{props.config.message}</p>\n </Show>\n <div class=\"flex gap-2 justify-end\">\n <button\n onClick={props.onCancel}\n class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-200 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n {props.config.cancelLabel || 'Cancel'}\n </button>\n <button\n onClick={props.onConfirm}\n class={`px-4 py-2 text-sm font-medium rounded-lg text-white transition-colors ${\n isDanger()\n ? 'bg-red-600 hover:bg-red-700'\n : 'bg-blue-600 hover:bg-blue-700'\n }`}\n >\n {props.config.confirmLabel || 'Confirm'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── Form (delegates to FormFieldRenderer for all field types) ───\n\nconst FormBody: Component<{\n config: FormPromptConfig\n onSubmit: (data: Record<string, unknown>, label: string) => void\n}> = (props) => {\n const [formData, setFormData] = createSignal<Record<string, any>>({})\n\n const updateField = (name: string, value: any) => {\n setFormData((prev) => ({ ...prev, [name]: value }))\n }\n\n const handleSubmit = (e: Event) => {\n e.preventDefault()\n const data = formData()\n const label = Object.entries(data)\n .filter(([, v]) => v !== undefined && v !== '' && !(Array.isArray(v) && v.length === 0))\n .map(([k, v]) => `${k}: ${Array.isArray(v) ? v.join(', ') : v}`)\n .join(', ')\n props.onSubmit(data, label || 'Form submitted')\n }\n\n const isValid = () => {\n const data = formData()\n return (props.config.fields || [])\n .filter((f) => f.required)\n .every((f) => {\n const val = data[f.name]\n if (Array.isArray(val)) return val.length > 0\n if (typeof val === 'boolean') return true\n return val !== undefined && val !== ''\n })\n }\n\n return (\n <form onSubmit={handleSubmit} class=\"flex flex-col gap-3\">\n <For each={props.config.fields}>\n {(field) => (\n <FormFieldRenderer\n field={field as FormFieldParams}\n value={formData()[field.name]}\n onChange={(val) => updateField(field.name, val)}\n formData={formData}\n />\n )}\n </For>\n <div class=\"flex justify-end\">\n <button\n type=\"submit\"\n disabled={!isValid()}\n class=\"px-4 py-2 text-sm font-medium rounded-lg text-white bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed transition-colors\"\n >\n {props.config.submitLabel || 'Submit'}\n </button>\n </div>\n </form>\n )\n}\n"],"names":["ChatPrompt","props","config","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_$insert","title","$$click","onDismiss","onSubmit","type","value","label","dismissed","_$createComponent","Show","when","dismissLabel","fallback","_tmpl$2","children","Switch","Match","ChoiceBody","onSelect","ConfirmBody","onConfirm","confirmLabel","onCancel","cancelLabel","FormBody","data","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","undefined","_$runHydrationEvents","layoutClass","layout","_el$7","_tmpl$3","For","each","options","option","_el$8","_tmpl$6","_el$1","_el$10","_co$","_$getNextMarker","_el$11","_el$12","_co$2","_el$13","_el$14","_co$3","icon","_el$9","_tmpl$4","description","_el$0","_tmpl$5","isDanger","variant","_el$15","_tmpl$8","_el$20","_el$21","_co$4","_el$17","_el$18","_el$19","message","_el$16","_tmpl$7","_$addEventListener","formData","setFormData","createSignal","updateField","name","prev","handleSubmit","preventDefault","Object","entries","filter","v","Array","isArray","length","map","k","join","isValid","fields","f","required","every","val","_el$22","_tmpl$9","_el$25","_el$26","_co$5","_el$23","_el$24","addEventListener","field","FormFieldRenderer","onChange","submitLabel","_$setProperty","_$delegateEvents"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const web = require("solid-js/web");
|
|
4
4
|
const solidJs = require("solid-js");
|
|
5
5
|
const useConditionalField = require("../hooks/useConditionalField.cjs");
|
|
6
|
-
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(`<input>`), _tmpl$4 = /* @__PURE__ */ web.template(`<input type=number>`), _tmpl$5 = /* @__PURE__ */ web.template(`<input type=date>`), _tmpl$6 = /* @__PURE__ */ web.template(`<textarea>`), _tmpl$7 = /* @__PURE__ */ web.template(`<option value disabled>`), _tmpl$8 = /* @__PURE__ */ web.template(`<select><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ web.template(`<label class="flex items-center gap-2 cursor-pointer"><input type=checkbox class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700"><span class="text-sm text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$0 = /* @__PURE__ */ web.template(`<div class=space-y-2 role=radiogroup>`), _tmpl$1 = /* @__PURE__ */ web.template(`<input type=text>`), _tmpl$10 = /* @__PURE__ */ web.template(`<p class="text-xs text-amber-500 mt-0.5">Unknown field type: <!$><!/>`), _tmpl$11 = /* @__PURE__ */ web.template(`<p class="text-xs text-gray-500 dark:text-gray-400">`), _tmpl$12 = /* @__PURE__ */ web.template(`<p role=alert class="text-xs text-red-600 dark:text-red-400">`), _tmpl$13 = /* @__PURE__ */ web.template(`<div class=space-y-1><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$14 = /* @__PURE__ */ web.template(`<option>`), _tmpl$15 = /* @__PURE__ */ web.template(`<label class="flex items-center gap-2 cursor-pointer"><input type=radio class="w-4 h-4 border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"><span class="text-sm text-gray-700 dark:text-gray-300">`), _tmpl$16 = /* @__PURE__ */ web.template(`<div class="flex flex-wrap gap-1 mb-1">`), _tmpl$17 = /* @__PURE__ */ web.template(`<div class="p-2 border-b border-gray-200 dark:border-gray-600"><input type=text placeholder=Filter... class="w-full px-2 py-1 text-sm border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:border-blue-400 outline-none"autofocus>`), _tmpl$18 = /* @__PURE__ */ web.template(`<p class="px-3 py-2 text-sm text-gray-400">No matches`), _tmpl$19 = /* @__PURE__ */ web.template(`<div class="absolute z-
|
|
6
|
+
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(`<input>`), _tmpl$4 = /* @__PURE__ */ web.template(`<input type=number>`), _tmpl$5 = /* @__PURE__ */ web.template(`<input type=date>`), _tmpl$6 = /* @__PURE__ */ web.template(`<textarea>`), _tmpl$7 = /* @__PURE__ */ web.template(`<option value disabled>`), _tmpl$8 = /* @__PURE__ */ web.template(`<select><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ web.template(`<label class="flex items-center gap-2 cursor-pointer"><input type=checkbox class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700"><span class="text-sm text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$0 = /* @__PURE__ */ web.template(`<div class=space-y-2 role=radiogroup>`), _tmpl$1 = /* @__PURE__ */ web.template(`<input type=text>`), _tmpl$10 = /* @__PURE__ */ web.template(`<p class="text-xs text-amber-500 mt-0.5">Unknown field type: <!$><!/>`), _tmpl$11 = /* @__PURE__ */ web.template(`<p class="text-xs text-gray-500 dark:text-gray-400">`), _tmpl$12 = /* @__PURE__ */ web.template(`<p role=alert class="text-xs text-red-600 dark:text-red-400">`), _tmpl$13 = /* @__PURE__ */ web.template(`<div class=space-y-1><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$14 = /* @__PURE__ */ web.template(`<option>`), _tmpl$15 = /* @__PURE__ */ web.template(`<label class="flex items-center gap-2 cursor-pointer"><input type=radio class="w-4 h-4 border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"><span class="text-sm text-gray-700 dark:text-gray-300">`), _tmpl$16 = /* @__PURE__ */ web.template(`<div class="flex flex-wrap gap-1 mb-1">`), _tmpl$17 = /* @__PURE__ */ web.template(`<div class="p-2 border-b border-gray-200 dark:border-gray-600 flex-shrink-0"><input type=text placeholder=Filter... class="w-full px-2 py-1 text-sm border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:border-blue-400 outline-none"autofocus>`), _tmpl$18 = /* @__PURE__ */ web.template(`<p class="px-3 py-2 text-sm text-gray-400">No matches`), _tmpl$19 = /* @__PURE__ */ web.template(`<div class="absolute z-50 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg"style=max-height:320px;display:flex;flex-direction:column><!$><!/><div style=overflow-y:auto;flex:1;-webkit-overflow-scrolling:touch><!$><!/><!$><!/>`), _tmpl$20 = /* @__PURE__ */ web.template(`<div class=relative><!$><!/><button type=button><span></span><svg class="w-4 h-4 text-gray-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M19 9l-7 7-7-7"></path></svg></button><!$><!/>`), _tmpl$21 = /* @__PURE__ */ web.template(`<span class="inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded-full"><!$><!/><button type=button class="hover:text-blue-900 dark:hover:text-blue-100">×`), _tmpl$22 = /* @__PURE__ */ web.template(`<label class="flex items-center gap-2 px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer text-sm"><input type=checkbox class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"><span class="text-gray-900 dark:text-white">`), _tmpl$23 = /* @__PURE__ */ web.template(`<div class="absolute z-20 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg max-h-72 overflow-y-auto">`), _tmpl$24 = /* @__PURE__ */ web.template(`<div class=relative><!$><!/><input type=text autocomplete=off><!$><!/>`), _tmpl$25 = /* @__PURE__ */ web.template(`<span class="ml-2 text-xs">✓`), _tmpl$26 = /* @__PURE__ */ web.template(`<button type=button><!$><!/><!$><!/>`);
|
|
7
7
|
const FormFieldRenderer = (props) => {
|
|
8
8
|
const {
|
|
9
9
|
isVisible
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormFieldRenderer.cjs","sources":["../../src/components/FormFieldRenderer.tsx"],"sourcesContent":["/**\n * FormFieldRenderer - Individual form field component\n * Sprint 1: Form Foundation\n * Sprint 2: Conditional field visibility (showWhen)\n */\n\nimport { Component, Show, For, Switch, Match, Accessor, createSignal, createEffect, onCleanup } from 'solid-js'\nimport type { FormFieldParams } from '../types'\nimport { useConditionalField } from '../hooks/useConditionalField'\n\nexport interface FormFieldRendererProps {\n field: FormFieldParams\n value: any\n error?: string\n onChange: (value: any) => void\n disabled?: boolean\n /**\n * Form data accessor for conditional field visibility\n */\n formData?: Accessor<Record<string, any>>\n}\n\nexport const FormFieldRenderer: Component<FormFieldRendererProps> = (props) => {\n // Conditional visibility based on showWhen\n const { isVisible } = useConditionalField({\n condition: props.field.showWhen,\n formData: props.formData || (() => ({})),\n })\n\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 return (\n <Show when={isVisible()}>\n <div class=\"space-y-1\">\n <Show when={props.field.label && props.field.type !== 'checkbox'}>\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 <Switch>\n {/* Text Input */}\n <Match when={props.field.type === 'text' || props.field.type === 'email' || props.field.type === 'password'}>\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 </Match>\n\n {/* Number Input */}\n <Match when={props.field.type === 'number'}>\n <input\n id={fieldId()}\n type=\"number\"\n name={props.field.name}\n value={props.value ?? ''}\n onInput={(e) => props.onChange(e.currentTarget.value === '' ? undefined : Number(e.currentTarget.value))}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n min={props.field.min}\n max={props.field.max}\n step={props.field.step}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n </Match>\n\n {/* Date Input */}\n <Match when={props.field.type === 'date'}>\n <input\n id={fieldId()}\n type=\"date\"\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n disabled={props.disabled}\n required={props.field.required}\n min={props.field.minDate}\n max={props.field.maxDate}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n </Match>\n\n {/* Textarea */}\n <Match when={props.field.type === 'textarea'}>\n <textarea\n id={fieldId()}\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 rows={props.field.rows || 4}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n </Match>\n\n {/* Select (single) */}\n <Match when={props.field.type === 'select' && !props.field.multiple}>\n <select\n id={fieldId()}\n name={props.field.name}\n value={props.value || ''}\n onChange={(e) => props.onChange(e.currentTarget.value)}\n disabled={props.disabled}\n required={props.field.required}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n >\n <Show when={props.field.placeholder}>\n <option value=\"\" disabled>{props.field.placeholder}</option>\n </Show>\n <For each={props.field.options}>\n {(option) => (\n <option value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n )}\n </For>\n </select>\n </Match>\n\n {/* Checkbox */}\n <Match when={props.field.type === 'checkbox'}>\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n id={fieldId()}\n type=\"checkbox\"\n name={props.field.name}\n checked={props.value || false}\n onChange={(e) => props.onChange(e.currentTarget.checked)}\n disabled={props.disabled}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class=\"w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700\"\n />\n <span class=\"text-sm text-gray-700 dark:text-gray-300\">\n {props.field.checkboxLabel || props.field.label}\n <Show when={props.field.required}>\n <span class=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </Show>\n </span>\n </label>\n </Match>\n\n {/* Multi-Select with chips */}\n <Match when={props.field.type === 'select' && props.field.multiple}>\n <MultiSelectField\n field={props.field}\n value={props.value || []}\n onChange={props.onChange}\n disabled={props.disabled}\n baseClass={baseInputClass()}\n />\n </Match>\n\n {/* Autocomplete with API fetch */}\n <Match when={props.field.type === 'autocomplete'}>\n <AutocompleteField\n field={props.field}\n value={props.value || ''}\n onChange={props.onChange}\n disabled={props.disabled}\n baseClass={baseInputClass()}\n />\n </Match>\n\n {/* Radio Group */}\n <Match when={props.field.type === 'radio'}>\n <div\n class=\"space-y-2\"\n role=\"radiogroup\"\n aria-labelledby={props.field.label ? `${fieldId()}-label` : undefined}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n >\n <For each={props.field.options}>\n {(option, index) => (\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={props.field.name}\n id={`${fieldId()}-${index()}`}\n value={option.value}\n checked={props.value === option.value}\n onChange={() => props.onChange(option.value)}\n disabled={props.disabled || option.disabled}\n class=\"w-4 h-4 border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600\"\n />\n <span class=\"text-sm text-gray-700 dark:text-gray-300\">\n {option.label}\n </span>\n </label>\n )}\n </For>\n </div>\n </Match>\n\n {/* Fallback for unknown field types — renders as text input with warning */}\n <Match when={true}>\n <input\n id={fieldId()}\n type=\"text\"\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.field.placeholder || `(${props.field.type})`}\n disabled={props.disabled}\n class={baseInputClass()}\n />\n <p class=\"text-xs text-amber-500 mt-0.5\">Unknown field type: {props.field.type}</p>\n </Match>\n </Switch>\n\n <Show when={props.field.helpText && !props.error}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400\">{props.field.helpText}</p>\n </Show>\n\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\n// ─── Multi-Select with Chips ─────────────────────────────────\n\nconst MultiSelectField: Component<{\n field: FormFieldParams\n value: string[]\n onChange: (value: string[]) => void\n disabled?: boolean\n baseClass: string\n}> = (props) => {\n const [open, setOpen] = createSignal(false)\n const [filter, setFilter] = createSignal('')\n\n const toggle = (val: string) => {\n const current = props.value || []\n if (current.includes(val)) {\n props.onChange(current.filter((v) => v !== val))\n } else {\n props.onChange([...current, val])\n }\n }\n\n const removeChip = (val: string) => {\n props.onChange((props.value || []).filter((v) => v !== val))\n }\n\n const getLabel = (val: string) =>\n props.field.options?.find((o) => o.value === val)?.label || val\n\n const filteredOptions = () => {\n const q = filter().toLowerCase()\n if (!q) return props.field.options || []\n return (props.field.options || []).filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q)\n )\n }\n\n return (\n <div class=\"relative\">\n {/* Selected chips */}\n <Show when={props.value.length > 0}>\n <div class=\"flex flex-wrap gap-1 mb-1\">\n <For each={props.value}>\n {(val) => (\n <span class=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded-full\">\n {getLabel(val)}\n <button\n type=\"button\"\n onClick={() => removeChip(val)}\n class=\"hover:text-blue-900 dark:hover:text-blue-100\"\n aria-label={`Remove ${getLabel(val)}`}\n >\n ×\n </button>\n </span>\n )}\n </For>\n </div>\n </Show>\n\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => { setOpen(!open()); if (!open()) setFilter('') }}\n disabled={props.disabled}\n class={`${props.baseClass} text-left flex items-center justify-between`}\n >\n <span class={props.value.length ? 'text-gray-900 dark:text-white' : 'text-gray-400'}>\n {props.value.length\n ? `${props.value.length} selected`\n : props.field.placeholder || 'Select...'}\n </span>\n <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {/* Dropdown with filter */}\n <Show when={open()}>\n <div class=\"absolute z-20 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg overflow-hidden\">\n {/* Search filter */}\n <Show when={(props.field.options?.length || 0) > 10}>\n <div class=\"p-2 border-b border-gray-200 dark:border-gray-600\">\n <input\n type=\"text\"\n value={filter()}\n onInput={(e) => setFilter(e.currentTarget.value)}\n placeholder=\"Filter...\"\n class=\"w-full px-2 py-1 text-sm border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:border-blue-400 outline-none\"\n autofocus\n />\n </div>\n </Show>\n {/* Options list */}\n <div class=\"max-h-72 overflow-y-auto\">\n <For each={filteredOptions()}>\n {(option) => (\n <label class=\"flex items-center gap-2 px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer text-sm\">\n <input\n type=\"checkbox\"\n checked={(props.value || []).includes(option.value)}\n onChange={() => toggle(option.value)}\n class=\"w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600\"\n />\n <span class=\"text-gray-900 dark:text-white\">{option.label}</span>\n </label>\n )}\n </For>\n <Show when={filteredOptions().length === 0}>\n <p class=\"px-3 py-2 text-sm text-gray-400\">No matches</p>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n// ─── Autocomplete with API fetch ─────────────────────────────\n\nconst AutocompleteField: Component<{\n field: FormFieldParams\n value: string | string[]\n onChange: (value: string | string[]) => void\n disabled?: boolean\n baseClass: string\n}> = (props) => {\n const [query, setQuery] = createSignal('')\n const [suggestions, setSuggestions] = createSignal<Array<{ label: string; value: string }>>([])\n const [isOpen, setIsOpen] = createSignal(false)\n const [selectedLabels, setSelectedLabels] = createSignal<Map<string, string>>(new Map())\n let debounceTimer: ReturnType<typeof setTimeout> | null = null\n\n const isMultiple = () => props.field.multiple === true\n const selectedValues = () => isMultiple() ? (Array.isArray(props.value) ? props.value : []) : []\n const minChars = () => props.field.minChars ?? 2\n const debounceMs = () => props.field.debounceMs ?? 300\n\n const fetchSuggestions = async (q: string) => {\n if (!props.field.apiUrl || !props.field.searchParam) return\n\n try {\n const params = new URLSearchParams({ [props.field.searchParam]: q })\n if (props.field.extraParams) {\n for (const [k, v] of Object.entries(props.field.extraParams)) {\n params.set(k, v)\n }\n }\n const res = await fetch(`${props.field.apiUrl}?${params}`)\n if (!res.ok) return\n\n const data = await res.json()\n const items = Array.isArray(data) ? data : data.results || data.features || []\n const labelField = props.field.labelField || 'label'\n const valueField = props.field.valueField || 'value'\n\n setSuggestions(items.slice(0, 10).map((item: any) => ({\n label: item[labelField] || String(item),\n value: String(item[valueField] || item[labelField] || item),\n })))\n setIsOpen(true)\n } catch {\n setSuggestions([])\n }\n }\n\n const handleInput = (value: string) => {\n setQuery(value)\n if (!isMultiple()) {\n props.onChange('')\n }\n\n if (debounceTimer) clearTimeout(debounceTimer)\n if (value.length < minChars()) {\n setSuggestions([])\n setIsOpen(false)\n return\n }\n debounceTimer = setTimeout(() => fetchSuggestions(value), debounceMs())\n }\n\n const selectSuggestion = (item: { label: string; value: string }) => {\n if (isMultiple()) {\n const current = selectedValues()\n if (!current.includes(item.value)) {\n props.onChange([...current, item.value])\n setSelectedLabels((prev) => new Map(prev).set(item.value, item.label))\n }\n setQuery('')\n setSuggestions([])\n setIsOpen(false)\n } else {\n props.onChange(item.value)\n setSelectedLabels((prev) => new Map(prev).set(item.value, item.label))\n setQuery(item.label)\n setIsOpen(false)\n setSuggestions([])\n }\n }\n\n const removeChip = (val: string) => {\n props.onChange(selectedValues().filter((v) => v !== val))\n setSelectedLabels((prev) => { const m = new Map(prev); m.delete(val); return m })\n }\n\n const getLabel = (val: string) => selectedLabels().get(val) || val\n\n onCleanup(() => { if (debounceTimer) clearTimeout(debounceTimer) })\n\n return (\n <div class=\"relative\">\n {/* Multi chips */}\n <Show when={isMultiple() && selectedValues().length > 0}>\n <div class=\"flex flex-wrap gap-1 mb-1\">\n <For each={selectedValues()}>\n {(val) => (\n <span class=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded-full\">\n {getLabel(val)}\n <button\n type=\"button\"\n onClick={() => removeChip(val)}\n class=\"hover:text-blue-900 dark:hover:text-blue-100\"\n aria-label={`Remove ${getLabel(val)}`}\n >\n ×\n </button>\n </span>\n )}\n </For>\n </div>\n </Show>\n\n <input\n type=\"text\"\n value={query()}\n onInput={(e) => handleInput(e.currentTarget.value)}\n onFocus={() => { if (suggestions().length) setIsOpen(true) }}\n onBlur={() => setTimeout(() => setIsOpen(false), 200)}\n placeholder={isMultiple() && selectedValues().length\n ? 'Add more...'\n : props.field.placeholder}\n disabled={props.disabled}\n class={props.baseClass}\n autocomplete=\"off\"\n />\n\n <Show when={isOpen() && suggestions().length > 0}>\n <div class=\"absolute z-20 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg max-h-72 overflow-y-auto\">\n <For each={suggestions()}>\n {(item) => {\n const isSelected = () => isMultiple() && selectedValues().includes(item.value)\n return (\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => selectSuggestion(item)}\n class={`w-full text-left px-3 py-2 text-sm hover:bg-blue-50 dark:hover:bg-blue-900/20 ${\n isSelected() ? 'text-blue-600 dark:text-blue-400 bg-blue-50/50 dark:bg-blue-900/10' : 'text-gray-900 dark:text-white'\n }`}\n disabled={isSelected()}\n >\n {item.label}\n <Show when={isSelected()}>\n <span class=\"ml-2 text-xs\">✓</span>\n </Show>\n </button>\n )\n }}\n </For>\n </div>\n </Show>\n </div>\n )\n}\n"],"names":["FormFieldRenderer","props","isVisible","useConditionalField","condition","field","showWhen","formData","baseInputClass","error","fieldId","name","errorId","_$createComponent","Show","when","children","_el$","_$getNextElement","_tmpl$13","_el$32","firstChild","_el$33","_co$8","_$getNextMarker","nextSibling","_el$34","_el$35","_co$9","_el$36","_el$37","_co$0","_el$38","_el$39","_co$1","_$insert","_$memo","label","type","_el$2","_tmpl$2","_el$4","_el$5","_co$","_el$6","_el$7","_co$2","required","_tmpl$","_$effect","_$setAttribute","Switch","Match","_el$8","_tmpl$3","$$input","e","onChange","currentTarget","value","_p$","_v$","_v$2","_v$3","_v$4","placeholder","_v$5","disabled","_v$6","_v$7","minLength","_v$8","maxLength","_v$9","pattern","_v$0","_v$1","undefined","_v$10","t","a","o","i","_$setProperty","n","s","h","r","d","l","u","_$className","_$runHydrationEvents","_el$9","_tmpl$4","Number","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","min","_v$17","max","_v$18","step","_v$19","_v$20","_v$21","_el$0","_tmpl$5","_v$22","_v$23","_v$24","_v$25","_v$26","minDate","_v$27","maxDate","_v$28","_v$29","_v$30","_el$1","_tmpl$6","_v$31","_v$32","_v$33","_v$34","_v$35","_v$36","rows","_v$37","_v$38","_v$39","_v$40","_v$41","multiple","_el$10","_tmpl$8","_el$12","_el$13","_co$3","_el$14","_el$15","_co$4","addEventListener","_el$11","_tmpl$7","For","each","options","option","_el$40","_tmpl$14","_v$42","_v$43","_v$44","_v$45","_v$46","_v$47","_v$48","_el$16","_tmpl$9","_el$17","_el$18","_el$20","_el$21","_co$5","_el$22","_el$23","_co$6","checked","checkboxLabel","_v$49","_v$50","_v$51","_v$52","_v$53","MultiSelectField","baseClass","AutocompleteField","_el$24","_tmpl$0","index","_el$41","_tmpl$15","_el$42","_el$43","_v$62","_v$63","_v$64","_v$54","_v$55","_v$56","_el$25","_tmpl$1","_v$57","_v$58","_v$59","_v$60","_v$61","_el$26","_tmpl$10","_el$27","_el$28","_el$29","_co$7","helpText","_el$30","_tmpl$11","_el$31","_tmpl$12","open","setOpen","createSignal","filter","setFilter","toggle","val","current","includes","v","removeChip","getLabel","find","filteredOptions","q","toLowerCase","_el$44","_tmpl$20","_el$59","_el$60","_co$13","_el$46","_el$47","_el$61","_el$62","_co$14","length","_el$45","_tmpl$16","_el$63","_tmpl$21","_el$65","_el$66","_co$15","_el$64","$$click","_c$","_el$48","_tmpl$19","_el$57","_el$58","_co$12","_el$51","_el$53","_el$54","_co$10","_el$55","_el$56","_co$11","_el$49","_tmpl$17","_el$50","_el$67","_tmpl$22","_el$68","_el$69","_tmpl$18","_v$65","_v$66","_v$67","query","setQuery","suggestions","setSuggestions","isOpen","setIsOpen","selectedLabels","setSelectedLabels","Map","debounceTimer","isMultiple","selectedValues","Array","isArray","minChars","debounceMs","fetchSuggestions","apiUrl","searchParam","params","URLSearchParams","extraParams","k","Object","entries","set","res","fetch","ok","data","json","items","results","features","labelField","valueField","slice","map","item","String","handleInput","setTimeout","selectSuggestion","prev","m","delete","get","onCleanup","_el$70","_tmpl$24","_el$74","_el$75","_co$16","_el$72","_el$76","_el$77","_co$17","_el$71","_el$78","_el$80","_el$81","_co$18","_el$79","_el$73","_tmpl$23","isSelected","_el$82","_tmpl$26","_el$84","_el$85","_co$19","_el$86","_el$87","_co$20","$$mousedown","preventDefault","_tmpl$25","_v$71","_v$72","_v$68","_v$69","_v$70","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormFieldRenderer.cjs","sources":["../../src/components/FormFieldRenderer.tsx"],"sourcesContent":["/**\n * FormFieldRenderer - Individual form field component\n * Sprint 1: Form Foundation\n * Sprint 2: Conditional field visibility (showWhen)\n */\n\nimport { Component, Show, For, Switch, Match, Accessor, createSignal, createEffect, onCleanup } from 'solid-js'\nimport type { FormFieldParams } from '../types'\nimport { useConditionalField } from '../hooks/useConditionalField'\n\nexport interface FormFieldRendererProps {\n field: FormFieldParams\n value: any\n error?: string\n onChange: (value: any) => void\n disabled?: boolean\n /**\n * Form data accessor for conditional field visibility\n */\n formData?: Accessor<Record<string, any>>\n}\n\nexport const FormFieldRenderer: Component<FormFieldRendererProps> = (props) => {\n // Conditional visibility based on showWhen\n const { isVisible } = useConditionalField({\n condition: props.field.showWhen,\n formData: props.formData || (() => ({})),\n })\n\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 return (\n <Show when={isVisible()}>\n <div class=\"space-y-1\">\n <Show when={props.field.label && props.field.type !== 'checkbox'}>\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 <Switch>\n {/* Text Input */}\n <Match when={props.field.type === 'text' || props.field.type === 'email' || props.field.type === 'password'}>\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 </Match>\n\n {/* Number Input */}\n <Match when={props.field.type === 'number'}>\n <input\n id={fieldId()}\n type=\"number\"\n name={props.field.name}\n value={props.value ?? ''}\n onInput={(e) => props.onChange(e.currentTarget.value === '' ? undefined : Number(e.currentTarget.value))}\n placeholder={props.field.placeholder}\n disabled={props.disabled}\n required={props.field.required}\n min={props.field.min}\n max={props.field.max}\n step={props.field.step}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n </Match>\n\n {/* Date Input */}\n <Match when={props.field.type === 'date'}>\n <input\n id={fieldId()}\n type=\"date\"\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n disabled={props.disabled}\n required={props.field.required}\n min={props.field.minDate}\n max={props.field.maxDate}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n </Match>\n\n {/* Textarea */}\n <Match when={props.field.type === 'textarea'}>\n <textarea\n id={fieldId()}\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 rows={props.field.rows || 4}\n minLength={props.field.minLength}\n maxLength={props.field.maxLength}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n />\n </Match>\n\n {/* Select (single) */}\n <Match when={props.field.type === 'select' && !props.field.multiple}>\n <select\n id={fieldId()}\n name={props.field.name}\n value={props.value || ''}\n onChange={(e) => props.onChange(e.currentTarget.value)}\n disabled={props.disabled}\n required={props.field.required}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class={baseInputClass()}\n >\n <Show when={props.field.placeholder}>\n <option value=\"\" disabled>{props.field.placeholder}</option>\n </Show>\n <For each={props.field.options}>\n {(option) => (\n <option value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n )}\n </For>\n </select>\n </Match>\n\n {/* Checkbox */}\n <Match when={props.field.type === 'checkbox'}>\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n id={fieldId()}\n type=\"checkbox\"\n name={props.field.name}\n checked={props.value || false}\n onChange={(e) => props.onChange(e.currentTarget.checked)}\n disabled={props.disabled}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n class=\"w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700\"\n />\n <span class=\"text-sm text-gray-700 dark:text-gray-300\">\n {props.field.checkboxLabel || props.field.label}\n <Show when={props.field.required}>\n <span class=\"text-red-500 ml-1\" aria-hidden=\"true\">*</span>\n </Show>\n </span>\n </label>\n </Match>\n\n {/* Multi-Select with chips */}\n <Match when={props.field.type === 'select' && props.field.multiple}>\n <MultiSelectField\n field={props.field}\n value={props.value || []}\n onChange={props.onChange}\n disabled={props.disabled}\n baseClass={baseInputClass()}\n />\n </Match>\n\n {/* Autocomplete with API fetch */}\n <Match when={props.field.type === 'autocomplete'}>\n <AutocompleteField\n field={props.field}\n value={props.value || ''}\n onChange={props.onChange}\n disabled={props.disabled}\n baseClass={baseInputClass()}\n />\n </Match>\n\n {/* Radio Group */}\n <Match when={props.field.type === 'radio'}>\n <div\n class=\"space-y-2\"\n role=\"radiogroup\"\n aria-labelledby={props.field.label ? `${fieldId()}-label` : undefined}\n aria-invalid={!!props.error}\n aria-describedby={props.error ? errorId() : undefined}\n >\n <For each={props.field.options}>\n {(option, index) => (\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={props.field.name}\n id={`${fieldId()}-${index()}`}\n value={option.value}\n checked={props.value === option.value}\n onChange={() => props.onChange(option.value)}\n disabled={props.disabled || option.disabled}\n class=\"w-4 h-4 border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600\"\n />\n <span class=\"text-sm text-gray-700 dark:text-gray-300\">\n {option.label}\n </span>\n </label>\n )}\n </For>\n </div>\n </Match>\n\n {/* Fallback for unknown field types — renders as text input with warning */}\n <Match when={true}>\n <input\n id={fieldId()}\n type=\"text\"\n name={props.field.name}\n value={props.value || ''}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.field.placeholder || `(${props.field.type})`}\n disabled={props.disabled}\n class={baseInputClass()}\n />\n <p class=\"text-xs text-amber-500 mt-0.5\">Unknown field type: {props.field.type}</p>\n </Match>\n </Switch>\n\n <Show when={props.field.helpText && !props.error}>\n <p class=\"text-xs text-gray-500 dark:text-gray-400\">{props.field.helpText}</p>\n </Show>\n\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\n// ─── Multi-Select with Chips ─────────────────────────────────\n\nconst MultiSelectField: Component<{\n field: FormFieldParams\n value: string[]\n onChange: (value: string[]) => void\n disabled?: boolean\n baseClass: string\n}> = (props) => {\n const [open, setOpen] = createSignal(false)\n const [filter, setFilter] = createSignal('')\n\n const toggle = (val: string) => {\n const current = props.value || []\n if (current.includes(val)) {\n props.onChange(current.filter((v) => v !== val))\n } else {\n props.onChange([...current, val])\n }\n }\n\n const removeChip = (val: string) => {\n props.onChange((props.value || []).filter((v) => v !== val))\n }\n\n const getLabel = (val: string) =>\n props.field.options?.find((o) => o.value === val)?.label || val\n\n const filteredOptions = () => {\n const q = filter().toLowerCase()\n if (!q) return props.field.options || []\n return (props.field.options || []).filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q)\n )\n }\n\n return (\n <div class=\"relative\">\n {/* Selected chips */}\n <Show when={props.value.length > 0}>\n <div class=\"flex flex-wrap gap-1 mb-1\">\n <For each={props.value}>\n {(val) => (\n <span class=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded-full\">\n {getLabel(val)}\n <button\n type=\"button\"\n onClick={() => removeChip(val)}\n class=\"hover:text-blue-900 dark:hover:text-blue-100\"\n aria-label={`Remove ${getLabel(val)}`}\n >\n ×\n </button>\n </span>\n )}\n </For>\n </div>\n </Show>\n\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => { setOpen(!open()); if (!open()) setFilter('') }}\n disabled={props.disabled}\n class={`${props.baseClass} text-left flex items-center justify-between`}\n >\n <span class={props.value.length ? 'text-gray-900 dark:text-white' : 'text-gray-400'}>\n {props.value.length\n ? `${props.value.length} selected`\n : props.field.placeholder || 'Select...'}\n </span>\n <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {/* Dropdown with filter */}\n <Show when={open()}>\n <div\n class=\"absolute z-50 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg\"\n style={{ \"max-height\": \"320px\", display: \"flex\", \"flex-direction\": \"column\" }}\n >\n {/* Search filter */}\n <Show when={(props.field.options?.length || 0) > 10}>\n <div class=\"p-2 border-b border-gray-200 dark:border-gray-600 flex-shrink-0\">\n <input\n type=\"text\"\n value={filter()}\n onInput={(e) => setFilter(e.currentTarget.value)}\n placeholder=\"Filter...\"\n class=\"w-full px-2 py-1 text-sm border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:border-blue-400 outline-none\"\n autofocus\n />\n </div>\n </Show>\n {/* Options list — scrollable */}\n <div style={{ \"overflow-y\": \"auto\", \"flex\": \"1\", \"-webkit-overflow-scrolling\": \"touch\" }}>\n <For each={filteredOptions()}>\n {(option) => (\n <label class=\"flex items-center gap-2 px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer text-sm\">\n <input\n type=\"checkbox\"\n checked={(props.value || []).includes(option.value)}\n onChange={() => toggle(option.value)}\n class=\"w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600\"\n />\n <span class=\"text-gray-900 dark:text-white\">{option.label}</span>\n </label>\n )}\n </For>\n <Show when={filteredOptions().length === 0}>\n <p class=\"px-3 py-2 text-sm text-gray-400\">No matches</p>\n </Show>\n </div>\n </div>\n </Show>\n </div>\n )\n}\n\n// ─── Autocomplete with API fetch ─────────────────────────────\n\nconst AutocompleteField: Component<{\n field: FormFieldParams\n value: string | string[]\n onChange: (value: string | string[]) => void\n disabled?: boolean\n baseClass: string\n}> = (props) => {\n const [query, setQuery] = createSignal('')\n const [suggestions, setSuggestions] = createSignal<Array<{ label: string; value: string }>>([])\n const [isOpen, setIsOpen] = createSignal(false)\n const [selectedLabels, setSelectedLabels] = createSignal<Map<string, string>>(new Map())\n let debounceTimer: ReturnType<typeof setTimeout> | null = null\n\n const isMultiple = () => props.field.multiple === true\n const selectedValues = () => isMultiple() ? (Array.isArray(props.value) ? props.value : []) : []\n const minChars = () => props.field.minChars ?? 2\n const debounceMs = () => props.field.debounceMs ?? 300\n\n const fetchSuggestions = async (q: string) => {\n if (!props.field.apiUrl || !props.field.searchParam) return\n\n try {\n const params = new URLSearchParams({ [props.field.searchParam]: q })\n if (props.field.extraParams) {\n for (const [k, v] of Object.entries(props.field.extraParams)) {\n params.set(k, v)\n }\n }\n const res = await fetch(`${props.field.apiUrl}?${params}`)\n if (!res.ok) return\n\n const data = await res.json()\n const items = Array.isArray(data) ? data : data.results || data.features || []\n const labelField = props.field.labelField || 'label'\n const valueField = props.field.valueField || 'value'\n\n setSuggestions(items.slice(0, 10).map((item: any) => ({\n label: item[labelField] || String(item),\n value: String(item[valueField] || item[labelField] || item),\n })))\n setIsOpen(true)\n } catch {\n setSuggestions([])\n }\n }\n\n const handleInput = (value: string) => {\n setQuery(value)\n if (!isMultiple()) {\n props.onChange('')\n }\n\n if (debounceTimer) clearTimeout(debounceTimer)\n if (value.length < minChars()) {\n setSuggestions([])\n setIsOpen(false)\n return\n }\n debounceTimer = setTimeout(() => fetchSuggestions(value), debounceMs())\n }\n\n const selectSuggestion = (item: { label: string; value: string }) => {\n if (isMultiple()) {\n const current = selectedValues()\n if (!current.includes(item.value)) {\n props.onChange([...current, item.value])\n setSelectedLabels((prev) => new Map(prev).set(item.value, item.label))\n }\n setQuery('')\n setSuggestions([])\n setIsOpen(false)\n } else {\n props.onChange(item.value)\n setSelectedLabels((prev) => new Map(prev).set(item.value, item.label))\n setQuery(item.label)\n setIsOpen(false)\n setSuggestions([])\n }\n }\n\n const removeChip = (val: string) => {\n props.onChange(selectedValues().filter((v) => v !== val))\n setSelectedLabels((prev) => { const m = new Map(prev); m.delete(val); return m })\n }\n\n const getLabel = (val: string) => selectedLabels().get(val) || val\n\n onCleanup(() => { if (debounceTimer) clearTimeout(debounceTimer) })\n\n return (\n <div class=\"relative\">\n {/* Multi chips */}\n <Show when={isMultiple() && selectedValues().length > 0}>\n <div class=\"flex flex-wrap gap-1 mb-1\">\n <For each={selectedValues()}>\n {(val) => (\n <span class=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded-full\">\n {getLabel(val)}\n <button\n type=\"button\"\n onClick={() => removeChip(val)}\n class=\"hover:text-blue-900 dark:hover:text-blue-100\"\n aria-label={`Remove ${getLabel(val)}`}\n >\n ×\n </button>\n </span>\n )}\n </For>\n </div>\n </Show>\n\n <input\n type=\"text\"\n value={query()}\n onInput={(e) => handleInput(e.currentTarget.value)}\n onFocus={() => { if (suggestions().length) setIsOpen(true) }}\n onBlur={() => setTimeout(() => setIsOpen(false), 200)}\n placeholder={isMultiple() && selectedValues().length\n ? 'Add more...'\n : props.field.placeholder}\n disabled={props.disabled}\n class={props.baseClass}\n autocomplete=\"off\"\n />\n\n <Show when={isOpen() && suggestions().length > 0}>\n <div class=\"absolute z-20 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg max-h-72 overflow-y-auto\">\n <For each={suggestions()}>\n {(item) => {\n const isSelected = () => isMultiple() && selectedValues().includes(item.value)\n return (\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => selectSuggestion(item)}\n class={`w-full text-left px-3 py-2 text-sm hover:bg-blue-50 dark:hover:bg-blue-900/20 ${\n isSelected() ? 'text-blue-600 dark:text-blue-400 bg-blue-50/50 dark:bg-blue-900/10' : 'text-gray-900 dark:text-white'\n }`}\n disabled={isSelected()}\n >\n {item.label}\n <Show when={isSelected()}>\n <span class=\"ml-2 text-xs\">✓</span>\n </Show>\n </button>\n )\n }}\n </For>\n </div>\n </Show>\n </div>\n )\n}\n"],"names":["FormFieldRenderer","props","isVisible","useConditionalField","condition","field","showWhen","formData","baseInputClass","error","fieldId","name","errorId","_$createComponent","Show","when","children","_el$","_$getNextElement","_tmpl$13","_el$32","firstChild","_el$33","_co$8","_$getNextMarker","nextSibling","_el$34","_el$35","_co$9","_el$36","_el$37","_co$0","_el$38","_el$39","_co$1","_$insert","_$memo","label","type","_el$2","_tmpl$2","_el$4","_el$5","_co$","_el$6","_el$7","_co$2","required","_tmpl$","_$effect","_$setAttribute","Switch","Match","_el$8","_tmpl$3","$$input","e","onChange","currentTarget","value","_p$","_v$","_v$2","_v$3","_v$4","placeholder","_v$5","disabled","_v$6","_v$7","minLength","_v$8","maxLength","_v$9","pattern","_v$0","_v$1","undefined","_v$10","t","a","o","i","_$setProperty","n","s","h","r","d","l","u","_$className","_$runHydrationEvents","_el$9","_tmpl$4","Number","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","min","_v$17","max","_v$18","step","_v$19","_v$20","_v$21","_el$0","_tmpl$5","_v$22","_v$23","_v$24","_v$25","_v$26","minDate","_v$27","maxDate","_v$28","_v$29","_v$30","_el$1","_tmpl$6","_v$31","_v$32","_v$33","_v$34","_v$35","_v$36","rows","_v$37","_v$38","_v$39","_v$40","_v$41","multiple","_el$10","_tmpl$8","_el$12","_el$13","_co$3","_el$14","_el$15","_co$4","addEventListener","_el$11","_tmpl$7","For","each","options","option","_el$40","_tmpl$14","_v$42","_v$43","_v$44","_v$45","_v$46","_v$47","_v$48","_el$16","_tmpl$9","_el$17","_el$18","_el$20","_el$21","_co$5","_el$22","_el$23","_co$6","checked","checkboxLabel","_v$49","_v$50","_v$51","_v$52","_v$53","MultiSelectField","baseClass","AutocompleteField","_el$24","_tmpl$0","index","_el$41","_tmpl$15","_el$42","_el$43","_v$62","_v$63","_v$64","_v$54","_v$55","_v$56","_el$25","_tmpl$1","_v$57","_v$58","_v$59","_v$60","_v$61","_el$26","_tmpl$10","_el$27","_el$28","_el$29","_co$7","helpText","_el$30","_tmpl$11","_el$31","_tmpl$12","open","setOpen","createSignal","filter","setFilter","toggle","val","current","includes","v","removeChip","getLabel","find","filteredOptions","q","toLowerCase","_el$44","_tmpl$20","_el$59","_el$60","_co$13","_el$46","_el$47","_el$61","_el$62","_co$14","length","_el$45","_tmpl$16","_el$63","_tmpl$21","_el$65","_el$66","_co$15","_el$64","$$click","_c$","_el$48","_tmpl$19","_el$57","_el$58","_co$12","_el$51","_el$53","_el$54","_co$10","_el$55","_el$56","_co$11","_el$49","_tmpl$17","_el$50","_el$67","_tmpl$22","_el$68","_el$69","_tmpl$18","_v$65","_v$66","_v$67","query","setQuery","suggestions","setSuggestions","isOpen","setIsOpen","selectedLabels","setSelectedLabels","Map","debounceTimer","isMultiple","selectedValues","Array","isArray","minChars","debounceMs","fetchSuggestions","apiUrl","searchParam","params","URLSearchParams","extraParams","k","Object","entries","set","res","fetch","ok","data","json","items","results","features","labelField","valueField","slice","map","item","String","handleInput","setTimeout","selectSuggestion","prev","m","delete","get","onCleanup","_el$70","_tmpl$24","_el$74","_el$75","_co$16","_el$72","_el$76","_el$77","_co$17","_el$71","_el$78","_el$80","_el$81","_co$18","_el$79","_el$73","_tmpl$23","isSelected","_el$82","_tmpl$26","_el$84","_el$85","_co$19","_el$86","_el$87","_co$20","$$mousedown","preventDefault","_tmpl$25","_v$71","_v$72","_v$68","_v$69","_v$70","_$delegateEvents"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { delegateEvents, createComponent, getNextElement, template, getNextMarker, insert, effect, setAttribute, memo, setProperty, className, runHydrationEvents } from "solid-js/web";
|
|
2
2
|
import { Show, Switch, Match, For, createSignal, onCleanup } from "solid-js";
|
|
3
3
|
import { useConditionalField } from "../hooks/useConditionalField.js";
|
|
4
|
-
var _tmpl$ = /* @__PURE__ */ template(`<span class="text-red-500 ml-1"aria-hidden=true>*`), _tmpl$2 = /* @__PURE__ */ template(`<label class="block text-sm font-medium text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$3 = /* @__PURE__ */ template(`<input>`), _tmpl$4 = /* @__PURE__ */ template(`<input type=number>`), _tmpl$5 = /* @__PURE__ */ template(`<input type=date>`), _tmpl$6 = /* @__PURE__ */ template(`<textarea>`), _tmpl$7 = /* @__PURE__ */ template(`<option value disabled>`), _tmpl$8 = /* @__PURE__ */ template(`<select><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ template(`<label class="flex items-center gap-2 cursor-pointer"><input type=checkbox class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700"><span class="text-sm text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$0 = /* @__PURE__ */ template(`<div class=space-y-2 role=radiogroup>`), _tmpl$1 = /* @__PURE__ */ template(`<input type=text>`), _tmpl$10 = /* @__PURE__ */ template(`<p class="text-xs text-amber-500 mt-0.5">Unknown field type: <!$><!/>`), _tmpl$11 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400">`), _tmpl$12 = /* @__PURE__ */ template(`<p role=alert class="text-xs text-red-600 dark:text-red-400">`), _tmpl$13 = /* @__PURE__ */ template(`<div class=space-y-1><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$14 = /* @__PURE__ */ template(`<option>`), _tmpl$15 = /* @__PURE__ */ template(`<label class="flex items-center gap-2 cursor-pointer"><input type=radio class="w-4 h-4 border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"><span class="text-sm text-gray-700 dark:text-gray-300">`), _tmpl$16 = /* @__PURE__ */ template(`<div class="flex flex-wrap gap-1 mb-1">`), _tmpl$17 = /* @__PURE__ */ template(`<div class="p-2 border-b border-gray-200 dark:border-gray-600"><input type=text placeholder=Filter... class="w-full px-2 py-1 text-sm border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:border-blue-400 outline-none"autofocus>`), _tmpl$18 = /* @__PURE__ */ template(`<p class="px-3 py-2 text-sm text-gray-400">No matches`), _tmpl$19 = /* @__PURE__ */ template(`<div class="absolute z-
|
|
4
|
+
var _tmpl$ = /* @__PURE__ */ template(`<span class="text-red-500 ml-1"aria-hidden=true>*`), _tmpl$2 = /* @__PURE__ */ template(`<label class="block text-sm font-medium text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$3 = /* @__PURE__ */ template(`<input>`), _tmpl$4 = /* @__PURE__ */ template(`<input type=number>`), _tmpl$5 = /* @__PURE__ */ template(`<input type=date>`), _tmpl$6 = /* @__PURE__ */ template(`<textarea>`), _tmpl$7 = /* @__PURE__ */ template(`<option value disabled>`), _tmpl$8 = /* @__PURE__ */ template(`<select><!$><!/><!$><!/>`), _tmpl$9 = /* @__PURE__ */ template(`<label class="flex items-center gap-2 cursor-pointer"><input type=checkbox class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700"><span class="text-sm text-gray-700 dark:text-gray-300"><!$><!/><!$><!/>`), _tmpl$0 = /* @__PURE__ */ template(`<div class=space-y-2 role=radiogroup>`), _tmpl$1 = /* @__PURE__ */ template(`<input type=text>`), _tmpl$10 = /* @__PURE__ */ template(`<p class="text-xs text-amber-500 mt-0.5">Unknown field type: <!$><!/>`), _tmpl$11 = /* @__PURE__ */ template(`<p class="text-xs text-gray-500 dark:text-gray-400">`), _tmpl$12 = /* @__PURE__ */ template(`<p role=alert class="text-xs text-red-600 dark:text-red-400">`), _tmpl$13 = /* @__PURE__ */ template(`<div class=space-y-1><!$><!/><!$><!/><!$><!/><!$><!/>`), _tmpl$14 = /* @__PURE__ */ template(`<option>`), _tmpl$15 = /* @__PURE__ */ template(`<label class="flex items-center gap-2 cursor-pointer"><input type=radio class="w-4 h-4 border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"><span class="text-sm text-gray-700 dark:text-gray-300">`), _tmpl$16 = /* @__PURE__ */ template(`<div class="flex flex-wrap gap-1 mb-1">`), _tmpl$17 = /* @__PURE__ */ template(`<div class="p-2 border-b border-gray-200 dark:border-gray-600 flex-shrink-0"><input type=text placeholder=Filter... class="w-full px-2 py-1 text-sm border border-gray-200 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:border-blue-400 outline-none"autofocus>`), _tmpl$18 = /* @__PURE__ */ template(`<p class="px-3 py-2 text-sm text-gray-400">No matches`), _tmpl$19 = /* @__PURE__ */ template(`<div class="absolute z-50 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg"style=max-height:320px;display:flex;flex-direction:column><!$><!/><div style=overflow-y:auto;flex:1;-webkit-overflow-scrolling:touch><!$><!/><!$><!/>`), _tmpl$20 = /* @__PURE__ */ template(`<div class=relative><!$><!/><button type=button><span></span><svg class="w-4 h-4 text-gray-400"fill=none viewBox="0 0 24 24"stroke=currentColor><path stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M19 9l-7 7-7-7"></path></svg></button><!$><!/>`), _tmpl$21 = /* @__PURE__ */ template(`<span class="inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded-full"><!$><!/><button type=button class="hover:text-blue-900 dark:hover:text-blue-100">×`), _tmpl$22 = /* @__PURE__ */ template(`<label class="flex items-center gap-2 px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer text-sm"><input type=checkbox class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"><span class="text-gray-900 dark:text-white">`), _tmpl$23 = /* @__PURE__ */ template(`<div class="absolute z-20 mt-1 w-full bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-600 rounded-md shadow-lg max-h-72 overflow-y-auto">`), _tmpl$24 = /* @__PURE__ */ template(`<div class=relative><!$><!/><input type=text autocomplete=off><!$><!/>`), _tmpl$25 = /* @__PURE__ */ template(`<span class="ml-2 text-xs">✓`), _tmpl$26 = /* @__PURE__ */ template(`<button type=button><!$><!/><!$><!/>`);
|
|
5
5
|
const FormFieldRenderer = (props) => {
|
|
6
6
|
const {
|
|
7
7
|
isVisible
|