@seed-ship/mcp-ui-solid 2.6.1 → 2.6.3
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/FormFieldRenderer.cjs +214 -89
- package/dist/components/FormFieldRenderer.cjs.map +1 -1
- package/dist/components/FormFieldRenderer.d.ts.map +1 -1
- package/dist/components/FormFieldRenderer.js +214 -89
- package/dist/components/FormFieldRenderer.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FormFieldRenderer.tsx +134 -38
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormFieldRenderer.js","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 </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\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 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())}\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 */}\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 max-h-48 overflow-auto\">\n <For each={props.field.options}>\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 </div>\n </Show>\n </div>\n )\n}\n\n// ─── Autocomplete with API fetch ─────────────────────────────\n\nconst AutocompleteField: Component<{\n field: FormFieldParams\n value: string\n onChange: (value: 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 [selectedLabel, setSelectedLabel] = createSignal('')\n let debounceTimer: ReturnType<typeof setTimeout> | null = null\n\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 setSelectedLabel('')\n props.onChange('')\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 props.onChange(item.value)\n setSelectedLabel(item.label)\n setQuery(item.label)\n setIsOpen(false)\n setSuggestions([])\n }\n\n onCleanup(() => { if (debounceTimer) clearTimeout(debounceTimer) })\n\n return (\n <div class=\"relative\">\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={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-48 overflow-auto\">\n <For each={suggestions()}>\n {(item) => (\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 text-gray-900 dark:text-white\"\n >\n {item.label}\n </button>\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$11","_el$27","firstChild","_el$28","_co$7","_$getNextMarker","nextSibling","_el$29","_el$30","_co$8","_el$31","_el$32","_co$9","_el$33","_el$34","_co$0","_$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$35","_tmpl$12","_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$36","_tmpl$13","_el$37","_el$38","_v$57","_v$58","_v$59","_v$54","_v$55","_v$56","helpText","_el$25","_tmpl$1","_el$26","_tmpl$10","open","setOpen","createSignal","toggle","val","current","includes","filter","v","removeChip","getLabel","find","_el$39","_tmpl$16","_el$44","_el$45","_co$1","_el$41","_el$42","_el$46","_el$47","_co$10","length","_el$40","_tmpl$14","_el$48","_tmpl$17","_el$50","_el$51","_co$11","_el$49","$$click","_c$","_el$43","_tmpl$15","_el$52","_tmpl$18","_el$53","_el$54","_v$60","_v$61","_v$62","query","setQuery","suggestions","setSuggestions","isOpen","setIsOpen","selectedLabel","setSelectedLabel","debounceTimer","minChars","debounceMs","fetchSuggestions","q","apiUrl","searchParam","params","URLSearchParams","extraParams","k","Object","entries","set","res","fetch","ok","data","json","items","Array","isArray","results","features","labelField","valueField","slice","map","item","String","handleInput","setTimeout","selectSuggestion","onCleanup","_el$55","_tmpl$19","_el$56","_el$58","_el$59","_co$12","_el$57","_el$60","_tmpl$20","$$mousedown","preventDefault","_v$63","_v$64","_v$65","_$delegateEvents"],"mappings":";;;;AAsBO,MAAMA,oBAAwDC,CAAAA,UAAU;AAE7E,QAAM;AAAA,IAAEC;AAAAA,EAAAA,IAAcC,oBAAoB;AAAA,IACxCC,WAAWH,MAAMI,MAAMC;AAAAA,IACvBC,UAAUN,MAAMM,aAAa,OAAO;EAAC,CACtC;AAED,QAAMC,iBAAiBA,MAAM;AAAA;AAAA;AAAA;AAAA,MAIzBP,MAAMQ,QACJ,sCACA,sCAAsC;AAAA;AAAA;AAI5C,QAAMC,UAAUA,MAAM,SAAST,MAAMI,MAAMM,IAAI;AAC/C,QAAMC,UAAUA,MAAM,GAAGX,MAAMI,MAAMM,IAAI;AAEzC,SAAAE,gBACGC,MAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEb,UAAAA;AAAAA,IAAW;AAAA,IAAA,IAAAc,WAAA;AAAA,UAAAC,OAAAC,eAAAC,QAAA,GAAAC,SAAAH,KAAAI,YAAA,CAAAC,QAAAC,KAAA,IAAAC,cAAAJ,OAAAK,WAAA,GAAAC,SAAAJ,OAAAG,aAAA,CAAAE,QAAAC,KAAA,IAAAJ,cAAAE,OAAAD,WAAA,GAAAI,SAAAF,OAAAF,aAAA,CAAAK,QAAAC,KAAA,IAAAP,cAAAK,OAAAJ,WAAA,GAAAO,SAAAF,OAAAL,aAAA,CAAAQ,QAAAC,KAAA,IAAAV,cAAAQ,OAAAP,WAAA;AAAAU,aAAAlB,MAAAJ,gBAEpBC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEqB,KAAA,MAAA,CAAA,CAAAnC,MAAMI,MAAMgC,KAAK,EAAA,KAAIpC,MAAMI,MAAMiC,SAAS;AAAA,QAAU;AAAA,QAAA,IAAAtB,WAAA;AAAA,cAAAuB,QAAArB,eAAAsB,OAAA,GAAAC,QAAAF,MAAAlB,YAAA,CAAAqB,OAAAC,IAAA,IAAAnB,cAAAiB,MAAAhB,WAAA,GAAAmB,QAAAF,MAAAjB,aAAA,CAAAoB,OAAAC,KAAA,IAAAtB,cAAAoB,MAAAnB,WAAA;AAAAU,iBAAAI,OAAA,MAK3DtC,MAAMI,MAAMgC,OAAKK,OAAAC,IAAA;AAAAR,iBAAAI,OAAA1B,gBACjBC,MAAI;AAAA,YAAA,IAACC,OAAI;AAAA,qBAAEd,MAAMI,MAAM0C;AAAAA,YAAQ;AAAA,YAAA,IAAA/B,WAAA;AAAA,qBAAAE,eAAA8B,MAAA;AAAA,YAAA;AAAA,UAAA,CAAA,GAAAH,OAAAC,KAAA;AAAAG,uBAAAC,aAAAX,OAAA,OAJ3B7B,QAAAA,CAAS,CAAA;AAAA,iBAAA6B;AAAAA,QAAA;AAAA,MAAA,CAAA,GAAAjB,QAAAC,KAAA;AAAAY,aAAAlB,MAAAJ,gBAUjBsC,QAAM;AAAA,QAAA,IAAAnC,WAAA;AAAA,iBAAA,CAAAH,gBAEJuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS,UAAUrC,MAAMI,MAAMiC,SAAS,WAAWrC,MAAMI,MAAMiC,SAAS;AAAA,YAAU;AAAA,YAAA,IAAAtB,WAAA;AAAA,kBAAAqC,QAAAnC,eAAAoC,OAAA;AAAAD,oBAAAE,UAM7FC,CAAAA,MAAMvD,MAAMwD,SAASD,EAAEE,cAAcC,KAAK;AAACV,qBAAAW,CAAAA,QAAA;AAAA,oBAAAC,MAJjDnD,WAASoD,OACP7D,MAAMI,MAAMiC,MAAIyB,OAChB9D,MAAMI,MAAMM,MAAIqD,OAGT/D,MAAMI,MAAM4D,aAAWC,OAC1BjE,MAAMkE,UAAQC,OACdnE,MAAMI,MAAM0C,UAAQsB,OACnBpE,MAAMI,MAAMiE,WAASC,OACrBtE,MAAMI,MAAMmE,WAASC,OACvBxE,MAAMI,MAAMqE,SAAOC,OACd,CAAC,CAAC1E,MAAMQ,OAAKmE,OACT3E,MAAMQ,QAAQG,YAAYiE,QAASC,QAC9CtE,eAAAA;AAAgBqD,wBAAAD,IAAAJ,KAAAN,aAAAG,OAAA,MAAAO,IAAAJ,IAAAK,GAAA;AAAAC,yBAAAF,IAAAmB,KAAA7B,aAAAG,OAAA,QAAAO,IAAAmB,IAAAjB,IAAA;AAAAC,yBAAAH,IAAAoB,KAAA9B,aAAAG,OAAA,QAAAO,IAAAoB,IAAAjB,IAAA;AAAAC,yBAAAJ,IAAAqB,KAAA/B,aAAAG,OAAA,eAAAO,IAAAqB,IAAAjB,IAAA;AAAAE,yBAAAN,IAAAsB,KAAAC,YAAA9B,OAAA,YAAAO,IAAAsB,IAAAhB,IAAA;AAAAE,yBAAAR,IAAAwB,KAAAD,YAAA9B,OAAA,YAAAO,IAAAwB,IAAAhB,IAAA;AAAAC,yBAAAT,IAAAyB,KAAAnC,aAAAG,OAAA,aAAAO,IAAAyB,IAAAhB,IAAA;AAAAE,yBAAAX,IAAA0B,KAAApC,aAAAG,OAAA,aAAAO,IAAA0B,IAAAf,IAAA;AAAAE,yBAAAb,IAAA2B,KAAArC,aAAAG,OAAA,WAAAO,IAAA2B,IAAAd,IAAA;AAAAE,yBAAAf,IAAA4B,KAAAtC,aAAAG,OAAA,gBAAAO,IAAA4B,IAAAb,IAAA;AAAAC,yBAAAhB,IAAA6B,KAAAvC,aAAAG,OAAA,oBAAAO,IAAA6B,IAAAb,IAAA;AAAAE,0BAAAlB,IAAA8B,KAAAC,UAAAtC,OAAAO,IAAA8B,IAAAZ,KAAA;AAAA,uBAAAlB;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,gBAAAI,GAAAJ;AAAAA,gBAAAK,GAAAL;AAAAA,gBAAAO,GAAAP;AAAAA,gBAAAQ,GAAAR;AAAAA,gBAAAS,GAAAT;AAAAA,gBAAAU,GAAAV;AAAAA,gBAAAW,GAAAX;AAAAA,gBAAAY,GAAAZ;AAAAA,gBAAAa,GAAAb;AAAAA,cAAAA,CAAA;AAAA5B,qBAAA,MAAAkC,YAAA9B,gBAVhBpD,MAAM0D,SAAS,EAAE,CAAA;AAAAiC,iCAAAA;AAAA,qBAAAvC;AAAAA,YAAA;AAAA,UAAA,CAAA,GAAAxC,gBAe3BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS;AAAA,YAAQ;AAAA,YAAA,IAAAtB,WAAA;AAAA,kBAAA6E,QAAA3E,eAAA4E,OAAA;AAAAD,oBAAAtC,UAM5BC,CAAAA,MAAMvD,MAAMwD,SAASD,EAAEE,cAAcC,UAAU,KAAKkB,SAAYkB,OAAOvC,EAAEE,cAAcC,KAAK,CAAC;AAACV,qBAAAW,CAAAA,QAAA;AAAA,oBAAAoC,QAJpGtF,QAAAA,GAASuF,QAEPhG,MAAMI,MAAMM,MAAIuF,QAGTjG,MAAMI,MAAM4D,aAAWkC,QAC1BlG,MAAMkE,UAAQiC,QACdnG,MAAMI,MAAM0C,UAAQsD,QACzBpG,MAAMI,MAAMiG,KAAGC,QACftG,MAAMI,MAAMmG,KAAGC,QACdxG,MAAMI,MAAMqG,MAAIC,QACR,CAAC,CAAC1G,MAAMQ,OAAKmG,QACT3G,MAAMQ,QAAQG,YAAYiE,QAASgC,QAC9CrG,eAAAA;AAAgBwF,0BAAApC,IAAAJ,KAAAN,aAAA2C,OAAA,MAAAjC,IAAAJ,IAAAwC,KAAA;AAAAC,0BAAArC,IAAAmB,KAAA7B,aAAA2C,OAAA,QAAAjC,IAAAmB,IAAAkB,KAAA;AAAAC,0BAAAtC,IAAAoB,KAAA9B,aAAA2C,OAAA,eAAAjC,IAAAoB,IAAAkB,KAAA;AAAAC,0BAAAvC,IAAAqB,KAAAE,YAAAU,OAAA,YAAAjC,IAAAqB,IAAAkB,KAAA;AAAAC,0BAAAxC,IAAAsB,KAAAC,YAAAU,OAAA,YAAAjC,IAAAsB,IAAAkB,KAAA;AAAAC,0BAAAzC,IAAAwB,KAAAlC,aAAA2C,OAAA,OAAAjC,IAAAwB,IAAAiB,KAAA;AAAAE,0BAAA3C,IAAAyB,KAAAnC,aAAA2C,OAAA,OAAAjC,IAAAyB,IAAAkB,KAAA;AAAAE,0BAAA7C,IAAA0B,KAAApC,aAAA2C,OAAA,QAAAjC,IAAA0B,IAAAmB,KAAA;AAAAE,0BAAA/C,IAAA2B,KAAArC,aAAA2C,OAAA,gBAAAjC,IAAA2B,IAAAoB,KAAA;AAAAC,0BAAAhD,IAAA4B,KAAAtC,aAAA2C,OAAA,oBAAAjC,IAAA4B,IAAAoB,KAAA;AAAAC,0BAAAjD,IAAA6B,KAAAE,UAAAE,OAAAjC,IAAA6B,IAAAoB,KAAA;AAAA,uBAAAjD;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,gBAAAI,GAAAJ;AAAAA,gBAAAK,GAAAL;AAAAA,gBAAAO,GAAAP;AAAAA,gBAAAQ,GAAAR;AAAAA,gBAAAS,GAAAT;AAAAA,gBAAAU,GAAAV;AAAAA,gBAAAW,GAAAX;AAAAA,gBAAAY,GAAAZ;AAAAA,cAAAA,CAAA;AAAA5B,qBAAA,MAAAkC,YAAAU,gBAVhB5F,MAAM0D,SAAS,EAAE,CAAA;AAAAiC,iCAAAA;AAAA,qBAAAC;AAAAA,YAAA;AAAA,UAAA,CAAA,GAAAhF,gBAe3BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS;AAAA,YAAM;AAAA,YAAA,IAAAtB,WAAA;AAAA,kBAAA8F,QAAA5F,eAAA6F,OAAA;AAAAD,oBAAAvD,UAM1BC,CAAAA,MAAMvD,MAAMwD,SAASD,EAAEE,cAAcC,KAAK;AAACV,qBAAAW,CAAAA,QAAA;AAAA,oBAAAoD,QAJjDtG,QAAAA,GAASuG,QAEPhH,MAAMI,MAAMM,MAAIuG,QAGZjH,MAAMkE,UAAQgD,QACdlH,MAAMI,MAAM0C,UAAQqE,QACzBnH,MAAMI,MAAMgH,SAAOC,QACnBrH,MAAMI,MAAMkH,SAAOC,QACV,CAAC,CAACvH,MAAMQ,OAAKgH,QACTxH,MAAMQ,QAAQG,QAAAA,IAAYiE,QAAS6C,QAC9ClH,eAAAA;AAAgBwG,0BAAApD,IAAAJ,KAAAN,aAAA4D,OAAA,MAAAlD,IAAAJ,IAAAwD,KAAA;AAAAC,0BAAArD,IAAAmB,KAAA7B,aAAA4D,OAAA,QAAAlD,IAAAmB,IAAAkC,KAAA;AAAAC,0BAAAtD,IAAAoB,KAAAG,YAAA2B,OAAA,YAAAlD,IAAAoB,IAAAkC,KAAA;AAAAC,0BAAAvD,IAAAqB,KAAAE,YAAA2B,OAAA,YAAAlD,IAAAqB,IAAAkC,KAAA;AAAAC,0BAAAxD,IAAAsB,KAAAhC,aAAA4D,OAAA,OAAAlD,IAAAsB,IAAAkC,KAAA;AAAAE,0BAAA1D,IAAAwB,KAAAlC,aAAA4D,OAAA,OAAAlD,IAAAwB,IAAAkC,KAAA;AAAAE,0BAAA5D,IAAAyB,KAAAnC,aAAA4D,OAAA,gBAAAlD,IAAAyB,IAAAmC,KAAA;AAAAC,0BAAA7D,IAAA0B,KAAApC,aAAA4D,OAAA,oBAAAlD,IAAA0B,IAAAmC,KAAA;AAAAC,0BAAA9D,IAAA2B,KAAAI,UAAAmB,OAAAlD,IAAA2B,IAAAmC,KAAA;AAAA,uBAAA9D;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,gBAAAI,GAAAJ;AAAAA,gBAAAK,GAAAL;AAAAA,gBAAAO,GAAAP;AAAAA,gBAAAQ,GAAAR;AAAAA,gBAAAS,GAAAT;AAAAA,gBAAAU,GAAAV;AAAAA,cAAAA,CAAA;AAAA5B,qBAAA,MAAAkC,YAAA2B,gBARhB7G,MAAM0D,SAAS,EAAE,CAAA;AAAAiC,iCAAAA;AAAA,qBAAAkB;AAAAA,YAAA;AAAA,UAAA,CAAA,GAAAjG,gBAa3BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS;AAAA,YAAU;AAAA,YAAA,IAAAtB,WAAA;AAAA,kBAAA2G,QAAAzG,eAAA0G,OAAA;AAAAD,oBAAApE,UAK9BC,CAAAA,MAAMvD,MAAMwD,SAASD,EAAEE,cAAcC,KAAK;AAACV,qBAAAW,CAAAA,QAAA;AAAA,oBAAAiE,QAHjDnH,QAAAA,GAASoH,QACP7H,MAAMI,MAAMM,MAAIoH,QAGT9H,MAAMI,MAAM4D,aAAW+D,QAC1B/H,MAAMkE,UAAQ8D,QACdhI,MAAMI,MAAM0C,UAAQmF,QACxBjI,MAAMI,MAAM8H,QAAQ,GAACC,QAChBnI,MAAMI,MAAMiE,WAAS+D,QACrBpI,MAAMI,MAAMmE,WAAS8D,QAClB,CAAC,CAACrI,MAAMQ,OAAK8H,QACTtI,MAAMQ,QAAQG,YAAYiE,QAAS2D,QAC9ChI,eAAAA;AAAgBqH,0BAAAjE,IAAAJ,KAAAN,aAAAyE,OAAA,MAAA/D,IAAAJ,IAAAqE,KAAA;AAAAC,0BAAAlE,IAAAmB,KAAA7B,aAAAyE,OAAA,QAAA/D,IAAAmB,IAAA+C,KAAA;AAAAC,0BAAAnE,IAAAoB,KAAA9B,aAAAyE,OAAA,eAAA/D,IAAAoB,IAAA+C,KAAA;AAAAC,0BAAApE,IAAAqB,KAAAE,YAAAwC,OAAA,YAAA/D,IAAAqB,IAAA+C,KAAA;AAAAC,0BAAArE,IAAAsB,KAAAC,YAAAwC,OAAA,YAAA/D,IAAAsB,IAAA+C,KAAA;AAAAC,0BAAAtE,IAAAwB,KAAAlC,aAAAyE,OAAA,QAAA/D,IAAAwB,IAAA8C,KAAA;AAAAE,0BAAAxE,IAAAyB,KAAAnC,aAAAyE,OAAA,aAAA/D,IAAAyB,IAAA+C,KAAA;AAAAC,0BAAAzE,IAAA0B,KAAApC,aAAAyE,OAAA,aAAA/D,IAAA0B,IAAA+C,KAAA;AAAAC,0BAAA1E,IAAA2B,KAAArC,aAAAyE,OAAA,gBAAA/D,IAAA2B,IAAA+C,KAAA;AAAAC,0BAAA3E,IAAA4B,KAAAtC,aAAAyE,OAAA,oBAAA/D,IAAA4B,IAAA+C,KAAA;AAAAC,0BAAA5E,IAAA6B,KAAAE,UAAAgC,OAAA/D,IAAA6B,IAAA+C,KAAA;AAAA,uBAAA5E;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,gBAAAI,GAAAJ;AAAAA,gBAAAK,GAAAL;AAAAA,gBAAAO,GAAAP;AAAAA,gBAAAQ,GAAAR;AAAAA,gBAAAS,GAAAT;AAAAA,gBAAAU,GAAAV;AAAAA,gBAAAW,GAAAX;AAAAA,gBAAAY,GAAAZ;AAAAA,cAAAA,CAAA;AAAA5B,qBAAA,MAAAkC,YAAAwC,gBAVhB1H,MAAM0D,SAAS,EAAE,CAAA;AAAAiC,iCAAAA;AAAA,qBAAA+B;AAAAA,YAAA;AAAA,UAAA,CAAA,GAAA9G,gBAe3BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEqB,KAAA,MAAAnC,MAAMI,MAAMiC,SAAS,QAAQ,OAAI,CAACrC,MAAMI,MAAMoI;AAAAA,YAAQ;AAAA,YAAA,IAAAzH,WAAA;AAAA,kBAAA0H,SAAAxH,eAAAyH,OAAA,GAAAC,SAAAF,OAAArH,YAAA,CAAAwH,QAAAC,KAAA,IAAAtH,cAAAoH,OAAAnH,WAAA,GAAAsH,SAAAF,OAAApH,aAAA,CAAAuH,QAAAC,KAAA,IAAAzH,cAAAuH,OAAAtH,WAAA;AAAAiH,qBAAAQ,iBAAA,UAKpD1F,CAAAA,MAAMvD,MAAMwD,SAASD,EAAEE,cAAcC,KAAK,CAAC;AAAAxB,qBAAAuG,QAAA7H,gBAOrDC,MAAI;AAAA,gBAAA,IAACC,OAAI;AAAA,yBAAEd,MAAMI,MAAM4D;AAAAA,gBAAW;AAAA,gBAAA,IAAAjD,WAAA;AAAA,sBAAAmI,SAAAjI,eAAAkI,OAAA;AAAAjH,yBAAAgH,QAAA,MACNlJ,MAAMI,MAAM4D,WAAW;AAAA,yBAAAkF;AAAAA,gBAAA;AAAA,cAAA,CAAA,GAAAN,QAAAC,KAAA;AAAA3G,qBAAAuG,QAAA7H,gBAEnDwI,KAAG;AAAA,gBAAA,IAACC,OAAI;AAAA,yBAAErJ,MAAMI,MAAMkJ;AAAAA,gBAAO;AAAA,gBAAAvI,UAC1BwI,aAAM,MAAA;AAAA,sBAAAC,SAAAvI,eAAAwI,QAAA;AAAAvH,yBAAAsH,QAAA,MAEHD,OAAOnH,KAAK;AAAAY,+BAAAkC,YAAAsE,QAAA,YADwBD,OAAOrF,QAAQ,CAAA;AAAAlB,+BAAAkC,YAAAsE,QAAA,SAAvCD,OAAO7F,KAAK,CAAA;AAAA,yBAAA8F;AAAAA,gBAAA,GAAA;AAAA,cAAA,CAG5B,GAAAT,QAAAC,KAAA;AAAAhG,qBAAAW,CAAAA,QAAA;AAAA,oBAAA+F,QAlBCjJ,WAASkJ,QACP3J,MAAMI,MAAMM,MAAIkJ,QAGZ5J,MAAMkE,UAAQ2F,QACd7J,MAAMI,MAAM0C,UAAQgH,QAChB,CAAC,CAAC9J,MAAMQ,OAAKuJ,QACT/J,MAAMQ,QAAQG,QAAAA,IAAYiE,QAASoF,QAC9CzJ,eAAAA;AAAgBmJ,0BAAA/F,IAAAJ,KAAAN,aAAAwF,QAAA,MAAA9E,IAAAJ,IAAAmG,KAAA;AAAAC,0BAAAhG,IAAAmB,KAAA7B,aAAAwF,QAAA,QAAA9E,IAAAmB,IAAA6E,KAAA;AAAAC,0BAAAjG,IAAAoB,KAAAG,YAAAuD,QAAA,YAAA9E,IAAAoB,IAAA6E,KAAA;AAAAC,0BAAAlG,IAAAqB,KAAAE,YAAAuD,QAAA,YAAA9E,IAAAqB,IAAA6E,KAAA;AAAAC,0BAAAnG,IAAAsB,KAAAhC,aAAAwF,QAAA,gBAAA9E,IAAAsB,IAAA6E,KAAA;AAAAC,0BAAApG,IAAAwB,KAAAlC,aAAAwF,QAAA,oBAAA9E,IAAAwB,IAAA4E,KAAA;AAAAC,0BAAArG,IAAAyB,KAAAM,UAAA+C,QAAA9E,IAAAyB,IAAA4E,KAAA;AAAA,uBAAArG;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,gBAAAI,GAAAJ;AAAAA,gBAAAK,GAAAL;AAAAA,gBAAAO,GAAAP;AAAAA,gBAAAQ,GAAAR;AAAAA,cAAAA,CAAA;AAAA5B,qBAAA,MAAAkC,YAAAuD,iBANhBzI,MAAM0D,SAAS,EAAE,CAAA;AAAA,qBAAA+E;AAAAA,YAAA;AAAA,UAAA,CAAA,GAAA7H,gBAsB3BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS;AAAA,YAAU;AAAA,YAAA,IAAAtB,WAAA;AAAA,kBAAAkJ,SAAAhJ,eAAAiJ,OAAA,GAAAC,SAAAF,OAAA7I,YAAAgJ,SAAAD,OAAA3I,aAAA6I,SAAAD,OAAAhJ,YAAA,CAAAkJ,QAAAC,KAAA,IAAAhJ,cAAA8I,OAAA7I,WAAA,GAAAgJ,SAAAF,OAAA9I,aAAA,CAAAiJ,QAAAC,KAAA,IAAAnJ,cAAAiJ,OAAAhJ,WAAA;AAAA2I,qBAAAlB,iBAAA,UAO3B1F,CAAAA,MAAMvD,MAAMwD,SAASD,EAAEE,cAAckH,OAAO,CAAC;AAAAzI,qBAAAkI,QAAA,MAOvDpK,MAAMI,MAAMwK,iBAAiB5K,MAAMI,MAAMgC,OAAKkI,QAAAC,KAAA;AAAArI,qBAAAkI,QAAAxJ,gBAC9CC,MAAI;AAAA,gBAAA,IAACC,OAAI;AAAA,yBAAEd,MAAMI,MAAM0C;AAAAA,gBAAQ;AAAA,gBAAA,IAAA/B,WAAA;AAAA,yBAAAE,eAAA8B,MAAA;AAAA,gBAAA;AAAA,cAAA,CAAA,GAAA0H,QAAAC,KAAA;AAAA1H,qBAAAW,CAAAA,QAAA;AAAA,oBAAAkH,QAZ5BpK,QAAAA,GAASqK,QAEP9K,MAAMI,MAAMM,MAAIqK,QAGZ/K,MAAMkE,UAAQ8G,QACV,CAAC,CAAChL,MAAMQ,OAAKyK,QACTjL,MAAMQ,QAAQG,YAAYiE;AAASiG,0BAAAlH,IAAAJ,KAAAN,aAAAkH,QAAA,MAAAxG,IAAAJ,IAAAsH,KAAA;AAAAC,0BAAAnH,IAAAmB,KAAA7B,aAAAkH,QAAA,QAAAxG,IAAAmB,IAAAgG,KAAA;AAAAC,0BAAApH,IAAAoB,KAAAG,YAAAiF,QAAA,YAAAxG,IAAAoB,IAAAgG,KAAA;AAAAC,0BAAArH,IAAAqB,KAAA/B,aAAAkH,QAAA,gBAAAxG,IAAAqB,IAAAgG,KAAA;AAAAC,0BAAAtH,IAAAsB,KAAAhC,aAAAkH,QAAA,oBAAAxG,IAAAsB,IAAAgG,KAAA;AAAA,uBAAAtH;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,gBAAAI,GAAAJ;AAAAA,gBAAAK,GAAAL;AAAAA,cAAAA,CAAA;AAAA5B,qBAAA,MAAAkC,YAAAiF,mBAJ5CnK,MAAM0D,SAAS,KAAK,CAAA;AAAA,qBAAAuG;AAAAA,YAAA;AAAA,UAAA,CAAA,GAAArJ,gBAiBlCuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEqB,KAAA,MAAAnC,MAAMI,MAAMiC,SAAS,QAAQ,EAAA,KAAIrC,MAAMI,MAAMoI;AAAAA,YAAQ;AAAA,YAAA,IAAAzH,WAAA;AAAA,qBAAAH,gBAC/DsK,kBAAgB;AAAA,gBAAA,IACf9K,QAAK;AAAA,yBAAEJ,MAAMI;AAAAA,gBAAK;AAAA,gBAAA,IAClBsD,QAAK;AAAA,yBAAE1D,MAAM0D,SAAS,CAAA;AAAA,gBAAE;AAAA,gBAAA,IACxBF,WAAQ;AAAA,yBAAExD,MAAMwD;AAAAA,gBAAQ;AAAA,gBAAA,IACxBU,WAAQ;AAAA,yBAAElE,MAAMkE;AAAAA,gBAAQ;AAAA,gBAAA,IACxBiH,YAAS;AAAA,yBAAE5K,eAAAA;AAAAA,gBAAgB;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA,GAAAK,gBAK9BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS;AAAA,YAAc;AAAA,YAAA,IAAAtB,WAAA;AAAA,qBAAAH,gBAC7CwK,mBAAiB;AAAA,gBAAA,IAChBhL,QAAK;AAAA,yBAAEJ,MAAMI;AAAAA,gBAAK;AAAA,gBAAA,IAClBsD,QAAK;AAAA,yBAAE1D,MAAM0D,SAAS;AAAA,gBAAE;AAAA,gBAAA,IACxBF,WAAQ;AAAA,yBAAExD,MAAMwD;AAAAA,gBAAQ;AAAA,gBAAA,IACxBU,WAAQ;AAAA,yBAAElE,MAAMkE;AAAAA,gBAAQ;AAAA,gBAAA,IACxBiH,YAAS;AAAA,yBAAE5K,eAAAA;AAAAA,gBAAgB;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA,GAAAK,gBAK9BuC,OAAK;AAAA,YAAA,IAACrC,OAAI;AAAA,qBAAEd,MAAMI,MAAMiC,SAAS;AAAA,YAAO;AAAA,YAAA,IAAAtB,WAAA;AAAA,kBAAAsK,SAAApK,eAAAqK,OAAA;AAAApJ,qBAAAmJ,QAAAzK,gBAQpCwI,KAAG;AAAA,gBAAA,IAACC,OAAI;AAAA,yBAAErJ,MAAMI,MAAMkJ;AAAAA,gBAAO;AAAA,gBAAAvI,UAC3BA,CAACwI,QAAQgC,WAAK,MAAA;AAAA,sBAAAC,SAAAvK,eAAAwK,QAAA,GAAAC,SAAAF,OAAApK,YAAAuK,SAAAD,OAAAlK;AAAAkK,yBAAAzC,iBAAA,UAQC,MAAMjJ,MAAMwD,SAAS+F,OAAO7F,KAAK,CAAC;AAAAxB,yBAAAyJ,QAAA,MAK3CpC,OAAOnH,KAAK;AAAAY,yBAAAW,CAAAA,QAAA;AAAA,wBAAAiI,QATP5L,MAAMI,MAAMM,MAAImL,QAClB,GAAGpL,QAAAA,CAAS,IAAI8K,OAAO,IAAEO,QAInB9L,MAAMkE,YAAYqF,OAAOrF;AAAQ0H,8BAAAjI,IAAAJ,KAAAN,aAAAyI,QAAA,QAAA/H,IAAAJ,IAAAqI,KAAA;AAAAC,8BAAAlI,IAAAmB,KAAA7B,aAAAyI,QAAA,MAAA/H,IAAAmB,IAAA+G,KAAA;AAAAC,8BAAAnI,IAAAoB,KAAAG,YAAAwG,QAAA,YAAA/H,IAAAoB,IAAA+G,KAAA;AAAA,2BAAAnI;AAAAA,kBAAA,GAAA;AAAA,oBAAAJ,GAAAqB;AAAAA,oBAAAE,GAAAF;AAAAA,oBAAAG,GAAAH;AAAAA,kBAAAA,CAAA;AAAA5B,+BAAAkC,YAAAwG,QAAA,SAHpCnC,OAAO7F,KAAK,CAAA;AAAAV,yBAAA,MAAAkC,YAAAwG,QAAA,WACV1L,MAAM0D,UAAU6F,OAAO7F,KAAK,CAAA;AAAA,yBAAA8H;AAAAA,gBAAA,GAAA;AAAA,cAAA,CAS1C,CAAA;AAAAxI,qBAAAW,CAAAA,QAAA;AAAA,oBAAAoI,QArBc/L,MAAMI,MAAMgC,QAAQ,GAAG3B,QAAAA,CAAS,WAAWmE,QAASoH,QACvD,CAAC,CAAChM,MAAMQ,OAAKyL,QACTjM,MAAMQ,QAAQG,YAAYiE;AAASmH,0BAAApI,IAAAJ,KAAAN,aAAAoI,QAAA,mBAAA1H,IAAAJ,IAAAwI,KAAA;AAAAC,0BAAArI,IAAAmB,KAAA7B,aAAAoI,QAAA,gBAAA1H,IAAAmB,IAAAkH,KAAA;AAAAC,0BAAAtI,IAAAoB,KAAA9B,aAAAoI,QAAA,oBAAA1H,IAAAoB,IAAAkH,KAAA;AAAA,uBAAAtI;AAAAA,cAAA,GAAA;AAAA,gBAAAJ,GAAAqB;AAAAA,gBAAAE,GAAAF;AAAAA,gBAAAG,GAAAH;AAAAA,cAAAA,CAAA;AAAA,qBAAAyG;AAAAA,YAAA;AAAA,UAAA,CAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA3J,QAAAC,KAAA;AAAAO,aAAAlB,MAAAJ,gBAyB1DC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEqB,KAAA,MAAA,CAAA,CAAAnC,MAAMI,MAAM8L,QAAQ,EAAA,KAAI,CAAClM,MAAMQ;AAAAA,QAAK;AAAA,QAAA,IAAAO,WAAA;AAAA,cAAAoL,SAAAlL,eAAAmL,OAAA;AAAAlK,iBAAAiK,QAAA,MACOnM,MAAMI,MAAM8L,QAAQ;AAAA,iBAAAC;AAAAA,QAAA;AAAA,MAAA,CAAA,GAAAtK,QAAAC,KAAA;AAAAI,aAAAlB,MAAAJ,gBAG1EC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEd,MAAMQ;AAAAA,QAAK;AAAA,QAAA,IAAAO,WAAA;AAAA,cAAAsL,SAAApL,eAAAqL,QAAA;AAAApK,iBAAAmK,QAAA,MAElBrM,MAAMQ,KAAK;AAAAwC,uBAAAC,aAAAoJ,QAAA,MADP1L,QAAAA,CAAS,CAAA;AAAA,iBAAA0L;AAAAA,QAAA;AAAA,MAAA,CAAA,GAAArK,QAAAC,KAAA;AAAA,aAAAjB;AAAAA,IAAA;AAAA,EAAA,CAAA;AAOxB;AAIA,MAAMkK,mBAMAlL,CAAAA,UAAU;AACd,QAAM,CAACuM,MAAMC,OAAO,IAAIC,aAAa,KAAK;AAE1C,QAAMC,SAASA,CAACC,QAAgB;AAC9B,UAAMC,UAAU5M,MAAM0D,SAAS,CAAA;AAC/B,QAAIkJ,QAAQC,SAASF,GAAG,GAAG;AACzB3M,YAAMwD,SAASoJ,QAAQE,OAAQC,CAAAA,MAAMA,MAAMJ,GAAG,CAAC;AAAA,IACjD,OAAO;AACL3M,YAAMwD,SAAS,CAAC,GAAGoJ,SAASD,GAAG,CAAC;AAAA,IAClC;AAAA,EACF;AAEA,QAAMK,aAAaA,CAACL,QAAgB;AAClC3M,UAAMwD,UAAUxD,MAAM0D,SAAS,CAAA,GAAIoJ,OAAQC,CAAAA,MAAMA,MAAMJ,GAAG,CAAC;AAAA,EAC7D;AAEA,QAAMM,WAAWA,CAACN,QAAAA;;AAChB3M,8BAAMI,MAAMkJ,YAAZtJ,mBAAqBkN,KAAMlI,CAAAA,MAAMA,EAAEtB,UAAUiJ,SAA7C3M,mBAAmDoC,UAASuK;AAAAA;AAE9D,UAAA,MAAA;AAAA,QAAAQ,SAAAlM,eAAAmM,QAAA,GAAAC,SAAAF,OAAA/L,YAAA,CAAAkM,QAAAC,KAAA,IAAAhM,cAAA8L,OAAA7L,WAAA,GAAAgM,SAAAF,OAAA9L,aAAAiM,SAAAD,OAAApM,YAAAsM,SAAAF,OAAAhM,aAAA,CAAAmM,QAAAC,MAAA,IAAArM,cAAAmM,OAAAlM,WAAA;AAAAU,WAAAiL,QAAAvM,gBAGKC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEd,MAAM0D,MAAMmK,SAAS;AAAA,MAAC;AAAA,MAAA,IAAA9M,WAAA;AAAA,YAAA+M,SAAA7M,eAAA8M,QAAA;AAAA7L,eAAA4L,QAAAlN,gBAE7BwI,KAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAErJ,MAAM0D;AAAAA,UAAK;AAAA,UAAA3C,UAClB4L,UAAG,MAAA;AAAA,gBAAAqB,SAAA/M,eAAAgN,QAAA,GAAAC,SAAAF,OAAA5M,YAAA,CAAA+M,QAAAC,MAAA,IAAA7M,cAAA2M,OAAA1M,WAAA,GAAA6M,SAAAF,OAAA3M;AAAAU,mBAAA8L,QAAA,MAEAf,SAASN,GAAG,GAACwB,QAAAC,MAAA;AAAAC,mBAAAC,UAGH,MAAMtB,WAAWL,GAAG;AAAC3J,mBAAA,MAAAC,aAAAoL,QAAA,cAElB,UAAUpB,SAASN,GAAG,CAAC,EAAE,CAAA;AAAAhH,+BAAAA;AAAA,mBAAAqI;AAAAA,UAAA,GAAA;AAAA,QAAA,CAK1C,CAAA;AAAA,eAAAF;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAR,QAAAC,KAAA;AAAAC,WAAAc,UAQI,MAAM9B,QAAQ,CAACD,MAAM;AAACrK,WAAAuL,SAAA,MAAA;AAAA,UAAAc,MAAApM,KAAA,MAAA,CAAA,CAK5BnC,MAAM0D,MAAMmK,MAAM;AAAA,aAAA,MAAlBU,IAAAA,IACG,GAAGvO,MAAM0D,MAAMmK,MAAM,cACrB7N,MAAMI,MAAM4D,eAAe;AAAA,IAAW,IAAA;AAAA9B,WAAAiL,QAAAvM,gBAQ7CC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEyL,KAAAA;AAAAA,MAAM;AAAA,MAAA,IAAAxL,WAAA;AAAA,YAAAyN,SAAAvN,eAAAwN,QAAA;AAAAvM,eAAAsM,QAAA5N,gBAEbwI,KAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAErJ,MAAMI,MAAMkJ;AAAAA,UAAO;AAAA,UAAAvI,UAC1BwI,aAAM,MAAA;AAAA,gBAAAmF,SAAAzN,eAAA0N,QAAA,GAAAC,SAAAF,OAAAtN,YAAAyN,SAAAD,OAAApN;AAAAoN,mBAAA3F,iBAAA,UAKQ,MAAMyD,OAAOnD,OAAO7F,KAAK,CAAC;AAAAxB,mBAAA2M,QAAA,MAGOtF,OAAOnH,KAAK;AAAAY,yBAAAkC,YAAA0J,QAAA,YAJ7C5O,MAAM0D,SAAS,CAAA,GAAImJ,SAAStD,OAAO7F,KAAK,CAAC,CAAA;AAAA,mBAAAgL;AAAAA,UAAA,GAAA;AAAA,QAAA,CAMxD,CAAA;AAAA,eAAAF;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAb,QAAAC,MAAA;AAAA5K,WAAAW,CAAAA,QAAA;AAAA,UAAAmL,QA3BK9O,MAAMkE,UAAQ6K,QACjB,GAAG/O,MAAMmL,SAAS,gDAA8C6D,QAE1DhP,MAAM0D,MAAMmK,SAAS,kCAAkC;AAAeiB,gBAAAnL,IAAAJ,KAAA2B,YAAAsI,QAAA,YAAA7J,IAAAJ,IAAAuL,KAAA;AAAAC,gBAAApL,IAAAmB,KAAAY,UAAA8H,QAAA7J,IAAAmB,IAAAiK,KAAA;AAAAC,gBAAArL,IAAAoB,KAAAW,UAAA+H,QAAA9J,IAAAoB,IAAAiK,KAAA;AAAA,aAAArL;AAAAA,IAAA,GAAA;AAAA,MAAAJ,GAAAqB;AAAAA,MAAAE,GAAAF;AAAAA,MAAAG,GAAAH;AAAAA,IAAAA,CAAA;AAAAe,uBAAAA;AAAA,WAAAwH;AAAAA,EAAA,GAAA;AA8B3F;AAIA,MAAM/B,oBAMApL,CAAAA,UAAU;AACd,QAAM,CAACiP,OAAOC,QAAQ,IAAIzC,aAAa,EAAE;AACzC,QAAM,CAAC0C,aAAaC,cAAc,IAAI3C,aAAsD,CAAA,CAAE;AAC9F,QAAM,CAAC4C,QAAQC,SAAS,IAAI7C,aAAa,KAAK;AAC9C,QAAM,CAAC8C,eAAeC,gBAAgB,IAAI/C,aAAa,EAAE;AACzD,MAAIgD,gBAAsD;AAE1D,QAAMC,WAAWA,MAAM1P,MAAMI,MAAMsP,YAAY;AAC/C,QAAMC,aAAaA,MAAM3P,MAAMI,MAAMuP,cAAc;AAEnD,QAAMC,mBAAmB,OAAOC,MAAc;AAC5C,QAAI,CAAC7P,MAAMI,MAAM0P,UAAU,CAAC9P,MAAMI,MAAM2P,YAAa;AAErD,QAAI;AACF,YAAMC,SAAS,IAAIC,gBAAgB;AAAA,QAAE,CAACjQ,MAAMI,MAAM2P,WAAW,GAAGF;AAAAA,MAAAA,CAAG;AACnE,UAAI7P,MAAMI,MAAM8P,aAAa;AAC3B,mBAAW,CAACC,GAAGpD,CAAC,KAAKqD,OAAOC,QAAQrQ,MAAMI,MAAM8P,WAAW,GAAG;AAC5DF,iBAAOM,IAAIH,GAAGpD,CAAC;AAAA,QACjB;AAAA,MACF;AACA,YAAMwD,MAAM,MAAMC,MAAM,GAAGxQ,MAAMI,MAAM0P,MAAM,IAAIE,MAAM,EAAE;AACzD,UAAI,CAACO,IAAIE,GAAI;AAEb,YAAMC,OAAO,MAAMH,IAAII,KAAAA;AACvB,YAAMC,QAAQC,MAAMC,QAAQJ,IAAI,IAAIA,OAAOA,KAAKK,WAAWL,KAAKM,YAAY,CAAA;AAC5E,YAAMC,aAAajR,MAAMI,MAAM6Q,cAAc;AAC7C,YAAMC,aAAalR,MAAMI,MAAM8Q,cAAc;AAE7C9B,qBAAewB,MAAMO,MAAM,GAAG,EAAE,EAAEC,IAAI,CAACC,UAAe;AAAA,QACpDjP,OAAOiP,KAAKJ,UAAU,KAAKK,OAAOD,IAAI;AAAA,QACtC3N,OAAO4N,OAAOD,KAAKH,UAAU,KAAKG,KAAKJ,UAAU,KAAKI,IAAI;AAAA,MAAA,EAC1D,CAAC;AACH/B,gBAAU,IAAI;AAAA,IAChB,QAAQ;AACNF,qBAAe,CAAA,CAAE;AAAA,IACnB;AAAA,EACF;AAEA,QAAMmC,cAAcA,CAAC7N,UAAkB;AACrCwL,aAASxL,KAAK;AACd8L,qBAAiB,EAAE;AACnBxP,UAAMwD,SAAS,EAAE;AAEjB,QAAIiM,4BAA4BA,aAAa;AAC7C,QAAI/L,MAAMmK,SAAS6B,YAAY;AAC7BN,qBAAe,CAAA,CAAE;AACjBE,gBAAU,KAAK;AACf;AAAA,IACF;AACAG,oBAAgB+B,WAAW,MAAM5B,iBAAiBlM,KAAK,GAAGiM,YAAY;AAAA,EACxE;AAEA,QAAM8B,mBAAmBA,CAACJ,SAA2C;AACnErR,UAAMwD,SAAS6N,KAAK3N,KAAK;AACzB8L,qBAAiB6B,KAAKjP,KAAK;AAC3B8M,aAASmC,KAAKjP,KAAK;AACnBkN,cAAU,KAAK;AACfF,mBAAe,CAAA,CAAE;AAAA,EACnB;AAEAsC,YAAU,MAAM;AAAE,QAAIjC,4BAA4BA,aAAa;AAAA,EAAE,CAAC;AAElE,UAAA,MAAA;AAAA,QAAAkC,SAAA1Q,eAAA2Q,QAAA,GAAAC,SAAAF,OAAAvQ,YAAA0Q,SAAAD,OAAArQ,aAAA,CAAAuQ,QAAAC,MAAA,IAAAzQ,cAAAuQ,OAAAtQ,WAAA;AAAAqQ,WAAA5I,iBAAA,QAOc,MAAMuI,WAAW,MAAMlC,UAAU,KAAK,GAAG,GAAG,CAAC;AAAAuC,WAAA5I,iBAAA,SAD5C,MAAM;AAAE,UAAIkG,YAAAA,EAActB,OAAQyB,WAAU,IAAI;AAAA,IAAE,CAAC;AAAAuC,WAAAvO,UADlDC,CAAAA,MAAMgO,YAAYhO,EAAEE,cAAcC,KAAK;AAACxB,WAAAyP,QAAA/Q,gBASnDC,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEqB,KAAA,MAAA,CAAA,CAAAkN,OAAAA,CAAQ,EAAA,KAAIF,YAAAA,EAActB,SAAS;AAAA,MAAC;AAAA,MAAA,IAAA9M,WAAA;AAAA,YAAAkR,SAAAhR,eAAAwN,QAAA;AAAAvM,eAAA+P,QAAArR,gBAE3CwI,KAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAE8F,YAAAA;AAAAA,UAAa;AAAA,UAAApO,UACpBsQ,WAAI,MAAA;AAAA,gBAAAa,SAAAjR,eAAAkR,QAAA;AAAAD,mBAAA5D,UAIO,MAAMmD,iBAAiBJ,IAAI;AAACa,mBAAAE,cADvB7O,CAAAA,MAAMA,EAAE8O,eAAAA;AAAgBnQ,mBAAAgQ,QAAA,MAIrCb,KAAKjP,KAAK;AAAAuD,+BAAAA;AAAA,mBAAAuM;AAAAA,UAAA,GAAA;AAAA,QAAA,CAEd,CAAA;AAAA,eAAAD;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAF,QAAAC,MAAA;AAAAhP,WAAAW,CAAAA,QAAA;AAAA,UAAA2O,QAlBQtS,MAAMI,MAAM4D,aAAWuO,QAC1BvS,MAAMkE,UAAQsO,QACjBxS,MAAMmL;AAASmH,gBAAA3O,IAAAJ,KAAAN,aAAA4O,QAAA,eAAAlO,IAAAJ,IAAA+O,KAAA;AAAAC,gBAAA5O,IAAAmB,KAAAI,YAAA2M,QAAA,YAAAlO,IAAAmB,IAAAyN,KAAA;AAAAC,gBAAA7O,IAAAoB,KAAAW,UAAAmM,QAAAlO,IAAAoB,IAAAyN,KAAA;AAAA,aAAA7O;AAAAA,IAAA,GAAA;AAAA,MAAAJ,GAAAqB;AAAAA,MAAAE,GAAAF;AAAAA,MAAAG,GAAAH;AAAAA,IAAAA,CAAA;AAAA5B,iBAAAkC,YAAA2M,QAAA,SANf5C,MAAAA,CAAO,CAAA;AAAAtJ,uBAAAA;AAAA,WAAAgM;AAAAA,EAAA,GAAA;AA4BtB;AAACc,eAAA,CAAA,SAAA,SAAA,WAAA,CAAA;"}
|
|
1
|
+
{"version":3,"file":"FormFieldRenderer.js","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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"}
|
package/package.json
CHANGED
|
@@ -234,6 +234,21 @@ export const FormFieldRenderer: Component<FormFieldRendererProps> = (props) => {
|
|
|
234
234
|
</For>
|
|
235
235
|
</div>
|
|
236
236
|
</Match>
|
|
237
|
+
|
|
238
|
+
{/* Fallback for unknown field types — renders as text input with warning */}
|
|
239
|
+
<Match when={true}>
|
|
240
|
+
<input
|
|
241
|
+
id={fieldId()}
|
|
242
|
+
type="text"
|
|
243
|
+
name={props.field.name}
|
|
244
|
+
value={props.value || ''}
|
|
245
|
+
onInput={(e) => props.onChange(e.currentTarget.value)}
|
|
246
|
+
placeholder={props.field.placeholder || `(${props.field.type})`}
|
|
247
|
+
disabled={props.disabled}
|
|
248
|
+
class={baseInputClass()}
|
|
249
|
+
/>
|
|
250
|
+
<p class="text-xs text-amber-500 mt-0.5">Unknown field type: {props.field.type}</p>
|
|
251
|
+
</Match>
|
|
237
252
|
</Switch>
|
|
238
253
|
|
|
239
254
|
<Show when={props.field.helpText && !props.error}>
|
|
@@ -260,6 +275,7 @@ const MultiSelectField: Component<{
|
|
|
260
275
|
baseClass: string
|
|
261
276
|
}> = (props) => {
|
|
262
277
|
const [open, setOpen] = createSignal(false)
|
|
278
|
+
const [filter, setFilter] = createSignal('')
|
|
263
279
|
|
|
264
280
|
const toggle = (val: string) => {
|
|
265
281
|
const current = props.value || []
|
|
@@ -277,6 +293,14 @@ const MultiSelectField: Component<{
|
|
|
277
293
|
const getLabel = (val: string) =>
|
|
278
294
|
props.field.options?.find((o) => o.value === val)?.label || val
|
|
279
295
|
|
|
296
|
+
const filteredOptions = () => {
|
|
297
|
+
const q = filter().toLowerCase()
|
|
298
|
+
if (!q) return props.field.options || []
|
|
299
|
+
return (props.field.options || []).filter(
|
|
300
|
+
(o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q)
|
|
301
|
+
)
|
|
302
|
+
}
|
|
303
|
+
|
|
280
304
|
return (
|
|
281
305
|
<div class="relative">
|
|
282
306
|
{/* Selected chips */}
|
|
@@ -303,7 +327,7 @@ const MultiSelectField: Component<{
|
|
|
303
327
|
{/* Trigger button */}
|
|
304
328
|
<button
|
|
305
329
|
type="button"
|
|
306
|
-
onClick={() => setOpen(!open())}
|
|
330
|
+
onClick={() => { setOpen(!open()); if (!open()) setFilter('') }}
|
|
307
331
|
disabled={props.disabled}
|
|
308
332
|
class={`${props.baseClass} text-left flex items-center justify-between`}
|
|
309
333
|
>
|
|
@@ -317,22 +341,41 @@ const MultiSelectField: Component<{
|
|
|
317
341
|
</svg>
|
|
318
342
|
</button>
|
|
319
343
|
|
|
320
|
-
{/* Dropdown */}
|
|
344
|
+
{/* Dropdown with filter */}
|
|
321
345
|
<Show when={open()}>
|
|
322
|
-
<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
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
</
|
|
346
|
+
<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">
|
|
347
|
+
{/* Search filter */}
|
|
348
|
+
<Show when={(props.field.options?.length || 0) > 10}>
|
|
349
|
+
<div class="p-2 border-b border-gray-200 dark:border-gray-600">
|
|
350
|
+
<input
|
|
351
|
+
type="text"
|
|
352
|
+
value={filter()}
|
|
353
|
+
onInput={(e) => setFilter(e.currentTarget.value)}
|
|
354
|
+
placeholder="Filter..."
|
|
355
|
+
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"
|
|
356
|
+
autofocus
|
|
357
|
+
/>
|
|
358
|
+
</div>
|
|
359
|
+
</Show>
|
|
360
|
+
{/* Options list */}
|
|
361
|
+
<div class="max-h-72 overflow-y-auto">
|
|
362
|
+
<For each={filteredOptions()}>
|
|
363
|
+
{(option) => (
|
|
364
|
+
<label class="flex items-center gap-2 px-3 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer text-sm">
|
|
365
|
+
<input
|
|
366
|
+
type="checkbox"
|
|
367
|
+
checked={(props.value || []).includes(option.value)}
|
|
368
|
+
onChange={() => toggle(option.value)}
|
|
369
|
+
class="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600"
|
|
370
|
+
/>
|
|
371
|
+
<span class="text-gray-900 dark:text-white">{option.label}</span>
|
|
372
|
+
</label>
|
|
373
|
+
)}
|
|
374
|
+
</For>
|
|
375
|
+
<Show when={filteredOptions().length === 0}>
|
|
376
|
+
<p class="px-3 py-2 text-sm text-gray-400">No matches</p>
|
|
377
|
+
</Show>
|
|
378
|
+
</div>
|
|
336
379
|
</div>
|
|
337
380
|
</Show>
|
|
338
381
|
</div>
|
|
@@ -343,17 +386,19 @@ const MultiSelectField: Component<{
|
|
|
343
386
|
|
|
344
387
|
const AutocompleteField: Component<{
|
|
345
388
|
field: FormFieldParams
|
|
346
|
-
value: string
|
|
347
|
-
onChange: (value: string) => void
|
|
389
|
+
value: string | string[]
|
|
390
|
+
onChange: (value: string | string[]) => void
|
|
348
391
|
disabled?: boolean
|
|
349
392
|
baseClass: string
|
|
350
393
|
}> = (props) => {
|
|
351
394
|
const [query, setQuery] = createSignal('')
|
|
352
395
|
const [suggestions, setSuggestions] = createSignal<Array<{ label: string; value: string }>>([])
|
|
353
396
|
const [isOpen, setIsOpen] = createSignal(false)
|
|
354
|
-
const [
|
|
397
|
+
const [selectedLabels, setSelectedLabels] = createSignal<Map<string, string>>(new Map())
|
|
355
398
|
let debounceTimer: ReturnType<typeof setTimeout> | null = null
|
|
356
399
|
|
|
400
|
+
const isMultiple = () => props.field.multiple === true
|
|
401
|
+
const selectedValues = () => isMultiple() ? (Array.isArray(props.value) ? props.value : []) : []
|
|
357
402
|
const minChars = () => props.field.minChars ?? 2
|
|
358
403
|
const debounceMs = () => props.field.debounceMs ?? 300
|
|
359
404
|
|
|
@@ -387,8 +432,9 @@ const AutocompleteField: Component<{
|
|
|
387
432
|
|
|
388
433
|
const handleInput = (value: string) => {
|
|
389
434
|
setQuery(value)
|
|
390
|
-
|
|
391
|
-
|
|
435
|
+
if (!isMultiple()) {
|
|
436
|
+
props.onChange('')
|
|
437
|
+
}
|
|
392
438
|
|
|
393
439
|
if (debounceTimer) clearTimeout(debounceTimer)
|
|
394
440
|
if (value.length < minChars()) {
|
|
@@ -400,42 +446,92 @@ const AutocompleteField: Component<{
|
|
|
400
446
|
}
|
|
401
447
|
|
|
402
448
|
const selectSuggestion = (item: { label: string; value: string }) => {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
449
|
+
if (isMultiple()) {
|
|
450
|
+
const current = selectedValues()
|
|
451
|
+
if (!current.includes(item.value)) {
|
|
452
|
+
props.onChange([...current, item.value])
|
|
453
|
+
setSelectedLabels((prev) => new Map(prev).set(item.value, item.label))
|
|
454
|
+
}
|
|
455
|
+
setQuery('')
|
|
456
|
+
setSuggestions([])
|
|
457
|
+
setIsOpen(false)
|
|
458
|
+
} else {
|
|
459
|
+
props.onChange(item.value)
|
|
460
|
+
setSelectedLabels((prev) => new Map(prev).set(item.value, item.label))
|
|
461
|
+
setQuery(item.label)
|
|
462
|
+
setIsOpen(false)
|
|
463
|
+
setSuggestions([])
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
const removeChip = (val: string) => {
|
|
468
|
+
props.onChange(selectedValues().filter((v) => v !== val))
|
|
469
|
+
setSelectedLabels((prev) => { const m = new Map(prev); m.delete(val); return m })
|
|
408
470
|
}
|
|
409
471
|
|
|
472
|
+
const getLabel = (val: string) => selectedLabels().get(val) || val
|
|
473
|
+
|
|
410
474
|
onCleanup(() => { if (debounceTimer) clearTimeout(debounceTimer) })
|
|
411
475
|
|
|
412
476
|
return (
|
|
413
477
|
<div class="relative">
|
|
478
|
+
{/* Multi chips */}
|
|
479
|
+
<Show when={isMultiple() && selectedValues().length > 0}>
|
|
480
|
+
<div class="flex flex-wrap gap-1 mb-1">
|
|
481
|
+
<For each={selectedValues()}>
|
|
482
|
+
{(val) => (
|
|
483
|
+
<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">
|
|
484
|
+
{getLabel(val)}
|
|
485
|
+
<button
|
|
486
|
+
type="button"
|
|
487
|
+
onClick={() => removeChip(val)}
|
|
488
|
+
class="hover:text-blue-900 dark:hover:text-blue-100"
|
|
489
|
+
aria-label={`Remove ${getLabel(val)}`}
|
|
490
|
+
>
|
|
491
|
+
×
|
|
492
|
+
</button>
|
|
493
|
+
</span>
|
|
494
|
+
)}
|
|
495
|
+
</For>
|
|
496
|
+
</div>
|
|
497
|
+
</Show>
|
|
498
|
+
|
|
414
499
|
<input
|
|
415
500
|
type="text"
|
|
416
501
|
value={query()}
|
|
417
502
|
onInput={(e) => handleInput(e.currentTarget.value)}
|
|
418
503
|
onFocus={() => { if (suggestions().length) setIsOpen(true) }}
|
|
419
504
|
onBlur={() => setTimeout(() => setIsOpen(false), 200)}
|
|
420
|
-
placeholder={
|
|
505
|
+
placeholder={isMultiple() && selectedValues().length
|
|
506
|
+
? 'Add more...'
|
|
507
|
+
: props.field.placeholder}
|
|
421
508
|
disabled={props.disabled}
|
|
422
509
|
class={props.baseClass}
|
|
423
510
|
autocomplete="off"
|
|
424
511
|
/>
|
|
425
512
|
|
|
426
513
|
<Show when={isOpen() && suggestions().length > 0}>
|
|
427
|
-
<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-
|
|
514
|
+
<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">
|
|
428
515
|
<For each={suggestions()}>
|
|
429
|
-
{(item) =>
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
516
|
+
{(item) => {
|
|
517
|
+
const isSelected = () => isMultiple() && selectedValues().includes(item.value)
|
|
518
|
+
return (
|
|
519
|
+
<button
|
|
520
|
+
type="button"
|
|
521
|
+
onMouseDown={(e) => e.preventDefault()}
|
|
522
|
+
onClick={() => selectSuggestion(item)}
|
|
523
|
+
class={`w-full text-left px-3 py-2 text-sm hover:bg-blue-50 dark:hover:bg-blue-900/20 ${
|
|
524
|
+
isSelected() ? 'text-blue-600 dark:text-blue-400 bg-blue-50/50 dark:bg-blue-900/10' : 'text-gray-900 dark:text-white'
|
|
525
|
+
}`}
|
|
526
|
+
disabled={isSelected()}
|
|
527
|
+
>
|
|
528
|
+
{item.label}
|
|
529
|
+
<Show when={isSelected()}>
|
|
530
|
+
<span class="ml-2 text-xs">✓</span>
|
|
531
|
+
</Show>
|
|
532
|
+
</button>
|
|
533
|
+
)
|
|
534
|
+
}}
|
|
439
535
|
</For>
|
|
440
536
|
</div>
|
|
441
537
|
</Show>
|