@pstdio/ui 0.19.0 → 0.20.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-BPiVFNYK.js → MermaidComponent-AmAjWLPm.js} +3 -3
- package/dist/{MermaidComponent-BPiVFNYK.js.map → MermaidComponent-AmAjWLPm.js.map} +1 -1
- package/dist/browser-storage-DPtOQJx0.js +127 -0
- package/dist/browser-storage-DPtOQJx0.js.map +1 -0
- package/dist/chat-ui.js +19 -20
- package/dist/chat-ui.js.map +1 -1
- package/dist/components/data-table/data-table-header.d.ts +3 -1
- package/dist/components/data-table/edit-mode-data-table-body.d.ts +29 -0
- package/dist/components/data-table/edit-mode-data-table-cell.d.ts +15 -0
- package/dist/components/data-table/edit-mode-data-table-editors.d.ts +19 -0
- package/dist/components/data-table/edit-mode-data-table-header.d.ts +23 -0
- package/dist/components/data-table/edit-mode-data-table-selection.d.ts +12 -0
- package/dist/components/data-table/edit-mode-data-table.d.ts +2 -0
- package/dist/components/data-table/edit-mode-story.d.ts +5 -0
- package/dist/components/data-table/index.d.ts +1 -1
- package/dist/components/data-table/pagination-footer.d.ts +8 -5
- package/dist/components/data-table/types.d.ts +24 -0
- package/dist/components/rich-text/index.d.ts +2 -0
- package/dist/components/rich-text/markdown-editor/markdown-editor.d.ts +7 -0
- package/dist/components/rich-text/markdown-editor/markdown-table.story-fixture.d.ts +3 -0
- package/dist/components/rich-text/markdown-editor/plugins/MarkdownSectionNavigationPlugin.d.ts +8 -0
- package/dist/components/rich-text/markdown-editor/plugins/MarkdownSlashCommandPlugin.d.ts +1 -0
- package/dist/components/rich-text/markdown-editor/plugins/markdown-history-plugin.d.ts +1 -0
- package/dist/components/rich-text/markdown-editor/plugins/markdown-section-navigation.d.ts +20 -0
- package/dist/components/rich-text/rich-message/rich-message.d.ts +2 -0
- package/dist/components/rich-text/shared/markdown-ast.d.ts +6 -0
- package/dist/components/rich-text/shared/markdown-codec.d.ts +3 -0
- package/dist/components/rich-text/shared/markdown-export.d.ts +2 -0
- package/dist/components/rich-text/shared/markdown-import.d.ts +2 -0
- package/dist/components/rich-text/shared/markdown-inline.d.ts +5 -0
- package/dist/components/rich-text/shared/markdown-table.d.ts +41 -0
- package/dist/components/rich-text/shared/markdown-url-context.d.ts +9 -0
- package/dist/components/rich-text/shared/markdown-url.d.ts +3 -0
- package/dist/components/rich-text/shared/nodes/DataTableNode.d.ts +13 -11
- package/dist/components/rich-text/shared/nodes/MarkdownImageNode.d.ts +35 -0
- package/dist/components/rich-text/shared/nodes/MarkdownLinkNode.d.ts +18 -0
- package/dist/components/rich-text/shared/nodes/RawHtmlNode.d.ts +31 -0
- package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.d.ts +4 -2
- package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.d.ts +1 -1
- package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.d.ts +1 -1
- package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +1 -0
- package/dist/components/rich-text/shared/transformers/markdown-transformers.d.ts +2 -3
- package/dist/data-table.js +723 -923
- package/dist/data-table.js.map +1 -1
- package/dist/diff.js +4 -4
- package/dist/edit-mode-data-table-4GMiDy75.js +775 -0
- package/dist/edit-mode-data-table-4GMiDy75.js.map +1 -0
- package/dist/editor-config-Dyh8n5A2.js +2416 -0
- package/dist/editor-config-Dyh8n5A2.js.map +1 -0
- package/dist/index.js +142 -144
- package/dist/index.js.map +1 -1
- package/dist/{kanban-renderer-toolbar-Bcj_N1qr.js → kanban-renderer-toolbar-BcUZvGyY.js} +359 -361
- package/dist/kanban-renderer-toolbar-BcUZvGyY.js.map +1 -0
- package/dist/kanban-renderer.js +28 -27
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/{lazy-markdown-editor-DwhqQ-NN.js → lazy-markdown-editor-CWSREEhf.js} +2 -2
- package/dist/{lazy-markdown-editor-DwhqQ-NN.js.map → lazy-markdown-editor-CWSREEhf.js.map} +1 -1
- package/dist/{list-row-BtoVJpFs.js → list-row-B8L4TGsh.js} +2 -2
- package/dist/{list-row-BtoVJpFs.js.map → list-row-B8L4TGsh.js.map} +1 -1
- package/dist/{mermaid-renderer-DZo3qj6D.js → mermaid-renderer-H3IhLqnQ.js} +3 -3
- package/dist/{mermaid-renderer-DZo3qj6D.js.map → mermaid-renderer-H3IhLqnQ.js.map} +1 -1
- package/dist/mermaid.js +1 -1
- package/dist/number-input-WUfejtNx.js +343 -0
- package/dist/number-input-WUfejtNx.js.map +1 -0
- package/dist/param-editor-field-C8zRDStn.js +2845 -0
- package/dist/param-editor-field-C8zRDStn.js.map +1 -0
- package/dist/{param-editor-XRjSu6MT.js → param-editor-w3xH-t8A.js} +2 -2
- package/dist/{param-editor-XRjSu6MT.js.map → param-editor-w3xH-t8A.js.map} +1 -1
- package/dist/rich-message-jZ2oPQhU.js +658 -0
- package/dist/rich-message-jZ2oPQhU.js.map +1 -0
- package/dist/rich-text.js +182 -110
- package/dist/rich-text.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/theme/recipes/button.d.ts +11 -0
- package/dist/{theme-7PDdD9OD.js → theme-J8K8KbZi.js} +12 -1
- package/dist/theme-J8K8KbZi.js.map +1 -0
- package/dist/{theme-preference-DOzHx64J.js → theme-preference-DyymrYpR.js} +2 -2
- package/dist/{theme-preference-DOzHx64J.js.map → theme-preference-DyymrYpR.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{tree-list-B2L0cTj2.js → tree-list-CC13pOYi.js} +2 -2
- package/dist/{tree-list-B2L0cTj2.js.map → tree-list-CC13pOYi.js.map} +1 -1
- package/package.json +9 -1
- package/dist/browser-storage-BinyFNJX.js +0 -40
- package/dist/browser-storage-BinyFNJX.js.map +0 -1
- package/dist/checkbox-B2zYVemL.js +0 -70
- package/dist/checkbox-B2zYVemL.js.map +0 -1
- package/dist/components/data-table/editable-cells-story.d.ts +0 -9
- package/dist/kanban-renderer-toolbar-Bcj_N1qr.js.map +0 -1
- package/dist/markdown-DDd2ESoH.js +0 -743
- package/dist/markdown-DDd2ESoH.js.map +0 -1
- package/dist/markdown-editor-CYVkzt8t.js +0 -741
- package/dist/markdown-editor-CYVkzt8t.js.map +0 -1
- package/dist/param-editor-field-B9lEPq8c.js +0 -3028
- package/dist/param-editor-field-B9lEPq8c.js.map +0 -1
- package/dist/resource-badge-CuItchgL.js +0 -98
- package/dist/resource-badge-CuItchgL.js.map +0 -1
- package/dist/rich-message--eRzjWYK.js +0 -730
- package/dist/rich-message--eRzjWYK.js.map +0 -1
- package/dist/scroll-area-BMbg1WcD.js +0 -91
- package/dist/scroll-area-BMbg1WcD.js.map +0 -1
- package/dist/theme-7PDdD9OD.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kanban-renderer-toolbar-BcUZvGyY.js","sources":["../src/components/kanban-renderer/types.ts","../src/components/kanban-renderer/kanban-renderer-enum-helpers.ts","../src/components/kanban-renderer/kanban-renderer-badge-helpers.ts","../src/components/kanban-renderer/kanban-renderer-helpers.ts","../src/components/kanban-renderer/kanban-renderer-views.ts","../src/components/kanban-renderer/use-kanban-renderer-store.ts","../src/components/kanban-renderer/display-menu.tsx","../src/components/kanban-renderer/filter-menu.tsx","../src/components/kanban-renderer/kanban-renderer-grouping.ts","../src/components/kanban-renderer/kanban-renderer-view-bar.tsx","../src/components/kanban-renderer/use-resolved-attributes.ts","../src/components/kanban-renderer/kanban-renderer-toolbar.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport const NO_GROUPING = \"none\";\nexport const MANUAL_ORDERING = \"manual\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\nexport type AttributeDisplayDescriptor = { kind: \"workspace-badge\"; itemsAttributeId: string };\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n display?: AttributeDisplayDescriptor;\n render?: (value: unknown, row: KanbanRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * kanban-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface KanbanRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\nexport interface KanbanRendererOrdering {\n attributeId: string | typeof MANUAL_ORDERING;\n direction: SortDirection;\n}\n\nexport interface KanbanRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n ordering: KanbanRendererOrdering;\n displayProperties: string[];\n}\n\nexport type KanbanRendererFilterState = Record<string, string[]>;\n\nexport interface KanbanRendererSavedView {\n id: string;\n title: string;\n settings: KanbanRendererSettings;\n filters: KanbanRendererFilterState;\n isDefault?: boolean;\n}\n\nexport type KanbanRendererCreateFieldType =\n | \"text\"\n | \"longtext\"\n | \"markdown\"\n | \"number\"\n | \"boolean\"\n | \"select\"\n | \"multi-select\"\n | \"files\";\n\nexport interface KanbanRendererCreateField {\n id: string;\n label: string;\n description?: string;\n placeholder?: string;\n type: KanbanRendererCreateFieldType;\n required?: boolean;\n defaultValue?: unknown;\n options?: EnumOption[];\n /** `files` fields only. */\n multiple?: boolean;\n accept?: string;\n}\n\n/** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */\nexport interface KanbanRendererCreateLabels {\n cancel: string;\n properties: string;\n submitError: string;\n removeFile: string;\n}\n\nexport interface KanbanRendererCreateRowConfig {\n title: string;\n submitLabel: string;\n fields: KanbanRendererCreateField[];\n labels: KanbanRendererCreateLabels;\n}\n\nexport interface KanbanRendererCreateSubmission {\n columnId: string;\n columnAttributeId?: string;\n /** Declared field values, excluding `files` fields — those arrive as `files`. */\n values: Record<string, unknown>;\n /** Every editable attribute the user set, keyed by attribute id. */\n attributeValues: Record<string, unknown>;\n files: File[];\n}\n\nexport const DEFAULT_KANBAN_RENDERER_SETTINGS: KanbanRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n ordering: { attributeId: MANUAL_ORDERING, direction: \"asc\" },\n displayProperties: [],\n};\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for sentinels (\"none\", \"manual\") or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING || id === MANUAL_ORDERING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n","import type { AttributeType, EnumOption } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst dedupeEnumOptions = (options: EnumOption[]) => {\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain option list.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values.\n */\nexport const getEnumOptions = (type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n const options = isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n return dedupeEnumOptions(options);\n};\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\nexport const findEnumOption = (type: AttributeType, value: string) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\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 { createElement, type ReactNode } from \"react\";\nimport { WorkspaceBadge, type WorkspaceBadgeProps } from \"@/components/primitives/workspace-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 {\n AttributeDescriptor,\n KanbanRendererFilterState,\n KanbanRendererRow,\n KanbanRendererSettings,\n} from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, 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\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: KanbanRendererRow, descriptor: AttributeDescriptor) => {\n const raw = row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: KanbanRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\") return [String(value)];\n return [];\n};\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\ninterface WorkspaceBadgeItem {\n id: string;\n name: string;\n shorthand?: string;\n type: WorkspaceBadgeProps[\"workspaceType\"];\n}\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 workspaceTypeFrom = (value: unknown): WorkspaceBadgeProps[\"workspaceType\"] =>\n value === \"current_branch\" ? \"current_branch\" : \"worktree\";\n\nconst normalizeWorkspaceBadgeItems = (value: unknown): WorkspaceBadgeItem[] => {\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 shorthand = textValue(item.shorthand);\n const name = textValue(item.name) ?? shorthand ?? id;\n return [{ id, name, ...(shorthand ? { shorthand } : {}), type: workspaceTypeFrom(item.type) }];\n });\n};\n\nconst renderWorkspaceBadgeDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: KanbanRendererRow,\n): ReactNode => {\n if (descriptor.display?.kind !== \"workspace-badge\") return null;\n const items = normalizeWorkspaceBadgeItems(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 return createElement(WorkspaceBadge, {\n workspaceType: selectedItem.type,\n shorthand: selectedItem.shorthand ?? selectedItem.name,\n hasMultipleWorkspaces: items.length > 1,\n showLeadingSessionIndicator: false,\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\n ? descriptor.render(value, row)\n : renderWorkspaceBadgeDisplay(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 }[];\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) => ({ value: option.value, label: option.label, color: option.color })),\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 buildOrderingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: MANUAL_ORDERING, label: \"Manual\" }];\n options.push({ value: \"title\", label: \"Title\" });\n for (const descriptor of attributes) {\n if (!descriptor.sortable) 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\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filters?: KanbanRendererFilterState,\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const descriptor = findAttribute(attributes, columnGrouping);\n const active = filters?.[columnGrouping];\n if (descriptor && active && active.length > 0) return normalizeFilterValues(descriptor, active);\n if (!descriptor) return undefined;\n if (descriptor.type.kind === \"enum\") return getEnumOptions(descriptor.type).map((option) => option.value);\n return undefined;\n};\n\nexport const normalizeFilterValues = (_descriptor: AttributeDescriptor, values: string[]) => values;\n\nexport const omitFilterCategory = (filters: KanbanRendererFilterState, id: string): KanbanRendererFilterState => {\n const next = { ...filters };\n delete next[id];\n return next;\n};\n\n/**\n * Drop persisted settings entries that reference attribute ids no longer\n * declared by the contribution. Falls back to defaults for missing grouping\n * and ordering attributes so a stale saved view still loads cleanly.\n */\nexport const sanitizeSettings = (\n settings: KanbanRendererSettings,\n attributes: AttributeDescriptor[],\n): KanbanRendererSettings => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const validGroupingId = (id: string) => id === NO_GROUPING || knownIds.has(id);\n const validOrderingId = (id: string) => id === MANUAL_ORDERING || id === \"title\" || knownIds.has(id);\n\n const columnGrouping = validGroupingId(settings.columnGrouping) ? settings.columnGrouping : NO_GROUPING;\n const rowGrouping = validGroupingId(settings.rowGrouping) ? settings.rowGrouping : NO_GROUPING;\n const orderingId = validOrderingId(settings.ordering.attributeId) ? settings.ordering.attributeId : MANUAL_ORDERING;\n const displayProperties = settings.displayProperties.filter(validGroupingId);\n\n return {\n viewMode: settings.viewMode,\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId, direction: settings.ordering.direction },\n displayProperties,\n };\n};\n\nexport const sanitizeFilters = (filters: KanbanRendererFilterState, attributes: AttributeDescriptor[]) => {\n const attributesById = new Map(attributes.map((attribute) => [attribute.id, attribute]));\n const next: KanbanRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n const descriptor = attributesById.get(id);\n if (!descriptor) continue;\n if (!values || values.length === 0) continue;\n next[id] = normalizeFilterValues(descriptor, values);\n }\n return next;\n};\n","import type { KanbanRendererFilterState, KanbanRendererSavedView, KanbanRendererSettings } from \"./types\";\n\ninterface KanbanRendererViewState {\n settings: KanbanRendererSettings;\n filters: KanbanRendererFilterState;\n}\n\nconst cloneSettings = (settings: KanbanRendererSettings): KanbanRendererSettings => ({\n ...settings,\n ordering: { ...settings.ordering },\n displayProperties: [...settings.displayProperties],\n});\n\nconst cloneFilters = (filters: KanbanRendererFilterState): KanbanRendererFilterState =>\n Object.fromEntries(Object.entries(filters).map(([id, values]) => [id, [...values]]));\n\nexport const snapshotKanbanRendererView = (\n id: string,\n title: string,\n state: KanbanRendererViewState,\n isDefault = false,\n): KanbanRendererSavedView => ({\n id,\n title,\n settings: cloneSettings(state.settings),\n filters: cloneFilters(state.filters),\n ...(isDefault ? { isDefault: true } : {}),\n});\n\nexport const applyKanbanRendererView = (view: KanbanRendererSavedView) => ({\n settings: cloneSettings(view.settings),\n filters: cloneFilters(view.filters),\n});\n\nconst comparableSettings = (settings: KanbanRendererSettings) => ({\n viewMode: settings.viewMode,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n ordering: settings.ordering,\n displayProperties: [...settings.displayProperties].sort(),\n});\n\nconst comparableFilters = (filters: KanbanRendererFilterState) =>\n Object.fromEntries(\n Object.entries(filters)\n .filter(([, values]) => values.length > 0)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([id, values]) => [id, [...values].sort()]),\n );\n\nexport const isKanbanRendererViewDirty = (\n view: KanbanRendererSavedView | undefined,\n state: KanbanRendererViewState,\n) => {\n if (!view) return false;\n return (\n JSON.stringify(comparableSettings(view.settings)) !== JSON.stringify(comparableSettings(state.settings)) ||\n JSON.stringify(comparableFilters(view.filters)) !== JSON.stringify(comparableFilters(state.filters))\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport { omitFilterCategory } from \"./kanban-renderer-helpers\";\nimport {\n applyKanbanRendererView,\n isKanbanRendererViewDirty,\n snapshotKanbanRendererView,\n} from \"./kanban-renderer-views\";\nimport {\n DEFAULT_KANBAN_RENDERER_SETTINGS,\n type KanbanRendererFilterState,\n type KanbanRendererSavedView,\n type KanbanRendererSettings,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface KanbanRendererSnapshot {\n settings: KanbanRendererSettings;\n filters: KanbanRendererFilterState;\n expandedGroups: Record<string, boolean>;\n views: KanbanRendererSavedView[];\n activeViewId: string;\n}\n\ninterface KanbanRendererStoreInitialState {\n settings?: Partial<KanbanRendererSettings>;\n filters?: KanbanRendererFilterState;\n expandedGroups?: Record<string, boolean>;\n views?: KanbanRendererSavedView[];\n activeViewId?: string;\n}\n\ninterface KanbanRendererState extends KanbanRendererSnapshot {\n setViewMode: (viewMode: KanbanRendererSettings[\"viewMode\"]) => void;\n setColumnGrouping: (columnGrouping: KanbanRendererSettings[\"columnGrouping\"]) => void;\n setRowGrouping: (rowGrouping: KanbanRendererSettings[\"rowGrouping\"]) => void;\n setOrdering: (ordering: KanbanRendererSettings[\"ordering\"]) => void;\n setOrderingAttributeId: (attributeId: KanbanRendererSettings[\"ordering\"][\"attributeId\"]) => void;\n setDisplayProperties: (displayProperties: string[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: string) => void;\n setFilter: (attributeId: string, values: string[]) => void;\n toggleFilterValue: (attributeId: string, value: string) => void;\n clearFilter: (attributeId: string) => void;\n clearAllFilters: () => void;\n setExpandedGroup: (groupId: string, isExpanded: boolean) => void;\n activateView: (viewId: string) => void;\n createView: (view: { id: string; title: string }) => void;\n saveActiveView: () => void;\n resetActiveView: () => void;\n renameView: (viewId: string, title: string) => void;\n duplicateView: (viewId: string, duplicate: { id: string; title: string }) => void;\n deleteView: (viewId: string) => void;\n setDefaultView: (viewId: string) => void;\n reset: () => void;\n}\n\ninterface CreateKanbanRendererStoreOptions {\n storageKey: string;\n initialState?: KanbanRendererStoreInitialState;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/kanban-renderer\";\n\nconst toStorageName = (storageKey: string) => `${WORKSPACE_STORE_NAMESPACE}/${storageKey}`;\n\nconst DEFAULT_SNAPSHOT: KanbanRendererSnapshot = {\n settings: DEFAULT_KANBAN_RENDERER_SETTINGS,\n filters: {},\n expandedGroups: {},\n views: [],\n activeViewId: \"default\",\n};\n\nconst createSnapshot = (initialState?: KanbanRendererStoreInitialState): KanbanRendererSnapshot => {\n const initialSettings = { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) };\n const initialFilters = initialState?.filters ?? DEFAULT_SNAPSHOT.filters;\n const suppliedViews = initialState?.views ?? [];\n const views =\n suppliedViews.length > 0\n ? suppliedViews\n : [snapshotKanbanRendererView(\"default\", \"All\", { settings: initialSettings, filters: initialFilters }, true)];\n const requestedView = views.find((view) => view.id === initialState?.activeViewId);\n const activeView = requestedView ?? views.find((view) => view.isDefault) ?? views[0]!;\n\n return {\n ...applyKanbanRendererView(activeView),\n expandedGroups: initialState?.expandedGroups ?? DEFAULT_SNAPSHOT.expandedGroups,\n views,\n activeViewId: activeView.id,\n };\n};\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\n// Strip the legacy \"tag:\" prefix used before attributes became first-class.\nconst stripTagPrefix = (id: string) => (id.startsWith(\"tag:\") ? id.slice(4) : id);\n\nconst migrateSettings = (settings: Record<string, unknown>): KanbanRendererSettings => {\n const orderingRaw = settings.ordering as Record<string, unknown> | undefined;\n const orderingId =\n typeof orderingRaw?.attributeId === \"string\"\n ? (orderingRaw.attributeId as string)\n : typeof orderingRaw?.field === \"string\"\n ? stripTagPrefix(orderingRaw.field as string)\n : MANUAL_ORDERING;\n const orderingDirection = (\n orderingRaw?.direction === \"desc\" ? \"desc\" : \"asc\"\n ) as KanbanRendererSettings[\"ordering\"][\"direction\"];\n\n const columnGrouping =\n typeof settings.columnGrouping === \"string\" ? stripTagPrefix(settings.columnGrouping) : NO_GROUPING;\n const rowGrouping = typeof settings.rowGrouping === \"string\" ? stripTagPrefix(settings.rowGrouping) : NO_GROUPING;\n const displayProperties = Array.isArray(settings.displayProperties)\n ? (settings.displayProperties as unknown[])\n .filter((entry): entry is string => typeof entry === \"string\")\n .map(stripTagPrefix)\n : [];\n\n return {\n viewMode: settings.viewMode === \"list\" ? \"list\" : \"board\",\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId === \"manual\" ? MANUAL_ORDERING : orderingId, direction: orderingDirection },\n displayProperties,\n };\n};\n\nconst migrateFilters = (filters: Record<string, unknown>): KanbanRendererFilterState => {\n const next: KanbanRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!Array.isArray(values)) continue;\n const stringValues = values.filter((value): value is string => typeof value === \"string\");\n if (stringValues.length === 0) continue;\n next[stripTagPrefix(id)] = stringValues;\n }\n return next;\n};\n\nexport const createKanbanRendererStore = (options: CreateKanbanRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = createSnapshot(initialState);\n\n return createStore<KanbanRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) => set((state) => ({ ...state, settings: { ...state.settings, viewMode } })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({ ...state, settings: { ...state.settings, columnGrouping } })),\n setRowGrouping: (rowGrouping) => set((state) => ({ ...state, settings: { ...state.settings, rowGrouping } })),\n setOrdering: (ordering) => set((state) => ({ ...state, settings: { ...state.settings, ordering } })),\n setOrderingAttributeId: (attributeId) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering: { ...state.settings.ordering, attributeId } },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({ ...state, settings: { ...state.settings, displayProperties } })),\n toggleSortDirection: () =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n direction: state.settings.ordering.direction === \"asc\" ? \"desc\" : \"asc\",\n },\n },\n })),\n toggleDisplayProperty: (property) =>\n set((state) => {\n const displayProperties = state.settings.displayProperties.includes(property)\n ? state.settings.displayProperties.filter((value) => value !== property)\n : [...state.settings.displayProperties, property];\n return { ...state, settings: { ...state.settings, displayProperties } };\n }),\n setFilter: (attributeId, values) =>\n set((state) => ({ ...state, filters: { ...state.filters, [attributeId]: values } })),\n toggleFilterValue: (attributeId, value) =>\n set((state) => {\n const currentValues = state.filters[attributeId] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, attributeId)\n : { ...state.filters, [attributeId]: nextValues };\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (attributeId) =>\n set((state) => ({ ...state, filters: omitFilterCategory(state.filters, attributeId) })),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n setExpandedGroup: (groupId, isExpanded) =>\n set((state) => ({ ...state, expandedGroups: { ...state.expandedGroups, [groupId]: isExpanded } })),\n activateView: (viewId) =>\n set((state) => {\n const view = state.views.find((entry) => entry.id === viewId);\n return view\n ? { ...state, ...applyKanbanRendererView(view), activeViewId: view.id, expandedGroups: {} }\n : state;\n }),\n createView: (view) =>\n set((state) => {\n const savedView = snapshotKanbanRendererView(view.id, view.title, state);\n return { ...state, views: [...state.views, savedView], activeViewId: savedView.id };\n }),\n saveActiveView: () =>\n set((state) => ({\n ...state,\n views: state.views.map((view) =>\n view.id === state.activeViewId\n ? snapshotKanbanRendererView(view.id, view.title, state, view.isDefault)\n : view,\n ),\n })),\n resetActiveView: () =>\n set((state) => {\n const view = state.views.find((entry) => entry.id === state.activeViewId);\n return view ? { ...state, ...applyKanbanRendererView(view) } : state;\n }),\n renameView: (viewId, title) =>\n set((state) => ({\n ...state,\n views: state.views.map((view) => (view.id === viewId ? { ...view, title } : view)),\n })),\n duplicateView: (viewId, duplicate) =>\n set((state) => {\n const source = state.views.find((view) => view.id === viewId);\n if (!source) return state;\n const copy = snapshotKanbanRendererView(duplicate.id, duplicate.title, source);\n return {\n ...state,\n ...applyKanbanRendererView(copy),\n views: [...state.views, copy],\n activeViewId: copy.id,\n expandedGroups: {},\n };\n }),\n deleteView: (viewId) =>\n set((state) => {\n if (state.views.length === 1) return state;\n const views = state.views.filter((view) => view.id !== viewId);\n if (views.length === state.views.length || state.activeViewId !== viewId) return { ...state, views };\n const activeView = views.find((view) => view.isDefault) ?? views[0]!;\n return {\n ...state,\n ...applyKanbanRendererView(activeView),\n views,\n activeViewId: activeView.id,\n expandedGroups: {},\n };\n }),\n setDefaultView: (viewId) =>\n set((state) => ({\n ...state,\n views: state.views.map((view) => ({ ...view, isDefault: view.id === viewId || undefined })),\n })),\n reset: () => set(snapshot),\n }),\n {\n name: toStorageName(storageKey),\n version: 3,\n migrate: (persisted, version) => {\n if (!persisted || typeof persisted !== \"object\") return persisted as KanbanRendererSnapshot;\n const state = persisted as {\n settings?: Record<string, unknown>;\n filters?: Record<string, unknown>;\n expandedGroups?: Record<string, boolean>;\n views?: KanbanRendererSavedView[];\n activeViewId?: string;\n };\n if (version >= 3) {\n const snapshot = state as unknown as KanbanRendererSnapshot;\n return { ...snapshot, expandedGroups: {} };\n }\n const settings = migrateSettings(state.settings ?? {});\n const filters = migrateFilters(state.filters ?? {});\n return createSnapshot({ settings, filters });\n },\n storage: createJSONStorage(createBrowserStorage),\n partialize: (state) => ({\n settings: state.settings,\n filters: state.filters,\n views: state.views,\n activeViewId: state.activeViewId,\n }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createKanbanRendererStore>>();\n\nexport const getKanbanRendererStore = (storageKey: string, initialState?: KanbanRendererStoreInitialState) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) return existingStore;\n\n const store = createKanbanRendererStore({ storageKey, initialState });\n workspaceStoreRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useKanbanRendererStore = <T>(\n storageKey: string,\n selector: (state: KanbanRendererState) => T,\n initialState?: KanbanRendererStoreInitialState,\n) => {\n const store = getKanbanRendererStore(storageKey, initialState);\n return useStore(store, selector);\n};\n\nexport const isActiveKanbanRendererViewDirty = (\n state: Pick<KanbanRendererState, \"activeViewId\" | \"filters\" | \"settings\" | \"views\">,\n) =>\n isKanbanRendererViewDirty(\n state.views.find((view) => view.id === state.activeViewId),\n state,\n );\n\nexport type { KanbanRendererSnapshot, KanbanRendererState, KanbanRendererStoreInitialState };\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, List, Settings2, SortAsc, SortDesc, SquareKanban } from \"lucide-react\";\nimport { Fragment, type ReactNode, useEffect, useRef, useState } from \"react\";\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 groupingOptions: MenuOption[];\n orderingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: KanbanRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onOrderingAttributeIdChange: (value: string) => void;\n onSortDirectionToggle: () => 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\nconst Dropdown = (props: {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n valueSuffix?: ReactNode;\n onSuffixAction?: () => void;\n}) => {\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>\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 {props.valueSuffix}\n </HStack>\n <ChevronDown size={12} />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\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 {props.onSuffixAction ? (\n <>\n <Menu.Separator />\n <Menu.Item value=\"toggle-direction\" onClick={props.onSuffixAction}>\n Reverse order\n </Menu.Item>\n </>\n ) : null}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n orderingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onOrderingAttributeIdChange,\n onSortDirectionToggle,\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 <Dropdown\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 <Dropdown\n label=\"Ordering\"\n value={settings.ordering.attributeId}\n options={orderingOptions}\n valueSuffix={\n settings.ordering.attributeId === \"manual\" ? undefined : (\n <Icon\n as={settings.ordering.direction === \"asc\" ? SortAsc : SortDesc}\n aria-label={`${settings.ordering.direction === \"asc\" ? \"Ascending\" : \"Descending\"} order`}\n aria-hidden={false}\n role=\"img\"\n boxSize=\"0.875rem\"\n flexShrink={0}\n />\n )\n }\n onSelect={onOrderingAttributeIdChange}\n onSuffixAction={settings.ordering.attributeId === \"manual\" ? undefined : onSortDirectionToggle}\n />\n <Dropdown\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\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 { Badge, Button, HStack, Icon, IconButton, Input, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Filter, Search } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { FilterCategoryView } from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: FilterCategoryView[];\n filters: KanbanRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (attributeId: string, value: string) => void;\n onClearFilter: (attributeId: string) => void;\n onClearAll: () => void;\n}\n\nconst contentProps = {\n p: \"2xs\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"1px\",\n} as const;\n\nconst selectedValues = (filters: KanbanRendererFilterState, categoryId: string) =>\n filters[categoryId]?.filter(Boolean) ?? [];\n\nconst hasActiveFilters = (filters: KanbanRendererFilterState) =>\n Object.values(filters).some((values) => values.length > 0);\n\nconst selectedDescription = (category: FilterCategoryView, values: string[]) => {\n const labels = values.map((value) => category.options.find((option) => option.value === value)?.label ?? value);\n if (labels.length <= 2) return labels.join(\", \");\n return `${labels.slice(0, 2).join(\", \")} +${(labels.length - 2).toString()}`;\n};\n\nconst CategoryLabel = (props: { category: FilterCategoryView; values: string[] }) => {\n const { category, values } = props;\n\n return (\n <HStack minW=\"0\" width=\"full\" gap=\"2xs\">\n <Text textStyle=\"label/S/regular\" truncate>\n {category.label}\n </Text>\n {values.length > 0 ? (\n <Text textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" truncate>\n {selectedDescription(category, values)}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst OptionLabel = (props: { checked: boolean; label: string }) => (\n <HStack minW=\"0\" gap=\"xs\">\n <Checkbox\n checked={props.checked}\n readOnly\n aria-readonly=\"true\"\n inputProps={{ tabIndex: -1, \"aria-hidden\": true }}\n pointerEvents=\"none\"\n size=\"sm\"\n />\n <Text textStyle=\"label/S/regular\" truncate>\n {props.label}\n </Text>\n </HStack>\n);\n\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { categories, filters, countsByCategory, onToggleFilterValue, onClearFilter, onClearAll } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeCategoryId, setActiveCategoryId] = useState(categories[0]?.id ?? \"\");\n const activeCategory = categories.find((category) => category.id === activeCategoryId) ?? categories[0];\n const filtersApplied = hasActiveFilters(filters);\n const normalizedQuery = query.trim().toLocaleLowerCase();\n const visibleCategories = categories.filter((category) =>\n category.label.toLocaleLowerCase().includes(normalizedQuery),\n );\n\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) => {\n setOpen(details.open);\n if (!details.open) setQuery(\"\");\n }}\n >\n <Tooltip content=\"Filter\">\n <Popover.Trigger asChild>\n <IconButton\n ref={triggerRef}\n aria-label=\"Filter rows\"\n aria-pressed={filtersApplied}\n variant={filtersApplied ? \"subtle\" : \"ghost\"}\n size=\"2xs\"\n >\n <Icon as={Filter} />\n </IconButton>\n </Popover.Trigger>\n </Tooltip>\n <Portal>\n <Popover.Positioner>\n <Popover.Content\n ref={contentRef}\n width=\"min(440px, calc(100vw - 32px))\"\n height=\"min(320px, calc(100vh - 32px))\"\n padding=\"0\"\n gap=\"0\"\n overflow=\"hidden\"\n >\n <HStack height=\"2.25rem\" gap=\"xs\" paddingX=\"sm\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\">\n <Icon as={Search} boxSize=\"0.875rem\" color=\"fg.muted\" />\n <Input\n aria-label=\"Filter properties\"\n value={query}\n placeholder=\"Filter by…\"\n variant=\"flushed\"\n border=\"0\"\n height=\"full\"\n padding=\"0\"\n onChange={(event) => setQuery(event.target.value)}\n />\n </HStack>\n <HStack alignItems=\"stretch\" gap=\"0\" flex=\"1\" minH=\"0\">\n <Stack\n data-testid=\"filter-property-column\"\n width=\"11.75rem\"\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderColor=\"border.subtle\"\n gap=\"0\"\n minH=\"0\"\n >\n <HStack height=\"2rem\" paddingX=\"sm\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n PROPERTY\n </Text>\n <Button marginLeft=\"auto\" size=\"2xs\" variant=\"ghost\" onClick={onClearAll}>\n Clear all\n </Button>\n </HStack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n viewportProps={{ overscrollBehavior: \"contain\" }}\n contentProps={contentProps}\n >\n {visibleCategories.map((category) => {\n const values = selectedValues(filters, category.id);\n return (\n <ListRow\n key={category.id}\n id={category.id}\n role=\"button\"\n variant=\"compact\"\n isSelected={activeCategory?.id === category.id}\n label={<CategoryLabel category={category} values={values} />}\n endContent={\n values.length > 0 ? (\n <Badge variant=\"number\" colorPalette=\"gray\">\n {values.length}\n </Badge>\n ) : undefined\n }\n onActivate={() => setActiveCategoryId(category.id)}\n />\n );\n })}\n </ScrollArea>\n </Stack>\n <Stack flex=\"1\" minW=\"0\" minH=\"0\" gap=\"0\">\n {activeCategory ? (\n <>\n <HStack height=\"2rem\" paddingX=\"sm\">\n <Text textStyle=\"label/S/medium\" truncate>\n {activeCategory.label}\n </Text>\n <Button\n marginLeft=\"auto\"\n size=\"2xs\"\n variant=\"ghost\"\n onClick={() => onClearFilter(activeCategory.id)}\n >\n Clear\n </Button>\n </HStack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n viewportProps={{ overscrollBehavior: \"contain\" }}\n contentProps={contentProps}\n >\n {activeCategory.options.map((option) => {\n const checked = selectedValues(filters, activeCategory.id).includes(option.value);\n return (\n <ListRow\n key={option.value}\n id={option.value}\n role=\"checkbox\"\n aria-label={option.label}\n aria-checked={checked}\n variant=\"compact\"\n label={<OptionLabel checked={checked} label={option.label} />}\n endContent={\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n {countsByCategory[activeCategory.id]?.[option.value] ?? 0}\n </Text>\n }\n onActivate={() => onToggleFilterValue(activeCategory.id, option.value)}\n />\n );\n })}\n </ScrollArea>\n </>\n ) : null}\n </Stack>\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\n normalizeFilterValues,\n toTitleCase,\n} from \"./kanban-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n type AttributeType,\n findAttribute,\n type KanbanRendererFilterState,\n type KanbanRendererOrdering,\n type KanbanRendererRow,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n}\n\ninterface KanbanRendererRowGroup {\n key: string;\n label: string;\n rows: KanbanRendererRow[];\n}\n\ninterface KanbanRendererColumnGroup {\n key: string;\n label: string;\n rows: KanbanRendererRow[];\n subgroups: KanbanRendererRowGroup[];\n}\n\nconst UNASSIGNED_LABEL = \"Unassigned\";\n\nconst fallbackLabel = (descriptor: AttributeDescriptor) => `No ${descriptor.label.toLowerCase()}`;\n\nconst labelForGroupKey = (key: string, descriptor: AttributeDescriptor | undefined) => {\n if (!descriptor) return key === NO_GROUPING ? \"All\" : key;\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")\n return enumOptionLabel(descriptor.type, key);\n return key;\n};\n\n// Drops values that are no longer a declared enum option so rows pointing at a\n// removed status collapse into the \"No <attribute>\" column instead of stranding\n// an orphaned column keyed by the deleted value.\nconst resolveGroupingValue = (value: string | undefined, descriptor: AttributeDescriptor) => {\n if (value === undefined) return undefined;\n if (descriptor.type.kind !== \"enum\" && descriptor.type.kind !== \"enum-multi\") return value;\n return getEnumOptions(descriptor.type).some((option) => option.value === value) ? value : undefined;\n};\n\nconst getGroupingKey = (row: KanbanRendererRow, descriptor: AttributeDescriptor | undefined, columnId: string) => {\n if (columnId === NO_GROUPING) return \"all\";\n if (!descriptor) return \"all\";\n // Grouping by an enum-multi is intentionally rejected at the renderer level\n // (the contribution lists it as non-groupable). Defensive fallback: treat\n // each row as a single bucket using its first value, else fallback.\n if (descriptor.type.kind === \"enum-multi\") {\n const [first] = getAttributeStringValues(row, descriptor);\n return resolveGroupingValue(first, descriptor) ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return resolveGroupingValue(value, descriptor) ?? fallbackLabel(descriptor);\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst compareGroupKeyForDescriptor = (a: string, b: string, descriptor: AttributeDescriptor | undefined) => {\n if (descriptor && (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")) {\n const ordered = compareEnumValues(a, b, descriptor.type);\n if (ordered !== 0) return ordered;\n }\n return compareGroupKey(a, b);\n};\n\nconst orderByDirection = (value: number, direction: KanbanRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nconst compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst compareForDescriptor = (a: KanbanRendererRow, b: KanbanRendererRow, descriptor: AttributeDescriptor) => {\n if (descriptor.compare) return descriptor.compare(getAttributeValue(a, descriptor), getAttributeValue(b, descriptor));\n\n const left = getAttributeValue(a, descriptor);\n const right = getAttributeValue(b, descriptor);\n\n if (descriptor.type.kind === \"date\") {\n const leftTime = typeof left === \"string\" ? new Date(left).getTime() : 0;\n const rightTime = typeof right === \"string\" ? new Date(right).getTime() : 0;\n return leftTime - rightTime;\n }\n\n if (descriptor.type.kind === \"number\") {\n const leftNum = typeof left === \"number\" ? left : Number(left ?? 0);\n const rightNum = typeof right === \"number\" ? right : Number(right ?? 0);\n return leftNum - rightNum;\n }\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const [leftValue] = getAttributeStringValues(a, descriptor);\n const [rightValue] = getAttributeStringValues(b, descriptor);\n return compareEnumValues(leftValue, rightValue, descriptor.type);\n }\n\n const leftString = typeof left === \"string\" ? left : String(left ?? \"\");\n const rightString = typeof right === \"string\" ? right : String(right ?? \"\");\n return leftString.localeCompare(rightString, undefined, { numeric: true });\n};\n\nexport const orderRows = (\n rows: KanbanRendererRow[],\n ordering: KanbanRendererOrdering,\n attributes: AttributeDescriptor[],\n) => {\n if (ordering.attributeId === MANUAL_ORDERING) return rows;\n\n if (ordering.attributeId === \"title\") {\n return [...rows].sort((a, b) => orderByDirection(a.title.localeCompare(b.title), ordering.direction));\n }\n\n const descriptor = findAttribute(attributes, ordering.attributeId);\n if (!descriptor) return rows;\n\n return [...rows].sort((a, b) => orderByDirection(compareForDescriptor(a, b, descriptor), ordering.direction));\n};\n\nexport const groupRows = (rows: KanbanRendererRow[], options: GroupingOptions): KanbanRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys } = options;\n const columnDescriptor = findAttribute(attributes, columnGrouping);\n const rowDescriptor = findAttribute(attributes, rowGrouping);\n const groupedByColumn = new Map<string, KanbanRendererRow[]>();\n\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) groupedByColumn.set(key, []);\n }\n\n for (const row of rows) {\n const key = getGroupingKey(row, columnDescriptor, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), row]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) =>\n compareGroupKeyForDescriptor(left, right, columnDescriptor),\n );\n\n return columnEntries.map(([columnKey, columnRows]) => {\n const label = labelForGroupKey(columnKey, columnDescriptor);\n\n if (rowGrouping === NO_GROUPING) {\n return { key: columnKey, label, rows: columnRows, subgroups: [] };\n }\n\n const groupedByRow = new Map<string, KanbanRendererRow[]>();\n for (const row of columnRows) {\n const rowKey = getGroupingKey(row, rowDescriptor, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), row]);\n }\n\n const subgroups = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKeyForDescriptor(left, right, rowDescriptor))\n .map(([rowKey, rowRows]) => ({\n key: rowKey,\n label: labelForGroupKey(rowKey, rowDescriptor) || toTitleCase(rowKey || UNASSIGNED_LABEL),\n rows: rowRows,\n }));\n\n return { key: columnKey, label, rows: columnRows, subgroups };\n });\n};\n\nconst matchesFilter = (row: KanbanRendererRow, descriptor: AttributeDescriptor, values: string[]) => {\n const rowValues = getAttributeStringValues(row, descriptor);\n const normalizedValues = normalizeFilterValues(descriptor, values);\n return rowValues.some((value) => normalizedValues.includes(value));\n};\n\nexport const filterRows = (\n rows: KanbanRendererRow[],\n filters: KanbanRendererFilterState,\n attributes: AttributeDescriptor[],\n) => {\n const activeFilters = Object.entries(filters).filter(\n (entry): entry is [string, string[]] => Array.isArray(entry[1]) && entry[1].length > 0,\n );\n if (activeFilters.length === 0) return rows;\n\n return rows.filter((row) =>\n activeFilters.every(([id, values]) => {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor) return true;\n return matchesFilter(row, descriptor, values);\n }),\n );\n};\n\nexport const countFilterValues = (\n rows: KanbanRendererRow[],\n attributeId: string,\n attributes: AttributeDescriptor[],\n) => {\n const counts: Record<string, number> = {};\n const descriptor = findAttribute(attributes, attributeId);\n if (!descriptor) return counts;\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n return counts;\n};\n\nexport type { KanbanRendererColumnGroup, KanbanRendererRowGroup };\n","import { Box, Button, chakra, Dialog, HStack, Icon, IconButton, Input, Stack, Tabs, Text } from \"@chakra-ui/react\";\nimport { Copy, Pencil, Plus, RotateCcw, Trash2, X } from \"lucide-react\";\nimport { type FormEvent, type ReactNode, useState } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { FilterCategoryView } from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererFilterState, KanbanRendererSavedView } from \"./types\";\nimport { isActiveKanbanRendererViewDirty, useKanbanRendererStore } from \"./use-kanban-renderer-store\";\n\ninterface KanbanRendererViewBarProps {\n storageKey: string;\n categories: FilterCategoryView[];\n filters: KanbanRendererFilterState;\n leading?: ReactNode;\n filterControl: ReactNode;\n displayControl: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nconst nextViewIdentity = (views: KanbanRendererSavedView[]) => {\n let index = views.length + 1;\n while (views.some((view) => view.id === `view-${index.toString()}`)) index += 1;\n return { id: `view-${index.toString()}`, title: `View ${index.toString()}` };\n};\n\nconst duplicateIdentity = (view: KanbanRendererSavedView, views: KanbanRendererSavedView[]) => {\n const baseId = `${view.id}-copy`;\n let index = 1;\n let id = baseId;\n while (views.some((entry) => entry.id === id)) {\n index += 1;\n id = `${baseId}-${index.toString()}`;\n }\n return { id, title: `${view.title} copy` };\n};\n\nconst filterValueLabel = (category: FilterCategoryView | undefined, values: string[]) =>\n values.map((value) => category?.options.find((option) => option.value === value)?.label ?? value).join(\", \");\n\nconst FilterPill = (props: { category: FilterCategoryView | undefined; values: string[]; onRemove: () => void }) => {\n const { category, values, onRemove } = props;\n const label = category?.label ?? \"Filter\";\n\n return (\n <HStack\n height=\"filter-pill\"\n gap=\"2xs\"\n paddingLeft=\"xs\"\n paddingRight=\"2xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"xs\"\n bg=\"bg.muted\"\n flexShrink={0}\n >\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n {label} {values.length > 1 ? \"is any of\" : \"is\"}\n </Text>\n <Text textStyle=\"label/XS/medium\" maxW=\"12rem\" truncate>\n {filterValueLabel(category, values)}\n </Text>\n <chakra.button\n type=\"button\"\n aria-label={`Remove ${label} filter`}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"1rem\"\n height=\"1rem\"\n color=\"fg.muted\"\n borderRadius=\"xs\"\n _hover={{ color: \"fg\", bg: \"bg.hover\" }}\n onClick={onRemove}\n >\n <Icon as={X} boxSize=\"0.75rem\" />\n </chakra.button>\n </HStack>\n );\n};\n\nconst RenameViewDialog = (props: {\n open: boolean;\n title: string;\n onOpenChange: (open: boolean) => void;\n onRename: (title: string) => void;\n}) => {\n const { open, title, onOpenChange, onRename } = props;\n const [value, setValue] = useState(title);\n const submit = (event: FormEvent) => {\n event.preventDefault();\n const nextTitle = value.trim();\n if (!nextTitle) return;\n onRename(nextTitle);\n onOpenChange(false);\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => onOpenChange(details.open)}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content asChild>\n <form onSubmit={submit}>\n <Dialog.Header>\n <Dialog.Title>Rename view</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n <Input\n autoFocus\n aria-label=\"View name\"\n value={value}\n onChange={(event) => setValue(event.target.value)}\n />\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"primary\" disabled={!value.trim()}>\n Rename\n </Button>\n </Dialog.Footer>\n </form>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n\nexport const KanbanRendererViewBar = (props: KanbanRendererViewBarProps) => {\n const { storageKey, categories, filters, leading, filterControl, displayControl, align = \"split\" } = props;\n const views = useKanbanRendererStore(storageKey, (state) => state.views);\n const activeViewId = useKanbanRendererStore(storageKey, (state) => state.activeViewId);\n const dirty = useKanbanRendererStore(storageKey, isActiveKanbanRendererViewDirty);\n const activateView = useKanbanRendererStore(storageKey, (state) => state.activateView);\n const createView = useKanbanRendererStore(storageKey, (state) => state.createView);\n const saveActiveView = useKanbanRendererStore(storageKey, (state) => state.saveActiveView);\n const resetActiveView = useKanbanRendererStore(storageKey, (state) => state.resetActiveView);\n const clearFilter = useKanbanRendererStore(storageKey, (state) => state.clearFilter);\n const renameView = useKanbanRendererStore(storageKey, (state) => state.renameView);\n const duplicateView = useKanbanRendererStore(storageKey, (state) => state.duplicateView);\n const deleteView = useKanbanRendererStore(storageKey, (state) => state.deleteView);\n const [renameTarget, setRenameTarget] = useState<KanbanRendererSavedView>();\n const activeFilters = Object.entries(filters).filter(([, values]) => values.length > 0);\n const showFilterRow = dirty || activeFilters.length > 0;\n\n const actionsFor = (view: KanbanRendererSavedView): ResourceContextAction[] => [\n {\n key: \"rename\",\n label: \"Rename\",\n icon: <Icon as={Pencil} boxSize=\"0.875rem\" />,\n onClick: () => setRenameTarget(view),\n },\n {\n key: \"duplicate\",\n label: \"Duplicate\",\n icon: <Icon as={Copy} boxSize=\"0.875rem\" />,\n onClick: () => duplicateView(view.id, duplicateIdentity(view, views)),\n },\n {\n key: \"delete\",\n label: \"Delete view\",\n icon: <Icon as={Trash2} boxSize=\"0.875rem\" />,\n isDisabled: views.length === 1,\n separatorBefore: true,\n onClick: () => deleteView(view.id),\n },\n ];\n\n return (\n <Stack\n data-testid=\"kanban-renderer-header\"\n gap=\"0\"\n flexShrink={0}\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <HStack height=\"view-bar\" minW=\"0\" gap=\"2xs\" paddingX=\"xs\">\n {leading}\n <Tabs.Root\n value={activeViewId}\n size=\"sm\"\n variant=\"subtle\"\n minW=\"0\"\n overflow=\"hidden\"\n onValueChange={(details) => activateView(details.value)}\n >\n <Tabs.List overflowX=\"auto\" overflowY=\"hidden\">\n {views.map((view) => (\n <ResourceContextMenu key={view.id} actions={actionsFor(view)} positioning={{ placement: \"bottom-start\" }}>\n <Tabs.Trigger value={view.id}>\n {view.title}\n {dirty && view.id === activeViewId ? (\n <Box\n aria-label=\"Unsaved view changes\"\n width=\"0.375rem\"\n height=\"0.375rem\"\n borderRadius=\"full\"\n bg=\"fg.warning\"\n />\n ) : null}\n </Tabs.Trigger>\n </ResourceContextMenu>\n ))}\n </Tabs.List>\n </Tabs.Root>\n <Tooltip content=\"Add view\">\n <IconButton\n aria-label=\"Add view\"\n size=\"2xs\"\n variant=\"ghost\"\n onClick={() => createView(nextViewIdentity(views))}\n >\n <Icon as={Plus} />\n </IconButton>\n </Tooltip>\n {align === \"split\" ? <Box flex=\"1\" /> : null}\n {filterControl}\n {displayControl}\n </HStack>\n\n {showFilterRow ? (\n <HStack\n height=\"view-subheader\"\n minW=\"0\"\n gap=\"2xs\"\n paddingX=\"xs\"\n borderTopWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <HStack minW=\"0\" gap=\"2xs\" overflowX=\"auto\">\n {activeFilters.map(([categoryId, values]) => (\n <FilterPill\n key={categoryId}\n category={categories.find((category) => category.id === categoryId)}\n values={values}\n onRemove={() => clearFilter(categoryId)}\n />\n ))}\n </HStack>\n <Box flex=\"1\" />\n {dirty ? (\n <>\n <Button size=\"2xs\" variant=\"outline\" onClick={resetActiveView}>\n <RotateCcw />\n Reset\n </Button>\n <Button size=\"2xs\" variant=\"primary\" onClick={saveActiveView}>\n Save view\n </Button>\n </>\n ) : null}\n </HStack>\n ) : null}\n\n {renameTarget ? (\n <RenameViewDialog\n key={renameTarget.id}\n open\n title={renameTarget.title}\n onOpenChange={(open) => !open && setRenameTarget(undefined)}\n onRename={(title) => renameView(renameTarget.id, title)}\n />\n ) : null}\n </Stack>\n );\n};\n","import { useEffect, useReducer } from \"react\";\n\nimport type { AttributeDescriptor, EnumOptionsSource } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst collectSources = (attributes: AttributeDescriptor[]): EnumOptionsSource[] => {\n const sources: EnumOptionsSource[] = [];\n for (const attribute of attributes) {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") continue;\n if (isEnumOptionsSource(attribute.type.options)) sources.push(attribute.type.options);\n }\n return sources;\n};\n\n/**\n * Returns the same descriptors with every source-backed enum's options\n * replaced by a fresh `getSnapshot()` array. Pure — call from anywhere that\n * needs a normalized view of the schema.\n */\nexport const resolveAttributeOptions = (attributes: AttributeDescriptor[]): AttributeDescriptor[] =>\n attributes.map((attribute) => {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") return attribute;\n if (!isEnumOptionsSource(attribute.type.options)) return attribute;\n return { ...attribute, type: { ...attribute.type, options: attribute.type.options.getSnapshot() } };\n });\n\n/**\n * Subscribes to every source-backed enum in `attributes` and returns the\n * resolved descriptors (options materialized to plain arrays). When any\n * source's listener fires the component rerenders, so downstream renders see\n * the new snapshot automatically.\n */\nexport const useResolvedAttributes = (attributes: AttributeDescriptor[]) => {\n const [, forceRender] = useReducer((tick: number) => tick + 1, 0);\n\n useEffect(() => {\n const sources = collectSources(attributes);\n if (sources.length === 0) return;\n const refresh = () => forceRender();\n const unsubscribes = sources.map((source) => source.subscribe(refresh));\n return () => {\n for (const dispose of unsubscribes) dispose();\n };\n }, [attributes]);\n\n return resolveAttributeOptions(attributes);\n};\n","import type { ReactNode } from \"react\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport { countFilterValues } from \"./kanban-renderer-grouping\";\nimport {\n buildDisplayPropertyOptions,\n buildFilterCategories,\n buildGroupingOptions,\n buildOrderingOptions,\n} from \"./kanban-renderer-helpers\";\nimport { KanbanRendererViewBar } from \"./kanban-renderer-view-bar\";\nimport type {\n AttributeDescriptor,\n KanbanRendererFilterState,\n KanbanRendererRow,\n KanbanRendererSavedView,\n KanbanRendererSettings,\n} from \"./types\";\nimport { useKanbanRendererStore } from \"./use-kanban-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface KanbanRendererToolbarProps<TRow extends KanbanRendererRow = KanbanRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<KanbanRendererSettings>;\n defaultFilters?: KanbanRendererFilterState;\n defaultViews?: KanbanRendererSavedView[];\n defaultActiveViewId?: string;\n leading?: ReactNode;\n displayControl?: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nexport const KanbanRendererToolbar = <TRow extends KanbanRendererRow>(props: KanbanRendererToolbarProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n defaultSettings,\n defaultFilters,\n defaultViews,\n defaultActiveViewId,\n leading,\n displayControl,\n align = \"split\",\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const groupingOptions = buildGroupingOptions(attributes);\n const orderingOptions = buildOrderingOptions(attributes);\n const displayPropertyOptions = buildDisplayPropertyOptions(attributes);\n\n const initialState = {\n settings: defaultSettings,\n filters: defaultFilters,\n views: defaultViews,\n activeViewId: defaultActiveViewId,\n };\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n const setViewMode = useKanbanRendererStore(storageKey, (state) => state.setViewMode, initialState);\n const setColumnGrouping = useKanbanRendererStore(storageKey, (state) => state.setColumnGrouping, initialState);\n const setRowGrouping = useKanbanRendererStore(storageKey, (state) => state.setRowGrouping, initialState);\n const setOrderingAttributeId = useKanbanRendererStore(\n storageKey,\n (state) => state.setOrderingAttributeId,\n initialState,\n );\n const toggleSortDirection = useKanbanRendererStore(storageKey, (state) => state.toggleSortDirection, initialState);\n const toggleDisplayProperty = useKanbanRendererStore(\n storageKey,\n (state) => state.toggleDisplayProperty,\n initialState,\n );\n const toggleFilterValue = useKanbanRendererStore(storageKey, (state) => state.toggleFilterValue, initialState);\n const clearFilter = useKanbanRendererStore(storageKey, (state) => state.clearFilter, initialState);\n const clearAllFilters = useKanbanRendererStore(storageKey, (state) => state.clearAllFilters, initialState);\n\n const categoryOptions = buildFilterCategories(attributes, rows);\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(rows, category.id, attributes)]),\n );\n\n const filterControl = (\n <FilterMenu\n categories={categoryOptions}\n filters={filters}\n countsByCategory={countsByCategory}\n onToggleFilterValue={toggleFilterValue}\n onClearFilter={clearFilter}\n onClearAll={clearAllFilters}\n />\n );\n const resolvedDisplayControl =\n displayControl === undefined ? (\n <DisplayMenu\n settings={settings}\n groupingOptions={groupingOptions}\n orderingOptions={orderingOptions}\n displayPropertyOptions={displayPropertyOptions}\n onViewModeChange={setViewMode}\n onColumnGroupingChange={setColumnGrouping}\n onRowGroupingChange={setRowGrouping}\n onOrderingAttributeIdChange={setOrderingAttributeId}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n ) : (\n displayControl\n );\n\n return (\n <KanbanRendererViewBar\n storageKey={storageKey}\n categories={categoryOptions}\n filters={filters}\n leading={leading}\n filterControl={filterControl}\n displayControl={resolvedDisplayControl}\n align={align}\n />\n );\n};\n"],"names":["NO_GROUPING","MANUAL_ORDERING","isEnumOptionsSource","options","Array","isArray","isAttributesSource","attributes","DEFAULT_KANBAN_RENDERER_SETTINGS","viewMode","columnGrouping","rowGrouping","ordering","attributeId","direction","displayProperties","findAttribute","id","find","attribute","dedupeEnumOptions","seen","Set","filter","option","has","value","add","getEnumOptions","type","kind","getSnapshot","toTitleCase","replaceAll","split","chunk","length","map","toUpperCase","slice","join","findEnumOption","enumOptionLabel","label","summarizeMultiEnum","values","renderEnumBadge","descriptor","stringValue","editable","attributeLabel","undefined","isEditable","color","icon","renderMultiEnumBadge","entry","summary","firstOption","getAttributeValue","row","raw","getAttributeStringValues","String","formatDateValue","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","trim","workspaceTypeFrom","normalizeWorkspaceBadgeItems","flatMap","item","shorthand","name","renderWorkspaceBadgeDisplay","display","items","itemsAttributeId","selectedId","selectedItem","createElement","WorkspaceBadge","workspaceType","hasMultipleWorkspaces","showLeadingSessionIndicator","renderAttributeBadge","render","formatted","collectDisplayBadges","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","filterable","declared","auto","declaredValues","undeclared","sort","a","b","localeCompare","numeric","selectionMode","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","placement","columnKey","resolveKnownColumnKeys","filters","active","normalizeFilterValues","_descriptor","omitFilterCategory","next","sanitizeSettings","settings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","attributesById","Map","Object","entries","get","cloneSettings","cloneFilters","fromEntries","snapshotKanbanRendererView","title","state","isDefault","applyKanbanRendererView","view","comparableSettings","comparableFilters","left","right","isKanbanRendererViewDirty","JSON","stringify","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","expandedGroups","createSnapshot","initialState","initialSettings","initialFilters","suppliedViews","views","activeView","activeViewId","toggleValue","includes","stripTagPrefix","startsWith","migrateSettings","orderingRaw","field","orderingDirection","migrateFilters","stringValues","createKanbanRendererStore","snapshot","createStore","persist","set","setViewMode","setColumnGrouping","setRowGrouping","setOrdering","setOrderingAttributeId","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","property","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","setExpandedGroup","groupId","isExpanded","activateView","viewId","createView","savedView","saveActiveView","resetActiveView","renameView","duplicateView","duplicate","source","copy","deleteView","setDefaultView","reset","version","migrate","persisted","storage","createJSONStorage","createBrowserStorage","partialize","workspaceStoreRegistry","getKanbanRendererStore","existingStore","store","useKanbanRendererStore","selector","$","_c","t0","useStore","isActiveKanbanRendererViewDirty","SectionLabel","props","children","jsx","Text","Dropdown","selectedLabel","hasNoneFirst","t1","t2","t3","valueSuffix","jsxs","HStack","t4","Symbol","for","ChevronDown","t5","Button","t6","option_0","index","Fragment","Menu","onSelect","Icon","Check","t7","onSuffixAction","t8","t9","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","useRef","contentRef","open","setOpen","useState","closeOnOutsidePointerDown","event","target","Node","current","contains","document","addEventListener","removeEventListener","useEffect","offset","mainAxis","getAnchorElement","details","Tooltip","IconButton","Settings2","List","t10","t11","t12","SquareKanban","t13","t14","t15","t16","t17","SortAsc","SortDesc","t18","t19","t20","t21","t22","t23","t24","t25","t26","Portal","Popover","t27","contentProps","p","flexDirection","gap","selectedValues","categoryId","Boolean","hasActiveFilters","some","selectedDescription","category","labels","toString","CategoryLabel","OptionLabel","tabIndex","checked","Checkbox","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","query","setQuery","activeCategoryId","setActiveCategoryId","activeCategory","filtersApplied","normalizedQuery","toLocaleLowerCase","visibleCategories","category_0","Filter","T0","Search","event_0","Input","T1","T2","Stack","t28","t29","t30","t31","t32","t33","T3","ScrollArea","t34","t35","t36","overscrollBehavior","t38","category_1","ListRow","Badge","t39","t40","t37","t41","t42","t43","t44","t45","Content","t46","Positioner","t47","t48","Root","UNASSIGNED_LABEL","fallbackLabel","toLowerCase","labelForGroupKey","key","resolveGroupingValue","getGroupingKey","columnId","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","rowValues","normalizedValues","filterRows","activeFilters","every","countFilterValues","counts","nextViewIdentity","duplicateIdentity","baseId","filterValueLabel","FilterPill","onRemove","bg","X","chakra","RenameViewDialog","onOpenChange","onRename","setValue","preventDefault","nextTitle","submit","Dialog","KanbanRendererViewBar","leading","filterControl","displayControl","align","_temp","_temp2","dirty","_temp3","_temp4","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","renameTarget","setRenameTarget","_temp1","showFilterRow","Pencil","onClick","Copy","Trash2","isDisabled","separatorBefore","actionsFor","view_0","ResourceContextMenu","Tabs","Box","Plus","values_0","RotateCcw","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","refresh","unsubscribes","subscribe","dispose","tick","KanbanRendererToolbar","rawAttributes","defaultSettings","defaultFilters","defaultViews","defaultActiveViewId","categoryOptions","resolvedDisplayControl","state_9"],"mappings":"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"}
|
package/dist/kanban-renderer.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { N as Z, M as Ie, g as Ue, o as ge, r as Ye, c as Ke, a as Me,
|
|
2
|
-
import { D as
|
|
1
|
+
import { N as Z, M as Ie, g as Ue, o as ge, r as Ye, c as Ke, a as Me, b as Le, d as _e, e as Je, u as pe, f as Qe, h as Ze, i as et, K as tt } from "./kanban-renderer-toolbar-BcUZvGyY.js";
|
|
2
|
+
import { D as On, F as $n, j as Bn, k as zn, l as Kn, m as Mn, n as Ln, p as _n, q as Vn, s as Wn, t as Hn, v as jn, w as Fn, x as Nn, y as Xn } from "./kanban-renderer-toolbar-BcUZvGyY.js";
|
|
3
3
|
import { jsx as d, jsxs as B, Fragment as nt } from "react/jsx-runtime";
|
|
4
4
|
import { c as M } from "react/compiler-runtime";
|
|
5
5
|
import { Text as _, Badge as fe, IconButton as Ee, Icon as N, Menu as F, Spacer as rt, HStack as X, Portal as ot, Wrap as we, Stack as q, Box as re, VStack as lt, Textarea as at, Button as me, Input as it, Dialog as ne, CloseButton as st } from "@chakra-ui/react";
|
|
6
6
|
import { useState as W, useRef as Ve, useEffect as Se } from "react";
|
|
7
7
|
import { E as dt } from "./empty-state-Bo4HVrgr.js";
|
|
8
|
-
import { L as ke, R as We } from "./list-row-
|
|
9
|
-
import { T as ct, S as Pe } from "./
|
|
8
|
+
import { L as ke, R as We } from "./list-row-B8L4TGsh.js";
|
|
9
|
+
import { T as ct, S as Pe } from "./browser-storage-DPtOQJx0.js";
|
|
10
10
|
import { Plus as ut, MoreHorizontal as pt, SquareCheck as gt, Square as ft, Check as mt, ChevronDown as bt, ChevronRight as ht, Paperclip as yt } from "lucide-react";
|
|
11
|
-
import { g as be,
|
|
11
|
+
import { g as be, i as He, a as he, P as vt, S as xt, A as Ct } from "./param-editor-field-C8zRDStn.js";
|
|
12
|
+
import { W as St } from "./number-input-WUfejtNx.js";
|
|
12
13
|
import { h as Dt } from "./dialog-accept-shortcut-DAEBsoWW.js";
|
|
13
|
-
import { L as It } from "./lazy-markdown-editor-
|
|
14
|
+
import { L as It } from "./lazy-markdown-editor-CWSREEhf.js";
|
|
14
15
|
const wt = async (r) => {
|
|
15
16
|
const {
|
|
16
17
|
settings: e,
|
|
@@ -169,7 +170,7 @@ const wt = async (r) => {
|
|
|
169
170
|
let S;
|
|
170
171
|
e[8] !== t || e[9] !== s ? (S = t || s ? /* @__PURE__ */ B(X, { minW: "0", gap: "2xs", children: [
|
|
171
172
|
t ? /* @__PURE__ */ d(_, { textStyle: "label/XS", color: "fg.muted", fontFamily: "mono", truncate: !0, children: t }) : null,
|
|
172
|
-
/* @__PURE__ */ d(X, { marginLeft: "auto", children: s ? /* @__PURE__ */ d(
|
|
173
|
+
/* @__PURE__ */ d(X, { marginLeft: "auto", children: s ? /* @__PURE__ */ d(St, { ...s }) : null })
|
|
173
174
|
] }) : null, e[8] = t, e[9] = s, e[10] = S) : S = e[10];
|
|
174
175
|
let R;
|
|
175
176
|
e[11] !== n ? (R = /* @__PURE__ */ d(_, { textStyle: "paragraph/S/regular", minW: "0", overflowWrap: "anywhere", children: n }), e[11] = n, e[12] = R) : R = e[12];
|
|
@@ -551,7 +552,7 @@ const Ne = (r, e, t = 0) => {
|
|
|
551
552
|
if (e[0] !== a || e[1] !== i || e[2] !== s || e[3] !== p || e[4] !== t || e[5] !== n || e[6] !== c) {
|
|
552
553
|
const C = t === void 0 ? [] : t, w = n === void 0 ? [] : n, D = c === void 0 ? "default" : c, P = C.filter(He), E = w.map(Xt);
|
|
553
554
|
let v;
|
|
554
|
-
e[15] !== a || e[16] !== i || e[17] !== s || e[18] !== p || e[19] !== D ? (v = (A) => /* @__PURE__ */ d(
|
|
555
|
+
e[15] !== a || e[16] !== i || e[17] !== s || e[18] !== p || e[19] !== D ? (v = (A) => /* @__PURE__ */ d(vt, { param: A, defaultValues: a, onChange: i, onOpenResource: s, readOnly: p, presentation: "horizontal", size: D === "small" ? "xs" : "sm" }, A.id), e[15] = a, e[16] = i, e[17] = s, e[18] = p, e[19] = D, e[20] = v) : v = e[20];
|
|
555
556
|
const k = v, I = P.filter(qt), y = P.filter(he), S = E.map(Yt).filter(Jt), R = E.map(Qt).filter(Zt), G = D === "small" ? "xs" : "sm", $ = I.length > 0 || S.length > 0;
|
|
556
557
|
f = q, g = "1", o = "full", u = G, b = "0", h = $ ? /* @__PURE__ */ B(X, { gap: G, flexWrap: "wrap", alignItems: "start", minW: "0", children: [
|
|
557
558
|
I.map(k),
|
|
@@ -654,7 +655,7 @@ const en = (r) => {
|
|
|
654
655
|
n.label
|
|
655
656
|
] }), e[12] = t, e[13] = n.label, e[14] = l) : l = e[14];
|
|
656
657
|
let m;
|
|
657
|
-
e[15] !== t || e[16] !== f || e[17] !== s || e[18] !== a ? (m = f.length > 0 ? /* @__PURE__ */ d(we, { gap: "2xs", children: f.map((C, w) => /* @__PURE__ */ d(
|
|
658
|
+
e[15] !== t || e[16] !== f || e[17] !== s || e[18] !== a ? (m = f.length > 0 ? /* @__PURE__ */ d(we, { gap: "2xs", children: f.map((C, w) => /* @__PURE__ */ d(Ct, { file: C, disabled: t, removeLabel: a, onRemove: () => s(f.filter((D, P) => P !== w)) }, `${C.name}-${w.toString()}`)) }) : null, e[15] = t, e[16] = f, e[17] = s, e[18] = a, e[19] = m) : m = e[19];
|
|
658
659
|
let x;
|
|
659
660
|
return e[20] !== u || e[21] !== l || e[22] !== m ? (x = /* @__PURE__ */ B(q, { gap: "2xs", align: "start", children: [
|
|
660
661
|
u,
|
|
@@ -687,7 +688,7 @@ const en = (r) => {
|
|
|
687
688
|
let w;
|
|
688
689
|
e[15] !== i ? (w = (P, E) => i(E), e[15] = i, e[16] = w) : w = e[16];
|
|
689
690
|
let D;
|
|
690
|
-
return e[17] !== t || e[18] !== n.id || e[19] !== n.label || e[20] !== u || e[21] !== b || e[22] !== l || e[23] !== m || e[24] !== x || e[25] !== C || e[26] !== w ? (D = /* @__PURE__ */ d(
|
|
691
|
+
return e[17] !== t || e[18] !== n.id || e[19] !== n.label || e[20] !== u || e[21] !== b || e[22] !== l || e[23] !== m || e[24] !== x || e[25] !== C || e[26] !== w ? (D = /* @__PURE__ */ d(xt, { hideLabel: !0, id: g, name: o, description: u, defaultValue: b, options: l, multiSelect: m, placeholder: x, clearable: C, readOnly: t, onChange: w }), e[17] = t, e[18] = n.id, e[19] = n.label, e[20] = u, e[21] = b, e[22] = l, e[23] = m, e[24] = x, e[25] = C, e[26] = w, e[27] = D) : D = e[27], D;
|
|
691
692
|
}
|
|
692
693
|
if (n.type === "boolean") {
|
|
693
694
|
let g;
|
|
@@ -933,7 +934,7 @@ const ln = (r) => r.type === "files" || r.type === "multi-select" ? [] : r.type
|
|
|
933
934
|
}, un = (r) => {
|
|
934
935
|
const e = r.attributes.id;
|
|
935
936
|
return typeof e == "string" && e ? e : r.id;
|
|
936
|
-
},
|
|
937
|
+
}, En = (r) => {
|
|
937
938
|
const e = M(59), {
|
|
938
939
|
rows: t,
|
|
939
940
|
storageKey: n,
|
|
@@ -1072,9 +1073,9 @@ function bn(r) {
|
|
|
1072
1073
|
return r !== "id";
|
|
1073
1074
|
}
|
|
1074
1075
|
export {
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1076
|
+
On as DisplayMenu,
|
|
1077
|
+
$n as FilterMenu,
|
|
1078
|
+
En as KanbanRenderer,
|
|
1078
1079
|
Bt as KanbanRendererBoard,
|
|
1079
1080
|
Fe as KanbanRendererCard,
|
|
1080
1081
|
dn as KanbanRendererCreateDialog,
|
|
@@ -1082,22 +1083,22 @@ export {
|
|
|
1082
1083
|
tt as KanbanRendererToolbar,
|
|
1083
1084
|
Ie as MANUAL_ORDERING,
|
|
1084
1085
|
Z as NO_GROUPING,
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1086
|
+
Bn as buildDisplayPropertyOptions,
|
|
1087
|
+
zn as buildFilterCategories,
|
|
1088
|
+
Kn as buildGroupingOptions,
|
|
1089
|
+
Mn as buildOrderingOptions,
|
|
1089
1090
|
Me as collectDisplayBadges,
|
|
1090
1091
|
Le as findAttribute,
|
|
1091
|
-
|
|
1092
|
-
|
|
1092
|
+
Ln as getAttributeStringValues,
|
|
1093
|
+
_n as getAttributeValue,
|
|
1093
1094
|
Ue as getEnumOptions,
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1095
|
+
Vn as isActiveKanbanRendererViewDirty,
|
|
1096
|
+
Wn as isAttributesSource,
|
|
1097
|
+
Hn as isEnumOptionsSource,
|
|
1098
|
+
jn as renderAttributeBadge,
|
|
1099
|
+
Fn as resolveAttributeOptions,
|
|
1100
|
+
Nn as sanitizeFilters,
|
|
1101
|
+
Xn as sanitizeSettings,
|
|
1101
1102
|
pe as useKanbanRendererStore,
|
|
1102
1103
|
Je as useResolvedAttributes
|
|
1103
1104
|
};
|