@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.
Files changed (82) hide show
  1. package/dist/{MermaidComponent-81jr28u4.js → MermaidComponent-BCiI63_G.js} +3 -3
  2. package/dist/{MermaidComponent-81jr28u4.js.map → MermaidComponent-BCiI63_G.js.map} +1 -1
  3. package/dist/chat-question-bubble-w2vMbFsS.js +68 -0
  4. package/dist/chat-question-bubble-w2vMbFsS.js.map +1 -0
  5. package/dist/chat-ui.d.ts +94 -17
  6. package/dist/chat-ui.js +2240 -1476
  7. package/dist/chat-ui.js.map +1 -1
  8. package/dist/{data-table-stats-row-CpRe_xK2.js → data-table-stats-row-EiTEONdY.js} +2 -2
  9. package/dist/{data-table-stats-row-CpRe_xK2.js.map → data-table-stats-row-EiTEONdY.js.map} +1 -1
  10. package/dist/data-table.d.ts +27 -7
  11. package/dist/data-table.js +1035 -872
  12. package/dist/data-table.js.map +1 -1
  13. package/dist/diff-bubble-DewUd_2w.js +61 -0
  14. package/dist/diff-bubble-DewUd_2w.js.map +1 -0
  15. package/dist/{diff-drawer-45rpk3aq.js → diff-drawer-BwZBOObe.js} +106 -85
  16. package/dist/diff-drawer-BwZBOObe.js.map +1 -0
  17. package/dist/diff-viewer-kOOd7C7h.js +574 -0
  18. package/dist/diff-viewer-kOOd7C7h.js.map +1 -0
  19. package/dist/diff.d.ts +11 -0
  20. package/dist/diff.js +107 -98
  21. package/dist/diff.js.map +1 -1
  22. package/dist/display-sort-control-DPxc0e5z.js +587 -0
  23. package/dist/display-sort-control-DPxc0e5z.js.map +1 -0
  24. package/dist/{workspace-badge-Brm3Xr3m.d.ts → host-storage-DP0RLj4i.d.ts} +15 -1
  25. package/dist/{index-BfFLdci8.d.ts → index-C9mywhyX.d.ts} +49 -13
  26. package/dist/index-D3UJyWWh.d.ts +501 -0
  27. package/dist/index.d.ts +38 -13
  28. package/dist/index.js +941 -908
  29. package/dist/index.js.map +1 -1
  30. package/dist/kanban-renderer.d.ts +2 -326
  31. package/dist/kanban-renderer.js +991 -610
  32. package/dist/kanban-renderer.js.map +1 -1
  33. package/dist/list-row-DM0DiIrN.js +1167 -0
  34. package/dist/list-row-DM0DiIrN.js.map +1 -0
  35. package/dist/{mermaid-renderer-DImi0fDp.js → mermaid-renderer-0PmNkOXI.js} +29 -29
  36. package/dist/mermaid-renderer-0PmNkOXI.js.map +1 -0
  37. package/dist/mermaid.js +1 -1
  38. package/dist/param-editor.js +2 -3
  39. package/dist/prism-JVIsQMoJ.js +1029 -0
  40. package/dist/prism-JVIsQMoJ.js.map +1 -0
  41. package/dist/{resource-badge-95WPVlZf.d.ts → resource-badge-nOWPqxFU.d.ts} +1 -0
  42. package/dist/rich-text-DM24VNQZ.js +10447 -0
  43. package/dist/rich-text-DM24VNQZ.js.map +1 -0
  44. package/dist/rich-text.d.ts +2 -2
  45. package/dist/rich-text.js +2 -2
  46. package/dist/style.css +1 -1
  47. package/dist/terminal.d.ts +5 -63
  48. package/dist/terminal.js +102 -122
  49. package/dist/terminal.js.map +1 -1
  50. package/dist/{theme-BsOWAIi2.js → theme-at0rtSnX.js} +441 -246
  51. package/dist/theme-at0rtSnX.js.map +1 -0
  52. package/dist/theme-kKuLN2jb.js +80 -0
  53. package/dist/theme-kKuLN2jb.js.map +1 -0
  54. package/dist/theme-preference-BV4cbJNB.js +115 -0
  55. package/dist/theme-preference-BV4cbJNB.js.map +1 -0
  56. package/dist/theme.js +3 -2
  57. package/dist/{tree-list-WhISG-cz.js → tree-list-Cqgl8mnN.js} +400 -377
  58. package/dist/tree-list-Cqgl8mnN.js.map +1 -0
  59. package/package.json +4 -4
  60. package/dist/diff-bubble-DZsarmSG.js +0 -61
  61. package/dist/diff-bubble-DZsarmSG.js.map +0 -1
  62. package/dist/diff-drawer-45rpk3aq.js.map +0 -1
  63. package/dist/diff-viewer-DJ1B5hxL.js +0 -558
  64. package/dist/diff-viewer-DJ1B5hxL.js.map +0 -1
  65. package/dist/list-row-uqD-q4gv.js +0 -1018
  66. package/dist/list-row-uqD-q4gv.js.map +0 -1
  67. package/dist/mermaid-renderer-DImi0fDp.js.map +0 -1
  68. package/dist/param-editor-BQd4AOUP.js +0 -225
  69. package/dist/param-editor-BQd4AOUP.js.map +0 -1
  70. package/dist/param-editor-field-BJ_rLUnV.js +0 -2385
  71. package/dist/param-editor-field-BJ_rLUnV.js.map +0 -1
  72. package/dist/prism-BStPsJSB.js +0 -658
  73. package/dist/prism-BStPsJSB.js.map +0 -1
  74. package/dist/rich-text-VYAmEigU.js +0 -6979
  75. package/dist/rich-text-VYAmEigU.js.map +0 -1
  76. package/dist/slider-hwHYe98I.js +0 -423
  77. package/dist/slider-hwHYe98I.js.map +0 -1
  78. package/dist/theme-BsOWAIi2.js.map +0 -1
  79. package/dist/theme-preference-pzfuK5cH.js +0 -101
  80. package/dist/theme-preference-pzfuK5cH.js.map +0 -1
  81. package/dist/tree-list-WhISG-cz.js.map +0 -1
  82. package/dist/types-DWA3enV6.d.ts +0 -182
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-renderer.js","names":["KanbanRendererSettings","MANUAL_ORDERING","NO_GROUPING","ApplyBoardMoveItemInput","settings","Pick","rowId","targetColumnId","targetGroupKey","beforeItemId","onAttributeChange","attributeId","value","Promise","onReorder","beforeRowId","ApplyBoardMoveToGroupInput","applyBoardMoveItem","input","columnGrouping","rowGrouping","ordering","applyBoardMoveToGroup","Badge","HStack","Icon","IconButton","Menu","Spacer","Text","MoreHorizontal","Plus","ListRow","getIconComponent","Tooltip","KanbanRendererBoardColumn","ColumnHeaderProps","column","onCreateStart","columnId","onColumnAction","actionId","Promise","ColumnHeader","props","$","_c","t0","color","t1","icon","t2","t3","label","t4","items","length","t5","Symbol","for","t6","canCreate","createLabel","id","t7","actions","map","action","t8","_c","Tooltip","Badge","Icon","Menu","Portal","Check","ChevronDown","Square","SquareCheck","ListRow","getIconComponent","AttributeBadge","KanbanRendererAttributeBadgeProps","badge","onChange","attributeId","value","stopRowActivation","event","stopPropagation","getSelectedValues","Array","isArray","toggleMultiValue","values","optionValue","includes","filter","badgeStyleProps","bg","_light","_dark","color","_hover","const","getBadgeIconColor","selectionIcon","input","isMultiValue","isSelected","KanbanRendererAttributeBadge","props","$","_c","T0","T1","T2","T3","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","Symbol","for","bb0","options","canEdit","Boolean","isEditable","length","selectedValues","t10","onClick","onPointerDown","onKeyDown","rowInteractionProps","handleOptionChange","nextValue","t11","icon","t12","t13","label","badgeContent","t14","Root","Positioner","Content","map","option","_c","_Fragment","HStack","Stack","Text","Wrap","DragEventHandler","MouseEvent","ReactNode","WorkspaceBadgeProps","WorkspaceBadge","KanbanRendererAttributeBadge","AttributeBadge","KanbanRendererCardProps","eyebrow","title","badges","customSlots","workspaceBadge","isSelected","draggable","onBadgeChange","attributeId","value","onDragStart","HTMLDivElement","onDragEnd","onClick","KanbanRendererCard","props","$","_c","t0","t1","t2","t3","undefined","t4","hasBadges","length","cursor","t5","event","defaultPrevented","target","Node","currentTarget","contains","handleClick","t6","t7","t8","borderColor","t9","t10","t11","t12","t13","map","badge","t14","_c","Badge","Box","HStack","Icon","Stack","Text","ChevronRight","DragEvent","useState","ResourceContextMenu","KanbanRendererBoardGroup","KanbanRendererCard","GroupSectionProps","columnId","group","selectedItemId","canDragIn","canDragOut","isDropTarget","onDragStart","itemId","event","HTMLDivElement","onDragEnd","onGroupDragOver","onGroupDragLeave","onGroupDrop","beforeItemId","GroupSection","props","$","_c","expanded","setExpanded","t0","t1","undefined","t2","t3","t4","Symbol","for","bg","t5","_temp","t6","t7","t8","label","t9","items","length","t10","t11","map","item","id","contextMenuActions","_temp2","event_0","preventDefault","stopPropagation","dataTransfer","getData","cardProps","t12","key","value","dropEffect","_c","_temp","_temp2","Box","Stack","ComponentProps","ComponentType","DragEvent","useState","ResourceContextAction","ResourceContextMenu","ScrollArea","ColumnHeader","GroupSection","KanbanRendererCard","KanbanRendererCardProps","KanbanRendererBoardItem","id","cardProps","Omit","contextMenuActions","KanbanRendererBoardColumnAction","label","icon","size","KanbanRendererBoardGroup","key","items","KanbanRendererBoardColumn","createLabel","color","groups","canDragIn","canDragOut","canCreate","actions","KanbanRendererBoardProps","columns","selectedItemId","onMoveItem","itemId","targetColumnId","context","beforeItemId","targetGroupKey","Promise","onMoveToGroup","onCreateStart","columnId","onColumnAction","actionId","KanbanRendererBoard","props","$","_c","t0","undefined","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","_temp","t1","Symbol","for","handleDragEnd","t2","event_0","event","preventDefault","dataTransfer","dropEffect","handleDragOver","t3","event_1","currentTarget","contains","relatedTarget","Node","handleDragLeave","t4","columnId_0","event_2","itemId_0","getData","handleDrop","t5","display","alignItems","gap","padding","minH","t6","t7","column","margin","spaceY","length","map","group","groupId","event_3","stopPropagation","event_4","event_5","itemId_1","item","event_6","event_7","itemId_2","setData","effectAllowed","_c","_temp","ScrollArea","Box","HStack","Icon","Text","Wrap","ComponentType","DragEvent","ReactNode","useState","ResourceContextAction","ListRow","ListRowItem","KanbanRendererAttributeBadge","AttributeBadge","KanbanRendererListItem","id","eyebrow","title","isGroup","countBadge","countColorPalette","statusIcon","size","statusColor","statusColorPalette","badges","customSlots","children","onClick","onBadgeChange","attributeId","value","contextMenuActions","draggable","onDropRow","rowId","KanbanRendererListExpandedState","Record","KanbanRendererListProps","items","selectedItemId","expandedGroups","onItemClick","item","onExpandedGroupChange","isExpanded","INDENT_STEP_PX","FlattenedKanbanRendererListItem","depth","canExpand","getKanbanRendererListIndentation","undefined","flattenKanbanRendererListItems","expanded","rows","length","push","getRowIsExpanded","getDropTargetIndicatorProps","isDropTarget","_before","content","position","bg","left","top","width","height","const","expandedState","updateExpandedState","renderLabel","renderEndContent","hasBadges","map","badge","buildListRowItem","hasChildren","label","icon","endContent","isContainer","contextMenuItems","action","key","disabled","isDisabled","separatorBefore","onAction","KanbanRendererList","props","$","_c","t0","t1","Symbol","for","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","T0","t2","t3","current","handleExpandedChange","t4","row","KanbanRendererListRowProps","onDraggedItemChange","itemId","onDropTargetChange","onExpandedChange","KanbanRendererListRow","isSelected","canDropHere","Boolean","rowItem","toggleExpanded","handleActivate","event","stopPropagation","dataTransfer","setData","effectAllowed","handleDragStart","event_0","preventDefault","dropEffect","handleDragOver","t5","event_1","currentTarget","contains","relatedTarget","Node","handleDragLeave","t6","event_2","draggedId","getData","handleDrop","t7","handleDragEnd","t8","t9","t10","t11","t12","t13","t14","t15","t16","_c","Box","ReactNode","EmptyState","KanbanRendererBoard","KanbanRendererBoardColumn","KanbanRendererList","KanbanRendererListItem","KanbanRendererSettings","KanbanRendererEmptyStateProps","emptyState","title","description","height","KanbanRendererContentProps","viewMode","boardColumns","listItems","listExpandedGroups","Record","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","rowId","targetColumnId","context","beforeItemId","targetGroupKey","Promise","onBoardMoveToGroup","onCreateRow","columnId","onColumnAction","actionId","onListExpandedGroupChange","isExpanded","listKey","KanbanRendererEmptyState","props","$","_c","undefined","t0","KanbanRendererContent","length","_c","EmptyState","Box","HStack","Stack","Text","VStack","InputGroup","Param","ParamValue","ParamValueMap","ResourceRefValue","ParamEditorField","isParamEditorHorizontalControl","isParamEditorRichControl","ParamEditorHorizontalProps","params","groups","defaultValues","onChange","id","value","onOpenResource","ref","readOnly","variant","HorizontalGroupProps","group","renderParam","param","React","ReactNode","width","HorizontalGroupTitle","props","$","_c","children","t0","HorizontalGroup","undefined","t1","title","t2","t3","t4","t5","map","t6","t7","ParamEditorHorizontal","T0","t8","t9","horizontalParams","filter","horizontalGroups","_temp","t10","compactParams","_temp2","richParams","compactGroups","_temp4","_temp5","richGroups","_temp6","_temp7","gap","hasCompactControls","length","t11","group_2","groupParams_1","groupParams","t12","param_2","t13","t14","group_3","groupParams_2","param_0","_temp3","param_1","group_0","group_1","groupParams_0","_c","_temp","_temp2","_temp4","_temp5","_temp3","Button","Icon","Input","Stack","Text","Textarea","Wrap","Paperclip","useRef","AttachmentChip","SelectionInput","LazyMarkdownEditor","KanbanRendererCreateField","MarkdownControl","props","$","_c","disabled","field","onChange","t0","defaultValue","t1","t2","next","t3","placeholder","FilesControl","removeLabel","value","input","Array","isArray","File","files","multiple","event","picked","from","target","slice","accept","t4","t5","Symbol","for","current","click","t6","label","t7","length","map","file","index","name","toString","filter","_","itemIndex","t8","CreateFieldControlProps","FieldInput","type","id","description","options","_temp","required","t9","t10","event_0","Number","CreateFieldControl","option","icon","undefined","color","_c","_temp","Button","CloseButton","Dialog","HStack","Stack","Text","useEffect","useRef","useState","handleDialogAcceptShortcut","Param","ParamValueMap","ParamEditorHorizontal","CreateFieldControl","getEnumOptions","AttributeDescriptor","KanbanRendererCreateField","KanbanRendererCreateRowConfig","KanbanRendererCreateSubmission","KanbanRendererCreateDialogProps","open","columnId","columnAttributeId","attributes","config","onClose","onSubmit","submission","Promise","emptyValue","field","type","initialFieldValues","fields","Object","fromEntries","map","id","defaultValue","isFilled","value","required","Array","isArray","length","trim","undefined","editableCreateAttributes","filter","attribute","editable","initialAttributeValues","kind","attributeToParam","locked","base","name","label","description","multiSelect","placeholder","clearable","disabled","options","option","icon","color","singleLine","KanbanRendererCreateDialog","props","values","setValues","Record","attributeValues","setAttributeValues","submitting","setSubmitting","error","setError","resetToken","setResetToken","initializedRef","editableAttributes","current","token","seeded","declared","Set","kept","entries","has","added","keys","close","valid","every","submit","fileFieldIds","files","flatMap","File","declaredValues","caught","Error","message","labels","submitError","details","event","title","toString","removeFile","properties","attributeId","cancel","submitLabel","ResourceContextAction","getIconComponent","KanbanRendererColumnGroup","orderRows","collectDisplayBadges","collectDisplayCustomSlots","findEnumOption","resolveListDropTargetColumnKey","KanbanRendererListItem","AttributeDescriptor","KanbanRendererRow","KanbanRendererSettings","findAttribute","MANUAL_ORDERING","NO_GROUPING","BuildKanbanRendererListItemsInput","settings","visibleRows","TRow","grouped","attributes","onRowClick","row","onAttributeChange","rowId","attributeId","value","Promise","onReorder","beforeRowId","getRowContextMenuActions","buildKanbanRendererListItems","input","supportsManualReorder","ordering","listDisplayProperties","displayProperties","filter","property","getStatusPresentation","key","descriptor","option","type","undefined","statusColorPalette","color","statusIcon","icon","getRowStatusPresentation","status","toListItem","placement","columnKey","rowKey","shorthand","id","eyebrow","title","badges","customSlots","contextMenuActions","onClick","onBadgeChange","draggable","Boolean","onDropRow","draggedId","targetColumnKey","columnGrouping","rowGrouping","toGroupListItem","group","label","rows","parent","groupingAttributeId","isGroup","countBadge","length","children","map","column","subgroups","Stack","ReactNode","useState","ResourceContextAction","KanbanRendererBoardColumn","KanbanRendererBoardColumnAction","KanbanRendererBoardGroup","applyBoardMoveItem","applyBoardMoveToGroup","KanbanRendererContent","KanbanRendererCreateDialog","filterRows","groupRows","orderRows","collectDisplayBadges","collectDisplayCustomSlots","findEnumOption","resolveKnownColumnKeys","buildKanbanRendererListItems","KanbanRendererToolbar","AttributeDescriptor","KanbanRendererCreateRowConfig","KanbanRendererCreateSubmission","KanbanRendererFilterState","KanbanRendererRow","KanbanRendererSavedView","KanbanRendererSettings","KanbanRendererViewsSource","findAttribute","NO_GROUPING","useKanbanRendererStore","useKanbanViews","useResolvedAttributes","BoardColumnConfig","color","canDragIn","canDragOut","canCreate","actions","KanbanRendererProps","rows","TRow","storageKey","attributes","selectedRowId","emptyState","emptyTitle","emptyDescription","contentPlaceholder","defaultSettings","Partial","defaultFilters","viewsSource","defaultViews","defaultActiveViewId","hideToolbar","toolbarActions","toolbarLeading","onRowClick","row","onAttributeChange","rowId","attributeId","value","Promise","onReorder","beforeRowId","createRow","onCreateRow","submission","onColumnAction","columnId","actionId","getBoardColumnConfig","groupKey","getRowContextMenuActions","rowEyebrow","shorthand","id","KanbanRenderer","props","$","_c","rawAttributes","t0","t1","t2","t3","undefined","createColumnId","setCreateColumnId","t4","settings","filters","initialState","_temp","_temp2","expandedGroups","_temp3","setExpandedGroup","_temp4","listItems","t5","visibleRows","knownColumnKeys","columnGrouping","grouped","rowGrouping","cardDisplayProperties","displayProperties","filter","_temp5","toBoardItems","boardRows","map","contextMenuActions","cardProps","eyebrow","includes","title","badges","customSlots","onBadgeChange","onClick","columnGroupingDescriptor","column","columnConfig","key","orderedRows","ordering","enumOption","type","groups","subgroups","length","subgroup","label","items","icon","boardColumns","t6","targetColumnId","context","targetGroupKey","beforeItemId","handleBoardMoveItem","t7","rowId_0","context_0","handleBoardMoveToGroup","t8","t9","viewMode","t10","t11","state","state_0","state_1","state_2","property","_c","Tooltip$1","ResourceContextMenu","ListRow","getIconComponent","AttachmentChip","WorkspaceBadge","EmptyState$1","buildGroupingOptions","KanbanRendererToolbar","groupRows","useResolvedAttributes","DisplayMenu","orderRows","buildFilterCategories","useKanbanViews","resolveAttributeOptions","filterRows","KanbanRendererStorageProvider","useKanbanRendererStore","buildDisplayPropertyOptions","isAttributesSource","renderAttributeBadge","resolveListDropTargetColumnKey","findEnumOption","buildOrderingOptions","getEnumOptions","findAttribute","NO_GROUPING","getAttributeValue","sanitizeFilters","MANUAL_ORDERING","collectDisplayCustomSlots","renderBadgeListDisplay","LazyMarkdownEditor","DEFAULT_KANBAN_RENDERER_SETTINGS","FilterMenu","getAttributeStringValues","resolveKnownColumnKeys","collectDisplayBadges","sanitizeSettings","isEnumOptionsSource","SelectionInput","isParamEditorRichControl","isParamEditorHorizontalControl","ParamEditorField","applyBoardMoveItem","input","settings","onAttributeChange","rowId","targetColumnId","targetGroupKey","onReorder","beforeItemId","applyBoardMoveToGroup","ColumnHeader","$","c","props","t0","column","t1","t2","Icon","t3","Text","t4","Badge","t5","Spacer","t6","onCreateStart","IconButton","Plus","t7","onColumnAction","Menu","MoreHorizontal","action","t8","HStack","stopRowActivation","event","getSelectedValues","badge","toggleMultiValue","values","optionValue","value","badgeStyleProps","getBadgeIconColor","selectionIcon","SquareCheck","Square","Check","KanbanRendererAttributeBadge","T0","T1","T2","T3","t9","onChange","options","canEdit","isMultiValue","selectedValues","t10","rowInteractionProps","handleOptionChange","nextValue","t11","t12","ChevronDown","t13","Fragment","badgeContent","t14","Portal","isSelected","option","KanbanRendererCard","badges","customSlots","hasBadges","cursor","draggable","onClick","handleClick","eyebrow","workspaceBadge","title","onBadgeChange","Wrap","onDragEnd","onDragStart","Stack","GroupSection","expanded","setExpanded","useState","isDropTarget","canDragIn","onGroupDragOver","onGroupDragLeave","onGroupDrop","_temp$4","Box","ChevronRight","group","canDragOut","selectedItemId","item","_temp2$2","event_0","itemId","columnId","KanbanRendererBoard","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","_temp$3","handleDragEnd","handleDragOver","event_1","handleDragLeave","onMoveItem","event_2","itemId_0","columnId_0","handleDrop","columns","onMoveToGroup","ScrollArea$1","groupId","event_3","event_4","event_5","itemId_1","event_6","event_7","itemId_2","flattenKanbanRendererListItems","rows","items","canExpand","getRowIsExpanded","depth","getDropTargetIndicatorProps","isGroup","expandedState","updateExpandedState","isExpanded","renderLabel","renderEndContent","buildListRowItem","hasChildren","KanbanRendererList","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","expandedGroups","onExpandedGroupChange","onItemClick","current","handleExpandedChange","KanbanRendererListRow","row","canDropHere","rowItem","onExpandedChange","toggleExpanded","handleActivate","onDraggedItemChange","onDropTargetChange","draggedId","t15","t16","KanbanRendererEmptyState","emptyState","height","description","KanbanRendererContent","viewMode","boardColumns","emptyDescription","emptyTitle","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","selectedRowId","listItems","listExpandedGroups","listKey","onListExpandedGroupChange","HorizontalGroupTitle","children","HorizontalGroup","width","variant","params","renderParam","VStack","ParamEditorHorizontal","defaultValues","onOpenResource","readOnly","groups","horizontalParams","horizontalGroups","_temp$2","param","compactParams","_temp2$1","richParams","compactGroups","_temp4$1","_temp5$1","richGroups","_temp6","_temp7","gap","hasCompactControls","group_2","groupParams_1","param_2","group_3","groupParams_2","param_0","_temp3$1","param_1","group_0","groupParams","group_1","groupParams_0","MarkdownControl","field","disabled","next","FilesControl","useRef","files","picked","Paperclip","Button","removeLabel","itemIndex","index","file","FieldInput","Textarea","_temp$1","Input","CreateFieldControl","emptyValue","initialFieldValues","fields","isFilled","editableCreateAttributes","attributes","attribute","initialAttributeValues","columnAttributeId","attributeToParam","base","multiSelect","locked","KanbanRendererCreateDialog","setValues","attributeValues","setAttributeValues","submitting","setSubmitting","error","setError","resetToken","setResetToken","initializedRef","editableAttributes","useEffect","open","config","token","seeded","declared","kept","id","added","id_0","editable","seeded_0","declared_0","kept_0","current_0","id_1","added_0","id_2","close","onClose","valid","field_0","submit","fileFieldIds","field_1","field_2","id_3","declaredValues","id_4","onSubmit","caught","Dialog","details","handleDialogAcceptShortcut","CloseButton","field_3","current_1","attribute_0","current_2","attributeId","value_0","buildKanbanRendererListItems","supportsManualReorder","listDisplayProperties","property","getStatusPresentation","descriptor","key","getRowStatusPresentation","status","toListItem","shorthand","getRowContextMenuActions","onRowClick","targetColumnKey","placement","toGroupListItem","groupingAttributeId","parent","columnKey","visibleRows","grouped","rowEyebrow","KanbanRenderer","rawAttributes","hideToolbar","createColumnId","setCreateColumnId","defaultFilters","defaultSettings","initialState","storageKey","_temp","filters","_temp2","_temp3","setExpandedGroup","_temp4","getBoardColumnConfig","knownColumnKeys","cardDisplayProperties","_temp5","toBoardItems","boardRows","columnGroupingDescriptor","columnConfig","orderedRows","enumOption","subgroup","context","handleBoardMoveItem","rowId_0","context_0","handleBoardMoveToGroup","defaultActiveViewId","defaultViews","toolbarActions","toolbarLeading","viewsSource","contentPlaceholder","createRow","state","state_0","state_1","state_2"],"sources":["../src/components/kanban-renderer/kanban-renderer-board-move.ts","../src/components/kanban-renderer/kanban-renderer-board-column-header.tsx","../src/components/kanban-renderer/kanban-renderer-attribute-badge.tsx","../src/components/kanban-renderer/kanban-renderer-card.tsx","../src/components/kanban-renderer/kanban-renderer-board-group-section.tsx","../src/components/kanban-renderer/kanban-renderer-board.tsx","../src/components/kanban-renderer/kanban-renderer-list.tsx","../src/components/kanban-renderer/kanban-renderer-content.tsx","../src/components/param-editor/param-editor-horizontal.tsx","../src/components/kanban-renderer/kanban-renderer-create-field.tsx","../src/components/kanban-renderer/kanban-renderer-create-dialog.tsx","../src/components/kanban-renderer/kanban-renderer-list-items.ts","../src/components/kanban-renderer/kanban-renderer.tsx"],"sourcesContent":["import type { KanbanRendererSettings } from \"./types\";\nimport { MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\ninterface ApplyBoardMoveItemInput {\n settings: Pick<KanbanRendererSettings, \"columnGrouping\" | \"ordering\" | \"rowGrouping\">;\n rowId: string;\n targetColumnId: string;\n targetGroupKey?: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\ninterface ApplyBoardMoveToGroupInput {\n settings: Pick<KanbanRendererSettings, \"ordering\" | \"rowGrouping\">;\n rowId: string;\n targetGroupKey: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\nexport const applyBoardMoveItem = async (input: ApplyBoardMoveItemInput) => {\n const { settings, rowId, targetColumnId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n await onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n }\n if (settings.rowGrouping !== NO_GROUPING && targetGroupKey && onAttributeChange) {\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n }\n if (settings.ordering.attributeId === MANUAL_ORDERING) {\n await onReorder?.(rowId, beforeItemId);\n }\n};\n\nexport const applyBoardMoveToGroup = async (input: ApplyBoardMoveToGroupInput) => {\n const { settings, rowId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n if (settings.ordering.attributeId === MANUAL_ORDERING) {\n await onReorder?.(rowId, beforeItemId);\n }\n};\n","import { Badge, HStack, Icon, IconButton, Menu, Spacer, Text } from \"@chakra-ui/react\";\nimport { MoreHorizontal, Plus } from \"lucide-react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\n\ninterface ColumnHeaderProps {\n column: KanbanRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack minH=\"1.5rem\" gap=\"2xs\" alignItems=\"center\" colorPalette={column.color ?? \"gray\"}>\n <Icon\n data-testid=\"column-status-icon\"\n as={getIconComponent(column.icon)}\n boxSize=\"0.875rem\"\n color=\"colorPalette.solid\"\n flexShrink={0}\n />\n <Text textStyle=\"label/S/medium\">{column.label}</Text>\n\n <Badge variant=\"number\" size=\"xs\" colorPalette=\"gray\">\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Badge, Icon, Menu, Portal } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Square, SquareCheck } from \"lucide-react\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\ninterface KanbanRendererAttributeBadgeProps {\n badge: AttributeBadge;\n onChange?: (attributeId: string, value: unknown) => void;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\n\nconst getSelectedValues = (badge: AttributeBadge) => {\n if (Array.isArray(badge.value)) return badge.value;\n return badge.value ? [badge.value] : [];\n};\n\nconst toggleMultiValue = (values: string[], optionValue: string) =>\n values.includes(optionValue) ? values.filter((value) => value !== optionValue) : [...values, optionValue];\n\nconst badgeStyleProps = {\n bg: { _light: \"bg.muted\", _dark: \"bg.subtle\" },\n color: \"fg.muted\",\n _hover: { bg: { _light: \"bg.subtle\", _dark: \"bg.hover\" } },\n} as const;\n\nconst getBadgeIconColor = (badge: AttributeBadge) => (badge.color ? `${badge.color}.fg` : \"fg.muted\");\n\nconst selectionIcon = (input: { isMultiValue: boolean; isSelected: boolean }) => {\n if (input.isMultiValue) return input.isSelected ? <SquareCheck size={14} /> : <Square size={14} />;\n return input.isSelected ? <Check size={14} /> : null;\n};\n\nexport const KanbanRendererAttributeBadge = (props: KanbanRendererAttributeBadgeProps) => {\n const { badge, onChange } = props;\n const options = badge.options ?? [];\n const canEdit = Boolean(onChange && badge.isEditable && options.length > 0);\n const isMultiValue = Array.isArray(badge.value);\n const selectedValues = getSelectedValues(badge);\n const rowInteractionProps = {\n onClick: stopRowActivation,\n onPointerDown: stopRowActivation,\n onKeyDown: stopRowActivation,\n };\n\n const handleOptionChange = (optionValue: string) => {\n let nextValue: string | string[];\n if (isMultiValue) nextValue = toggleMultiValue(selectedValues, optionValue);\n else nextValue = selectedValues.includes(optionValue) ? \"\" : optionValue;\n onChange?.(badge.attributeId, nextValue);\n };\n\n const badgeContent = (\n <>\n {badge.icon ? <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={getBadgeIconColor(badge)} /> : null}\n {badge.label}\n {canEdit ? <Icon as={ChevronDown} boxSize=\"3\" color=\"fg.muted\" /> : null}\n </>\n );\n\n if (!canEdit) {\n return (\n <Badge variant=\"subtle\" gap=\"2xs\" textStyle=\"label/XS/medium\" {...badgeStyleProps}>\n {badgeContent}\n </Badge>\n );\n }\n\n return (\n <Menu.Root closeOnSelect={!isMultiValue}>\n <Menu.Trigger asChild>\n <Badge\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n variant=\"subtle\"\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n {...badgeStyleProps}\n onClick={stopRowActivation}\n onPointerDown={stopRowActivation}\n onKeyDown={stopRowActivation}\n >\n {badgeContent}\n </Badge>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n minW=\"180px\"\n p=\"0\"\n gap=\"0\"\n onClick={stopRowActivation}\n onPointerDown={stopRowActivation}\n onKeyDown={stopRowActivation}\n >\n {options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n role={isMultiValue ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected}\n variant=\"full-width\"\n id={option.value}\n label={option.label}\n icon={<Icon as={getIconComponent(option.icon)} boxSize=\"16px\" />}\n iconColor={`${option.color ?? \"gray\"}.500`}\n isSelected={isSelected}\n endContent={selectionIcon({ isMultiValue, isSelected })}\n onActivate={() => handleOptionChange(option.value)}\n {...rowInteractionProps}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, MouseEvent, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/primitives/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/primitives/workspace-badge\";\nimport { KanbanRendererAttributeBadge } from \"./kanban-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\nexport interface KanbanRendererCardProps {\n eyebrow?: string;\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const KanbanRendererCard = (props: KanbanRendererCardProps) => {\n const {\n eyebrow,\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onBadgeChange,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (event.defaultPrevented) return;\n if (!(event.target instanceof Node) || !event.currentTarget.contains(event.target)) return;\n onClick?.();\n };\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"compact\"\n borderRadius=\"compact\"\n borderWidth=\"1px\"\n borderColor={isSelected ? \"border.accent\" : \"border\"}\n width=\"100%\"\n background=\"bg\"\n transition=\"border-color 0.2s ease-in-out, background 0.2s ease-in-out\"\n _hover={{ borderColor: isSelected ? \"border.accent\" : \"border.accent-light\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick ? handleClick : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\n >\n {eyebrow || workspaceBadge ? (\n <HStack minW=\"0\" gap=\"2xs\">\n {eyebrow ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\" fontFamily=\"mono\" truncate>\n {eyebrow}\n </Text>\n ) : null}\n <HStack marginLeft=\"auto\">{workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}</HStack>\n </HStack>\n ) : null}\n\n <Text textStyle=\"paragraph/S/regular\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <KanbanRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={onBadgeChange} />\n ))}\n {customSlots}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { type DragEvent, useState } from \"react\";\n\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport type { KanbanRendererBoardGroup } from \"./kanban-renderer-board\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\n\ninterface GroupSectionProps {\n columnId: string;\n group: KanbanRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nexport const GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((value) => !value)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"number\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"xs\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <KanbanRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { ColumnHeader } from \"./kanban-renderer-board-column-header\";\nimport { GroupSection } from \"./kanban-renderer-board-group-section\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\n\ntype KanbanRendererCardProps = ComponentProps<typeof KanbanRendererCard>;\n\nexport interface KanbanRendererBoardItem {\n id: string;\n cardProps: Omit<KanbanRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface KanbanRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface KanbanRendererBoardGroup {\n key: string;\n label: string;\n items: KanbanRendererBoardItem[];\n}\n\nexport interface KanbanRendererBoardColumn {\n id: string;\n label: string;\n createLabel?: string;\n color?: string;\n icon?: string | null;\n items: KanbanRendererBoardItem[];\n groups?: KanbanRendererBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: KanbanRendererBoardColumnAction[];\n}\n\ninterface KanbanRendererBoardProps {\n columns: KanbanRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (\n itemId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => Promise<void> | void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const KanbanRendererBoard = (props: KanbanRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n size=\"xs\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"xs\", padding: \"xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"xs\"\n padding=\"compact\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"sm\"\n background={activeColumn === column.id ? \"bg.active\" : \"bg.subtle\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n if (onMoveItem) {\n onMoveItem(itemId, column.id, { beforeItemId, targetGroupKey: group.key });\n return;\n }\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <KanbanRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n","import { Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { type ComponentType, type DragEvent, type ReactNode, useState } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport { KanbanRendererAttributeBadge } from \"./kanban-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\nexport interface KanbanRendererListItem {\n id: string;\n eyebrow?: string;\n title: string;\n isGroup?: boolean;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n statusColorPalette?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: KanbanRendererListItem[];\n onClick?: () => void;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: string) => void;\n}\n\nexport type KanbanRendererListExpandedState = Record<string, boolean>;\n\nexport interface KanbanRendererListProps {\n items: KanbanRendererListItem[];\n selectedItemId?: string | null;\n expandedGroups?: KanbanRendererListExpandedState;\n onItemClick?: (item: KanbanRendererListItem) => void;\n onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\ninterface FlattenedKanbanRendererListItem {\n id: string;\n item: KanbanRendererListItem;\n depth: number;\n isGroup: boolean;\n canExpand: boolean;\n}\n\nexport const getKanbanRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nexport const flattenKanbanRendererListItems = (\n items: KanbanRendererListItem[],\n expanded: KanbanRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedKanbanRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({\n id: item.id,\n item,\n depth,\n isGroup: item.isGroup === true,\n canExpand,\n });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenKanbanRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetIndicatorProps = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n\n return {\n _before: {\n content: '\"\"',\n position: \"absolute\",\n bg: \"border.accent\",\n left: \"0\",\n top: \"0\",\n width: isGroup ? \"3px\" : \"100%\",\n height: isGroup ? \"100%\" : \"2px\",\n },\n } as const;\n};\n\nconst getRowIsExpanded = (expandedState: KanbanRendererListExpandedState, rowId: string) => {\n return expandedState[rowId] !== false;\n};\n\nconst updateExpandedState = (expandedState: KanbanRendererListExpandedState, rowId: string, isExpanded: boolean) => {\n return { ...expandedState, [rowId]: isExpanded };\n};\n\nconst renderLabel = (item: KanbanRendererListItem, isGroup: boolean) => {\n if (isGroup) {\n return (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/medium\" minW=\"0\" truncate>\n {item.title}\n </Text>\n <Text textStyle=\"label/XS\" color=\"fg.muted\" flexShrink={0}>\n {item.countBadge}\n </Text>\n </HStack>\n );\n }\n\n return (\n <HStack gap=\"compact\" minW=\"0\" maxW=\"full\" flex=\"1\">\n {item.eyebrow ? (\n <Text data-testid=\"list-row-eyebrow\" flexShrink={0} textStyle=\"mono/XS\" color=\"fg.muted\" truncate>\n {item.eyebrow}\n </Text>\n ) : null}\n <Text textStyle=\"paragraph/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n </HStack>\n );\n};\n\nconst renderEndContent = (item: KanbanRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <KanbanRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={item.onBadgeChange} />\n ))}\n {item.customSlots}\n </Wrap>\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: KanbanRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item, item.isGroup === true),\n icon: item.statusIcon ? (\n <Icon\n data-testid={item.isGroup ? \"list-status-icon\" : \"row-status-icon\"}\n as={item.statusIcon}\n boxSize=\"1rem\"\n colorPalette={item.statusColorPalette ?? item.countColorPalette ?? \"gray\"}\n color={item.statusColor ?? (item.isGroup || item.statusColorPalette ? \"colorPalette.solid\" : \"fg.muted\")}\n />\n ) : undefined,\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n separatorBefore: action.separatorBefore,\n endContent: action.endContent,\n onAction: action.onClick,\n })),\n});\n\nexport const KanbanRendererList = (props: KanbanRendererListProps) => {\n const { items, selectedItemId = null, expandedGroups, onItemClick, onExpandedGroupChange } = props;\n const [localExpandedGroups, setLocalExpandedGroups] = useState<KanbanRendererListExpandedState>({});\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const expanded = expandedGroups ?? localExpandedGroups;\n const rows = flattenKanbanRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n onExpandedGroupChange?.(rowId, isExpanded);\n if (expandedGroups === undefined) {\n setLocalExpandedGroups((current) => updateExpandedState(current, rowId, isExpanded));\n }\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <KanbanRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface KanbanRendererListRowProps {\n row: FlattenedKanbanRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: KanbanRendererListItem) => void;\n}\n\nconst KanbanRendererListRow = (props: KanbanRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, isGroup, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n if (isGroup) return;\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n position=\"relative\"\n borderBottomWidth=\"1px\"\n borderBottomColor=\"border.subtle\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n draggable={item.draggable}\n transition=\"background 120ms ease\"\n {...getDropTargetIndicatorProps(isDropTarget, canExpand)}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n aria-label={isGroup ? undefined : item.title}\n variant={isGroup ? \"compact\" : \"collection\"}\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n showContextMenuTrigger={false}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { KanbanRendererBoard, type KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\nimport { KanbanRendererList, type KanbanRendererListItem } from \"./kanban-renderer-list\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface KanbanRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface KanbanRendererContentProps {\n viewMode: KanbanRendererSettings[\"viewMode\"];\n boardColumns: KanbanRendererBoardColumn[];\n listItems: KanbanRendererListItem[];\n listExpandedGroups: Record<string, boolean>;\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onBoardMoveToGroup: (\n rowId: string,\n targetGroupKey: string,\n context?: { beforeItemId?: string },\n ) => Promise<void> | void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n onListExpandedGroupChange: (rowId: string, isExpanded: boolean) => void;\n listKey: string;\n}\n\nconst KanbanRendererEmptyState = (props: KanbanRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const KanbanRendererContent = (props: KanbanRendererContentProps) => {\n const {\n viewMode,\n boardColumns,\n listItems,\n listExpandedGroups,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n onListExpandedGroupChange,\n listKey,\n } = props;\n\n if (viewMode === \"board\") {\n return (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <KanbanRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : (\n <KanbanRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n )}\n </Box>\n );\n }\n\n if (listItems.length > 0) {\n return (\n <KanbanRendererList\n key={listKey}\n items={listItems}\n selectedItemId={selectedRowId}\n expandedGroups={listExpandedGroups}\n onExpandedGroupChange={onListExpandedGroupChange}\n />\n );\n }\n\n return <KanbanRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import { Box, HStack, Stack, Text, VStack } from \"@chakra-ui/react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorField } from \"./param-editor-field\";\nimport { isParamEditorHorizontalControl, isParamEditorRichControl } from \"./param-editor-presentation\";\n\nexport interface ParamEditorHorizontalProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n variant?: \"default\" | \"small\";\n}\n\ninterface HorizontalGroupProps {\n group: InputGroup;\n params: Param[];\n renderParam: (param: Param) => React.ReactNode;\n variant: \"default\" | \"small\";\n width?: \"auto\" | \"full\";\n}\n\nconst HorizontalGroupTitle = (props: { children: string }) => {\n const { children } = props;\n\n return (\n <Text\n minH=\"0.75rem\"\n textStyle=\"label/XS\"\n color=\"fg.muted\"\n lineHeight=\"1\"\n letterSpacing=\"0.08em\"\n textTransform=\"uppercase\"\n >\n {children}\n </Text>\n );\n};\n\nconst HorizontalGroup = (props: HorizontalGroupProps) => {\n const { group, params, renderParam, variant, width = \"auto\" } = props;\n\n return (\n <VStack\n as=\"section\"\n aria-label={group.title}\n gap={variant === \"small\" ? \"2xs\" : \"xs\"}\n alignItems=\"start\"\n minW=\"0\"\n width={width}\n >\n <HorizontalGroupTitle>{group.title}</HorizontalGroupTitle>\n <HStack gap={variant === \"small\" ? \"2xs\" : \"xs\"} flexWrap=\"wrap\" alignItems=\"start\" minW=\"0\" width={width}>\n {params.map(renderParam)}\n </HStack>\n </VStack>\n );\n};\n\nexport const ParamEditorHorizontal = (props: ParamEditorHorizontalProps) => {\n const { params = [], groups = [], defaultValues, onChange, onOpenResource, readOnly, variant = \"default\" } = props;\n const horizontalParams = params.filter(isParamEditorHorizontalControl);\n const horizontalGroups = groups.map((group) => ({\n ...group,\n params: group.params.filter(isParamEditorHorizontalControl),\n }));\n const renderParam = (param: Param) => (\n <ParamEditorField\n key={param.id}\n param={param}\n defaultValues={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n presentation=\"horizontal\"\n size={variant === \"small\" ? \"xs\" : \"sm\"}\n />\n );\n const compactParams = horizontalParams.filter((param) => !isParamEditorRichControl(param));\n const richParams = horizontalParams.filter(isParamEditorRichControl);\n const compactGroups = horizontalGroups\n .map((group) => ({ group, params: group.params.filter((param) => !isParamEditorRichControl(param)) }))\n .filter(({ params: groupParams }) => groupParams.length > 0);\n const richGroups = horizontalGroups\n .map((group) => ({ group, params: group.params.filter(isParamEditorRichControl) }))\n .filter(({ params: groupParams }) => groupParams.length > 0);\n const gap = variant === \"small\" ? \"xs\" : \"sm\";\n const hasCompactControls = compactParams.length > 0 || compactGroups.length > 0;\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap={gap} minW=\"0\">\n {hasCompactControls ? (\n <HStack gap={gap} flexWrap=\"wrap\" alignItems=\"start\" minW=\"0\">\n {compactParams.map(renderParam)}\n {compactGroups.map(({ group, params: groupParams }) => (\n <HorizontalGroup\n key={group.id}\n group={group}\n params={groupParams}\n renderParam={renderParam}\n variant={variant}\n />\n ))}\n </HStack>\n ) : null}\n\n {richParams.map((param) => (\n <Box key={param.id} width=\"full\" minW=\"0\">\n {renderParam(param)}\n </Box>\n ))}\n\n {richGroups.map(({ group, params: groupParams }) => (\n <HorizontalGroup\n key={`${group.id}-rich`}\n group={group}\n params={groupParams}\n renderParam={renderParam}\n variant={variant}\n width=\"full\"\n />\n ))}\n </Stack>\n );\n};\n","import { Button, Icon, Input, Stack, Text, Textarea, Wrap } from \"@chakra-ui/react\";\nimport { Paperclip } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { AttachmentChip } from \"@/components/overlays/attachment-chip\";\nimport { SelectionInput } from \"@/components/param-editor/inputs/selection-input\";\nimport { LazyMarkdownEditor } from \"@/components/rich-text\";\nimport type { KanbanRendererCreateField } from \"./types\";\n\n// The editor and its syntax highlighting are heavy and only needed once a\n// markdown field is actually on screen, so the host loads them on demand.\nconst MarkdownControl = (props: {\n disabled: boolean;\n field: KanbanRendererCreateField;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, onChange } = props;\n\n return (\n <LazyMarkdownEditor\n // Seed from the declared default so a pre-filled field is visible rather\n // than blank-but-submittable. Lexical reads this once, on mount.\n defaultState={typeof field.defaultValue === \"string\" ? field.defaultValue : \"\"}\n isEditable={!disabled}\n placeholder={field.placeholder}\n autoFocus\n onChange={(next) => onChange(next)}\n />\n );\n};\n\nconst FilesControl = (props: {\n disabled: boolean;\n field: KanbanRendererCreateField;\n removeLabel: string;\n value: unknown;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, removeLabel, value, onChange } = props;\n const input = useRef<HTMLInputElement>(null);\n const files = Array.isArray(value) ? (value as File[]) : [];\n\n return (\n <Stack gap=\"2xs\" align=\"start\">\n <input\n ref={input}\n hidden\n type=\"file\"\n accept={field.accept}\n multiple={field.multiple !== false}\n // Appending keeps earlier picks; replacing silently discards them. A\n // single-file field replaces instead, so it can never hold two.\n onChange={(event) => {\n const picked = Array.from(event.target.files ?? []);\n onChange(field.multiple === false ? picked.slice(0, 1) : [...files, ...picked]);\n event.target.value = \"\";\n }}\n />\n <Button size=\"xs\" variant=\"ghost\" disabled={disabled} onClick={() => input.current?.click()}>\n <Icon as={Paperclip} boxSize=\"4\" />\n {field.label}\n </Button>\n {files.length > 0 ? (\n <Wrap gap=\"2xs\">\n {files.map((file, index) => (\n <AttachmentChip\n key={`${file.name}-${index.toString()}`}\n file={file}\n disabled={disabled}\n removeLabel={removeLabel}\n onRemove={() => onChange(files.filter((_, itemIndex) => itemIndex !== index))}\n />\n ))}\n </Wrap>\n ) : null}\n </Stack>\n );\n};\n\ninterface CreateFieldControlProps {\n disabled: boolean;\n field: KanbanRendererCreateField;\n removeLabel: string;\n value: unknown;\n onChange: (value: unknown) => void;\n}\n\nconst FieldInput = (props: CreateFieldControlProps) => {\n const { disabled, field, value, onChange } = props;\n\n if (field.type === \"longtext\")\n return (\n <Textarea\n aria-label={field.label}\n minH=\"120px\"\n size=\"sm\"\n placeholder={field.placeholder}\n value={typeof value === \"string\" ? value : \"\"}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n\n // Declared selects share the ParamEditor's control, so they look and behave\n // exactly like the resource attributes rendered beside them.\n if (field.type === \"select\" || field.type === \"multi-select\")\n return (\n <SelectionInput\n hideLabel\n id={field.id}\n name={field.label}\n description={field.description ?? \"\"}\n defaultValue={(value as string | string[]) ?? (field.type === \"multi-select\" ? [] : \"\")}\n options={(field.options ?? []).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon ?? undefined,\n color: option.color,\n }))}\n multiSelect={field.type === \"multi-select\"}\n placeholder={field.placeholder ?? field.label}\n clearable={!field.required}\n readOnly={disabled}\n onChange={(_, next) => onChange(next)}\n />\n );\n\n if (field.type === \"boolean\")\n return (\n <Button size=\"sm\" variant=\"outline\" disabled={disabled} onClick={() => onChange(value !== true)}>\n {field.label}\n </Button>\n );\n\n return (\n <Input\n aria-label={field.label}\n size=\"sm\"\n type={field.type === \"number\" ? \"number\" : \"text\"}\n placeholder={field.placeholder}\n value={typeof value === \"string\" || typeof value === \"number\" ? value : \"\"}\n disabled={disabled}\n onChange={(event) =>\n onChange(field.type === \"number\" && event.target.value ? Number(event.target.value) : event.target.value)\n }\n />\n );\n};\n\nexport const CreateFieldControl = (props: CreateFieldControlProps) => {\n const { disabled, field, removeLabel, value, onChange } = props;\n\n // Files and markdown carry their own trigger label / placeholder, so the\n // stacked label above them would just repeat it.\n if (field.type === \"files\")\n return (\n <FilesControl disabled={disabled} field={field} removeLabel={removeLabel} value={value} onChange={onChange} />\n );\n\n if (field.type === \"markdown\") return <MarkdownControl disabled={disabled} field={field} onChange={onChange} />;\n\n return (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">{`${field.label}${field.required ? \" *\" : \"\"}`}</Text>\n {field.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n {field.description}\n </Text>\n ) : null}\n <FieldInput {...props} />\n </Stack>\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { handleDialogAcceptShortcut } from \"@/components/overlays/dialog-accept-shortcut\";\nimport type { Param, ParamValueMap } from \"@/components/param-editor/param-editor.types\";\nimport { ParamEditorHorizontal } from \"@/components/param-editor/param-editor-horizontal\";\nimport { CreateFieldControl } from \"./kanban-renderer-create-field\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateField,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n} from \"./types\";\n\ninterface KanbanRendererCreateDialogProps {\n open: boolean;\n columnId: string;\n columnAttributeId?: string;\n attributes: AttributeDescriptor[];\n config: KanbanRendererCreateRowConfig;\n onClose: () => void;\n onSubmit: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;\n}\n\nconst emptyValue = (field: KanbanRendererCreateField) => {\n if (field.type === \"files\" || field.type === \"multi-select\") return [];\n if (field.type === \"boolean\") return false;\n return \"\";\n};\n\nconst initialFieldValues = (fields: KanbanRendererCreateField[]) =>\n Object.fromEntries(fields.map((field) => [field.id, field.defaultValue ?? emptyValue(field)]));\n\nconst isFilled = (field: KanbanRendererCreateField, value: unknown) => {\n if (!field.required) return true;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === \"string\") return value.trim().length > 0;\n return value !== undefined && value !== null;\n};\n\n// Every editable attribute is offered, whatever its kind — narrowing to enums\n// silently drops editable user/date/number attributes from the create form.\nconst editableCreateAttributes = (attributes: AttributeDescriptor[]) =>\n attributes.filter((attribute) => attribute.editable);\n\nconst initialAttributeValues = (\n attributes: AttributeDescriptor[],\n columnAttributeId: string | undefined,\n columnId: string,\n) =>\n Object.fromEntries(\n attributes.map((attribute) => [\n attribute.id,\n attribute.id === columnAttributeId ? columnId : attribute.type.kind === \"enum-multi\" ? [] : \"\",\n ]),\n );\n\n/**\n * Editable attributes render through the ParamEditor so a resource property and\n * a command param are the same control, not two that merely resemble each other.\n */\nconst attributeToParam = (attribute: AttributeDescriptor, locked: boolean): Param => {\n const base = { id: attribute.id, name: attribute.label, description: \"\" };\n\n if (attribute.type.kind === \"enum\" || attribute.type.kind === \"enum-multi\") {\n const multiSelect = attribute.type.kind === \"enum-multi\";\n return {\n ...base,\n type: \"selection\",\n defaultValue: multiSelect ? [] : \"\",\n multiSelect,\n // The trigger shows the value alone; the attribute name is the placeholder.\n placeholder: attribute.label,\n clearable: !locked,\n // The column already chose this value, and the create command reads it\n // from the column param — editing it here would be ignored.\n disabled: locked,\n options: getEnumOptions(attribute.type).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon ?? undefined,\n color: option.color,\n })),\n };\n }\n\n if (attribute.type.kind === \"number\") return { ...base, type: \"number\", defaultValue: 0 };\n return { ...base, type: \"text\", defaultValue: \"\", singleLine: true };\n};\n\nexport const KanbanRendererCreateDialog = (props: KanbanRendererCreateDialogProps) => {\n const { open, columnId, columnAttributeId, attributes, config, onClose, onSubmit } = props;\n const [values, setValues] = useState<Record<string, unknown>>({});\n const [attributeValues, setAttributeValues] = useState<Record<string, unknown>>({});\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState(\"\");\n // Uncontrolled editors (Lexical) read their seed once on mount, so a reset has\n // to remount the fields or the old text stays on screen over fresh state.\n const [resetToken, setResetToken] = useState(0);\n const initializedRef = useRef(false);\n const editableAttributes = editableCreateAttributes(attributes);\n\n // Opening is the only thing that clears the form. Attributes and fields can\n // arrive or change while it is open (they come from live sources), so this\n // runs once per open cycle — resetting on those would wipe what was typed.\n useEffect(() => {\n if (!open) {\n initializedRef.current = false;\n return;\n }\n if (initializedRef.current) return;\n initializedRef.current = true;\n\n setValues(initialFieldValues(config.fields));\n setAttributeValues(initialAttributeValues(editableCreateAttributes(attributes), columnAttributeId, columnId));\n setError(\"\");\n setResetToken((token) => token + 1);\n }, [attributes, columnAttributeId, columnId, config.fields, open]);\n\n // Fields can be added or withdrawn while the dialog is open. Seed the new\n // ones and drop the withdrawn, so what is submitted always matches what is\n // rendered — but leave everything the user has already filled in alone.\n useEffect(() => {\n if (!open) return;\n const seeded = initialFieldValues(config.fields);\n const declared = new Set(config.fields.map((field) => field.id));\n setValues((current) => {\n const kept = Object.entries(current).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current));\n if (added.length === 0 && kept.length === Object.keys(current).length) return current;\n return { ...Object.fromEntries(added), ...Object.fromEntries(kept) };\n });\n }, [config.fields, open]);\n\n // Same contract for attributes: seed the ones that appear after opening, drop\n // the ones withdrawn. A withdrawn entry left behind would still be submitted\n // even though its control is gone.\n useEffect(() => {\n if (!open) return;\n const editable = editableCreateAttributes(attributes);\n const seeded = initialAttributeValues(editable, columnAttributeId, columnId);\n const declared = new Set(editable.map((attribute) => attribute.id));\n setAttributeValues((current) => {\n const kept = Object.entries(current).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current));\n if (added.length === 0 && kept.length === Object.keys(current).length) return current;\n return { ...Object.fromEntries(added), ...Object.fromEntries(kept) };\n });\n }, [attributes, open, columnId, columnAttributeId]);\n\n const close = () => {\n if (!submitting) onClose();\n };\n\n const valid = config.fields.every((field) => isFilled(field, values[field.id]));\n\n const submit = async () => {\n if (!valid || submitting) return;\n setSubmitting(true);\n setError(\"\");\n try {\n const fileFieldIds = new Set(config.fields.filter((field) => field.type === \"files\").map((field) => field.id));\n const files = [...fileFieldIds].flatMap((id) => (Array.isArray(values[id]) ? (values[id] as File[]) : []));\n const declaredValues = Object.fromEntries(Object.entries(values).filter(([id]) => !fileFieldIds.has(id)));\n\n await onSubmit({ columnId, columnAttributeId, values: declaredValues, attributeValues, files });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : config.labels.submitError);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} size=\"lg\" scrollBehavior=\"inside\" onOpenChange={(details) => !details.open && close()}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void submit(), valid && !submitting)}\n >\n <Dialog.Header>\n <Dialog.Title>{config.title}</Dialog.Title>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n {config.fields.map((field) => (\n <CreateFieldControl\n key={`${field.id}:${resetToken.toString()}`}\n field={field}\n removeLabel={config.labels.removeFile}\n value={values[field.id]}\n disabled={submitting}\n onChange={(value) => setValues((current) => ({ ...current, [field.id]: value }))}\n />\n ))}\n {editableAttributes.length > 0 ? (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">{config.labels.properties}</Text>\n <ParamEditorHorizontal\n variant=\"small\"\n params={editableAttributes.map((attribute) =>\n attributeToParam(attribute, attribute.id === columnAttributeId),\n )}\n defaultValues={attributeValues as ParamValueMap}\n readOnly={submitting}\n onChange={(attributeId, value) =>\n setAttributeValues((current) => ({ ...current, [attributeId]: value }))\n }\n />\n </Stack>\n ) : null}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Body>\n <Dialog.Footer justifyContent=\"end\">\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n {config.labels.cancel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!valid} loading={submitting} onClick={() => void submit()}>\n {config.submitLabel}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport { type KanbanRendererColumnGroup, orderRows } from \"./kanban-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveListDropTargetColumnKey,\n} from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererListItem } from \"./kanban-renderer-list\";\nimport type { AttributeDescriptor, KanbanRendererRow, KanbanRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\ninterface BuildKanbanRendererListItemsInput<TRow extends KanbanRendererRow> {\n settings: KanbanRendererSettings;\n visibleRows: TRow[];\n grouped: KanbanRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nexport const buildKanbanRendererListItems = <TRow extends KanbanRendererRow>(\n input: BuildKanbanRendererListItemsInput<TRow>,\n) => {\n const {\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const listDisplayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const getStatusPresentation = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n const option = descriptor ? findEnumOption(descriptor.type, key) : undefined;\n return {\n statusColorPalette: option?.color,\n statusIcon: getIconComponent(option?.icon),\n };\n };\n const getRowStatusPresentation = (row: TRow) => {\n const status = row.attributes.status;\n if (typeof status !== \"string\") return {};\n return getStatusPresentation(\"status\", status);\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): KanbanRendererListItem => {\n const shorthand = typeof row.attributes.id === \"string\" ? row.attributes.id : undefined;\n\n return {\n id: row.id,\n eyebrow: shorthand && shorthand !== row.title ? shorthand : undefined,\n title: row.title,\n ...getRowStatusPresentation(row),\n badges: collectDisplayBadges(row, attributes, listDisplayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, listDisplayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n };\n };\n\n const toGroupListItem = (\n group: { key: string; label: string; rows: KanbanRendererRow[] },\n parent?: { columnKey: string },\n ): KanbanRendererListItem => {\n const groupingAttributeId = parent ? settings.rowGrouping : settings.columnGrouping;\n return {\n id: parent ? `group::${parent.columnKey}::${group.key}` : `group::${group.key}`,\n title: group.label,\n isGroup: true,\n countBadge: group.rows.length,\n ...getStatusPresentation(groupingAttributeId, group.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? group.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, group.key);\n }\n }\n : undefined,\n children: orderRows(group.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? group.key,\n rowKey: parent ? group.key : undefined,\n }),\n ),\n };\n };\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) =>\n column.subgroups.length > 0\n ? {\n id: `group::${column.key}`,\n title: column.label,\n isGroup: true,\n countBadge: column.rows.length,\n ...getStatusPresentation(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((group) => toGroupListItem(group, { columnKey: column.key })),\n }\n : toGroupListItem(column),\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { type ReactNode, useState } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport type {\n KanbanRendererBoardColumn,\n KanbanRendererBoardColumnAction,\n KanbanRendererBoardGroup,\n} from \"./kanban-renderer-board\";\nimport { applyBoardMoveItem, applyBoardMoveToGroup } from \"./kanban-renderer-board-move\";\nimport { KanbanRendererContent } from \"./kanban-renderer-content\";\nimport { KanbanRendererCreateDialog } from \"./kanban-renderer-create-dialog\";\nimport { filterRows, groupRows, orderRows } from \"./kanban-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n} from \"./kanban-renderer-helpers\";\nimport { buildKanbanRendererListItems } from \"./kanban-renderer-list-items\";\nimport { KanbanRendererToolbar } from \"./kanban-renderer-toolbar\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n KanbanRendererFilterState,\n KanbanRendererRow,\n KanbanRendererSavedView,\n KanbanRendererSettings,\n KanbanRendererViewsSource,\n} from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\nimport { useKanbanRendererStore } from \"./use-kanban-renderer-store\";\nimport { useKanbanViews } from \"./use-kanban-views\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\n/** Board-column behavior and menu configuration for a resolved column group. */\nexport interface BoardColumnConfig {\n /** Chakra color palette used for the column header and group badges. */\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: KanbanRendererBoardColumnAction[];\n}\n\n/** Switchable list/board renderer for rows with typed attributes, filtering, grouping, and ordering. */\nexport interface KanbanRendererProps<TRow extends KanbanRendererRow = KanbanRendererRow> {\n /** Stable rows to render. Each row must have an id, title, and attributes map. */\n rows: TRow[];\n /** Persistent key used by the renderer store for view, filter, grouping, ordering, and list expansion settings. */\n storageKey: string;\n /** Attribute descriptors that define display, filtering, grouping, ordering, and board columns. */\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyState?: ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n /** Replaces the data area while a query is unavailable, keeping its controls mounted. */\n contentPlaceholder?: ReactNode;\n defaultSettings?: Partial<KanbanRendererSettings>;\n defaultFilters?: KanbanRendererFilterState;\n viewsSource?: KanbanRendererViewsSource;\n defaultViews?: KanbanRendererSavedView[];\n defaultActiveViewId?: string;\n hideToolbar?: boolean;\n toolbarActions?: ReactNode;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n /** Called when a row attribute changes through drag/drop, board movement, or inline controls. */\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n /** Called for manual row ordering when a dragged row is dropped before another row. */\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n createRow?: KanbanRendererCreateRowConfig;\n onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nconst rowEyebrow = (row: KanbanRendererRow) => {\n const shorthand = row.attributes.id;\n return typeof shorthand === \"string\" && shorthand ? shorthand : row.id;\n};\n\nexport const KanbanRenderer = <TRow extends KanbanRendererRow>(props: KanbanRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n contentPlaceholder,\n defaultSettings,\n defaultFilters,\n viewsSource,\n defaultViews,\n defaultActiveViewId,\n onRowClick,\n onAttributeChange,\n onReorder,\n createRow,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarActions,\n toolbarLeading,\n } = props;\n\n useKanbanViews(props);\n const attributes = useResolvedAttributes(rawAttributes);\n const [createColumnId, setCreateColumnId] = useState<string | null>(null);\n const initialState = {\n settings: defaultSettings,\n filters: defaultFilters,\n };\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n const expandedGroups = useKanbanRendererStore(storageKey, (state) => state.expandedGroups, initialState);\n const setExpandedGroup = useKanbanRendererStore(storageKey, (state) => state.setExpandedGroup, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildKanbanRendererListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const cardDisplayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const toBoardItems = (boardRows: KanbanRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n eyebrow: settings.displayProperties.includes(\"id\") ? rowEyebrow(row) : undefined,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, cardDisplayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, cardDisplayProperties),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: KanbanRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Column color follows the enum option when the contribution does not\n // provide one, while row display badges stay visually neutral.\n const enumOption = columnGroupingDescriptor ? findEnumOption(columnGroupingDescriptor.type, column.key) : undefined;\n\n const groups: KanbanRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumOption?.color,\n icon: enumOption?.icon ?? \"circle\",\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies KanbanRendererBoardColumn;\n });\n\n const handleBoardMoveItem = async (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => {\n await applyBoardMoveItem({\n settings,\n rowId,\n targetColumnId,\n targetGroupKey: context?.targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n });\n };\n\n const handleBoardMoveToGroup = async (rowId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => {\n await applyBoardMoveToGroup({\n settings,\n rowId,\n targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n });\n };\n\n return (\n <Stack data-testid=\"kanban-renderer\" height=\"100%\" minH=\"0\" gap=\"0\" background=\"bg\" overflow=\"hidden\">\n {hideToolbar ? null : (\n <KanbanRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n viewsSource={viewsSource}\n defaultViews={defaultViews}\n defaultActiveViewId={defaultActiveViewId}\n leading={toolbarLeading}\n actions={toolbarActions}\n />\n )}\n\n {contentPlaceholder !== undefined ? (\n contentPlaceholder\n ) : (\n <KanbanRendererContent\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n listExpandedGroups={expandedGroups}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={createRow && onCreateRow ? setCreateColumnId : undefined}\n onColumnAction={onColumnAction}\n onListExpandedGroupChange={setExpandedGroup}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n )}\n {createRow && onCreateRow && createColumnId ? (\n <KanbanRendererCreateDialog\n open\n columnId={createColumnId}\n columnAttributeId={settings.columnGrouping === NO_GROUPING ? undefined : settings.columnGrouping}\n attributes={attributes}\n config={createRow}\n onClose={() => setCreateColumnId(null)}\n onSubmit={onCreateRow}\n />\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"kanban-renderer.js","names":["KanbanActionErrorHandler","error","action","runKanbanAction","run","onError","getAttributeStringValues","CollectionRowGroup","groupRowsByField","AttributeDescriptor","findAttribute","KanbanRendererRow","GroupingOptions","attributes","columnGrouping","rowGrouping","knownColumnKeys","structureRows","KanbanRendererRowGroup","KanbanRendererColumnGroup","subgroups","groupRows","rows","options","columnField","rowField","structure","columns","map","group","key","label","column","source","find","keys","countFilterValues","attributeId","counts","Record","descriptor","row","value","ViewFilterGroup","ViewSort","ResourceContextAction","findField","formatFieldText","filterRowsByView","searchRows","sortRowsByView","BoardColumnConfig","KanbanActionErrorHandler","runKanbanAction","KanbanRendererBoardColumn","KanbanRendererBoardGroup","groupRows","KanbanRendererColumnGroup","collectDisplayBadges","collectDisplayCustomSlots","findEnumOption","AttributeDescriptor","findAttribute","KanbanRendererRow","KanbanRendererSettings","NO_GROUPING","rowEyebrow","row","shorthand","attributes","id","NarrowKanbanRowsInput","rows","TRow","filter","fields","settings","search","narrowKanbanRows","input","displayProperties","property","showsId","includes","idTexts","viewMode","searchTexts","title","flatMap","field","filteredRows","visibleRows","columns","columnGrouping","rowGrouping","columnTotals","Map","map","column","key","length","BuildKanbanBoardColumnsInput","grouped","sorts","getBoardColumnConfig","groupKey","getRowContextMenuActions","onAttributeChange","rowId","attributeId","value","Promise","onActionError","onRowClick","buildKanbanBoardColumns","columnField","toBoardItems","contextMenuActions","cardProps","eyebrow","undefined","highlight","badges","customSlots","onBadgeChange","onClick","columnConfig","enumOption","type","groups","subgroups","subgroup","label","items","color","icon","canDragIn","canDragOut","canCreate","actions","totalCount","get","ViewSort","KanbanRendererSettings","NO_GROUPING","ApplyBoardMoveItemInput","settings","Pick","sorts","rowId","targetColumnId","targetGroupKey","beforeItemId","onAttributeChange","attributeId","value","Promise","onReorder","beforeRowId","ApplyBoardMoveToGroupInput","applyBoardMoveItem","input","columnGrouping","rowGrouping","length","applyBoardMoveToGroup","Button","Icon","ListFilter","EmptyState","CollectionFilterEmptyStateProps","ruleCount","hiddenCount","onEditFilter","CollectionFilterEmptyState","props","$","_c","t0","Symbol","for","t1","t2","t3","_c","EmptyState","Badge","HStack","Icon","IconButton","Menu","Spacer","Text","MoreHorizontal","Plus","ListRow","getIconComponent","Tooltip","KanbanRendererBoardColumn","ColumnHeaderProps","column","onCreateStart","columnId","onColumnAction","actionId","Promise","ColumnHeader","props","$","_c","t0","color","t1","icon","t2","t3","label","t4","totalCount","items","length","t5","t6","Symbol","for","t7","canCreate","createLabel","id","t8","actions","map","action","t9","_c","Tooltip","Badge","Icon","Menu","Portal","Check","ChevronDown","Square","SquareCheck","ListRow","getIconComponent","AttributeBadge","KanbanRendererAttributeBadgeProps","badge","onChange","attributeId","value","stopRowActivation","event","stopPropagation","getSelectedValues","Array","isArray","toggleMultiValue","values","optionValue","includes","filter","getBadgeIconColor","color","selectionIcon","input","isMultiValue","isSelected","KanbanRendererAttributeBadge","props","$","_c","T0","T1","T2","T3","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","Symbol","for","bb0","options","canEdit","Boolean","isEditable","length","selectedValues","t10","onClick","onPointerDown","onKeyDown","rowInteractionProps","handleOptionChange","nextValue","t11","icon","t12","t13","label","badgeContent","t14","Root","Positioner","Content","map","option","_c","_Fragment","HStack","Stack","Text","Wrap","DragEventHandler","MouseEvent","ReactNode","WorkspaceBadgeProps","WorkspaceBadge","HighlightedText","KanbanRendererAttributeBadge","AttributeBadge","KanbanRendererCardProps","eyebrow","title","highlight","badges","customSlots","workspaceBadge","isSelected","draggable","onBadgeChange","attributeId","value","onDragStart","HTMLDivElement","onDragEnd","onClick","KanbanRendererCard","props","$","_c","t0","t1","t2","t3","undefined","t4","t5","hasBadges","length","clickCursor","cursor","t6","event","defaultPrevented","target","Node","currentTarget","contains","handleClick","t7","t8","t9","borderColor","t10","t11","t12","t13","t14","map","badge","t15","_c","Badge","Box","HStack","Icon","Stack","Text","ChevronRight","DragEvent","useState","ResourceContextMenu","KanbanRendererBoardGroup","KanbanRendererCard","GroupSectionProps","columnId","group","selectedItemId","canDragIn","canDragOut","isDropTarget","onDragStart","itemId","event","HTMLDivElement","onDragEnd","onGroupDragOver","onGroupDragLeave","onGroupDrop","beforeItemId","GroupSection","props","$","_c","expanded","setExpanded","t0","t1","undefined","t2","t3","t4","Symbol","for","bg","t5","_temp","t6","t7","t8","label","t9","items","length","t10","t11","map","item","id","contextMenuActions","_temp2","event_0","preventDefault","stopPropagation","dataTransfer","getData","cardProps","t12","key","value","dropEffect","_c","_temp","_temp2","DragEvent","useEffect","useRef","useBoardDragScroll","$","_c","viewportRef","cleanup","t0","t1","Symbol","for","current","t2","startDrag","event","viewport","scrollWidth","clientWidth","document","ownerDocument","window","defaultView","pointer","x","clientX","y","clientY","previousTime","performance","now","frame","trackPointer","event_0","leaveDocument","event_1","relatedTarget","stop","cancelAnimationFrame","removeEventListener","scroll","time","bounds","getBoundingClientRect","edgeWidth","Math","min","width","speed","left","right","top","bottom","leftDistance","rightDistance","scrollLeft","requestAnimationFrame","addEventListener","_c","PointerEvent","useRef","useState","BoardPan","pointerId","startX","scrollLeft","interactiveTarget","useBoardPan","$","_c","pan","isPanning","setIsPanning","t0","Symbol","for","event","current","currentTarget","hasPointerCapture","releasePointerCapture","finishPan","t1","t2","undefined","t3","t4","event_0","pointerType","button","isPrimary","viewport","target","Element","contains","closest","scrollWidth","clientWidth","preventDefault","setPointerCapture","clientX","event_1","gesture","buttons","t5","cursor","userSelect","onPointerDownCapture","onPointerMove","onPointerUp","onPointerCancel","onLostPointerCapture","_c","Box","Stack","Text","ComponentProps","ComponentType","DragEvent","useState","ResourceContextAction","ResourceContextMenu","ScrollArea","ColumnHeader","GroupSection","KanbanRendererCard","useBoardDragScroll","useBoardPan","KanbanRendererCardProps","KanbanRendererBoardItem","id","cardProps","Omit","contextMenuActions","KanbanRendererBoardColumnAction","label","icon","size","KanbanRendererBoardGroup","key","items","KanbanRendererBoardColumn","createLabel","color","groups","totalCount","canDragIn","canDragOut","canCreate","actions","KanbanRendererBoardProps","columns","selectedItemId","onMoveItem","itemId","targetColumnId","context","beforeItemId","targetGroupKey","Promise","onMoveToGroup","onCreateStart","columnId","onColumnAction","actionId","KanbanRendererBoard","props","$","_c","t0","undefined","activeColumn","setActiveColumn","activeGroup","setActiveGroup","panViewportProps","dragScroll","t1","event","dataTransfer","setData","effectAllowed","startDrag","handleDragStart","t2","Symbol","for","handleDragEnd","t3","event_0","preventDefault","dropEffect","handleDragOver","t4","event_1","currentTarget","contains","relatedTarget","Node","handleDragLeave","t5","columnId_0","event_2","itemId_0","getData","handleDrop","t6","viewportRef","t7","display","alignItems","gap","padding","minH","t8","t9","column","margin","spaceY","length","map","group","groupId","event_3","stopPropagation","event_4","event_5","itemId_1","item","event_6","event_7","itemId_2","_c","ScrollArea","Box","HStack","Icon","Text","Wrap","ComponentType","DragEvent","ReactNode","useState","ResourceContextAction","HighlightedText","ListRow","ListRowItem","KanbanRendererAttributeBadge","AttributeBadge","KanbanRendererListItem","id","eyebrow","title","highlight","isGroup","countBadge","countColorPalette","statusIcon","size","statusColor","statusColorPalette","badges","customSlots","children","onClick","onBadgeChange","attributeId","value","contextMenuActions","draggable","onDropRow","rowId","KanbanRendererListExpandedState","Record","KanbanRendererListProps","items","selectedItemId","expandedGroups","onItemClick","item","onExpandedGroupChange","isExpanded","INDENT_STEP_PX","FlattenedKanbanRendererListItem","depth","canExpand","getKanbanRendererListIndentation","undefined","flattenKanbanRendererListItems","expanded","rows","length","push","getRowIsExpanded","getDropTargetIndicatorProps","isDropTarget","_before","content","position","bg","left","top","width","height","const","expandedState","updateExpandedState","KanbanRendererListItemContentProps","KanbanRendererListLabel","props","$","_c","t0","t1","t2","t3","KanbanRendererListBadges","map","badge","hasEndContent","buildListRowItem","hasChildren","label","icon","endContent","isContainer","contextMenuItems","action","key","disabled","isDisabled","separatorBefore","onAction","KanbanRendererList","Symbol","for","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","T0","current","handleExpandedChange","t4","row","KanbanRendererListRowProps","onDraggedItemChange","itemId","onDropTargetChange","onExpandedChange","KanbanRendererListRow","isSelected","canDropHere","Boolean","rowItem","toggleExpanded","handleActivate","event","stopPropagation","dataTransfer","setData","effectAllowed","handleDragStart","event_0","preventDefault","dropEffect","handleDragOver","t5","event_1","currentTarget","contains","relatedTarget","Node","handleDragLeave","t6","event_2","draggedId","getData","handleDrop","t7","handleDragEnd","t8","t9","t10","t11","t12","t13","t14","t15","t16","_c","Box","ReactNode","EmptyState","ScrollArea","CollectionFilterEmptyState","CollectionViewEmptyState","KanbanRendererBoard","KanbanRendererBoardColumn","KanbanRendererList","KanbanRendererListItem","KanbanRendererSettings","KanbanRendererEmptyStateProps","emptyState","title","description","height","KanbanRendererContentProps","contentPlaceholder","sourceCount","filteredCount","visibleCount","search","ruleCount","onClearSearch","onEditFilter","viewMode","boardColumns","listItems","listExpandedGroups","Record","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","rowId","targetColumnId","context","beforeItemId","targetGroupKey","Promise","onBoardMoveToGroup","onCreateRow","columnId","onColumnAction","actionId","onListExpandedGroupChange","isExpanded","listKey","KanbanRendererEmptyState","props","$","_c","undefined","t0","KanbanRendererContent","trim","filteredOut","hasVisibleContent","length","filterMessage","t1","t2","t3","t4","Symbol","for","_c","EmptyState","_Fragment","ScrollArea","Box","HStack","Stack","Text","VStack","ComponentProps","InputGroup","Param","ParamValue","ParamValueMap","ResourceRefValue","ParamEditorField","isParamEditorHorizontalControl","isParamEditorRichControl","ParamEditorHorizontalProps","params","groups","defaultValues","onChange","id","value","onOpenResource","ref","readOnly","variant","HorizontalFieldProps","Omit","HorizontalGroupProps","group","fieldProps","width","HorizontalGroupTitle","props","$","_c","children","t0","HorizontalGroup","undefined","t1","title","t2","t3","t4","t5","t6","param","map","t7","ParamEditorHorizontal","T0","t8","t9","horizontalParams","filter","horizontalGroups","_temp","t10","t11","presentation","size","compactParams","_temp2","richParams","compactGroups","_temp4","_temp5","richGroups","_temp6","_temp7","gap","hasCompactControls","length","param_1","t12","group_2","groupParams_1","groupParams","t13","param_2","t14","t15","group_3","groupParams_2","_temp3","param_0","group_0","group_1","groupParams_0","_c","_temp","_temp2","_temp4","_temp5","_temp6","_temp3","Button","Icon","Input","Stack","Text","Textarea","Wrap","Paperclip","useRef","AttachmentChip","SelectionInput","LazyMarkdownEditor","KanbanRendererCreateField","MarkdownControl","props","$","_c","disabled","field","onChange","t0","defaultValue","t1","t2","next","t3","placeholder","FilesControl","removeLabel","value","input","Array","isArray","File","files","multiple","event","picked","from","target","slice","accept","t4","t5","Symbol","for","current","click","t6","label","t7","length","map","file","index","name","toString","filter","_","itemIndex","t8","CreateFieldControlProps","FieldInput","type","id","description","options","_temp","required","t9","t10","event_0","Number","CreateFieldControl","option","icon","undefined","color","_c","_temp","Button","CloseButton","Dialog","HStack","Stack","Text","useEffect","useRef","useState","handleDialogAcceptShortcut","Param","ParamValueMap","ParamEditorHorizontal","CreateFieldControl","getEnumOptions","AttributeDescriptor","KanbanRendererCreateField","KanbanRendererCreateRowConfig","KanbanRendererCreateSubmission","KanbanRendererCreateDialogProps","open","columnId","columnAttributeId","attributes","config","onClose","onSubmit","submission","Promise","emptyValue","field","type","initialFieldValues","fields","Object","fromEntries","map","id","defaultValue","isFilled","value","required","Array","isArray","length","trim","undefined","editableCreateAttributes","filter","attribute","editable","initialAttributeValues","kind","attributeToParam","locked","base","name","label","description","multiSelect","placeholder","clearable","disabled","options","option","icon","color","singleLine","KanbanRendererCreateDialog","props","values","setValues","Record","attributeValues","setAttributeValues","submitting","setSubmitting","error","setError","resetToken","setResetToken","initializedRef","editableAttributes","current","token","seeded","declared","Set","kept","entries","has","added","keys","close","valid","every","submit","fileFieldIds","files","flatMap","File","declaredValues","caught","Error","message","labels","submitError","details","event","title","toString","removeFile","properties","attributeId","cancel","submitLabel","ViewSort","ResourceContextAction","getIconComponent","withTitleField","sortRowsByView","KanbanActionErrorHandler","runKanbanAction","KanbanRendererColumnGroup","collectDisplayBadges","collectDisplayCustomSlots","findEnumOption","resolveListDropTargetColumnKey","KanbanRendererListItem","AttributeDescriptor","KanbanRendererRow","KanbanRendererSettings","findAttribute","NO_GROUPING","BuildKanbanRendererListItemsInput","settings","sorts","search","visibleRows","TRow","grouped","attributes","onRowClick","row","onActionError","onAttributeChange","rowId","attributeId","value","Promise","onReorder","beforeRowId","getRowContextMenuActions","buildKanbanRendererListItems","input","supportsManualReorder","length","sortFields","sorted","rows","listDisplayProperties","displayProperties","filter","property","getStatusPresentation","key","descriptor","option","type","undefined","statusColorPalette","color","statusIcon","icon","getRowStatusPresentation","status","toListItem","placement","columnKey","rowKey","shorthand","id","eyebrow","title","highlight","badges","customSlots","contextMenuActions","onClick","onBadgeChange","draggable","Boolean","onDropRow","draggedId","targetColumnKey","columnGrouping","rowGrouping","toGroupListItem","group","label","parent","groupingAttributeId","isGroup","countBadge","children","map","column","subgroups","ViewFilterGroup","ViewSort","CollectionViewStoreState","useCollectionViewStore","DEFAULT_KANBAN_RENDERER_SETTINGS","KanbanRendererSettings","KanbanRendererState","KanbanRendererStoreInitialState","settings","Partial","filter","sorts","kanbanRendererInitialState","initialState","useKanbanRendererStore","storageKey","selector","$","_c","t0","_c","useEffect","useReducer","AttributeDescriptor","EnumOptionsSource","isEnumOptionsSource","collectSources","attributes","sources","attribute","type","kind","options","push","resolveAttributeOptions","map","getSnapshot","useResolvedAttributes","$","_c","forceRender","_temp","t0","length","refresh","unsubscribes","source","subscribe","dispose","t1","t2","tick","_c","_temp","ViewFilterGroup","ViewSort","ReactNode","CollectionViewBar","withTitleField","DisplaySortControl","RuleValueOption","useCollectionViews","DisplayMenu","countFilterValues","buildDisplayPropertyOptions","buildFilterCategories","buildGroupingOptions","AttributeDescriptor","KanbanRendererRow","KanbanRendererSavedView","KanbanRendererSettings","KanbanRendererViewsSource","kanbanRendererInitialState","useKanbanRendererStore","useResolvedAttributes","KanbanRendererToolbarProps","rows","TRow","storageKey","itemLabel","attributes","defaultSettings","Partial","defaultFilter","defaultSorts","viewsSource","defaultViews","defaultActiveViewId","search","onSearchChange","value","searchResultLabel","leading","actions","toggle","values","includes","filter","entry","KanbanRendererToolbar","props","$","_c","rawAttributes","t0","settings","sorts","initialState","t1","fields","viewState","setSettings","setSorts","_temp","t2","categories","t3","field","counts","id","category","find","options","map","option","count","optionsFor","t4","t5","views","t6","t7","t8","t9","t10","t11","t12","t13","t14","viewMode","columnGrouping","rowGrouping","t15","displayProperties","property","t16","t17","state","_c","_temp","Stack","ViewFilterGroup","ViewSort","ReactNode","useDeferredValue","useState","ResourceContextAction","withTitleField","countFilterRules","useCollectionViews","KanbanActionErrorHandler","runKanbanAction","KanbanRendererBoardColumnAction","buildKanbanBoardColumns","narrowKanbanRows","applyBoardMoveItem","applyBoardMoveToGroup","KanbanRendererContent","KanbanRendererCreateDialog","groupRows","resolveKnownColumnKeys","buildKanbanRendererListItems","KanbanRendererToolbar","AttributeDescriptor","KanbanRendererCreateRowConfig","KanbanRendererCreateSubmission","KanbanRendererRow","KanbanRendererSavedView","KanbanRendererSettings","KanbanRendererViewsSource","NO_GROUPING","kanbanRendererInitialState","useKanbanRendererStore","useResolvedAttributes","BoardColumnConfig","color","canDragIn","canDragOut","canCreate","actions","KanbanRendererProps","rows","TRow","storageKey","itemLabel","attributes","selectedRowId","emptyState","emptyTitle","emptyDescription","contentPlaceholder","defaultSettings","Partial","defaultFilter","defaultSorts","viewsSource","defaultViews","defaultActiveViewId","hideToolbar","toolbarActions","toolbarLeading","onRowClick","row","onActionError","onAttributeChange","rowId","attributeId","value","Promise","onReorder","beforeRowId","createRow","onCreateRow","submission","onColumnAction","columnId","actionId","getBoardColumnConfig","groupKey","getRowContextMenuActions","KanbanRenderer","props","$","_c","rawAttributes","t0","t1","t2","t3","undefined","initialState","settings","filter","sorts","fields","createColumnId","setCreateColumnId","search","setSearch","deferredSearch","_temp","_temp2","_temp3","expandedGroups","_temp4","setExpandedGroup","_temp5","setOpenMenu","_temp6","filteredRows","visibleRows","columnTotals","t4","trim","searching","grouped","columnGrouping","rowGrouping","knownColumnKeys","structureRows","listItems","boardColumns","t5","targetColumnId","context","targetGroupKey","beforeItemId","handleBoardMoveItem","t6","rowId_0","context_0","handleBoardMoveToGroup","t7","length","t8","t9","t10","t11","t12","t13","t14","t15","t16","viewMode","t17","t18","state","state_0","state_1","state_2","state_3","state_4","_c","AttachmentChip","getIconComponent","ScrollArea$1","ResourceContextMenu","ListRow","WorkspaceBadge","EmptyState$1","findEnumOption","groupRowsByField","CollectionViewBar","countFilterRules","EMPTY_VIEW_FILTER","formatFieldText","findAttribute","getAttributeStringValues","isAttributesSource","getAttributeValue","filterRowsByView","findField","withTitleField","useCollectionViewStore","DEFAULT_KANBAN_RENDERER_SETTINGS","getEnumOptions","NO_GROUPING","isParamEditorRichControl","isParamEditorHorizontalControl","LazyMarkdownEditor","searchRows","SelectionInput","ParamEditorField","isEnumOptionsSource","sortRowsByView","useCollectionViews","HighlightedText","buildDisplayPropertyOptions","collectDisplayBadges","renderBadgeListDisplay","resolveKnownColumnKeys","collectDisplayCustomSlots","CollectionViewEmptyState","buildFilterCategories","resolveListDropTargetColumnKey","DisplayMenu","buildGroupingOptions","DisplaySortControl","renderAttributeBadge","runKanbanAction","run","error","onError","action","groupRows","rows","options","columnField","attributes","columnGrouping","rowField","rowGrouping","structure","structureRows","knownColumnKeys","group","source","column","keys","countFilterValues","counts","descriptor","attributeId","row","value","rowEyebrow","shorthand","narrowKanbanRows","input","displayProperties","settings","property","showsId","idTexts","searchTexts","field","id","filteredRows","filter","fields","visibleRows","search","columns","buildKanbanBoardColumns","toBoardItems","sorts","getRowContextMenuActions","onAttributeChange","onActionError","onRowClick","grouped","columnConfig","getBoardColumnConfig","enumOption","groups","subgroup","columnTotals","applyBoardMoveItem","rowId","targetColumnId","targetGroupKey","onReorder","beforeItemId","applyBoardMoveToGroup","CollectionFilterEmptyState","$","c","props","t0","Icon","ListFilter","t1","ruleCount","hiddenCount","t2","onEditFilter","Button","t3","ColumnHeader","Text","t4","t5","Badge","t6","Spacer","t7","onCreateStart","Tooltip$1","IconButton","Plus","t8","onColumnAction","Menu","MoreHorizontal","t9","HStack","stopRowActivation","event","getSelectedValues","badge","toggleMultiValue","values","optionValue","getBadgeIconColor","selectionIcon","SquareCheck","Square","Check","KanbanRendererAttributeBadge","T0","T1","T2","T3","onChange","canEdit","isMultiValue","selectedValues","t10","rowInteractionProps","handleOptionChange","nextValue","t11","t12","ChevronDown","t13","Fragment","badgeContent","t14","Portal","isSelected","option","KanbanRendererCard","highlight","badges","customSlots","hasBadges","cursor","draggable","onClick","handleClick","eyebrow","workspaceBadge","title","onBadgeChange","Wrap","t15","onDragEnd","onDragStart","Stack","GroupSection","expanded","setExpanded","useState","isDropTarget","canDragIn","onGroupDragOver","onGroupDragLeave","onGroupDrop","_temp$5","Box","ChevronRight","canDragOut","selectedItemId","item","_temp2$2","event_0","itemId","columnId","useBoardDragScroll","viewportRef","useRef","cleanup","useEffect","viewport","document","window","pointer","previousTime","frame","trackPointer","leaveDocument","event_1","stop","scroll","bounds","edgeWidth","speed","leftDistance","rightDistance","time","interactiveTarget","useBoardPan","pan","isPanning","setIsPanning","finishPan","gesture","KanbanRendererBoard","activeColumn","setActiveColumn","activeGroup","setActiveGroup","panViewportProps","dragScroll","handleDragStart","handleDragEnd","handleDragOver","handleDragLeave","onMoveItem","event_2","itemId_0","columnId_0","handleDrop","onMoveToGroup","groupId","event_3","event_4","event_5","itemId_1","event_6","event_7","itemId_2","flattenKanbanRendererListItems","items","canExpand","getRowIsExpanded","depth","getDropTargetIndicatorProps","isGroup","expandedState","updateExpandedState","isExpanded","KanbanRendererListLabel","KanbanRendererListBadges","hasEndContent","buildListRowItem","hasChildren","KanbanRendererList","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","expandedGroups","onExpandedGroupChange","onItemClick","current","handleExpandedChange","KanbanRendererListRow","canDropHere","rowItem","onExpandedChange","toggleExpanded","handleActivate","onDraggedItemChange","onDropTargetChange","draggedId","t16","KanbanRendererEmptyState","emptyState","height","description","KanbanRendererContent","contentPlaceholder","sourceCount","visibleCount","onClearSearch","filteredOut","filteredCount","hasVisibleContent","viewMode","boardColumns","listItems","filterMessage","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","selectedRowId","emptyDescription","emptyTitle","listExpandedGroups","listKey","onListExpandedGroupChange","HorizontalGroupTitle","children","HorizontalGroup","width","variant","fieldProps","params","param","VStack","ParamEditorHorizontal","defaultValues","onOpenResource","readOnly","horizontalParams","horizontalGroups","_temp$4","compactParams","_temp2$1","richParams","compactGroups","_temp4$1","_temp5$1","richGroups","_temp6$1","_temp7","gap","hasCompactControls","param_1","group_2","groupParams_1","param_2","group_3","groupParams_2","_temp3$1","param_0","group_0","groupParams","group_1","groupParams_0","MarkdownControl","disabled","next","FilesControl","files","picked","Paperclip","removeLabel","itemIndex","index","file","FieldInput","Textarea","_temp$3","Input","CreateFieldControl","emptyValue","initialFieldValues","isFilled","editableCreateAttributes","attribute","initialAttributeValues","columnAttributeId","attributeToParam","base","multiSelect","locked","KanbanRendererCreateDialog","setValues","attributeValues","setAttributeValues","submitting","setSubmitting","setError","resetToken","setResetToken","initializedRef","editableAttributes","open","config","token","seeded","declared","kept","added","id_0","editable","seeded_0","declared_0","kept_0","current_0","id_1","added_0","id_2","close","onClose","valid","field_0","submit","fileFieldIds","field_1","field_2","id_3","declaredValues","id_4","onSubmit","caught","Dialog","details","handleDialogAcceptShortcut","CloseButton","field_3","current_1","attribute_0","current_2","value_0","buildKanbanRendererListItems","supportsManualReorder","sortFields","sorted","listDisplayProperties","getStatusPresentation","key","getRowStatusPresentation","status","toListItem","targetColumnKey","placement","toGroupListItem","groupingAttributeId","parent","columnKey","kanbanRendererInitialState","initialState","useKanbanRendererStore","storageKey","selector","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","_temp$2","refresh","unsubscribes","dispose","tick","toggle","entry","KanbanRendererToolbar","rawAttributes","defaultFilter","defaultSettings","defaultSorts","viewState","_temp$1","categories","optionsFor","setSorts","setSettings","t17","actions","leading","onSearchChange","searchResultLabel","state","KanbanRenderer","hideToolbar","createColumnId","setCreateColumnId","setSearch","deferredSearch","useDeferredValue","_temp","_temp2","_temp3","_temp4","setExpandedGroup","_temp5","setOpenMenu","_temp6","searching","context","handleBoardMoveItem","rowId_0","context_0","handleBoardMoveToGroup","defaultActiveViewId","defaultViews","toolbarActions","toolbarLeading","viewsSource","createRow","t18","state_0","state_1","state_2","state_3","state_4"],"sources":["../src/components/kanban-renderer/kanban-renderer-action.ts","../src/components/kanban-renderer/kanban-renderer-grouping.ts","../src/components/kanban-renderer/kanban-renderer-board-columns.ts","../src/components/kanban-renderer/kanban-renderer-board-move.ts","../src/components/collection-view/collection-filter-empty-state.tsx","../src/components/kanban-renderer/kanban-renderer-board-column-header.tsx","../src/components/kanban-renderer/kanban-renderer-attribute-badge.tsx","../src/components/kanban-renderer/kanban-renderer-card.tsx","../src/components/kanban-renderer/kanban-renderer-board-group-section.tsx","../src/components/kanban-renderer/use-board-drag-scroll.ts","../src/components/kanban-renderer/use-board-pan.ts","../src/components/kanban-renderer/kanban-renderer-board.tsx","../src/components/kanban-renderer/kanban-renderer-list.tsx","../src/components/kanban-renderer/kanban-renderer-content.tsx","../src/components/param-editor/param-editor-horizontal.tsx","../src/components/kanban-renderer/kanban-renderer-create-field.tsx","../src/components/kanban-renderer/kanban-renderer-create-dialog.tsx","../src/components/kanban-renderer/kanban-renderer-list-items.ts","../src/components/kanban-renderer/use-kanban-renderer-store.ts","../src/components/kanban-renderer/use-resolved-attributes.ts","../src/components/kanban-renderer/kanban-renderer-toolbar.tsx","../src/components/kanban-renderer/kanban-renderer.tsx"],"sourcesContent":["export type KanbanActionErrorHandler = (error: unknown, action: string) => void;\n\nexport const runKanbanAction = async (action: string, run: () => unknown, onError?: KanbanActionErrorHandler) => {\n try {\n await run();\n } catch (error) {\n if (!onError) throw error;\n onError(error, action);\n }\n};\n","import { getAttributeStringValues } from \"../collection-view/collection-view-fields\";\nimport { type CollectionRowGroup, groupRowsByField } from \"../collection-view/collection-view-grouping\";\nimport { type AttributeDescriptor, findAttribute, type KanbanRendererRow } from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n /** Source rows define the group structure; filtered rows supply its contents. */\n structureRows?: KanbanRendererRow[];\n}\n\ntype KanbanRendererRowGroup = CollectionRowGroup;\n\ninterface KanbanRendererColumnGroup extends CollectionRowGroup {\n subgroups: KanbanRendererRowGroup[];\n}\n\n/** Columns follow the grouping field's group order; sub-groups split each column the same way. */\nexport const groupRows = (rows: KanbanRendererRow[], options: GroupingOptions): KanbanRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys, structureRows = rows } = options;\n const columnField = findAttribute(attributes, columnGrouping);\n const rowField = findAttribute(attributes, rowGrouping);\n const structure = columnField ? groupRowsByField(structureRows, columnField) : [];\n const columns = columnField\n ? groupRowsByField(rows, columnField, knownColumnKeys ?? structure.map((group) => group.key))\n : [{ key: \"all\", label: \"All\", rows }];\n return columns.map((column) => {\n const source = columnField ? (structure.find((group) => group.key === column.key)?.rows ?? []) : structureRows;\n const keys = rowField ? groupRowsByField(source, rowField).map((group) => group.key) : [];\n return { ...column, subgroups: rowField ? groupRowsByField(column.rows, rowField, keys) : [] };\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 type { ViewFilterGroup, ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { findField, formatFieldText } from \"../collection-view/collection-view-fields\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { searchRows } from \"../collection-view/collection-view-search\";\nimport { sortRowsByView } from \"../collection-view/collection-view-sort\";\nimport type { BoardColumnConfig } from \"./kanban-renderer\";\nimport { type KanbanActionErrorHandler, runKanbanAction } from \"./kanban-renderer-action\";\nimport type { KanbanRendererBoardColumn, KanbanRendererBoardGroup } from \"./kanban-renderer-board\";\nimport { groupRows, type KanbanRendererColumnGroup } from \"./kanban-renderer-grouping\";\nimport { collectDisplayBadges, collectDisplayCustomSlots, findEnumOption } from \"./kanban-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n findAttribute,\n type KanbanRendererRow,\n type KanbanRendererSettings,\n NO_GROUPING,\n} from \"./types\";\n\nexport const rowEyebrow = (row: KanbanRendererRow) => {\n const shorthand = row.attributes.id;\n return typeof shorthand === \"string\" && shorthand ? shorthand : row.id;\n};\n\ninterface NarrowKanbanRowsInput<TRow extends KanbanRendererRow> {\n rows: TRow[];\n filter: ViewFilterGroup;\n fields: AttributeDescriptor[];\n attributes: AttributeDescriptor[];\n settings: KanbanRendererSettings;\n search: string;\n}\n\n/** Applies the view's filter, then the search, and counts each column before search narrowed it. */\nexport const narrowKanbanRows = <TRow extends KanbanRendererRow>(input: NarrowKanbanRowsInput<TRow>) => {\n const { rows, filter, fields, attributes, settings, search } = input;\n const displayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const showsId = settings.displayProperties.includes(\"id\");\n // Lists always show a row's short id. Boards show an id only when it is a display property.\n const idTexts = (row: KanbanRendererRow) => {\n if (settings.viewMode === \"list\") return typeof row.attributes.id === \"string\" ? [row.attributes.id] : [];\n return showsId ? [rowEyebrow(row)] : [];\n };\n // Search matches only what a row shows: its title, its id when shown, and its visible properties.\n const searchTexts = (row: KanbanRendererRow) => [\n row.title,\n ...idTexts(row),\n ...displayProperties.flatMap((id) => {\n const field = findField(attributes, id);\n return field ? formatFieldText(row, field) : [];\n }),\n ];\n const filteredRows = filterRowsByView(rows, filter, fields);\n const visibleRows = searchRows(filteredRows, search, searchTexts);\n const columns = groupRows(filteredRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: NO_GROUPING,\n });\n const columnTotals = new Map(columns.map((column) => [column.key, column.rows.length]));\n return { filteredRows, visibleRows, columnTotals };\n};\n\ninterface BuildKanbanBoardColumnsInput<TRow extends KanbanRendererRow> {\n grouped: KanbanRendererColumnGroup[];\n settings: KanbanRendererSettings;\n sorts: ViewSort[];\n fields: AttributeDescriptor[];\n attributes: AttributeDescriptor[];\n search: string;\n /** Cards per column before search, set only while a search is active. */\n columnTotals?: Map<string, number>;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onActionError?: KanbanActionErrorHandler;\n onRowClick?: (row: TRow) => void;\n}\n\n/** Sorts order cards inside each column; columns keep the grouping field's order. */\nexport const buildKanbanBoardColumns = <TRow extends KanbanRendererRow>(input: BuildKanbanBoardColumnsInput<TRow>) => {\n const { grouped, settings, sorts, fields, attributes, search, columnTotals } = input;\n const { getBoardColumnConfig, getRowContextMenuActions, onAttributeChange, onActionError, onRowClick } = input;\n const displayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const showsId = settings.displayProperties.includes(\"id\");\n const columnField = findAttribute(attributes, settings.columnGrouping);\n const toBoardItems = (rows: KanbanRendererRow[]) =>\n sortRowsByView(rows, sorts, fields).map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n eyebrow: showsId ? rowEyebrow(row) : undefined,\n title: row.title,\n highlight: search,\n badges: collectDisplayBadges(row, attributes, displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, displayProperties),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) =>\n runKanbanAction(\"Update attribute\", () => onAttributeChange(row.id, attributeId, value), onActionError)\n : undefined,\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n return grouped.map((column): KanbanRendererBoardColumn => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n // Column color follows the enum option when the contribution does not\n // provide one, while row display badges stay visually neutral.\n const enumOption = columnField ? findEnumOption(columnField.type, column.key) : undefined;\n const groups: KanbanRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(subgroup.rows),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumOption?.color,\n icon: enumOption?.icon ?? \"circle\",\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(column.rows),\n groups,\n totalCount: columnTotals?.get(column.key),\n };\n });\n};\n","import type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { KanbanRendererSettings } from \"./types\";\nimport { NO_GROUPING } from \"./types\";\n\ninterface ApplyBoardMoveItemInput {\n settings: Pick<KanbanRendererSettings, \"columnGrouping\" | \"rowGrouping\">;\n /** A sorted view decides its own order, so dropping a card only keeps its place without sorts. */\n sorts: ViewSort[];\n rowId: string;\n targetColumnId: string;\n targetGroupKey?: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\ninterface ApplyBoardMoveToGroupInput {\n settings: Pick<KanbanRendererSettings, \"rowGrouping\">;\n sorts: ViewSort[];\n rowId: string;\n targetGroupKey: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\nexport const applyBoardMoveItem = async (input: ApplyBoardMoveItemInput) => {\n const { settings, sorts, rowId, targetColumnId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n await onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n }\n if (settings.rowGrouping !== NO_GROUPING && targetGroupKey && onAttributeChange) {\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n }\n if (sorts.length === 0) await onReorder?.(rowId, beforeItemId);\n};\n\nexport const applyBoardMoveToGroup = async (input: ApplyBoardMoveToGroupInput) => {\n const { settings, sorts, rowId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n if (sorts.length === 0) await onReorder?.(rowId, beforeItemId);\n};\n","import { Button, Icon } from \"@chakra-ui/react\";\nimport { ListFilter } from \"lucide-react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\ninterface CollectionFilterEmptyStateProps {\n ruleCount: number;\n hiddenCount: number;\n onEditFilter?: () => void;\n}\n\n/** Filter feedback leaves room for the collection's group structure below. */\nexport const CollectionFilterEmptyState = (props: CollectionFilterEmptyStateProps) => {\n const { ruleCount, hiddenCount, onEditFilter } = props;\n return (\n <EmptyState\n role=\"status\"\n size=\"sm\"\n flexShrink=\"0\"\n icon={<Icon as={ListFilter} />}\n title=\"Nothing matches this view\"\n description={`${ruleCount} filter ${ruleCount === 1 ? \"rule hides\" : \"rules hide\"} all ${hiddenCount} ${hiddenCount === 1 ? \"item\" : \"items\"}.`}\n >\n {onEditFilter ? (\n <Button size=\"2xs\" variant=\"outline\" onClick={onEditFilter}>\n <ListFilter /> Edit filter\n </Button>\n ) : null}\n </EmptyState>\n );\n};\n","import { Badge, HStack, Icon, IconButton, Menu, Spacer, Text } from \"@chakra-ui/react\";\nimport { MoreHorizontal, Plus } from \"lucide-react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\n\ninterface ColumnHeaderProps {\n column: KanbanRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack minH=\"1.5rem\" gap=\"2xs\" alignItems=\"center\" colorPalette={column.color ?? \"gray\"}>\n <Icon\n data-testid=\"column-status-icon\"\n as={getIconComponent(column.icon)}\n boxSize=\"0.875rem\"\n color=\"colorPalette.solid\"\n flexShrink={0}\n />\n <Text textStyle=\"label/S/medium\">{column.label}</Text>\n\n <Badge variant=\"number\" size=\"xs\" colorPalette=\"gray\">\n {column.totalCount ? `${column.items.length} of ${column.totalCount}` : column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Badge, Icon, Menu, Portal } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Square, SquareCheck } from \"lucide-react\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\ninterface KanbanRendererAttributeBadgeProps {\n badge: AttributeBadge;\n onChange?: (attributeId: string, value: unknown) => void;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\n\nconst getSelectedValues = (badge: AttributeBadge) => {\n if (Array.isArray(badge.value)) return badge.value;\n return badge.value ? [badge.value] : [];\n};\n\nconst toggleMultiValue = (values: string[], optionValue: string) =>\n values.includes(optionValue) ? values.filter((value) => value !== optionValue) : [...values, optionValue];\n\nconst getBadgeIconColor = (badge: AttributeBadge) => (badge.color ? `${badge.color}.fg` : \"fg.muted\");\n\nconst selectionIcon = (input: { isMultiValue: boolean; isSelected: boolean }) => {\n if (input.isMultiValue) return input.isSelected ? <SquareCheck size={14} /> : <Square size={14} />;\n return input.isSelected ? <Check size={14} /> : null;\n};\n\nexport const KanbanRendererAttributeBadge = (props: KanbanRendererAttributeBadgeProps) => {\n const { badge, onChange } = props;\n const options = badge.options ?? [];\n const canEdit = Boolean(onChange && badge.isEditable && options.length > 0);\n const isMultiValue = Array.isArray(badge.value);\n const selectedValues = getSelectedValues(badge);\n const rowInteractionProps = {\n onClick: stopRowActivation,\n onPointerDown: stopRowActivation,\n onKeyDown: stopRowActivation,\n };\n\n const handleOptionChange = (optionValue: string) => {\n let nextValue: string | string[];\n if (isMultiValue) nextValue = toggleMultiValue(selectedValues, optionValue);\n else nextValue = selectedValues.includes(optionValue) ? \"\" : optionValue;\n onChange?.(badge.attributeId, nextValue);\n };\n\n const badgeContent = (\n <>\n {badge.icon ? <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={getBadgeIconColor(badge)} /> : null}\n {badge.label}\n {canEdit ? <Icon as={ChevronDown} boxSize=\"3\" color=\"fg.muted\" /> : null}\n </>\n );\n\n if (!canEdit) {\n return (\n <Badge variant=\"ticket\" gap=\"2xs\" textStyle=\"label/XS/medium\">\n {badgeContent}\n </Badge>\n );\n }\n\n return (\n <Menu.Root closeOnSelect={!isMultiValue}>\n <Menu.Trigger asChild>\n <Badge\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n variant=\"ticket\"\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n onClick={stopRowActivation}\n onPointerDown={stopRowActivation}\n onKeyDown={stopRowActivation}\n >\n {badgeContent}\n </Badge>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n minW=\"180px\"\n p=\"0\"\n gap=\"0\"\n onClick={stopRowActivation}\n onPointerDown={stopRowActivation}\n onKeyDown={stopRowActivation}\n >\n {options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n role={isMultiValue ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected}\n variant=\"full-width\"\n id={option.value}\n label={option.label}\n icon={<Icon as={getIconComponent(option.icon)} boxSize=\"16px\" />}\n iconColor={`${option.color ?? \"gray\"}.500`}\n isSelected={isSelected}\n endContent={selectionIcon({ isMultiValue, isSelected })}\n onActivate={() => handleOptionChange(option.value)}\n {...rowInteractionProps}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, MouseEvent, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/primitives/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/primitives/workspace-badge\";\nimport { HighlightedText } from \"../collection-view/highlighted-text\";\nimport { KanbanRendererAttributeBadge } from \"./kanban-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\nexport interface KanbanRendererCardProps {\n eyebrow?: string;\n title: string;\n /** Search text to mark in the title and eyebrow. */\n highlight?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const KanbanRendererCard = (props: KanbanRendererCardProps) => {\n const {\n eyebrow,\n title,\n highlight = \"\",\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onBadgeChange,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const clickCursor = onClick ? \"pointer\" : \"default\";\n const cursor = draggable ? \"grab\" : clickCursor;\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (event.defaultPrevented) return;\n if (!(event.target instanceof Node) || !event.currentTarget.contains(event.target)) return;\n onClick?.();\n };\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"compact\"\n borderRadius=\"compact\"\n borderWidth=\"1px\"\n borderColor={isSelected ? \"border.accent\" : \"border\"}\n width=\"100%\"\n background=\"bg\"\n transition=\"border-color 0.2s ease-in-out, background 0.2s ease-in-out\"\n _hover={{ borderColor: isSelected ? \"border.accent\" : \"border.accent-light\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick ? handleClick : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\n data-board-pan-ignore\n >\n {eyebrow || workspaceBadge ? (\n <HStack minW=\"0\" gap=\"2xs\">\n {eyebrow ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\" fontFamily=\"mono\" truncate>\n <HighlightedText text={eyebrow} query={highlight} />\n </Text>\n ) : null}\n <HStack marginLeft=\"auto\">{workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}</HStack>\n </HStack>\n ) : null}\n\n <Text textStyle=\"paragraph/S/regular\" minW=\"0\" overflowWrap=\"anywhere\">\n <HighlightedText text={title} query={highlight} />\n </Text>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <KanbanRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={onBadgeChange} />\n ))}\n {customSlots}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { type DragEvent, useState } from \"react\";\n\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport type { KanbanRendererBoardGroup } from \"./kanban-renderer-board\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\n\ninterface GroupSectionProps {\n columnId: string;\n group: KanbanRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nexport const GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n data-board-pan-ignore\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((value) => !value)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"number\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"xs\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <KanbanRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import { type DragEvent, useEffect, useRef } from \"react\";\n\nexport const useBoardDragScroll = () => {\n const viewportRef = useRef<HTMLDivElement>(null);\n const cleanup = useRef<(() => void) | null>(null);\n\n useEffect(() => () => cleanup.current?.(), []);\n\n const startDrag = (event: DragEvent<HTMLDivElement>) => {\n cleanup.current?.();\n const viewport = viewportRef.current;\n if (!viewport || viewport.scrollWidth <= viewport.clientWidth) return;\n\n const document = viewport.ownerDocument;\n const window = document.defaultView!;\n let pointer: { x: number; y: number } | null = { x: event.clientX, y: event.clientY };\n let previousTime = window.performance.now();\n let frame = 0;\n\n const trackPointer = (event: globalThis.DragEvent) => {\n pointer = { x: event.clientX, y: event.clientY };\n };\n const leaveDocument = (event: globalThis.DragEvent) => {\n // Leaving the document has no next dragover to update the pointer position.\n if (!event.relatedTarget) pointer = null;\n };\n const stop = () => {\n window.cancelAnimationFrame(frame);\n document.removeEventListener(\"dragover\", trackPointer, true);\n document.removeEventListener(\"dragleave\", leaveDocument, true);\n document.removeEventListener(\"drop\", stop, true);\n document.removeEventListener(\"dragend\", stop, true);\n window.removeEventListener(\"blur\", stop);\n cleanup.current = null;\n };\n const scroll = (time: number) => {\n const bounds = viewport.getBoundingClientRect();\n const edgeWidth = Math.min(96, bounds.width / 2);\n let speed = 0;\n if (\n pointer &&\n pointer.x >= bounds.left &&\n pointer.x <= bounds.right &&\n pointer.y >= bounds.top &&\n pointer.y <= bounds.bottom\n ) {\n const leftDistance = pointer.x - bounds.left;\n const rightDistance = bounds.right - pointer.x;\n if (leftDistance < edgeWidth) speed = -960 * (1 - leftDistance / edgeWidth);\n else if (rightDistance < edgeWidth) speed = 960 * (1 - rightDistance / edgeWidth);\n }\n viewport.scrollLeft += (speed * (time - previousTime)) / 1000;\n previousTime = time;\n frame = window.requestAnimationFrame(scroll);\n };\n\n // Native dragover events are sparse. Keep scrolling while a card is held near an edge.\n document.addEventListener(\"dragover\", trackPointer, true);\n document.addEventListener(\"dragleave\", leaveDocument, true);\n document.addEventListener(\"drop\", stop, true);\n document.addEventListener(\"dragend\", stop, true);\n window.addEventListener(\"blur\", stop);\n cleanup.current = stop;\n frame = window.requestAnimationFrame(scroll);\n };\n\n return { viewportRef, startDrag };\n};\n","import { type PointerEvent, useRef, useState } from \"react\";\n\ninterface BoardPan {\n pointerId: number;\n startX: number;\n scrollLeft: number;\n}\n\nconst interactiveTarget =\n 'button, a, input, textarea, select, [role=\"button\"], [role=\"menu\"], [contenteditable]:not([contenteditable=\"false\"]), [data-board-pan-ignore], [data-scope=\"scroll-area\"][data-part=\"scrollbar\"]';\n\nexport const useBoardPan = () => {\n const pan = useRef<BoardPan | null>(null);\n const [isPanning, setIsPanning] = useState(false);\n\n const finishPan = (event: PointerEvent<HTMLDivElement>) => {\n if (pan.current?.pointerId !== event.pointerId) return;\n pan.current = null;\n setIsPanning(false);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n };\n\n return {\n cursor: isPanning ? \"grabbing\" : \"grab\",\n userSelect: isPanning ? \"none\" : undefined,\n onPointerDownCapture: (event: PointerEvent<HTMLDivElement>) => {\n // Leave touch scrolling and card/control gestures with their existing owners.\n if (event.pointerType !== \"mouse\" || event.button !== 0 || !event.isPrimary) return;\n const viewport = event.currentTarget;\n // React portal events bubble here even when their DOM is outside the viewport.\n if (\n !(event.target instanceof Element) ||\n !viewport.contains(event.target) ||\n event.target.closest(interactiveTarget)\n ) {\n return;\n }\n if (viewport.scrollWidth <= viewport.clientWidth) return;\n\n event.preventDefault();\n viewport.setPointerCapture(event.pointerId);\n pan.current = { pointerId: event.pointerId, startX: event.clientX, scrollLeft: viewport.scrollLeft };\n setIsPanning(true);\n },\n onPointerMove: (event: PointerEvent<HTMLDivElement>) => {\n const gesture = pan.current;\n if (!gesture || gesture.pointerId !== event.pointerId) return;\n if ((event.buttons & 1) === 0) {\n finishPan(event);\n return;\n }\n event.currentTarget.scrollLeft = gesture.scrollLeft + gesture.startX - event.clientX;\n },\n onPointerUp: finishPan,\n onPointerCancel: finishPan,\n onLostPointerCapture: finishPan,\n };\n};\n","import { Box, Stack, Text } from \"@chakra-ui/react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { ColumnHeader } from \"./kanban-renderer-board-column-header\";\nimport { GroupSection } from \"./kanban-renderer-board-group-section\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\nimport { useBoardDragScroll } from \"./use-board-drag-scroll\";\nimport { useBoardPan } from \"./use-board-pan\";\n\ntype KanbanRendererCardProps = ComponentProps<typeof KanbanRendererCard>;\n\nexport interface KanbanRendererBoardItem {\n id: string;\n cardProps: Omit<KanbanRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface KanbanRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface KanbanRendererBoardGroup {\n key: string;\n label: string;\n items: KanbanRendererBoardItem[];\n}\n\nexport interface KanbanRendererBoardColumn {\n id: string;\n label: string;\n createLabel?: string;\n color?: string;\n icon?: string | null;\n items: KanbanRendererBoardItem[];\n groups?: KanbanRendererBoardGroup[];\n /** Cards in the column before search narrowed it. Set only while a search is active. */\n totalCount?: number;\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: KanbanRendererBoardColumnAction[];\n}\n\ninterface KanbanRendererBoardProps {\n columns: KanbanRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (\n itemId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => Promise<void> | void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const KanbanRendererBoard = (props: KanbanRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n const panViewportProps = useBoardPan();\n const dragScroll = useBoardDragScroll();\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n dragScroll.startDrag(event);\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n size=\"xs\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n viewportRef={dragScroll.viewportRef}\n viewportProps={panViewportProps}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"xs\", padding: \"xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"xs\"\n padding=\"compact\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"sm\"\n background={activeColumn === column.id ? \"bg.active\" : \"bg.subtle\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"xs\",\n }}\n >\n {column.items.length === 0 && column.totalCount ? (\n <Stack alignItems=\"center\" gap=\"2xs\" paddingY=\"xl\" textAlign=\"center\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n No matching cards\n </Text>\n <Text textStyle=\"label/XS\" color=\"fg.subtle\">\n {column.totalCount} {column.totalCount === 1 ? \"card\" : \"cards\"} hidden by search\n </Text>\n </Stack>\n ) : null}\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n if (onMoveItem) {\n onMoveItem(itemId, column.id, { beforeItemId, targetGroupKey: group.key });\n return;\n }\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <KanbanRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n","import { Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { type ComponentType, type DragEvent, type ReactNode, useState } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { HighlightedText } from \"../collection-view/highlighted-text\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport { KanbanRendererAttributeBadge } from \"./kanban-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\nexport interface KanbanRendererListItem {\n id: string;\n eyebrow?: string;\n title: string;\n /** Search text to mark in the title and eyebrow. */\n highlight?: string;\n isGroup?: boolean;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n statusColorPalette?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: KanbanRendererListItem[];\n onClick?: () => void;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: string) => void;\n}\n\nexport type KanbanRendererListExpandedState = Record<string, boolean>;\n\nexport interface KanbanRendererListProps {\n items: KanbanRendererListItem[];\n selectedItemId?: string | null;\n expandedGroups?: KanbanRendererListExpandedState;\n onItemClick?: (item: KanbanRendererListItem) => void;\n onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\ninterface FlattenedKanbanRendererListItem {\n id: string;\n item: KanbanRendererListItem;\n depth: number;\n isGroup: boolean;\n canExpand: boolean;\n}\n\nexport const getKanbanRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nexport const flattenKanbanRendererListItems = (\n items: KanbanRendererListItem[],\n expanded: KanbanRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedKanbanRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({\n id: item.id,\n item,\n depth,\n isGroup: item.isGroup === true,\n canExpand,\n });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenKanbanRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetIndicatorProps = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n\n return {\n _before: {\n content: '\"\"',\n position: \"absolute\",\n bg: \"border.accent\",\n left: \"0\",\n top: \"0\",\n width: isGroup ? \"3px\" : \"100%\",\n height: isGroup ? \"100%\" : \"2px\",\n },\n } as const;\n};\n\nconst getRowIsExpanded = (expandedState: KanbanRendererListExpandedState, rowId: string) => {\n return expandedState[rowId] !== false;\n};\n\nconst updateExpandedState = (expandedState: KanbanRendererListExpandedState, rowId: string, isExpanded: boolean) => {\n return { ...expandedState, [rowId]: isExpanded };\n};\n\ninterface KanbanRendererListItemContentProps {\n item: KanbanRendererListItem;\n}\n\nconst KanbanRendererListLabel = (props: KanbanRendererListItemContentProps) => {\n const { item } = props;\n\n if (item.isGroup) {\n return (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/medium\" minW=\"0\" truncate>\n {item.title}\n </Text>\n <Text textStyle=\"label/XS\" color=\"fg.muted\" flexShrink={0}>\n {item.countBadge}\n </Text>\n </HStack>\n );\n }\n\n return (\n <HStack gap=\"compact\" minW=\"0\" maxW=\"full\" flex=\"1\">\n {item.eyebrow ? (\n <Text data-testid=\"list-row-eyebrow\" flexShrink={0} textStyle=\"mono/XS\" color=\"fg.muted\" truncate>\n <HighlightedText text={item.eyebrow} query={item.highlight ?? \"\"} />\n </Text>\n ) : null}\n <Text textStyle=\"paragraph/S/regular\" minW=\"0\" truncate>\n <HighlightedText text={item.title} query={item.highlight ?? \"\"} />\n </Text>\n </HStack>\n );\n};\n\nconst KanbanRendererListBadges = (props: KanbanRendererListItemContentProps) => {\n const { item } = props;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <KanbanRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={item.onBadgeChange} />\n ))}\n {item.customSlots}\n </Wrap>\n </HStack>\n );\n};\n\n// ListRow only reserves end space when endContent is set, so rows without badges pass null.\nconst hasEndContent = (item: KanbanRendererListItem) =>\n (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\nconst buildListRowItem = (item: KanbanRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: <KanbanRendererListLabel item={item} />,\n icon: item.statusIcon ? (\n <Icon\n data-testid={item.isGroup ? \"list-status-icon\" : \"row-status-icon\"}\n as={item.statusIcon}\n boxSize=\"1rem\"\n colorPalette={item.statusColorPalette ?? item.countColorPalette ?? \"gray\"}\n color={item.statusColor ?? (item.isGroup || item.statusColorPalette ? \"colorPalette.solid\" : \"fg.muted\")}\n />\n ) : undefined,\n endContent: hasEndContent(item) ? <KanbanRendererListBadges item={item} /> : null,\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n separatorBefore: action.separatorBefore,\n endContent: action.endContent,\n onAction: action.onClick,\n })),\n});\n\nexport const KanbanRendererList = (props: KanbanRendererListProps) => {\n const { items, selectedItemId = null, expandedGroups, onItemClick, onExpandedGroupChange } = props;\n const [localExpandedGroups, setLocalExpandedGroups] = useState<KanbanRendererListExpandedState>({});\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const expanded = expandedGroups ?? localExpandedGroups;\n const rows = flattenKanbanRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n onExpandedGroupChange?.(rowId, isExpanded);\n if (expandedGroups === undefined) {\n setLocalExpandedGroups((current) => updateExpandedState(current, rowId, isExpanded));\n }\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <KanbanRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface KanbanRendererListRowProps {\n row: FlattenedKanbanRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: KanbanRendererListItem) => void;\n}\n\nconst KanbanRendererListRow = (props: KanbanRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, isGroup, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n if (isGroup) return;\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n position=\"relative\"\n borderBottomWidth=\"1px\"\n borderBottomColor=\"border.subtle\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n draggable={item.draggable}\n transition=\"background 120ms ease\"\n {...getDropTargetIndicatorProps(isDropTarget, canExpand)}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n aria-label={isGroup ? undefined : item.title}\n variant={isGroup ? \"compact\" : \"collection\"}\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n showContextMenuTrigger={false}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { CollectionFilterEmptyState } from \"../collection-view/collection-filter-empty-state\";\nimport { CollectionViewEmptyState } from \"../collection-view/collection-view-empty-state\";\nimport { KanbanRendererBoard, type KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\nimport { KanbanRendererList, type KanbanRendererListItem } from \"./kanban-renderer-list\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface KanbanRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface KanbanRendererContentProps {\n contentPlaceholder?: ReactNode;\n sourceCount: number;\n filteredCount: number;\n visibleCount: number;\n search: string;\n ruleCount: number;\n onClearSearch: () => void;\n onEditFilter?: () => void;\n viewMode: KanbanRendererSettings[\"viewMode\"];\n boardColumns: KanbanRendererBoardColumn[];\n listItems: KanbanRendererListItem[];\n listExpandedGroups: Record<string, boolean>;\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onBoardMoveToGroup: (\n rowId: string,\n targetGroupKey: string,\n context?: { beforeItemId?: string },\n ) => Promise<void> | void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n onListExpandedGroupChange: (rowId: string, isExpanded: boolean) => void;\n listKey: string;\n}\n\nconst KanbanRendererEmptyState = (props: KanbanRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const KanbanRendererContent = (props: KanbanRendererContentProps) => {\n const {\n contentPlaceholder,\n sourceCount,\n filteredCount,\n visibleCount,\n search,\n ruleCount,\n onClearSearch,\n onEditFilter,\n viewMode,\n boardColumns,\n listItems,\n listExpandedGroups,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n onListExpandedGroupChange,\n listKey,\n } = props;\n\n if (contentPlaceholder !== undefined) return contentPlaceholder;\n if (sourceCount > 0 && visibleCount === 0 && search.trim())\n return <CollectionViewEmptyState search={search} onClearSearch={onClearSearch} />;\n\n const filteredOut = sourceCount > 0 && filteredCount === 0;\n const hasVisibleContent = viewMode === \"board\" ? boardColumns.length > 0 : listItems.length > 0;\n const filterMessage =\n filteredOut && !hasVisibleContent ? (\n <CollectionFilterEmptyState ruleCount={ruleCount} hiddenCount={sourceCount} onEditFilter={onEditFilter} />\n ) : null;\n\n if (viewMode === \"board\") {\n return (\n <>\n {filterMessage}\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <KanbanRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : null}\n {boardColumns.length === 0 && !filteredOut ? (\n <KanbanRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n ) : null}\n </Box>\n </>\n );\n }\n\n if (listItems.length > 0) {\n return (\n <>\n {filterMessage}\n <ScrollArea flex=\"1\" minH=\"0\" viewportProps={{ \"aria-label\": \"Collection list\" }}>\n <KanbanRendererList\n key={listKey}\n items={listItems}\n selectedItemId={selectedRowId}\n expandedGroups={listExpandedGroups}\n onExpandedGroupChange={onListExpandedGroupChange}\n />\n </ScrollArea>\n </>\n );\n }\n\n if (filteredOut) return filterMessage;\n return <KanbanRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import { Box, HStack, Stack, Text, VStack } from \"@chakra-ui/react\";\nimport type { ComponentProps } from \"react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorField } from \"./param-editor-field\";\nimport { isParamEditorHorizontalControl, isParamEditorRichControl } from \"./param-editor-presentation\";\n\nexport interface ParamEditorHorizontalProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n variant?: \"default\" | \"small\";\n}\n\ntype HorizontalFieldProps = Omit<ComponentProps<typeof ParamEditorField>, \"param\">;\n\ninterface HorizontalGroupProps {\n group: InputGroup;\n params: Param[];\n fieldProps: HorizontalFieldProps;\n variant: \"default\" | \"small\";\n width?: \"auto\" | \"full\";\n}\n\nconst HorizontalGroupTitle = (props: { children: string }) => {\n const { children } = props;\n\n return (\n <Text\n minH=\"0.75rem\"\n textStyle=\"label/XS\"\n color=\"fg.muted\"\n lineHeight=\"1\"\n letterSpacing=\"0.08em\"\n textTransform=\"uppercase\"\n >\n {children}\n </Text>\n );\n};\n\nconst HorizontalGroup = (props: HorizontalGroupProps) => {\n const { group, params, fieldProps, variant, width = \"auto\" } = props;\n\n return (\n <VStack\n as=\"section\"\n aria-label={group.title}\n gap={variant === \"small\" ? \"2xs\" : \"xs\"}\n alignItems=\"start\"\n minW=\"0\"\n width={width}\n >\n <HorizontalGroupTitle>{group.title}</HorizontalGroupTitle>\n <HStack gap={variant === \"small\" ? \"2xs\" : \"xs\"} flexWrap=\"wrap\" alignItems=\"start\" minW=\"0\" width={width}>\n {params.map((param) => (\n <ParamEditorField key={param.id} param={param} {...fieldProps} />\n ))}\n </HStack>\n </VStack>\n );\n};\n\nexport const ParamEditorHorizontal = (props: ParamEditorHorizontalProps) => {\n const { params = [], groups = [], defaultValues, onChange, onOpenResource, readOnly, variant = \"default\" } = props;\n const horizontalParams = params.filter(isParamEditorHorizontalControl);\n const horizontalGroups = groups.map((group) => ({\n ...group,\n params: group.params.filter(isParamEditorHorizontalControl),\n }));\n const fieldProps: HorizontalFieldProps = {\n defaultValues,\n onChange,\n onOpenResource,\n readOnly,\n presentation: \"horizontal\",\n size: variant === \"small\" ? \"xs\" : \"sm\",\n };\n const compactParams = horizontalParams.filter((param) => !isParamEditorRichControl(param));\n const richParams = horizontalParams.filter(isParamEditorRichControl);\n const compactGroups = horizontalGroups\n .map((group) => ({ group, params: group.params.filter((param) => !isParamEditorRichControl(param)) }))\n .filter(({ params: groupParams }) => groupParams.length > 0);\n const richGroups = horizontalGroups\n .map((group) => ({ group, params: group.params.filter(isParamEditorRichControl) }))\n .filter(({ params: groupParams }) => groupParams.length > 0);\n const gap = variant === \"small\" ? \"xs\" : \"sm\";\n const hasCompactControls = compactParams.length > 0 || compactGroups.length > 0;\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap={gap} minW=\"0\">\n {hasCompactControls ? (\n <HStack gap={gap} flexWrap=\"wrap\" alignItems=\"start\" minW=\"0\">\n {compactParams.map((param) => (\n <ParamEditorField key={param.id} param={param} {...fieldProps} />\n ))}\n {compactGroups.map(({ group, params: groupParams }) => (\n <HorizontalGroup\n key={group.id}\n group={group}\n params={groupParams}\n fieldProps={fieldProps}\n variant={variant}\n />\n ))}\n </HStack>\n ) : null}\n\n {richParams.map((param) => (\n <Box key={param.id} width=\"full\" minW=\"0\">\n <ParamEditorField param={param} {...fieldProps} />\n </Box>\n ))}\n\n {richGroups.map(({ group, params: groupParams }) => (\n <HorizontalGroup\n key={`${group.id}-rich`}\n group={group}\n params={groupParams}\n fieldProps={fieldProps}\n variant={variant}\n width=\"full\"\n />\n ))}\n </Stack>\n );\n};\n","import { Button, Icon, Input, Stack, Text, Textarea, Wrap } from \"@chakra-ui/react\";\nimport { Paperclip } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { AttachmentChip } from \"@/components/overlays/attachment-chip\";\nimport { SelectionInput } from \"@/components/param-editor/inputs/selection-input\";\nimport { LazyMarkdownEditor } from \"@/components/rich-text\";\nimport type { KanbanRendererCreateField } from \"./types\";\n\n// The editor and its syntax highlighting are heavy and only needed once a\n// markdown field is actually on screen, so the host loads them on demand.\nconst MarkdownControl = (props: {\n disabled: boolean;\n field: KanbanRendererCreateField;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, onChange } = props;\n\n return (\n <LazyMarkdownEditor\n // Seed from the declared default so a pre-filled field is visible rather\n // than blank-but-submittable. Lexical reads this once, on mount.\n defaultState={typeof field.defaultValue === \"string\" ? field.defaultValue : \"\"}\n isEditable={!disabled}\n placeholder={field.placeholder}\n autoFocus\n onChange={(next) => onChange(next)}\n />\n );\n};\n\nconst FilesControl = (props: {\n disabled: boolean;\n field: KanbanRendererCreateField;\n removeLabel: string;\n value: unknown;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, removeLabel, value, onChange } = props;\n const input = useRef<HTMLInputElement>(null);\n const files = Array.isArray(value) ? (value as File[]) : [];\n\n return (\n <Stack gap=\"2xs\" align=\"start\">\n <input\n ref={input}\n hidden\n type=\"file\"\n accept={field.accept}\n multiple={field.multiple !== false}\n // Appending keeps earlier picks; replacing silently discards them. A\n // single-file field replaces instead, so it can never hold two.\n onChange={(event) => {\n const picked = Array.from(event.target.files ?? []);\n onChange(field.multiple === false ? picked.slice(0, 1) : [...files, ...picked]);\n event.target.value = \"\";\n }}\n />\n <Button size=\"xs\" variant=\"ghost\" disabled={disabled} onClick={() => input.current?.click()}>\n <Icon as={Paperclip} boxSize=\"4\" />\n {field.label}\n </Button>\n {files.length > 0 ? (\n <Wrap gap=\"2xs\">\n {files.map((file, index) => (\n <AttachmentChip\n key={`${file.name}-${index.toString()}`}\n file={file}\n disabled={disabled}\n removeLabel={removeLabel}\n onRemove={() => onChange(files.filter((_, itemIndex) => itemIndex !== index))}\n />\n ))}\n </Wrap>\n ) : null}\n </Stack>\n );\n};\n\ninterface CreateFieldControlProps {\n disabled: boolean;\n field: KanbanRendererCreateField;\n removeLabel: string;\n value: unknown;\n onChange: (value: unknown) => void;\n}\n\nconst FieldInput = (props: CreateFieldControlProps) => {\n const { disabled, field, value, onChange } = props;\n\n if (field.type === \"longtext\")\n return (\n <Textarea\n aria-label={field.label}\n minH=\"120px\"\n size=\"sm\"\n placeholder={field.placeholder}\n value={typeof value === \"string\" ? value : \"\"}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n\n // Declared selects share the ParamEditor's control, so they look and behave\n // exactly like the resource attributes rendered beside them.\n if (field.type === \"select\" || field.type === \"multi-select\")\n return (\n <SelectionInput\n hideLabel\n id={field.id}\n name={field.label}\n description={field.description ?? \"\"}\n defaultValue={(value as string | string[]) ?? (field.type === \"multi-select\" ? [] : \"\")}\n options={(field.options ?? []).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon ?? undefined,\n color: option.color,\n }))}\n multiSelect={field.type === \"multi-select\"}\n placeholder={field.placeholder ?? field.label}\n clearable={!field.required}\n readOnly={disabled}\n onChange={(_, next) => onChange(next)}\n />\n );\n\n if (field.type === \"boolean\")\n return (\n <Button size=\"sm\" variant=\"outline\" disabled={disabled} onClick={() => onChange(value !== true)}>\n {field.label}\n </Button>\n );\n\n return (\n <Input\n aria-label={field.label}\n size=\"sm\"\n type={field.type === \"number\" ? \"number\" : \"text\"}\n placeholder={field.placeholder}\n value={typeof value === \"string\" || typeof value === \"number\" ? value : \"\"}\n disabled={disabled}\n onChange={(event) =>\n onChange(field.type === \"number\" && event.target.value ? Number(event.target.value) : event.target.value)\n }\n />\n );\n};\n\nexport const CreateFieldControl = (props: CreateFieldControlProps) => {\n const { disabled, field, removeLabel, value, onChange } = props;\n\n // Files and markdown carry their own trigger label / placeholder, so the\n // stacked label above them would just repeat it.\n if (field.type === \"files\")\n return (\n <FilesControl disabled={disabled} field={field} removeLabel={removeLabel} value={value} onChange={onChange} />\n );\n\n if (field.type === \"markdown\") return <MarkdownControl disabled={disabled} field={field} onChange={onChange} />;\n\n return (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">{`${field.label}${field.required ? \" *\" : \"\"}`}</Text>\n {field.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n {field.description}\n </Text>\n ) : null}\n <FieldInput {...props} />\n </Stack>\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { handleDialogAcceptShortcut } from \"@/components/overlays/dialog-accept-shortcut\";\nimport type { Param, ParamValueMap } from \"@/components/param-editor/param-editor.types\";\nimport { ParamEditorHorizontal } from \"@/components/param-editor/param-editor-horizontal\";\nimport { CreateFieldControl } from \"./kanban-renderer-create-field\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateField,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n} from \"./types\";\n\ninterface KanbanRendererCreateDialogProps {\n open: boolean;\n columnId: string;\n columnAttributeId?: string;\n attributes: AttributeDescriptor[];\n config: KanbanRendererCreateRowConfig;\n onClose: () => void;\n onSubmit: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;\n}\n\nconst emptyValue = (field: KanbanRendererCreateField) => {\n if (field.type === \"files\" || field.type === \"multi-select\") return [];\n if (field.type === \"boolean\") return false;\n return \"\";\n};\n\nconst initialFieldValues = (fields: KanbanRendererCreateField[]) =>\n Object.fromEntries(fields.map((field) => [field.id, field.defaultValue ?? emptyValue(field)]));\n\nconst isFilled = (field: KanbanRendererCreateField, value: unknown) => {\n if (!field.required) return true;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === \"string\") return value.trim().length > 0;\n return value !== undefined && value !== null;\n};\n\n// Every editable attribute is offered, whatever its kind — narrowing to enums\n// silently drops editable user/date/number attributes from the create form.\nconst editableCreateAttributes = (attributes: AttributeDescriptor[]) =>\n attributes.filter((attribute) => attribute.editable);\n\nconst initialAttributeValues = (\n attributes: AttributeDescriptor[],\n columnAttributeId: string | undefined,\n columnId: string,\n) =>\n Object.fromEntries(\n attributes.map((attribute) => {\n const emptyValue = attribute.type.kind === \"enum-multi\" ? [] : \"\";\n return [attribute.id, attribute.id === columnAttributeId ? columnId : emptyValue];\n }),\n );\n\n/**\n * Editable attributes render through the ParamEditor so a resource property and\n * a command param are the same control, not two that merely resemble each other.\n */\nconst attributeToParam = (attribute: AttributeDescriptor, locked: boolean): Param => {\n const base = { id: attribute.id, name: attribute.label, description: \"\" };\n\n if (attribute.type.kind === \"enum\" || attribute.type.kind === \"enum-multi\") {\n const multiSelect = attribute.type.kind === \"enum-multi\";\n return {\n ...base,\n type: \"selection\",\n defaultValue: multiSelect ? [] : \"\",\n multiSelect,\n // The trigger shows the value alone; the attribute name is the placeholder.\n placeholder: attribute.label,\n clearable: !locked,\n // The column already chose this value, and the create command reads it\n // from the column param — editing it here would be ignored.\n disabled: locked,\n options: getEnumOptions(attribute.type).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon ?? undefined,\n color: option.color,\n })),\n };\n }\n\n if (attribute.type.kind === \"number\") return { ...base, type: \"number\", defaultValue: 0 };\n return { ...base, type: \"text\", defaultValue: \"\", singleLine: true };\n};\n\nexport const KanbanRendererCreateDialog = (props: KanbanRendererCreateDialogProps) => {\n const { open, columnId, columnAttributeId, attributes, config, onClose, onSubmit } = props;\n const [values, setValues] = useState<Record<string, unknown>>({});\n const [attributeValues, setAttributeValues] = useState<Record<string, unknown>>({});\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState(\"\");\n // Uncontrolled editors (Lexical) read their seed once on mount, so a reset has\n // to remount the fields or the old text stays on screen over fresh state.\n const [resetToken, setResetToken] = useState(0);\n const initializedRef = useRef(false);\n const editableAttributes = editableCreateAttributes(attributes);\n\n // Opening is the only thing that clears the form. Attributes and fields can\n // arrive or change while it is open (they come from live sources), so this\n // runs once per open cycle — resetting on those would wipe what was typed.\n useEffect(() => {\n if (!open) {\n initializedRef.current = false;\n return;\n }\n if (initializedRef.current) return;\n initializedRef.current = true;\n\n setValues(initialFieldValues(config.fields));\n setAttributeValues(initialAttributeValues(editableCreateAttributes(attributes), columnAttributeId, columnId));\n setError(\"\");\n setResetToken((token) => token + 1);\n }, [attributes, columnAttributeId, columnId, config.fields, open]);\n\n // Fields can be added or withdrawn while the dialog is open. Seed the new\n // ones and drop the withdrawn, so what is submitted always matches what is\n // rendered — but leave everything the user has already filled in alone.\n useEffect(() => {\n if (!open) return;\n const seeded = initialFieldValues(config.fields);\n const declared = new Set(config.fields.map((field) => field.id));\n setValues((current) => {\n const kept = Object.entries(current).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current));\n if (added.length === 0 && kept.length === Object.keys(current).length) return current;\n return { ...Object.fromEntries(added), ...Object.fromEntries(kept) };\n });\n }, [config.fields, open]);\n\n // Same contract for attributes: seed the ones that appear after opening, drop\n // the ones withdrawn. A withdrawn entry left behind would still be submitted\n // even though its control is gone.\n useEffect(() => {\n if (!open) return;\n const editable = editableCreateAttributes(attributes);\n const seeded = initialAttributeValues(editable, columnAttributeId, columnId);\n const declared = new Set(editable.map((attribute) => attribute.id));\n setAttributeValues((current) => {\n const kept = Object.entries(current).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current));\n if (added.length === 0 && kept.length === Object.keys(current).length) return current;\n return { ...Object.fromEntries(added), ...Object.fromEntries(kept) };\n });\n }, [attributes, open, columnId, columnAttributeId]);\n\n const close = () => {\n if (!submitting) onClose();\n };\n\n const valid = config.fields.every((field) => isFilled(field, values[field.id]));\n\n const submit = async () => {\n if (!valid || submitting) return;\n setSubmitting(true);\n setError(\"\");\n try {\n const fileFieldIds = new Set(config.fields.filter((field) => field.type === \"files\").map((field) => field.id));\n const files = [...fileFieldIds].flatMap((id) => (Array.isArray(values[id]) ? (values[id] as File[]) : []));\n const declaredValues = Object.fromEntries(Object.entries(values).filter(([id]) => !fileFieldIds.has(id)));\n\n await onSubmit({ columnId, columnAttributeId, values: declaredValues, attributeValues, files });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : config.labels.submitError);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} size=\"lg\" scrollBehavior=\"inside\" onOpenChange={(details) => !details.open && close()}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void submit(), valid && !submitting)}\n >\n <Dialog.Header>\n <Dialog.Title>{config.title}</Dialog.Title>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n {config.fields.map((field) => (\n <CreateFieldControl\n key={`${field.id}:${resetToken.toString()}`}\n field={field}\n removeLabel={config.labels.removeFile}\n value={values[field.id]}\n disabled={submitting}\n onChange={(value) => setValues((current) => ({ ...current, [field.id]: value }))}\n />\n ))}\n {editableAttributes.length > 0 ? (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">{config.labels.properties}</Text>\n <ParamEditorHorizontal\n variant=\"small\"\n params={editableAttributes.map((attribute) =>\n attributeToParam(attribute, attribute.id === columnAttributeId),\n )}\n defaultValues={attributeValues as ParamValueMap}\n readOnly={submitting}\n onChange={(attributeId, value) =>\n setAttributeValues((current) => ({ ...current, [attributeId]: value }))\n }\n />\n </Stack>\n ) : null}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Body>\n <Dialog.Footer justifyContent=\"end\">\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n {config.labels.cancel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!valid} loading={submitting} onClick={() => void submit()}>\n {config.submitLabel}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport { withTitleField } from \"../collection-view/collection-view-fields\";\nimport { sortRowsByView } from \"../collection-view/collection-view-sort\";\nimport { type KanbanActionErrorHandler, runKanbanAction } from \"./kanban-renderer-action\";\nimport type { KanbanRendererColumnGroup } from \"./kanban-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveListDropTargetColumnKey,\n} from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererListItem } from \"./kanban-renderer-list\";\nimport type { AttributeDescriptor, KanbanRendererRow, KanbanRendererSettings } from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\n\ninterface BuildKanbanRendererListItemsInput<TRow extends KanbanRendererRow> {\n settings: KanbanRendererSettings;\n sorts: ViewSort[];\n /** The view's search text, marked in each row title. */\n search: string;\n visibleRows: TRow[];\n grouped: KanbanRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onActionError?: KanbanActionErrorHandler;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nexport const buildKanbanRendererListItems = <TRow extends KanbanRendererRow>(\n input: BuildKanbanRendererListItemsInput<TRow>,\n) => {\n const {\n settings,\n sorts,\n search,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onActionError,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n // A sorted view decides its own order, so rows only accept drops that keep a manual order.\n const supportsManualReorder = sorts.length === 0;\n const sortFields = withTitleField(attributes);\n const sorted = (rows: KanbanRendererRow[]) => sortRowsByView(rows, sorts, sortFields);\n const listDisplayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const getStatusPresentation = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n const option = descriptor ? findEnumOption(descriptor.type, key) : undefined;\n return {\n statusColorPalette: option?.color,\n statusIcon: getIconComponent(option?.icon),\n };\n };\n const getRowStatusPresentation = (row: TRow) => {\n const status = row.attributes.status;\n if (typeof status !== \"string\") return {};\n return getStatusPresentation(\"status\", status);\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): KanbanRendererListItem => {\n const shorthand = typeof row.attributes.id === \"string\" ? row.attributes.id : undefined;\n\n return {\n id: row.id,\n eyebrow: shorthand && shorthand !== row.title ? shorthand : undefined,\n title: row.title,\n highlight: search,\n ...getRowStatusPresentation(row),\n badges: collectDisplayBadges(row, attributes, listDisplayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, listDisplayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) =>\n runKanbanAction(\"Update attribute\", () => onAttributeChange(row.id, attributeId, value), onActionError)\n : undefined,\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) =>\n runKanbanAction(\n \"Move row\",\n async () => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n await onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n await onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n await onReorder?.(draggedId, row.id);\n },\n onActionError,\n )\n : undefined,\n };\n };\n\n const toGroupListItem = (\n group: { key: string; label: string; rows: KanbanRendererRow[] },\n parent?: { columnKey: string },\n ): KanbanRendererListItem => {\n const groupingAttributeId = parent ? settings.rowGrouping : settings.columnGrouping;\n return {\n id: parent ? `group::${parent.columnKey}::${group.key}` : `group::${group.key}`,\n title: group.label,\n isGroup: true,\n countBadge: group.rows.length,\n ...getStatusPresentation(groupingAttributeId, group.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) =>\n runKanbanAction(\n \"Move row\",\n async () => {\n const columnKey = parent?.columnKey ?? group.key;\n await onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n await onAttributeChange(draggedId, settings.rowGrouping, group.key);\n }\n },\n onActionError,\n )\n : undefined,\n children: sorted(group.rows).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? group.key,\n rowKey: parent ? group.key : undefined,\n }),\n ),\n };\n };\n\n if (settings.columnGrouping === NO_GROUPING) {\n return sorted(visibleRows).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) =>\n column.subgroups.length > 0\n ? {\n id: `group::${column.key}`,\n title: column.label,\n isGroup: true,\n countBadge: column.rows.length,\n ...getStatusPresentation(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) =>\n runKanbanAction(\n \"Move row\",\n () => onAttributeChange(draggedId, settings.columnGrouping, column.key),\n onActionError,\n )\n : undefined,\n children: column.subgroups.map((group) => toGroupListItem(group, { columnKey: column.key })),\n }\n : toGroupListItem(column),\n );\n};\n","import type { ViewFilterGroup, ViewSort } from \"@pstdio/sdk/extensions\";\nimport { type CollectionViewStoreState, useCollectionViewStore } from \"../collection-view/use-collection-view-store\";\nimport { DEFAULT_KANBAN_RENDERER_SETTINGS, type KanbanRendererSettings } from \"./types\";\n\nexport type KanbanRendererState = CollectionViewStoreState<KanbanRendererSettings>;\n\nexport interface KanbanRendererStoreInitialState {\n settings?: Partial<KanbanRendererSettings>;\n filter?: ViewFilterGroup;\n sorts?: ViewSort[];\n}\n\nexport const kanbanRendererInitialState = (initialState?: KanbanRendererStoreInitialState) => ({\n settings: { ...DEFAULT_KANBAN_RENDERER_SETTINGS, ...initialState?.settings },\n filter: initialState?.filter,\n sorts: initialState?.sorts,\n});\n\n/** The unsaved view state of one board. Hosts read it to send the view to their query. */\nexport const useKanbanRendererStore = <T>(\n storageKey: string,\n selector: (state: KanbanRendererState) => T,\n initialState?: KanbanRendererStoreInitialState,\n) => useCollectionViewStore(storageKey, kanbanRendererInitialState(initialState), selector);\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 { ViewFilterGroup, ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { ReactNode } from \"react\";\nimport { CollectionViewBar } from \"../collection-view/collection-view-bar\";\nimport { withTitleField } from \"../collection-view/collection-view-fields\";\nimport { DisplaySortControl } from \"../collection-view/display-sort-control\";\nimport type { RuleValueOption } from \"../collection-view/filter-rule-value\";\nimport { useCollectionViews } from \"../collection-view/use-collection-views\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { countFilterValues } from \"./kanban-renderer-grouping\";\nimport { buildDisplayPropertyOptions, buildFilterCategories, buildGroupingOptions } from \"./kanban-renderer-helpers\";\nimport type {\n AttributeDescriptor,\n KanbanRendererRow,\n KanbanRendererSavedView,\n KanbanRendererSettings,\n KanbanRendererViewsSource,\n} from \"./types\";\nimport { kanbanRendererInitialState, 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 itemLabel?: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<KanbanRendererSettings>;\n defaultFilter?: ViewFilterGroup;\n defaultSorts?: ViewSort[];\n viewsSource?: KanbanRendererViewsSource;\n defaultViews?: KanbanRendererSavedView[];\n defaultActiveViewId?: string;\n search: string;\n onSearchChange: (value: string) => void;\n searchResultLabel?: string;\n leading?: ReactNode;\n actions?: ReactNode;\n}\n\nconst toggle = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\nexport const KanbanRendererToolbar = <TRow extends KanbanRendererRow>(props: KanbanRendererToolbarProps<TRow>) => {\n const { rows, storageKey, attributes: rawAttributes, defaultSettings, defaultFilter, defaultSorts } = props;\n const { search, onSearchChange, searchResultLabel, leading, actions } = props;\n const initialState = kanbanRendererInitialState({\n settings: defaultSettings,\n filter: defaultFilter,\n sorts: defaultSorts,\n });\n const attributes = useResolvedAttributes(rawAttributes);\n const viewState = useCollectionViews({ ...props, initialState, fields: attributes });\n const { settings, setSettings, sorts, setSorts } = useKanbanRendererStore(storageKey, (state) => state, initialState);\n const categories = buildFilterCategories(attributes, rows);\n const optionsFor = (field: AttributeDescriptor): RuleValueOption[] => {\n const counts = countFilterValues(rows, field.id, attributes);\n const category = categories.find((entry) => entry.id === field.id);\n return (category?.options ?? []).map((option) => ({ ...option, count: counts[option.value] ?? 0 }));\n };\n\n return (\n <CollectionViewBar\n itemLabel={props.itemLabel}\n storageKey={storageKey}\n initialState={initialState}\n views={viewState.views}\n viewsSource={props.viewsSource}\n fields={withTitleField(attributes)}\n optionsFor={optionsFor}\n search={search}\n onSearchChange={onSearchChange}\n searchResultLabel={searchResultLabel}\n leading={leading}\n actions={actions}\n displayControl={\n <DisplayMenu\n settings={settings}\n sortControl={\n <DisplaySortControl fields={withTitleField(attributes)} sorts={sorts} onSortsChange={setSorts} />\n }\n groupingOptions={buildGroupingOptions(attributes)}\n displayPropertyOptions={buildDisplayPropertyOptions(attributes)}\n onViewModeChange={(viewMode) => setSettings({ viewMode })}\n onColumnGroupingChange={(columnGrouping) => setSettings({ columnGrouping })}\n onRowGroupingChange={(rowGrouping) => setSettings({ rowGrouping })}\n onDisplayPropertyToggle={(property) =>\n setSettings({ displayProperties: toggle(settings.displayProperties, property) })\n }\n />\n }\n />\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ViewFilterGroup, ViewSort } from \"@pstdio/sdk/extensions\";\nimport { type ReactNode, useDeferredValue, useState } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { withTitleField } from \"../collection-view/collection-view-fields\";\nimport { countFilterRules } from \"../collection-view/collection-view-filter\";\nimport { useCollectionViews } from \"../collection-view/use-collection-views\";\nimport { type KanbanActionErrorHandler, runKanbanAction } from \"./kanban-renderer-action\";\nimport type { KanbanRendererBoardColumnAction } from \"./kanban-renderer-board\";\nimport { buildKanbanBoardColumns, narrowKanbanRows } from \"./kanban-renderer-board-columns\";\nimport { applyBoardMoveItem, applyBoardMoveToGroup } from \"./kanban-renderer-board-move\";\nimport { KanbanRendererContent } from \"./kanban-renderer-content\";\nimport { KanbanRendererCreateDialog } from \"./kanban-renderer-create-dialog\";\nimport { groupRows } from \"./kanban-renderer-grouping\";\nimport { resolveKnownColumnKeys } from \"./kanban-renderer-helpers\";\nimport { buildKanbanRendererListItems } from \"./kanban-renderer-list-items\";\nimport { KanbanRendererToolbar } from \"./kanban-renderer-toolbar\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n KanbanRendererRow,\n KanbanRendererSavedView,\n KanbanRendererSettings,\n KanbanRendererViewsSource,\n} from \"./types\";\nimport { NO_GROUPING } from \"./types\";\nimport { kanbanRendererInitialState, useKanbanRendererStore } from \"./use-kanban-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\n/** Board-column behavior and menu configuration for a resolved column group. */\nexport interface BoardColumnConfig {\n /** Chakra color palette used for the column header and group badges. */\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: KanbanRendererBoardColumnAction[];\n}\n\n/** Switchable list/board renderer for rows with typed attributes, filtering, grouping, and ordering. */\nexport interface KanbanRendererProps<TRow extends KanbanRendererRow = KanbanRendererRow> {\n /** Stable rows to render. Each row must have an id, title, and attributes map. */\n rows: TRow[];\n /** Persistent key used by the renderer store for view, filter, grouping, ordering, and list expansion settings. */\n storageKey: string;\n itemLabel?: string;\n /** Attribute descriptors that define display, filtering, grouping, ordering, and board columns. */\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyState?: ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n /** Replaces the data area while a query is unavailable, keeping its controls mounted. */\n contentPlaceholder?: ReactNode;\n defaultSettings?: Partial<KanbanRendererSettings>;\n defaultFilter?: ViewFilterGroup;\n defaultSorts?: ViewSort[];\n viewsSource?: KanbanRendererViewsSource;\n defaultViews?: KanbanRendererSavedView[];\n defaultActiveViewId?: string;\n hideToolbar?: boolean;\n toolbarActions?: ReactNode;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n /** Reports a failed badge edit or complete move once and consumes its rejection. */\n onActionError?: KanbanActionErrorHandler;\n /** Called when a row attribute changes through drag/drop, board movement, or inline controls. */\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n /** Called for manual row ordering when a dragged row is dropped before another row. Only used while the view has no sorts. */\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n createRow?: KanbanRendererCreateRowConfig;\n onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nexport const KanbanRenderer = <TRow extends KanbanRendererRow>(props: KanbanRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n contentPlaceholder,\n defaultSettings,\n defaultFilter,\n defaultSorts,\n viewsSource,\n defaultViews,\n defaultActiveViewId,\n onRowClick,\n onActionError,\n onAttributeChange,\n onReorder,\n createRow,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarActions,\n toolbarLeading,\n } = props;\n\n const initialState = kanbanRendererInitialState({\n settings: defaultSettings,\n filter: defaultFilter,\n sorts: defaultSorts,\n });\n const attributes = useResolvedAttributes(rawAttributes);\n const fields = withTitleField(attributes);\n useCollectionViews({ ...props, initialState, fields });\n const [createColumnId, setCreateColumnId] = useState<string | null>(null);\n const [search, setSearch] = useState(\"\");\n // Typing stays responsive on large boards; the narrowed rows follow a frame later.\n const deferredSearch = useDeferredValue(search);\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filter = useKanbanRendererStore(storageKey, (state) => state.filter, initialState);\n const sorts = useKanbanRendererStore(storageKey, (state) => state.sorts, initialState);\n const expandedGroups = useKanbanRendererStore(storageKey, (state) => state.expandedGroups, initialState);\n const setExpandedGroup = useKanbanRendererStore(storageKey, (state) => state.setExpandedGroup, initialState);\n const setOpenMenu = useKanbanRendererStore(storageKey, (state) => state.setOpenMenu, initialState);\n\n const { filteredRows, visibleRows, columnTotals } = narrowKanbanRows({\n rows,\n filter,\n fields,\n attributes,\n settings,\n search: deferredSearch,\n });\n const searching = deferredSearch.trim() !== \"\";\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys: resolveKnownColumnKeys(settings.columnGrouping, attributes, filter, rows),\n structureRows: rows,\n });\n\n const listItems = buildKanbanRendererListItems({\n settings,\n sorts,\n search: deferredSearch,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onActionError,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const boardColumns = buildKanbanBoardColumns({\n grouped,\n settings,\n sorts,\n fields,\n attributes,\n search: deferredSearch,\n columnTotals: searching ? columnTotals : undefined,\n getBoardColumnConfig,\n getRowContextMenuActions,\n onAttributeChange,\n onActionError,\n onRowClick,\n });\n\n const handleBoardMoveItem = async (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => {\n await runKanbanAction(\n \"Move row\",\n () =>\n applyBoardMoveItem({\n settings,\n sorts,\n rowId,\n targetColumnId,\n targetGroupKey: context?.targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n }),\n onActionError,\n );\n };\n\n const handleBoardMoveToGroup = async (rowId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => {\n await runKanbanAction(\n \"Move row\",\n () =>\n applyBoardMoveToGroup({\n settings,\n sorts,\n rowId,\n targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n }),\n onActionError,\n );\n };\n\n return (\n <Stack data-testid=\"kanban-renderer\" height=\"100%\" minH=\"0\" gap=\"0\" background=\"bg\" overflow=\"hidden\">\n {hideToolbar ? null : (\n <KanbanRendererToolbar\n itemLabel={props.itemLabel}\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilter={defaultFilter}\n defaultSorts={defaultSorts}\n search={search}\n onSearchChange={setSearch}\n searchResultLabel={searching ? `${visibleRows.length} of ${filteredRows.length}` : undefined}\n viewsSource={viewsSource}\n defaultViews={defaultViews}\n defaultActiveViewId={defaultActiveViewId}\n leading={toolbarLeading}\n actions={toolbarActions}\n />\n )}\n\n <KanbanRendererContent\n contentPlaceholder={contentPlaceholder}\n sourceCount={rows.length}\n filteredCount={filteredRows.length}\n visibleCount={visibleRows.length}\n search={deferredSearch}\n ruleCount={countFilterRules(filter)}\n onClearSearch={() => setSearch(\"\")}\n onEditFilter={hideToolbar ? undefined : () => setOpenMenu(\"filter\")}\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n listExpandedGroups={expandedGroups}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={createRow && onCreateRow ? setCreateColumnId : undefined}\n onColumnAction={onColumnAction}\n onListExpandedGroupChange={setExpandedGroup}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n {createRow && onCreateRow && createColumnId ? (\n <KanbanRendererCreateDialog\n open\n columnId={createColumnId}\n columnAttributeId={settings.columnGrouping === NO_GROUPING ? undefined : settings.columnGrouping}\n attributes={attributes}\n config={createRow}\n onClose={() => setCreateColumnId(null)}\n onSubmit={onCreateRow}\n />\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}