@adea-ai/ui 0.95.7 → 0.97.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.
Files changed (71) hide show
  1. package/dist/components/composites/about-dialog/about-dialog.d.ts +17 -0
  2. package/dist/components/composites/about-dialog/about-dialog.d.ts.map +1 -0
  3. package/dist/components/composites/about-dialog/about-dialog.js +167 -0
  4. package/dist/components/composites/about-dialog/about-dialog.js.map +1 -0
  5. package/dist/components/composites/about-dialog/index.d.ts +3 -0
  6. package/dist/components/composites/about-dialog/index.d.ts.map +1 -0
  7. package/dist/components/composites/about-dialog/index.js +2 -0
  8. package/dist/components/composites/account-menu/account-menu.d.ts +12 -0
  9. package/dist/components/composites/account-menu/account-menu.d.ts.map +1 -1
  10. package/dist/components/composites/account-menu/account-menu.js +91 -49
  11. package/dist/components/composites/account-menu/account-menu.js.map +1 -1
  12. package/dist/components/composites/account-menu/index.d.ts +1 -1
  13. package/dist/components/composites/account-menu/index.d.ts.map +1 -1
  14. package/dist/components/composites/account-menu/index.js +2 -2
  15. package/dist/components/composites/catalog-browser/catalog-browser-group.d.ts +0 -1
  16. package/dist/components/composites/catalog-browser/catalog-browser-group.d.ts.map +1 -1
  17. package/dist/components/composites/catalog-browser/catalog-browser-group.js +16 -18
  18. package/dist/components/composites/catalog-browser/catalog-browser-group.js.map +1 -1
  19. package/dist/components/composites/catalog-browser/catalog-browser.d.ts.map +1 -1
  20. package/dist/components/composites/catalog-browser/catalog-browser.js +7 -7
  21. package/dist/components/composites/catalog-browser/catalog-browser.js.map +1 -1
  22. package/dist/components/composites/catalog-browser/catalog-detail.d.ts +1 -1
  23. package/dist/components/composites/catalog-browser/catalog-detail.d.ts.map +1 -1
  24. package/dist/components/composites/catalog-browser/catalog-detail.js +57 -73
  25. package/dist/components/composites/catalog-browser/catalog-detail.js.map +1 -1
  26. package/dist/components/composites/catalog-browser/catalog-types.d.ts +2 -1
  27. package/dist/components/composites/catalog-browser/catalog-types.d.ts.map +1 -1
  28. package/dist/components/composites/help-center/help-center.d.ts +19 -0
  29. package/dist/components/composites/help-center/help-center.d.ts.map +1 -0
  30. package/dist/components/composites/help-center/help-center.js +135 -0
  31. package/dist/components/composites/help-center/help-center.js.map +1 -0
  32. package/dist/components/composites/help-center/index.d.ts +3 -0
  33. package/dist/components/composites/help-center/index.d.ts.map +1 -0
  34. package/dist/components/composites/help-center/index.js +2 -0
  35. package/dist/components/composites/update-dialog/update-dialog.d.ts +11 -1
  36. package/dist/components/composites/update-dialog/update-dialog.d.ts.map +1 -1
  37. package/dist/components/composites/update-dialog/update-dialog.js +209 -78
  38. package/dist/components/composites/update-dialog/update-dialog.js.map +1 -1
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +4 -2
  42. package/dist/r/about-dialog.json +26 -0
  43. package/dist/r/catalog-browser.json +0 -1
  44. package/dist/r/help-center.json +28 -0
  45. package/dist/r/registry.json +55 -1
  46. package/dist/r/src/components/composites/about-dialog/about-dialog.tsx +161 -0
  47. package/dist/r/src/components/composites/about-dialog/index.ts +2 -0
  48. package/dist/r/src/components/composites/account-menu/account-menu.tsx +64 -12
  49. package/dist/r/src/components/composites/account-menu/index.ts +6 -1
  50. package/dist/r/src/components/composites/catalog-browser/catalog-browser-group.tsx +19 -8
  51. package/dist/r/src/components/composites/catalog-browser/catalog-browser.tsx +5 -3
  52. package/dist/r/src/components/composites/catalog-browser/catalog-detail.tsx +36 -35
  53. package/dist/r/src/components/composites/catalog-browser/catalog-types.ts +2 -1
  54. package/dist/r/src/components/composites/help-center/help-center.tsx +104 -0
  55. package/dist/r/src/components/composites/help-center/index.ts +2 -0
  56. package/dist/r/src/components/composites/update-dialog/update-dialog.tsx +200 -27
  57. package/dist/r/update-dialog.json +1 -0
  58. package/package.json +1 -1
  59. package/registry.json +55 -1
  60. package/src/components/composites/about-dialog/about-dialog.tsx +161 -0
  61. package/src/components/composites/about-dialog/index.ts +2 -0
  62. package/src/components/composites/account-menu/account-menu.tsx +64 -12
  63. package/src/components/composites/account-menu/index.ts +6 -1
  64. package/src/components/composites/catalog-browser/catalog-browser-group.tsx +19 -8
  65. package/src/components/composites/catalog-browser/catalog-browser.tsx +5 -3
  66. package/src/components/composites/catalog-browser/catalog-detail.tsx +36 -35
  67. package/src/components/composites/catalog-browser/catalog-types.ts +2 -1
  68. package/src/components/composites/help-center/help-center.tsx +104 -0
  69. package/src/components/composites/help-center/index.ts +2 -0
  70. package/src/components/composites/update-dialog/update-dialog.tsx +200 -27
  71. package/src/index.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-browser-group.js","names":["createUniqueId","For","onCleanup","Show","JSX","ChevronDown","ChevronRight","ChevronUp","keyedRows","Badge","Button","Skeleton","CatalogBrowserEntry","CatalogBrowserGroup","CatalogGroup","CatalogLoadingState","props","label","_el$","_tmpl$","_$insert","_$createComponent","each","children","_el$2","_tmpl$2","_el$3","firstChild","_$effect","_$setAttribute","CatalogBrowserRow","entry","Value","groupId","installedLabel","publishedByLabel","publisher","disabled","renderIcon","value","Element","onSelect","key","onRef","element","HTMLButtonElement","JSON","stringify","id","undefined","ref","node","data-catalog-entry-id","variant","size","onClick","_el$4","_tmpl$3","_el$5","_tmpl$4","_el$6","_el$7","_el$8","nextSibling","_el$9","_el$0","name","when","installed","description","category","group","expanded","previewCount","showMoreLabel","entries","remainingCount","showLessLabel","onToggle","headingId","listId","hidden","slice","preview","rows","_el$1","_tmpl$5","_el$10","_el$11","_el$12","length","row","item","aria-expanded","fallback","_$memo","_$createComponent","_$setAttribute","_$memo"],"sources":["../../../../src/components/composites/catalog-browser/catalog-browser-group.tsx"],"sourcesContent":["import { createUniqueId, For, onCleanup, Show, type JSX } from 'solid-js'\nimport { ChevronDown, ChevronRight, ChevronUp } from 'lucide-solid'\nimport { keyedRows } from '#lib/keyed-rows'\nimport { Badge } from '../../ui/badge'\nimport { Button } from '../../ui/button'\nimport { Skeleton } from '../../ui/skeleton'\nimport type { CatalogBrowserEntry, CatalogBrowserGroup as CatalogGroup } from './catalog-types'\n\nexport function CatalogLoadingState(props: { label: string }) {\n return (\n <div\n class=\"grid min-w-0 grid-cols-1 gap-3 md:grid-cols-2\"\n aria-busy=\"true\"\n aria-label={props.label}\n >\n <For each={[0, 1, 2, 3, 4, 5, 6]}>\n {() => (\n <div class=\"flex min-w-0 items-center gap-3 rounded-xl border border-border p-3\">\n <Skeleton class=\"size-9 shrink-0\" />\n <div class=\"grid min-w-0 flex-1 gap-2\">\n <Skeleton class=\"h-4 w-2/5\" />\n <Skeleton class=\"h-3 w-4/5\" />\n <Skeleton class=\"h-3 w-3/5\" />\n </div>\n </div>\n )}\n </For>\n </div>\n )\n}\n\nfunction CatalogBrowserRow<Value>(props: {\n entry: CatalogBrowserEntry<Value>\n groupId: string\n installedLabel: string\n publishedByLabel: (publisher: string) => string\n disabled: boolean\n renderIcon: (value: Value) => JSX.Element\n onSelect: (entry: CatalogBrowserEntry<Value>, key: string) => void\n onRef: (key: string, element: HTMLButtonElement | undefined) => void\n}) {\n const key = JSON.stringify([props.groupId, props.entry.id])\n let element: HTMLButtonElement | undefined\n onCleanup(() => {\n if (element) props.onRef(key, undefined)\n })\n\n return (\n <Button\n ref={(node) => {\n element = node\n props.onRef(key, node)\n }}\n data-catalog-entry-id={props.entry.id}\n variant=\"outline\"\n size=\"lg\"\n // `h-auto!` must stay important: the size token's fixed `h-control-lg`\n // is a custom class tailwind-merge cannot conflict-resolve, so an\n // unimportant `h-auto` loses the stylesheet sort and clamps this\n // multi-line row to one control line, spilling its content over the\n // neighbouring rows.\n class=\"h-auto! min-h-row-lg w-full min-w-0 justify-start gap-3 whitespace-normal\"\n disabled={props.disabled}\n onClick={() => props.onSelect(props.entry, key)}\n >\n <span class=\"shrink-0\">{props.renderIcon(props.entry.value)}</span>\n <span class=\"flex min-w-0 flex-1 flex-col gap-1 text-left\">\n <span class=\"flex min-w-0 flex-wrap items-center gap-2\">\n <strong class=\"min-w-0 truncate\">{props.entry.name}</strong>\n <Show when={props.entry.installed}>\n <Badge variant=\"secondary\">{props.installedLabel}</Badge>\n </Show>\n </span>\n <span class=\"text-muted-foreground line-clamp-2 text-xs\">{props.entry.description}</span>\n <span class=\"text-muted-foreground truncate text-2xs\">\n {props.publishedByLabel(props.entry.publisher)} · {props.entry.category}\n </span>\n </span>\n <ChevronRight aria-hidden=\"true\" />\n </Button>\n )\n}\n\nexport function CatalogBrowserGroup<Value>(props: {\n group: CatalogGroup<Value>\n expanded: boolean\n previewCount: number\n disabled: boolean\n installedLabel: string\n publishedByLabel: (publisher: string) => string\n showMoreLabel: (entries: readonly CatalogBrowserEntry<Value>[], remainingCount: number) => string\n showLessLabel: string\n renderIcon: (value: Value) => JSX.Element\n onSelect: (entry: CatalogBrowserEntry<Value>, key: string) => void\n onRef: (key: string, element: HTMLButtonElement | undefined) => void\n onToggle: (id: string) => void\n}) {\n const headingId = `catalog-browser-group-${createUniqueId()}`\n const listId = `catalog-browser-items-${createUniqueId()}`\n const hidden = () => props.group.entries.slice(props.previewCount)\n const preview = () =>\n props.expanded ? props.group.entries : props.group.entries.slice(0, props.previewCount)\n const rows = keyedRows(preview, (entry) => entry.id)\n\n return (\n <section class=\"grid min-w-0 gap-2\" aria-labelledby={headingId}>\n <header class=\"flex min-w-0 items-center gap-2\">\n <h3 id={headingId} class=\"min-w-0 flex-1 truncate text-sm font-semibold\">\n {props.group.label}\n </h3>\n <Badge variant=\"outline\">{props.group.entries.length}</Badge>\n </header>\n <div id={listId} class=\"grid min-w-0 grid-cols-1 gap-2 md:grid-cols-2\">\n <For each={rows()}>\n {(row) => (\n <CatalogBrowserRow\n entry={row.item()}\n groupId={props.group.id}\n installedLabel={props.installedLabel}\n publishedByLabel={props.publishedByLabel}\n disabled={props.disabled}\n renderIcon={props.renderIcon}\n onSelect={props.onSelect}\n onRef={props.onRef}\n />\n )}\n </For>\n </div>\n <Show when={hidden().length > 0}>\n <Button\n variant=\"ghost\"\n size=\"lg\"\n disabled={props.disabled}\n aria-expanded={props.expanded}\n aria-controls={listId}\n onClick={() => props.onToggle(props.group.id)}\n >\n <Show\n when={props.expanded}\n fallback={\n <>\n {props.showMoreLabel(hidden(), hidden().length)}{' '}\n <ChevronDown data-icon=\"inline-end\" aria-hidden=\"true\" />\n </>\n }\n >\n {props.showLessLabel} <ChevronUp data-icon=\"inline-end\" aria-hidden=\"true\" />\n </Show>\n </Button>\n </Show>\n </section>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"catalog-browser-group.js","names":["createUniqueId","For","onCleanup","Show","JSX","ChevronDown","ChevronRight","ChevronUp","keyedRows","Badge","Button","Skeleton","CatalogBrowserEntry","CatalogBrowserGroup","CatalogGroup","CatalogLoadingState","props","label","_el$","_tmpl$","_$insert","_$createComponent","each","children","_el$2","_tmpl$2","_el$3","firstChild","_$effect","_$setAttribute","CatalogBrowserRow","entry","Value","groupId","installedLabel","disabled","renderIcon","value","Element","onSelect","key","onRef","element","HTMLButtonElement","JSON","stringify","id","undefined","ref","node","data-catalog-entry-id","variant","size","onClick","_el$4","_tmpl$3","_el$5","_tmpl$4","_el$6","_el$7","_el$8","nextSibling","_el$9","_el$0","_el$1","_el$10","name","when","installed","description","publisher","category","group","expanded","previewCount","showMoreLabel","entries","remainingCount","showLessLabel","onToggle","headingId","listId","hidden","slice","preview","rows","_el$11","_tmpl$5","_el$12","_el$13","_el$14","length","row","item","aria-expanded","fallback","_$memo","_$createComponent","_$setAttribute","_$memo"],"sources":["../../../../src/components/composites/catalog-browser/catalog-browser-group.tsx"],"sourcesContent":["import { createUniqueId, For, onCleanup, Show, type JSX } from 'solid-js'\nimport { ChevronDown, ChevronRight, ChevronUp } from 'lucide-solid'\nimport { keyedRows } from '#lib/keyed-rows'\nimport { Badge } from '../../ui/badge'\nimport { Button } from '../../ui/button'\nimport { Skeleton } from '../../ui/skeleton'\nimport type { CatalogBrowserEntry, CatalogBrowserGroup as CatalogGroup } from './catalog-types'\n\nexport function CatalogLoadingState(props: { label: string }) {\n return (\n <div\n class=\"grid min-w-0 grid-cols-1 gap-3 md:grid-cols-2\"\n aria-busy=\"true\"\n aria-label={props.label}\n >\n <For each={[0, 1, 2, 3, 4, 5, 6]}>\n {() => (\n <div class=\"flex min-w-0 items-center gap-3 rounded-xl border border-border p-3\">\n <Skeleton class=\"size-9 shrink-0\" />\n <div class=\"grid min-w-0 flex-1 gap-2\">\n <Skeleton class=\"h-4 w-2/5\" />\n <Skeleton class=\"h-3 w-4/5\" />\n <Skeleton class=\"h-3 w-3/5\" />\n </div>\n </div>\n )}\n </For>\n </div>\n )\n}\n\nfunction CatalogBrowserRow<Value>(props: {\n entry: CatalogBrowserEntry<Value>\n groupId: string\n installedLabel: string\n disabled: boolean\n renderIcon: (value: Value) => JSX.Element\n onSelect: (entry: CatalogBrowserEntry<Value>, key: string) => void\n onRef: (key: string, element: HTMLButtonElement | undefined) => void\n}) {\n const key = JSON.stringify([props.groupId, props.entry.id])\n let element: HTMLButtonElement | undefined\n onCleanup(() => {\n if (element) props.onRef(key, undefined)\n })\n\n return (\n <Button\n ref={(node) => {\n element = node\n props.onRef(key, node)\n }}\n data-catalog-entry-id={props.entry.id}\n variant=\"outline\"\n size=\"lg\"\n // `h-auto!` must stay important: the size token's fixed `h-control-lg`\n // is a custom class tailwind-merge cannot conflict-resolve, so an\n // unimportant `h-auto` loses the stylesheet sort and clamps this\n // multi-line row to one control line, spilling its content over the\n // neighbouring rows.\n class=\"h-auto! min-h-row-lg w-full min-w-0 justify-start gap-3 py-2.5 whitespace-normal\"\n disabled={props.disabled}\n onClick={() => props.onSelect(props.entry, key)}\n >\n <span class=\"shrink-0\">{props.renderIcon(props.entry.value)}</span>\n <span class=\"flex min-w-0 flex-1 flex-col gap-1 text-left\">\n <span class=\"flex min-w-0 flex-wrap items-center gap-2\">\n <strong class=\"min-w-0 truncate\">{props.entry.name}</strong>\n <Show when={props.entry.installed}>\n <Badge variant=\"secondary\">{props.installedLabel}</Badge>\n </Show>\n </span>\n {/* Exactly one content line: the description truncates and the\n publisher and category ride the same line as accent chips. */}\n <span class=\"flex min-w-0 items-center gap-1.5 text-xs\">\n <span class=\"text-muted-foreground min-w-0 truncate\">{props.entry.description}</span>\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\n <span class=\"rounded bg-primary-subtle px-1.5 py-0.5 text-2xs font-medium text-primary\">\n {props.entry.publisher}\n </span>\n <span class=\"rounded bg-primary-subtle px-1.5 py-0.5 text-2xs font-medium text-primary\">\n {props.entry.category}\n </span>\n </span>\n </span>\n </span>\n <ChevronRight aria-hidden=\"true\" />\n </Button>\n )\n}\n\nexport function CatalogBrowserGroup<Value>(props: {\n group: CatalogGroup<Value>\n expanded: boolean\n previewCount: number\n disabled: boolean\n installedLabel: string\n showMoreLabel: (entries: readonly CatalogBrowserEntry<Value>[], remainingCount: number) => string\n showLessLabel: string\n renderIcon: (value: Value) => JSX.Element\n onSelect: (entry: CatalogBrowserEntry<Value>, key: string) => void\n onRef: (key: string, element: HTMLButtonElement | undefined) => void\n onToggle: (id: string) => void\n}) {\n const headingId = `catalog-browser-group-${createUniqueId()}`\n const listId = `catalog-browser-items-${createUniqueId()}`\n const hidden = () => props.group.entries.slice(props.previewCount)\n const preview = () =>\n props.expanded ? props.group.entries : props.group.entries.slice(0, props.previewCount)\n const rows = keyedRows(preview, (entry) => entry.id)\n\n return (\n <section class=\"grid min-w-0 gap-2\" aria-labelledby={headingId}>\n <header class=\"flex min-w-0 items-center gap-2\">\n <h3 id={headingId} class=\"min-w-0 flex-1 truncate text-sm font-semibold\">\n {props.group.label}\n </h3>\n <Badge\n variant=\"outline\"\n class=\"border-primary/25 bg-primary-subtle tabular-nums text-primary\"\n >\n {props.group.entries.length}\n </Badge>\n </header>\n <div id={listId} class=\"grid min-w-0 grid-cols-1 gap-2 md:grid-cols-2\">\n <For each={rows()}>\n {(row) => (\n <CatalogBrowserRow\n entry={row.item()}\n groupId={props.group.id}\n installedLabel={props.installedLabel}\n disabled={props.disabled}\n renderIcon={props.renderIcon}\n onSelect={props.onSelect}\n onRef={props.onRef}\n />\n )}\n </For>\n </div>\n <Show when={hidden().length > 0}>\n <Button\n variant=\"ghost\"\n size=\"lg\"\n disabled={props.disabled}\n aria-expanded={props.expanded}\n aria-controls={listId}\n onClick={() => props.onToggle(props.group.id)}\n >\n <Show\n when={props.expanded}\n fallback={\n <>\n {props.showMoreLabel(hidden(), hidden().length)}{' '}\n <ChevronDown data-icon=\"inline-end\" aria-hidden=\"true\" />\n </>\n }\n >\n {props.showLessLabel} <ChevronUp data-icon=\"inline-end\" aria-hidden=\"true\" />\n </Show>\n </Button>\n </Show>\n </section>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-browser.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/catalog-browser/catalog-browser.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAE1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,kCA8OtE"}
1
+ {"version":3,"file":"catalog-browser.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/catalog-browser/catalog-browser.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAE1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,kCAgPtE"}
@@ -11,7 +11,7 @@ import { ArrowLeft, Blocks, Search } from "lucide-solid";
11
11
  import { For, Show, createEffect, createMemo, createSignal, onCleanup } from "solid-js";
12
12
  //#region src/components/composites/catalog-browser/catalog-browser.tsx
13
13
  var _tmpl$ = /*#__PURE__*/ template(`<div>`);
14
- var _tmpl$2 = /*#__PURE__*/ template(`<div class="flex min-w-0 shrink-0 flex-wrap items-center gap-2 px-4 pt-2"><span class="text-muted-foreground ms-auto text-sm"role=status>`);
14
+ var _tmpl$2 = /*#__PURE__*/ template(`<div class="flex min-w-0 shrink-0 flex-wrap items-center gap-2 px-4 pt-2"><span class="text-primary ms-auto text-sm font-medium tabular-nums"role=status>`);
15
15
  var _tmpl$3 = /*#__PURE__*/ template(`<div class="grid min-w-0 gap-5">`);
16
16
  var _tmpl$4 = /*#__PURE__*/ template(`<p class="text-destructive px-4 pt-2 text-sm"role=alert>`);
17
17
  var _tmpl$5 = /*#__PURE__*/ template(`<p class="text-muted-foreground text-sm">`);
@@ -148,9 +148,12 @@ function CatalogBrowser(props) {
148
148
  insert(_el$2, createComponent(InputGroup, {
149
149
  "class": "min-w-0 flex-1 sm:max-w-md",
150
150
  get children() {
151
- return [createComponent(InputGroupAddon, { get children() {
152
- return createComponent(Search, { "aria-hidden": "true" });
153
- } }), createComponent(InputGroupInput, {
151
+ return [createComponent(InputGroupAddon, {
152
+ "class": "text-primary",
153
+ get children() {
154
+ return createComponent(Search, { "aria-hidden": "true" });
155
+ }
156
+ }), createComponent(InputGroupInput, {
154
157
  ref: (element) => searchInput = element,
155
158
  type: "search",
156
159
  get ["aria-label"]() {
@@ -292,9 +295,6 @@ function CatalogBrowser(props) {
292
295
  get installedLabel() {
293
296
  return props.installedLabel;
294
297
  },
295
- get publishedByLabel() {
296
- return props.publishedByLabel;
297
- },
298
298
  get showMoreLabel() {
299
299
  return props.showMoreLabel;
300
300
  },
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-browser.js","names":["createEffect","createMemo","createSignal","For","onCleanup","Show","ArrowLeft","Blocks","Search","keyedRows","Button","Empty","EmptyContent","EmptyDescription","EmptyHeader","EmptyMedia","EmptyTitle","InputGroup","InputGroupAddon","InputGroupInput","Tabs","TabsContent","TabsList","TabsTrigger","ScrollArea","cn","CatalogBrowserGroup","CatalogLoadingState","CatalogBrowserProps","CatalogBrowser","props","Value","expandedGroups","setExpandedGroups","ReadonlySet","Set","returnKey","setReturnKey","lastSelectedId","setLastSelectedId","rowRefs","Map","HTMLButtonElement","searchInput","HTMLInputElement","backButton","selectedTab","tabs","find","tab","id","supplemental","kind","selected","selectedId","entries","entry","undefined","groupRows","groups","group","wide","setWide","window","matchMedia","matches","updateWide","event","MediaQueryListEvent","query","addEventListener","removeEventListener","open","selectedEntry","previous","requestAnimationFrame","focus","key","row","get","isConnected","registerRow","element","set","delete","selectEntry","value","onSelect","toggleGroup","current","next","has","add","previewCount","countLabel","status","loadingLabel","resultLabel","resultCount","supplementalContent","renderSupplementalView","_el$","_tmpl$","_$insert","_$createComponent","when","fallback","onChange","onTabChange","children","aria-label","tabsLabel","each","label","installError","message","_el$5","_tmpl$4","_el$2","_tmpl$2","_el$3","firstChild","filterControl","ref","type","searchLabel","placeholder","searchPlaceholder","onInput","onQueryChange","currentTarget","role","resultsRegionLabel","orientation","catalogError","variant","title","description","catalogErrorAction","emptyState","emptyStateAction","_el$4","_tmpl$3","item","expanded","disabled","interactionDisabled","installedLabel","publishedByLabel","showMoreLabel","showLessLabel","renderIcon","onRef","onToggle","notices","notice","_el$6","_tmpl$5","_$effect","_$setAttribute","_el$7","_tmpl$6","size","onClick","onBack","_$memo","backLabel","detailRegionLabel","renderDetail","_$className","class","_$createComponent","_$setAttribute","_$memo","_$className"],"sources":["../../../../src/components/composites/catalog-browser/catalog-browser.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, onCleanup, Show } from 'solid-js'\nimport { ArrowLeft, Blocks, Search } from 'lucide-solid'\nimport { keyedRows } from '#lib/keyed-rows'\nimport { Button } from '../../ui/button'\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from '../../ui/empty'\nimport { InputGroup, InputGroupAddon, InputGroupInput } from '../../ui/input-group'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs'\nimport { ScrollArea } from '../../ui/scroll-area'\nimport { cn } from '#lib/utils'\nimport { CatalogBrowserGroup, CatalogLoadingState } from './catalog-browser-group'\nimport type { CatalogBrowserProps } from './catalog-types'\n\nexport function CatalogBrowser<Value>(props: CatalogBrowserProps<Value>) {\n const [expandedGroups, setExpandedGroups] = createSignal<ReadonlySet<string>>(new Set())\n const [returnKey, setReturnKey] = createSignal<string>()\n const [lastSelectedId, setLastSelectedId] = createSignal<string>()\n const rowRefs = new Map<string, HTMLButtonElement>()\n let searchInput: HTMLInputElement | undefined\n let backButton: HTMLButtonElement | undefined\n\n const selectedTab = createMemo(() => props.tabs.find((tab) => tab.id === props.tab))\n const supplemental = () => selectedTab()?.kind === 'supplemental'\n const selected = createMemo(() => {\n const id = props.selectedId\n return id && !supplemental() ? props.entries.find((entry) => entry.id === id) : undefined\n })\n const groupRows = keyedRows(\n () => props.groups,\n (group) => group.id\n )\n const [wide, setWide] = createSignal(\n typeof window === 'undefined' || window.matchMedia('(min-width: 48rem)').matches\n )\n const updateWide = (event: MediaQueryListEvent) => setWide(event.matches)\n\n createEffect(() => {\n if (typeof window === 'undefined') return\n const query = window.matchMedia('(min-width: 48rem)')\n query.addEventListener('change', updateWide)\n onCleanup(() => query.removeEventListener('change', updateWide))\n })\n\n createEffect(() => {\n const open = props.open\n const selectedId = props.selectedId\n const selectedEntry = selected()\n if (!open) {\n setExpandedGroups(new Set<string>())\n setLastSelectedId(undefined)\n setReturnKey(undefined)\n return\n }\n if (selectedId && selectedEntry) {\n const previous = lastSelectedId()\n setLastSelectedId(selectedId)\n if (selectedId !== previous) {\n window.requestAnimationFrame(() => {\n if (props.open && props.selectedId === selectedId) backButton?.focus()\n })\n }\n return\n }\n const previous = lastSelectedId()\n if (!previous) return\n const key = returnKey()\n setLastSelectedId(undefined)\n setReturnKey(undefined)\n window.requestAnimationFrame(() => {\n if (!props.open || props.selectedId) return\n const row = key ? rowRefs.get(key) : undefined\n if (row?.isConnected) row.focus()\n else searchInput?.focus()\n })\n })\n\n const registerRow = (key: string, element: HTMLButtonElement | undefined) => {\n if (element) rowRefs.set(key, element)\n else rowRefs.delete(key)\n }\n const selectEntry = (key: string, value: Value) => {\n setReturnKey(key)\n props.onSelect(value)\n }\n const toggleGroup = (id: string) => {\n setExpandedGroups((current) => {\n const next = new Set(current)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n const previewCount = () => (wide() ? 6 : 3)\n const countLabel = () =>\n props.status === 'loading' ? props.loadingLabel : props.resultLabel(props.resultCount)\n const supplementalContent = () => props.renderSupplementalView?.(props.tab)\n\n return (\n <div class={cn('flex min-h-0 min-w-0 flex-1 flex-col', props.class)}>\n <Show\n when={selected()}\n fallback={\n <Tabs\n class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-0\"\n value={props.tab}\n onChange={(value) => value && props.onTabChange(value)}\n >\n <TabsList aria-label={props.tabsLabel} class=\"ms-auto max-w-full flex-wrap px-4 pt-2\">\n <For each={props.tabs}>\n {(tab) => <TabsTrigger value={tab.id}>{tab.label}</TabsTrigger>}\n </For>\n </TabsList>\n <TabsContent value={props.tab} class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-3\">\n <Show\n when={supplemental()}\n fallback={\n <>\n <Show when={props.installError}>\n {(message) => (\n <p class=\"text-destructive px-4 pt-2 text-sm\" role=\"alert\">\n {message()}\n </p>\n )}\n </Show>\n <div class=\"flex min-w-0 shrink-0 flex-wrap items-center gap-2 px-4 pt-2\">\n {props.filterControl}\n <InputGroup class=\"min-w-0 flex-1 sm:max-w-md\">\n <InputGroupAddon>\n <Search aria-hidden=\"true\" />\n </InputGroupAddon>\n <InputGroupInput\n ref={(element) => (searchInput = element)}\n type=\"search\"\n aria-label={props.searchLabel}\n placeholder={props.searchPlaceholder}\n value={props.query}\n onInput={(event) => props.onQueryChange(event.currentTarget.value)}\n />\n </InputGroup>\n <span class=\"text-muted-foreground ms-auto text-sm\" role=\"status\">\n {countLabel()}\n </span>\n </div>\n <ScrollArea\n role=\"region\"\n aria-label={props.resultsRegionLabel}\n orientation=\"vertical\"\n class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-5 px-4 pb-4\"\n >\n <Show when={props.status === 'error'}>\n <Empty\n class=\"min-h-0 min-w-0 flex-1\"\n role={props.catalogError.role ?? 'alert'}\n >\n <EmptyHeader>\n <EmptyMedia variant=\"icon\">\n <Blocks aria-hidden=\"true\" />\n </EmptyMedia>\n <EmptyTitle>{props.catalogError.title}</EmptyTitle>\n <EmptyDescription>{props.catalogError.description}</EmptyDescription>\n </EmptyHeader>\n <Show when={props.catalogErrorAction}>\n <EmptyContent>{props.catalogErrorAction}</EmptyContent>\n </Show>\n </Empty>\n </Show>\n <Show when={props.status === 'loading'}>\n <CatalogLoadingState label={props.loadingLabel} />\n </Show>\n <Show when={props.status === 'ready'}>\n <Show\n when={props.resultCount > 0}\n fallback={\n <Empty class=\"min-h-0 min-w-0 flex-1\" role=\"status\">\n <EmptyHeader>\n <EmptyMedia variant=\"icon\">\n <Blocks aria-hidden=\"true\" />\n </EmptyMedia>\n <EmptyTitle>{props.emptyState.title}</EmptyTitle>\n <EmptyDescription>{props.emptyState.description}</EmptyDescription>\n </EmptyHeader>\n <Show when={props.emptyStateAction}>\n <EmptyContent>{props.emptyStateAction}</EmptyContent>\n </Show>\n </Empty>\n }\n >\n <div class=\"grid min-w-0 gap-5\">\n <For each={groupRows()}>\n {(row) => (\n <CatalogBrowserGroup\n group={row.item()}\n expanded={expandedGroups().has(row.item().id)}\n previewCount={previewCount()}\n disabled={props.interactionDisabled ?? false}\n installedLabel={props.installedLabel}\n publishedByLabel={props.publishedByLabel}\n showMoreLabel={props.showMoreLabel}\n showLessLabel={props.showLessLabel}\n renderIcon={props.renderIcon}\n onSelect={(entry, key) => selectEntry(key, entry.value)}\n onRef={registerRow}\n onToggle={toggleGroup}\n />\n )}\n </For>\n </div>\n </Show>\n </Show>\n <For each={props.notices ?? []}>\n {(notice) => (\n <p class=\"text-muted-foreground text-sm\" role={notice.role}>\n {notice.message}\n </p>\n )}\n </For>\n </ScrollArea>\n </>\n }\n >\n {supplementalContent()}\n </Show>\n </TabsContent>\n </Tabs>\n }\n >\n {(entry) => (\n <div class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-3\" data-catalog-browser-detail>\n <Button\n ref={(element) => (backButton = element)}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => props.onBack()}\n class=\"mx-4 mt-2 self-start\"\n >\n <ArrowLeft data-icon=\"inline-start\" aria-hidden=\"true\" />\n {props.backLabel}\n </Button>\n <ScrollArea\n role=\"region\"\n aria-label={props.detailRegionLabel}\n orientation=\"vertical\"\n class=\"min-h-0 min-w-0 flex-1 px-4 pb-4\"\n >\n {props.renderDetail(entry().value)}\n </ScrollArea>\n </div>\n )}\n </Show>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,SAAgB6B,eAAsBC,OAAmC;CACvE,MAAM,CAACE,gBAAgBC,qBAAqB/B,6BAAkC,IAAIiC,IAAI,CAAC;CACvF,MAAM,CAACC,WAAWC,gBAAgBnC,aAAqB;CACvD,MAAM,CAACoC,gBAAgBC,qBAAqBrC,aAAqB;CACjE,MAAMsC,0BAAU,IAAIC,IAA+B;CACnD,IAAIE;CACJ,IAAIE;CAEJ,MAAMC,cAAc7C,iBAAiB6B,MAAMiB,KAAKC,MAAMC,QAAQA,IAAIC,OAAOpB,MAAMmB,GAAG,CAAC;CACnF,MAAME,qBAAqBL,YAAY,CAAC,EAAEM,SAAS;CACnD,MAAMC,WAAWpD,iBAAiB;EAChC,MAAMiD,KAAKpB,MAAMwB;EACjB,OAAOJ,MAAM,CAACC,aAAa,IAAIrB,MAAMyB,QAAQP,MAAMQ,UAAUA,MAAMN,OAAOA,EAAE,IAAIO,KAAAA;CAClF,CAAC;CACD,MAAMC,YAAYjD,gBACVqB,MAAM6B,SACXC,UAAUA,MAAMV,EACnB;CACA,MAAM,CAACW,MAAMC,WAAW5D,aACtB,OAAO6D,WAAW,eAAeA,OAAOC,WAAW,oBAAoB,CAAC,CAACC,OAC3E;CACA,MAAMC,cAAcC,UAA+BL,QAAQK,MAAMF,OAAO;CAExEjE,mBAAmB;EACjB,IAAI,OAAO+D,WAAW,aAAa;EACnC,MAAMM,QAAQN,OAAOC,WAAW,oBAAoB;EACpDK,MAAMC,iBAAiB,UAAUJ,UAAU;EAC3C9D,gBAAgBiE,MAAME,oBAAoB,UAAUL,UAAU,CAAC;CACjE,CAAC;CAEDlE,mBAAmB;EACjB,MAAMwE,OAAO1C,MAAM0C;EACnB,MAAMlB,aAAaxB,MAAMwB;EACzB,MAAMmB,gBAAgBpB,SAAS;EAC/B,IAAI,CAACmB,MAAM;GACTvC,kCAAkB,IAAIE,IAAY,CAAC;GACnCI,kBAAkBkB,KAAAA,CAAS;GAC3BpB,aAAaoB,KAAAA,CAAS;GACtB;EACF;EACA,IAAIH,cAAcmB,eAAe;GAC/B,MAAMC,WAAWpC,eAAe;GAChCC,kBAAkBe,UAAU;GAC5B,IAAIA,eAAeoB,UACjBX,OAAOY,4BAA4B;IACjC,IAAI7C,MAAM0C,QAAQ1C,MAAMwB,eAAeA,YAAYT,YAAY+B,MAAM;GACvE,CAAC;GAEH;EACF;EAEA,IAAI,CADatC,eACZoC,GAAU;EACf,MAAMG,MAAMzC,UAAU;EACtBG,kBAAkBkB,KAAAA,CAAS;EAC3BpB,aAAaoB,KAAAA,CAAS;EACtBM,OAAOY,4BAA4B;GACjC,IAAI,CAAC7C,MAAM0C,QAAQ1C,MAAMwB,YAAY;GACrC,MAAMwB,MAAMD,MAAMrC,QAAQuC,IAAIF,GAAG,IAAIpB,KAAAA;GACrC,IAAIqB,KAAKE,aAAaF,IAAIF,MAAM;QAC3BjC,aAAaiC,MAAM;EAC1B,CAAC;CACH,CAAC;CAED,MAAMK,eAAeJ,KAAaK,YAA2C;EAC3E,IAAIA,SAAS1C,QAAQ2C,IAAIN,KAAKK,OAAO;OAChC1C,QAAQ4C,OAAOP,GAAG;CACzB;CACA,MAAMQ,eAAeR,KAAaS,UAAiB;EACjDjD,aAAawC,GAAG;EAChB/C,MAAMyD,SAASD,KAAK;CACtB;CACA,MAAME,eAAetC,OAAe;EAClCjB,mBAAmBwD,YAAY;GAC7B,MAAMC,OAAO,IAAIvD,IAAIsD,OAAO;GAC5B,IAAIC,KAAKC,IAAIzC,EAAE,GAAGwC,KAAKN,OAAOlC,EAAE;QAC3BwC,KAAKE,IAAI1C,EAAE;GAChB,OAAOwC;EACT,CAAC;CACH;CACA,MAAMG,qBAAsBhC,KAAK,IAAI,IAAI;CACzC,MAAMiC,mBACJhE,MAAMiE,WAAW,YAAYjE,MAAMkE,eAAelE,MAAMmE,YAAYnE,MAAMoE,WAAW;CACvF,MAAMC,4BAA4BrE,MAAMsE,yBAAyBtE,MAAMmB,GAAG;CAE1E,cAAA;EAAA,IAAAoD,OAAAC,OAAA;EAAAC,OAAAF,MAAAG,gBAEKnG,MAAI;GAAA,IACHoG,OAAI;IAAA,OAAEpD,SAAS;GAAC;GAAA,IAChBqD,WAAQ;IAAA,OAAAF,gBACLpF,MAAI;KAAA,SAAA;KAAA,IAEHkE,QAAK;MAAA,OAAExD,MAAMmB;KAAG;KAChB0D,WAAWrB,UAAUA,SAASxD,MAAM8E,YAAYtB,KAAK;KAAC,IAAAuB,WAAA;MAAA,OAAA,CAAAL,gBAErDlF,UAAQ;OAAA,KAAA,gBAAA;QAAA,OAAaQ,MAAMiF;OAAS;OAAA,SAAA;OAAA,IAAAF,WAAA;QAAA,OAAAL,gBAClCrG,KAAG;SAAA,IAAC6G,OAAI;UAAA,OAAElF,MAAMiB;SAAI;SAAA8D,WACjB5D,QAAGuD,gBAAMjF,aAAW;UAAA,IAAC+D,QAAK;WAAA,OAAErC,IAAIC;UAAE;UAAA,IAAA2D,WAAA;WAAA,OAAG5D,IAAIgE;UAAK;SAAA,CAAA;QAAe,CAAA;OAAA;MAAA,CAAA,GAAAT,gBAGlEnF,aAAW;OAAA,IAACiE,QAAK;QAAA,OAAExD,MAAMmB;OAAG;OAAA,SAAA;OAAA,IAAA4D,WAAA;QAAA,OAAAL,gBAC1BnG,MAAI;SAAA,IACHoG,OAAI;UAAA,OAAEtD,aAAa;SAAC;SAAA,IACpBuD,WAAQ;UAAA,OAAA;WAAAF,gBAEHnG,MAAI;YAAA,IAACoG,OAAI;aAAA,OAAE3E,MAAMoF;YAAY;YAAAL,WAC1BM,mBAAO;aAAA,IAAAC,QAAAC,QAAA;aAAAd,OAAAa,OAEJD,OAAO;aAAA,OAAAC;YAAA,EAAA,CAAA;WAEX,CAAA;kBAAA;YAAA,IAAAE,QAAAC,QAAA,GAAAC,QAAAF,MAAAG;YAAAlB,OAAAe,aAGAxF,MAAM4F,eAAaF,KAAA;YAAAjB,OAAAe,OAAAd,gBACnBvF,YAAU;aAAA,SAAA;aAAA,IAAA4F,WAAA;cAAA,OAAA,CAAAL,gBACRtF,iBAAe,EAAA,IAAA2F,WAAA;eAAA,OAAAL,gBACbhG,QAAM,EAAA,eAAA,OAAA,CAAA;cAAA,EAAA,CAAA,GAAAgG,gBAERrF,iBAAe;eAAAwG,MACRzC,YAAavC,cAAcuC;eACjC0C,MAAI;eAAA,KAAA,gBAAA;gBAAA,OACQ9F,MAAM+F;eAAW;eAAA,IAC7BC,cAAW;gBAAA,OAAEhG,MAAMiG;eAAiB;eAAA,IACpCzC,QAAK;gBAAA,OAAExD,MAAMuC;eAAK;eAClB2D,UAAU7D,UAAUrC,MAAMmG,cAAc9D,MAAM+D,cAAc5C,KAAK;cAAC,CAAA,CAAA;aAAA;YAAA,CAAA,GAAAkC,KAAA;YAAAjB,OAAAiB,OAInE1B,UAAU;YAAA,OAAAwB;WAAA,EAAA,CAAA;WAAAd,gBAGdhF,YAAU;YACT2G,MAAI;YAAA,KAAA,gBAAA;aAAA,OACQrG,MAAMsG;YAAkB;YACpCC,aAAW;YAAA,SAAA;YAAA,IAAAxB,WAAA;aAAA,OAAA;cAAAL,gBAGVnG,MAAI;eAAA,IAACoG,OAAI;gBAAA,OAAE3E,MAAMiE,WAAW;eAAO;eAAA,IAAAc,WAAA;gBAAA,OAAAL,gBACjC7F,OAAK;iBAAA,SAAA;iBAAA,IAEJwH,OAAI;kBAAA,OAAErG,MAAMwG,aAAaH,QAAQ;iBAAO;iBAAA,IAAAtB,WAAA;kBAAA,OAAA,CAAAL,gBAEvC1F,aAAW,EAAA,IAAA+F,WAAA;mBAAA,OAAA;oBAAAL,gBACTzF,YAAU;qBAACwH,SAAO;qBAAA,IAAA1B,WAAA;sBAAA,OAAAL,gBAChBjG,QAAM,EAAA,eAAA,OAAA,CAAA;qBAAA;oBAAA,CAAA;oBAAAiG,gBAERxF,YAAU,EAAA,IAAA6F,WAAA;qBAAA,OAAE/E,MAAMwG,aAAaE;oBAAK,EAAA,CAAA;oBAAAhC,gBACpC3F,kBAAgB,EAAA,IAAAgG,WAAA;qBAAA,OAAE/E,MAAMwG,aAAaG;oBAAW,EAAA,CAAA;mBAAA;kBAAA,EAAA,CAAA,GAAAjC,gBAElDnG,MAAI;mBAAA,IAACoG,OAAI;oBAAA,OAAE3E,MAAM4G;mBAAkB;mBAAA,IAAA7B,WAAA;oBAAA,OAAAL,gBACjC5F,cAAY,EAAA,IAAAiG,WAAA;qBAAA,OAAE/E,MAAM4G;oBAAkB,EAAA,CAAA;mBAAA;kBAAA,CAAA,CAAA;iBAAA;gBAAA,CAAA;eAAA;cAAA,CAAA;cAAAlC,gBAI5CnG,MAAI;eAAA,IAACoG,OAAI;gBAAA,OAAE3E,MAAMiE,WAAW;eAAS;eAAA,IAAAc,WAAA;gBAAA,OAAAL,gBACnC7E,qBAAmB,EAAA,IAACsF,QAAK;iBAAA,OAAEnF,MAAMkE;gBAAY,EAAA,CAAA;eAAA;cAAA,CAAA;cAAAQ,gBAE/CnG,MAAI;eAAA,IAACoG,OAAI;gBAAA,OAAE3E,MAAMiE,WAAW;eAAO;eAAA,IAAAc,WAAA;gBAAA,OAAAL,gBACjCnG,MAAI;iBAAA,IACHoG,OAAI;kBAAA,OAAE3E,MAAMoE,cAAc;iBAAC;iBAAA,IAC3BQ,WAAQ;kBAAA,OAAAF,gBACL7F,OAAK;mBAAA,SAAA;mBAAgCwH,MAAI;mBAAA,IAAAtB,WAAA;oBAAA,OAAA,CAAAL,gBACvC1F,aAAW,EAAA,IAAA+F,WAAA;qBAAA,OAAA;sBAAAL,gBACTzF,YAAU;uBAACwH,SAAO;uBAAA,IAAA1B,WAAA;wBAAA,OAAAL,gBAChBjG,QAAM,EAAA,eAAA,OAAA,CAAA;uBAAA;sBAAA,CAAA;sBAAAiG,gBAERxF,YAAU,EAAA,IAAA6F,WAAA;uBAAA,OAAE/E,MAAM6G,WAAWH;sBAAK,EAAA,CAAA;sBAAAhC,gBAClC3F,kBAAgB,EAAA,IAAAgG,WAAA;uBAAA,OAAE/E,MAAM6G,WAAWF;sBAAW,EAAA,CAAA;qBAAA;oBAAA,EAAA,CAAA,GAAAjC,gBAEhDnG,MAAI;qBAAA,IAACoG,OAAI;sBAAA,OAAE3E,MAAM8G;qBAAgB;qBAAA,IAAA/B,WAAA;sBAAA,OAAAL,gBAC/B5F,cAAY,EAAA,IAAAiG,WAAA;uBAAA,OAAE/E,MAAM8G;sBAAgB,EAAA,CAAA;qBAAA;oBAAA,CAAA,CAAA;mBAAA;kBAAA,CAAA;iBAAA;iBAAA,IAAA/B,WAAA;kBAAA,IAAAgC,QAAAC,QAAA;kBAAAvC,OAAAsC,OAAArC,gBAMxCrG,KAAG;mBAAA,IAAC6G,OAAI;oBAAA,OAAEtD,UAAU;mBAAC;mBAAAmD,WAClB/B,QAAG0B,gBACF9E,qBAAmB;oBAAA,IAClBkC,QAAK;qBAAA,OAAEkB,IAAIiE,KAAK;oBAAC;oBAAA,IACjBC,WAAQ;qBAAA,OAAEhH,eAAe,CAAC,CAAC2D,IAAIb,IAAIiE,KAAK,CAAC,CAAC7F,EAAE;oBAAC;oBAAA,IAC7C2C,eAAY;qBAAA,OAAEA,aAAa;oBAAC;oBAAA,IAC5BoD,WAAQ;qBAAA,OAAEnH,MAAMoH,uBAAuB;oBAAK;oBAAA,IAC5CC,iBAAc;qBAAA,OAAErH,MAAMqH;oBAAc;oBAAA,IACpCC,mBAAgB;qBAAA,OAAEtH,MAAMsH;oBAAgB;oBAAA,IACxCC,gBAAa;qBAAA,OAAEvH,MAAMuH;oBAAa;oBAAA,IAClCC,gBAAa;qBAAA,OAAExH,MAAMwH;oBAAa;oBAAA,IAClCC,aAAU;qBAAA,OAAEzH,MAAMyH;oBAAU;oBAC5BhE,WAAW/B,OAAOqB,QAAQQ,YAAYR,KAAKrB,MAAM8B,KAAK;oBACtDkE,OAAOvE;oBACPwE,UAAUjE;mBAAW,CAAA;kBAExB,CAAA,CAAA;kBAAA,OAAAqD;iBAAA;gBAAA,CAAA;eAAA;cAAA,CAAA;cAAArC,gBAKRrG,KAAG;eAAA,IAAC6G,OAAI;gBAAA,OAAElF,MAAM4H,WAAW,CAAA;eAAE;eAAA7C,WAC1B8C,kBAAM;gBAAA,IAAAC,QAAAC,QAAA;gBAAAtD,OAAAqD,aAEHD,OAAOxC,OAAO;gBAAA2C,aAAAC,aAAAH,OAAA,QAD8BD,OAAOxB,IAAI,CAAA;gBAAA,OAAAyB;eAAA,EAAA,CAAA;cAG3D,CAAA;aAAA;YAAA;WAAA,CAAA;UAAA;SAAA;SAAA,IAAA/C,WAAA;UAAA,OAMRV,oBAAoB;SAAC;QAAA,CAAA;OAAA;MAAA,CAAA,CAAA;KAAA;IAAA,CAAA;GAAA;GAAAU,WAM5BrD,iBAAK;IAAA,IAAAwG,QAAAC,QAAA;IAAA1D,OAAAyD,OAAAxD,gBAEF9F,QAAM;KAAAiH,MACCzC,YAAarC,aAAaqC;KAChCqD,SAAO;KACP2B,MAAI;KACJC,eAAerI,MAAMsI,OAAO;KAAC,SAAA;KAAA,IAAAvD,WAAA;MAAA,OAAA,CAAAL,gBAG5BlG,WAAS;OAAA,aAAA;OAAA,eAAA;MAAA,CAAA,GAAA+J,WACTvI,MAAMwI,SAAS,CAAA;KAAA;IAAA,CAAA,GAAA,IAAA;IAAA/D,OAAAyD,OAAAxD,gBAEjBhF,YAAU;KACT2G,MAAI;KAAA,KAAA,gBAAA;MAAA,OACQrG,MAAMyI;KAAiB;KACnClC,aAAW;KAAA,SAAA;KAAA,IAAAxB,WAAA;MAAA,OAGV/E,MAAM0I,aAAahH,MAAM,CAAC,CAAC8B,KAAK;KAAC;IAAA,CAAA,GAAA,IAAA;IAAA,OAAA0E;GAAA,EAAA,CAAA;EAGvC,CAAA,CAAA;EAAAF,aAAAW,UAAApE,MArJO5E,GAAG,wCAAwCK,MAAM4I,KAAK,CAAC,CAAA;EAAA,OAAArE;CAAA,EAAA,CAAA;AAyJvE"}
1
+ {"version":3,"file":"catalog-browser.js","names":["createEffect","createMemo","createSignal","For","onCleanup","Show","ArrowLeft","Blocks","Search","keyedRows","Button","Empty","EmptyContent","EmptyDescription","EmptyHeader","EmptyMedia","EmptyTitle","InputGroup","InputGroupAddon","InputGroupInput","Tabs","TabsContent","TabsList","TabsTrigger","ScrollArea","cn","CatalogBrowserGroup","CatalogLoadingState","CatalogBrowserProps","CatalogBrowser","props","Value","expandedGroups","setExpandedGroups","ReadonlySet","Set","returnKey","setReturnKey","lastSelectedId","setLastSelectedId","rowRefs","Map","HTMLButtonElement","searchInput","HTMLInputElement","backButton","selectedTab","tabs","find","tab","id","supplemental","kind","selected","selectedId","entries","entry","undefined","groupRows","groups","group","wide","setWide","window","matchMedia","matches","updateWide","event","MediaQueryListEvent","query","addEventListener","removeEventListener","open","selectedEntry","previous","requestAnimationFrame","focus","key","row","get","isConnected","registerRow","element","set","delete","selectEntry","value","onSelect","toggleGroup","current","next","has","add","previewCount","countLabel","status","loadingLabel","resultLabel","resultCount","supplementalContent","renderSupplementalView","_el$","_tmpl$","_$insert","_$createComponent","when","fallback","onChange","onTabChange","children","aria-label","tabsLabel","each","label","installError","message","_el$5","_tmpl$4","_el$2","_tmpl$2","_el$3","firstChild","filterControl","ref","type","searchLabel","placeholder","searchPlaceholder","onInput","onQueryChange","currentTarget","role","resultsRegionLabel","orientation","catalogError","variant","title","description","catalogErrorAction","emptyState","emptyStateAction","_el$4","_tmpl$3","item","expanded","disabled","interactionDisabled","installedLabel","showMoreLabel","showLessLabel","renderIcon","onRef","onToggle","notices","notice","_el$6","_tmpl$5","_$effect","_$setAttribute","_el$7","_tmpl$6","size","onClick","onBack","_$memo","backLabel","detailRegionLabel","renderDetail","_$className","class","_$createComponent","_$setAttribute","_$memo","_$className"],"sources":["../../../../src/components/composites/catalog-browser/catalog-browser.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, onCleanup, Show } from 'solid-js'\nimport { ArrowLeft, Blocks, Search } from 'lucide-solid'\nimport { keyedRows } from '#lib/keyed-rows'\nimport { Button } from '../../ui/button'\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from '../../ui/empty'\nimport { InputGroup, InputGroupAddon, InputGroupInput } from '../../ui/input-group'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs'\nimport { ScrollArea } from '../../ui/scroll-area'\nimport { cn } from '#lib/utils'\nimport { CatalogBrowserGroup, CatalogLoadingState } from './catalog-browser-group'\nimport type { CatalogBrowserProps } from './catalog-types'\n\nexport function CatalogBrowser<Value>(props: CatalogBrowserProps<Value>) {\n const [expandedGroups, setExpandedGroups] = createSignal<ReadonlySet<string>>(new Set())\n const [returnKey, setReturnKey] = createSignal<string>()\n const [lastSelectedId, setLastSelectedId] = createSignal<string>()\n const rowRefs = new Map<string, HTMLButtonElement>()\n let searchInput: HTMLInputElement | undefined\n let backButton: HTMLButtonElement | undefined\n\n const selectedTab = createMemo(() => props.tabs.find((tab) => tab.id === props.tab))\n const supplemental = () => selectedTab()?.kind === 'supplemental'\n const selected = createMemo(() => {\n const id = props.selectedId\n return id && !supplemental() ? props.entries.find((entry) => entry.id === id) : undefined\n })\n const groupRows = keyedRows(\n () => props.groups,\n (group) => group.id\n )\n const [wide, setWide] = createSignal(\n typeof window === 'undefined' || window.matchMedia('(min-width: 48rem)').matches\n )\n const updateWide = (event: MediaQueryListEvent) => setWide(event.matches)\n\n createEffect(() => {\n if (typeof window === 'undefined') return\n const query = window.matchMedia('(min-width: 48rem)')\n query.addEventListener('change', updateWide)\n onCleanup(() => query.removeEventListener('change', updateWide))\n })\n\n createEffect(() => {\n const open = props.open\n const selectedId = props.selectedId\n const selectedEntry = selected()\n if (!open) {\n setExpandedGroups(new Set<string>())\n setLastSelectedId(undefined)\n setReturnKey(undefined)\n return\n }\n if (selectedId && selectedEntry) {\n const previous = lastSelectedId()\n setLastSelectedId(selectedId)\n if (selectedId !== previous) {\n window.requestAnimationFrame(() => {\n if (props.open && props.selectedId === selectedId) backButton?.focus()\n })\n }\n return\n }\n const previous = lastSelectedId()\n if (!previous) return\n const key = returnKey()\n setLastSelectedId(undefined)\n setReturnKey(undefined)\n window.requestAnimationFrame(() => {\n if (!props.open || props.selectedId) return\n const row = key ? rowRefs.get(key) : undefined\n if (row?.isConnected) row.focus()\n else searchInput?.focus()\n })\n })\n\n const registerRow = (key: string, element: HTMLButtonElement | undefined) => {\n if (element) rowRefs.set(key, element)\n else rowRefs.delete(key)\n }\n const selectEntry = (key: string, value: Value) => {\n setReturnKey(key)\n props.onSelect(value)\n }\n const toggleGroup = (id: string) => {\n setExpandedGroups((current) => {\n const next = new Set(current)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n const previewCount = () => (wide() ? 6 : 3)\n const countLabel = () =>\n props.status === 'loading' ? props.loadingLabel : props.resultLabel(props.resultCount)\n const supplementalContent = () => props.renderSupplementalView?.(props.tab)\n\n return (\n <div class={cn('flex min-h-0 min-w-0 flex-1 flex-col', props.class)}>\n <Show\n when={selected()}\n fallback={\n <Tabs\n class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-0\"\n value={props.tab}\n onChange={(value) => value && props.onTabChange(value)}\n >\n <TabsList aria-label={props.tabsLabel} class=\"ms-auto max-w-full flex-wrap px-4 pt-2\">\n <For each={props.tabs}>\n {(tab) => <TabsTrigger value={tab.id}>{tab.label}</TabsTrigger>}\n </For>\n </TabsList>\n <TabsContent value={props.tab} class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-3\">\n <Show\n when={supplemental()}\n fallback={\n <>\n <Show when={props.installError}>\n {(message) => (\n <p class=\"text-destructive px-4 pt-2 text-sm\" role=\"alert\">\n {message()}\n </p>\n )}\n </Show>\n <div class=\"flex min-w-0 shrink-0 flex-wrap items-center gap-2 px-4 pt-2\">\n {props.filterControl}\n <InputGroup class=\"min-w-0 flex-1 sm:max-w-md\">\n <InputGroupAddon class=\"text-primary\">\n <Search aria-hidden=\"true\" />\n </InputGroupAddon>\n <InputGroupInput\n ref={(element) => (searchInput = element)}\n type=\"search\"\n aria-label={props.searchLabel}\n placeholder={props.searchPlaceholder}\n value={props.query}\n onInput={(event) => props.onQueryChange(event.currentTarget.value)}\n />\n </InputGroup>\n <span\n class=\"text-primary ms-auto text-sm font-medium tabular-nums\"\n role=\"status\"\n >\n {countLabel()}\n </span>\n </div>\n <ScrollArea\n role=\"region\"\n aria-label={props.resultsRegionLabel}\n orientation=\"vertical\"\n class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-5 px-4 pb-4\"\n >\n <Show when={props.status === 'error'}>\n <Empty\n class=\"min-h-0 min-w-0 flex-1\"\n role={props.catalogError.role ?? 'alert'}\n >\n <EmptyHeader>\n <EmptyMedia variant=\"icon\">\n <Blocks aria-hidden=\"true\" />\n </EmptyMedia>\n <EmptyTitle>{props.catalogError.title}</EmptyTitle>\n <EmptyDescription>{props.catalogError.description}</EmptyDescription>\n </EmptyHeader>\n <Show when={props.catalogErrorAction}>\n <EmptyContent>{props.catalogErrorAction}</EmptyContent>\n </Show>\n </Empty>\n </Show>\n <Show when={props.status === 'loading'}>\n <CatalogLoadingState label={props.loadingLabel} />\n </Show>\n <Show when={props.status === 'ready'}>\n <Show\n when={props.resultCount > 0}\n fallback={\n <Empty class=\"min-h-0 min-w-0 flex-1\" role=\"status\">\n <EmptyHeader>\n <EmptyMedia variant=\"icon\">\n <Blocks aria-hidden=\"true\" />\n </EmptyMedia>\n <EmptyTitle>{props.emptyState.title}</EmptyTitle>\n <EmptyDescription>{props.emptyState.description}</EmptyDescription>\n </EmptyHeader>\n <Show when={props.emptyStateAction}>\n <EmptyContent>{props.emptyStateAction}</EmptyContent>\n </Show>\n </Empty>\n }\n >\n <div class=\"grid min-w-0 gap-5\">\n <For each={groupRows()}>\n {(row) => (\n <CatalogBrowserGroup\n group={row.item()}\n expanded={expandedGroups().has(row.item().id)}\n previewCount={previewCount()}\n disabled={props.interactionDisabled ?? false}\n installedLabel={props.installedLabel}\n showMoreLabel={props.showMoreLabel}\n showLessLabel={props.showLessLabel}\n renderIcon={props.renderIcon}\n onSelect={(entry, key) => selectEntry(key, entry.value)}\n onRef={registerRow}\n onToggle={toggleGroup}\n />\n )}\n </For>\n </div>\n </Show>\n </Show>\n <For each={props.notices ?? []}>\n {(notice) => (\n <p class=\"text-muted-foreground text-sm\" role={notice.role}>\n {notice.message}\n </p>\n )}\n </For>\n </ScrollArea>\n </>\n }\n >\n {supplementalContent()}\n </Show>\n </TabsContent>\n </Tabs>\n }\n >\n {(entry) => (\n <div class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-3\" data-catalog-browser-detail>\n <Button\n ref={(element) => (backButton = element)}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => props.onBack()}\n class=\"mx-4 mt-2 self-start\"\n >\n <ArrowLeft data-icon=\"inline-start\" aria-hidden=\"true\" />\n {props.backLabel}\n </Button>\n <ScrollArea\n role=\"region\"\n aria-label={props.detailRegionLabel}\n orientation=\"vertical\"\n class=\"min-h-0 min-w-0 flex-1 px-4 pb-4\"\n >\n {props.renderDetail(entry().value)}\n </ScrollArea>\n </div>\n )}\n </Show>\n </div>\n )\n}\n"],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare function CatalogDetail(props: {
13
13
  status?: JSX.Element;
14
14
  children?: JSX.Element;
15
15
  }): JSX.Element;
16
- /** A shared surface and heading for host-specific fields, permissions, and copy. */
16
+ /** A shared compact row for host-specific fields, permissions, and copy. */
17
17
  export declare function CatalogDetailSection(props: {
18
18
  title: string;
19
19
  children?: JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-detail.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/catalog-browser/catalog-detail.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAIzD,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CACvB,eA6BA;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,eAcpF"}
1
+ {"version":3,"file":"catalog-detail.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/catalog-browser/catalog-detail.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAGzD,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CACvB,eA6BA;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,eAgBpF"}
@@ -1,89 +1,73 @@
1
1
  import { Badge } from "../../ui/badge/badge.js";
2
- import { Card, CardContent, CardFooter, CardHeader } from "../../ui/card/card.js";
3
- import { createComponent, insert, memo, setAttribute, template } from "solid-js/web";
2
+ import { createComponent, insert, setAttribute, template } from "solid-js/web";
4
3
  import { Show, createUniqueId } from "solid-js";
5
4
  //#region src/components/composites/catalog-browser/catalog-detail.tsx
6
5
  var _tmpl$ = /*#__PURE__*/ template(`<span class=shrink-0>`);
7
- var _tmpl$2 = /*#__PURE__*/ template(`<div class="grid min-w-0 gap-1.5"><div class="flex min-w-0 flex-wrap items-center gap-1.5"></div><h2 class="text-base leading-tight font-semibold tracking-tight"></h2><p class="text-muted-foreground text-sm"></p><p class="text-muted-foreground text-xs">`);
8
- var _tmpl$3 = /*#__PURE__*/ template(`<article class="grid min-w-0 gap-4"data-catalog-detail><div class="grid min-w-0 gap-3">`);
9
- var _tmpl$4 = /*#__PURE__*/ template(`<h3 class="text-sm font-semibold tracking-tight">`);
10
- var _tmpl$5 = /*#__PURE__*/ template(`<section class=min-w-0>`);
6
+ var _tmpl$2 = /*#__PURE__*/ template(`<div class="flex shrink-0 flex-col items-end gap-2">`);
7
+ var _tmpl$3 = /*#__PURE__*/ template(`<article class="grid min-w-0 gap-2"data-catalog-detail><div class="flex min-w-0 items-start gap-3 rounded-xl border border-border p-3"><div class="grid min-w-0 flex-1 gap-1"><div class="flex min-w-0 flex-wrap items-center gap-1.5"></div><h2 class="text-base leading-tight font-semibold tracking-tight"></h2><p class="text-muted-foreground text-sm"></p><p class="text-muted-foreground text-xs"></p></div></div><div class="grid min-w-0 gap-2">`);
8
+ var _tmpl$4 = /*#__PURE__*/ template(`<section class="grid min-w-0 gap-1.5 rounded-xl border border-border p-3"><h3 class="text-2xs font-semibold tracking-wider text-muted-foreground uppercase"></h3><div class="grid min-w-0 gap-1.5">`);
11
9
  /** Shared item summary and action frame for catalog-owned detail content. */
12
10
  function CatalogDetail(props) {
13
11
  return (() => {
14
- var _el$ = _tmpl$3(), _el$8 = _el$.firstChild;
15
- insert(_el$, createComponent(Card, { get children() {
16
- return [createComponent(CardHeader, {
17
- "class": "flex-row items-start gap-3",
18
- get children() {
19
- return [createComponent(Show, {
20
- get when() {
21
- return props.leading;
22
- },
23
- get children() {
24
- var _el$2 = _tmpl$();
25
- insert(_el$2, () => props.leading);
26
- return _el$2;
27
- }
28
- }), (() => {
29
- var _el$3 = _tmpl$2(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling;
30
- insert(_el$4, createComponent(Show, {
31
- get when() {
32
- return props.eyebrow;
33
- },
34
- get children() {
35
- return createComponent(Badge, {
36
- variant: "outline",
37
- get children() {
38
- return props.eyebrow;
39
- }
40
- });
41
- }
42
- }), null);
43
- insert(_el$4, createComponent(Badge, {
44
- variant: "secondary",
45
- get children() {
46
- return props.category;
47
- }
48
- }), null);
49
- insert(_el$4, () => props.badges, null);
50
- insert(_el$5, () => props.title);
51
- insert(_el$6, () => props.description);
52
- insert(_el$7, () => props.publishedByLabel(props.publisher));
53
- return _el$3;
54
- })()];
55
- }
56
- }), createComponent(CardFooter, {
57
- "class": "flex-wrap justify-between gap-3",
58
- get children() {
59
- return [memo(() => props.action), memo(() => props.status)];
60
- }
61
- })];
62
- } }), _el$8);
63
- insert(_el$8, () => props.children);
12
+ var _el$ = _tmpl$3(), _el$2 = _el$.firstChild, _el$4 = _el$2.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$0 = _el$2.nextSibling;
13
+ insert(_el$2, createComponent(Show, {
14
+ get when() {
15
+ return props.leading;
16
+ },
17
+ get children() {
18
+ var _el$3 = _tmpl$();
19
+ insert(_el$3, () => props.leading);
20
+ return _el$3;
21
+ }
22
+ }), _el$4);
23
+ insert(_el$5, createComponent(Show, {
24
+ get when() {
25
+ return props.eyebrow;
26
+ },
27
+ get children() {
28
+ return createComponent(Badge, {
29
+ variant: "outline",
30
+ get children() {
31
+ return props.eyebrow;
32
+ }
33
+ });
34
+ }
35
+ }), null);
36
+ insert(_el$5, createComponent(Badge, {
37
+ variant: "secondary",
38
+ get children() {
39
+ return props.category;
40
+ }
41
+ }), null);
42
+ insert(_el$5, () => props.badges, null);
43
+ insert(_el$6, () => props.title);
44
+ insert(_el$7, () => props.description);
45
+ insert(_el$8, () => props.publishedByLabel(props.publisher));
46
+ insert(_el$2, createComponent(Show, {
47
+ get when() {
48
+ return props.action || props.status;
49
+ },
50
+ get children() {
51
+ var _el$9 = _tmpl$2();
52
+ insert(_el$9, () => props.action, null);
53
+ insert(_el$9, () => props.status, null);
54
+ return _el$9;
55
+ }
56
+ }), null);
57
+ insert(_el$0, () => props.children);
64
58
  return _el$;
65
59
  })();
66
60
  }
67
- /** A shared surface and heading for host-specific fields, permissions, and copy. */
61
+ /** A shared compact row for host-specific fields, permissions, and copy. */
68
62
  function CatalogDetailSection(props) {
69
63
  const headingId = `catalog-detail-section-${createUniqueId()}`;
70
64
  return (() => {
71
- var _el$9 = _tmpl$5();
72
- setAttribute(_el$9, "aria-labelledby", headingId);
73
- insert(_el$9, createComponent(Card, { get children() {
74
- return [createComponent(CardHeader, { get children() {
75
- var _el$0 = _tmpl$4();
76
- setAttribute(_el$0, "id", headingId);
77
- insert(_el$0, () => props.title);
78
- return _el$0;
79
- } }), createComponent(CardContent, {
80
- "class": "grid min-w-0 gap-3",
81
- get children() {
82
- return props.children;
83
- }
84
- })];
85
- } }));
86
- return _el$9;
65
+ var _el$1 = _tmpl$4(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
66
+ setAttribute(_el$1, "aria-labelledby", headingId);
67
+ setAttribute(_el$10, "id", headingId);
68
+ insert(_el$10, () => props.title);
69
+ insert(_el$11, () => props.children);
70
+ return _el$1;
87
71
  })();
88
72
  }
89
73
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-detail.js","names":["createUniqueId","Show","JSX","Badge","Card","CardContent","CardFooter","CardHeader","CatalogDetail","props","title","description","category","publisher","publishedByLabel","leading","Element","eyebrow","badges","action","status","children","_el$","_tmpl$3","_el$8","firstChild","_$insert","_$createComponent","when","_el$2","_tmpl$","_el$3","_tmpl$2","_el$4","_el$5","nextSibling","_el$6","_el$7","variant","_$memo","CatalogDetailSection","headingId","_el$9","_tmpl$5","_$setAttribute","_el$0","_tmpl$4","_$createComponent","_$memo"],"sources":["../../../../src/components/composites/catalog-browser/catalog-detail.tsx"],"sourcesContent":["import { createUniqueId, Show, type JSX } from 'solid-js'\nimport { Badge } from '../../ui/badge'\nimport { Card, CardContent, CardFooter, CardHeader } from '../../ui/card'\n\n/** Shared item summary and action frame for catalog-owned detail content. */\nexport function CatalogDetail(props: {\n title: string\n description: string\n category: string\n publisher: string\n publishedByLabel: (publisher: string) => string\n leading?: JSX.Element\n eyebrow?: string\n badges?: JSX.Element\n action?: JSX.Element\n status?: JSX.Element\n children?: JSX.Element\n}) {\n return (\n <article class=\"grid min-w-0 gap-4\" data-catalog-detail>\n <Card>\n <CardHeader class=\"flex-row items-start gap-3\">\n <Show when={props.leading}>\n <span class=\"shrink-0\">{props.leading}</span>\n </Show>\n <div class=\"grid min-w-0 gap-1.5\">\n <div class=\"flex min-w-0 flex-wrap items-center gap-1.5\">\n <Show when={props.eyebrow}>\n <Badge variant=\"outline\">{props.eyebrow}</Badge>\n </Show>\n <Badge variant=\"secondary\">{props.category}</Badge>\n {props.badges}\n </div>\n <h2 class=\"text-base leading-tight font-semibold tracking-tight\">{props.title}</h2>\n <p class=\"text-muted-foreground text-sm\">{props.description}</p>\n <p class=\"text-muted-foreground text-xs\">{props.publishedByLabel(props.publisher)}</p>\n </div>\n </CardHeader>\n <CardFooter class=\"flex-wrap justify-between gap-3\">\n {props.action}\n {props.status}\n </CardFooter>\n </Card>\n <div class=\"grid min-w-0 gap-3\">{props.children}</div>\n </article>\n )\n}\n\n/** A shared surface and heading for host-specific fields, permissions, and copy. */\nexport function CatalogDetailSection(props: { title: string; children?: JSX.Element }) {\n const headingId = `catalog-detail-section-${createUniqueId()}`\n return (\n <section class=\"min-w-0\" aria-labelledby={headingId}>\n <Card>\n <CardHeader>\n <h3 id={headingId} class=\"text-sm font-semibold tracking-tight\">\n {props.title}\n </h3>\n </CardHeader>\n <CardContent class=\"grid min-w-0 gap-3\">{props.children}</CardContent>\n </Card>\n </section>\n )\n}\n"],"mappings":";;;;;;;;;;;AAKA,SAAgBQ,cAAcC,OAY3B;CACD,cAAA;EAAA,IAAAa,OAAAC,QAAA,GAAAC,QAAAF,KAAAG;EAAAC,OAAAJ,MAAAK,gBAEKvB,MAAI,EAAA,IAAAiB,WAAA;GAAA,OAAA,CAAAM,gBACFpB,YAAU;IAAA,SAAA;IAAA,IAAAc,WAAA;KAAA,OAAA,CAAAM,gBACR1B,MAAI;MAAA,IAAC2B,OAAI;OAAA,OAAEnB,MAAMM;MAAO;MAAA,IAAAM,WAAA;OAAA,IAAAQ,QAAAC,OAAA;OAAAJ,OAAAG,aACCpB,MAAMM,OAAO;OAAA,OAAAc;MAAA;KAAA,CAAA,UAAA;MAAA,IAAAE,QAAAC,QAAA,GAAAC,QAAAF,MAAAN,YAAAS,QAAAD,MAAAE,aAAAC,QAAAF,MAAAC,aAAAE,QAAAD,MAAAD;MAAAT,OAAAO,OAAAN,gBAIlC1B,MAAI;OAAA,IAAC2B,OAAI;QAAA,OAAEnB,MAAMQ;OAAO;OAAA,IAAAI,WAAA;QAAA,OAAAM,gBACtBxB,OAAK;SAACmC,SAAO;SAAA,IAAAjB,WAAA;UAAA,OAAYZ,MAAMQ;SAAO;QAAA,CAAA;OAAA;MAAA,CAAA,GAAA,IAAA;MAAAS,OAAAO,OAAAN,gBAExCxB,OAAK;OAACmC,SAAO;OAAA,IAAAjB,WAAA;QAAA,OAAcZ,MAAMG;OAAQ;MAAA,CAAA,GAAA,IAAA;MAAAc,OAAAO,aACzCxB,MAAMS,QAAM,IAAA;MAAAQ,OAAAQ,aAEmDzB,MAAMC,KAAK;MAAAgB,OAAAU,aACnC3B,MAAME,WAAW;MAAAe,OAAAW,aACjB5B,MAAMK,iBAAiBL,MAAMI,SAAS,CAAC;MAAA,OAAAkB;KAAA,EAAA,CAAA,CAAA;IAAA;GAAA,CAAA,GAAAJ,gBAGpFrB,YAAU;IAAA,SAAA;IAAA,IAAAe,WAAA;KAAA,OAAA,CAAAkB,WACR9B,MAAMU,MAAM,GAAAoB,WACZ9B,MAAMW,MAAM,CAAA;IAAA;GAAA,CAAA,CAAA;EAAA,EAAA,CAAA,GAAAI,KAAA;EAAAE,OAAAF,aAGgBf,MAAMY,QAAQ;EAAA,OAAAC;CAAA,EAAA,CAAA;AAGrD;;AAGA,SAAgBkB,qBAAqB/B,OAAkD;CACrF,MAAMgC,YAAY,0BAA0BzC,eAAe;CAC3D,cAAA;EAAA,IAAA0C,QAAAC,QAAA;EAAAC,aAAAF,OAAA,mBAC4CD,SAAS;EAAAf,OAAAgB,OAAAf,gBAChDvB,MAAI,EAAA,IAAAiB,WAAA;GAAA,OAAA,CAAAM,gBACFpB,YAAU,EAAA,IAAAc,WAAA;IAAA,IAAAwB,QAAAC,QAAA;IAAAF,aAAAC,OAAA,MACDJ,SAAS;IAAAf,OAAAmB,aACdpC,MAAMC,KAAK;IAAA,OAAAmC;GAAA,EAAA,CAAA,GAAAlB,gBAGftB,aAAW;IAAA,SAAA;IAAA,IAAAgB,WAAA;KAAA,OAA6BZ,MAAMY;IAAQ;GAAA,CAAA,CAAA;EAAA,EAAA,CAAA,CAAA;EAAA,OAAAqB;CAAA,EAAA,CAAA;AAI/D"}
1
+ {"version":3,"file":"catalog-detail.js","names":["createUniqueId","Show","JSX","Badge","CatalogDetail","props","title","description","category","publisher","publishedByLabel","leading","Element","eyebrow","badges","action","status","children","_el$","_tmpl$3","_el$2","firstChild","_el$4","_el$5","_el$6","nextSibling","_el$7","_el$8","_el$0","_$insert","_$createComponent","when","_el$3","_tmpl$","variant","_el$9","_tmpl$2","CatalogDetailSection","headingId","_el$1","_tmpl$4","_el$10","_el$11","_$setAttribute","_$createComponent"],"sources":["../../../../src/components/composites/catalog-browser/catalog-detail.tsx"],"sourcesContent":["import { createUniqueId, Show, type JSX } from 'solid-js'\nimport { Badge } from '../../ui/badge'\n\n/** Shared item summary and action frame for catalog-owned detail content. */\nexport function CatalogDetail(props: {\n title: string\n description: string\n category: string\n publisher: string\n publishedByLabel: (publisher: string) => string\n leading?: JSX.Element\n eyebrow?: string\n badges?: JSX.Element\n action?: JSX.Element\n status?: JSX.Element\n children?: JSX.Element\n}) {\n return (\n <article class=\"grid min-w-0 gap-2\" data-catalog-detail>\n <div class=\"flex min-w-0 items-start gap-3 rounded-xl border border-border p-3\">\n <Show when={props.leading}>\n <span class=\"shrink-0\">{props.leading}</span>\n </Show>\n <div class=\"grid min-w-0 flex-1 gap-1\">\n <div class=\"flex min-w-0 flex-wrap items-center gap-1.5\">\n <Show when={props.eyebrow}>\n <Badge variant=\"outline\">{props.eyebrow}</Badge>\n </Show>\n <Badge variant=\"secondary\">{props.category}</Badge>\n {props.badges}\n </div>\n <h2 class=\"text-base leading-tight font-semibold tracking-tight\">{props.title}</h2>\n <p class=\"text-muted-foreground text-sm\">{props.description}</p>\n <p class=\"text-muted-foreground text-xs\">{props.publishedByLabel(props.publisher)}</p>\n </div>\n <Show when={props.action || props.status}>\n <div class=\"flex shrink-0 flex-col items-end gap-2\">\n {props.action}\n {props.status}\n </div>\n </Show>\n </div>\n <div class=\"grid min-w-0 gap-2\">{props.children}</div>\n </article>\n )\n}\n\n/** A shared compact row for host-specific fields, permissions, and copy. */\nexport function CatalogDetailSection(props: { title: string; children?: JSX.Element }) {\n const headingId = `catalog-detail-section-${createUniqueId()}`\n return (\n <section\n class=\"grid min-w-0 gap-1.5 rounded-xl border border-border p-3\"\n aria-labelledby={headingId}\n >\n <h3\n id={headingId}\n class=\"text-2xs font-semibold tracking-wider text-muted-foreground uppercase\"\n >\n {props.title}\n </h3>\n <div class=\"grid min-w-0 gap-1.5\">{props.children}</div>\n </section>\n )\n}\n"],"mappings":";;;;;;;;;AAIA,SAAgBI,cAAcC,OAY3B;CACD,cAAA;EAAA,IAAAa,OAAAC,QAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAD,YAAAG,QAAAD,MAAAE,aAAAC,QAAAF,MAAAC,aAAAE,QAAAD,MAAAD,aAAAG,QAAAR,MAAAK;EAAAI,OAAAT,OAAAU,gBAGO7B,MAAI;GAAA,IAAC8B,OAAI;IAAA,OAAE1B,MAAMM;GAAO;GAAA,IAAAM,WAAA;IAAA,IAAAe,QAAAC,OAAA;IAAAJ,OAAAG,aACC3B,MAAMM,OAAO;IAAA,OAAAqB;GAAA;EAAA,CAAA,GAAAV,KAAA;EAAAO,OAAAN,OAAAO,gBAIlC7B,MAAI;GAAA,IAAC8B,OAAI;IAAA,OAAE1B,MAAMQ;GAAO;GAAA,IAAAI,WAAA;IAAA,OAAAa,gBACtB3B,OAAK;KAAC+B,SAAO;KAAA,IAAAjB,WAAA;MAAA,OAAYZ,MAAMQ;KAAO;IAAA,CAAA;GAAA;EAAA,CAAA,GAAA,IAAA;EAAAgB,OAAAN,OAAAO,gBAExC3B,OAAK;GAAC+B,SAAO;GAAA,IAAAjB,WAAA;IAAA,OAAcZ,MAAMG;GAAQ;EAAA,CAAA,GAAA,IAAA;EAAAqB,OAAAN,aACzClB,MAAMS,QAAM,IAAA;EAAAe,OAAAL,aAEmDnB,MAAMC,KAAK;EAAAuB,OAAAH,aACnCrB,MAAME,WAAW;EAAAsB,OAAAF,aACjBtB,MAAMK,iBAAiBL,MAAMI,SAAS,CAAC;EAAAoB,OAAAT,OAAAU,gBAElF7B,MAAI;GAAA,IAAC8B,OAAI;IAAA,OAAE1B,MAAMU,UAAUV,MAAMW;GAAM;GAAA,IAAAC,WAAA;IAAA,IAAAkB,QAAAC,QAAA;IAAAP,OAAAM,aAEnC9B,MAAMU,QAAM,IAAA;IAAAc,OAAAM,aACZ9B,MAAMW,QAAM,IAAA;IAAA,OAAAmB;GAAA;EAAA,CAAA,GAAA,IAAA;EAAAN,OAAAD,aAIcvB,MAAMY,QAAQ;EAAA,OAAAC;CAAA,EAAA,CAAA;AAGrD;;AAGA,SAAgBmB,qBAAqBhC,OAAkD;CACrF,MAAMiC,YAAY,0BAA0BtC,eAAe;CAC3D,cAAA;EAAA,IAAAuC,QAAAC,QAAA,GAAAC,SAAAF,MAAAlB,YAAAqB,SAAAD,OAAAhB;EAAAkB,aAAAJ,OAAA,mBAGqBD,SAAS;EAAAK,aAAAF,QAAA,MAGpBH,SAAS;EAAAT,OAAAY,cAGZpC,MAAMC,KAAK;EAAAuB,OAAAa,cAEqBrC,MAAMY,QAAQ;EAAA,OAAAsB;CAAA,EAAA,CAAA;AAGvD"}
@@ -67,7 +67,8 @@ export type CatalogBrowserProps<Value> = Readonly<{
67
67
  backLabel: string;
68
68
  detailRegionLabel: string;
69
69
  installedLabel: string;
70
- publishedByLabel: (publisher: string) => string;
70
+ /** Optional legacy label: rows now show the bare publisher as an accent chip. */
71
+ publishedByLabel?: (publisher: string) => string;
71
72
  showMoreLabel: (entries: readonly CatalogBrowserEntry<Value>[], remainingCount: number) => string;
72
73
  showLessLabel: string;
73
74
  /** Temporarily disables catalog controls while a host menu owns interaction. */
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-types.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/catalog-browser/catalog-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-types.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/catalog-browser/catalog-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type HelpShortcut = {
2
+ label: string;
3
+ keys: readonly string[];
4
+ };
5
+ export type HelpLink = {
6
+ label: string;
7
+ description?: string;
8
+ url: string;
9
+ };
10
+ export type HelpCenterProps = {
11
+ appName: string;
12
+ shortcuts: readonly HelpShortcut[];
13
+ links: readonly HelpLink[];
14
+ openExternal?: (url: string) => Promise<void>;
15
+ class?: string;
16
+ };
17
+ /** A shared help page: real keyboard shortcuts and the application's project resources. */
18
+ export declare function HelpCenter(props: HelpCenterProps): import("solid-js").JSX.Element;
19
+ //# sourceMappingURL=help-center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-center.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/help-center/help-center.tsx"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAA;AACrE,MAAM,MAAM,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,SAAS,YAAY,EAAE,CAAA;IAClC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC1B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kCAoFhD"}
@@ -0,0 +1,135 @@
1
+ import { cn } from "../../../lib/utils.js";
2
+ import { Alert, AlertDescription } from "../../ui/alert/alert.js";
3
+ import { Card, CardContent, CardHeader } from "../../ui/card/card.js";
4
+ import { ActionButton } from "../action-button/action-button.js";
5
+ import { Kbd, KbdGroup } from "../../ui/kbd/kbd.js";
6
+ import { className, createComponent, effect, insert, memo, template } from "solid-js/web";
7
+ import { ExternalLink } from "lucide-solid";
8
+ import { For, Show, createSignal, onCleanup } from "solid-js";
9
+ //#region src/components/composites/help-center/help-center.tsx
10
+ var _tmpl$ = /*#__PURE__*/ template(`<h2 class="text-base font-semibold text-primary">Keyboard shortcuts`);
11
+ var _tmpl$2 = /*#__PURE__*/ template(`<ul class="flex flex-col gap-3">`);
12
+ var _tmpl$3 = /*#__PURE__*/ template(`<h2 class="text-base font-semibold text-primary">Project links`);
13
+ var _tmpl$4 = /*#__PURE__*/ template(`<ul class="flex flex-col gap-4">`);
14
+ var _tmpl$5 = /*#__PURE__*/ template(`<div><div class="flex flex-col gap-2"><h1 class="text-xl font-semibold tracking-tight">Help Center</h1><p class="text-sm text-muted-foreground">Keyboard shortcuts and resources for <!>.`);
15
+ var _tmpl$6 = /*#__PURE__*/ template(`<li class="flex flex-wrap items-center justify-between gap-2"><span class=text-sm>`);
16
+ var _tmpl$7 = /*#__PURE__*/ template(`<p class="text-sm text-muted-foreground">`);
17
+ var _tmpl$8 = /*#__PURE__*/ template(`<li class="flex min-w-0 flex-col items-start gap-1">`);
18
+ /** A shared help page: real keyboard shortcuts and the application's project resources. */
19
+ function HelpCenter(props) {
20
+ const [error, setError] = createSignal("");
21
+ let disposed = false;
22
+ onCleanup(() => {
23
+ disposed = true;
24
+ });
25
+ const openLink = async (url) => {
26
+ setError("");
27
+ try {
28
+ await props.openExternal?.(url);
29
+ } catch {
30
+ if (!disposed) setError("Could not open this help resource. Please try again.");
31
+ }
32
+ };
33
+ return (() => {
34
+ var _el$ = _tmpl$5(), _el$4 = _el$.firstChild.firstChild.nextSibling, _el$7 = _el$4.firstChild.nextSibling;
35
+ _el$7.nextSibling;
36
+ insert(_el$4, () => props.appName, _el$7);
37
+ insert(_el$, createComponent(Card, { get children() {
38
+ return [createComponent(CardHeader, { get children() {
39
+ return _tmpl$();
40
+ } }), createComponent(CardContent, { get children() {
41
+ var _el$9 = _tmpl$2();
42
+ insert(_el$9, createComponent(For, {
43
+ get each() {
44
+ return props.shortcuts;
45
+ },
46
+ children: (shortcut) => (() => {
47
+ var _el$10 = _tmpl$6(), _el$11 = _el$10.firstChild;
48
+ insert(_el$11, () => shortcut.label);
49
+ insert(_el$10, createComponent(KbdGroup, { get children() {
50
+ return createComponent(For, {
51
+ get each() {
52
+ return shortcut.keys;
53
+ },
54
+ children: (key) => createComponent(Kbd, { children: key })
55
+ });
56
+ } }), null);
57
+ return _el$10;
58
+ })()
59
+ }));
60
+ return _el$9;
61
+ } })];
62
+ } }), null);
63
+ insert(_el$, createComponent(Card, { get children() {
64
+ return [createComponent(CardHeader, { get children() {
65
+ return _tmpl$3();
66
+ } }), createComponent(CardContent, { get children() {
67
+ var _el$1 = _tmpl$4();
68
+ insert(_el$1, createComponent(For, {
69
+ get each() {
70
+ return props.links;
71
+ },
72
+ children: (link) => (() => {
73
+ var _el$12 = _tmpl$8();
74
+ insert(_el$12, createComponent(ActionButton, {
75
+ as: "a",
76
+ variant: "link",
77
+ size: "sm",
78
+ get href() {
79
+ return link.url;
80
+ },
81
+ target: "_blank",
82
+ rel: "noopener noreferrer",
83
+ get tooltip() {
84
+ return `Open ${link.label} in your browser.`;
85
+ },
86
+ onClick: (event) => {
87
+ if (props.openExternal) {
88
+ event.preventDefault();
89
+ openLink(link.url);
90
+ }
91
+ },
92
+ get children() {
93
+ return [memo(() => link.label), createComponent(ExternalLink, { "aria-hidden": "true" })];
94
+ }
95
+ }), null);
96
+ insert(_el$12, createComponent(Show, {
97
+ get when() {
98
+ return link.description;
99
+ },
100
+ get children() {
101
+ var _el$13 = _tmpl$7();
102
+ insert(_el$13, () => link.description);
103
+ return _el$13;
104
+ }
105
+ }), null);
106
+ return _el$12;
107
+ })()
108
+ }));
109
+ return _el$1;
110
+ } })];
111
+ } }), null);
112
+ insert(_el$, createComponent(Show, {
113
+ get when() {
114
+ return error();
115
+ },
116
+ get children() {
117
+ return createComponent(Alert, {
118
+ variant: "destructive",
119
+ role: "alert",
120
+ get children() {
121
+ return createComponent(AlertDescription, { get children() {
122
+ return error();
123
+ } });
124
+ }
125
+ });
126
+ }
127
+ }), null);
128
+ effect(() => className(_el$, cn("flex min-w-0 flex-col gap-5", props.class)));
129
+ return _el$;
130
+ })();
131
+ }
132
+ //#endregion
133
+ export { HelpCenter };
134
+
135
+ //# sourceMappingURL=help-center.js.map