@pstdio/ui 0.39.0 → 0.41.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-81jr28u4.js → MermaidComponent-BCiI63_G.js} +3 -3
- package/dist/{MermaidComponent-81jr28u4.js.map → MermaidComponent-BCiI63_G.js.map} +1 -1
- package/dist/chat-question-bubble-w2vMbFsS.js +68 -0
- package/dist/chat-question-bubble-w2vMbFsS.js.map +1 -0
- package/dist/chat-ui.d.ts +94 -17
- package/dist/chat-ui.js +2240 -1476
- package/dist/chat-ui.js.map +1 -1
- package/dist/{data-table-stats-row-CpRe_xK2.js → data-table-stats-row-EiTEONdY.js} +2 -2
- package/dist/{data-table-stats-row-CpRe_xK2.js.map → data-table-stats-row-EiTEONdY.js.map} +1 -1
- package/dist/data-table.d.ts +27 -7
- package/dist/data-table.js +1035 -872
- package/dist/data-table.js.map +1 -1
- package/dist/diff-bubble-DewUd_2w.js +61 -0
- package/dist/diff-bubble-DewUd_2w.js.map +1 -0
- package/dist/{diff-drawer-45rpk3aq.js → diff-drawer-BwZBOObe.js} +106 -85
- package/dist/diff-drawer-BwZBOObe.js.map +1 -0
- package/dist/diff-viewer-kOOd7C7h.js +574 -0
- package/dist/diff-viewer-kOOd7C7h.js.map +1 -0
- package/dist/diff.d.ts +11 -0
- package/dist/diff.js +107 -98
- package/dist/diff.js.map +1 -1
- package/dist/display-sort-control-DPxc0e5z.js +587 -0
- package/dist/display-sort-control-DPxc0e5z.js.map +1 -0
- package/dist/{workspace-badge-Brm3Xr3m.d.ts → host-storage-DP0RLj4i.d.ts} +15 -1
- package/dist/{index-BfFLdci8.d.ts → index-C9mywhyX.d.ts} +49 -13
- package/dist/index-D3UJyWWh.d.ts +501 -0
- package/dist/index.d.ts +38 -13
- package/dist/index.js +941 -908
- package/dist/index.js.map +1 -1
- package/dist/kanban-renderer.d.ts +2 -326
- package/dist/kanban-renderer.js +991 -610
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/list-row-DM0DiIrN.js +1167 -0
- package/dist/list-row-DM0DiIrN.js.map +1 -0
- package/dist/{mermaid-renderer-DImi0fDp.js → mermaid-renderer-0PmNkOXI.js} +29 -29
- package/dist/mermaid-renderer-0PmNkOXI.js.map +1 -0
- package/dist/mermaid.js +1 -1
- package/dist/param-editor.js +2 -3
- package/dist/prism-JVIsQMoJ.js +1029 -0
- package/dist/prism-JVIsQMoJ.js.map +1 -0
- package/dist/{resource-badge-95WPVlZf.d.ts → resource-badge-nOWPqxFU.d.ts} +1 -0
- package/dist/rich-text-DM24VNQZ.js +10447 -0
- package/dist/rich-text-DM24VNQZ.js.map +1 -0
- package/dist/rich-text.d.ts +2 -2
- package/dist/rich-text.js +2 -2
- package/dist/style.css +1 -1
- package/dist/terminal.d.ts +5 -63
- package/dist/terminal.js +102 -122
- package/dist/terminal.js.map +1 -1
- package/dist/{theme-BsOWAIi2.js → theme-at0rtSnX.js} +441 -246
- package/dist/theme-at0rtSnX.js.map +1 -0
- package/dist/theme-kKuLN2jb.js +80 -0
- package/dist/theme-kKuLN2jb.js.map +1 -0
- package/dist/theme-preference-BV4cbJNB.js +115 -0
- package/dist/theme-preference-BV4cbJNB.js.map +1 -0
- package/dist/theme.js +3 -2
- package/dist/{tree-list-WhISG-cz.js → tree-list-Cqgl8mnN.js} +400 -377
- package/dist/tree-list-Cqgl8mnN.js.map +1 -0
- package/package.json +4 -4
- package/dist/diff-bubble-DZsarmSG.js +0 -61
- package/dist/diff-bubble-DZsarmSG.js.map +0 -1
- package/dist/diff-drawer-45rpk3aq.js.map +0 -1
- package/dist/diff-viewer-DJ1B5hxL.js +0 -558
- package/dist/diff-viewer-DJ1B5hxL.js.map +0 -1
- package/dist/list-row-uqD-q4gv.js +0 -1018
- package/dist/list-row-uqD-q4gv.js.map +0 -1
- package/dist/mermaid-renderer-DImi0fDp.js.map +0 -1
- package/dist/param-editor-BQd4AOUP.js +0 -225
- package/dist/param-editor-BQd4AOUP.js.map +0 -1
- package/dist/param-editor-field-BJ_rLUnV.js +0 -2385
- package/dist/param-editor-field-BJ_rLUnV.js.map +0 -1
- package/dist/prism-BStPsJSB.js +0 -658
- package/dist/prism-BStPsJSB.js.map +0 -1
- package/dist/rich-text-VYAmEigU.js +0 -6979
- package/dist/rich-text-VYAmEigU.js.map +0 -1
- package/dist/slider-hwHYe98I.js +0 -423
- package/dist/slider-hwHYe98I.js.map +0 -1
- package/dist/theme-BsOWAIi2.js.map +0 -1
- package/dist/theme-preference-pzfuK5cH.js +0 -101
- package/dist/theme-preference-pzfuK5cH.js.map +0 -1
- package/dist/tree-list-WhISG-cz.js.map +0 -1
- package/dist/types-DWA3enV6.d.ts +0 -182
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-sort-control-DPxc0e5z.js","names":["Badge","Icon","Text","LucideIcon","lucideIcons","CollectionBadgeProps","label","icon","onClick","toPascalCase","value","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","resolveIcon","name","undefined","pascalName","candidate","component","Record","CollectionBadge","props","$","_c","t0","BadgeIcon","t1","t2","t3","content","t4","Symbol","for","display","gap","alignItems","minW","maxW","variant","bg","_light","_dark","color","textStyle","sharedProps","const","t5","event","stopPropagation","t6","_c","_Fragment","enumOptionLabel","findEnumOption","getEnumOptions","toTitleCase","AttributeDescriptor","AttributeType","EnumOption","summarizeMultiEnum","values","type","length","map","value","join","AttributeBadge","attributeId","attributeLabel","label","color","icon","options","isEditable","getAttributeBadgeColorPalette","_badge","renderEnumBadge","descriptor","kind","stringValue","editable","id","undefined","option","renderMultiEnumBadge","Array","isArray","filter","entry","summary","firstOption","ViewFilterGroup","createElement","ReactNode","getAttributeStringValues","getAttributeValue","filterRowsByView","emptyGroupKey","groupKey","CollectionBadge","AttributeBadge","renderEnumBadge","renderMultiEnumBadge","getEnumOptions","toTitleCase","AttributeDescriptor","CollectionBadgeItem","KanbanRendererRow","findAttribute","NO_GROUPING","getAttributeBadgeColorPalette","enumOptionLabel","findEnumOption","formatDateValue","value","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","String","formatStringValue","undefined","formatUserValue","isRenderableNode","isRecord","Record","Array","isArray","textValue","trim","isCollectionResource","NonNullable","type","id","normalizeCollectionBadgeItems","flatMap","item","label","icon","resource","renderBadgeListDisplay","descriptor","row","openResource","display","kind","items","attributes","itemsAttributeId","length","selectedId","selectedItem","find","orderedItems","filter","map","key","onClick","renderAttributeBadge","render","formatted","attributeId","color","collectDisplayBadges","displayProperties","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","values","Set","add","FilterCategoryView","selectionMode","options","buildFilterCategories","categories","filterable","declared","auto","declaredValues","option","undeclared","has","sort","a","b","localeCompare","numeric","MenuOption","buildGroupingOptions","groupable","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","columnKey","resolveKnownColumnKeys","structureRows","keys","empty","some","conjunction","candidates","title","rules","rule","Button","HStack","Icon","IconButton","Menu","Popover","Portal","Text","Check","ChevronDown","List","Settings2","SquareKanban","Fragment","ReactNode","useEffect","useRef","useState","Tooltip","MenuOption","resolveSubGroupingOptions","KanbanRendererSettings","DisplayMenuProps","settings","sortControl","groupingOptions","displayPropertyOptions","onViewModeChange","value","onColumnGroupingChange","onRowGroupingChange","onDisplayPropertyToggle","property","SectionLabel","props","$","_c","t0","children","DisplayMenuSelectProps","label","options","onSelect","DisplayMenuSelect","find","option","selectedLabel","hasNoneFirst","t1","Symbol","for","strategy","hideWhenDetached","t2","t3","t4","t5","t6","map","option_0","index","t7","t8","DisplayMenu","triggerRef","contentRef","open","setOpen","closeOnOutsidePointerDown","event","target","Node","current","contains","document","addEventListener","removeEventListener","placement","offset","mainAxis","getAnchorElement","details","viewMode","t9","t10","t11","t12","t13","t14","t15","rowGrouping","t16","columnGrouping","t17","t18","t19","t20","t21","t22","displayProperties","t23","active","includes","t24","t25","_c","Fragment","Tooltip","Button","Icon","SearchX","X","EmptyState","CollectionViewEmptyStateProps","search","onClearSearch","CollectionViewEmptyState","props","$","_c","t0","Symbol","for","t1","trim","t2","t3","t4","t5","_c","EmptyState","HStack","Stack","Text","ViewSort","AttributeDescriptor","fieldIcon","canSortField","findField","sortDirectionLabel","RuleSelect","DisplaySortControlProps","fields","sorts","onSortsChange","DisplaySortControl","props","$","_c","sort","t0","field","attributeId","undefined","t1","Symbol","for","t2","t3","value","label","t4","filter","map","_temp","t5","direction","choice","slice","t6","entry","id","icon","_c","Tooltip$1","RuleSelect","findEnumOption","findAttribute","toTitleCase","getAttributeStringValues","getAttributeValue","fieldIcon","canSortField","filterRowsByView","findField","groupKey","getEnumOptions","NO_GROUPING","sortDirectionLabel","emptyGroupKey","enumOptionLabel","Fragment$1","lucideIcons","toPascalCase","value","part","resolveIcon","name","pascalName","candidate","component","CollectionBadge","$","c","props","t0","icon","BadgeIcon","t1","Icon","t2","label","Text","t3","Fragment","content","t4","sharedProps","onClick","t5","event","t6","Badge","summarizeMultiEnum","values","type","renderEnumBadge","stringValue","editable","descriptor","option","renderMultiEnumBadge","entry","summary","firstOption","formatDateValue","date","formatNumberValue","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","isCollectionResource","normalizeCollectionBadgeItems","item","id","resource","renderBadgeListDisplay","items","row","selectedId","selectedItem","createElement","openResource","renderAttributeBadge","formatted","collectDisplayBadges","badges","displayProperties","attributes","badge","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","declared","auto","declaredValues","undeclared","a","b","buildGroupingOptions","options","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","resolveKnownColumnKeys","keys","empty","structureRows","filter","candidates","key","rule","SectionLabel","DisplayMenuSelect","selectedLabel","hasNoneFirst","HStack","ChevronDown","Menu","Button","index","option_0","Check","t7","t8","DisplayMenu","triggerRef","useRef","contentRef","open","setOpen","useState","closeOnOutsidePointerDown","target","useEffect","details","Popover","IconButton","Settings2","settings","onViewModeChange","List","t9","t10","t11","t12","SquareKanban","t13","t14","t15","onColumnGroupingChange","onRowGroupingChange","t16","groupingOptions","t17","t18","t19","t20","t21","t22","displayPropertyOptions","onDisplayPropertyToggle","t23","active","t24","Portal","t25","CollectionViewEmptyState","SearchX","search","X","onClearSearch","EmptyState$1","DisplaySortControl","sort","sorts","fields","onSortsChange","field","_temp","choice","Stack"],"sources":["../src/components/kanban-renderer/collection-badge.tsx","../src/components/kanban-renderer/kanban-renderer-badge-helpers.ts","../src/components/kanban-renderer/kanban-renderer-helpers.ts","../src/components/kanban-renderer/display-menu.tsx","../src/components/collection-view/collection-view-empty-state.tsx","../src/components/collection-view/display-sort-control.tsx"],"sourcesContent":["import { Badge, Icon, Text } from \"@chakra-ui/react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport * as lucideIcons from \"lucide-react\";\n\ninterface CollectionBadgeProps {\n label: string;\n icon?: string;\n onClick?: () => void;\n}\n\nconst toPascalCase = (value: string) =>\n value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(\"\");\n\nconst resolveIcon = (name: string | undefined) => {\n if (!name) return undefined;\n const pascalName = toPascalCase(name);\n for (const candidate of [name, pascalName, `${pascalName}Icon`]) {\n const component = (lucideIcons as Record<string, unknown>)[candidate];\n if (component && (typeof component === \"function\" || typeof component === \"object\")) {\n return component as LucideIcon;\n }\n }\n return undefined;\n};\n\nexport const CollectionBadge = (props: CollectionBadgeProps) => {\n const { label, icon, onClick } = props;\n const BadgeIcon = resolveIcon(icon);\n\n const content = (\n <>\n {BadgeIcon ? <Icon as={BadgeIcon} boxSize=\"3.5\" flexShrink={0} aria-hidden=\"true\" /> : null}\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.muted\" minW=\"0\" maxW=\"10rem\" truncate>\n {label}\n </Text>\n </>\n );\n\n const sharedProps = {\n display: \"inline-flex\",\n gap: \"2xs\",\n alignItems: \"center\",\n minW: \"0\",\n maxW: \"100%\",\n variant: \"subtle\",\n bg: { _light: \"bg.muted\", _dark: \"bg.subtle\" },\n color: \"fg.muted\",\n textStyle: \"label/XS/medium\",\n \"data-testid\": \"collection-badge\",\n } as const;\n\n if (onClick) {\n return (\n <Badge asChild {...sharedProps} cursor=\"pointer\">\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onClick();\n }}\n >\n {content}\n </button>\n </Badge>\n );\n }\n\n return (\n <Badge as=\"span\" {...sharedProps} cursor=\"default\">\n {content}\n </Badge>\n );\n};\n","import { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, EnumOption } from \"./types\";\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n attributeLabel?: string;\n label: string;\n color?: string;\n icon?: string | null;\n value?: string | string[];\n options?: EnumOption[];\n isEditable?: boolean;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nexport const renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n const editable = descriptor.editable === true;\n if (!stringValue) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: stringValue ?? undefined,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n ...(editable ? { value: stringValue, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n\nexport const renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n const summary = summarizeMultiEnum(values, type);\n const editable = descriptor.editable === true;\n if (!summary) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: values,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: summary,\n color: firstOption?.color,\n icon: firstOption?.icon,\n ...(editable ? { value: values, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n","import type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { createElement, type ReactNode } from \"react\";\nimport { getAttributeStringValues, getAttributeValue } from \"../collection-view/collection-view-fields\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { emptyGroupKey, groupKey } from \"../collection-view/collection-view-grouping\";\nimport { CollectionBadge } from \"./collection-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nimport { renderEnumBadge, renderMultiEnumBadge } from \"./kanban-renderer-badge-helpers\";\nimport { getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, CollectionBadgeItem, KanbanRendererRow } from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\n\nexport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nexport { getAttributeBadgeColorPalette } from \"./kanban-renderer-badge-helpers\";\nexport { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst textValue = (value: unknown) => (typeof value === \"string\" && value.trim() ? value.trim() : undefined);\n\nconst isCollectionResource = (value: unknown): value is NonNullable<CollectionBadgeItem[\"resource\"]> =>\n isRecord(value) && typeof value.type === \"string\" && typeof value.id === \"string\";\n\nconst normalizeCollectionBadgeItems = (value: unknown): CollectionBadgeItem[] => {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((item) => {\n if (!isRecord(item)) return [];\n const id = textValue(item.id);\n if (!id) return [];\n const label = textValue(item.label) ?? id;\n const icon = textValue(item.icon);\n const resource = isCollectionResource(item.resource) ? item.resource : undefined;\n return [{ id, label, ...(icon ? { icon } : {}), ...(resource ? { resource } : {}) }];\n });\n};\n\nexport const renderBadgeListDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: KanbanRendererRow,\n openResource?: (resource: NonNullable<CollectionBadgeItem[\"resource\"]>) => void,\n): ReactNode => {\n if (descriptor.display?.kind !== \"badge-list\") return null;\n const items = normalizeCollectionBadgeItems(row.attributes[descriptor.display.itemsAttributeId]);\n if (items.length === 0) return null;\n\n const selectedId = typeof value === \"string\" ? value : undefined;\n const selectedItem = items.find((item) => item.id === selectedId) ?? items[0];\n if (!selectedItem) return null;\n\n const orderedItems = [selectedItem, ...items.filter((item) => item.id !== selectedItem.id)];\n return orderedItems.map((item) =>\n createElement(CollectionBadge, {\n key: item.id,\n label: item.label,\n icon: item.icon,\n onClick: item.resource && openResource ? () => openResource(item.resource!) : undefined,\n }),\n );\n};\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (\n descriptor: AttributeDescriptor,\n row: KanbanRendererRow,\n): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render || descriptor.display) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n\n const value = getAttributeValue(row, descriptor);\n const slot = descriptor.render ? descriptor.render(value, row) : renderBadgeListDisplay(descriptor, value, row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: KanbanRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n selectionMode: \"multiple\";\n options: { value: string; label: string; color?: string; icon?: string | null }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: KanbanRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n selectionMode: \"multiple\",\n options: [\n ...declared.map((option) => ({\n value: option.value,\n label: option.label,\n color: option.color,\n icon: option.icon,\n })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, selectionMode: \"multiple\", options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\n/**\n * Source rows keep the unassigned column visible. Only rules on the grouping field\n * limit which columns the filter can still show.\n */\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filter?: ViewFilterGroup,\n structureRows: KanbanRendererRow[] = [],\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor || descriptor.type.kind !== \"enum\") return undefined;\n const keys = getEnumOptions(descriptor.type).map((option) => option.value);\n const empty = emptyGroupKey(descriptor);\n if (structureRows.some((row) => groupKey(row, descriptor) === empty)) keys.push(empty);\n if (filter?.conjunction !== \"and\") return keys;\n const candidates = keys.map((key) => ({\n id: key,\n title: key,\n attributes: key === empty ? {} : { [columnGrouping]: key },\n }));\n return filterRowsByView(\n candidates,\n { conjunction: \"and\", rules: filter.rules.filter((rule) => rule.attributeId === columnGrouping) },\n [descriptor],\n ).map((row) => row.id);\n};\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, List, Settings2, SquareKanban } from \"lucide-react\";\nimport { Fragment, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: KanbanRendererSettings;\n sortControl?: ReactNode;\n groupingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: KanbanRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text paddingX=\"xs\" paddingTop=\"xs\" paddingBottom=\"2xs\" textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nexport interface DisplayMenuSelectProps {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}\n\n/** A Display menu row: the setting's name on the left, its value and a menu on the right. */\nexport const DisplayMenuSelect = (props: DisplayMenuSelectProps) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Menu.Root positioning={{ strategy: \"fixed\", hideWhenDetached: true }}>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"ghost\" width=\"full\" justifyContent=\"flex-start\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{props.label}</Text>\n <HStack marginLeft=\"auto\" minW=\"0\" gap=\"2xs\" color=\"fg.muted\">\n <Text textStyle=\"label/S/regular\" truncate>\n {selectedLabel}\n </Text>\n </HStack>\n <ChevronDown size={12} />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\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 </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (!open) return;\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-end\",\n offset: { mainAxis: 8 },\n getAnchorElement: () => triggerRef.current,\n }}\n onOpenChange={(details) => setOpen(details.open)}\n >\n <Tooltip content=\"Display\">\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"2xs\">\n <Icon as={Settings2} />\n </IconButton>\n </Popover.Trigger>\n </Tooltip>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"18.75rem\" padding=\"xs\" gap=\"1px\">\n <SectionLabel>DISPLAY</SectionLabel>\n <HStack borderRadius=\"sm\" bg=\"bg.subtle\" padding=\"2xs\" gap=\"2xs\">\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"list\"}\n onClick={() => onViewModeChange(\"list\")}\n >\n <List />\n List\n </Button>\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"board\"}\n onClick={() => onViewModeChange(\"board\")}\n >\n <SquareKanban />\n Board\n </Button>\n </HStack>\n\n <DisplayMenuSelect\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n <DisplayMenuSelect\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n {props.sortControl}\n <SectionLabel>PROPERTIES</SectionLabel>\n <HStack paddingX=\"xs\" paddingBottom=\"xs\" flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const active = settings.displayProperties.includes(option.value);\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={active}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Button, Icon } from \"@chakra-ui/react\";\nimport { SearchX, X } from \"lucide-react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\nexport interface CollectionViewEmptyStateProps {\n search: string;\n onClearSearch: () => void;\n}\n\n/** Search feedback offers a direct way back to the collection. */\nexport const CollectionViewEmptyState = (props: CollectionViewEmptyStateProps) => {\n const { search, onClearSearch } = props;\n return (\n <EmptyState\n h=\"full\"\n icon={<Icon as={SearchX} />}\n title={`No results for “${search.trim()}”`}\n description=\"Search looks at the titles and properties this view shows.\"\n >\n <Button size=\"2xs\" variant=\"outline\" onClick={onClearSearch}>\n <X /> Clear search\n </Button>\n </EmptyState>\n );\n};\n","import { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { fieldIcon } from \"./collection-view-field-icon\";\nimport { canSortField, findField } from \"./collection-view-fields\";\nimport { sortDirectionLabel } from \"./collection-view-labels\";\nimport { RuleSelect } from \"./rule-select\";\n\nexport interface DisplaySortControlProps {\n fields: AttributeDescriptor[];\n sorts: ViewSort[];\n onSortsChange: (sorts: ViewSort[]) => void;\n}\n\n/** Display settings and table headers edit the same single sort. */\nexport const DisplaySortControl = (props: DisplaySortControlProps) => {\n const { fields, sorts, onSortsChange } = props;\n const sort = sorts[0];\n const field = sort ? findField(fields, sort.attributeId) : undefined;\n return (\n <Stack data-testid=\"display-sort-control\" gap=\"1px\">\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Ordering\n </Text>\n <RuleSelect\n aria-label=\"Ordering\"\n width=\"9rem\"\n value={sort ? `field:${sort.attributeId}` : \"none\"}\n options={[\n { value: \"none\", label: \"None\" },\n ...fields\n .filter(canSortField)\n .map((entry) => ({ value: `field:${entry.id}`, label: entry.label, icon: fieldIcon(entry) })),\n ]}\n onSelect={(choice) =>\n onSortsChange(\n choice === \"none\" ? [] : [{ attributeId: choice.slice(6), direction: sort?.direction ?? \"asc\" }],\n )\n }\n />\n </HStack>\n {sort ? (\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Direction\n </Text>\n <RuleSelect\n aria-label=\"Sort direction\"\n width=\"9rem\"\n value={sort.direction}\n options={[\n { value: \"asc\", label: sortDirectionLabel(field, \"asc\") },\n { value: \"desc\", label: sortDirectionLabel(field, \"desc\") },\n ]}\n onSelect={(direction) => onSortsChange([{ ...sort, direction: direction as ViewSort[\"direction\"] }])}\n />\n </HStack>\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}
|
|
@@ -71,5 +71,19 @@ interface WorkspaceBadgeProps {
|
|
|
71
71
|
}
|
|
72
72
|
declare const WorkspaceBadge: (props: WorkspaceBadgeProps) => import("react/jsx-runtime").JSX.Element;
|
|
73
73
|
//#endregion
|
|
74
|
-
|
|
74
|
+
//#region src/utils/host-storage.d.ts
|
|
75
|
+
/** Storage the host supplies for saved component state, such as tree customizations and board settings. */
|
|
76
|
+
interface HostStorage {
|
|
77
|
+
getItem: (key: string) => string | null;
|
|
78
|
+
setItem: (key: string, value: string) => void;
|
|
79
|
+
removeItem?: (key: string) => void;
|
|
80
|
+
}
|
|
81
|
+
interface HostStorageProviderProps {
|
|
82
|
+
storage: HostStorage | undefined;
|
|
83
|
+
children: ReactNode;
|
|
84
|
+
}
|
|
85
|
+
/** Hosts can keep saved component state outside the browser origin. Without a storage, components use `localStorage`. */
|
|
86
|
+
declare const HostStorageProvider: (props: HostStorageProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
87
|
+
//#endregion
|
|
88
|
+
export { SessionCompletionStatus as a, resolveSessionIndicatorIcon as c, ResourceActionMenuProps as d, ResourceContextAction as f, WorkspaceBadgeProps as i, sessionCompletionStatuses as l, HostStorageProvider as n, SessionIndicator as o, ResourceContextMenu as p, WorkspaceBadge as r, resolveSessionIndicatorColor as s, HostStorage as t, ResourceActionMenu as u };
|
|
75
89
|
export {};
|
|
@@ -47,19 +47,22 @@ declare function MarkdownEditor(props: MarkdownEditorProps): import("react/jsx-r
|
|
|
47
47
|
//#region src/components/rich-text/lazy-markdown-editor.d.ts
|
|
48
48
|
declare const LazyMarkdownEditor: (props: MarkdownEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
49
|
//#endregion
|
|
50
|
+
//#region src/components/rich-text/prompt-input/plugins/command-menu-plugin.d.ts
|
|
51
|
+
interface PromptCommand {
|
|
52
|
+
name: string;
|
|
53
|
+
description: string;
|
|
54
|
+
argumentHelp?: string;
|
|
55
|
+
disabledReason?: string;
|
|
56
|
+
/** Select local draft intent without inserting native command text. */
|
|
57
|
+
onSelect?: () => void;
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
50
60
|
//#region src/components/rich-text/prompt-input/plugins/ImperativeAPIPlugin.d.ts
|
|
51
61
|
interface PromptEditorRef {
|
|
52
62
|
setEditorValue: (value: string) => void;
|
|
53
63
|
}
|
|
54
64
|
//#endregion
|
|
55
65
|
//#region src/components/rich-text/prompt-input/prompt-input.d.ts
|
|
56
|
-
type ReferenceResourceType = "table" | "connector" | "file";
|
|
57
|
-
type ReferenceItem = {
|
|
58
|
-
resourceId: string;
|
|
59
|
-
resourceType: ReferenceResourceType;
|
|
60
|
-
name: string;
|
|
61
|
-
description?: string;
|
|
62
|
-
};
|
|
63
66
|
interface PromptEditorProps {
|
|
64
67
|
defaultState: string;
|
|
65
68
|
debug?: boolean;
|
|
@@ -70,10 +73,8 @@ interface PromptEditorProps {
|
|
|
70
73
|
onSubmit?: () => void;
|
|
71
74
|
onRecallPrevious?: () => boolean;
|
|
72
75
|
onRecallNext?: () => boolean;
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
-
/** Optional app callback when a reference is inserted */
|
|
76
|
-
onAddReference?: (resourceId: string, resourceType: ReferenceResourceType) => void;
|
|
76
|
+
/** Native command suggestions shown in the slash popover. Selection inserts plain text. */
|
|
77
|
+
commands?: PromptCommand[];
|
|
77
78
|
}
|
|
78
79
|
declare const PromptEditor: import("react").ForwardRefExoticComponent<PromptEditorProps & import("react").RefAttributes<PromptEditorRef>>;
|
|
79
80
|
//#endregion
|
|
@@ -137,8 +138,43 @@ interface ResourceActivityFeedProps extends Omit<StackProps, "children"> {
|
|
|
137
138
|
}
|
|
138
139
|
declare const ResourceActivityFeed: (props: ResourceActivityFeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
139
140
|
//#endregion
|
|
141
|
+
//#region src/components/chat-ui/links/chat-link.d.ts
|
|
142
|
+
interface ChatLinkCandidate {
|
|
143
|
+
source: string;
|
|
144
|
+
origin: "markdown" | "inline-code" | "reference" | "tool";
|
|
145
|
+
}
|
|
146
|
+
interface ChatLinkHandler {
|
|
147
|
+
resolveHref(candidate: ChatLinkCandidate): string | null;
|
|
148
|
+
resolveImageSource?(source: string): Promise<string | null>;
|
|
149
|
+
describe?(candidate: ChatLinkCandidate): string;
|
|
150
|
+
open(candidate: ChatLinkCandidate): void | Promise<void>;
|
|
151
|
+
}
|
|
152
|
+
interface ChatLinkProps {
|
|
153
|
+
linkHandler?: ChatLinkHandler;
|
|
154
|
+
}
|
|
155
|
+
interface ChatSourcePosition {
|
|
156
|
+
line: number;
|
|
157
|
+
column?: number;
|
|
158
|
+
endLine?: number;
|
|
159
|
+
}
|
|
160
|
+
type ParsedChatLink = {
|
|
161
|
+
kind: "file";
|
|
162
|
+
path: string;
|
|
163
|
+
position?: ChatSourcePosition;
|
|
164
|
+
} | {
|
|
165
|
+
kind: "page";
|
|
166
|
+
href: string;
|
|
167
|
+
} | {
|
|
168
|
+
kind: "external";
|
|
169
|
+
href: string;
|
|
170
|
+
} | {
|
|
171
|
+
kind: "invalid";
|
|
172
|
+
reason: string;
|
|
173
|
+
};
|
|
174
|
+
declare const parseChatLink: (candidate: ChatLinkCandidate, dashboardOrigin?: string) => ParsedChatLink | undefined;
|
|
175
|
+
//#endregion
|
|
140
176
|
//#region src/components/rich-text/rich-message/rich-message.d.ts
|
|
141
|
-
interface RichMessageProps {
|
|
177
|
+
interface RichMessageProps extends ChatLinkProps {
|
|
142
178
|
debug?: boolean;
|
|
143
179
|
defaultState: string;
|
|
144
180
|
fullWidth?: boolean;
|
|
@@ -185,5 +221,5 @@ declare function inferResourceTypeFromMediaType(mediaType: string): "image" | "p
|
|
|
185
221
|
//#region src/components/rich-text/utils/mediaType.d.ts
|
|
186
222
|
declare function mediaTypeFromPath(path: string): string | null;
|
|
187
223
|
//#endregion
|
|
188
|
-
export {
|
|
224
|
+
export { PromptCommand as A, ResourceActivityIconName as C, PromptEditor as D, getTextFromSerializedEditorState as E, MarkdownSectionNavigation as F, MarkdownUrlKind as I, MarkdownUrlResolver as L, MarkdownEditor as M, MarkdownEditorProps as N, PromptEditorProps as O, MarkdownSectionAnchor as P, CollaborativeMarkdownEditor as R, ResourceActivityFeedSize as S, generateEditorStateFromString as T, ResourceActivityFeedAttention as _, DefaultRichTextCodeEditor as a, ResourceActivityFeedMessageItem as b, DataTableProps as c, ChatLinkCandidate as d, ChatLinkHandler as f, ResourceActivityFeedAction as g, ResourceActivityFeed as h, ResourceType as i, LazyMarkdownEditor as j, PromptEditorRef as k, RichMessage as l, parseChatLink as m, inferResourceTypeFromMediaType as n, DefaultRichTextDataTable as o, ChatLinkProps as p, Resource as r, CodeEditorProps as s, mediaTypeFromPath as t, RichMessageProps as u, ResourceActivityFeedEventItem as v, ResourceActivityRelatedResource as w, ResourceActivityFeedProps as x, ResourceActivityFeedItem as y, CollaborativeMarkdownEditorProps as z };
|
|
189
225
|
export {};
|