@pstdio/ui 0.40.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/{MermaidComponent-81jr28u4.js → MermaidComponent-D7vhkpka.js} +3 -3
  2. package/dist/{MermaidComponent-81jr28u4.js.map → MermaidComponent-D7vhkpka.js.map} +1 -1
  3. package/dist/alert-MQ47wy7f.js +388 -0
  4. package/dist/alert-MQ47wy7f.js.map +1 -0
  5. package/dist/chat-ui.d.ts +129 -23
  6. package/dist/chat-ui.js +2596 -1591
  7. package/dist/chat-ui.js.map +1 -1
  8. package/dist/{types-DWA3enV6.d.ts → collection-view-fields-D3cysHNT.d.ts} +87 -37
  9. package/dist/collection-view-grouping-D4nZk8-3.js +90 -0
  10. package/dist/collection-view-grouping-D4nZk8-3.js.map +1 -0
  11. package/dist/collection-view-search-CpjJy76w.js +1973 -0
  12. package/dist/collection-view-search-CpjJy76w.js.map +1 -0
  13. package/dist/collection-view.d.ts +4 -0
  14. package/dist/collection-view.js +2 -0
  15. package/dist/{data-table-stats-row-CpRe_xK2.js → data-table-stats-row-64magT2g.js} +2 -2
  16. package/dist/{data-table-stats-row-CpRe_xK2.js.map → data-table-stats-row-64magT2g.js.map} +1 -1
  17. package/dist/data-table.d.ts +29 -7
  18. package/dist/data-table.js +1043 -878
  19. package/dist/data-table.js.map +1 -1
  20. package/dist/diff-bubble-DewUd_2w.js +61 -0
  21. package/dist/diff-bubble-DewUd_2w.js.map +1 -0
  22. package/dist/{diff-drawer-45rpk3aq.js → diff-drawer-IYpQ-QQK.js} +264 -242
  23. package/dist/diff-drawer-IYpQ-QQK.js.map +1 -0
  24. package/dist/diff-viewer-C-0VAt9P.js +574 -0
  25. package/dist/diff-viewer-C-0VAt9P.js.map +1 -0
  26. package/dist/diff.d.ts +11 -0
  27. package/dist/diff.js +107 -98
  28. package/dist/diff.js.map +1 -1
  29. package/dist/display-sort-control-f3rbILsV.js +588 -0
  30. package/dist/display-sort-control-f3rbILsV.js.map +1 -0
  31. package/dist/drop-indicator-HjlBSIeV.js +27 -0
  32. package/dist/drop-indicator-HjlBSIeV.js.map +1 -0
  33. package/dist/edit-mode-data-table-DnMB2jiy.js +1449 -0
  34. package/dist/edit-mode-data-table-DnMB2jiy.js.map +1 -0
  35. package/dist/host-storage-BIo5azql.js +31 -0
  36. package/dist/host-storage-BIo5azql.js.map +1 -0
  37. package/dist/host-storage-J0089Hyk.d.ts +17 -0
  38. package/dist/{slider-hwHYe98I.js → icon-options-Tt6Wzhtv.js} +86 -201
  39. package/dist/icon-options-Tt6Wzhtv.js.map +1 -0
  40. package/dist/{index-Bfddrlz8.d.ts → index-B79hwNcB.d.ts} +66 -14
  41. package/dist/index-CKsd23jv.d.ts +80 -0
  42. package/dist/{index-CbtbcvKm.d.ts → index-DlmvvQ6x.d.ts} +1 -1
  43. package/dist/index-ICoad2I_.d.ts +282 -0
  44. package/dist/index.d.ts +63 -22
  45. package/dist/index.js +1149 -1054
  46. package/dist/index.js.map +1 -1
  47. package/dist/kanban-renderer.d.ts +3 -326
  48. package/dist/kanban-renderer.js +980 -596
  49. package/dist/kanban-renderer.js.map +1 -1
  50. package/dist/list-row-Z4SHkseA.js +1195 -0
  51. package/dist/list-row-Z4SHkseA.js.map +1 -0
  52. package/dist/markdown-editor-Dd4mor7l.js +3236 -0
  53. package/dist/markdown-editor-Dd4mor7l.js.map +1 -0
  54. package/dist/{mermaid-renderer-DImi0fDp.js → mermaid-renderer-0PmNkOXI.js} +29 -29
  55. package/dist/mermaid-renderer-0PmNkOXI.js.map +1 -0
  56. package/dist/mermaid.js +1 -1
  57. package/dist/number-input-7K66wnSC.js +63 -0
  58. package/dist/number-input-7K66wnSC.js.map +1 -0
  59. package/dist/{param-editor-BQd4AOUP.js → param-editor-Dnix-fJo.js} +2 -2
  60. package/dist/{param-editor-BQd4AOUP.js.map → param-editor-Dnix-fJo.js.map} +1 -1
  61. package/dist/{param-editor-field-BJ_rLUnV.js → param-editor-field-B3vLST-B.js} +1436 -1427
  62. package/dist/param-editor-field-B3vLST-B.js.map +1 -0
  63. package/dist/param-editor.js +4 -3
  64. package/dist/prism-OG4H7Hu4.js +334 -0
  65. package/dist/prism-OG4H7Hu4.js.map +1 -0
  66. package/dist/queued-follow-up-Bj_vtMgd.js +208 -0
  67. package/dist/queued-follow-up-Bj_vtMgd.js.map +1 -0
  68. package/dist/{resource-badge-95WPVlZf.d.ts → resource-badge-nOWPqxFU.d.ts} +1 -0
  69. package/dist/rich-text-BgEnAHr2.js +1160 -0
  70. package/dist/rich-text-BgEnAHr2.js.map +1 -0
  71. package/dist/rich-text.d.ts +2 -2
  72. package/dist/rich-text.js +4 -2
  73. package/dist/style.css +1 -1
  74. package/dist/terminal.d.ts +5 -63
  75. package/dist/terminal.js +102 -122
  76. package/dist/terminal.js.map +1 -1
  77. package/dist/{theme-CbmSEbRF.js → theme-CMJdH59Z.js} +589 -265
  78. package/dist/theme-CMJdH59Z.js.map +1 -0
  79. package/dist/theme-kKuLN2jb.js +80 -0
  80. package/dist/theme-kKuLN2jb.js.map +1 -0
  81. package/dist/theme-preference-BV4cbJNB.js +115 -0
  82. package/dist/theme-preference-BV4cbJNB.js.map +1 -0
  83. package/dist/theme.js +3 -2
  84. package/dist/tree-list-jarhD31R.js +1652 -0
  85. package/dist/tree-list-jarhD31R.js.map +1 -0
  86. package/dist/use-virtualizer-uj43XjBp.js +10 -0
  87. package/dist/use-virtualizer-uj43XjBp.js.map +1 -0
  88. package/dist/{workspace-badge-Brm3Xr3m.d.ts → workspace-badge-BKtB805G.d.ts} +5 -1
  89. package/package.json +8 -4
  90. package/dist/diff-bubble-DZsarmSG.js +0 -61
  91. package/dist/diff-bubble-DZsarmSG.js.map +0 -1
  92. package/dist/diff-drawer-45rpk3aq.js.map +0 -1
  93. package/dist/diff-viewer-BP_mI6Wx.js +0 -558
  94. package/dist/diff-viewer-BP_mI6Wx.js.map +0 -1
  95. package/dist/list-row-uqD-q4gv.js +0 -1018
  96. package/dist/list-row-uqD-q4gv.js.map +0 -1
  97. package/dist/mermaid-renderer-DImi0fDp.js.map +0 -1
  98. package/dist/param-editor-field-BJ_rLUnV.js.map +0 -1
  99. package/dist/prism-BStPsJSB.js +0 -658
  100. package/dist/prism-BStPsJSB.js.map +0 -1
  101. package/dist/rich-text-VYAmEigU.js +0 -6979
  102. package/dist/rich-text-VYAmEigU.js.map +0 -1
  103. package/dist/slider-hwHYe98I.js.map +0 -1
  104. package/dist/theme-CbmSEbRF.js.map +0 -1
  105. package/dist/theme-preference-pzfuK5cH.js +0 -101
  106. package/dist/theme-preference-pzfuK5cH.js.map +0 -1
  107. package/dist/tree-list-BNZwjQZA.js +0 -1616
  108. package/dist/tree-list-BNZwjQZA.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-sort-control-f3rbILsV.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","toTitleCase","findAttribute","getEnumOptions","NO_GROUPING","getAttributeValue","enumOptionLabel","RuleSelect","fieldIcon","getAttributeStringValues","findField","sortDirectionLabel","findEnumOption","groupKey","emptyGroupKey","Fragment$1","lucideIcons","toPascalCase","value","part","resolveIcon","name","pascalName","candidate","component","CollectionBadge","$","c","props","t0","icon","BadgeIcon","t1","Icon","t2","label","Text","t3","Fragment","content","t4","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","filterRowsByView","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","canSortField","_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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"}
