{"version":3,"names":["isGroup","item","isRecord","items","Array","isArray","stringifyValue","value","String","JSON","stringify","stringifyAsValue","itemToStringValue","stringifyAsLabel","itemToStringLabel","label","resolveSelectedLabel","fallback","match","entry","key","Object","is","resolveMultipleLabels","values","length","labels","map","v","filter","Boolean","join","hasNullItemLabel"],"sources":["resolve-value-label.ts"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\n/**\n * Value-to-label resolution for `<Select.Value>`. Mirrors Base UI React's\n * `packages/react/src/internals/resolveValueLabel.ts` — trimmed to the\n * subset the Solid port wires:\n *\n *  - `stringifyAsValue(value, itemToStringValue)` → string form for form\n *    submission + hidden-input `value`.\n *  - `stringifyAsLabel(value, itemToStringLabel)` → string form for\n *    trigger display text.\n *  - `resolveSelectedLabel` / `resolveMultipleLabels` — select display\n *    resolution with optional `items` registry support.\n *  - `hasNullItemLabel` — detects `null` entries in the items registry.\n */\n\n/** Group shape accepted in the `items` prop. */\nexport interface Group<Value> {\n\titems:\n\t\t| Record<string, JSX.Element>\n\t\t| ReadonlyArray<{ label: JSX.Element; value: Value }>;\n\tlabel?: JSX.Element;\n}\n\nexport type ItemsInput<Value> =\n\t| Record<string, JSX.Element>\n\t| ReadonlyArray<{ label: JSX.Element; value: Value }>\n\t| ReadonlyArray<Group<Value>>\n\t| undefined;\n\nfunction isGroup<Value>(item: unknown): item is Group<Value> {\n\treturn (\n\t\ttypeof item === \"object\" &&\n\t\titem !== null &&\n\t\t\"items\" in item &&\n\t\t!(\"value\" in item)\n\t);\n}\n\nfunction isRecord(items: unknown): items is Record<string, JSX.Element> {\n\treturn typeof items === \"object\" && items !== null && !Array.isArray(items);\n}\n\nfunction stringifyValue(value: unknown): string {\n\tif (value == null) return \"\";\n\tif (typeof value === \"string\") return value;\n\tif (typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn String(value);\n\t}\n\tif (typeof value === \"object\") {\n\t\t// Object-with-value shortcut.\n\t\tif (\"value\" in (value as object)) {\n\t\t\treturn stringifyValue((value as { value: unknown }).value);\n\t\t}\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t} catch {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\treturn \"\";\n}\n\nexport function stringifyAsValue(\n\tvalue: unknown,\n\titemToStringValue?: ((value: unknown) => string) | undefined,\n): string {\n\tif (itemToStringValue && value != null) {\n\t\ttry {\n\t\t\treturn itemToStringValue(value);\n\t\t} catch {\n\t\t\t/* fall through */\n\t\t}\n\t}\n\treturn stringifyValue(value);\n}\n\nexport function stringifyAsLabel(\n\tvalue: unknown,\n\titemToStringLabel?: ((value: unknown) => string) | undefined,\n): string {\n\tif (itemToStringLabel && value != null) {\n\t\ttry {\n\t\t\treturn itemToStringLabel(value);\n\t\t} catch {\n\t\t\t/* fall through */\n\t\t}\n\t}\n\tif (typeof value === \"object\" && value !== null && \"label\" in value) {\n\t\tconst label = (value as { label: unknown }).label;\n\t\tif (typeof label === \"string\") return label;\n\t}\n\treturn stringifyValue(value);\n}\n\nexport function resolveSelectedLabel<Value>(\n\tvalue: Value,\n\titems: ItemsInput<Value>,\n\titemToStringLabel?: ((value: Value) => string) | undefined,\n): JSX.Element {\n\tfunction fallback(): JSX.Element {\n\t\t// `stringifyAsLabel` only ever calls this with the same `value`, so\n\t\t// widening the parameter to `unknown` is sound (function contravariance).\n\t\treturn stringifyAsLabel(\n\t\t\tvalue,\n\t\t\titemToStringLabel as ((value: unknown) => string) | undefined,\n\t\t);\n\t}\n\n\tif (itemToStringLabel && value != null) {\n\t\ttry {\n\t\t\treturn itemToStringLabel(value);\n\t\t} catch {\n\t\t\t/* fall through */\n\t\t}\n\t}\n\n\tif (typeof value === \"object\" && value !== null && \"label\" in value) {\n\t\tconst label = (value as { label: unknown }).label;\n\t\tif (label != null) {\n\t\t\treturn (value as { label: JSX.Element }).label;\n\t\t}\n\t}\n\n\tif (isRecord(items)) {\n\t\tconst match = (items as Record<string, JSX.Element>)[value as string];\n\t\tif (match != null) return match;\n\t} else if (Array.isArray(items)) {\n\t\tfor (const entry of items) {\n\t\t\tif (isGroup<Value>(entry)) {\n\t\t\t\tif (isRecord(entry.items)) {\n\t\t\t\t\tconst key = stringifyValue(value);\n\t\t\t\t\tif (key in entry.items) return entry.items[key];\n\t\t\t\t} else {\n\t\t\t\t\tfor (const item of entry.items) {\n\t\t\t\t\t\tif (Object.is(item.value, value)) return item.label;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\ttypeof entry === \"object\" &&\n\t\t\t\tentry !== null &&\n\t\t\t\t\"value\" in entry &&\n\t\t\t\tObject.is((entry as { value: Value }).value, value)\n\t\t\t) {\n\t\t\t\treturn (entry as { label: JSX.Element }).label;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fallback();\n}\n\nexport function resolveMultipleLabels<Value>(\n\tvalues: ReadonlyArray<Value>,\n\titems: ItemsInput<Value>,\n\titemToStringLabel?: ((value: Value) => string) | undefined,\n): JSX.Element {\n\tif (!values || values.length === 0) return null;\n\tconst labels = values.map(\n\t\t(v) => resolveSelectedLabel(v, items, itemToStringLabel) ?? \"\",\n\t);\n\t// Join with \", \" by default. Consumers who want custom formatting use a\n\t// children render function on `<Select.Value>`.\n\treturn labels\n\t\t.map((label) => (typeof label === \"string\" ? label : stringifyValue(label)))\n\t\t.filter(Boolean)\n\t\t.join(\", \");\n}\n\nexport function hasNullItemLabel<Value>(items: ItemsInput<Value>): boolean {\n\tif (!items) return false;\n\tif (isRecord(items)) return \"null\" in items;\n\tfor (const entry of items) {\n\t\tif (isGroup<Value>(entry)) {\n\t\t\tif (hasNullItemLabel(entry.items as ItemsInput<Value>)) return true;\n\t\t} else if (\n\t\t\ttypeof entry === \"object\" &&\n\t\t\tentry !== null &&\n\t\t\t\"value\" in entry &&\n\t\t\t(entry as { value: unknown }).value == null\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n"],"mappings":"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","ignoreList":[]}