@k2b/ui 0.35.0 → 0.37.0
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/browser/actions/Dropdown.js +132 -116
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/Tabs.js +18 -15
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +58 -25
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/content/MapView.js +128 -13
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/MapViewFrame.js +1 -1
- package/dist/browser/content/MapViewFrame.js.map +1 -1
- package/dist/browser/content/MessageRow.js +164 -152
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/index.js +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/map-view-glyphs.js +23 -0
- package/dist/browser/content/map-view-glyphs.js.map +1 -0
- package/dist/browser/content/map-view-live.js +45 -22
- package/dist/browser/content/map-view-live.js.map +1 -1
- package/dist/browser/content/map-view-snapshot.js +191 -0
- package/dist/browser/content/map-view-snapshot.js.map +1 -0
- package/dist/browser/content/map-view-types.js.map +1 -1
- package/dist/browser/feedback/prompts.js +23 -9
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/Combobox.js +164 -82
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/RichSelect.js +86 -67
- package/dist/browser/inputs/RichSelect.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +1 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/internal/keyed-for.js +47 -0
- package/dist/browser/internal/keyed-for.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +73 -70
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/ScrollArea.js +4 -1
- package/dist/browser/layout/ScrollArea.js.map +1 -1
- package/dist/browser/text-editor/engine.js +13 -10
- package/dist/browser/text-editor/engine.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +101 -85
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +12 -9
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +41 -15
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/content/MapView.js +128 -13
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/MapViewFrame.js +1 -1
- package/dist/ssr/content/MapViewFrame.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +9 -2
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/index.js +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/map-view-glyphs.js +23 -0
- package/dist/ssr/content/map-view-glyphs.js.map +1 -0
- package/dist/ssr/content/map-view-snapshot.js +191 -0
- package/dist/ssr/content/map-view-snapshot.js.map +1 -0
- package/dist/ssr/content/map-view-types.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +22 -8
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +79 -28
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/RichSelect.js +47 -28
- package/dist/ssr/inputs/RichSelect.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/internal/keyed-for.js +47 -0
- package/dist/ssr/internal/keyed-for.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +1 -1
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/ScrollArea.js +4 -1
- package/dist/ssr/layout/ScrollArea.js.map +1 -1
- package/dist/ssr/text-editor/engine.js +13 -10
- package/dist/ssr/text-editor/engine.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/content/MapViewFrame.d.ts +1 -1
- package/dist/types/content/MessageRow.d.ts +1 -1
- package/dist/types/content/index.d.ts +2 -1
- package/dist/types/content/map-view-glyphs.d.ts +5 -0
- package/dist/types/content/map-view-live.d.ts +1 -1
- package/dist/types/content/map-view-snapshot.d.ts +13 -0
- package/dist/types/content/map-view-types.d.ts +15 -0
- package/dist/types/feedback/prompts.d.ts +5 -0
- package/dist/types/inputs/Combobox.d.ts +12 -0
- package/dist/types/inputs/TextInput.d.ts +2 -1
- package/dist/types/internal/keyed-for.d.ts +13 -0
- package/dist/types/layout/AppWorkspace.d.ts +4 -1
- package/dist/types/layout/ScrollArea.d.ts +2 -0
- package/dist/types/text-editor/engine.d.ts +1 -1
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/RichSelect.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n Match,\n onCleanup,\n onMount,\n Show,\n Switch,\n untrack,\n} from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport BottomSheet, { bottomSheetOptions } from \"../layout/BottomSheet\";\nimport { createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { type RichSelectMessages, useRichSelectMessages } from \"./rich-select-messages\";\nimport type { ChoiceAppearance } from \"./Select\";\n\n/** One option: a name plus at most one short line. */\nexport type RichSelectItem = {\n value: string;\n /** Wraps; never truncated. */\n label: string;\n /** At most one short line that says what the choice changes. */\n description?: string;\n /** Icon class shown before the name. */\n icon?: string;\n /** Color dot shown before the name, such as a space color. Replaces `icon`. */\n color?: string;\n /** Creates a fresh visual for each render location. Replaces `icon` and `color`. */\n visual?: () => JSX.Element;\n /** Makes the row unavailable. The reason replaces `description`; the arrow keys still reach the row. */\n disabledReason?: string;\n /** Section id. Headings show only from eight options; keep each section's items together. */\n section?: string;\n /** Extra search terms that are not shown. */\n keywords?: readonly string[];\n};\n\nexport type RichSelectSection = { id: string; label: string };\n\nexport type RichSelectStatus = \"ready\" | \"loading\" | \"error\";\n\nexport type RichSelectFooter =\n | { label: string; icon?: string; onActivate: () => void }\n | { label: string; icon?: string; create: { placeholder: string; onCreate: (name: string) => void } };\n\nexport type RichSelectFact = {\n icon: string;\n text: JSX.Element;\n tone?: \"default\" | \"warning\";\n};\n\nexport type RichSelectProps = ValueFieldProps<string | null> & {\n items: readonly RichSelectItem[];\n /** Labels for the `section` ids of the items. */\n sections?: readonly RichSelectSection[];\n /** Names the list: the heading of a list without preview, the phone sheet title, and the listbox label. */\n title?: string;\n placeholder?: string;\n /** Replaces the selected item's name in the trigger, such as \"Name · address\". */\n triggerLabel?: string;\n /** Icon class for the trigger while no item with its own visual is selected. */\n icon?: string;\n tone?: \"default\" | \"warning\";\n /** Custom content inside the shared trigger button, which keeps the combobox semantics. */\n renderTrigger?: (selected: RichSelectItem | undefined) => JSX.Element;\n /**\n * The body of the preview beside the list, for options whose consequences differ.\n * Without it the picker shows only the list. Keep it to at most three facts.\n */\n renderPreview?: (item: RichSelectItem) => JSX.Element;\n searchPlaceholder?: string;\n status?: RichSelectStatus;\n onRetry?: () => void;\n /** Shown when the list is ready and has no items. */\n empty?: JSX.Element;\n footer?: RichSelectFooter;\n appearance?: ChoiceAppearance;\n placement?: \"bottom-start\" | \"top-start\";\n /** CSS lengths for the desktop popover. */\n size?: { width?: string; height?: string };\n name?: string;\n};\n\n/** Search and section headings appear from this many options. */\nexport const RICH_SELECT_SEARCH_FROM = 8;\nconst PHONE_QUERY = \"(max-width: 47.999rem)\";\nconst PLACEHOLDER_ROWS = 4;\n\ntype Row = { kind: \"heading\"; id: string; label: string } | { kind: \"item\"; item: RichSelectItem; index: number };\n\nconst isPhone = () => typeof matchMedia === \"function\" && matchMedia(PHONE_QUERY).matches;\n\nfunction RichSelectVisual(props: { item: RichSelectItem }): JSX.Element {\n return (\n <Switch>\n <Match when={props.item.visual}>{(visual) => <span class=\"k2b-rich-select__visual\">{visual()()}</span>}</Match>\n <Match when={props.item.color}>\n {(color) => (\n <span class=\"k2b-rich-select__visual\" aria-hidden=\"true\">\n <span class=\"k2b-rich-select__dot\" style={{ \"background-color\": color() }} />\n </span>\n )}\n </Match>\n <Match when={props.item.icon}>\n {(icon) => (\n <span class=\"k2b-rich-select__visual\" aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Match>\n </Switch>\n );\n}\n\nconst hasVisual = (item: RichSelectItem) => Boolean(item.visual || item.color || item.icon);\n\n/** Name and second line. The reason of an unavailable row replaces the description. */\nfunction RichSelectRowText(props: { item: RichSelectItem; labelId: string; lineId: string }): JSX.Element {\n return (\n <span class=\"k2b-rich-select__text\">\n <span id={props.labelId} class=\"k2b-rich-select__label\">\n {props.item.label}\n </span>\n <Show when={props.item.disabledReason ?? props.item.description}>\n {(line) => (\n <span id={props.lineId} class=\"k2b-rich-select__line\" data-reason={props.item.disabledReason ? \"true\" : undefined}>\n {line()}\n </span>\n )}\n </Show>\n </span>\n );\n}\n\nfunction RichSelectPlaceholders(props: { visual: boolean }): JSX.Element {\n return (\n <For each={Array.from({ length: PLACEHOLDER_ROWS }, (_, index) => index)}>\n {(index) => (\n <div class=\"k2b-rich-select__placeholder\" data-visual={props.visual ? \"true\" : undefined} aria-hidden=\"true\">\n <Show when={props.visual}>\n <span class=\"k2b-rich-select__placeholder-visual\" />\n </Show>\n <span class=\"k2b-rich-select__placeholder-lines\">\n <span style={{ width: `${[58, 46, 66, 50][index % 4]}%` }} />\n <span style={{ width: `${[34, 28, 40, 30][index % 4]}%` }} />\n </span>\n </div>\n )}\n </For>\n );\n}\n\nfunction RichSelectState(props: {\n status: \"error\" | \"empty\";\n messages: RichSelectMessages;\n empty?: JSX.Element;\n onRetry?: () => void;\n restoreFocus?: () => void;\n}): JSX.Element {\n let retryButton: HTMLButtonElement | undefined;\n onCleanup(() => {\n if (retryButton && document.activeElement === retryButton) queueMicrotask(() => props.restoreFocus?.());\n });\n return (\n <div class=\"k2b-rich-select__state\" data-status={props.status} role={props.status === \"error\" ? \"alert\" : \"status\"}>\n <span class=\"k2b-rich-select__state-icon\" aria-hidden=\"true\">\n <i class={props.status === \"error\" ? \"ti ti-alert-triangle\" : \"ti ti-list-search\"} />\n </span>\n <Show\n when={props.status === \"error\"}\n fallback={<div class=\"k2b-rich-select__state-text\">{props.empty ?? props.messages.noOptions}</div>}\n >\n <div class=\"k2b-rich-select__state-text\">{props.messages.couldNotLoad}</div>\n <Show when={props.onRetry}>\n {(retry) => (\n <Button ref={retryButton} variant=\"secondary\" size=\"sm\" onClick={() => retry()()}>\n <i class=\"ti ti-refresh\" aria-hidden=\"true\" />\n {props.messages.retry}\n </Button>\n )}\n </Show>\n </Show>\n </div>\n );\n}\n\nfunction RichSelectPreview(props: { item: RichSelectItem; render: (item: RichSelectItem) => JSX.Element; id?: string }): JSX.Element {\n return (\n <div id={props.id}>\n <h3 class=\"k2b-rich-select__preview-title\">\n <RichSelectVisual item={props.item} />\n <span>{props.item.label}</span>\n </h3>\n {props.render(props.item)}\n </div>\n );\n}\n\n/** Up to three short facts for a preview, each with an icon; warnings in the warning tone. */\nexport function RichSelectFacts(props: { facts: readonly RichSelectFact[] }): JSX.Element {\n return (\n <ul class=\"k2b-rich-select__facts\">\n <For each={props.facts.slice(0, 3)}>\n {(fact) => (\n <li data-tone={fact.tone === \"warning\" ? \"warning\" : undefined}>\n <i class={fact.icon} aria-hidden=\"true\" />\n <span>{fact.text}</span>\n </li>\n )}\n </For>\n </ul>\n );\n}\n\nfunction RichSelectFooterControl(props: {\n footer: RichSelectFooter;\n initialName: () => string;\n messages: RichSelectMessages;\n done: (run: () => void) => void;\n restoreFocus: () => void;\n}): JSX.Element {\n const [creating, setCreating] = createSignal(false);\n const [name, setName] = createSignal(\"\");\n let input: HTMLInputElement | undefined;\n let start: HTMLButtonElement | undefined;\n let controls: HTMLDivElement | undefined;\n onCleanup(() => {\n if (controls?.contains(document.activeElement)) queueMicrotask(props.restoreFocus);\n });\n const create = () => {\n const footer = props.footer;\n const value = name().trim();\n if (!(\"create\" in footer) || !value) return;\n props.done(() => footer.create.onCreate(value));\n };\n return (\n <div ref={controls} class=\"k2b-rich-select__footer\">\n <Show\n when={creating() && \"create\" in props.footer ? props.footer.create : undefined}\n fallback={\n <button\n ref={start}\n type=\"button\"\n class=\"k2b-rich-select__footer-action\"\n onClick={() => {\n const footer = props.footer;\n if (\"create\" in footer) {\n setName(props.initialName());\n setCreating(true);\n queueMicrotask(() => input?.focus());\n } else props.done(footer.onActivate);\n }}\n >\n <span class=\"k2b-rich-select__visual\" aria-hidden=\"true\">\n <i class={props.footer.icon ?? \"ti ti-plus\"} />\n </span>\n <span class=\"k2b-rich-select__label\">{props.footer.label}</span>\n </button>\n }\n >\n {(create_) => (\n <div class=\"k2b-rich-select__create\">\n <input\n ref={input}\n class=\"k2b-rich-select__create-input\"\n value={name()}\n placeholder={create_().placeholder}\n aria-label={props.footer.label}\n autocomplete=\"off\"\n onInput={(event) => setName(event.currentTarget.value)}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === \"Escape\") {\n event.preventDefault();\n setCreating(false);\n queueMicrotask(() => start?.focus());\n } else if (event.key === \"Enter\" && !event.isComposing) {\n event.preventDefault();\n create();\n }\n }}\n />\n <Button type=\"button\" variant=\"primary\" size=\"sm\" disabled={!name().trim()} onClick={create}>\n {props.messages.create}\n </Button>\n </div>\n )}\n </Show>\n </div>\n );\n}\n\n/**\n * A dropdown whose rows explain each choice: a name plus one short line, an\n * unavailable row with its reason, and an optional preview of what a choice\n * changes. Desktop opens a popover beside the trigger; a phone opens a bottom\n * sheet whose info buttons show the preview as a second level.\n */\nexport function RichSelect(props: RichSelectProps): JSX.Element {\n const messages = useRichSelectMessages();\n const locale = useLocale();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const previewId = `${meta.controlId}-preview`;\n const [query, setQuery] = createSignal(\"\");\n const [active, setActive] = createSignal(-1);\n const [height, setHeight] = createSignal<string>();\n const [sheetOpen, setSheetOpen] = createSignal(false);\n const [phone, setPhone] = createSignal(false);\n const [sheetId, setSheetId] = createSignal<string>();\n onMount(() => {\n const media = window.matchMedia(PHONE_QUERY);\n setPhone(media.matches);\n const update = () => setPhone(media.matches);\n media.addEventListener(\"change\", update);\n onCleanup(() => media.removeEventListener(\"change\", update));\n });\n let searchRef: HTMLInputElement | undefined;\n let closeSheet: (() => void) | undefined;\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const error = () => resolveMaybeAccessor(props.error);\n const status = () => props.status ?? \"ready\";\n const withPreview = () => Boolean(props.renderPreview);\n const title = () =>\n props.title ?? (typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? props.placeholder ?? messages().chooseOption));\n const searchable = () => status() === \"ready\" && props.items.length >= RICH_SELECT_SEARCH_FROM;\n const visible = createMemo(() => (searchable() ? filterChoiceOptions(props.items, query()) : props.items));\n const anyVisual = createMemo(() => props.items.some(hasVisual));\n const rows = createMemo<Row[]>(() => {\n const headings = props.items.length >= RICH_SELECT_SEARCH_FROM && props.sections ? props.sections : undefined;\n const result: Row[] = [];\n let section: string | undefined;\n visible().forEach((item, index) => {\n if (headings && item.section && item.section !== section) {\n const heading = headings.find((candidate) => candidate.id === item.section);\n if (heading) result.push({ kind: \"heading\", id: heading.id, label: heading.label });\n }\n section = item.section;\n result.push({ kind: \"item\", item, index });\n });\n return result;\n });\n const selected = createMemo(() => {\n const current = value();\n return current === null ? undefined : props.items.find((item) => item.value === current);\n });\n const activeItem = () => (status() === \"ready\" ? visible()[active()] : undefined);\n const optionId = (index: number) => `${listboxId}-${index}`;\n const popover = createChoicePopover(\n () => Boolean(props.disabled),\n () => ({ width: \"own\", side: props.placement === \"top-start\" ? \"above\" : \"below\" }),\n );\n const expanded = () => popover.open() || sheetOpen();\n const restorePopoverFocus = () => {\n if (popover.open()) (searchable() ? searchRef : popover.trigger())?.focus();\n };\n\n createEffect(() => {\n if (props.disabled) {\n popover.hide();\n closeSheet?.();\n }\n });\n createEffect(() => {\n const count = visible().length;\n if (!popover.open() || status() !== \"ready\") return;\n const current = untrack(active);\n if (current < 0 || current >= count) setActive(startIndex());\n });\n\n const scrollToActive = () => {\n const element = document.getElementById(optionId(active()));\n element?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (next: number) => {\n if (next < 0) return;\n setActive(next);\n queueMicrotask(scrollToActive);\n };\n const startIndex = () => {\n const index = visible().findIndex((item) => item.value === value());\n return index >= 0 ? index : visible().length > 0 ? 0 : -1;\n };\n\n const openPopover = () => {\n setQuery(\"\");\n setActive(startIndex());\n // The preview popover keeps one height while it is open, so moving\n // through rows, filtering, or the end of loading never resizes it.\n const rowsTall = status() === \"ready\" ? props.items.length : PLACEHOLDER_ROWS;\n const rem = Math.min(27.5, Math.max(18.75, rowsTall * 3.625 + 1.5));\n setHeight(props.size?.height ?? (withPreview() ? `${rem}rem` : undefined));\n popover.show();\n if (searchable()) queueMicrotask(() => searchRef?.focus());\n queueMicrotask(scrollToActive);\n };\n const open = () => {\n if (props.disabled || expanded()) return;\n if (isPhone()) openSheet();\n else openPopover();\n };\n const close = (restoreFocus = false) => {\n popover.hide(restoreFocus);\n setQuery(\"\");\n setActive(-1);\n };\n const choose = (item: RichSelectItem | undefined) => {\n if (props.disabled || status() !== \"ready\" || !item || item.disabledReason) return;\n // Hide first: the old list must never stay visible with the next value.\n close(true);\n commitFieldValue(props, item.value);\n };\n const runFooter = (run: () => void) => {\n close(true);\n run();\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing) return;\n const target = event.target;\n if (\n event.key !== \"Escape\" &&\n target instanceof Element &&\n target !== popover.trigger() &&\n target !== searchRef &&\n target.closest(\"input, button, textarea, a, [contenteditable]\")\n )\n return;\n const isOpen = popover.open();\n const count = visible().length;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!isOpen) open();\n else if (status() === \"ready\") move(nextEnabledChoiceIndex(visible(), active(), event.key === \"ArrowDown\" ? 1 : -1));\n } else if ((event.key === \"Home\" || event.key === \"End\") && isOpen) {\n event.preventDefault();\n if (status() === \"ready\" && count > 0) move(event.key === \"Home\" ? 0 : count - 1);\n } else if ((event.key === \"Enter\" || event.key === \" \") && !isOpen && event.target === popover.trigger()) {\n event.preventDefault();\n open();\n } else if (event.key === \"Enter\" && isOpen) {\n // Enter on an unavailable row does nothing; the list stays open.\n event.preventDefault();\n choose(activeItem());\n } else if (event.key === \"Escape\" && isOpen) {\n // A closed picker lets Escape reach an enclosing dialog.\n event.preventDefault();\n event.stopPropagation();\n close(true);\n } else if (\n isOpen &&\n searchable() &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n event.target !== searchRef\n ) {\n // Typing anywhere in the open picker goes to the search field.\n event.preventDefault();\n setQuery(query() + event.key);\n setActive(visible().length > 0 ? 0 : -1);\n searchRef?.focus();\n }\n };\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (!popover.open() || !(next instanceof Node)) return;\n if (popover.trigger()?.contains(next) || popoverElement?.contains(next)) return;\n close();\n };\n\n let popoverElement: HTMLDivElement | undefined;\n\n const openSheet = () => {\n const current = locale();\n const lifetime = new AbortController();\n // dialogCore can wait for a previous sheet's history traversal. Disabling\n // or unmounting the field must also cancel an opening that is still queued.\n closeSheet = () => lifetime.abort();\n let after: (() => void) | undefined;\n setSheetOpen(true);\n void dialogCore\n .open<void>(\n (closeDialog, context) => {\n context.dialog.id ||= `${meta.controlId}-sheet`;\n setSheetId(context.dialog.id);\n return (\n <LocaleProvider locale={current}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <RichSelectSheet\n props={props}\n title={title()}\n value={value}\n dialog={context.dialog}\n close={() => closeDialog()}\n done={(run) => {\n after = run;\n closeDialog();\n }}\n />\n </BottomSheet>\n </LocaleProvider>\n );\n },\n {\n ...bottomSheetOptions,\n history: true,\n signal: lifetime.signal,\n // A phone keyboard must not cover the list as it opens: focus starts on the sheet.\n initialFocus: (dialog) => {\n dialog.tabIndex = -1;\n return dialog;\n },\n },\n )\n .then(() => {\n if (!lifetime.signal.aborted) after?.();\n })\n .finally(() => {\n closeSheet = undefined;\n setSheetOpen(false);\n });\n };\n onCleanup(() => closeSheet?.());\n\n const triggerText = () => props.triggerLabel ?? selected()?.label ?? props.placeholder ?? messages().chooseOption;\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-choice-control k2b-rich-select\"\n data-appearance={props.appearance ?? \"field\"}\n data-invalid={error() ? \"true\" : undefined}\n onFocusOut={onFocusOut}\n >\n <button\n ref={popover.setTrigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-choice-trigger k2b-rich-select__trigger\"\n role=\"combobox\"\n aria-haspopup={sheetOpen() || (!popover.open() && phone()) ? \"dialog\" : \"listbox\"}\n aria-expanded={expanded()}\n aria-controls={sheetOpen() ? sheetId() : popover.open() ? listboxId : undefined}\n aria-activedescendant={popover.open() && activeItem() ? optionId(active()) : undefined}\n data-tone={props.tone === \"warning\" ? \"warning\" : undefined}\n {...fieldControlAria(meta, {\n ...props,\n \"aria-label\": props[\"aria-label\"] ?? (typeof props.label === \"string\" ? undefined : title()),\n })}\n disabled={props.disabled}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={onKeyDown}\n >\n <Show\n when={props.renderTrigger}\n fallback={\n <>\n <Show\n when={selected() && hasVisual(selected()!) ? selected() : undefined}\n fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(item) => <RichSelectVisual item={item()} />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder={selected() || props.triggerLabel ? undefined : \"true\"}>\n {triggerText()}\n </span>\n <i class=\"ti ti-selector k2b-choice-trigger__chevron\" aria-hidden=\"true\" />\n </>\n }\n >\n {(render) => render()(selected())}\n </Show>\n </button>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <div\n ref={(element) => {\n popoverElement = element;\n popover.setPopover(element);\n }}\n popover=\"manual\"\n class=\"k2b-choice-popover k2b-rich-select__popover\"\n role=\"group\"\n aria-label={title()}\n data-preview={withPreview() ? \"true\" : undefined}\n data-status={status()}\n style={{ width: props.size?.width, height: height() }}\n onKeyDown={onKeyDown}\n onPointerDown={(event) => {\n // Keep focus on the trigger or search field, so the keys keep working after a click on the preview.\n if (!(event.target as Element).closest(\"input, button, textarea, a\")) event.preventDefault();\n }}\n >\n <Show when={!withPreview()}>\n <div class=\"k2b-rich-select__title\" aria-hidden=\"true\">\n {title()}\n </div>\n </Show>\n <Switch>\n <Match when={status() === \"error\"}>\n <div id={listboxId} role=\"listbox\" aria-label={title()} />\n <RichSelectState status=\"error\" messages={messages()} onRetry={props.onRetry} restoreFocus={restorePopoverFocus} />\n </Match>\n <Match when={status() === \"ready\" && props.items.length === 0}>\n <div id={listboxId} role=\"listbox\" aria-label={title()} />\n <RichSelectState status=\"empty\" messages={messages()} empty={props.empty} />\n <Show when={props.footer}>\n {(footer) => (\n <RichSelectFooterControl\n footer={footer()}\n initialName={query}\n messages={messages()}\n done={runFooter}\n restoreFocus={restorePopoverFocus}\n />\n )}\n </Show>\n </Match>\n <Match when>\n <div class=\"k2b-rich-select__body\">\n <div class=\"k2b-rich-select__column\">\n <Show when={searchable()}>\n <div class=\"k2b-choice-search k2b-rich-select__search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(input) => {\n searchRef = input;\n onCleanup(() => {\n if (document.activeElement === input)\n queueMicrotask(() => {\n if (popover.open()) popover.trigger()?.focus();\n });\n });\n }}\n type=\"search\"\n role=\"combobox\"\n aria-expanded={popover.open()}\n aria-autocomplete=\"list\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().search}\n aria-controls={listboxId}\n aria-activedescendant={activeItem() ? optionId(active()) : undefined}\n autocomplete=\"off\"\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n setActive(visible().length > 0 ? 0 : -1);\n }}\n />\n </div>\n </Show>\n <div\n id={listboxId}\n class=\"k2b-rich-select__list\"\n role=\"listbox\"\n aria-label={title()}\n aria-busy={status() === \"loading\" ? \"true\" : undefined}\n data-visual={anyVisual() ? \"true\" : undefined}\n data-choice-scroll\n >\n <Show when={status() === \"loading\"}>\n <span class=\"k2b-sr-only\">{messages().loading}</span>\n <RichSelectPlaceholders visual={anyVisual() || props.items.length === 0} />\n </Show>\n <Show when={status() === \"ready\"}>\n <For each={rows()} fallback={<div class=\"k2b-rich-select__no-results\">{messages().noResults}</div>}>\n {(row) =>\n row.kind === \"heading\" ? (\n <div class=\"k2b-rich-select__heading\" role=\"presentation\">\n {row.label}\n </div>\n ) : (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the trigger or search field handles the keys through aria-activedescendant.\n <div\n id={optionId(row.index)}\n class=\"k2b-rich-select__option\"\n role=\"option\"\n aria-selected={row.item.value === value()}\n aria-disabled={row.item.disabledReason ? \"true\" : undefined}\n aria-labelledby={`${optionId(row.index)}-label`}\n aria-describedby={\n [\n row.item.disabledReason || row.item.description ? `${optionId(row.index)}-line` : \"\",\n withPreview() && row.index === active() ? previewId : \"\",\n ]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n data-active={row.index === active() ? \"true\" : undefined}\n onPointerMove={() => {\n if (active() !== row.index) setActive(row.index);\n }}\n onClick={() => choose(row.item)}\n >\n <Show when={anyVisual()}>\n <Show when={hasVisual(row.item)} fallback={<span class=\"k2b-rich-select__visual\" />}>\n <RichSelectVisual item={row.item} />\n </Show>\n </Show>\n <RichSelectRowText\n item={row.item}\n labelId={`${optionId(row.index)}-label`}\n lineId={`${optionId(row.index)}-line`}\n />\n <i class=\"ti ti-check k2b-rich-select__check\" aria-hidden=\"true\" />\n </div>\n )\n }\n </For>\n </Show>\n </div>\n <Show when={props.footer && status() === \"ready\"}>\n <RichSelectFooterControl\n footer={props.footer!}\n initialName={query}\n messages={messages()}\n done={runFooter}\n restoreFocus={restorePopoverFocus}\n />\n </Show>\n </div>\n <Show when={props.renderPreview}>\n {(render) => (\n <div class=\"k2b-rich-select__preview\" data-choice-scroll>\n <Show when={status() === \"loading\"}>\n <div class=\"k2b-rich-select__preview-placeholder\" aria-hidden=\"true\">\n <span />\n <span style={{ width: \"86%\" }} />\n <span style={{ width: \"72%\" }} />\n <span style={{ width: \"80%\" }} />\n </div>\n </Show>\n <Show when={activeItem()}>{(item) => <RichSelectPreview id={previewId} item={item()} render={render()} />}</Show>\n </div>\n )}\n </Show>\n </div>\n </Match>\n </Switch>\n </div>\n </div>\n </Field>\n );\n}\n\n/**\n * The phone presentation: a bottom sheet with the list. With a preview, an\n * info button beside each row, unavailable rows included, opens the preview as\n * a second level with Back and Choose.\n */\nfunction RichSelectSheet(sheet: {\n props: RichSelectProps;\n title: string;\n value: () => string | null;\n dialog: HTMLDialogElement;\n close: () => void;\n done: (run: () => void) => void;\n}): JSX.Element {\n const messages = useRichSelectMessages();\n const props = sheet.props;\n const uid = createUniqueId();\n const [query, setQuery] = createSignal(\"\");\n const [detailValue, setDetailValue] = createSignal<string>();\n // Resolve from the current snapshot: access and availability can change while\n // the detail level is open.\n const detail = createMemo(() => props.items.find((item) => item.value === detailValue()));\n let back: HTMLButtonElement | undefined;\n let returnValue: string | undefined;\n const status = () => props.status ?? \"ready\";\n const searchable = () => status() === \"ready\" && props.items.length >= RICH_SELECT_SEARCH_FROM;\n const visible = createMemo(() => (searchable() ? filterChoiceOptions(props.items, query()) : props.items));\n const anyVisual = createMemo(() => props.items.some(hasVisual));\n const headings = () => (props.items.length >= RICH_SELECT_SEARCH_FROM && props.sections ? props.sections : undefined);\n const restoreSheetFocus = () => {\n if (sheet.dialog.open) sheet.dialog.focus();\n };\n const headingBefore = (index: number) => {\n const item = visible()[index];\n const list = headings();\n if (!list || !item?.section || visible()[index - 1]?.section === item.section) return undefined;\n return list.find((candidate) => candidate.id === item.section)?.label;\n };\n const choose = (item: RichSelectItem) => {\n if (props.disabled || status() !== \"ready\" || item.disabledReason) return;\n sheet.done(() => {\n const current = props.items.find((candidate) => candidate.value === item.value);\n if (!props.disabled && status() === \"ready\" && current && !current.disabledReason) commitFieldValue(props, current.value);\n });\n };\n const rowId = (index: number) => `k2b-rich-select-sheet-${uid}-${index}`;\n const showDetail = (item: RichSelectItem) => {\n returnValue = item.value;\n // The second level keeps the sheet's height, so Back and Choose stay where they are.\n sheet.dialog.style.minHeight = `${sheet.dialog.getBoundingClientRect().height}px`;\n setDetailValue(item.value);\n queueMicrotask(() => back?.focus());\n };\n const leaveDetail = () => {\n sheet.dialog.style.minHeight = \"\";\n setDetailValue(undefined);\n const value = returnValue;\n queueMicrotask(() => {\n const index = visible().findIndex((item) => item.value === value);\n const original = index >= 0 ? document.getElementById(`${rowId(index)}-info`) : undefined;\n const fallback = sheet.dialog.querySelector<HTMLButtonElement>(\".k2b-rich-select__sheet-row > button\");\n (original ?? fallback ?? sheet.dialog).focus();\n });\n };\n createEffect(() => {\n if (detailValue() !== undefined && (!detail() || status() !== \"ready\")) leaveDetail();\n });\n // Escape on the second level goes back to the list instead of closing the sheet.\n const onEscape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !detail()) return;\n event.preventDefault();\n event.stopPropagation();\n leaveDetail();\n };\n onMount(() => {\n sheet.dialog.addEventListener(\"keydown\", onEscape, true);\n onCleanup(() => {\n sheet.dialog.removeEventListener(\"keydown\", onEscape, true);\n // dialogCore may reuse the dialog element for the next dialog.\n sheet.dialog.style.minHeight = \"\";\n });\n });\n\n return (\n <>\n <header class=\"k2b-rich-select__sheet-header\">\n <Show when={detail()}>\n <button ref={back} type=\"button\" class=\"k2b-dialog__close\" aria-label={messages().back} onClick={leaveDetail}>\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </button>\n </Show>\n <h2>{detail()?.label ?? sheet.title}</h2>\n <button type=\"button\" class=\"k2b-dialog__close\" aria-label={messages().close} onClick={sheet.close}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </header>\n <Show\n when={detail()}\n fallback={\n <BottomSheet.Body>\n <Switch>\n <Match when={status() === \"error\"}>\n <RichSelectState status=\"error\" messages={messages()} onRetry={props.onRetry} restoreFocus={restoreSheetFocus} />\n </Match>\n <Match when={status() === \"ready\" && props.items.length === 0}>\n <RichSelectState status=\"empty\" messages={messages()} empty={props.empty} />\n <Show when={props.footer}>\n {(footer) => (\n <RichSelectFooterControl\n footer={footer()}\n initialName={query}\n messages={messages()}\n done={sheet.done}\n restoreFocus={restoreSheetFocus}\n />\n )}\n </Show>\n </Match>\n <Match when>\n <Show when={searchable()}>\n <div class=\"k2b-choice-search k2b-rich-select__search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(input) => {\n onCleanup(() => {\n if (document.activeElement === input) queueMicrotask(restoreSheetFocus);\n });\n }}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().search}\n autocomplete=\"off\"\n onInput={(event) => setQuery(event.currentTarget.value)}\n />\n </div>\n </Show>\n <div\n class=\"k2b-rich-select__list\"\n role=\"list\"\n aria-label={sheet.title}\n aria-busy={status() === \"loading\" ? \"true\" : undefined}\n data-visual={anyVisual() ? \"true\" : undefined}\n >\n <Show when={status() === \"loading\"}>\n <span class=\"k2b-sr-only\">{messages().loading}</span>\n <RichSelectPlaceholders visual={anyVisual() || props.items.length === 0} />\n </Show>\n <Show when={status() === \"ready\"}>\n <For each={visible()} fallback={<div class=\"k2b-rich-select__no-results\">{messages().noResults}</div>}>\n {(item, index) => (\n <>\n <Show when={headingBefore(index())}>{(label) => <div class=\"k2b-rich-select__heading\">{label()}</div>}</Show>\n <div class=\"k2b-rich-select__sheet-row\" role=\"listitem\" data-info={props.renderPreview ? \"true\" : undefined}>\n <button\n id={rowId(index())}\n type=\"button\"\n class=\"k2b-rich-select__option\"\n aria-current={item.value === sheet.value() ? \"true\" : undefined}\n aria-disabled={item.disabledReason ? \"true\" : undefined}\n aria-labelledby={`${rowId(index())}-label`}\n aria-describedby={item.disabledReason || item.description ? `${rowId(index())}-line` : undefined}\n onClick={() => choose(item)}\n >\n <Show when={anyVisual()}>\n <Show when={hasVisual(item)} fallback={<span class=\"k2b-rich-select__visual\" />}>\n <RichSelectVisual item={item} />\n </Show>\n </Show>\n <RichSelectRowText item={item} labelId={`${rowId(index())}-label`} lineId={`${rowId(index())}-line`} />\n <i class=\"ti ti-check k2b-rich-select__check\" aria-hidden=\"true\" />\n </button>\n <Show when={props.renderPreview}>\n <button\n id={`${rowId(index())}-info`}\n type=\"button\"\n class=\"k2b-rich-select__info\"\n aria-label={messages().detailsFor({ name: item.label })}\n onClick={() => showDetail(item)}\n >\n <i class=\"ti ti-info-circle\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </>\n )}\n </For>\n </Show>\n </div>\n <Show when={props.footer && status() === \"ready\"}>\n <RichSelectFooterControl\n footer={props.footer!}\n initialName={query}\n messages={messages()}\n done={sheet.done}\n restoreFocus={restoreSheetFocus}\n />\n </Show>\n </Match>\n </Switch>\n </BottomSheet.Body>\n }\n >\n {(item) => (\n <>\n <BottomSheet.Body>\n <div class=\"k2b-rich-select__preview\" data-level=\"detail\">\n <RichSelectPreview item={item()} render={props.renderPreview!} />\n </div>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button\n variant=\"primary\"\n size=\"lg\"\n class=\"k2b-rich-select__choose\"\n disabled={Boolean(item().disabledReason)}\n onClick={() => choose(item())}\n >\n <i class=\"ti ti-check\" aria-hidden=\"true\" />\n {messages().choose}\n </Button>\n </BottomSheet.Footer>\n </>\n )}\n </Show>\n </>\n );\n}\n\nexport default RichSelect;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/RichSelect.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n Match,\n onCleanup,\n onMount,\n Show,\n Switch,\n untrack,\n} from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport BottomSheet, { bottomSheetOptions } from \"../layout/BottomSheet\";\nimport { createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { type RichSelectMessages, useRichSelectMessages } from \"./rich-select-messages\";\nimport type { ChoiceAppearance } from \"./Select\";\n\n/** One option: a name plus at most one short line. */\nexport type RichSelectItem = {\n value: string;\n /** Wraps; never truncated. */\n label: string;\n /** At most one short line that says what the choice changes. */\n description?: string;\n /** Icon class shown before the name. */\n icon?: string;\n /** Color dot shown before the name, such as a space color. Replaces `icon`. */\n color?: string;\n /** Creates a fresh visual for each render location. Replaces `icon` and `color`. */\n visual?: () => JSX.Element;\n /** Makes the row unavailable. The reason replaces `description`; the arrow keys still reach the row. */\n disabledReason?: string;\n /** Section id. Headings show only from eight options; keep each section's items together. */\n section?: string;\n /** Extra search terms that are not shown. */\n keywords?: readonly string[];\n};\n\nexport type RichSelectSection = { id: string; label: string };\n\nexport type RichSelectStatus = \"ready\" | \"loading\" | \"error\";\n\nexport type RichSelectFooter =\n | { label: string; icon?: string; onActivate: () => void }\n | { label: string; icon?: string; create: { placeholder: string; onCreate: (name: string) => void } };\n\nexport type RichSelectFact = {\n icon: string;\n text: JSX.Element;\n tone?: \"default\" | \"warning\";\n};\n\nexport type RichSelectProps = ValueFieldProps<string | null> & {\n items: readonly RichSelectItem[];\n /** Labels for the `section` ids of the items. */\n sections?: readonly RichSelectSection[];\n /** Names the list: the heading of a list without preview, the phone sheet title, and the listbox label. */\n title?: string;\n placeholder?: string;\n /** Replaces the selected item's name in the trigger, such as \"Name · address\". */\n triggerLabel?: string;\n /** Icon class for the trigger while no item with its own visual is selected. */\n icon?: string;\n tone?: \"default\" | \"warning\";\n /** Custom content inside the shared trigger button, which keeps the combobox semantics. */\n renderTrigger?: (selected: RichSelectItem | undefined) => JSX.Element;\n /**\n * The body of the preview beside the list, for options whose consequences differ.\n * Without it the picker shows only the list. Keep it to at most three facts.\n */\n renderPreview?: (item: RichSelectItem) => JSX.Element;\n searchPlaceholder?: string;\n status?: RichSelectStatus;\n onRetry?: () => void;\n /** Shown when the list is ready and has no items. */\n empty?: JSX.Element;\n footer?: RichSelectFooter;\n appearance?: ChoiceAppearance;\n placement?: \"bottom-start\" | \"top-start\";\n /** CSS lengths for the desktop popover. */\n size?: { width?: string; height?: string };\n name?: string;\n};\n\n/** Search and section headings appear from this many options. */\nexport const RICH_SELECT_SEARCH_FROM = 8;\nconst PHONE_QUERY = \"(max-width: 47.999rem)\";\nconst PLACEHOLDER_ROWS = 4;\n\ntype Row = { kind: \"heading\"; id: string; label: string } | { kind: \"item\"; item: RichSelectItem; index: number };\n\nconst rowKey = (row: Row) => (row.kind === \"heading\" ? `heading:${row.id}` : `item:${row.item.value}`);\n\nconst isPhone = () => typeof matchMedia === \"function\" && matchMedia(PHONE_QUERY).matches;\n\nfunction RichSelectVisual(props: { item: RichSelectItem }): JSX.Element {\n return (\n <Switch>\n <Match when={props.item.visual}>{(visual) => <span class=\"k2b-rich-select__visual\">{visual()()}</span>}</Match>\n <Match when={props.item.color}>\n {(color) => (\n <span class=\"k2b-rich-select__visual\" aria-hidden=\"true\">\n <span class=\"k2b-rich-select__dot\" style={{ \"background-color\": color() }} />\n </span>\n )}\n </Match>\n <Match when={props.item.icon}>\n {(icon) => (\n <span class=\"k2b-rich-select__visual\" aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Match>\n </Switch>\n );\n}\n\nconst hasVisual = (item: RichSelectItem) => Boolean(item.visual || item.color || item.icon);\n\n/** Name and second line. The reason of an unavailable row replaces the description. */\nfunction RichSelectRowText(props: { item: RichSelectItem; labelId: string; lineId: string }): JSX.Element {\n return (\n <span class=\"k2b-rich-select__text\">\n <span id={props.labelId} class=\"k2b-rich-select__label\">\n {props.item.label}\n </span>\n <Show when={props.item.disabledReason ?? props.item.description}>\n {(line) => (\n <span id={props.lineId} class=\"k2b-rich-select__line\" data-reason={props.item.disabledReason ? \"true\" : undefined}>\n {line()}\n </span>\n )}\n </Show>\n </span>\n );\n}\n\nfunction RichSelectPlaceholders(props: { visual: boolean }): JSX.Element {\n return (\n <For each={Array.from({ length: PLACEHOLDER_ROWS }, (_, index) => index)}>\n {(index) => (\n <div class=\"k2b-rich-select__placeholder\" data-visual={props.visual ? \"true\" : undefined} aria-hidden=\"true\">\n <Show when={props.visual}>\n <span class=\"k2b-rich-select__placeholder-visual\" />\n </Show>\n <span class=\"k2b-rich-select__placeholder-lines\">\n <span style={{ width: `${[58, 46, 66, 50][index % 4]}%` }} />\n <span style={{ width: `${[34, 28, 40, 30][index % 4]}%` }} />\n </span>\n </div>\n )}\n </For>\n );\n}\n\nfunction RichSelectState(props: {\n status: \"error\" | \"empty\";\n messages: RichSelectMessages;\n empty?: JSX.Element;\n onRetry?: () => void;\n restoreFocus?: () => void;\n}): JSX.Element {\n let retryButton: HTMLButtonElement | undefined;\n onCleanup(() => {\n if (retryButton && document.activeElement === retryButton) queueMicrotask(() => props.restoreFocus?.());\n });\n return (\n <div class=\"k2b-rich-select__state\" data-status={props.status} role={props.status === \"error\" ? \"alert\" : \"status\"}>\n <span class=\"k2b-rich-select__state-icon\" aria-hidden=\"true\">\n <i class={props.status === \"error\" ? \"ti ti-alert-triangle\" : \"ti ti-list-search\"} />\n </span>\n <Show\n when={props.status === \"error\"}\n fallback={<div class=\"k2b-rich-select__state-text\">{props.empty ?? props.messages.noOptions}</div>}\n >\n <div class=\"k2b-rich-select__state-text\">{props.messages.couldNotLoad}</div>\n <Show when={props.onRetry}>\n {(retry) => (\n <Button ref={retryButton} variant=\"secondary\" size=\"sm\" onClick={() => retry()()}>\n <i class=\"ti ti-refresh\" aria-hidden=\"true\" />\n {props.messages.retry}\n </Button>\n )}\n </Show>\n </Show>\n </div>\n );\n}\n\nfunction RichSelectPreview(props: { item: RichSelectItem; render: (item: RichSelectItem) => JSX.Element; id?: string }): JSX.Element {\n return (\n <div id={props.id}>\n <h3 class=\"k2b-rich-select__preview-title\">\n <RichSelectVisual item={props.item} />\n <span>{props.item.label}</span>\n </h3>\n {props.render(props.item)}\n </div>\n );\n}\n\n/** Up to three short facts for a preview, each with an icon; warnings in the warning tone. */\nexport function RichSelectFacts(props: { facts: readonly RichSelectFact[] }): JSX.Element {\n return (\n <ul class=\"k2b-rich-select__facts\">\n <For each={props.facts.slice(0, 3)}>\n {(fact) => (\n <li data-tone={fact.tone === \"warning\" ? \"warning\" : undefined}>\n <i class={fact.icon} aria-hidden=\"true\" />\n <span>{fact.text}</span>\n </li>\n )}\n </For>\n </ul>\n );\n}\n\nfunction RichSelectFooterControl(props: {\n footer: RichSelectFooter;\n initialName: () => string;\n messages: RichSelectMessages;\n done: (run: () => void) => void;\n restoreFocus: () => void;\n}): JSX.Element {\n const [creating, setCreating] = createSignal(false);\n const [name, setName] = createSignal(\"\");\n let input: HTMLInputElement | undefined;\n let start: HTMLButtonElement | undefined;\n let controls: HTMLDivElement | undefined;\n onCleanup(() => {\n if (controls?.contains(document.activeElement)) queueMicrotask(props.restoreFocus);\n });\n const create = () => {\n const footer = props.footer;\n const value = name().trim();\n if (!(\"create\" in footer) || !value) return;\n props.done(() => footer.create.onCreate(value));\n };\n return (\n <div ref={controls} class=\"k2b-rich-select__footer\">\n <Show\n when={creating() && \"create\" in props.footer ? props.footer.create : undefined}\n fallback={\n <button\n ref={start}\n type=\"button\"\n class=\"k2b-rich-select__footer-action\"\n onClick={() => {\n const footer = props.footer;\n if (\"create\" in footer) {\n setName(props.initialName());\n setCreating(true);\n queueMicrotask(() => input?.focus());\n } else props.done(footer.onActivate);\n }}\n >\n <span class=\"k2b-rich-select__visual\" aria-hidden=\"true\">\n <i class={props.footer.icon ?? \"ti ti-plus\"} />\n </span>\n <span class=\"k2b-rich-select__label\">{props.footer.label}</span>\n </button>\n }\n >\n {(create_) => (\n <div class=\"k2b-rich-select__create\">\n <input\n ref={input}\n class=\"k2b-rich-select__create-input\"\n value={name()}\n placeholder={create_().placeholder}\n aria-label={props.footer.label}\n autocomplete=\"off\"\n onInput={(event) => setName(event.currentTarget.value)}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === \"Escape\") {\n event.preventDefault();\n setCreating(false);\n queueMicrotask(() => start?.focus());\n } else if (event.key === \"Enter\" && !event.isComposing) {\n event.preventDefault();\n create();\n }\n }}\n />\n <Button type=\"button\" variant=\"primary\" size=\"sm\" disabled={!name().trim()} onClick={create}>\n {props.messages.create}\n </Button>\n </div>\n )}\n </Show>\n </div>\n );\n}\n\n/**\n * A dropdown whose rows explain each choice: a name plus one short line, an\n * unavailable row with its reason, and an optional preview of what a choice\n * changes. Desktop opens a popover beside the trigger; a phone opens a bottom\n * sheet whose info buttons show the preview as a second level.\n */\nexport function RichSelect(props: RichSelectProps): JSX.Element {\n const messages = useRichSelectMessages();\n const locale = useLocale();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const previewId = `${meta.controlId}-preview`;\n const [query, setQuery] = createSignal(\"\");\n const [active, setActive] = createSignal(-1);\n const [height, setHeight] = createSignal<string>();\n const [sheetOpen, setSheetOpen] = createSignal(false);\n const [phone, setPhone] = createSignal(false);\n const [sheetId, setSheetId] = createSignal<string>();\n onMount(() => {\n const media = window.matchMedia(PHONE_QUERY);\n setPhone(media.matches);\n const update = () => setPhone(media.matches);\n media.addEventListener(\"change\", update);\n onCleanup(() => media.removeEventListener(\"change\", update));\n });\n let searchRef: HTMLInputElement | undefined;\n let closeSheet: (() => void) | undefined;\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const error = () => resolveMaybeAccessor(props.error);\n const status = () => props.status ?? \"ready\";\n const withPreview = () => Boolean(props.renderPreview);\n const title = () =>\n props.title ?? (typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? props.placeholder ?? messages().chooseOption));\n const searchable = () => status() === \"ready\" && props.items.length >= RICH_SELECT_SEARCH_FROM;\n const visible = createMemo(() => (searchable() ? filterChoiceOptions(props.items, query()) : props.items));\n const anyVisual = createMemo(() => props.items.some(hasVisual));\n const rows = createMemo<Row[]>(() => {\n const headings = props.items.length >= RICH_SELECT_SEARCH_FROM && props.sections ? props.sections : undefined;\n const result: Row[] = [];\n let section: string | undefined;\n visible().forEach((item, index) => {\n if (headings && item.section && item.section !== section) {\n const heading = headings.find((candidate) => candidate.id === item.section);\n if (heading) result.push({ kind: \"heading\", id: heading.id, label: heading.label });\n }\n section = item.section;\n result.push({ kind: \"item\", item, index });\n });\n return result;\n });\n // Rows are keyed by heading and value, not by object: a host that rebuilds equal items must not replace the option\n // under a press, which would swallow its click.\n const rowsByKey = createMemo(() => new Map(rows().map((row) => [rowKey(row), row])));\n const selected = createMemo(() => {\n const current = value();\n return current === null ? undefined : props.items.find((item) => item.value === current);\n });\n const activeItem = () => (status() === \"ready\" ? visible()[active()] : undefined);\n const optionId = (index: number) => `${listboxId}-${index}`;\n const popover = createChoicePopover(\n () => Boolean(props.disabled),\n () => ({ width: \"own\", side: props.placement === \"top-start\" ? \"above\" : \"below\" }),\n );\n const expanded = () => popover.open() || sheetOpen();\n const restorePopoverFocus = () => {\n if (popover.open()) (searchable() ? searchRef : popover.trigger())?.focus();\n };\n\n createEffect(() => {\n if (props.disabled) {\n popover.hide();\n closeSheet?.();\n }\n });\n createEffect(() => {\n const count = visible().length;\n if (!popover.open() || status() !== \"ready\") return;\n const current = untrack(active);\n if (current < 0 || current >= count) setActive(startIndex());\n });\n\n const scrollToActive = () => {\n const element = document.getElementById(optionId(active()));\n element?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (next: number) => {\n if (next < 0) return;\n setActive(next);\n queueMicrotask(scrollToActive);\n };\n const startIndex = () => {\n const index = visible().findIndex((item) => item.value === value());\n return index >= 0 ? index : visible().length > 0 ? 0 : -1;\n };\n\n const openPopover = () => {\n setQuery(\"\");\n setActive(startIndex());\n // The preview popover keeps one height while it is open, so moving\n // through rows, filtering, or the end of loading never resizes it.\n const rowsTall = status() === \"ready\" ? props.items.length : PLACEHOLDER_ROWS;\n const rem = Math.min(27.5, Math.max(18.75, rowsTall * 3.625 + 1.5));\n setHeight(props.size?.height ?? (withPreview() ? `${rem}rem` : undefined));\n popover.show();\n if (searchable()) queueMicrotask(() => searchRef?.focus());\n queueMicrotask(scrollToActive);\n };\n const open = () => {\n if (props.disabled || expanded()) return;\n if (isPhone()) openSheet();\n else openPopover();\n };\n const close = (restoreFocus = false) => {\n popover.hide(restoreFocus);\n setQuery(\"\");\n setActive(-1);\n };\n const choose = (item: RichSelectItem | undefined) => {\n if (props.disabled || status() !== \"ready\" || !item || item.disabledReason) return;\n // Hide first: the old list must never stay visible with the next value.\n close(true);\n commitFieldValue(props, item.value);\n };\n const runFooter = (run: () => void) => {\n close(true);\n run();\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing) return;\n const target = event.target;\n if (\n event.key !== \"Escape\" &&\n target instanceof Element &&\n target !== popover.trigger() &&\n target !== searchRef &&\n target.closest(\"input, button, textarea, a, [contenteditable]\")\n )\n return;\n const isOpen = popover.open();\n const count = visible().length;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!isOpen) open();\n else if (status() === \"ready\") move(nextEnabledChoiceIndex(visible(), active(), event.key === \"ArrowDown\" ? 1 : -1));\n } else if ((event.key === \"Home\" || event.key === \"End\") && isOpen) {\n event.preventDefault();\n if (status() === \"ready\" && count > 0) move(event.key === \"Home\" ? 0 : count - 1);\n } else if ((event.key === \"Enter\" || event.key === \" \") && !isOpen && event.target === popover.trigger()) {\n event.preventDefault();\n open();\n } else if (event.key === \"Enter\" && isOpen) {\n // Enter on an unavailable row does nothing; the list stays open.\n event.preventDefault();\n choose(activeItem());\n } else if (event.key === \"Escape\" && isOpen) {\n // A closed picker lets Escape reach an enclosing dialog.\n event.preventDefault();\n event.stopPropagation();\n close(true);\n } else if (\n isOpen &&\n searchable() &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n event.target !== searchRef\n ) {\n // Typing anywhere in the open picker goes to the search field.\n event.preventDefault();\n setQuery(query() + event.key);\n setActive(visible().length > 0 ? 0 : -1);\n searchRef?.focus();\n }\n };\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (!popover.open() || !(next instanceof Node)) return;\n if (popover.trigger()?.contains(next) || popoverElement?.contains(next)) return;\n close();\n };\n\n let popoverElement: HTMLDivElement | undefined;\n\n const openSheet = () => {\n const current = locale();\n const lifetime = new AbortController();\n // dialogCore can wait for a previous sheet's history traversal. Disabling\n // or unmounting the field must also cancel an opening that is still queued.\n closeSheet = () => lifetime.abort();\n let after: (() => void) | undefined;\n setSheetOpen(true);\n void dialogCore\n .open<void>(\n (closeDialog, context) => {\n context.dialog.id ||= `${meta.controlId}-sheet`;\n setSheetId(context.dialog.id);\n return (\n <LocaleProvider locale={current}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <RichSelectSheet\n props={props}\n title={title()}\n value={value}\n dialog={context.dialog}\n close={() => closeDialog()}\n done={(run) => {\n after = run;\n closeDialog();\n }}\n />\n </BottomSheet>\n </LocaleProvider>\n );\n },\n {\n ...bottomSheetOptions,\n history: true,\n signal: lifetime.signal,\n // A phone keyboard must not cover the list as it opens: focus starts on the sheet.\n initialFocus: (dialog) => {\n dialog.tabIndex = -1;\n return dialog;\n },\n },\n )\n .then(() => {\n if (!lifetime.signal.aborted) after?.();\n })\n .finally(() => {\n closeSheet = undefined;\n setSheetOpen(false);\n });\n };\n onCleanup(() => closeSheet?.());\n\n const triggerText = () => props.triggerLabel ?? selected()?.label ?? props.placeholder ?? messages().chooseOption;\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-choice-control k2b-rich-select\"\n data-appearance={props.appearance ?? \"field\"}\n data-invalid={error() ? \"true\" : undefined}\n onFocusOut={onFocusOut}\n >\n <button\n ref={popover.setTrigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-choice-trigger k2b-rich-select__trigger\"\n role=\"combobox\"\n aria-haspopup={sheetOpen() || (!popover.open() && phone()) ? \"dialog\" : \"listbox\"}\n aria-expanded={expanded()}\n aria-controls={sheetOpen() ? sheetId() : popover.open() ? listboxId : undefined}\n aria-activedescendant={popover.open() && activeItem() ? optionId(active()) : undefined}\n data-tone={props.tone === \"warning\" ? \"warning\" : undefined}\n {...fieldControlAria(meta, {\n ...props,\n \"aria-label\": props[\"aria-label\"] ?? (typeof props.label === \"string\" ? undefined : title()),\n })}\n disabled={props.disabled}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={onKeyDown}\n >\n <Show\n when={props.renderTrigger}\n fallback={\n <>\n <Show\n when={selected() && hasVisual(selected()!) ? selected() : undefined}\n fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(item) => <RichSelectVisual item={item()} />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder={selected() || props.triggerLabel ? undefined : \"true\"}>\n {triggerText()}\n </span>\n <i class=\"ti ti-selector k2b-choice-trigger__chevron\" aria-hidden=\"true\" />\n </>\n }\n >\n {(render) => render()(selected())}\n </Show>\n </button>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <div\n ref={(element) => {\n popoverElement = element;\n popover.setPopover(element);\n }}\n popover=\"manual\"\n class=\"k2b-choice-popover k2b-rich-select__popover\"\n role=\"group\"\n aria-label={title()}\n data-preview={withPreview() ? \"true\" : undefined}\n data-status={status()}\n style={{ width: props.size?.width, height: height() }}\n onKeyDown={onKeyDown}\n onPointerDown={(event) => {\n // Keep focus on the trigger or search field, so the keys keep working after a click on the preview.\n if (!(event.target as Element).closest(\"input, button, textarea, a\")) event.preventDefault();\n }}\n >\n <Show when={!withPreview()}>\n <div class=\"k2b-rich-select__title\" aria-hidden=\"true\">\n {title()}\n </div>\n </Show>\n <Switch>\n <Match when={status() === \"error\"}>\n <div id={listboxId} role=\"listbox\" aria-label={title()} />\n <RichSelectState status=\"error\" messages={messages()} onRetry={props.onRetry} restoreFocus={restorePopoverFocus} />\n </Match>\n <Match when={status() === \"ready\" && props.items.length === 0}>\n <div id={listboxId} role=\"listbox\" aria-label={title()} />\n <RichSelectState status=\"empty\" messages={messages()} empty={props.empty} />\n <Show when={props.footer}>\n {(footer) => (\n <RichSelectFooterControl\n footer={footer()}\n initialName={query}\n messages={messages()}\n done={runFooter}\n restoreFocus={restorePopoverFocus}\n />\n )}\n </Show>\n </Match>\n <Match when>\n <div class=\"k2b-rich-select__body\">\n <div class=\"k2b-rich-select__column\">\n <Show when={searchable()}>\n <div class=\"k2b-choice-search k2b-rich-select__search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(input) => {\n searchRef = input;\n onCleanup(() => {\n if (document.activeElement === input)\n queueMicrotask(() => {\n if (popover.open()) popover.trigger()?.focus();\n });\n });\n }}\n type=\"search\"\n role=\"combobox\"\n aria-expanded={popover.open()}\n aria-autocomplete=\"list\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().search}\n aria-controls={listboxId}\n aria-activedescendant={activeItem() ? optionId(active()) : undefined}\n autocomplete=\"off\"\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n setActive(visible().length > 0 ? 0 : -1);\n }}\n />\n </div>\n </Show>\n <div\n id={listboxId}\n class=\"k2b-rich-select__list\"\n role=\"listbox\"\n aria-label={title()}\n aria-busy={status() === \"loading\" ? \"true\" : undefined}\n data-visual={anyVisual() ? \"true\" : undefined}\n data-choice-scroll\n >\n <Show when={status() === \"loading\"}>\n <span class=\"k2b-sr-only\">{messages().loading}</span>\n <RichSelectPlaceholders visual={anyVisual() || props.items.length === 0} />\n </Show>\n <Show when={status() === \"ready\"}>\n <For each={rows().map(rowKey)} fallback={<div class=\"k2b-rich-select__no-results\">{messages().noResults}</div>}>\n {(key) => {\n const first = rowsByKey().get(key)!;\n if (first.kind === \"heading\") {\n const label = () => {\n const current = rowsByKey().get(key);\n return current?.kind === \"heading\" ? current.label : first.label;\n };\n return (\n <div class=\"k2b-rich-select__heading\" role=\"presentation\">\n {label()}\n </div>\n );\n }\n const entry = () => {\n const current = rowsByKey().get(key);\n return current?.kind === \"item\" ? current : first;\n };\n return (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the trigger or search field handles the keys through aria-activedescendant.\n <div\n id={optionId(entry().index)}\n class=\"k2b-rich-select__option\"\n role=\"option\"\n aria-selected={entry().item.value === value()}\n aria-disabled={entry().item.disabledReason ? \"true\" : undefined}\n aria-labelledby={`${optionId(entry().index)}-label`}\n aria-describedby={\n [\n entry().item.disabledReason || entry().item.description ? `${optionId(entry().index)}-line` : \"\",\n withPreview() && entry().index === active() ? previewId : \"\",\n ]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n data-active={entry().index === active() ? \"true\" : undefined}\n onPointerMove={() => {\n if (active() !== entry().index) setActive(entry().index);\n }}\n onClick={() => choose(entry().item)}\n >\n <Show when={anyVisual()}>\n <Show when={hasVisual(entry().item)} fallback={<span class=\"k2b-rich-select__visual\" />}>\n <RichSelectVisual item={entry().item} />\n </Show>\n </Show>\n <RichSelectRowText\n item={entry().item}\n labelId={`${optionId(entry().index)}-label`}\n lineId={`${optionId(entry().index)}-line`}\n />\n <i class=\"ti ti-check k2b-rich-select__check\" aria-hidden=\"true\" />\n </div>\n );\n }}\n </For>\n </Show>\n </div>\n <Show when={props.footer && status() === \"ready\"}>\n <RichSelectFooterControl\n footer={props.footer!}\n initialName={query}\n messages={messages()}\n done={runFooter}\n restoreFocus={restorePopoverFocus}\n />\n </Show>\n </div>\n <Show when={props.renderPreview}>\n {(render) => (\n <div class=\"k2b-rich-select__preview\" data-choice-scroll>\n <Show when={status() === \"loading\"}>\n <div class=\"k2b-rich-select__preview-placeholder\" aria-hidden=\"true\">\n <span />\n <span style={{ width: \"86%\" }} />\n <span style={{ width: \"72%\" }} />\n <span style={{ width: \"80%\" }} />\n </div>\n </Show>\n <Show when={activeItem()}>{(item) => <RichSelectPreview id={previewId} item={item()} render={render()} />}</Show>\n </div>\n )}\n </Show>\n </div>\n </Match>\n </Switch>\n </div>\n </div>\n </Field>\n );\n}\n\n/**\n * The phone presentation: a bottom sheet with the list. With a preview, an\n * info button beside each row, unavailable rows included, opens the preview as\n * a second level with Back and Choose.\n */\nfunction RichSelectSheet(sheet: {\n props: RichSelectProps;\n title: string;\n value: () => string | null;\n dialog: HTMLDialogElement;\n close: () => void;\n done: (run: () => void) => void;\n}): JSX.Element {\n const messages = useRichSelectMessages();\n const props = sheet.props;\n const uid = createUniqueId();\n const [query, setQuery] = createSignal(\"\");\n const [detailValue, setDetailValue] = createSignal<string>();\n // Resolve from the current snapshot: access and availability can change while\n // the detail level is open.\n const detail = createMemo(() => props.items.find((item) => item.value === detailValue()));\n let back: HTMLButtonElement | undefined;\n let returnValue: string | undefined;\n const status = () => props.status ?? \"ready\";\n const searchable = () => status() === \"ready\" && props.items.length >= RICH_SELECT_SEARCH_FROM;\n const visible = createMemo(() => (searchable() ? filterChoiceOptions(props.items, query()) : props.items));\n const anyVisual = createMemo(() => props.items.some(hasVisual));\n const headings = () => (props.items.length >= RICH_SELECT_SEARCH_FROM && props.sections ? props.sections : undefined);\n const restoreSheetFocus = () => {\n if (sheet.dialog.open) sheet.dialog.focus();\n };\n const headingBefore = (index: number) => {\n const item = visible()[index];\n const list = headings();\n if (!list || !item?.section || visible()[index - 1]?.section === item.section) return undefined;\n return list.find((candidate) => candidate.id === item.section)?.label;\n };\n const choose = (item: RichSelectItem) => {\n if (props.disabled || status() !== \"ready\" || item.disabledReason) return;\n sheet.done(() => {\n const current = props.items.find((candidate) => candidate.value === item.value);\n if (!props.disabled && status() === \"ready\" && current && !current.disabledReason) commitFieldValue(props, current.value);\n });\n };\n const rowId = (index: number) => `k2b-rich-select-sheet-${uid}-${index}`;\n const showDetail = (item: RichSelectItem) => {\n returnValue = item.value;\n // The second level keeps the sheet's height, so Back and Choose stay where they are.\n sheet.dialog.style.minHeight = `${sheet.dialog.getBoundingClientRect().height}px`;\n setDetailValue(item.value);\n queueMicrotask(() => back?.focus());\n };\n const leaveDetail = () => {\n sheet.dialog.style.minHeight = \"\";\n setDetailValue(undefined);\n const value = returnValue;\n queueMicrotask(() => {\n const index = visible().findIndex((item) => item.value === value);\n const original = index >= 0 ? document.getElementById(`${rowId(index)}-info`) : undefined;\n const fallback = sheet.dialog.querySelector<HTMLButtonElement>(\".k2b-rich-select__sheet-row > button\");\n (original ?? fallback ?? sheet.dialog).focus();\n });\n };\n createEffect(() => {\n if (detailValue() !== undefined && (!detail() || status() !== \"ready\")) leaveDetail();\n });\n // Escape on the second level goes back to the list instead of closing the sheet.\n const onEscape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !detail()) return;\n event.preventDefault();\n event.stopPropagation();\n leaveDetail();\n };\n onMount(() => {\n sheet.dialog.addEventListener(\"keydown\", onEscape, true);\n onCleanup(() => {\n sheet.dialog.removeEventListener(\"keydown\", onEscape, true);\n // dialogCore may reuse the dialog element for the next dialog.\n sheet.dialog.style.minHeight = \"\";\n });\n });\n\n return (\n <>\n <header class=\"k2b-rich-select__sheet-header\">\n <Show when={detail()}>\n <button ref={back} type=\"button\" class=\"k2b-dialog__close\" aria-label={messages().back} onClick={leaveDetail}>\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </button>\n </Show>\n <h2>{detail()?.label ?? sheet.title}</h2>\n <button type=\"button\" class=\"k2b-dialog__close\" aria-label={messages().close} onClick={sheet.close}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </header>\n <Show\n when={detail()}\n fallback={\n <BottomSheet.Body>\n <Switch>\n <Match when={status() === \"error\"}>\n <RichSelectState status=\"error\" messages={messages()} onRetry={props.onRetry} restoreFocus={restoreSheetFocus} />\n </Match>\n <Match when={status() === \"ready\" && props.items.length === 0}>\n <RichSelectState status=\"empty\" messages={messages()} empty={props.empty} />\n <Show when={props.footer}>\n {(footer) => (\n <RichSelectFooterControl\n footer={footer()}\n initialName={query}\n messages={messages()}\n done={sheet.done}\n restoreFocus={restoreSheetFocus}\n />\n )}\n </Show>\n </Match>\n <Match when>\n <Show when={searchable()}>\n <div class=\"k2b-choice-search k2b-rich-select__search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(input) => {\n onCleanup(() => {\n if (document.activeElement === input) queueMicrotask(restoreSheetFocus);\n });\n }}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().search}\n autocomplete=\"off\"\n onInput={(event) => setQuery(event.currentTarget.value)}\n />\n </div>\n </Show>\n <div\n class=\"k2b-rich-select__list\"\n role=\"list\"\n aria-label={sheet.title}\n aria-busy={status() === \"loading\" ? \"true\" : undefined}\n data-visual={anyVisual() ? \"true\" : undefined}\n >\n <Show when={status() === \"loading\"}>\n <span class=\"k2b-sr-only\">{messages().loading}</span>\n <RichSelectPlaceholders visual={anyVisual() || props.items.length === 0} />\n </Show>\n <Show when={status() === \"ready\"}>\n <For each={visible()} fallback={<div class=\"k2b-rich-select__no-results\">{messages().noResults}</div>}>\n {(item, index) => (\n <>\n <Show when={headingBefore(index())}>{(label) => <div class=\"k2b-rich-select__heading\">{label()}</div>}</Show>\n <div class=\"k2b-rich-select__sheet-row\" role=\"listitem\" data-info={props.renderPreview ? \"true\" : undefined}>\n <button\n id={rowId(index())}\n type=\"button\"\n class=\"k2b-rich-select__option\"\n aria-current={item.value === sheet.value() ? \"true\" : undefined}\n aria-disabled={item.disabledReason ? \"true\" : undefined}\n aria-labelledby={`${rowId(index())}-label`}\n aria-describedby={item.disabledReason || item.description ? `${rowId(index())}-line` : undefined}\n onClick={() => choose(item)}\n >\n <Show when={anyVisual()}>\n <Show when={hasVisual(item)} fallback={<span class=\"k2b-rich-select__visual\" />}>\n <RichSelectVisual item={item} />\n </Show>\n </Show>\n <RichSelectRowText item={item} labelId={`${rowId(index())}-label`} lineId={`${rowId(index())}-line`} />\n <i class=\"ti ti-check k2b-rich-select__check\" aria-hidden=\"true\" />\n </button>\n <Show when={props.renderPreview}>\n <button\n id={`${rowId(index())}-info`}\n type=\"button\"\n class=\"k2b-rich-select__info\"\n aria-label={messages().detailsFor({ name: item.label })}\n onClick={() => showDetail(item)}\n >\n <i class=\"ti ti-info-circle\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </>\n )}\n </For>\n </Show>\n </div>\n <Show when={props.footer && status() === \"ready\"}>\n <RichSelectFooterControl\n footer={props.footer!}\n initialName={query}\n messages={messages()}\n done={sheet.done}\n restoreFocus={restoreSheetFocus}\n />\n </Show>\n </Match>\n </Switch>\n </BottomSheet.Body>\n }\n >\n {(item) => (\n <>\n <BottomSheet.Body>\n <div class=\"k2b-rich-select__preview\" data-level=\"detail\">\n <RichSelectPreview item={item()} render={props.renderPreview!} />\n </div>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button\n variant=\"primary\"\n size=\"lg\"\n class=\"k2b-rich-select__choose\"\n disabled={Boolean(item().disabledReason)}\n onClick={() => choose(item())}\n >\n <i class=\"ti ti-check\" aria-hidden=\"true\" />\n {messages().choose}\n </Button>\n </BottomSheet.Footer>\n </>\n )}\n </Show>\n </>\n );\n}\n\nexport default RichSelect;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -225,7 +225,7 @@ export function TextInput(props) {
|
|
|
225
225
|
input(event.currentTarget.value);
|
|
226
226
|
},
|
|
227
227
|
"onChange": event => commit(event.currentTarget.value),
|
|
228
|
-
"onKeyDown":
|
|
228
|
+
"onKeyDown": keyDown
|
|
229
229
|
}), false, true);
|
|
230
230
|
_$insert(_el$6, () => isServer ? `\n${value()}` : undefined);
|
|
231
231
|
_$runHydrationEvents();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { useInputMessages } from \"./input-messages\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\" | \"compact\";\n /** Set false for a plain field without a leading icon. */\n icon?: string | false;\n activeIcon?: string;\n /** ID of a consumer-owned visible error; caller owns its announcement. Native controls only. */\n externalErrorId?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const inputMessages = useInputMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"externalErrorId\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"onKeyDown\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n // HTML IDs are single nonempty tokens; numeric starts and punctuation are valid.\n const externalErrorId = () => {\n const id = local.externalErrorId;\n return id && !/[\\t\\n\\f\\r ]/.test(id) ? id : undefined;\n };\n const controlMeta = {\n ...meta,\n get errorId() {\n return externalErrorId() ?? meta.errorId;\n },\n };\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const compact = () => local.variant === \"compact\";\n const icon = () =>\n local.icon === false\n ? \"\"\n : (local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\"));\n // A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.\n const activeIcon = () => local.activeIcon ?? (local.icon || undefined) ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n // Names, addresses and passwords are typed exactly: phone keyboards must not capitalize or \"correct\" them.\n const verbatim = () =>\n local.password || local.type === \"email\" || local.type === \"url\" || /\\b(username|email|url)\\b/.test(String(rest.autocomplete ?? \"\"));\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const submitOnEnter = (event: KeyboardEvent) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n };\n /** The caller's key handler runs first; Enter submits unless it handled the key. */\n const keyDown: JSX.EventHandler<HTMLInputElement, KeyboardEvent> = (event) => {\n const handler = local.onKeyDown;\n if (typeof handler === \"function\") handler(event);\n else if (Array.isArray(handler)) handler[0](handler[1], event);\n if (!event.defaultPrevented) submitOnEnter(event);\n };\n const clear: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (event) => {\n // Clearing removes the button. Return to the field before notifying the caller, whose handler\n // may deliberately navigate or move focus somewhere else.\n event.currentTarget.ownerDocument.getElementById(meta.controlId)?.focus();\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={externalErrorId() ? undefined : error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-variant={compact() ? \"compact\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <Show when={!compact() && local.icon !== false}>\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n </Show>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n autocapitalize={verbatim() ? \"none\" : undefined}\n autocorrect={verbatim() ? \"off\" : undefined}\n spellcheck={verbatim() ? false : undefined}\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n size={rest.size ?? (compact() ? 9 : undefined)}\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(controlMeta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={keyDown}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(controlMeta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={submitOnEnter}\n >\n {/* HTML consumes one leading newline in textarea content. */}\n {isServer ? `\\n${value()}` : undefined}\n </textarea>\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? inputMessages().hidePassword : inputMessages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { useInputMessages } from \"./input-messages\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"onKeyDown\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\" | \"compact\";\n /** Set false for a plain field without a leading icon. */\n icon?: string | false;\n activeIcon?: string;\n /** ID of a consumer-owned visible error; caller owns its announcement. Native controls only. */\n externalErrorId?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n onKeyDown?: JSX.EventHandlerUnion<HTMLInputElement | HTMLTextAreaElement, KeyboardEvent>;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const inputMessages = useInputMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"externalErrorId\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"onKeyDown\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n // HTML IDs are single nonempty tokens; numeric starts and punctuation are valid.\n const externalErrorId = () => {\n const id = local.externalErrorId;\n return id && !/[\\t\\n\\f\\r ]/.test(id) ? id : undefined;\n };\n const controlMeta = {\n ...meta,\n get errorId() {\n return externalErrorId() ?? meta.errorId;\n },\n };\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const compact = () => local.variant === \"compact\";\n const icon = () =>\n local.icon === false\n ? \"\"\n : (local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\"));\n // A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.\n const activeIcon = () => local.activeIcon ?? (local.icon || undefined) ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n // Names, addresses and passwords are typed exactly: phone keyboards must not capitalize or \"correct\" them.\n const verbatim = () =>\n local.password || local.type === \"email\" || local.type === \"url\" || /\\b(username|email|url)\\b/.test(String(rest.autocomplete ?? \"\"));\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const submitOnEnter = (event: KeyboardEvent) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n };\n /** The caller's key handler runs first; Enter submits unless it handled the key. */\n const keyDown: JSX.EventHandler<HTMLInputElement | HTMLTextAreaElement, KeyboardEvent> = (event) => {\n const handler = local.onKeyDown;\n if (typeof handler === \"function\") handler(event);\n else if (Array.isArray(handler)) handler[0](handler[1], event);\n if (!event.defaultPrevented) submitOnEnter(event);\n };\n const clear: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (event) => {\n // Clearing removes the button. Return to the field before notifying the caller, whose handler\n // may deliberately navigate or move focus somewhere else.\n event.currentTarget.ownerDocument.getElementById(meta.controlId)?.focus();\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={externalErrorId() ? undefined : error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-variant={compact() ? \"compact\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <Show when={!compact() && local.icon !== false}>\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n </Show>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n autocapitalize={verbatim() ? \"none\" : undefined}\n autocorrect={verbatim() ? \"off\" : undefined}\n spellcheck={verbatim() ? false : undefined}\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n size={rest.size ?? (compact() ? 9 : undefined)}\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(controlMeta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={keyDown}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(controlMeta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={keyDown}\n >\n {/* HTML consumes one leading newline in textarea content. */}\n {isServer ? `\\n${value()}` : undefined}\n </textarea>\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? inputMessages().hidePassword : inputMessages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
2
|
+
import { createMemo, For, untrack } from "solid-js";
|
|
3
|
+
/**
|
|
4
|
+
* `<For>` that keeps a row's element while its item stays the same: the same object, also when its getters change, or
|
|
5
|
+
* a new object with the same identity (`by`). Hosts rebuild equal items whenever their inputs change; `<For>` would
|
|
6
|
+
* then replace each row, and a row replaced between press and release swallows the click (#2140).
|
|
7
|
+
* Each row reads its current item.
|
|
8
|
+
*/
|
|
9
|
+
export function KeyedFor(props) {
|
|
10
|
+
let previous = [];
|
|
11
|
+
let counter = 0;
|
|
12
|
+
const entries = createMemo(() => {
|
|
13
|
+
const byObject = new Map(previous.map(entry => [entry.item, entry.key]));
|
|
14
|
+
const byIdentity = new Map();
|
|
15
|
+
for (const entry of previous) byIdentity.set(entry.identity, [...(byIdentity.get(entry.identity) ?? []), entry.key]);
|
|
16
|
+
const used = new Set();
|
|
17
|
+
const next = props.each.map(item => {
|
|
18
|
+
// Only a new list reconciles rows; a getter behind the identity changing alone must not re-read the list.
|
|
19
|
+
const identity = untrack(() => props.by(item));
|
|
20
|
+
const same = byObject.get(item);
|
|
21
|
+
const equal = byIdentity.get(identity)?.find(key => !used.has(key));
|
|
22
|
+
const key = same !== undefined && !used.has(same) ? same : equal ?? `row-${counter++}`;
|
|
23
|
+
used.add(key);
|
|
24
|
+
return {
|
|
25
|
+
item,
|
|
26
|
+
key,
|
|
27
|
+
identity
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
previous = next;
|
|
31
|
+
return next;
|
|
32
|
+
});
|
|
33
|
+
const byKey = createMemo(() => new Map(entries().map(entry => [entry.key, entry.item])));
|
|
34
|
+
return _$createComponent(For, {
|
|
35
|
+
get each() {
|
|
36
|
+
return entries().map(entry => entry.key);
|
|
37
|
+
},
|
|
38
|
+
get fallback() {
|
|
39
|
+
return props.fallback;
|
|
40
|
+
},
|
|
41
|
+
children: (key, index) => {
|
|
42
|
+
const first = byKey().get(key);
|
|
43
|
+
return props.children(() => byKey().get(key) ?? first, index);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=keyed-for.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["internal/keyed-for.tsx"],"sourcesContent":["import { createMemo, For, type JSX, untrack } from \"solid-js\";\n\ntype Entry<T> = { item: T; key: string; identity: string };\n\n/**\n * `<For>` that keeps a row's element while its item stays the same: the same object, also when its getters change, or\n * a new object with the same identity (`by`). Hosts rebuild equal items whenever their inputs change; `<For>` would\n * then replace each row, and a row replaced between press and release swallows the click (#2140).\n * Each row reads its current item.\n */\nexport function KeyedFor<T>(props: {\n each: readonly T[];\n by: (item: T) => string;\n fallback?: JSX.Element;\n children: (item: () => T, index: () => number) => JSX.Element;\n}): JSX.Element {\n let previous: Entry<T>[] = [];\n let counter = 0;\n const entries = createMemo(() => {\n const byObject = new Map(previous.map((entry) => [entry.item, entry.key]));\n const byIdentity = new Map<string, string[]>();\n for (const entry of previous) byIdentity.set(entry.identity, [...(byIdentity.get(entry.identity) ?? []), entry.key]);\n const used = new Set<string>();\n const next = props.each.map((item): Entry<T> => {\n // Only a new list reconciles rows; a getter behind the identity changing alone must not re-read the list.\n const identity = untrack(() => props.by(item));\n const same = byObject.get(item);\n const equal = byIdentity.get(identity)?.find((key) => !used.has(key));\n const key = same !== undefined && !used.has(same) ? same : (equal ?? `row-${counter++}`);\n used.add(key);\n return { item, key, identity };\n });\n previous = next;\n return next;\n });\n const byKey = createMemo(() => new Map(entries().map((entry) => [entry.key, entry.item])));\n return (\n <For each={entries().map((entry) => entry.key)} fallback={props.fallback}>\n {(key, index) => {\n const first = byKey().get(key)!;\n return props.children(() => byKey().get(key) ?? first, index);\n }}\n </For>\n );\n}\n"],"mappings":";AAAA,SAAS,UAAU,EAAE,GAAG,EAAY,OAAO,QAAQ,UAAU;AAI7D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS,QAAQ,CAAI,KAK3B,EAAe;EACd,IAAI,QAAoB,GAAG,EAAE;EAC7B,IAAI,OAAO,GAAG,CAAC;EACf,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAE,KAAK,IAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAmB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACpH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,IAAe;MAC9C;MACA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;MAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;MAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAE,GAAG,IAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACrE,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAI,KAAK,IAAI,OAAO,OAAO,EAAE,EAAG;MACxF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;MACb,OAAO;QAAE,IAAI;QAAE,GAAG;QAAE;MAAS,CAAC;IAChC,CAAC,CAAC;IACF,QAAQ,GAAG,IAAI;IACf,OAAO,IAAI;EACb,CAAC,CAAC;EACF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1F,yBACG,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,CAAC;IAAA;IAAA,IAAE,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA,UACrE,CAAC,GAAG,EAAE,KAAK,KAAK;MACf,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAE;MAC/B,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,KAAK,CAAC;IAC/D;EAAC;AAGP","ignoreList":[]}
|