@@ -0,0 +1,27 @@
1
+ import { Box as e } from "@chakra-ui/react";
2
+ import { c as t } from "react/compiler-runtime";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ //#region src/components/primitives/drop-indicator.tsx
5
+ var r = (r) => {
6
+ let i = t(8), a, o;
7
+ i[0] === r ? (a = i[1], o = i[2]) : ({orientation: o, ...a} = r, i[0] = r, i[1] = a, i[2] = o);
8
+ let s = o === void 0 ? "horizontal" : o, c;
9
+ i[3] === s ? c = i[4] : (c = s === "vertical" ? {
10
+ insetY: "0",
11
+ w: "drop-indicator"
12
+ } : {
13
+ insetX: "0",
14
+ h: "drop-indicator"
15
+ }, i[3] = s, i[4] = c);
16
+ let l;
17
+ return i[5] !== a || i[6] !== c ? (l = /* @__PURE__ */ n(e, {
18
+ "aria-hidden": !0,
19
+ layerStyle: "dropIndicator",
20
+ ...c,
21
+ ...a
22
+ }), i[5] = a, i[6] = c, i[7] = l) : l = i[7], l;
23
+ };
24
+ //#endregion
25
+ export { r as t };
26
+
27
+ //# sourceMappingURL=drop-indicator-HjlBSIeV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-indicator-HjlBSIeV.js","names":["Box","BoxProps","DropIndicatorProps","orientation","DropIndicator","props","$","_c","rest","t0","undefined","t1","insetY","w","insetX","h","t2","_c","DropIndicator","$","c","rest","t0","props","orientation","t1","t2","Box"],"sources":["../src/components/primitives/drop-indicator.tsx"],"sourcesContent":["import { Box, type BoxProps } from \"@chakra-ui/react\";\n\ninterface DropIndicatorProps extends BoxProps {\n orientation?: \"horizontal\" | \"vertical\";\n}\nexport const DropIndicator = (props: DropIndicatorProps) => {\n const { orientation = \"horizontal\", ...rest } = props;\n return (\n <Box\n aria-hidden\n layerStyle=\"dropIndicator\"\n {...(orientation === \"vertical\" ? { insetY: \"0\", w: \"drop-indicator\" } : { insetX: \"0\", h: \"drop-indicator\" })}\n {...rest}\n />\n );\n};\n"],"mappings":";;;;AAKA,IAAaI,KAAgBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC,GAAAC;CAAA,AAAAH,EAAA,OAAAD,KAC2BG,IAAAF,EAAA,IAAAG,IAAAH,EAAA,OAAtD,CAAAH,aAAAM,GAAA,GAAAD,KAAgDH,GAAMC,EAAA,KAAAD,GAAAC,EAAA,KAAAE,GAAAF,EAAA,KAAAG;CAA9C,IAAAN,IAAAM,MAAAC,KAAAA,IAAA,eAAAD,GAA0BE;CAAA,AAAAL,EAAA,OAAAH,IAK+EQ,IAAAL,EAAA,MAAxGK,IAAAR,MAAgB,aAAhB;EAAAS,QAAuC;EAAGC,GAAK;CAAwD,IAAvG;EAAAC,QAA8E;EAAGC,GAAK;CAAiB,GAACT,EAAA,KAAAH,GAAAG,EAAA,KAAAK;CAAA,IAAAK;CAE7G,OAF6GV,EAAA,OAAAE,KAAAF,EAAA,OAAAK,KAH/GK,IAAA,kBAACW,GAAD;EACE,eAAA;EACW,YAAA;EAAe,GACrBhB;EAAwG,GACzGH;CAAI,CAAA,GACRF,EAAA,KAAAE,GAAAF,EAAA,KAAAK,GAAAL,EAAA,KAAAU,KAAAA,IAAAV,EAAA,IALFU;AAKE"}