@pstdio/ui 0.44.0-nightly.20261018030230 → 0.44.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/{MermaidComponent-DIHl8p85.js → MermaidComponent-DhNTaUMt.js} +2 -2
- package/dist/{MermaidComponent-DIHl8p85.js.map → MermaidComponent-DhNTaUMt.js.map} +1 -1
- package/dist/apply-theme-preference-B0vCu8zY.d.ts +26 -0
- package/dist/chat-ui.d.ts +50 -50
- package/dist/chat-ui.js +143 -141
- package/dist/chat-ui.js.map +1 -1
- package/dist/{collection-view-fields-Sa5HO5P7.d.ts → collection-view-fields-tMtZmuhS.d.ts} +0 -2
- package/dist/{collection-view-grouping-aKZhxYfX.js → collection-view-grouping-BKIr4QAb.js} +2 -2
- package/dist/{collection-view-grouping-aKZhxYfX.js.map → collection-view-grouping-BKIr4QAb.js.map} +1 -1
- package/dist/{collection-view-search-mHPkdyxT.js → collection-view-search-D7HFymZW.js} +160 -166
- package/dist/collection-view-search-D7HFymZW.js.map +1 -0
- package/dist/collection-view.d.ts +3 -90
- package/dist/collection-view.js +1 -1
- package/dist/data-table.d.ts +3 -2
- package/dist/data-table.js +98 -88
- package/dist/data-table.js.map +1 -1
- package/dist/{diff-drawer-BMl0zobj.js → diff-drawer-ByJsQg8F.js} +10 -10
- package/dist/diff-drawer-ByJsQg8F.js.map +1 -0
- package/dist/{diff-viewer-C5KXwq7E.js → diff-viewer-Cpiw-1ut.js} +4 -4
- package/dist/{diff-viewer-C5KXwq7E.js.map → diff-viewer-Cpiw-1ut.js.map} +1 -1
- package/dist/diff.js +2 -2
- package/dist/{display-sort-control-0_gG-W9g.js → display-sort-control-BuqijDAl.js} +3 -3
- package/dist/{display-sort-control-0_gG-W9g.js.map → display-sort-control-BuqijDAl.js.map} +1 -1
- package/dist/{edit-mode-data-table-BI_UDPfF.js → edit-mode-data-table-BwNTRik5.js} +147 -136
- package/dist/edit-mode-data-table-BwNTRik5.js.map +1 -0
- package/dist/host-storage-28AkEy1N.js +98 -0
- package/dist/host-storage-28AkEy1N.js.map +1 -0
- package/dist/index-3H4B61XK.d.ts +38 -0
- package/dist/{index-BTABZd25.d.ts → index-DTjRTEez.d.ts} +2 -2
- package/dist/index-kYQwGcym.d.ts +91 -0
- package/dist/index.d.ts +114 -101
- package/dist/index.js +763 -761
- package/dist/index.js.map +1 -1
- package/dist/kanban-renderer.d.ts +2 -2
- package/dist/kanban-renderer.js +509 -494
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/list-row-BDDAVuVd.js +1228 -0
- package/dist/list-row-BDDAVuVd.js.map +1 -0
- package/dist/{markdown-editor-Dx41ftfs.js → markdown-editor-DUBUE7M-.js} +150 -138
- package/dist/markdown-editor-DUBUE7M-.js.map +1 -0
- package/dist/{param-editor-C4IUuO77.js → param-editor-DK1uCOh3.js} +2 -2
- package/dist/{param-editor-C4IUuO77.js.map → param-editor-DK1uCOh3.js.map} +1 -1
- package/dist/{param-editor-field-uBStVJ48.js → param-editor-field-B5z6200g.js} +278 -282
- package/dist/param-editor-field-B5z6200g.js.map +1 -0
- package/dist/param-editor.js +2 -2
- package/dist/{rich-text-Dlv0q1r_.js → rich-text-2c_ra5gK.js} +3 -3
- package/dist/{rich-text-Dlv0q1r_.js.map → rich-text-2c_ra5gK.js.map} +1 -1
- package/dist/rich-text.js +3 -3
- package/dist/terminal.d.ts +28 -0
- package/dist/terminal.js +59 -32
- package/dist/terminal.js.map +1 -1
- package/dist/{theme-DJE3KvWt.js → theme-Chgjys_o.js} +124 -96
- package/dist/theme-Chgjys_o.js.map +1 -0
- package/dist/theme.d.ts +1 -1
- package/dist/theme.js +1 -1
- package/dist/{tree-list-Ces1hpRd.js → tree-list-B8Gtot1M.js} +99 -99
- package/dist/tree-list-B8Gtot1M.js.map +1 -0
- package/dist/{use-virtualizer-CfDHoDer.js → use-virtualizer-CqDYJolY.js} +8 -3
- package/dist/use-virtualizer-CqDYJolY.js.map +1 -0
- package/dist/{workspace-badge-CvQBU6Hs.d.ts → workspace-badge-BMjS8ii4.d.ts} +6 -1
- package/package.json +2 -2
- package/dist/collection-view-search-mHPkdyxT.js.map +0 -1
- package/dist/diff-drawer-BMl0zobj.js.map +0 -1
- package/dist/edit-mode-data-table-BI_UDPfF.js.map +0 -1
- package/dist/host-storage-BIo5azql.js +0 -31
- package/dist/host-storage-BIo5azql.js.map +0 -1
- package/dist/index-Dd6e8lU_.d.ts +0 -61
- package/dist/list-row-F8kBQGB-.js +0 -1232
- package/dist/list-row-F8kBQGB-.js.map +0 -1
- package/dist/markdown-editor-Dx41ftfs.js.map +0 -1
- package/dist/param-editor-field-uBStVJ48.js.map +0 -1
- package/dist/theme-DJE3KvWt.js.map +0 -1
- package/dist/tree-list-Ces1hpRd.js.map +0 -1
- package/dist/use-virtualizer-CfDHoDer.js.map +0 -1
package/dist/diff.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./theme-
|
|
1
|
+
import { t as e } from "./theme-Chgjys_o.js";
|
|
2
2
|
import { r as t } from "./theme-preference-BV4cbJNB.js";
|
|
3
3
|
import { t as n } from "./diff-bubble-DewUd_2w.js";
|
|
4
4
|
import { i as r, r as i, t as a } from "./diff-size-Dydn_Uw5.js";
|
|
@@ -165,7 +165,7 @@ var _ = (e, t) => {
|
|
|
165
165
|
onMount: v
|
|
166
166
|
})
|
|
167
167
|
}), t[9] = s, t[10] = r, t[11] = g, t[12] = n, t[13] = _, t[14] = v, t[15] = y) : y = t[15], y;
|
|
168
|
-
}, j = d(() => import("./diff-drawer-
|
|
168
|
+
}, j = d(() => import("./diff-drawer-ByJsQg8F.js").then((e) => ({ default: e.DiffDrawer }))), M = d(() => import("./diff-viewer-Cpiw-1ut.js").then((e) => ({ default: e.DiffViewer }))), N = (e) => {
|
|
169
169
|
let t = c(2), n;
|
|
170
170
|
return t[0] === e ? n = t[1] : (n = /* @__PURE__ */ l(u, {
|
|
171
171
|
fallback: null,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as e, t } from "./scroll-area-IeoRS73V.js";
|
|
2
2
|
import { t as n } from "./empty-state-3mVV_pV-.js";
|
|
3
|
-
import { C as r, D as i, E as a, M as o, O as s, S as c, b as l, h as u, j as d, k as f, m as p, p as m, u as h, y as g } from "./collection-view-search-
|
|
4
|
-
import { n as _, t as v } from "./collection-view-grouping-
|
|
3
|
+
import { C as r, D as i, E as a, M as o, O as s, S as c, b as l, h as u, j as d, k as f, m as p, p as m, u as h, y as g } from "./collection-view-search-D7HFymZW.js";
|
|
4
|
+
import { n as _, t as v } from "./collection-view-grouping-BKIr4QAb.js";
|
|
5
5
|
import { Badge as y, Button as b, HStack as x, Icon as S, IconButton as ee, Menu as C, Popover as w, Portal as te, Stack as T, Text as E } from "@chakra-ui/react";
|
|
6
6
|
import { c as D } from "react/compiler-runtime";
|
|
7
7
|
import { Fragment as O, jsx as k, jsxs as A } from "react/jsx-runtime";
|
|
@@ -595,4 +595,4 @@ function Ce(e) {
|
|
|
595
595
|
//#endregion
|
|
596
596
|
export { he as a, de as c, X as d, ve as f, $ as i, fe as l, V as m, xe as n, pe as o, _e as p, be as r, me as s, Se as t, Z as u };
|
|
597
597
|
|
|
598
|
-
//# sourceMappingURL=display-sort-control-
|
|
598
|
+
//# sourceMappingURL=display-sort-control-BuqijDAl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-sort-control-0_gG-W9g.js","names":["Badge","Icon","Text","LucideIcon","lucideIcons","Tooltip","CollectionBadgeProps","label","icon","color","tooltip","onClick","toPascalCase","value","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","resolveIcon","name","undefined","pascalName","candidate","component","Record","CollectionBadge","props","$","_c","t0","BadgeIcon","t1","t2","t3","content","t4","t5","t6","display","gap","alignItems","minW","maxW","variant","colorPalette","size","textStyle","sharedProps","const","t7","event","stopPropagation","badge","t8","_c","_Fragment","Tooltip","enumOptionLabel","findEnumOption","getEnumOptions","toTitleCase","AttributeDescriptor","AttributeType","EnumOption","summarizeMultiEnum","values","type","length","map","value","join","AttributeBadge","attributeId","attributeLabel","label","color","icon","options","isEditable","getAttributeBadgeColorPalette","_badge","renderEnumBadge","descriptor","kind","stringValue","editable","id","undefined","option","renderMultiEnumBadge","Array","isArray","filter","entry","summary","firstOption","ViewFilterGroup","createElement","ReactNode","getAttributeStringValues","getAttributeValue","filterRowsByView","emptyGroupKey","groupKey","CollectionBadge","AttributeBadge","renderEnumBadge","renderMultiEnumBadge","getEnumOptions","toTitleCase","AttributeDescriptor","CollectionBadgeItem","KanbanRendererRow","findAttribute","NO_GROUPING","getAttributeBadgeColorPalette","enumOptionLabel","findEnumOption","formatDateValue","value","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","String","formatStringValue","undefined","formatUserValue","isRenderableNode","isRecord","Record","Array","isArray","textValue","trim","isCollectionResource","NonNullable","type","id","normalizeCollectionBadgeItems","flatMap","item","label","icon","color","tooltip","resource","renderBadgeListDisplay","descriptor","row","openResource","getItemAction","display","kind","items","attributes","itemsAttributeId","length","selectedId","selectedItem","find","orderedItems","filter","map","key","onClick","renderAttributeBadge","render","formatted","attributeId","collectDisplayBadges","displayProperties","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","values","Set","add","FilterCategoryView","selectionMode","options","buildFilterCategories","categories","filterable","declared","auto","declaredValues","option","undeclared","has","sort","a","b","localeCompare","numeric","MenuOption","buildGroupingOptions","groupable","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","columnKey","resolveKnownColumnKeys","structureRows","keys","empty","some","conjunction","candidates","title","rules","rule","Button","HStack","Icon","IconButton","Menu","Popover","Portal","Text","Check","ChevronDown","List","Settings2","SquareKanban","Fragment","ReactNode","useEffect","useRef","useState","ScrollArea","Tooltip","MenuOption","resolveSubGroupingOptions","KanbanRendererSettings","DisplayMenuProps","settings","sortControl","groupingOptions","displayPropertyOptions","onViewModeChange","value","onColumnGroupingChange","onRowGroupingChange","onDisplayPropertyToggle","property","SectionLabel","props","$","_c","t0","children","DisplayMenuSelectProps","label","options","onSelect","DisplayMenuSelect","find","option","selectedLabel","hasNoneFirst","t1","Symbol","for","strategy","hideWhenDetached","t2","t3","t4","t5","t6","overscrollBehavior","t7","map","option_0","index","t8","t9","DisplayMenu","triggerRef","contentRef","open","setOpen","closeOnOutsidePointerDown","event","target","Node","current","contains","document","addEventListener","removeEventListener","placement","offset","mainAxis","getAnchorElement","details","viewMode","t10","t11","t12","t13","t14","t15","rowGrouping","t16","columnGrouping","t17","t18","t19","t20","t21","t22","displayProperties","t23","active","includes","t24","t25","_c","Fragment","ScrollArea","Tooltip","Button","Icon","SearchX","X","EmptyState","CollectionViewEmptyStateProps","search","onClearSearch","CollectionViewEmptyState","props","$","_c","t0","Symbol","for","t1","trim","t2","t3","t4","t5","_c","EmptyState","HStack","Stack","Text","ViewSort","AttributeDescriptor","fieldIcon","canSortField","findField","sortDirectionLabel","RuleSelect","DisplaySortControlProps","fields","sorts","onSortsChange","DisplaySortControl","props","$","_c","sort","t0","field","attributeId","undefined","t1","Symbol","for","t2","t3","value","label","t4","filter","map","_temp","t5","direction","choice","slice","t6","entry","id","icon","_c","Tooltip$1","EmptyState$1","getAttributeValue","findEnumOption","enumOptionLabel","findAttribute","getEnumOptions","getAttributeStringValues","findField","fieldIcon","NO_GROUPING","toTitleCase","RuleSelect","sortDirectionLabel","filterRowsByView","canSortField","groupKey","emptyGroupKey","Fragment$1","lucideIcons","toPascalCase","value","part","resolveIcon","name","pascalName","candidate","component","CollectionBadge","$","c","props","t0","icon","BadgeIcon","t1","Icon","t2","label","Text","t3","Fragment","content","t4","color","t5","t6","sharedProps","t7","onClick","tooltip","Badge","event","badge","t8","summarizeMultiEnum","values","type","renderEnumBadge","stringValue","editable","descriptor","option","renderMultiEnumBadge","entry","summary","firstOption","formatDateValue","date","formatNumberValue","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","isCollectionResource","normalizeCollectionBadgeItems","item","id","resource","renderBadgeListDisplay","items","row","selectedId","selectedItem","createElement","getItemAction","openResource","renderAttributeBadge","formatted","collectDisplayBadges","badges","displayProperties","attributes","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","declared","auto","declaredValues","undeclared","a","b","buildGroupingOptions","options","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","resolveKnownColumnKeys","keys","empty","structureRows","filter","candidates","key","rule","SectionLabel","DisplayMenuSelect","selectedLabel","hasNoneFirst","HStack","ChevronDown","Menu","Button","index","option_0","Check","ScrollArea$1","t9","DisplayMenu","triggerRef","useRef","contentRef","open","setOpen","useState","closeOnOutsidePointerDown","target","useEffect","details","Popover","IconButton","Settings2","settings","onViewModeChange","List","t10","t11","t12","SquareKanban","t13","t14","t15","onColumnGroupingChange","onRowGroupingChange","t16","groupingOptions","t17","t18","t19","t20","t21","t22","displayPropertyOptions","onDisplayPropertyToggle","t23","active","t24","Portal","t25","CollectionViewEmptyState","SearchX","search","X","onClearSearch","DisplaySortControl","sort","sorts","fields","onSortsChange","field","_temp","choice","Stack"],"sources":["../src/components/kanban-renderer/collection-badge.tsx","../src/components/kanban-renderer/kanban-renderer-badge-helpers.ts","../src/components/kanban-renderer/kanban-renderer-helpers.ts","../src/components/kanban-renderer/display-menu.tsx","../src/components/collection-view/collection-view-empty-state.tsx","../src/components/collection-view/display-sort-control.tsx"],"sourcesContent":["import { Badge, Icon, Text } from \"@chakra-ui/react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport * as lucideIcons from \"lucide-react\";\nimport { Tooltip } from \"../primitives/tooltip\";\n\nexport interface CollectionBadgeProps {\n label: string;\n icon?: string;\n color?: string;\n tooltip?: string;\n onClick?: () => void;\n}\n\nconst toPascalCase = (value: string) =>\n value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(\"\");\n\nconst resolveIcon = (name: string | undefined) => {\n if (!name) return undefined;\n const pascalName = toPascalCase(name);\n for (const candidate of [name, pascalName, `${pascalName}Icon`]) {\n const component = (lucideIcons as Record<string, unknown>)[candidate];\n if (component && (typeof component === \"function\" || typeof component === \"object\")) {\n return component as LucideIcon;\n }\n }\n return undefined;\n};\n\nexport const CollectionBadge = (props: CollectionBadgeProps) => {\n const { label, icon, color, tooltip, onClick } = props;\n const BadgeIcon = resolveIcon(icon);\n\n const content = (\n <>\n {BadgeIcon ? <Icon as={BadgeIcon} boxSize=\"3.5\" flexShrink={0} aria-hidden=\"true\" /> : null}\n <Text as=\"span\" textStyle=\"label/XS/medium\" minW=\"0\" maxW=\"10rem\" truncate>\n {label}\n </Text>\n </>\n );\n\n const sharedProps = {\n display: \"inline-flex\",\n gap: \"2xs\",\n alignItems: \"center\",\n minW: \"0\",\n maxW: \"100%\",\n variant: color ? \"subtle\" : \"ticket\",\n colorPalette: color ?? \"gray\",\n size: \"sm\",\n textStyle: \"label/XS/medium\",\n \"data-testid\": \"collection-badge\",\n } as const;\n\n const badge = onClick ? (\n <Badge asChild {...sharedProps} cursor=\"pointer\">\n <button\n type=\"button\"\n aria-label={tooltip}\n onClick={(event) => {\n event.stopPropagation();\n onClick();\n }}\n >\n {content}\n </button>\n </Badge>\n ) : (\n <Badge as=\"span\" {...sharedProps} cursor=\"default\">\n {content}\n </Badge>\n );\n return tooltip ? <Tooltip content={tooltip}>{badge}</Tooltip> : badge;\n};\n","import { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, EnumOption } from \"./types\";\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n attributeLabel?: string;\n label: string;\n color?: string;\n icon?: string | null;\n value?: string | string[];\n options?: EnumOption[];\n isEditable?: boolean;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nexport const renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n const editable = descriptor.editable === true;\n if (!stringValue) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: stringValue ?? undefined,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n ...(editable ? { value: stringValue, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n\nexport const renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n const summary = summarizeMultiEnum(values, type);\n const editable = descriptor.editable === true;\n if (!summary) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: values,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: summary,\n color: firstOption?.color,\n icon: firstOption?.icon,\n ...(editable ? { value: values, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n","import type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { createElement, type ReactNode } from \"react\";\nimport { getAttributeStringValues, getAttributeValue } from \"../collection-view/collection-view-fields\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { emptyGroupKey, groupKey } from \"../collection-view/collection-view-grouping\";\nimport { CollectionBadge } from \"./collection-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nimport { renderEnumBadge, renderMultiEnumBadge } from \"./kanban-renderer-badge-helpers\";\nimport { getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, CollectionBadgeItem, KanbanRendererRow } from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\n\nexport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nexport { getAttributeBadgeColorPalette } from \"./kanban-renderer-badge-helpers\";\nexport { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst textValue = (value: unknown) => (typeof value === \"string\" && value.trim() ? value.trim() : undefined);\n\nconst isCollectionResource = (value: unknown): value is NonNullable<CollectionBadgeItem[\"resource\"]> =>\n isRecord(value) && typeof value.type === \"string\" && typeof value.id === \"string\";\n\nconst normalizeCollectionBadgeItems = (value: unknown): CollectionBadgeItem[] => {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((item) => {\n if (!isRecord(item)) return [];\n const id = textValue(item.id);\n if (!id) return [];\n const label = textValue(item.label) ?? id;\n const icon = textValue(item.icon);\n const color = textValue(item.color);\n const tooltip = textValue(item.tooltip);\n const resource = isCollectionResource(item.resource) ? item.resource : undefined;\n return [{ id, label, icon, color, tooltip, ...(resource ? { resource } : {}) }];\n });\n};\n\nexport const renderBadgeListDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: KanbanRendererRow,\n openResource?: (resource: NonNullable<CollectionBadgeItem[\"resource\"]>) => void,\n getItemAction?: (id: string) => (() => void) | undefined,\n): ReactNode => {\n if (descriptor.display?.kind !== \"badge-list\") return null;\n const items = normalizeCollectionBadgeItems(row.attributes[descriptor.display.itemsAttributeId]);\n if (items.length === 0) return null;\n\n const selectedId = typeof value === \"string\" ? value : undefined;\n const selectedItem = items.find((item) => item.id === selectedId) ?? items[0];\n if (!selectedItem) return null;\n\n const orderedItems = [selectedItem, ...items.filter((item) => item.id !== selectedItem.id)];\n return orderedItems.map((item) =>\n createElement(CollectionBadge, {\n key: item.id,\n label: item.label,\n icon: item.icon,\n color: item.color,\n tooltip: item.tooltip,\n onClick:\n getItemAction?.(item.id) ?? (item.resource && openResource ? () => openResource(item.resource!) : undefined),\n }),\n );\n};\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (\n descriptor: AttributeDescriptor,\n row: KanbanRendererRow,\n): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render || descriptor.display) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n\n const value = getAttributeValue(row, descriptor);\n const slot = descriptor.render ? descriptor.render(value, row) : renderBadgeListDisplay(descriptor, value, row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: KanbanRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n selectionMode: \"multiple\";\n options: { value: string; label: string; color?: string; icon?: string | null }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: KanbanRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n selectionMode: \"multiple\",\n options: [\n ...declared.map((option) => ({\n value: option.value,\n label: option.label,\n color: option.color,\n icon: option.icon,\n })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, selectionMode: \"multiple\", options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\n/**\n * Source rows keep the unassigned column visible. Only rules on the grouping field\n * limit which columns the filter can still show.\n */\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filter?: ViewFilterGroup,\n structureRows: KanbanRendererRow[] = [],\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor || descriptor.type.kind !== \"enum\") return undefined;\n const keys = getEnumOptions(descriptor.type).map((option) => option.value);\n const empty = emptyGroupKey(descriptor);\n if (structureRows.some((row) => groupKey(row, descriptor) === empty)) keys.push(empty);\n if (filter?.conjunction !== \"and\") return keys;\n const candidates = keys.map((key) => ({\n id: key,\n title: key,\n attributes: key === empty ? {} : { [columnGrouping]: key },\n }));\n return filterRowsByView(\n candidates,\n { conjunction: \"and\", rules: filter.rules.filter((rule) => rule.attributeId === columnGrouping) },\n [descriptor],\n ).map((row) => row.id);\n};\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, List, Settings2, SquareKanban } from \"lucide-react\";\nimport { Fragment, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: KanbanRendererSettings;\n sortControl?: ReactNode;\n groupingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: KanbanRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text paddingX=\"xs\" paddingTop=\"xs\" paddingBottom=\"2xs\" textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nexport interface DisplayMenuSelectProps {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}\n\n/** A Display menu row: the setting's name on the left, its value and a menu on the right. */\nexport const DisplayMenuSelect = (props: DisplayMenuSelectProps) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Menu.Root positioning={{ strategy: \"fixed\", hideWhenDetached: true }}>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"ghost\" width=\"full\" justifyContent=\"flex-start\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{props.label}</Text>\n <HStack marginLeft=\"auto\" minW=\"0\" gap=\"2xs\" color=\"fg.muted\">\n <Text textStyle=\"label/S/regular\" truncate>\n {selectedLabel}\n </Text>\n </HStack>\n <ChevronDown size={12} />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content overflow=\"hidden\" overflowY=\"hidden\">\n <ScrollArea maxH=\"var(--available-height)\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <HStack width=\"full\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n {option.value === props.value ? <Icon as={Check} marginLeft=\"auto\" boxSize=\"0.875rem\" /> : null}\n </HStack>\n </Menu.Item>\n </Fragment>\n ))}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (!open) return;\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-end\",\n offset: { mainAxis: 8 },\n getAnchorElement: () => triggerRef.current,\n }}\n onOpenChange={(details) => setOpen(details.open)}\n >\n <Tooltip content=\"Display\">\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"2xs\">\n <Icon as={Settings2} />\n </IconButton>\n </Popover.Trigger>\n </Tooltip>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"18.75rem\" padding=\"xs\" gap=\"1px\">\n <SectionLabel>DISPLAY</SectionLabel>\n <HStack borderRadius=\"sm\" bg=\"bg.subtle\" padding=\"2xs\" gap=\"2xs\">\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"list\"}\n onClick={() => onViewModeChange(\"list\")}\n >\n <List />\n List\n </Button>\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"board\"}\n onClick={() => onViewModeChange(\"board\")}\n >\n <SquareKanban />\n Board\n </Button>\n </HStack>\n\n <DisplayMenuSelect\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n <DisplayMenuSelect\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n {props.sortControl}\n <SectionLabel>PROPERTIES</SectionLabel>\n <HStack paddingX=\"xs\" paddingBottom=\"xs\" flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const active = settings.displayProperties.includes(option.value);\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={active}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Button, Icon } from \"@chakra-ui/react\";\nimport { SearchX, X } from \"lucide-react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\nexport interface CollectionViewEmptyStateProps {\n search: string;\n onClearSearch: () => void;\n}\n\n/** Search feedback offers a direct way back to the collection. */\nexport const CollectionViewEmptyState = (props: CollectionViewEmptyStateProps) => {\n const { search, onClearSearch } = props;\n return (\n <EmptyState\n h=\"full\"\n icon={<Icon as={SearchX} />}\n title={`No results for “${search.trim()}”`}\n description=\"Search looks at the titles and properties this view shows.\"\n >\n <Button size=\"2xs\" variant=\"outline\" onClick={onClearSearch}>\n <X /> Clear search\n </Button>\n </EmptyState>\n );\n};\n","import { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { fieldIcon } from \"./collection-view-field-icon\";\nimport { canSortField, findField } from \"./collection-view-fields\";\nimport { sortDirectionLabel } from \"./collection-view-labels\";\nimport { RuleSelect } from \"./rule-select\";\n\nexport interface DisplaySortControlProps {\n fields: AttributeDescriptor[];\n sorts: ViewSort[];\n onSortsChange: (sorts: ViewSort[]) => void;\n}\n\n/** Display settings and table headers edit the same single sort. */\nexport const DisplaySortControl = (props: DisplaySortControlProps) => {\n const { fields, sorts, onSortsChange } = props;\n const sort = sorts[0];\n const field = sort ? findField(fields, sort.attributeId) : undefined;\n return (\n <Stack data-testid=\"display-sort-control\" gap=\"1px\">\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Ordering\n </Text>\n <RuleSelect\n aria-label=\"Ordering\"\n width=\"9rem\"\n value={sort ? `field:${sort.attributeId}` : \"none\"}\n options={[\n { value: \"none\", label: \"None\" },\n ...fields\n .filter(canSortField)\n .map((entry) => ({ value: `field:${entry.id}`, label: entry.label, icon: fieldIcon(entry) })),\n ]}\n onSelect={(choice) =>\n onSortsChange(\n choice === \"none\" ? [] : [{ attributeId: choice.slice(6), direction: sort?.direction ?? \"asc\" }],\n )\n }\n />\n </HStack>\n {sort ? (\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Direction\n </Text>\n <RuleSelect\n aria-label=\"Sort direction\"\n width=\"9rem\"\n value={sort.direction}\n options={[\n { value: \"asc\", label: sortDirectionLabel(field, \"asc\") },\n { value: \"desc\", label: sortDirectionLabel(field, \"desc\") },\n ]}\n onSelect={(direction) => onSortsChange([{ ...sort, direction: direction as ViewSort[\"direction\"] }])}\n />\n </HStack>\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"display-sort-control-BuqijDAl.js","names":["Badge","Icon","Text","LucideIcon","lucideIcons","Tooltip","CollectionBadgeProps","label","icon","color","tooltip","onClick","toPascalCase","value","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","resolveIcon","name","undefined","pascalName","candidate","component","Record","CollectionBadge","props","$","_c","t0","BadgeIcon","t1","t2","t3","content","t4","t5","t6","display","gap","alignItems","minW","maxW","variant","colorPalette","size","textStyle","sharedProps","const","t7","event","stopPropagation","badge","t8","_c","_Fragment","Tooltip","enumOptionLabel","findEnumOption","getEnumOptions","toTitleCase","AttributeDescriptor","AttributeType","EnumOption","summarizeMultiEnum","values","type","length","map","value","join","AttributeBadge","attributeId","attributeLabel","label","color","icon","options","isEditable","getAttributeBadgeColorPalette","_badge","renderEnumBadge","descriptor","kind","stringValue","editable","id","undefined","option","renderMultiEnumBadge","Array","isArray","filter","entry","summary","firstOption","ViewFilterGroup","createElement","ReactNode","getAttributeStringValues","getAttributeValue","filterRowsByView","emptyGroupKey","groupKey","CollectionBadge","AttributeBadge","renderEnumBadge","renderMultiEnumBadge","getEnumOptions","toTitleCase","AttributeDescriptor","CollectionBadgeItem","KanbanRendererRow","findAttribute","NO_GROUPING","getAttributeBadgeColorPalette","enumOptionLabel","findEnumOption","formatDateValue","value","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","String","formatStringValue","undefined","formatUserValue","isRenderableNode","isRecord","Record","Array","isArray","textValue","trim","isCollectionResource","NonNullable","type","id","normalizeCollectionBadgeItems","flatMap","item","label","icon","color","tooltip","resource","renderBadgeListDisplay","descriptor","row","openResource","getItemAction","display","kind","items","attributes","itemsAttributeId","length","selectedId","selectedItem","find","orderedItems","filter","map","key","onClick","renderAttributeBadge","render","formatted","attributeId","collectDisplayBadges","displayProperties","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","values","Set","add","FilterCategoryView","selectionMode","options","buildFilterCategories","categories","filterable","declared","auto","declaredValues","option","undeclared","has","sort","a","b","localeCompare","numeric","MenuOption","buildGroupingOptions","groupable","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","columnKey","resolveKnownColumnKeys","structureRows","keys","empty","some","conjunction","candidates","title","rules","rule","Button","HStack","Icon","IconButton","Menu","Popover","Portal","Text","Check","ChevronDown","List","Settings2","SquareKanban","Fragment","ReactNode","useEffect","useRef","useState","ScrollArea","Tooltip","MenuOption","resolveSubGroupingOptions","KanbanRendererSettings","DisplayMenuProps","settings","sortControl","groupingOptions","displayPropertyOptions","onViewModeChange","value","onColumnGroupingChange","onRowGroupingChange","onDisplayPropertyToggle","property","SectionLabel","props","$","_c","t0","children","DisplayMenuSelectProps","label","options","onSelect","DisplayMenuSelect","find","option","selectedLabel","hasNoneFirst","t1","Symbol","for","strategy","hideWhenDetached","t2","t3","t4","t5","t6","overscrollBehavior","t7","map","option_0","index","t8","t9","DisplayMenu","triggerRef","contentRef","open","setOpen","closeOnOutsidePointerDown","event","target","Node","current","contains","document","addEventListener","removeEventListener","placement","offset","mainAxis","getAnchorElement","details","viewMode","t10","t11","t12","t13","t14","t15","rowGrouping","t16","columnGrouping","t17","t18","t19","t20","t21","t22","displayProperties","t23","active","includes","t24","t25","_c","Fragment","ScrollArea","Tooltip","Button","Icon","SearchX","X","EmptyState","CollectionViewEmptyStateProps","search","onClearSearch","CollectionViewEmptyState","props","$","_c","t0","Symbol","for","t1","trim","t2","t3","t4","t5","_c","EmptyState","HStack","Stack","Text","ViewSort","AttributeDescriptor","fieldIcon","canSortField","findField","sortDirectionLabel","RuleSelect","DisplaySortControlProps","fields","sorts","onSortsChange","DisplaySortControl","props","$","_c","sort","t0","field","attributeId","undefined","t1","Symbol","for","t2","t3","value","label","t4","filter","map","_temp","t5","direction","choice","slice","t6","entry","id","icon","_c","Tooltip$1","EmptyState$1","getAttributeValue","findEnumOption","enumOptionLabel","findAttribute","getEnumOptions","getAttributeStringValues","findField","fieldIcon","NO_GROUPING","toTitleCase","RuleSelect","sortDirectionLabel","filterRowsByView","canSortField","groupKey","emptyGroupKey","Fragment$1","lucideIcons","toPascalCase","value","part","resolveIcon","name","pascalName","candidate","component","CollectionBadge","$","c","props","t0","icon","BadgeIcon","t1","Icon","t2","label","Text","t3","Fragment","content","t4","color","t5","t6","sharedProps","t7","onClick","tooltip","Badge","event","badge","t8","summarizeMultiEnum","values","type","renderEnumBadge","stringValue","editable","descriptor","option","renderMultiEnumBadge","entry","summary","firstOption","formatDateValue","date","formatNumberValue","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","isCollectionResource","normalizeCollectionBadgeItems","item","id","resource","renderBadgeListDisplay","items","row","selectedId","selectedItem","createElement","getItemAction","openResource","renderAttributeBadge","formatted","collectDisplayBadges","badges","displayProperties","attributes","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","declared","auto","declaredValues","undeclared","a","b","buildGroupingOptions","options","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","resolveKnownColumnKeys","keys","empty","structureRows","filter","candidates","key","rule","SectionLabel","DisplayMenuSelect","selectedLabel","hasNoneFirst","HStack","ChevronDown","Menu","Button","index","option_0","Check","ScrollArea$1","t9","DisplayMenu","triggerRef","useRef","contentRef","open","setOpen","useState","closeOnOutsidePointerDown","target","useEffect","details","Popover","IconButton","Settings2","settings","onViewModeChange","List","t10","t11","t12","SquareKanban","t13","t14","t15","onColumnGroupingChange","onRowGroupingChange","t16","groupingOptions","t17","t18","t19","t20","t21","t22","displayPropertyOptions","onDisplayPropertyToggle","t23","active","t24","Portal","t25","CollectionViewEmptyState","SearchX","search","X","onClearSearch","DisplaySortControl","sort","sorts","fields","onSortsChange","field","_temp","choice","Stack"],"sources":["../src/components/kanban-renderer/collection-badge.tsx","../src/components/kanban-renderer/kanban-renderer-badge-helpers.ts","../src/components/kanban-renderer/kanban-renderer-helpers.ts","../src/components/kanban-renderer/display-menu.tsx","../src/components/collection-view/collection-view-empty-state.tsx","../src/components/collection-view/display-sort-control.tsx"],"sourcesContent":["import { Badge, Icon, Text } from \"@chakra-ui/react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport * as lucideIcons from \"lucide-react\";\nimport { Tooltip } from \"../primitives/tooltip\";\n\nexport interface CollectionBadgeProps {\n label: string;\n icon?: string;\n color?: string;\n tooltip?: string;\n onClick?: () => void;\n}\n\nconst toPascalCase = (value: string) =>\n value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(\"\");\n\nconst resolveIcon = (name: string | undefined) => {\n if (!name) return undefined;\n const pascalName = toPascalCase(name);\n for (const candidate of [name, pascalName, `${pascalName}Icon`]) {\n const component = (lucideIcons as Record<string, unknown>)[candidate];\n if (component && (typeof component === \"function\" || typeof component === \"object\")) {\n return component as LucideIcon;\n }\n }\n return undefined;\n};\n\nexport const CollectionBadge = (props: CollectionBadgeProps) => {\n const { label, icon, color, tooltip, onClick } = props;\n const BadgeIcon = resolveIcon(icon);\n\n const content = (\n <>\n {BadgeIcon ? <Icon as={BadgeIcon} boxSize=\"3.5\" flexShrink={0} aria-hidden=\"true\" /> : null}\n <Text as=\"span\" textStyle=\"label/XS/medium\" minW=\"0\" maxW=\"10rem\" truncate>\n {label}\n </Text>\n </>\n );\n\n const sharedProps = {\n display: \"inline-flex\",\n gap: \"2xs\",\n alignItems: \"center\",\n minW: \"0\",\n maxW: \"100%\",\n variant: color ? \"subtle\" : \"ticket\",\n colorPalette: color ?? \"gray\",\n size: \"sm\",\n textStyle: \"label/XS/medium\",\n \"data-testid\": \"collection-badge\",\n } as const;\n\n const badge = onClick ? (\n <Badge asChild {...sharedProps} cursor=\"pointer\">\n <button\n type=\"button\"\n aria-label={tooltip}\n onClick={(event) => {\n event.stopPropagation();\n onClick();\n }}\n >\n {content}\n </button>\n </Badge>\n ) : (\n <Badge as=\"span\" {...sharedProps} cursor=\"default\">\n {content}\n </Badge>\n );\n return tooltip ? <Tooltip content={tooltip}>{badge}</Tooltip> : badge;\n};\n","import { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, EnumOption } from \"./types\";\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n attributeLabel?: string;\n label: string;\n color?: string;\n icon?: string | null;\n value?: string | string[];\n options?: EnumOption[];\n isEditable?: boolean;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nexport const renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n const editable = descriptor.editable === true;\n if (!stringValue) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: stringValue ?? undefined,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n ...(editable ? { value: stringValue, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n\nexport const renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n const summary = summarizeMultiEnum(values, type);\n const editable = descriptor.editable === true;\n if (!summary) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: values,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: summary,\n color: firstOption?.color,\n icon: firstOption?.icon,\n ...(editable ? { value: values, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n","import type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { createElement, type ReactNode } from \"react\";\nimport { getAttributeStringValues, getAttributeValue } from \"../collection-view/collection-view-fields\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { emptyGroupKey, groupKey } from \"../collection-view/collection-view-grouping\";\nimport { CollectionBadge } from \"./collection-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nimport { renderEnumBadge, renderMultiEnumBadge } from \"./kanban-renderer-badge-helpers\";\nimport { getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, CollectionBadgeItem, KanbanRendererRow } from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\n\nexport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nexport { getAttributeBadgeColorPalette } from \"./kanban-renderer-badge-helpers\";\nexport { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst textValue = (value: unknown) => (typeof value === \"string\" && value.trim() ? value.trim() : undefined);\n\nconst isCollectionResource = (value: unknown): value is NonNullable<CollectionBadgeItem[\"resource\"]> =>\n isRecord(value) && typeof value.type === \"string\" && typeof value.id === \"string\";\n\nconst normalizeCollectionBadgeItems = (value: unknown): CollectionBadgeItem[] => {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((item) => {\n if (!isRecord(item)) return [];\n const id = textValue(item.id);\n if (!id) return [];\n const label = textValue(item.label) ?? id;\n const icon = textValue(item.icon);\n const color = textValue(item.color);\n const tooltip = textValue(item.tooltip);\n const resource = isCollectionResource(item.resource) ? item.resource : undefined;\n return [{ id, label, icon, color, tooltip, ...(resource ? { resource } : {}) }];\n });\n};\n\nexport const renderBadgeListDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: KanbanRendererRow,\n openResource?: (resource: NonNullable<CollectionBadgeItem[\"resource\"]>) => void,\n getItemAction?: (id: string) => (() => void) | undefined,\n): ReactNode => {\n if (descriptor.display?.kind !== \"badge-list\") return null;\n const items = normalizeCollectionBadgeItems(row.attributes[descriptor.display.itemsAttributeId]);\n if (items.length === 0) return null;\n\n const selectedId = typeof value === \"string\" ? value : undefined;\n const selectedItem = items.find((item) => item.id === selectedId) ?? items[0];\n if (!selectedItem) return null;\n\n const orderedItems = [selectedItem, ...items.filter((item) => item.id !== selectedItem.id)];\n return orderedItems.map((item) =>\n createElement(CollectionBadge, {\n key: item.id,\n label: item.label,\n icon: item.icon,\n color: item.color,\n tooltip: item.tooltip,\n onClick:\n getItemAction?.(item.id) ?? (item.resource && openResource ? () => openResource(item.resource!) : undefined),\n }),\n );\n};\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (\n descriptor: AttributeDescriptor,\n row: KanbanRendererRow,\n): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render || descriptor.display) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n\n const value = getAttributeValue(row, descriptor);\n const slot = descriptor.render ? descriptor.render(value, row) : renderBadgeListDisplay(descriptor, value, row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: KanbanRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n selectionMode: \"multiple\";\n options: { value: string; label: string; color?: string; icon?: string | null }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: KanbanRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n selectionMode: \"multiple\",\n options: [\n ...declared.map((option) => ({\n value: option.value,\n label: option.label,\n color: option.color,\n icon: option.icon,\n })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, selectionMode: \"multiple\", options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\n/**\n * Source rows keep the unassigned column visible. Only rules on the grouping field\n * limit which columns the filter can still show.\n */\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filter?: ViewFilterGroup,\n structureRows: KanbanRendererRow[] = [],\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor || descriptor.type.kind !== \"enum\") return undefined;\n const keys = getEnumOptions(descriptor.type).map((option) => option.value);\n const empty = emptyGroupKey(descriptor);\n if (structureRows.some((row) => groupKey(row, descriptor) === empty)) keys.push(empty);\n if (filter?.conjunction !== \"and\") return keys;\n const candidates = keys.map((key) => ({\n id: key,\n title: key,\n attributes: key === empty ? {} : { [columnGrouping]: key },\n }));\n return filterRowsByView(\n candidates,\n { conjunction: \"and\", rules: filter.rules.filter((rule) => rule.attributeId === columnGrouping) },\n [descriptor],\n ).map((row) => row.id);\n};\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, List, Settings2, SquareKanban } from \"lucide-react\";\nimport { Fragment, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: KanbanRendererSettings;\n sortControl?: ReactNode;\n groupingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: KanbanRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text paddingX=\"xs\" paddingTop=\"xs\" paddingBottom=\"2xs\" textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nexport interface DisplayMenuSelectProps {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}\n\n/** A Display menu row: the setting's name on the left, its value and a menu on the right. */\nexport const DisplayMenuSelect = (props: DisplayMenuSelectProps) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Menu.Root positioning={{ strategy: \"fixed\", hideWhenDetached: true }}>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"ghost\" width=\"full\" justifyContent=\"flex-start\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{props.label}</Text>\n <HStack marginLeft=\"auto\" minW=\"0\" gap=\"2xs\" color=\"fg.muted\">\n <Text textStyle=\"label/S/regular\" truncate>\n {selectedLabel}\n </Text>\n </HStack>\n <ChevronDown size={12} />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content overflow=\"hidden\" overflowY=\"hidden\">\n <ScrollArea maxH=\"var(--available-height)\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <HStack width=\"full\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n {option.value === props.value ? <Icon as={Check} marginLeft=\"auto\" boxSize=\"0.875rem\" /> : null}\n </HStack>\n </Menu.Item>\n </Fragment>\n ))}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (!open) return;\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-end\",\n offset: { mainAxis: 8 },\n getAnchorElement: () => triggerRef.current,\n }}\n onOpenChange={(details) => setOpen(details.open)}\n >\n <Tooltip content=\"Display\">\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"2xs\">\n <Icon as={Settings2} />\n </IconButton>\n </Popover.Trigger>\n </Tooltip>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"18.75rem\" padding=\"xs\" gap=\"1px\">\n <SectionLabel>DISPLAY</SectionLabel>\n <HStack borderRadius=\"sm\" bg=\"bg.subtle\" padding=\"2xs\" gap=\"2xs\">\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"list\"}\n onClick={() => onViewModeChange(\"list\")}\n >\n <List />\n List\n </Button>\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"board\"}\n onClick={() => onViewModeChange(\"board\")}\n >\n <SquareKanban />\n Board\n </Button>\n </HStack>\n\n <DisplayMenuSelect\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n <DisplayMenuSelect\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n {props.sortControl}\n <SectionLabel>PROPERTIES</SectionLabel>\n <HStack paddingX=\"xs\" paddingBottom=\"xs\" flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const active = settings.displayProperties.includes(option.value);\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={active}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Button, Icon } from \"@chakra-ui/react\";\nimport { SearchX, X } from \"lucide-react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\nexport interface CollectionViewEmptyStateProps {\n search: string;\n onClearSearch: () => void;\n}\n\n/** Search feedback offers a direct way back to the collection. */\nexport const CollectionViewEmptyState = (props: CollectionViewEmptyStateProps) => {\n const { search, onClearSearch } = props;\n return (\n <EmptyState\n h=\"full\"\n icon={<Icon as={SearchX} />}\n title={`No results for “${search.trim()}”`}\n description=\"Search looks at the titles and properties this view shows.\"\n >\n <Button size=\"2xs\" variant=\"outline\" onClick={onClearSearch}>\n <X /> Clear search\n </Button>\n </EmptyState>\n );\n};\n","import { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { fieldIcon } from \"./collection-view-field-icon\";\nimport { canSortField, findField } from \"./collection-view-fields\";\nimport { sortDirectionLabel } from \"./collection-view-labels\";\nimport { RuleSelect } from \"./rule-select\";\n\nexport interface DisplaySortControlProps {\n fields: AttributeDescriptor[];\n sorts: ViewSort[];\n onSortsChange: (sorts: ViewSort[]) => void;\n}\n\n/** Display settings and table headers edit the same single sort. */\nexport const DisplaySortControl = (props: DisplaySortControlProps) => {\n const { fields, sorts, onSortsChange } = props;\n const sort = sorts[0];\n const field = sort ? findField(fields, sort.attributeId) : undefined;\n return (\n <Stack data-testid=\"display-sort-control\" gap=\"1px\">\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Ordering\n </Text>\n <RuleSelect\n aria-label=\"Ordering\"\n width=\"9rem\"\n value={sort ? `field:${sort.attributeId}` : \"none\"}\n options={[\n { value: \"none\", label: \"None\" },\n ...fields\n .filter(canSortField)\n .map((entry) => ({ value: `field:${entry.id}`, label: entry.label, icon: fieldIcon(entry) })),\n ]}\n onSelect={(choice) =>\n onSortsChange(\n choice === \"none\" ? [] : [{ attributeId: choice.slice(6), direction: sort?.direction ?? \"asc\" }],\n )\n }\n />\n </HStack>\n {sort ? (\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Direction\n </Text>\n <RuleSelect\n aria-label=\"Sort direction\"\n width=\"9rem\"\n value={sort.direction}\n options={[\n { value: \"asc\", label: sortDirectionLabel(field, \"asc\") },\n { value: \"desc\", label: sortDirectionLabel(field, \"desc\") },\n ]}\n onSelect={(direction) => onSortsChange([{ ...sort, direction: direction as ViewSort[\"direction\"] }])}\n />\n </HStack>\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}
|