@k2b/ui 0.6.2 → 0.7.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 +2 -0
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +4 -1
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/content/FileView.js +49 -10
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/MultiSelectInput.js +1 -1
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
- package/dist/browser/inputs/Select.js +1 -1
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +168 -133
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +2 -0
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +3 -1
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/content/FileView.js +49 -10
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
- package/dist/ssr/inputs/Select.js +1 -1
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +68 -38
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/content/FileView.d.ts +1 -0
- package/dist/types/inputs/FileInputs.d.ts +1 -0
- package/dist/types/layout/DetailPanel.d.ts +10 -0
- package/dist/types/layout/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/FileView.tsx"],"sourcesContent":["/**\n * FileView — renders one file through a small renderer registry keyed by\n * media type / path. Editing is enabled purely by the presence of `save`;\n * without it every renderer is read-only. IDE-style chrome: editors reuse\n * the markdown editor's surface (toolbar with an in-toolbar save, Ctrl/Cmd+S),\n * previews are quiet paper panels with icon-only actions overlaid top-right.\n * Custom renderers are passed per instance, which keeps SSR requests and\n * independently mounted applications isolated.\n */\n\nimport { mutation } from \"@k2b/stdlib/solid\";\nimport {\n type Component,\n createEffect,\n createMemo,\n createResource,\n createSignal,\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 { prompts } from \"../feedback/prompts\";\nimport { toast } from \"../feedback/toast\";\nimport { MarkdownEditor } from \"../inputs/markdown/MarkdownEditor\";\nimport { Select } from \"../inputs/Select\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport CodeDisplay, { type CodeDisplayLanguage } from \"./CodeDisplay\";\nimport { type DelimitedPreferences, decodeDelimitedContent, readDelimitedPreferences } from \"./delimited-preferences\";\nimport { type FileViewFile, fileViewExtension, getFileViewPreviewKind, parseDelimitedText } from \"./file-view-preview\";\nimport MarkdownView from \"./MarkdownView\";\nimport StructuredDataPreview, { type StructuredDataValue } from \"./StructuredDataPreview\";\n\nexport type { FileViewFile, FileViewPreviewKind } from \"./file-view-preview\";\nexport { canPreviewFile, getFileViewPreviewKind } from \"./file-view-preview\";\nexport type FileViewContent = { encoding: \"utf8\" | \"base64\"; content: string; mediaType: string };\n\nexport type FileViewProps = {\n /** Plain previews inherit the surrounding surface without a frame or inset padding. */\n variant?: \"default\" | \"plain\";\n /** Read-only excerpt limit; omitted renders the complete preview. */\n previewLines?: number;\n onExpandPreview?: () => void;\n headingScale?: \"compact\" | \"normal\" | \"large\";\n /** Optional browser-local preference scope, owned by the host. */\n previewPreferencesKey?: string;\n file: FileViewFile;\n load: () => Promise<FileViewContent>;\n /** Refetch the current path when this host-owned revision changes. */\n revision?: unknown;\n /** Register an awaitable refresh for the currently visible preview. */\n registerRefresh?: (refresh: () => Promise<void>) => void | (() => void);\n /** Presence enables editing for text-based renderers. */\n save?: (content: string) => Promise<void>;\n /** Authenticated inline URL used by browser-native image, PDF, audio, and video previews. */\n previewHref?: string | null;\n /** CORS mode for native image/audio/video previews. Omit to preserve browser defaults. */\n crossOrigin?: \"anonymous\" | \"use-credentials\";\n /** Native media failed to load; the host can renew a signed URL and offer retry. */\n onPreviewError?: () => void;\n downloadHref?: string | null;\n /** App-specific renderers matched before the built-ins for this instance. */\n renderers?: readonly FileViewRenderer[];\n /** Reports local edit state so a parent browser can guard navigation. */\n onDirtyChange?: (dirty: boolean) => void;\n class?: string;\n};\n\nexport type FileViewRendererProps = {\n /** Read-only excerpt limit; omitted renders the complete preview. */\n previewLines?: number;\n onExpandPreview?: () => void;\n headingScale?: \"compact\" | \"normal\" | \"large\";\n /** Optional browser-local preference scope, owned by the host. */\n previewPreferencesKey?: string;\n file: FileViewFile;\n content: FileViewContent;\n previewHref: string | null;\n crossOrigin?: \"anonymous\" | \"use-credentials\";\n onPreviewError?: () => void;\n downloadHref: string | null;\n /** Null when the file is read-only. */\n editor: {\n draft: () => string;\n setDraft: (value: string) => void;\n dirty: () => boolean;\n saving: () => boolean;\n save: () => Promise<void>;\n } | null;\n};\n\nexport type FileViewRenderer = {\n id: string;\n match: (file: FileViewFile, content: FileViewContent) => boolean;\n component: Component<FileViewRendererProps>;\n /** Text renderers that support the edit affordance when `save` is present. */\n editable?: boolean;\n};\n\nconst codeLanguage = (path: string): CodeDisplayLanguage => {\n const extension = fileViewExtension(path);\n if (extension === \"ts\" || extension === \"mts\" || extension === \"cts\") return \"ts\";\n if (extension === \"tsx\") return \"tsx\";\n if (extension === \"js\" || extension === \"mjs\" || extension === \"cjs\") return \"js\";\n if (extension === \"jsx\") return \"jsx\";\n if (extension === \"md\" || extension === \"markdown\") return \"md\";\n return \"text\";\n};\n\nconst isMarkdown = (file: FileViewFile, content: FileViewContent) =>\n content.encoding === \"utf8\" && getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"markdown\";\n\n/** Rendered previews hide a leading YAML frontmatter block — it's metadata, not content. */\nconst stripFrontmatter = (text: string): string => {\n const match = /^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/.exec(text.trimStart());\n return match ? text.trimStart().slice(match[0].length) : text;\n};\n\n/** Icon-only action, IDE style — sits in the floating top-right cluster of previews. */\nfunction OverlayAction(props: { icon: string; title: string; onClick?: () => void; href?: string; download?: string }) {\n const classes = \"k2b-content-file-view__action\";\n return (\n <Show\n when={props.href}\n fallback={\n <button type=\"button\" class={classes} title={props.title} aria-label={props.title} onClick={props.onClick}>\n <i class={`ti ${props.icon}`} aria-hidden=\"true\" />\n </button>\n }\n >\n {(href) => (\n <a class={classes} href={href()} download={props.download ?? \"\"} title={props.title} aria-label={props.title}>\n <i class={`ti ${props.icon}`} aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{props.title}</span>\n </a>\n )}\n </Show>\n );\n}\n\n/** Scrollable preview panel with the floating action cluster overlaid top-right. */\nfunction OverlayPanel(props: { actions?: JSX.Element; children: JSX.Element }) {\n return (\n <div class=\"k2b-content-file-view__panel\">\n <div class=\"k2b-content-file-view__preview\">{props.children}</div>\n <Show when={props.actions}>\n <div class=\"k2b-content-file-view__overlay\">{props.actions}</div>\n </Show>\n </div>\n );\n}\n\nconst DownloadAction = (props: FileViewRendererProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <Show when={props.downloadHref}>\n {(href) => (\n <OverlayAction\n icon=\"ti-download\"\n title={messages().download}\n href={href()}\n download={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n />\n )}\n </Show>\n );\n};\n\n/** Toolbar-styled icon button — reuses the package markdown-editor tool primitive. */\nfunction EditorToolButton(props: { icon: string; title: string; onClick: () => void; disabled?: boolean }) {\n return (\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={props.title}\n aria-label={props.title}\n tabIndex={-1}\n disabled={props.disabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onClick}\n >\n <i class={props.icon} />\n </button>\n );\n}\n\n// ── Built-in renderers ──────────────────────────────────────────────────────\n\nfunction MoreLines(props: { count: number; onClick?: () => void }) {\n const messages = useUiMessages();\n return (\n <Show when={props.count > 0}>\n <div class=\"k2b-content-file-view__truncated\">\n <Show when={props.onClick} fallback={<span>{messages().previewMoreLines(props.count)}</span>}>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.onClick}>\n {messages().previewMoreLines(props.count)}\n </Button>\n </Show>\n </div>\n </Show>\n );\n}\nfunction TextExcerpt(props: { renderer: FileViewRendererProps; text: string; markdown?: boolean }) {\n const lines = createMemo(() => props.text.replace(/\\r\\n?/g, \"\\n\").replace(/\\n$/, \"\").split(\"\\n\"));\n const limit = () => (props.renderer.previewLines === undefined ? lines().length : Math.max(1, props.renderer.previewLines));\n const text = () => lines().slice(0, limit()).join(\"\\n\");\n return (\n <>\n <div classList={{ \"k2b-content-file-view__excerpt\": props.renderer.previewLines !== undefined }}>\n <Show when={props.markdown} fallback={<CodeDisplay code={text()} language={codeLanguage(props.renderer.file.path)} />}>\n <MarkdownView markdown={text()} headingScale={props.renderer.headingScale ?? \"compact\"} />\n </Show>\n </div>\n <MoreLines count={lines().length - limit()} onClick={props.renderer.onExpandPreview} />\n </>\n );\n}\n\nfunction MarkdownRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const [editing, setEditing] = createSignal(false);\n return (\n <Show\n when={props.editor && editing()}\n fallback={\n <OverlayPanel\n actions={\n <>\n <Show when={props.editor}>\n <OverlayAction icon=\"ti-pencil\" title={messages().edit} onClick={() => setEditing(true)} />\n </Show>\n <DownloadAction {...props} />\n </>\n }\n >\n <div class=\"k2b-content-file-view__document\">\n <TextExcerpt renderer={props} text={stripFrontmatter(props.editor?.draft() ?? props.content.content)} markdown />\n </div>\n </OverlayPanel>\n }\n >\n {(_) => {\n const editor = props.editor!;\n return (\n <div class=\"k2b-content-file-view__editor\">\n <MarkdownEditor\n class=\"k2b-content-file-view__markdown-field\"\n aria-label={`Edit ${props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}`}\n fill\n value={editor.draft()}\n onValueChange={editor.setDraft}\n showStats={false}\n onSave={() => void editor.save()}\n saveDisabled={!editor.dirty()}\n saving={editor.saving()}\n toolbarTrailing={<EditorToolButton icon=\"ti ti-eye\" title={messages().preview} onClick={() => setEditing(false)} />}\n />\n </div>\n );\n }}\n </Show>\n );\n}\n\nfunction TextRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <Show\n when={props.editor}\n fallback={\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <TextExcerpt renderer={props} text={props.content.content} />\n </OverlayPanel>\n }\n >\n {(editor) => (\n // Same chrome as the markdown editor — literally the same classes, so\n // border, radius, focus ring, toolbar height and text metrics cannot drift.\n <div class=\"k2b-content-file-view__editor\">\n <div\n class=\"k2b-markdown-editor\"\n data-fill=\"true\"\n role=\"group\"\n aria-label={messages().textEditor}\n onKeyDown={(event) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (editor().dirty() && !editor().saving()) void editor().save();\n }\n }}\n >\n {/* No formatting tools here — the divider under an actions-only bar reads lost. */}\n <div class=\"k2b-markdown-editor__toolbar k2b-content-file-view__code-toolbar\">\n <span class=\"k2b-content-file-view__code-language\">{codeLanguage(props.file.path)}</span>\n <span class=\"k2b-markdown-editor__trailing\">\n <Show when={props.downloadHref}>\n {(href) => (\n <a\n class=\"k2b-markdown-editor__tool\"\n href={href()}\n download={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n title={messages().download}\n aria-label={messages().download}\n >\n <i class=\"ti ti-download\" />\n </a>\n )}\n </Show>\n <EditorToolButton\n icon={editor().saving() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-device-floppy\"}\n title={messages().saveShortcut}\n disabled={!editor().dirty() || editor().saving()}\n onClick={() => void editor().save()}\n />\n </span>\n </div>\n <div class=\"k2b-markdown-editor__surface\">\n <textarea\n class=\"k2b-content-file-view__code-input\"\n value={editor().draft()}\n spellcheck={false}\n onInput={(event) => editor().setDraft(event.currentTarget.value)}\n />\n </div>\n </div>\n </div>\n )}\n </Show>\n );\n}\n\nfunction JsonRenderer(props: FileViewRendererProps) {\n const parsed = createMemo(() => {\n try {\n return { ok: true as const, value: JSON.parse(props.content.content) as StructuredDataValue };\n } catch {\n return { ok: false as const };\n }\n });\n const parsedValue = (): StructuredDataValue => {\n const result = parsed();\n return result.ok ? result.value : null;\n };\n\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__document\">\n <Show when={parsed().ok} fallback={<TextExcerpt renderer={props} text={props.content.content} />}>\n <Show\n when={props.previewLines === undefined}\n fallback={<TextExcerpt renderer={props} text={JSON.stringify(parsedValue(), null, 2)} />}\n >\n <StructuredDataPreview data={parsedValue()} maxRows={200} />\n </Show>\n </Show>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction DelimitedTextRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const [preferences, setPreferences] = createSignal<DelimitedPreferences>({ encoding: \"utf-8\", delimiter: \"auto\", view: \"table\" });\n onMount(() => {\n if (!props.previewPreferencesKey) return;\n try {\n setPreferences(readDelimitedPreferences(localStorage.getItem(props.previewPreferencesKey)));\n } catch {\n /* Storage may be disabled. */\n }\n });\n const update = (patch: Partial<DelimitedPreferences>) => {\n const next = { ...preferences(), ...patch };\n setPreferences(next);\n if (props.previewPreferencesKey) {\n try {\n localStorage.setItem(props.previewPreferencesKey, JSON.stringify(next));\n } catch {\n /* Keep the local selection. */\n }\n }\n };\n const text = createMemo(() => decodeDelimitedContent(props.content, preferences().encoding));\n const delimiter = () =>\n preferences().delimiter === \"auto\"\n ? fileViewExtension(props.file.path) === \"tsv\" || props.content.mediaType === \"text/tab-separated-values\"\n ? \"\\t\"\n : \",\"\n : preferences().delimiter;\n const [page, setPage] = createSignal(0);\n createEffect(() => {\n text();\n delimiter();\n props.previewLines;\n setPage(0);\n });\n const pageSize = () => (props.previewLines === undefined ? 200 : Math.max(1, props.previewLines));\n const preview = createMemo(() => parseDelimitedText(text(), delimiter(), { rows: pageSize() + 1, offset: page() * pageSize() }));\n const settings = () =>\n prompts.dialog(\n () => (\n <div class=\"k2b-content-file-view__settings\">\n <Select\n label={messages().csvEncoding}\n value={preferences().encoding}\n disabled={props.content.encoding !== \"base64\"}\n options={[\"utf-8\", \"windows-1252\", \"utf-16le\", \"utf-16be\"]}\n onValueChange={(value) => {\n if (value) update({ encoding: value });\n }}\n />\n <Select\n label={messages().csvSeparator}\n value={preferences().delimiter}\n options={[\n { value: \"auto\", label: messages().csvDefaultSeparator },\n { value: \",\", label: messages().csvComma },\n { value: \";\", label: messages().csvSemicolon },\n { value: \"\\t\", label: messages().csvTab },\n { value: \"|\", label: \"|\" },\n ]}\n onValueChange={(value) => {\n if (value) update({ delimiter: value });\n }}\n />\n <Select\n label={messages().csvView}\n value={preferences().view}\n options={[\n { value: \"table\", label: messages().dataTable },\n { value: \"raw\", label: messages().csvRaw },\n ]}\n onValueChange={(value) => {\n if (value === \"table\" || value === \"raw\") update({ view: value });\n }}\n />\n </div>\n ),\n { title: messages().csvSettings },\n );\n const headers = createMemo(() => preview().rows[0] ?? []);\n const rows = createMemo(() => preview().rows.slice(1));\n\n return (\n <OverlayPanel\n actions={\n <>\n <OverlayAction icon=\"ti-adjustments-horizontal\" title={messages().csvSettings} onClick={() => void settings()} />\n <DownloadAction {...props} />\n </>\n }\n >\n <Show when={preferences().view === \"table\"} fallback={<TextExcerpt renderer={props} text={text()} />}>\n <Show\n when={headers().length > 0}\n fallback={<Placeholder icon=\"ti ti-table\" title={messages().emptyFile} description={messages().delimitedFileEmpty} />}\n >\n <div class=\"k2b-content-file-view__sheet\">\n <table class=\"k2b-content-file-view__table\">\n <thead>\n <tr>\n <For each={headers()}>\n {(header, index) => (\n <th scope=\"col\">\n <span>{header || messages().column({ number: index() + 1 })}</span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <For each={rows()}>\n {(row) => (\n <tr>\n <For each={headers()}>{(_, index) => <td>{row[index()] ?? \"\"}</td>}</For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n <Show when={preview().columnsTruncated}>\n <div class=\"k2b-content-file-view__truncated\">{messages().previewColumnsLimited}</div>\n </Show>\n <Show\n when={props.previewLines !== undefined}\n fallback={\n <Show when={preview().totalRows > 201}>\n <div class=\"k2b-content-file-view__pagination\">\n <Button size=\"sm\" variant=\"ghost\" disabled={page() === 0} onClick={() => setPage(page() - 1)}>\n {messages().previous}\n </Button>\n <span>\n {page() * pageSize() + 1}–{Math.min((page() + 1) * pageSize(), preview().totalRows - 1)} / {preview().totalRows - 1}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={(page() + 1) * pageSize() >= preview().totalRows - 1}\n onClick={() => setPage(page() + 1)}\n >\n {messages().next}\n </Button>\n </div>\n </Show>\n }\n >\n <MoreLines count={preview().totalRows - rows().length - 1} onClick={props.onExpandPreview} />\n </Show>\n </div>\n </Show>\n </Show>\n </OverlayPanel>\n );\n}\n\nconst mediaSource = (props: FileViewRendererProps): string =>\n props.previewHref ?? `data:${props.content.mediaType};base64,${props.content.content}`;\n\nfunction ImageRenderer(props: FileViewRendererProps) {\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\">\n <img crossOrigin={props.crossOrigin} onError={props.onPreviewError} src={mediaSource(props)} alt={props.file.path} />\n </div>\n </OverlayPanel>\n );\n}\n\nfunction PdfRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const href = () => props.previewHref ?? props.downloadHref;\n return (\n <Show when={href()} fallback={<Placeholder icon=\"ti ti-file-type-pdf\" title=\"PDF\" description={messages().noInlinePreview} />}>\n {(href) => <object data={href()} type=\"application/pdf\" class=\"k2b-content-file-view__pdf\" aria-label={props.file.path} />}\n </Show>\n );\n}\n\nfunction AudioRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\" data-kind=\"audio\">\n <audio\n crossOrigin={props.crossOrigin}\n onError={props.onPreviewError}\n controls\n preload=\"metadata\"\n src={mediaSource(props)}\n aria-label={props.file.path}\n >\n {messages().audioUnsupported}\n </audio>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction VideoRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\" data-kind=\"video\">\n <video\n crossOrigin={props.crossOrigin}\n onError={props.onPreviewError}\n controls\n preload=\"metadata\"\n playsinline\n src={mediaSource(props)}\n aria-label={props.file.path}\n >\n {messages().videoUnsupported}\n </video>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction BinaryRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <Placeholder\n icon=\"ti ti-file-unknown\"\n title={messages().noPreview}\n description={props.content.mediaType || messages().binaryFile}\n action={\n <Show when={props.downloadHref}>\n {(href) => (\n <a class=\"k2b-button\" data-variant=\"secondary\" data-size=\"sm\" href={href()} download=\"\">\n <i class=\"ti ti-download\" aria-hidden=\"true\" />\n {messages().download}\n </a>\n )}\n </Show>\n }\n />\n );\n}\n\nconst BUILTIN_RENDERERS: FileViewRenderer[] = [\n { id: \"markdown\", match: isMarkdown, component: MarkdownRenderer, editable: true },\n {\n id: \"image\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"image\",\n component: ImageRenderer,\n },\n {\n id: \"pdf\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"pdf\",\n component: PdfRenderer,\n },\n {\n id: \"json\",\n match: (file, content) =>\n content.encoding === \"utf8\" && getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"json\",\n component: JsonRenderer,\n },\n {\n id: \"delimited-text\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"delimited-text\",\n component: DelimitedTextRenderer,\n },\n {\n id: \"audio\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"audio\",\n component: AudioRenderer,\n },\n {\n id: \"video\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"video\",\n component: VideoRenderer,\n },\n { id: \"text\", match: (_file, content) => content.encoding === \"utf8\", component: TextRenderer, editable: true },\n { id: \"binary\", match: () => true, component: BinaryRenderer },\n];\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nexport const formatFileViewSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n};\n\nexport default function FileView(props: FileViewProps) {\n const messages = useUiMessages();\n const [draft, setDraft] = createSignal(\"\");\n const [savedDraft, setSavedDraft] = createSignal(\"\");\n const [nativeRevision, setNativeRevision] = createSignal(0);\n const dirty = createMemo(() => draft() !== savedDraft());\n const instanceRenderers = () => props.renderers ?? [];\n const saveMutation = mutation.create<{ path: string; content: string }, { path: string; content: string }>({\n mutation: async (input) => {\n await props.save!(input.content);\n return input;\n },\n onSuccess: (saved) => {\n if (props.file.path === saved.path) setSavedDraft(saved.content);\n toast.success(messages().fileSaved);\n },\n onError: (error) => toast.error(error.message),\n });\n const nativePreviewHref = createMemo(() => {\n const kind = getFileViewPreviewKind(props.file);\n const href = props.previewHref ?? (kind === \"pdf\" ? props.downloadHref : null);\n if (!href) return null;\n const separator = href.includes(\"?\") ? \"&\" : \"?\";\n return `${href}${separator}preview-revision=${nativeRevision()}`;\n });\n const browserPreviewContent = createMemo<FileViewContent | null>(() => {\n const kind = getFileViewPreviewKind(props.file);\n if (kind !== \"image\" && kind !== \"pdf\" && kind !== \"audio\" && kind !== \"video\") return null;\n const href = nativePreviewHref();\n if (!href) return null;\n\n const candidate: FileViewContent = {\n encoding: \"base64\",\n content: \"\",\n mediaType: props.file.mediaType ?? \"application/octet-stream\",\n };\n return instanceRenderers().some((renderer) => renderer.match(props.file, candidate)) ? null : candidate;\n });\n const [content, { refetch }] = createResource(\n () => (browserPreviewContent() ? null : { path: props.file.path, revision: props.revision }),\n async () => {\n saveMutation.abort();\n // `load` is an imperative source adapter. Host signal reads inside it\n // must not turn this resource into a hidden reactive feedback loop.\n const loaded = await untrack(() => props.load());\n const loadedDraft = loaded.encoding === \"utf8\" ? loaded.content : \"\";\n setDraft(loadedDraft);\n setSavedDraft(loadedDraft);\n return loaded;\n },\n );\n createEffect(() => {\n if (!props.registerRefresh) return;\n const unregister = props.registerRefresh(async () => {\n if (browserPreviewContent()) setNativeRevision((value) => value + 1);\n else await refetch();\n });\n if (unregister) onCleanup(unregister);\n });\n const resolvedContent = createMemo(() => browserPreviewContent() ?? content());\n\n const renderer = createMemo(() => {\n const loaded = resolvedContent();\n if (!loaded) return null;\n return [...instanceRenderers(), ...BUILTIN_RENDERERS].find((candidate) => candidate.match(props.file, loaded)) ?? null;\n });\n\n createEffect(() => {\n props.onDirtyChange?.(dirty());\n });\n\n const save = async () => {\n if (!props.save || saveMutation.loading()) return;\n await saveMutation.mutate({ path: props.file.path, content: draft() });\n };\n\n const editor = () =>\n props.save && renderer()?.editable && resolvedContent()?.encoding === \"utf8\"\n ? {\n draft,\n setDraft,\n dirty,\n saving: saveMutation.loading,\n save,\n }\n : null;\n\n return (\n <div\n class={`k2b-content-file-view ${props.class ?? \"\"}`}\n data-variant={props.variant}\n data-excerpt={props.previewLines !== undefined ? \"true\" : undefined}\n >\n <Switch>\n <Match when={content.loading && content() === undefined}>\n <Placeholder icon=\"ti ti-loader-2\" title={messages().loading} />\n </Match>\n <Match when={content.error}>\n <Placeholder icon=\"ti ti-alert-circle\" title={messages().failedLoadFile} description={String(content.error?.message ?? \"\")} />\n </Match>\n <Match when={resolvedContent() && renderer()}>\n {(active) => {\n const Renderer = active().component;\n return (\n <Renderer\n previewLines={props.previewLines}\n onExpandPreview={props.onExpandPreview}\n headingScale={props.headingScale}\n previewPreferencesKey={props.previewPreferencesKey}\n file={props.file}\n content={resolvedContent()!}\n previewHref={nativePreviewHref()}\n crossOrigin={props.crossOrigin}\n onPreviewError={props.onPreviewError}\n downloadHref={props.downloadHref ?? null}\n editor={editor()}\n />\n );\n }}\n </Match>\n </Switch>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/FileView.tsx"],"sourcesContent":["/**\n * FileView — renders one file through a small renderer registry keyed by\n * media type / path. Editing is enabled purely by the presence of `save`;\n * without it every renderer is read-only. IDE-style chrome: editors reuse\n * the markdown editor's surface (toolbar with an in-toolbar save, Ctrl/Cmd+S),\n * previews are quiet paper panels with icon-only actions overlaid top-right.\n * Custom renderers are passed per instance, which keeps SSR requests and\n * independently mounted applications isolated.\n */\n\nimport { mutation } from \"@k2b/stdlib/solid\";\nimport {\n type Component,\n createEffect,\n createMemo,\n createResource,\n createSignal,\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 { prompts } from \"../feedback/prompts\";\nimport { toast } from \"../feedback/toast\";\nimport { MarkdownEditor } from \"../inputs/markdown/MarkdownEditor\";\nimport { Select } from \"../inputs/Select\";\nimport { useUiMessages } from \"../intl/messages\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport CodeDisplay, { type CodeDisplayLanguage } from \"./CodeDisplay\";\nimport { type DelimitedPreferences, decodeDelimitedContent, readDelimitedPreferences } from \"./delimited-preferences\";\nimport { type FileViewFile, fileViewExtension, getFileViewPreviewKind, parseDelimitedText } from \"./file-view-preview\";\nimport MarkdownView from \"./MarkdownView\";\nimport PdfPreview from \"./PdfPreview\";\nimport StructuredDataPreview, { type StructuredDataValue } from \"./StructuredDataPreview\";\n\nexport type { FileViewFile, FileViewPreviewKind } from \"./file-view-preview\";\nexport { canPreviewFile, getFileViewPreviewKind } from \"./file-view-preview\";\nexport type FileViewContent = { encoding: \"utf8\" | \"base64\"; content: string; mediaType: string };\n\nexport type FileViewProps = {\n /** Plain previews inherit the surrounding surface without a frame or inset padding. */\n variant?: \"default\" | \"plain\";\n /** Read-only excerpt limit; omitted renders the complete preview. */\n previewLines?: number;\n onExpandPreview?: () => void;\n headingScale?: \"compact\" | \"normal\" | \"large\";\n /** Optional browser-local preference scope, owned by the host. */\n previewPreferencesKey?: string;\n file: FileViewFile;\n load: () => Promise<FileViewContent>;\n /** Refetch the current path when this host-owned revision changes. */\n revision?: unknown;\n /** Register an awaitable refresh for the currently visible preview. */\n registerRefresh?: (refresh: () => Promise<void>) => void | (() => void);\n /** Presence enables editing for text-based renderers. */\n save?: (content: string) => Promise<void>;\n /** Authenticated inline URL used by browser-native image, PDF, audio, and video previews. */\n previewHref?: string | null;\n /** CORS mode for native image/audio/video previews. Omit to preserve browser defaults. */\n crossOrigin?: \"anonymous\" | \"use-credentials\";\n /** Native media failed to load; the host can renew a signed URL and offer retry. */\n onPreviewError?: () => void;\n /** Download actions only; never a preview source, because an attachment response does not render inline. */\n downloadHref?: string | null;\n /** App-specific renderers matched before the built-ins for this instance. */\n renderers?: readonly FileViewRenderer[];\n /** Reports local edit state so a parent browser can guard navigation. */\n onDirtyChange?: (dirty: boolean) => void;\n class?: string;\n};\n\nexport type FileViewRendererProps = {\n /** Read-only excerpt limit; omitted renders the complete preview. */\n previewLines?: number;\n onExpandPreview?: () => void;\n headingScale?: \"compact\" | \"normal\" | \"large\";\n /** Optional browser-local preference scope, owned by the host. */\n previewPreferencesKey?: string;\n file: FileViewFile;\n content: FileViewContent;\n previewHref: string | null;\n crossOrigin?: \"anonymous\" | \"use-credentials\";\n onPreviewError?: () => void;\n downloadHref: string | null;\n /** Null when the file is read-only. */\n editor: {\n draft: () => string;\n setDraft: (value: string) => void;\n dirty: () => boolean;\n saving: () => boolean;\n save: () => Promise<void>;\n } | null;\n};\n\nexport type FileViewRenderer = {\n id: string;\n match: (file: FileViewFile, content: FileViewContent) => boolean;\n component: Component<FileViewRendererProps>;\n /** Text renderers that support the edit affordance when `save` is present. */\n editable?: boolean;\n};\n\nconst codeLanguage = (path: string): CodeDisplayLanguage => {\n const extension = fileViewExtension(path);\n if (extension === \"ts\" || extension === \"mts\" || extension === \"cts\") return \"ts\";\n if (extension === \"tsx\") return \"tsx\";\n if (extension === \"js\" || extension === \"mjs\" || extension === \"cjs\") return \"js\";\n if (extension === \"jsx\") return \"jsx\";\n if (extension === \"md\" || extension === \"markdown\") return \"md\";\n return \"text\";\n};\n\nconst isMarkdown = (file: FileViewFile, content: FileViewContent) =>\n content.encoding === \"utf8\" && getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"markdown\";\n\n/** Rendered previews hide a leading YAML frontmatter block — it's metadata, not content. */\nconst stripFrontmatter = (text: string): string => {\n const match = /^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/.exec(text.trimStart());\n return match ? text.trimStart().slice(match[0].length) : text;\n};\n\n/** Icon-only action, IDE style — sits in the floating top-right cluster of previews. */\nfunction OverlayAction(props: { icon: string; title: string; onClick?: () => void; href?: string; download?: string }) {\n const classes = \"k2b-content-file-view__action\";\n return (\n <Show\n when={props.href}\n fallback={\n <button type=\"button\" class={classes} title={props.title} aria-label={props.title} onClick={props.onClick}>\n <i class={`ti ${props.icon}`} aria-hidden=\"true\" />\n </button>\n }\n >\n {(href) => (\n <a class={classes} href={href()} download={props.download ?? \"\"} title={props.title} aria-label={props.title}>\n <i class={`ti ${props.icon}`} aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">{props.title}</span>\n </a>\n )}\n </Show>\n );\n}\n\n/** Scrollable preview panel with the floating action cluster overlaid top-right. */\nfunction OverlayPanel(props: { actions?: JSX.Element; children: JSX.Element }) {\n return (\n <div class=\"k2b-content-file-view__panel\">\n <div class=\"k2b-content-file-view__preview\">{props.children}</div>\n <Show when={props.actions}>\n <div class=\"k2b-content-file-view__overlay\">{props.actions}</div>\n </Show>\n </div>\n );\n}\n\nconst DownloadAction = (props: FileViewRendererProps): JSX.Element => {\n const messages = useUiMessages();\n return (\n <Show when={props.downloadHref}>\n {(href) => (\n <OverlayAction\n icon=\"ti-download\"\n title={messages().download}\n href={href()}\n download={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n />\n )}\n </Show>\n );\n};\n\n/** Toolbar-styled icon button — reuses the package markdown-editor tool primitive. */\nfunction EditorToolButton(props: { icon: string; title: string; onClick: () => void; disabled?: boolean }) {\n return (\n <button\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n title={props.title}\n aria-label={props.title}\n tabIndex={-1}\n disabled={props.disabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onClick}\n >\n <i class={props.icon} />\n </button>\n );\n}\n\n// ── Built-in renderers ──────────────────────────────────────────────────────\n\nfunction MoreLines(props: { count: number; onClick?: () => void }) {\n const messages = useUiMessages();\n return (\n <Show when={props.count > 0}>\n <div class=\"k2b-content-file-view__truncated\">\n <Show when={props.onClick} fallback={<span>{messages().previewMoreLines(props.count)}</span>}>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.onClick}>\n {messages().previewMoreLines(props.count)}\n </Button>\n </Show>\n </div>\n </Show>\n );\n}\nfunction TextExcerpt(props: { renderer: FileViewRendererProps; text: string; markdown?: boolean }) {\n const lines = createMemo(() => props.text.replace(/\\r\\n?/g, \"\\n\").replace(/\\n$/, \"\").split(\"\\n\"));\n const limit = () => (props.renderer.previewLines === undefined ? lines().length : Math.max(1, props.renderer.previewLines));\n const text = () => lines().slice(0, limit()).join(\"\\n\");\n return (\n <>\n <div classList={{ \"k2b-content-file-view__excerpt\": props.renderer.previewLines !== undefined }}>\n <Show when={props.markdown} fallback={<CodeDisplay code={text()} language={codeLanguage(props.renderer.file.path)} />}>\n <MarkdownView markdown={text()} headingScale={props.renderer.headingScale ?? \"compact\"} />\n </Show>\n </div>\n <MoreLines count={lines().length - limit()} onClick={props.renderer.onExpandPreview} />\n </>\n );\n}\n\nfunction MarkdownRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const [editing, setEditing] = createSignal(false);\n return (\n <Show\n when={props.editor && editing()}\n fallback={\n <OverlayPanel\n actions={\n <>\n <Show when={props.editor}>\n <OverlayAction icon=\"ti-pencil\" title={messages().edit} onClick={() => setEditing(true)} />\n </Show>\n <DownloadAction {...props} />\n </>\n }\n >\n <div class=\"k2b-content-file-view__document\">\n <TextExcerpt renderer={props} text={stripFrontmatter(props.editor?.draft() ?? props.content.content)} markdown />\n </div>\n </OverlayPanel>\n }\n >\n {(_) => {\n const editor = props.editor!;\n return (\n <div class=\"k2b-content-file-view__editor\">\n <MarkdownEditor\n class=\"k2b-content-file-view__markdown-field\"\n aria-label={`Edit ${props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}`}\n fill\n value={editor.draft()}\n onValueChange={editor.setDraft}\n showStats={false}\n onSave={() => void editor.save()}\n saveDisabled={!editor.dirty()}\n saving={editor.saving()}\n toolbarTrailing={<EditorToolButton icon=\"ti ti-eye\" title={messages().preview} onClick={() => setEditing(false)} />}\n />\n </div>\n );\n }}\n </Show>\n );\n}\n\nfunction TextRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <Show\n when={props.editor}\n fallback={\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <TextExcerpt renderer={props} text={props.content.content} />\n </OverlayPanel>\n }\n >\n {(editor) => (\n // Same chrome as the markdown editor — literally the same classes, so\n // border, radius, focus ring, toolbar height and text metrics cannot drift.\n <div class=\"k2b-content-file-view__editor\">\n <div\n class=\"k2b-markdown-editor\"\n data-fill=\"true\"\n role=\"group\"\n aria-label={messages().textEditor}\n onKeyDown={(event) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (editor().dirty() && !editor().saving()) void editor().save();\n }\n }}\n >\n {/* No formatting tools here — the divider under an actions-only bar reads lost. */}\n <div class=\"k2b-markdown-editor__toolbar k2b-content-file-view__code-toolbar\">\n <span class=\"k2b-content-file-view__code-language\">{codeLanguage(props.file.path)}</span>\n <span class=\"k2b-markdown-editor__trailing\">\n <Show when={props.downloadHref}>\n {(href) => (\n <a\n class=\"k2b-markdown-editor__tool\"\n href={href()}\n download={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n title={messages().download}\n aria-label={messages().download}\n >\n <i class=\"ti ti-download\" />\n </a>\n )}\n </Show>\n <EditorToolButton\n icon={editor().saving() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-device-floppy\"}\n title={messages().saveShortcut}\n disabled={!editor().dirty() || editor().saving()}\n onClick={() => void editor().save()}\n />\n </span>\n </div>\n <div class=\"k2b-markdown-editor__surface\">\n <textarea\n class=\"k2b-content-file-view__code-input\"\n value={editor().draft()}\n spellcheck={false}\n onInput={(event) => editor().setDraft(event.currentTarget.value)}\n />\n </div>\n </div>\n </div>\n )}\n </Show>\n );\n}\n\nfunction JsonRenderer(props: FileViewRendererProps) {\n const parsed = createMemo(() => {\n try {\n return { ok: true as const, value: JSON.parse(props.content.content) as StructuredDataValue };\n } catch {\n return { ok: false as const };\n }\n });\n const parsedValue = (): StructuredDataValue => {\n const result = parsed();\n return result.ok ? result.value : null;\n };\n\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__document\">\n <Show when={parsed().ok} fallback={<TextExcerpt renderer={props} text={props.content.content} />}>\n <Show\n when={props.previewLines === undefined}\n fallback={<TextExcerpt renderer={props} text={JSON.stringify(parsedValue(), null, 2)} />}\n >\n <StructuredDataPreview data={parsedValue()} maxRows={200} />\n </Show>\n </Show>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction DelimitedTextRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n const [preferences, setPreferences] = createSignal<DelimitedPreferences>({ encoding: \"utf-8\", delimiter: \"auto\", view: \"table\" });\n onMount(() => {\n if (!props.previewPreferencesKey) return;\n try {\n setPreferences(readDelimitedPreferences(localStorage.getItem(props.previewPreferencesKey)));\n } catch {\n /* Storage may be disabled. */\n }\n });\n const update = (patch: Partial<DelimitedPreferences>) => {\n const next = { ...preferences(), ...patch };\n setPreferences(next);\n if (props.previewPreferencesKey) {\n try {\n localStorage.setItem(props.previewPreferencesKey, JSON.stringify(next));\n } catch {\n /* Keep the local selection. */\n }\n }\n };\n const text = createMemo(() => decodeDelimitedContent(props.content, preferences().encoding));\n const delimiter = () =>\n preferences().delimiter === \"auto\"\n ? fileViewExtension(props.file.path) === \"tsv\" || props.content.mediaType === \"text/tab-separated-values\"\n ? \"\\t\"\n : \",\"\n : preferences().delimiter;\n const [page, setPage] = createSignal(0);\n createEffect(() => {\n text();\n delimiter();\n props.previewLines;\n setPage(0);\n });\n const pageSize = () => (props.previewLines === undefined ? 200 : Math.max(1, props.previewLines));\n const preview = createMemo(() => parseDelimitedText(text(), delimiter(), { rows: pageSize() + 1, offset: page() * pageSize() }));\n const settings = () =>\n prompts.dialog(\n () => (\n <div class=\"k2b-content-file-view__settings\">\n <Select\n label={messages().csvEncoding}\n value={preferences().encoding}\n disabled={props.content.encoding !== \"base64\"}\n options={[\"utf-8\", \"windows-1252\", \"utf-16le\", \"utf-16be\"]}\n onValueChange={(value) => {\n if (value) update({ encoding: value });\n }}\n />\n <Select\n label={messages().csvSeparator}\n value={preferences().delimiter}\n options={[\n { value: \"auto\", label: messages().csvDefaultSeparator },\n { value: \",\", label: messages().csvComma },\n { value: \";\", label: messages().csvSemicolon },\n { value: \"\\t\", label: messages().csvTab },\n { value: \"|\", label: \"|\" },\n ]}\n onValueChange={(value) => {\n if (value) update({ delimiter: value });\n }}\n />\n <Select\n label={messages().csvView}\n value={preferences().view}\n options={[\n { value: \"table\", label: messages().dataTable },\n { value: \"raw\", label: messages().csvRaw },\n ]}\n onValueChange={(value) => {\n if (value === \"table\" || value === \"raw\") update({ view: value });\n }}\n />\n </div>\n ),\n { title: messages().csvSettings },\n );\n const headers = createMemo(() => preview().rows[0] ?? []);\n const rows = createMemo(() => preview().rows.slice(1));\n\n return (\n <OverlayPanel\n actions={\n <>\n <OverlayAction icon=\"ti-adjustments-horizontal\" title={messages().csvSettings} onClick={() => void settings()} />\n <DownloadAction {...props} />\n </>\n }\n >\n <Show when={preferences().view === \"table\"} fallback={<TextExcerpt renderer={props} text={text()} />}>\n <Show\n when={headers().length > 0}\n fallback={<Placeholder icon=\"ti ti-table\" title={messages().emptyFile} description={messages().delimitedFileEmpty} />}\n >\n <div class=\"k2b-content-file-view__sheet\">\n <table class=\"k2b-content-file-view__table\">\n <thead>\n <tr>\n <For each={headers()}>\n {(header, index) => (\n <th scope=\"col\">\n <span>{header || messages().column({ number: index() + 1 })}</span>\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <For each={rows()}>\n {(row) => (\n <tr>\n <For each={headers()}>{(_, index) => <td>{row[index()] ?? \"\"}</td>}</For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n <Show when={preview().columnsTruncated}>\n <div class=\"k2b-content-file-view__truncated\">{messages().previewColumnsLimited}</div>\n </Show>\n <Show\n when={props.previewLines !== undefined}\n fallback={\n <Show when={preview().totalRows > 201}>\n <div class=\"k2b-content-file-view__pagination\">\n <Button size=\"sm\" variant=\"ghost\" disabled={page() === 0} onClick={() => setPage(page() - 1)}>\n {messages().previous}\n </Button>\n <span>\n {page() * pageSize() + 1}–{Math.min((page() + 1) * pageSize(), preview().totalRows - 1)} / {preview().totalRows - 1}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={(page() + 1) * pageSize() >= preview().totalRows - 1}\n onClick={() => setPage(page() + 1)}\n >\n {messages().next}\n </Button>\n </div>\n </Show>\n }\n >\n <MoreLines count={preview().totalRows - rows().length - 1} onClick={props.onExpandPreview} />\n </Show>\n </div>\n </Show>\n </Show>\n </OverlayPanel>\n );\n}\n\nconst mediaSource = (props: FileViewRendererProps): string =>\n props.previewHref ?? `data:${props.content.mediaType};base64,${props.content.content}`;\n\nfunction ImageRenderer(props: FileViewRendererProps) {\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\">\n <img crossOrigin={props.crossOrigin} onError={props.onPreviewError} src={mediaSource(props)} alt={props.file.path} />\n </div>\n </OverlayPanel>\n );\n}\n\nconst pdfBlob = (content: FileViewContent): Blob => {\n if (content.encoding === \"utf8\") return new Blob([content.content], { type: \"application/pdf\" });\n const binary = atob(content.content);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.charCodeAt(index);\n return new Blob([bytes], { type: \"application/pdf\" });\n};\n\n/**\n * A host inline URL goes to the browser's native viewer. Without one, the\n * loaded bytes become a local PDF Blob: a download URL is an attachment and\n * would leave a native viewer empty.\n */\nfunction PdfRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n // A new Blob remounts the preview, so changed bytes show the new file. A revision refetch\n // often returns the same bytes (the Assistant refetches on every tool step); keeping the\n // Blob then keeps the reader's page instead of reloading the viewer.\n const bytes = createMemo(() => props.content, undefined, {\n equals: (previous, next) => previous.encoding === next.encoding && previous.content === next.content,\n });\n const blob = createMemo(() => (props.previewHref || !bytes().content ? null : pdfBlob(bytes())));\n return (\n <Show\n when={props.previewHref}\n fallback={\n <Show\n keyed\n when={blob()}\n fallback={<Placeholder icon=\"ti ti-file-type-pdf\" title=\"PDF\" description={messages().noInlinePreview} />}\n >\n {(pdf) => (\n <PdfPreview\n autoLoad\n title={props.file.path.slice(props.file.path.lastIndexOf(\"/\") + 1)}\n request={async () => pdf}\n class=\"k2b-content-file-view__pdf\"\n />\n )}\n </Show>\n }\n >\n {(href) => <object data={href()} type=\"application/pdf\" class=\"k2b-content-file-view__pdf\" aria-label={props.file.path} />}\n </Show>\n );\n}\n\nfunction AudioRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\" data-kind=\"audio\">\n <audio\n crossOrigin={props.crossOrigin}\n onError={props.onPreviewError}\n controls\n preload=\"metadata\"\n src={mediaSource(props)}\n aria-label={props.file.path}\n >\n {messages().audioUnsupported}\n </audio>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction VideoRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <OverlayPanel actions={<DownloadAction {...props} />}>\n <div class=\"k2b-content-file-view__media\" data-kind=\"video\">\n <video\n crossOrigin={props.crossOrigin}\n onError={props.onPreviewError}\n controls\n preload=\"metadata\"\n playsinline\n src={mediaSource(props)}\n aria-label={props.file.path}\n >\n {messages().videoUnsupported}\n </video>\n </div>\n </OverlayPanel>\n );\n}\n\nfunction BinaryRenderer(props: FileViewRendererProps) {\n const messages = useUiMessages();\n return (\n <Placeholder\n icon=\"ti ti-file-unknown\"\n title={messages().noPreview}\n description={props.content.mediaType || messages().binaryFile}\n action={\n <Show when={props.downloadHref}>\n {(href) => (\n <a class=\"k2b-button\" data-variant=\"secondary\" data-size=\"sm\" href={href()} download=\"\">\n <i class=\"ti ti-download\" aria-hidden=\"true\" />\n {messages().download}\n </a>\n )}\n </Show>\n }\n />\n );\n}\n\nconst BUILTIN_RENDERERS: FileViewRenderer[] = [\n { id: \"markdown\", match: isMarkdown, component: MarkdownRenderer, editable: true },\n {\n id: \"image\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"image\",\n component: ImageRenderer,\n },\n {\n id: \"pdf\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"pdf\",\n component: PdfRenderer,\n },\n {\n id: \"json\",\n match: (file, content) =>\n content.encoding === \"utf8\" && getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"json\",\n component: JsonRenderer,\n },\n {\n id: \"delimited-text\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"delimited-text\",\n component: DelimitedTextRenderer,\n },\n {\n id: \"audio\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"audio\",\n component: AudioRenderer,\n },\n {\n id: \"video\",\n match: (file, content) => getFileViewPreviewKind({ ...file, mediaType: content.mediaType || file.mediaType }) === \"video\",\n component: VideoRenderer,\n },\n { id: \"text\", match: (_file, content) => content.encoding === \"utf8\", component: TextRenderer, editable: true },\n { id: \"binary\", match: () => true, component: BinaryRenderer },\n];\n\n// ── Component ───────────────────────────────────────────────────────────────\n\nexport const formatFileViewSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n};\n\nexport default function FileView(props: FileViewProps) {\n const messages = useUiMessages();\n const [draft, setDraft] = createSignal(\"\");\n const [savedDraft, setSavedDraft] = createSignal(\"\");\n const [nativeRevision, setNativeRevision] = createSignal(0);\n const dirty = createMemo(() => draft() !== savedDraft());\n const instanceRenderers = () => props.renderers ?? [];\n const saveMutation = mutation.create<{ path: string; content: string }, { path: string; content: string }>({\n mutation: async (input) => {\n await props.save!(input.content);\n return input;\n },\n onSuccess: (saved) => {\n if (props.file.path === saved.path) setSavedDraft(saved.content);\n toast.success(messages().fileSaved);\n },\n onError: (error) => toast.error(error.message),\n });\n const nativePreviewHref = createMemo(() => {\n const href = props.previewHref;\n if (!href) return null;\n const separator = href.includes(\"?\") ? \"&\" : \"?\";\n return `${href}${separator}preview-revision=${nativeRevision()}`;\n });\n const browserPreviewContent = createMemo<FileViewContent | null>(() => {\n const kind = getFileViewPreviewKind(props.file);\n if (kind !== \"image\" && kind !== \"pdf\" && kind !== \"audio\" && kind !== \"video\") return null;\n const href = nativePreviewHref();\n if (!href) return null;\n\n const candidate: FileViewContent = {\n encoding: \"base64\",\n content: \"\",\n mediaType: props.file.mediaType ?? \"application/octet-stream\",\n };\n return instanceRenderers().some((renderer) => renderer.match(props.file, candidate)) ? null : candidate;\n });\n const [content, { refetch }] = createResource(\n () => (browserPreviewContent() ? null : { path: props.file.path, revision: props.revision }),\n async () => {\n saveMutation.abort();\n // `load` is an imperative source adapter. Host signal reads inside it\n // must not turn this resource into a hidden reactive feedback loop.\n const loaded = await untrack(() => props.load());\n const loadedDraft = loaded.encoding === \"utf8\" ? loaded.content : \"\";\n setDraft(loadedDraft);\n setSavedDraft(loadedDraft);\n return loaded;\n },\n );\n createEffect(() => {\n if (!props.registerRefresh) return;\n const unregister = props.registerRefresh(async () => {\n if (browserPreviewContent()) setNativeRevision((value) => value + 1);\n else await refetch();\n });\n if (unregister) onCleanup(unregister);\n });\n const resolvedContent = createMemo(() => browserPreviewContent() ?? content());\n\n const renderer = createMemo(() => {\n const loaded = resolvedContent();\n if (!loaded) return null;\n return [...instanceRenderers(), ...BUILTIN_RENDERERS].find((candidate) => candidate.match(props.file, loaded)) ?? null;\n });\n\n createEffect(() => {\n props.onDirtyChange?.(dirty());\n });\n\n const save = async () => {\n if (!props.save || saveMutation.loading()) return;\n await saveMutation.mutate({ path: props.file.path, content: draft() });\n };\n\n const editor = () =>\n props.save && renderer()?.editable && resolvedContent()?.encoding === \"utf8\"\n ? {\n draft,\n setDraft,\n dirty,\n saving: saveMutation.loading,\n save,\n }\n : null;\n\n return (\n <div\n class={`k2b-content-file-view ${props.class ?? \"\"}`}\n data-variant={props.variant}\n data-excerpt={props.previewLines !== undefined ? \"true\" : undefined}\n >\n <Switch>\n <Match when={content.loading && content() === undefined}>\n <Placeholder icon=\"ti ti-loader-2\" title={messages().loading} />\n </Match>\n <Match when={content.error}>\n <Placeholder icon=\"ti ti-alert-circle\" title={messages().failedLoadFile} description={String(content.error?.message ?? \"\")} />\n </Match>\n <Match when={resolvedContent() && renderer()}>\n {(active) => {\n const Renderer = active().component;\n return (\n <Renderer\n previewLines={props.previewLines}\n onExpandPreview={props.onExpandPreview}\n headingScale={props.headingScale}\n previewPreferencesKey={props.previewPreferencesKey}\n file={props.file}\n content={resolvedContent()!}\n previewHref={nativePreviewHref()}\n crossOrigin={props.crossOrigin}\n onPreviewError={props.onPreviewError}\n downloadHref={props.downloadHref ?? null}\n editor={editor()}\n />\n );\n }}\n </Match>\n </Switch>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -612,7 +612,7 @@ export function AutocompleteSelect(props) {
|
|
|
612
612
|
_$effect(_p$ => {
|
|
613
613
|
var _v$ = error() ? "true" : undefined,
|
|
614
614
|
_v$2 = hasClearAction() ? "true" : undefined,
|
|
615
|
-
_v$3 = typeof props.label === "string" ? props.label : messages().options;
|
|
615
|
+
_v$3 = typeof props.label === "string" ? props.label : props["aria-label"] ?? messages().options;
|
|
616
616
|
_v$ !== _p$.e && _$setAttribute(_el$, "data-invalid", _p$.e = _v$);
|
|
617
617
|
_v$2 !== _p$.t && _$setAttribute(_el$2, "data-clearable", _p$.t = _v$2);
|
|
618
618
|
_v$3 !== _p$.a && _$setAttribute(_el$10, "aria-label", _p$.a = _v$3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/AutocompleteSelect.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport type { SelectGroup } from \"./Select\";\n\nexport type AutocompleteSelectOption = ChoiceOption<string>;\n\nexport type AutocompleteSelectSearchResult = {\n /** Ranked suggestions shown in the popup. */\n options: readonly AutocompleteSelectOption[];\n /** The authoritative option that Tab or blur may accept automatically. */\n match?: AutocompleteSelectOption;\n};\n\nexport type AutocompleteSelectProps = ValueFieldProps<string | null> & {\n search: (query: string, signal: AbortSignal, group: string | null) => Promise<AutocompleteSelectSearchResult>;\n selectedOption?: AutocompleteSelectOption;\n formatValue?: (option: AutocompleteSelectOption) => string;\n groups?: readonly SelectGroup[];\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n placeholder?: string;\n debounceMs?: number;\n clearable?: boolean;\n name?: string;\n autofocus?: boolean;\n noMatchText?: string;\n checkingText?: string;\n noOptionsText?: string;\n};\n\ntype SelectionSnapshot = {\n value: string | null;\n option?: AutocompleteSelectOption;\n display: string;\n};\n\nconst errorMessage = (error: unknown, fallback: string): string => (error instanceof Error ? error.message : fallback);\n\nexport function AutocompleteSelect(props: AutocompleteSelectProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [cache, setCache] = createSignal<Record<string, AutocompleteSelectOption>>({});\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const selected = createMemo<AutocompleteSelectOption | undefined>(() => {\n const current = value();\n if (current === null) return undefined;\n return (\n cache()[current] ??\n (props.selectedOption?.value === current ? props.selectedOption : undefined) ?? {\n value: current,\n label: current,\n }\n );\n });\n const formatValue = (option: AutocompleteSelectOption | undefined): string =>\n option ? (props.formatValue?.(option) ?? option.label) : \"\";\n\n const [display, setDisplay] = createSignal(formatValue(selected()));\n const [query, setQuery] = createSignal(\"\");\n const [focused, setFocused] = createSignal(false);\n const [editing, setEditing] = createSignal(false);\n const [resolvedQuery, setResolvedQuery] = createSignal<string>();\n const [match, setMatch] = createSignal<AutocompleteSelectOption>();\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n const [explicitOption, setExplicitOption] = createSignal(false);\n const [internalError, setInternalError] = createSignal<string>();\n const externalError = () => resolveMaybeAccessor(props.error);\n const error = () => externalError() ?? internalError();\n const hasClearAction = () => Boolean(props.clearable && value() !== null && !props.disabled);\n let inputRef: HTMLInputElement | undefined;\n let popoverRef: HTMLDivElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n let pointerFocus = false;\n let pendingCommitQuery: string | undefined;\n let snapshot: SelectionSnapshot = { value: value(), option: selected(), display: formatValue(selected()) };\n\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n\n const remember = (options: readonly AutocompleteSelectOption[], authoritative?: AutocompleteSelectOption) => {\n const next = { ...cache() };\n for (const option of options) next[option.value] = option;\n if (authoritative) next[authoritative.value] = authoritative;\n setCache(next);\n };\n\n const completeInput = (typed: string, authoritative: AutocompleteSelectOption | undefined) => {\n if (!inputRef || !focused() || !editing() || !authoritative || typed.length === 0) return;\n const lower = typed.toLocaleLowerCase();\n const completion = [authoritative.value, authoritative.label].find((candidate) => candidate.toLocaleLowerCase().startsWith(lower));\n if (!completion || completion.length <= typed.length) return;\n setDisplay(completion);\n queueMicrotask(() => {\n if (!inputRef || document.activeElement !== inputRef || query() !== typed) return;\n inputRef.setSelectionRange(typed.length, completion.length);\n });\n };\n\n const mergedOptions = (result: AutocompleteSelectSearchResult): readonly AutocompleteSelectOption[] =>\n result.match && !result.options.some((option) => option.value === result.match!.value)\n ? [result.match, ...result.options]\n : result.options;\n\n const commit = (option: AutocompleteSelectOption) => {\n if (option.disabled) return;\n pendingCommitQuery = undefined;\n loader.cancel();\n popover.hide();\n remember([], option);\n setDisplay(formatValue(option));\n setQuery(\"\");\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n snapshot = { value: option.value, option, display: formatValue(option) };\n commitFieldValue(props, option.value);\n setEditing(false);\n };\n\n const invalidate = (message = props.noMatchText ?? messages().noMatchingOption) => {\n pendingCommitQuery = undefined;\n setInternalError(message);\n popover.hide();\n };\n\n const loader = createChoiceLoader(\n () => async (typed, signal) => {\n let result: AutocompleteSelectSearchResult;\n try {\n result = await props.search(typed, signal, activeGroup());\n } catch (reason) {\n if (!signal.aborted) {\n setResolvedQuery(typed);\n if (pendingCommitQuery === typed) invalidate(errorMessage(reason, messages().optionsCouldNotLoad));\n }\n throw reason;\n }\n if (signal.aborted) return [];\n\n const options = mergedOptions(result);\n const authoritative = result.match?.disabled ? undefined : result.match;\n remember(options, authoritative);\n setResolvedQuery(typed);\n setMatch(authoritative);\n setExplicitOption(false);\n setFocusedIndex(authoritative ? options.findIndex((option) => option.value === authoritative.value) : -1);\n completeInput(typed, authoritative);\n\n if (pendingCommitQuery === typed) {\n if (authoritative) commit(authoritative);\n else invalidate();\n }\n return options;\n },\n () => props.debounceMs ?? 150,\n );\n\n const options = () => (resolvedQuery() === query() ? loader.options() : []);\n const loadError = () => (resolvedQuery() === query() ? loader.error() : undefined);\n const focusedOption = () => options()[focusedIndex()];\n const focusOption = (index: number, explicit = true) => {\n setFocusedIndex(index);\n setExplicitOption(explicit);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (direction: 1 | -1) => focusOption(nextEnabledChoiceIndex(options(), focusedIndex(), direction));\n\n const startSearch = (typed: string, immediate = false) => {\n setInternalError(undefined);\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n popover.show();\n loader.load(typed, immediate);\n };\n\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n startSearch(editing() ? query() : \"\", true);\n };\n\n const selectedForCommit = (): AutocompleteSelectOption | undefined => {\n if (resolvedQuery() !== query()) return undefined;\n if (explicitOption()) return focusedOption();\n return match();\n };\n\n const requestCommit = () => {\n if (!editing()) return;\n const option = selectedForCommit();\n if (option) {\n commit(option);\n return;\n }\n if (query() === \"\" && props.clearable && !props.required) {\n pendingCommitQuery = undefined;\n loader.cancel();\n popover.hide();\n snapshot = { value: null, option: undefined, display: \"\" };\n setDisplay(\"\");\n setQuery(\"\");\n setEditing(false);\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n commitFieldValue(props, null);\n return;\n }\n if (pendingCommitQuery === query()) return;\n pendingCommitQuery = query();\n if (resolvedQuery() === query() && !loader.loading()) invalidate();\n else loader.load(query(), true);\n };\n\n const restore = () => {\n const target = snapshot;\n pendingCommitQuery = undefined;\n loader.cancel();\n popover.hide();\n remember(target.option ? [target.option] : []);\n setDisplay(target.display);\n setQuery(\"\");\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n if (value() !== target.value) props.onValueChange?.(target.value);\n setEditing(false);\n queueMicrotask(() => inputRef?.select());\n };\n\n createEffect(() => {\n if (editing()) return;\n const option = selected();\n setDisplay(formatValue(option));\n snapshot = { value: value(), option, display: formatValue(option) };\n });\n\n createEffect(() => {\n if (!inputRef) return;\n const message = internalError();\n inputRef.setCustomValidity(message ?? (editing() ? messages().selectMatchingOption : \"\"));\n });\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing) return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) {\n const typed = editing() ? query() : \"\";\n startSearch(typed, true);\n } else {\n move(event.key === \"ArrowDown\" ? 1 : -1);\n }\n } else if (event.key === \"Enter\" && popover.open()) {\n const option = selectedForCommit();\n if (!option) return;\n event.preventDefault();\n commit(option);\n inputRef?.select();\n } else if (event.key === \"Escape\" && (editing() || popover.open())) {\n event.preventDefault();\n if (editing()) restore();\n else popover.hide();\n } else if (event.key === \"Tab\") {\n requestCommit();\n popover.hide();\n }\n };\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 class=\"k2b-combobox\" data-invalid={error() ? \"true\" : undefined}>\n <div ref={popover.setTrigger} class=\"k2b-combobox__input\" data-clearable={hasClearAction() ? \"true\" : undefined}>\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(element) => {\n inputRef = element;\n }}\n id={meta.controlId}\n type=\"text\"\n value={display()}\n placeholder={props.placeholder ?? messages().typeToSearch}\n disabled={props.disabled}\n required={props.required}\n autofocus={props.autofocus}\n autocomplete=\"off\"\n spellcheck={false}\n role=\"combobox\"\n aria-autocomplete=\"both\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n {...fieldControlAria(meta, { ...props, error: error() })}\n onPointerDown={() => {\n pointerFocus = true;\n queueMicrotask(() => (pointerFocus = false));\n }}\n onFocus={() => {\n setFocused(true);\n if (!editing()) {\n const option = selected();\n snapshot = { value: value(), option, display: formatValue(option) };\n setDisplay(snapshot.display);\n }\n if (!pointerFocus) queueMicrotask(() => inputRef?.select());\n }}\n onClick={() => {\n if (!editing()) startSearch(\"\", true);\n }}\n onInput={(event) => {\n const typed = event.currentTarget.value;\n const beginsEdit = !editing();\n setEditing(true);\n if (beginsEdit && value() !== null) props.onValueChange?.(null);\n setDisplay(typed);\n setQuery(typed);\n pendingCommitQuery = undefined;\n startSearch(typed);\n }}\n onKeyDown={onKeyDown}\n onBlur={(event) => {\n setFocused(false);\n if (event.relatedTarget instanceof Node && popoverRef?.contains(event.relatedTarget)) return;\n requestCommit();\n popover.hide();\n }}\n />\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n tabindex={-1}\n aria-label={messages().clearSelection}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n snapshot = { value: null, option: undefined, display: \"\" };\n setDisplay(\"\");\n setQuery(\"\");\n setEditing(false);\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n commitFieldValue(props, null);\n inputRef?.focus();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show\n when={loader.loading()}\n fallback={\n <Show when={editing() && match()} fallback={<i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />}>\n <i class=\"ti ti-check\" aria-hidden=\"true\" />\n </Show>\n }\n >\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n </div>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <span class=\"k2b-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {loader.loading()\n ? (props.checkingText ?? messages().checkingOptions)\n : match()\n ? `Match: ${formatValue(match())}`\n : (internalError() ?? \"\")}\n </span>\n <div\n ref={(element) => {\n popoverRef = element;\n popover.setPopover(element);\n }}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n aria-label={typeof props.label === \"string\" ? props.label : messages().options}\n onFocusOut={(event) => {\n if (event.relatedTarget instanceof Node && (popoverRef?.contains(event.relatedTarget) || inputRef === event.relatedTarget))\n return;\n requestCommit();\n popover.hide();\n }}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n if (editing()) restore();\n else {\n popover.hide();\n inputRef?.focus();\n }\n }}\n >\n <Show when={(props.groups?.length ?? 0) > 0}>\n <div class=\"k2b-choice-toolbar\">\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </div>\n </Show>\n <div id={listboxId} class=\"k2b-choice-options\" role=\"listbox\">\n <Show when={loadError()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button\n type=\"button\"\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setInternalError(undefined);\n loader.retry();\n }}\n >\n Retry\n </button>\n </div>\n )}\n </Show>\n <Show when={loader.loading() && options().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{props.checkingText ?? messages().checkingOptionsLoading}</span>\n </div>\n </Show>\n <For\n each={loadError() ? [] : options()}\n fallback={\n <Show when={!loader.loading() && !loadError()}>\n <div class=\"k2b-choice-status\">{props.noOptionsText ?? messages().noOptionsFound}</div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={index() === focusedIndex()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => focusOption(index())}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n commit(option);\n inputRef?.focus();\n inputRef?.select();\n }}\n >\n <Show when={option.color} fallback={<Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default AutocompleteSelect;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/AutocompleteSelect.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport type { SelectGroup } from \"./Select\";\n\nexport type AutocompleteSelectOption = ChoiceOption<string>;\n\nexport type AutocompleteSelectSearchResult = {\n /** Ranked suggestions shown in the popup. */\n options: readonly AutocompleteSelectOption[];\n /** The authoritative option that Tab or blur may accept automatically. */\n match?: AutocompleteSelectOption;\n};\n\nexport type AutocompleteSelectProps = ValueFieldProps<string | null> & {\n search: (query: string, signal: AbortSignal, group: string | null) => Promise<AutocompleteSelectSearchResult>;\n selectedOption?: AutocompleteSelectOption;\n formatValue?: (option: AutocompleteSelectOption) => string;\n groups?: readonly SelectGroup[];\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n placeholder?: string;\n debounceMs?: number;\n clearable?: boolean;\n name?: string;\n autofocus?: boolean;\n noMatchText?: string;\n checkingText?: string;\n noOptionsText?: string;\n};\n\ntype SelectionSnapshot = {\n value: string | null;\n option?: AutocompleteSelectOption;\n display: string;\n};\n\nconst errorMessage = (error: unknown, fallback: string): string => (error instanceof Error ? error.message : fallback);\n\nexport function AutocompleteSelect(props: AutocompleteSelectProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [cache, setCache] = createSignal<Record<string, AutocompleteSelectOption>>({});\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const selected = createMemo<AutocompleteSelectOption | undefined>(() => {\n const current = value();\n if (current === null) return undefined;\n return (\n cache()[current] ??\n (props.selectedOption?.value === current ? props.selectedOption : undefined) ?? {\n value: current,\n label: current,\n }\n );\n });\n const formatValue = (option: AutocompleteSelectOption | undefined): string =>\n option ? (props.formatValue?.(option) ?? option.label) : \"\";\n\n const [display, setDisplay] = createSignal(formatValue(selected()));\n const [query, setQuery] = createSignal(\"\");\n const [focused, setFocused] = createSignal(false);\n const [editing, setEditing] = createSignal(false);\n const [resolvedQuery, setResolvedQuery] = createSignal<string>();\n const [match, setMatch] = createSignal<AutocompleteSelectOption>();\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n const [explicitOption, setExplicitOption] = createSignal(false);\n const [internalError, setInternalError] = createSignal<string>();\n const externalError = () => resolveMaybeAccessor(props.error);\n const error = () => externalError() ?? internalError();\n const hasClearAction = () => Boolean(props.clearable && value() !== null && !props.disabled);\n let inputRef: HTMLInputElement | undefined;\n let popoverRef: HTMLDivElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n let pointerFocus = false;\n let pendingCommitQuery: string | undefined;\n let snapshot: SelectionSnapshot = { value: value(), option: selected(), display: formatValue(selected()) };\n\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n\n const remember = (options: readonly AutocompleteSelectOption[], authoritative?: AutocompleteSelectOption) => {\n const next = { ...cache() };\n for (const option of options) next[option.value] = option;\n if (authoritative) next[authoritative.value] = authoritative;\n setCache(next);\n };\n\n const completeInput = (typed: string, authoritative: AutocompleteSelectOption | undefined) => {\n if (!inputRef || !focused() || !editing() || !authoritative || typed.length === 0) return;\n const lower = typed.toLocaleLowerCase();\n const completion = [authoritative.value, authoritative.label].find((candidate) => candidate.toLocaleLowerCase().startsWith(lower));\n if (!completion || completion.length <= typed.length) return;\n setDisplay(completion);\n queueMicrotask(() => {\n if (!inputRef || document.activeElement !== inputRef || query() !== typed) return;\n inputRef.setSelectionRange(typed.length, completion.length);\n });\n };\n\n const mergedOptions = (result: AutocompleteSelectSearchResult): readonly AutocompleteSelectOption[] =>\n result.match && !result.options.some((option) => option.value === result.match!.value)\n ? [result.match, ...result.options]\n : result.options;\n\n const commit = (option: AutocompleteSelectOption) => {\n if (option.disabled) return;\n pendingCommitQuery = undefined;\n loader.cancel();\n popover.hide();\n remember([], option);\n setDisplay(formatValue(option));\n setQuery(\"\");\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n snapshot = { value: option.value, option, display: formatValue(option) };\n commitFieldValue(props, option.value);\n setEditing(false);\n };\n\n const invalidate = (message = props.noMatchText ?? messages().noMatchingOption) => {\n pendingCommitQuery = undefined;\n setInternalError(message);\n popover.hide();\n };\n\n const loader = createChoiceLoader(\n () => async (typed, signal) => {\n let result: AutocompleteSelectSearchResult;\n try {\n result = await props.search(typed, signal, activeGroup());\n } catch (reason) {\n if (!signal.aborted) {\n setResolvedQuery(typed);\n if (pendingCommitQuery === typed) invalidate(errorMessage(reason, messages().optionsCouldNotLoad));\n }\n throw reason;\n }\n if (signal.aborted) return [];\n\n const options = mergedOptions(result);\n const authoritative = result.match?.disabled ? undefined : result.match;\n remember(options, authoritative);\n setResolvedQuery(typed);\n setMatch(authoritative);\n setExplicitOption(false);\n setFocusedIndex(authoritative ? options.findIndex((option) => option.value === authoritative.value) : -1);\n completeInput(typed, authoritative);\n\n if (pendingCommitQuery === typed) {\n if (authoritative) commit(authoritative);\n else invalidate();\n }\n return options;\n },\n () => props.debounceMs ?? 150,\n );\n\n const options = () => (resolvedQuery() === query() ? loader.options() : []);\n const loadError = () => (resolvedQuery() === query() ? loader.error() : undefined);\n const focusedOption = () => options()[focusedIndex()];\n const focusOption = (index: number, explicit = true) => {\n setFocusedIndex(index);\n setExplicitOption(explicit);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (direction: 1 | -1) => focusOption(nextEnabledChoiceIndex(options(), focusedIndex(), direction));\n\n const startSearch = (typed: string, immediate = false) => {\n setInternalError(undefined);\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n popover.show();\n loader.load(typed, immediate);\n };\n\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n startSearch(editing() ? query() : \"\", true);\n };\n\n const selectedForCommit = (): AutocompleteSelectOption | undefined => {\n if (resolvedQuery() !== query()) return undefined;\n if (explicitOption()) return focusedOption();\n return match();\n };\n\n const requestCommit = () => {\n if (!editing()) return;\n const option = selectedForCommit();\n if (option) {\n commit(option);\n return;\n }\n if (query() === \"\" && props.clearable && !props.required) {\n pendingCommitQuery = undefined;\n loader.cancel();\n popover.hide();\n snapshot = { value: null, option: undefined, display: \"\" };\n setDisplay(\"\");\n setQuery(\"\");\n setEditing(false);\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n commitFieldValue(props, null);\n return;\n }\n if (pendingCommitQuery === query()) return;\n pendingCommitQuery = query();\n if (resolvedQuery() === query() && !loader.loading()) invalidate();\n else loader.load(query(), true);\n };\n\n const restore = () => {\n const target = snapshot;\n pendingCommitQuery = undefined;\n loader.cancel();\n popover.hide();\n remember(target.option ? [target.option] : []);\n setDisplay(target.display);\n setQuery(\"\");\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n if (value() !== target.value) props.onValueChange?.(target.value);\n setEditing(false);\n queueMicrotask(() => inputRef?.select());\n };\n\n createEffect(() => {\n if (editing()) return;\n const option = selected();\n setDisplay(formatValue(option));\n snapshot = { value: value(), option, display: formatValue(option) };\n });\n\n createEffect(() => {\n if (!inputRef) return;\n const message = internalError();\n inputRef.setCustomValidity(message ?? (editing() ? messages().selectMatchingOption : \"\"));\n });\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing) return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) {\n const typed = editing() ? query() : \"\";\n startSearch(typed, true);\n } else {\n move(event.key === \"ArrowDown\" ? 1 : -1);\n }\n } else if (event.key === \"Enter\" && popover.open()) {\n const option = selectedForCommit();\n if (!option) return;\n event.preventDefault();\n commit(option);\n inputRef?.select();\n } else if (event.key === \"Escape\" && (editing() || popover.open())) {\n event.preventDefault();\n if (editing()) restore();\n else popover.hide();\n } else if (event.key === \"Tab\") {\n requestCommit();\n popover.hide();\n }\n };\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 class=\"k2b-combobox\" data-invalid={error() ? \"true\" : undefined}>\n <div ref={popover.setTrigger} class=\"k2b-combobox__input\" data-clearable={hasClearAction() ? \"true\" : undefined}>\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(element) => {\n inputRef = element;\n }}\n id={meta.controlId}\n type=\"text\"\n value={display()}\n placeholder={props.placeholder ?? messages().typeToSearch}\n disabled={props.disabled}\n required={props.required}\n autofocus={props.autofocus}\n autocomplete=\"off\"\n spellcheck={false}\n role=\"combobox\"\n aria-autocomplete=\"both\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n {...fieldControlAria(meta, { ...props, error: error() })}\n onPointerDown={() => {\n pointerFocus = true;\n queueMicrotask(() => (pointerFocus = false));\n }}\n onFocus={() => {\n setFocused(true);\n if (!editing()) {\n const option = selected();\n snapshot = { value: value(), option, display: formatValue(option) };\n setDisplay(snapshot.display);\n }\n if (!pointerFocus) queueMicrotask(() => inputRef?.select());\n }}\n onClick={() => {\n if (!editing()) startSearch(\"\", true);\n }}\n onInput={(event) => {\n const typed = event.currentTarget.value;\n const beginsEdit = !editing();\n setEditing(true);\n if (beginsEdit && value() !== null) props.onValueChange?.(null);\n setDisplay(typed);\n setQuery(typed);\n pendingCommitQuery = undefined;\n startSearch(typed);\n }}\n onKeyDown={onKeyDown}\n onBlur={(event) => {\n setFocused(false);\n if (event.relatedTarget instanceof Node && popoverRef?.contains(event.relatedTarget)) return;\n requestCommit();\n popover.hide();\n }}\n />\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n tabindex={-1}\n aria-label={messages().clearSelection}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n snapshot = { value: null, option: undefined, display: \"\" };\n setDisplay(\"\");\n setQuery(\"\");\n setEditing(false);\n setResolvedQuery(undefined);\n setMatch(undefined);\n setFocusedIndex(-1);\n setExplicitOption(false);\n setInternalError(undefined);\n commitFieldValue(props, null);\n inputRef?.focus();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show\n when={loader.loading()}\n fallback={\n <Show when={editing() && match()} fallback={<i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />}>\n <i class=\"ti ti-check\" aria-hidden=\"true\" />\n </Show>\n }\n >\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n </div>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <span class=\"k2b-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {loader.loading()\n ? (props.checkingText ?? messages().checkingOptions)\n : match()\n ? `Match: ${formatValue(match())}`\n : (internalError() ?? \"\")}\n </span>\n <div\n ref={(element) => {\n popoverRef = element;\n popover.setPopover(element);\n }}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n aria-label={typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? messages().options)}\n onFocusOut={(event) => {\n if (event.relatedTarget instanceof Node && (popoverRef?.contains(event.relatedTarget) || inputRef === event.relatedTarget))\n return;\n requestCommit();\n popover.hide();\n }}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n if (editing()) restore();\n else {\n popover.hide();\n inputRef?.focus();\n }\n }}\n >\n <Show when={(props.groups?.length ?? 0) > 0}>\n <div class=\"k2b-choice-toolbar\">\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </div>\n </Show>\n <div id={listboxId} class=\"k2b-choice-options\" role=\"listbox\">\n <Show when={loadError()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button\n type=\"button\"\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setInternalError(undefined);\n loader.retry();\n }}\n >\n Retry\n </button>\n </div>\n )}\n </Show>\n <Show when={loader.loading() && options().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{props.checkingText ?? messages().checkingOptionsLoading}</span>\n </div>\n </Show>\n <For\n each={loadError() ? [] : options()}\n fallback={\n <Show when={!loader.loading() && !loadError()}>\n <div class=\"k2b-choice-status\">{props.noOptionsText ?? messages().noOptionsFound}</div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={index() === focusedIndex()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => focusOption(index())}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n commit(option);\n inputRef?.focus();\n inputRef?.select();\n }}\n >\n <Show when={option.color} fallback={<Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default AutocompleteSelect;\n"],"mappings":"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","ignoreList":[]}
|