@pstdio/ui 0.43.1-nightly.20261013030813 → 0.43.1

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 (58) hide show
  1. package/dist/{MermaidComponent-CJCip-GB.js → MermaidComponent-_cmVeKKR.js} +2 -2
  2. package/dist/{MermaidComponent-CJCip-GB.js.map → MermaidComponent-_cmVeKKR.js.map} +1 -1
  3. package/dist/chat-ui.d.ts +84 -56
  4. package/dist/chat-ui.js +792 -788
  5. package/dist/chat-ui.js.map +1 -1
  6. package/dist/{collection-view-fields-CajuwtKF.d.ts → collection-view-fields-B3fhsgn7.d.ts} +2 -0
  7. package/dist/{collection-view-grouping-Bm7Hlt5w.js → collection-view-grouping-jIqOrBG8.js} +2 -2
  8. package/dist/{collection-view-grouping-Bm7Hlt5w.js.map → collection-view-grouping-jIqOrBG8.js.map} +1 -1
  9. package/dist/{collection-view-search-BqYMZQ4q.js → collection-view-search-KbQpKHdn.js} +728 -601
  10. package/dist/collection-view-search-KbQpKHdn.js.map +1 -0
  11. package/dist/collection-view.d.ts +90 -3
  12. package/dist/collection-view.js +1 -1
  13. package/dist/{data-table-stats-row-RwLXF9EW.js → data-table-stats-row-83mX8b1B.js} +2 -2
  14. package/dist/{data-table-stats-row-RwLXF9EW.js.map → data-table-stats-row-83mX8b1B.js.map} +1 -1
  15. package/dist/data-table.d.ts +2 -3
  16. package/dist/data-table.js +6 -6
  17. package/dist/{diff-viewer-BD2PQ4SS.js → diff-viewer-C5KXwq7E.js} +3 -3
  18. package/dist/{diff-viewer-BD2PQ4SS.js.map → diff-viewer-C5KXwq7E.js.map} +1 -1
  19. package/dist/diff.js +2 -2
  20. package/dist/{display-sort-control-BSFhWHgn.js → display-sort-control-BCkgKET1.js} +3 -3
  21. package/dist/{display-sort-control-BSFhWHgn.js.map → display-sort-control-BCkgKET1.js.map} +1 -1
  22. package/dist/{edit-mode-data-table-TdIRPVU1.js → edit-mode-data-table-ScVJJT9F.js} +5 -5
  23. package/dist/{edit-mode-data-table-TdIRPVU1.js.map → edit-mode-data-table-ScVJJT9F.js.map} +1 -1
  24. package/dist/{index-DjZsR4Ey.d.ts → index-DXpADqIg.d.ts} +8 -4
  25. package/dist/index.d.ts +49 -49
  26. package/dist/index.js +451 -453
  27. package/dist/index.js.map +1 -1
  28. package/dist/kanban-renderer.d.ts +3 -3
  29. package/dist/kanban-renderer.js +934 -744
  30. package/dist/kanban-renderer.js.map +1 -1
  31. package/dist/{list-row-DCHZXCVH.js → list-row-F8kBQGB-.js} +393 -383
  32. package/dist/list-row-F8kBQGB-.js.map +1 -0
  33. package/dist/{markdown-editor-6jAy_E3r.js → markdown-editor-Dm4Fi3sX.js} +4 -4
  34. package/dist/{markdown-editor-6jAy_E3r.js.map → markdown-editor-Dm4Fi3sX.js.map} +1 -1
  35. package/dist/{param-editor-f57ea8V9.js → param-editor-B9ASM5Lv.js} +2 -2
  36. package/dist/{param-editor-f57ea8V9.js.map → param-editor-B9ASM5Lv.js.map} +1 -1
  37. package/dist/{param-editor-field-CePT5hCj.js → param-editor-field-BmNUziwI.js} +5 -3
  38. package/dist/param-editor-field-BmNUziwI.js.map +1 -0
  39. package/dist/param-editor.js +2 -2
  40. package/dist/{rich-text-bKBLAco5.js → rich-text-Dx5F8Zm1.js} +3 -3
  41. package/dist/{rich-text-bKBLAco5.js.map → rich-text-Dx5F8Zm1.js.map} +1 -1
  42. package/dist/rich-text.js +3 -3
  43. package/dist/terminal.js +1 -1
  44. package/dist/{theme-bxwJIMKe.js → theme-CWDvF5Yn.js} +164 -72
  45. package/dist/theme-CWDvF5Yn.js.map +1 -0
  46. package/dist/theme.js +1 -1
  47. package/dist/{tree-list-nFNO7MV4.js → tree-list-Ces1hpRd.js} +2 -2
  48. package/dist/{tree-list-nFNO7MV4.js.map → tree-list-Ces1hpRd.js.map} +1 -1
  49. package/dist/{workspace-badge-oFp29Gbe.d.ts → workspace-badge-De6OQjb5.d.ts} +2 -1
  50. package/dist/{workspace-badge-BgiTennO.js → workspace-badge-DqQKSUJw.js} +11 -11
  51. package/dist/workspace-badge-DqQKSUJw.js.map +1 -0
  52. package/package.json +2 -2
  53. package/dist/collection-view-search-BqYMZQ4q.js.map +0 -1
  54. package/dist/index-r6SFPkUI.d.ts +0 -91
  55. package/dist/list-row-DCHZXCVH.js.map +0 -1
  56. package/dist/param-editor-field-CePT5hCj.js.map +0 -1
  57. package/dist/theme-bxwJIMKe.js.map +0 -1
  58. package/dist/workspace-badge-BgiTennO.js.map +0 -1
@@ -1 +1 @@
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","_temp7","_temp3","useStore","persist","createStore","createHostPersistStorage","createHostStoreRegistry","HostStorage","useHostStorage","CreatePreference","openCreatedRow","setOpenCreatedRow","value","preferenceKey","createKanbanCreatePreferenceStore","storage","set","name","partialize","preferenceStore","_key","useKanbanCreatePreference","$","_c","t0","t1","_c","Button","ButtonGroup","Icon","IconButton","Menu","Portal","ChevronDown","KanbanCreateSubmitProps","label","withoutOpeningLabel","openCreatedRow","onChoose","onSubmit","disabled","submitting","KanbanCreateSubmit","props","$","_c","selectedLabel","t0","Symbol","for","placement","t1","t2","t3","t4","t5","t6","value","_c","Button","Icon","Input","Stack","Text","Textarea","Wrap","Paperclip","useRef","AttachmentChip","SelectionInput","LazyMarkdownEditor","KanbanRendererCreateField","MarkdownControl","props","$","_c","disabled","field","value","onChange","t0","t1","t2","next","t3","placeholder","FilesControl","removeLabel","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","ViewFilterGroup","ViewFilterRule","filterRowsByView","getEnumOptions","AttributeDescriptor","branches","group","children","groups","map","conjunction","rules","rule","flat","reduce","parents","alternatives","flatMap","parent","child","candidateValues","attribute","positive","filter","includes","condition","values","value","undefined","options","type","option","kind","excluded","selected","Set","getCreateAttributeValues","attributes","columnAttributeId","columnId","editable","empty","Record","Object","fromEntries","id","editableIds","readOnlyRuleCount","has","attributeId","length","sort","left","right","result","matches","fieldRules","candidates","matching","find","title","useStore","createStore","createHostStoreRegistry","useHostStorage","CreateDraft","values","Record","attributeValues","CreateDraftState","draft","setDraft","update","clearDraft","draftStore","set","state","useKanbanCreateDraft","key","$","_c","t0","t1","_c","Button","CloseButton","Dialog","HStack","Stack","Text","ViewFilterGroup","useEffect","useId","useState","handleDialogAcceptShortcut","Param","ParamValueMap","ParamEditorHorizontal","useKanbanCreatePreference","KanbanCreateSubmit","CreateFieldControl","getCreateAttributeValues","getEnumOptions","AttributeDescriptor","KanbanRendererCreateField","KanbanRendererCreateRowConfig","KanbanRendererCreateSubmission","useKanbanCreateDraft","KanbanRendererCreateDialogProps","open","columnId","columnAttributeId","attributes","config","draftKey","filter","onClose","onSubmit","submission","Promise","emptyValue","field","type","initialFieldValues","fields","Object","fromEntries","map","id","defaultValue","isFilled","value","required","Array","isArray","length","trim","undefined","editableCreateAttributes","attribute","editable","attributeToParam","locked","base","name","label","description","kind","multiSelect","placeholder","clearable","disabled","options","option","icon","color","singleLine","KanbanRendererCreateDialog","props","localKey","draft","setDraft","clearDraft","openCreatedRow","setOpenCreatedRow","values","attributeValues","submitting","setSubmitting","error","setError","editableAttributes","current","seeded","declared","Set","kept","entries","has","added","keys","columnChanged","close","discard","valid","every","submit","fileFieldIds","files","flatMap","File","declaredValues","labels","submitWithoutOpening","caught","Error","message","submitError","details","event","title","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","activeViewId","_temp3","_temp4","expandedGroups","_temp5","setExpandedGroup","_temp6","setOpenMenu","_temp7","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","JSON","stringify","t18","state","state_0","state_1","state_2","state_3","state_4","state_5","_c","Tooltip$1","ListRow","ResourceContextMenu","AttachmentChip","handleDialogAcceptShortcut","WorkspaceBadge","EmptyState$1","getIconComponent","useHostStorage","createHostPersistStorage","createHostStoreRegistry","DEFAULT_KANBAN_RENDERER_SETTINGS","getAttributeValue","findEnumOption","findAttribute","isAttributesSource","getEnumOptions","isEnumOptionsSource","getAttributeStringValues","withTitleField","useCollectionViewStore","findField","useCollectionViews","NO_GROUPING","countFilterRules","searchRows","CollectionViewBar","EMPTY_VIEW_FILTER","filterRowsByView","formatFieldText","HighlightedText","sortRowsByView","groupRowsByField","SelectionInput","isParamEditorRichControl","LazyMarkdownEditor","isParamEditorHorizontalControl","ParamEditorField","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","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","ScrollArea$1","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$1","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","preferenceKey","createKanbanCreatePreferenceStore","createStore","persist","set","storage","preferenceStore","useKanbanCreatePreference","useStore","KanbanCreateSubmit","selectedLabel","openCreatedRow","withoutOpeningLabel","label","disabled","submitting","onSubmit","ButtonGroup","onChoose","MarkdownControl","next","FilesControl","files","picked","Paperclip","removeLabel","itemIndex","index","file","FieldInput","Textarea","_temp$3","Input","CreateFieldControl","branches","rule","parents","alternatives","parent","child","candidateValues","rules","attribute","excluded","getCreateAttributeValues","editable","empty","columnAttributeId","editableIds","readOnlyRuleCount","left","right","result","matches","fieldRules","matching","draftStore","draft","update","state","useKanbanCreateDraft","key","emptyValue","initialFieldValues","isFilled","editableCreateAttributes","attributeToParam","base","multiSelect","locked","KanbanRendererCreateDialog","localKey","useId","draftKey","attributeValues","setSubmitting","setError","editableAttributes","open","setDraft","config","seeded","declared","current_0","kept","added","id_0","seeded_0","declared_0","current_1","kept_0","id_1","added_0","id_2","columnChanged","close","onClose","discard","clearDraft","valid","field_0","submit","fileFieldIds","field_1","field_2","id_3","declaredValues","id_4","caught","Dialog","details","CloseButton","field_3","current_2","attribute_0","current_3","value_0","setOpenCreatedRow","buildKanbanRendererListItems","supportsManualReorder","sortFields","sorted","listDisplayProperties","getStatusPresentation","getRowStatusPresentation","status","toListItem","targetColumnKey","placement","toGroupListItem","groupingAttributeId","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","KanbanRenderer","hideToolbar","createColumnId","setCreateColumnId","setSearch","deferredSearch","useDeferredValue","_temp","_temp2","activeViewId","_temp3","_temp4","_temp5","setExpandedGroup","_temp6","setOpenMenu","_temp7","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","state_5"],"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-create-preference.store.ts","../src/components/kanban-renderer/kanban-create-submit.tsx","../src/components/kanban-renderer/kanban-renderer-create-field.tsx","../src/components/kanban-renderer/kanban-renderer-create-values.ts","../src/components/kanban-renderer/use-kanban-create-draft.ts","../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 { useStore } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport {\n createHostPersistStorage,\n createHostStoreRegistry,\n type HostStorage,\n useHostStorage,\n} from \"../../utils/host-storage\";\n\ninterface CreatePreference {\n openCreatedRow: boolean;\n setOpenCreatedRow: (value: boolean) => void;\n}\n\nconst preferenceKey = \"pstdio/ui/kanban-renderer/create-preference\";\n\nexport const createKanbanCreatePreferenceStore = (storage?: HostStorage) =>\n createStore<CreatePreference>()(\n persist((set) => ({ openCreatedRow: true, setOpenCreatedRow: (openCreatedRow) => set({ openCreatedRow }) }), {\n name: preferenceKey,\n storage: createHostPersistStorage(storage),\n partialize: ({ openCreatedRow }) => ({ openCreatedRow }),\n }),\n );\n\nconst preferenceStore = createHostStoreRegistry((_key, storage) => createKanbanCreatePreferenceStore(storage));\n\nexport const useKanbanCreatePreference = () => useStore(preferenceStore(preferenceKey, useHostStorage()));\n","import { Button, ButtonGroup, Icon, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\n\ninterface KanbanCreateSubmitProps {\n label: string;\n withoutOpeningLabel?: string;\n openCreatedRow: boolean;\n onChoose: (openCreatedRow: boolean) => void;\n onSubmit: () => void;\n disabled: boolean;\n submitting: boolean;\n}\n\nexport function KanbanCreateSubmit(props: KanbanCreateSubmitProps) {\n const { label, withoutOpeningLabel, openCreatedRow, onChoose, onSubmit, disabled, submitting } = props;\n const selectedLabel = !openCreatedRow && withoutOpeningLabel ? withoutOpeningLabel : label;\n return (\n <Menu.Root positioning={{ placement: \"top-end\" }}>\n <ButtonGroup size=\"sm\" variant=\"primary\" attached>\n <Button disabled={disabled || submitting} loading={submitting} onClick={onSubmit}>\n {selectedLabel}\n </Button>\n {withoutOpeningLabel ? (\n <Menu.Trigger asChild>\n <IconButton aria-label={withoutOpeningLabel} disabled={disabled || submitting}>\n <Icon as={ChevronDown} />\n </IconButton>\n </Menu.Trigger>\n ) : null}\n </ButtonGroup>\n {withoutOpeningLabel ? (\n <Portal>\n <Menu.Positioner>\n <Menu.Content>\n <Menu.RadioItemGroup\n value={openCreatedRow ? \"open\" : \"stay\"}\n onValueChange={({ value }) => onChoose(value === \"open\")}\n >\n <Menu.RadioItem value=\"open\">\n {label}\n <Menu.ItemIndicator />\n </Menu.RadioItem>\n <Menu.RadioItem value=\"stay\">\n {withoutOpeningLabel}\n <Menu.ItemIndicator />\n </Menu.RadioItem>\n </Menu.RadioItemGroup>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n ) : null}\n </Menu.Root>\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/lazy-markdown-editor\";\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 value: unknown;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, value, onChange } = props;\n\n return (\n <LazyMarkdownEditor\n // Lexical reads its seed once on mount. Use the retained draft when reopening.\n defaultState={typeof value === \"string\" ? value : \"\"}\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\")\n return <MarkdownControl disabled={disabled} field={field} value={value} 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 type { ViewFilterGroup, ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type { AttributeDescriptor } from \"./types\";\n\nconst branches = (group: ViewFilterGroup) => {\n const children: ViewFilterRule[][][] = (group.groups ?? []).map(branches);\n if (group.conjunction === \"or\") return [...group.rules.map((rule) => [rule]), ...children.flat()];\n return children.reduce(\n (parents, alternatives) => parents.flatMap((parent) => alternatives.map((child) => [...parent, ...child])),\n [group.rules],\n );\n};\n\nconst candidateValues = (attribute: AttributeDescriptor, rules: ViewFilterRule[]) => {\n const positive = rules.filter((rule) =>\n [\"is\", \"contains\", \"is-any-of\", \"has-any-of\", \"has-all-of\"].includes(rule.condition),\n );\n const values = positive.flatMap((rule) => (rule.value === undefined ? [] : [rule.value])).flat();\n const options = getEnumOptions(attribute.type).map((option) => option.value);\n if (attribute.type.kind !== \"enum-multi\") return [...values, ...options, \"\"];\n const excluded = rules\n .filter((rule) => [\"has-none-of\", \"is-none-of\"].includes(rule.condition))\n .flatMap((rule) => rule.value ?? [])\n .flat();\n const selected = [...new Set(values)].filter((value) => !excluded.includes(value));\n return [selected, ...options.map((value) => [value]), []];\n};\n\n/** Use the same filter semantics as the board, including alternatives and exclusions. */\nexport const getCreateAttributeValues = (\n attributes: AttributeDescriptor[],\n columnAttributeId: string | undefined,\n columnId: string,\n filter: ViewFilterGroup = { conjunction: \"and\", rules: [] },\n) => {\n const editable = attributes.filter((attribute) => attribute.editable);\n const empty: Record<string, unknown> = Object.fromEntries(\n editable.map((attribute) => {\n const value = attribute.type.kind === \"enum-multi\" ? [] : \"\";\n return [attribute.id, attribute.id === columnAttributeId ? columnId : value];\n }),\n );\n const editableIds = new Set(editable.map((attribute) => attribute.id));\n const readOnlyRuleCount = (rules: ViewFilterRule[]) =>\n rules.filter((rule) => !editableIds.has(rule.attributeId)).length;\n // Prefer a branch whose properties the form can choose. A read-only rule\n // (such as Created before a date) cannot be assumed to match a new row.\n const alternatives = branches(filter).sort((left, right) => readOnlyRuleCount(left) - readOnlyRuleCount(right));\n for (const rules of alternatives) {\n const result = { ...empty };\n let matches = true;\n for (const attribute of editable) {\n const fieldRules = rules.filter((rule) => rule.attributeId === attribute.id);\n if (fieldRules.length === 0) continue;\n const candidates = attribute.id === columnAttributeId ? [columnId] : candidateValues(attribute, fieldRules);\n const matching = candidates.find(\n (value) =>\n filterRowsByView(\n [{ id: \"draft\", title: \"\", attributes: { [attribute.id]: value } }],\n { conjunction: \"and\", rules: fieldRules },\n [attribute],\n ).length > 0,\n );\n if (matching === undefined) {\n matches = false;\n break;\n }\n result[attribute.id] = matching;\n }\n if (matches) return result;\n }\n return empty;\n};\n","import { useStore } from \"zustand\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createHostStoreRegistry, useHostStorage } from \"../../utils/host-storage\";\n\ninterface CreateDraft {\n values: Record<string, unknown>;\n attributeValues: Record<string, unknown>;\n}\n\ninterface CreateDraftState {\n draft: CreateDraft | null;\n setDraft: (update: (draft: CreateDraft | null) => CreateDraft | null) => void;\n clearDraft: () => void;\n}\n\n// One in-memory draft per host and view/filter survives renderer remounts and retains\n// File objects. Cancel and Escape suspend it; only X or successful creation clears it.\nconst draftStore = createHostStoreRegistry(() =>\n createStore<CreateDraftState>((set) => ({\n draft: null,\n setDraft: (update) =>\n set((state) => {\n const draft = update(state.draft);\n return draft === state.draft ? state : { draft };\n }),\n clearDraft: () => set({ draft: null }),\n })),\n);\n\nexport const useKanbanCreateDraft = (key: string) => useStore(draftStore(key, useHostStorage()));\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { useEffect, useId, 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 { useKanbanCreatePreference } from \"./kanban-create-preference.store\";\nimport { KanbanCreateSubmit } from \"./kanban-create-submit\";\nimport { CreateFieldControl } from \"./kanban-renderer-create-field\";\nimport { getCreateAttributeValues } from \"./kanban-renderer-create-values\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateField,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n} from \"./types\";\nimport { useKanbanCreateDraft } from \"./use-kanban-create-draft\";\n\ninterface KanbanRendererCreateDialogProps {\n open: boolean;\n columnId: string;\n columnAttributeId?: string;\n attributes: AttributeDescriptor[];\n config: KanbanRendererCreateRowConfig;\n draftKey?: string;\n filter?: ViewFilterGroup;\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\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, draftKey, filter, onClose, onSubmit } = props;\n const localKey = useId();\n const { draft, setDraft, clearDraft } = useKanbanCreateDraft(draftKey ?? localKey);\n const { openCreatedRow, setOpenCreatedRow } = useKanbanCreatePreference();\n const values = draft?.values ?? {};\n const attributeValues = draft?.attributeValues ?? {};\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState(\"\");\n const editableAttributes = editableCreateAttributes(attributes);\n\n // Reopening restores the board's draft, including markdown and attachments.\n // Cancel and Escape must never reset it: only X and successful submission do.\n useEffect(() => {\n if (!open) return;\n setDraft(\n (current) =>\n current ?? {\n values: initialFieldValues(config.fields),\n attributeValues: getCreateAttributeValues(attributes, columnAttributeId, columnId, filter),\n },\n );\n }, [attributes, columnAttributeId, columnId, config.fields, filter, open, setDraft]);\n\n useEffect(() => {\n if (open) setError(\"\");\n }, [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 setDraft((current) => {\n if (!current) return current;\n const kept = Object.entries(current.values).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current.values));\n if (added.length === 0 && kept.length === Object.keys(current.values).length) return current;\n return { ...current, values: { ...Object.fromEntries(added), ...Object.fromEntries(kept) } };\n });\n }, [config.fields, open, setDraft]);\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 = getCreateAttributeValues(editable, columnAttributeId, columnId, filter);\n const declared = new Set(editable.map((attribute) => attribute.id));\n setDraft((current) => {\n if (!current) return current;\n const kept = Object.entries(current.attributeValues).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current.attributeValues));\n const columnChanged = columnAttributeId && current.attributeValues[columnAttributeId] !== columnId;\n if (added.length === 0 && kept.length === Object.keys(current.attributeValues).length && !columnChanged)\n return current;\n return {\n ...current,\n attributeValues: {\n ...Object.fromEntries(added),\n ...Object.fromEntries(kept),\n ...(columnAttributeId ? { [columnAttributeId]: columnId } : {}),\n },\n };\n });\n }, [attributes, open, columnId, columnAttributeId, filter, setDraft]);\n\n const close = () => {\n if (!submitting) onClose();\n };\n\n const discard = () => {\n if (submitting) return;\n clearDraft();\n 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({\n columnId,\n columnAttributeId,\n values: declaredValues,\n attributeValues,\n files,\n openCreatedRow: config.labels.submitWithoutOpening ? openCreatedRow : true,\n });\n clearDraft();\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : config.labels.submitError);\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!draft) return null;\n\n return (\n <Dialog.Root\n open={open}\n size=\"lg\"\n variant=\"create\"\n scrollBehavior=\"inside\"\n closeOnInteractOutside={false}\n onOpenChange={(details) => !details.open && close()}\n >\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} onClick={discard} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n {config.fields.map((field) => (\n <CreateFieldControl\n key={field.id}\n field={field}\n removeLabel={config.labels.removeFile}\n value={values[field.id]}\n disabled={submitting}\n onChange={(value) =>\n setDraft((current) => current && { ...current, values: { ...current.values, [field.id]: value } })\n }\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 setDraft(\n (current) =>\n current && {\n ...current,\n attributeValues: { ...current.attributeValues, [attributeId]: value },\n },\n )\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 <KanbanCreateSubmit\n label={config.submitLabel}\n withoutOpeningLabel={config.labels.submitWithoutOpening}\n openCreatedRow={openCreatedRow}\n onChoose={setOpenCreatedRow}\n onSubmit={() => void submit()}\n disabled={!valid}\n submitting={submitting}\n />\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 activeViewId = useKanbanRendererStore(storageKey, (state) => state.activeViewId, 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 draftKey={JSON.stringify([storageKey, activeViewId, filter])}\n filter={filter}\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":["KanbanRendererMove","ViewSort","KanbanRendererRow","BuildMoveInput","rowId","columnGrouping","rowGrouping","targetColumnId","targetGroupKey","beforeRowId","sorts","buildKanbanMove","input","attributes","Record","add","attributeId","value","undefined","length","order","applyKanbanMove","rows","TRow","move","existing","find","row","id","moving","Object","keys","map","remaining","filter","target","findIndex","index","slice","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","group","item","values","totalCount","get","Button","Icon","ListFilter","EmptyState","CollectionFilterEmptyStateProps","ruleCount","hiddenCount","onEditFilter","CollectionFilterEmptyState","props","$","_c","t0","Symbol","for","t1","t2","t3","_c","EmptyState","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","Text","ChevronRight","DragEvent","KeyboardEvent","ResourceContextMenu","KanbanRendererBoardGroup","KanbanRendererBoardItem","KanbanRendererCard","BoardEntryData","key","group","item","groupKey","BoardEntryProps","entry","index","selectedItemId","collapsed","dropTarget","canDragIn","canDragOut","onToggle","onFocus","onKeyboard","event","HTMLDivElement","onDragOver","onDrop","onDragStart","itemId","onDragEnd","BoardEntry","props","$","_c","t0","t1","t2","Symbol","for","bg","t3","preventDefault","currentTarget","click","t4","undefined","t5","t6","t7","t8","label","t9","items","length","t10","contextMenuActions","cardProps","event_0","target","onClick","id","title","_c","Box","Stack","Text","defaultRangeExtractor","DragEvent","KeyboardEvent","useLayoutEffect","useRef","useState","ScrollArea","useVirtualizer","KanbanRendererBoardColumn","BoardEntry","BoardEntryData","BoardColumnCardsProps","column","selectedItemId","draggedKey","revealedItemId","onDragStart","itemId","event","HTMLDivElement","onDragEnd","onDragTarget","onDrop","beforeItemId","groupKey","BoardColumnCards","props","$","_c","viewport","t0","Symbol","for","collapsed","setCollapsed","focusedKey","setFocusedKey","focusTarget","setFocusTarget","dropKey","setDropKey","entries","groups","length","flatMap","group","key","JSON","stringify","id","items","map","item","item_0","virtualizer","count","getScrollElement","current","getItemKey","index","estimateSize","index_0","overscan","rangeExtractor","range","indexes","Set","index_1","findIndex","entry","add","index_2","entry_0","sort","_temp","t1","entry_1","revealIndex","scrollToIndex","align","t2","target","querySelectorAll","find","element","dataset","boardKey","focus","preventScroll","handleKeyboard","index_3","currentTarget","target_0","Math","min","max","preventDefault","t3","event_0","key_0","card","stopPropagation","dataTransfer","dropEffect","dragOver","T0","t4","t5","t6","t7","t8","label","t9","margin","t10","totalCount","T1","t11","t12","getTotalSize","t13","t14","getVirtualItems","virtual","entry_2","item_1","group_0","drop","event_1","measureElement","start","Boolean","canDragIn","canDragOut","event_2","t15","t16","a","b","_c","useVirtualizer","_temp","ScrollArea","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","DragEvent","useEffect","useRef","edgeSpeed","coordinate","start","size","edge","Math","min","near","far","useBoardDragScroll","$","_c","viewportRef","cleanup","t0","t1","Symbol","for","current","t2","startDrag","event","viewport","document","ownerDocument","window","defaultView","columnViewport","pointer","x","clientX","y","clientY","previousTime","performance","now","frame","trackPointer","event_0","target","Element","closest","leaveDocument","event_1","relatedTarget","stop","cancelAnimationFrame","removeEventListener","scroll","time","bounds","getBoundingClientRect","elapsed","top","bottom","scrollLeft","left","width","column","scrollTop","height","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","Stack","ComponentProps","ComponentType","DragEvent","useState","ResourceContextAction","ScrollArea","BoardColumnCards","ColumnHeader","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","draggedKey","setDraggedKey","revealedItemId","setRevealedItemId","panViewportProps","dragScroll","t1","event","dataTransfer","setData","effectAllowed","currentTarget","closest","dataset","boardKey","startDrag","handleDragStart","t2","Symbol","for","handleDragEnd","t3","event_0","preventDefault","dropEffect","handleDragOver","t4","event_1","contains","relatedTarget","Node","handleDragLeave","t5","columnId_0","event_2","itemId_0","getData","handleDrop","t6","viewportRef","t7","display","alignItems","gap","padding","minH","t8","t9","column","event_3","stopPropagation","itemId_1","map","_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","_temp7","_temp3","useStore","persist","createStore","createHostPersistStorage","createHostStoreRegistry","HostStorage","useHostStorage","CreatePreference","openCreatedRow","setOpenCreatedRow","value","preferenceKey","createKanbanCreatePreferenceStore","storage","set","name","partialize","preferenceStore","_key","useKanbanCreatePreference","$","_c","t0","t1","_c","Button","ButtonGroup","Icon","IconButton","Menu","Portal","ChevronDown","KanbanCreateSubmitProps","label","withoutOpeningLabel","openCreatedRow","onChoose","onSubmit","disabled","submitting","KanbanCreateSubmit","props","$","_c","selectedLabel","t0","Symbol","for","placement","t1","t2","t3","t4","t5","t6","value","_c","Button","Icon","Input","Stack","Text","Textarea","Wrap","Paperclip","useRef","AttachmentChip","SelectionInput","LazyMarkdownEditor","KanbanRendererCreateField","MarkdownControl","props","$","_c","disabled","field","value","onChange","t0","t1","t2","next","t3","placeholder","FilesControl","removeLabel","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","ViewFilterGroup","ViewFilterRule","filterRowsByView","getEnumOptions","AttributeDescriptor","branches","group","children","groups","map","conjunction","rules","rule","flat","reduce","parents","alternatives","flatMap","parent","child","candidateValues","attribute","positive","filter","includes","condition","values","value","undefined","options","type","option","kind","excluded","selected","Set","getCreateAttributeValues","attributes","columnAttributeId","columnId","editable","empty","Record","Object","fromEntries","id","editableIds","readOnlyRuleCount","has","attributeId","length","sort","left","right","result","matches","fieldRules","candidates","matching","find","title","useStore","createStore","createHostStoreRegistry","useHostStorage","CreateDraft","values","Record","attributeValues","CreateDraftState","draft","setDraft","update","clearDraft","draftStore","set","state","useKanbanCreateDraft","key","$","_c","t0","t1","_c","Button","CloseButton","Dialog","HStack","Stack","Text","ViewFilterGroup","useEffect","useId","useState","handleDialogAcceptShortcut","Param","ParamValueMap","ParamEditorHorizontal","useKanbanCreatePreference","KanbanCreateSubmit","CreateFieldControl","getCreateAttributeValues","getEnumOptions","AttributeDescriptor","KanbanRendererCreateField","KanbanRendererCreateRowConfig","KanbanRendererCreateSubmission","useKanbanCreateDraft","KanbanRendererCreateDialogProps","open","columnId","columnAttributeId","attributes","config","draftKey","filter","onClose","onSubmit","submission","Promise","emptyValue","field","type","initialFieldValues","fields","Object","fromEntries","map","id","defaultValue","isFilled","value","required","Array","isArray","length","trim","undefined","editableCreateAttributes","attribute","editable","attributeToParam","locked","base","name","label","description","kind","multiSelect","placeholder","clearable","disabled","options","option","icon","color","singleLine","KanbanRendererCreateDialog","props","localKey","draft","setDraft","clearDraft","openCreatedRow","setOpenCreatedRow","values","attributeValues","submitting","setSubmitting","error","setError","editableAttributes","current","seeded","declared","Set","kept","entries","has","added","keys","columnChanged","close","discard","valid","every","submit","fileFieldIds","files","flatMap","File","declaredValues","labels","submitWithoutOpening","caught","Error","message","submitError","details","event","title","removeFile","properties","attributeId","cancel","submitLabel","KanbanRendererMove","ViewSort","ResourceContextAction","getIconComponent","withTitleField","sortRowsByView","buildKanbanMove","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","onMove","move","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","targetColumnId","targetGroupKey","rowGrouping","toGroupListItem","group","label","parent","groupingAttributeId","isGroup","countBadge","children","map","column","subgroups","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","ViewSort","buildKanbanMove","KanbanRendererProps","runKanbanAction","applyBoardMoveItem","applyBoardMoveToGroup","KanbanRendererRow","KanbanRendererSettings","kanbanMoveHandlers","input","Pick","TRow","settings","sorts","onMove","onActionError","onAttributeChange","onReorder","handleBoardMoveItem","rowId","targetColumnId","context","beforeItemId","targetGroupKey","beforeRowId","handleBoardMoveToGroup","rowGrouping","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","KanbanRendererMove","ViewFilterGroup","ViewSort","ReactNode","useDeferredValue","useState","ResourceContextAction","withTitleField","countFilterRules","useCollectionViews","KanbanActionErrorHandler","KanbanRendererBoardColumnAction","buildKanbanBoardColumns","narrowKanbanRows","KanbanRendererContent","KanbanRendererCreateDialog","groupRows","resolveKnownColumnKeys","buildKanbanRendererListItems","kanbanMoveHandlers","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","onMove","move","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","activeViewId","_temp3","_temp4","expandedGroups","_temp5","setExpandedGroup","_temp6","setOpenMenu","_temp7","filteredRows","visibleRows","columnTotals","t4","trim","searching","grouped","columnGrouping","rowGrouping","knownColumnKeys","structureRows","listItems","viewMode","boardColumns","t5","handleBoardMoveItem","handleBoardMoveToGroup","t6","length","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","JSON","stringify","t17","state","state_0","state_1","state_2","state_3","state_4","state_5","_c","Tooltip$1","ListRow","ResourceContextMenu","useVirtualizer$1","AttachmentChip","WorkspaceBadge","EmptyState$1","getIconComponent","useHostStorage","createHostPersistStorage","createHostStoreRegistry","DEFAULT_KANBAN_RENDERER_SETTINGS","getAttributeValue","findEnumOption","findAttribute","isAttributesSource","getEnumOptions","isEnumOptionsSource","getAttributeStringValues","withTitleField","useCollectionViewStore","findField","useCollectionViews","NO_GROUPING","countFilterRules","searchRows","CollectionViewBar","EMPTY_VIEW_FILTER","filterRowsByView","formatFieldText","HighlightedText","sortRowsByView","groupRowsByField","SelectionInput","isParamEditorRichControl","LazyMarkdownEditor","isParamEditorHorizontalControl","ParamEditorField","buildDisplayPropertyOptions","collectDisplayBadges","renderBadgeListDisplay","resolveKnownColumnKeys","collectDisplayCustomSlots","CollectionViewEmptyState","buildFilterCategories","resolveListDropTargetColumnKey","DisplayMenu","buildGroupingOptions","DisplaySortControl","renderAttributeBadge","buildKanbanMove","input","attributes","add","attributeId","value","columnGrouping","targetColumnId","rowGrouping","targetGroupKey","sorts","applyKanbanMove","existing","rows","row","move","moving","remaining","target","index","runKanbanAction","run","error","onError","action","groupRows","options","columnField","rowField","structure","structureRows","knownColumnKeys","group","source","column","keys","countFilterValues","counts","descriptor","rowEyebrow","shorthand","narrowKanbanRows","displayProperties","settings","property","showsId","idTexts","searchTexts","field","id","filteredRows","filter","fields","visibleRows","search","columns","buildKanbanBoardColumns","toBoardItems","getRowContextMenuActions","onAttributeChange","onActionError","onRowClick","grouped","columnConfig","getBoardColumnConfig","enumOption","groups","subgroup","item","columnTotals","CollectionFilterEmptyState","$","c","props","t0","Icon","ListFilter","t1","ruleCount","hiddenCount","t2","onEditFilter","Button","t3","stopRowActivation","event","getSelectedValues","badge","toggleMultiValue","values","optionValue","getBadgeIconColor","selectionIcon","SquareCheck","Square","Check","KanbanRendererAttributeBadge","T0","T1","T2","T3","t4","t5","t6","t7","t8","t9","onChange","canEdit","isMultiValue","selectedValues","t10","rowInteractionProps","handleOptionChange","nextValue","t11","t12","ChevronDown","t13","Fragment","badgeContent","t14","Badge","Menu","Portal","isSelected","option","KanbanRendererCard","highlight","badges","customSlots","hasBadges","cursor","draggable","onClick","handleClick","eyebrow","workspaceBadge","HStack","Text","title","onBadgeChange","Wrap","t15","onDragEnd","onDragStart","Stack","BoardEntry","entry","collapsed","dropTarget","onKeyboard","canDragIn","onDragOver","onDrop","ChevronRight","onFocus","onToggle","event_0","selectedItemId","canDragOut","Box","BoardColumnCards","viewport","useRef","setCollapsed","useState","focusedKey","setFocusedKey","focusTarget","setFocusTarget","dropKey","setDropKey","entries","item_0","virtualizer","index_0","indexes","defaultRangeExtractor","range","key","draggedKey","index_1","revealedItemId","index_2","entry_0","_temp$5","entry_1","revealIndex","useLayoutEffect","element","handleKeyboard","target_0","index_3","onDragTarget","key_0","card","dragOver","ScrollArea$1","entry_2","virtual","item_1","group_0","groupKey","current","event_2","event_1","t16","a","b","ColumnHeader","Spacer","onCreateStart","IconButton","Plus","onColumnAction","MoreHorizontal","edgeSpeed","coordinate","start","size","edge","near","far","useBoardDragScroll","viewportRef","cleanup","useEffect","document","window","columnViewport","pointer","previousTime","frame","trackPointer","leaveDocument","stop","scroll","bounds","elapsed","time","interactiveTarget","useBoardPan","pan","isPanning","setIsPanning","finishPan","gesture","KanbanRendererBoard","activeColumn","setActiveColumn","setDraggedKey","setRevealedItemId","panViewportProps","dragScroll","itemId","handleDragStart","handleDragEnd","columnId","handleDragOver","handleDragLeave","onMoveItem","itemId_0","columnId_0","handleDrop","onMoveToGroup","event_3","itemId_1","beforeItemId","flattenKanbanRendererListItems","items","canExpand","getRowIsExpanded","expanded","depth","getDropTargetIndicatorProps","isDropTarget","isGroup","expandedState","rowId","updateExpandedState","isExpanded","KanbanRendererListLabel","KanbanRendererListBadges","hasEndContent","buildListRowItem","hasChildren","KanbanRendererList","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","expandedGroups","onExpandedGroupChange","onItemClick","handleExpandedChange","KanbanRendererListRow","canDropHere","rowItem","onExpandedChange","toggleExpanded","handleActivate","onDraggedItemChange","onDropTargetChange","draggedId","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$1","gap","hasCompactControls","param_1","group_2","groupParams_1","param_2","group_3","groupParams_2","_temp3$1","param_0","groupParams","group_1","groupParams_0","preferenceKey","createKanbanCreatePreferenceStore","createStore","persist","set","storage","preferenceStore","useKanbanCreatePreference","useStore","KanbanCreateSubmit","selectedLabel","openCreatedRow","withoutOpeningLabel","label","disabled","submitting","onSubmit","ButtonGroup","onChoose","MarkdownControl","next","FilesControl","files","picked","Paperclip","removeLabel","itemIndex","file","FieldInput","Textarea","_temp$3","Input","CreateFieldControl","branches","rule","parents","alternatives","parent","child","candidateValues","rules","attribute","excluded","getCreateAttributeValues","editable","empty","columnAttributeId","editableIds","readOnlyRuleCount","left","right","result","matches","fieldRules","matching","draftStore","draft","update","state","useKanbanCreateDraft","emptyValue","initialFieldValues","isFilled","editableCreateAttributes","attributeToParam","base","multiSelect","locked","KanbanRendererCreateDialog","localKey","useId","draftKey","attributeValues","setSubmitting","setError","editableAttributes","open","setDraft","config","seeded","declared","current_0","kept","added","id_0","seeded_0","declared_0","current_1","kept_0","id_1","added_0","id_2","columnChanged","close","onClose","discard","clearDraft","valid","field_0","submit","fileFieldIds","field_1","field_2","id_3","declaredValues","id_4","caught","Dialog","details","handleDialogAcceptShortcut","CloseButton","field_3","current_2","attribute_0","current_3","value_0","setOpenCreatedRow","buildKanbanRendererListItems","supportsManualReorder","sortFields","sorted","listDisplayProperties","getStatusPresentation","getRowStatusPresentation","status","toListItem","onMove","onReorder","targetColumnKey","placement","toGroupListItem","groupingAttributeId","columnKey","applyBoardMoveItem","applyBoardMoveToGroup","kanbanMoveHandlers","context","kanbanRendererInitialState","initialState","useKanbanRendererStore","storageKey","selector","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","_temp$2","refresh","unsubscribes","dispose","tick","toggle","KanbanRendererToolbar","rawAttributes","defaultFilter","defaultSettings","defaultSorts","viewState","_temp$1","categories","optionsFor","setSorts","setSettings","t17","actions","leading","onSearchChange","searchResultLabel","KanbanRenderer","hideToolbar","createColumnId","setCreateColumnId","setSearch","deferredSearch","useDeferredValue","_temp","_temp2","activeViewId","_temp3","_temp4","_temp5","setExpandedGroup","_temp6","setOpenMenu","_temp7","searching","defaultActiveViewId","defaultViews","toolbarActions","toolbarLeading","viewsSource","createRow","handleBoardMoveItem","handleBoardMoveToGroup","state_0","state_1","state_2","state_3","state_4","state_5"],"sources":["../src/components/kanban-renderer/kanban-move.ts","../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/collection-view/collection-filter-empty-state.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-entry.tsx","../src/components/kanban-renderer/kanban-renderer-board-column.tsx","../src/components/kanban-renderer/kanban-renderer-board-column-header.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-create-preference.store.ts","../src/components/kanban-renderer/kanban-create-submit.tsx","../src/components/kanban-renderer/kanban-renderer-create-field.tsx","../src/components/kanban-renderer/kanban-renderer-create-values.ts","../src/components/kanban-renderer/use-kanban-create-draft.ts","../src/components/kanban-renderer/kanban-renderer-create-dialog.tsx","../src/components/kanban-renderer/kanban-renderer-list-items.ts","../src/components/kanban-renderer/kanban-renderer-board-move.ts","../src/components/kanban-renderer/kanban-renderer-move-handlers.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":["import type { KanbanRendererMove, ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { KanbanRendererRow } from \"./types\";\n\ninterface BuildMoveInput {\n rowId: string;\n columnGrouping?: string;\n rowGrouping: string;\n targetColumnId?: string;\n targetGroupKey?: string;\n beforeRowId?: string;\n sorts: ViewSort[];\n}\n\nexport const buildKanbanMove = (input: BuildMoveInput) => {\n const { rowId, columnGrouping, rowGrouping, targetColumnId, targetGroupKey, beforeRowId, sorts } = input;\n const attributes: Record<string, unknown> = {};\n const add = (attributeId: string | undefined, value: string | undefined) => {\n if (!attributeId || attributeId === \"none\" || value === undefined) return;\n attributes[attributeId] = value;\n };\n add(columnGrouping, targetColumnId);\n add(rowGrouping, targetGroupKey);\n return { rowId, attributes, ...(sorts.length === 0 ? { order: { beforeRowId } } : {}) };\n};\n\nexport const applyKanbanMove = <TRow extends KanbanRendererRow>(rows: TRow[], move: KanbanRendererMove) => {\n const existing = rows.find((row) => row.id === move.rowId);\n if (!existing) return rows;\n const moving = Object.keys(move.attributes).length\n ? { ...existing, attributes: { ...existing.attributes, ...move.attributes } }\n : existing;\n if (!move.order) return rows.map((row) => (row.id === move.rowId ? moving : row));\n if (move.order.beforeRowId === move.rowId) return rows;\n const remaining = rows.filter((row) => row.id !== move.rowId);\n const target = remaining.findIndex((row) => row.id === move.order?.beforeRowId);\n const index = target < 0 ? remaining.length : target;\n return [...remaining.slice(0, index), moving, ...remaining.slice(index)];\n};\n","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 get contextMenuActions() {\n return getRowContextMenuActions?.(row as TRow);\n },\n get cardProps() {\n return {\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\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: groups\n ? [...new Map(groups.flatMap((group) => group.items).map((item) => [item.id, item])).values()]\n : toBoardItems(column.rows),\n groups,\n totalCount: columnTotals?.get(column.key),\n };\n });\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, 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, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { DragEvent, KeyboardEvent } from \"react\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport type { KanbanRendererBoardGroup, KanbanRendererBoardItem } from \"./kanban-renderer-board\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\n\nexport interface BoardEntryData {\n key: string;\n group?: KanbanRendererBoardGroup;\n item?: KanbanRendererBoardItem;\n groupKey?: string;\n}\ninterface BoardEntryProps {\n entry: BoardEntryData;\n index: number;\n selectedItemId: string | null;\n collapsed: boolean;\n dropTarget: boolean;\n canDragIn: boolean;\n canDragOut: boolean;\n onToggle: () => void;\n onFocus: () => void;\n onKeyboard: (event: KeyboardEvent<HTMLDivElement>, index: number) => void;\n onDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onDrop: (event: DragEvent<HTMLDivElement>) => void;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n}\nexport const BoardEntry = (props: BoardEntryProps) => {\n const {\n entry,\n index,\n selectedItemId,\n collapsed,\n dropTarget,\n canDragIn,\n canDragOut,\n onToggle,\n onFocus,\n onKeyboard,\n onDragOver,\n onDrop,\n onDragStart,\n onDragEnd,\n } = props;\n const { item, group } = entry;\n if (group)\n return (\n <HStack\n role=\"button\"\n tabIndex={0}\n aria-expanded={!collapsed}\n data-board-key={entry.key}\n data-board-pan-ignore\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n borderRadius=\"sm\"\n bg={dropTarget ? \"bg.subtle\" : \"transparent\"}\n _hover={{ bg: \"bg.hover\" }}\n onFocus={onFocus}\n onClick={onToggle}\n onKeyDown={(event) => {\n onKeyboard(event, index);\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n }\n }}\n onDragOver={canDragIn ? onDragOver : undefined}\n onDrop={canDragIn ? onDrop : undefined}\n >\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={collapsed ? \"rotate(0deg)\" : \"rotate(90deg)\"}\n />\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 );\n if (!item) return null;\n return (\n <ResourceContextMenu actions={item.contextMenuActions ?? []}>\n <Box\n data-board-key={entry.key}\n tabIndex={0}\n role=\"button\"\n aria-label={item.cardProps.title}\n onFocusCapture={onFocus}\n onKeyDown={(event) => {\n onKeyboard(event, index);\n if (event.target === event.currentTarget && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n item.cardProps.onClick?.();\n }\n }}\n onDragOver={canDragIn ? onDragOver : undefined}\n onDrop={canDragIn ? onDrop : undefined}\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};\n","import { Box, Stack, Text } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor } from \"@tanstack/react-virtual\";\nimport { type DragEvent, type KeyboardEvent, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { useVirtualizer } from \"@/utils/use-virtualizer\";\nimport type { KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\nimport { BoardEntry, type BoardEntryData } from \"./kanban-renderer-board-entry\";\n\ninterface BoardColumnCardsProps {\n column: KanbanRendererBoardColumn;\n selectedItemId: string | null;\n draggedKey: string | null;\n revealedItemId: string | null;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onDragTarget: () => void;\n onDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string, groupKey?: string) => void;\n}\n\nexport const BoardColumnCards = (props: BoardColumnCardsProps) => {\n const { column, selectedItemId, draggedKey, revealedItemId, onDragStart, onDragEnd, onDragTarget, onDrop } = props;\n const viewport = useRef<HTMLDivElement>(null);\n const [collapsed, setCollapsed] = useState<Record<string, boolean>>({});\n const [focusedKey, setFocusedKey] = useState<string | null>(null);\n const [focusTarget, setFocusTarget] = useState<string | null>(null);\n const [dropKey, setDropKey] = useState<string | null>(null);\n const entries: BoardEntryData[] = column.groups?.length\n ? column.groups.flatMap((group) => [\n { key: JSON.stringify([\"group\", column.id, group.key]), group },\n ...(collapsed[group.key]\n ? []\n : group.items.map((item) => ({\n key: JSON.stringify([\"row\", column.id, group.key, item.id]),\n item,\n groupKey: group.key,\n }))),\n ])\n : column.items.map((item) => ({ key: JSON.stringify([\"row\", column.id, item.id]), item }));\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLDivElement>({\n count: entries.length,\n getScrollElement: () => viewport.current,\n getItemKey: (index) => entries[index].key,\n estimateSize: (index) => (entries[index].group ? 32 : 100),\n overscan: 5,\n rangeExtractor: (range) => {\n const indexes = new Set(defaultRangeExtractor(range));\n for (const key of [focusedKey, focusTarget, draggedKey]) {\n const index = entries.findIndex((entry) => entry.key === key);\n if (index >= 0) indexes.add(index);\n }\n for (const id of [revealedItemId]) {\n const index = entries.findIndex((entry) => entry.item?.id === id);\n if (index >= 0) indexes.add(index);\n }\n return [...indexes].sort((a, b) => a - b);\n },\n });\n const revealIndex = entries.findIndex((entry) => entry.item?.id === revealedItemId);\n useLayoutEffect(() => {\n if (revealIndex >= 0) virtualizer.scrollToIndex(revealIndex, { align: \"auto\" });\n }, [revealIndex, virtualizer]);\n useLayoutEffect(() => {\n if (!focusTarget) return;\n const target = [...(viewport.current?.querySelectorAll<HTMLElement>(\"[data-board-key]\") ?? [])].find(\n (element) => element.dataset.boardKey === focusTarget,\n );\n target?.focus({ preventScroll: true });\n if (target) setFocusTarget(null);\n }, [focusTarget]);\n\n const handleKeyboard = (event: KeyboardEvent<HTMLDivElement>, index: number) => {\n if (event.target !== event.currentTarget) return;\n let target = index;\n if (event.key === \"ArrowDown\") target = Math.min(index + 1, entries.length - 1);\n else if (event.key === \"ArrowUp\") target = Math.max(index - 1, 0);\n else if (event.key === \"Home\") target = 0;\n else if (event.key === \"End\") target = entries.length - 1;\n else return;\n event.preventDefault();\n virtualizer.scrollToIndex(target, { align: \"auto\" });\n setFocusTarget(entries[target].key);\n };\n const dragOver = (event: DragEvent<HTMLDivElement>, key: string, card: boolean) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setDropKey(key);\n if (card) onDragTarget();\n };\n\n return (\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n viewportRef={viewport}\n viewportProps={{ ...{ \"data-board-column-viewport\": column.id }, \"aria-label\": column.label }}\n verticalScrollbarProps={{ margin: \"0\" }}\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 <Box position=\"relative\" height={`${virtualizer.getTotalSize()}px`}>\n {virtualizer.getVirtualItems().map((virtual) => {\n const entry = entries[virtual.index];\n const { item, group } = entry;\n const groupKey = group?.key ?? entry.groupKey;\n const drop = (event: DragEvent<HTMLDivElement>) => {\n setDropKey(null);\n onDrop(event, item?.id, groupKey);\n };\n return (\n <Box\n key={entry.key}\n data-index={virtual.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n top={`${virtual.start}px`}\n left=\"0\"\n width=\"full\"\n paddingBottom=\"xs\"\n data-column-id={column.id}\n data-group-key={groupKey}\n >\n <BoardEntry\n entry={entry}\n index={virtual.index}\n selectedItemId={selectedItemId}\n collapsed={Boolean(group && collapsed[group.key])}\n dropTarget={dropKey === entry.key}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n onFocus={() => setFocusedKey(entry.key)}\n onKeyboard={handleKeyboard}\n onToggle={() => {\n if (group) setCollapsed((current) => ({ ...current, [group.key]: !current[group.key] }));\n }}\n onDragOver={(event) => dragOver(event, entry.key, Boolean(item))}\n onDrop={drop}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\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 { type DragEvent, useEffect, useRef } from \"react\";\n\nconst edgeSpeed = (coordinate: number, start: number, size: number) => {\n if (coordinate < start || coordinate > start + size) return 0;\n const edge = Math.min(96, size / 2);\n const near = coordinate - start;\n const far = start + size - coordinate;\n if (near < edge) return -960 * (1 - near / edge);\n if (far < edge) return 960 * (1 - far / edge);\n return 0;\n};\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) return;\n\n const document = viewport.ownerDocument;\n const window = document.defaultView!;\n let columnViewport: HTMLElement | null = null;\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 columnViewport =\n event.target instanceof Element ? event.target.closest<HTMLElement>(\"[data-board-column-viewport]\") : null;\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 elapsed = (time - previousTime) / 1000;\n if (pointer && pointer.y >= bounds.top && pointer.y <= bounds.bottom) {\n viewport.scrollLeft += edgeSpeed(pointer.x, bounds.left, bounds.width) * elapsed;\n }\n if (columnViewport && pointer) {\n const column = columnViewport.getBoundingClientRect();\n columnViewport.scrollTop += edgeSpeed(pointer.y, column.top, column.height) * elapsed;\n }\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 { 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 { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { BoardColumnCards } from \"./kanban-renderer-board-column\";\nimport { ColumnHeader } from \"./kanban-renderer-board-column-header\";\nimport type { 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 [draggedKey, setDraggedKey] = useState<string | null>(null);\n const [revealedItemId, setRevealedItemId] = 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 setDraggedKey(event.currentTarget.closest<HTMLElement>(\"[data-board-key]\")?.dataset.boardKey ?? null);\n dragScroll.startDrag(event);\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setDraggedKey(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 setRevealedItemId(itemId);\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 <BoardColumnCards\n column={column}\n selectedItemId={selectedItemId}\n draggedKey={draggedKey}\n revealedItemId={revealedItemId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragTarget={() => setActiveColumn(column.id)}\n onDrop={(event, beforeItemId, targetGroupKey) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n setDraggedKey(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === beforeItemId) return;\n setRevealedItemId(itemId);\n if (onMoveItem) onMoveItem(itemId, column.id, { beforeItemId, targetGroupKey });\n else if (targetGroupKey) onMoveToGroup?.(itemId, targetGroupKey, { beforeItemId });\n }}\n />\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 { useStore } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport {\n createHostPersistStorage,\n createHostStoreRegistry,\n type HostStorage,\n useHostStorage,\n} from \"../../utils/host-storage\";\n\ninterface CreatePreference {\n openCreatedRow: boolean;\n setOpenCreatedRow: (value: boolean) => void;\n}\n\nconst preferenceKey = \"pstdio/ui/kanban-renderer/create-preference\";\n\nexport const createKanbanCreatePreferenceStore = (storage?: HostStorage) =>\n createStore<CreatePreference>()(\n persist((set) => ({ openCreatedRow: true, setOpenCreatedRow: (openCreatedRow) => set({ openCreatedRow }) }), {\n name: preferenceKey,\n storage: createHostPersistStorage(storage),\n partialize: ({ openCreatedRow }) => ({ openCreatedRow }),\n }),\n );\n\nconst preferenceStore = createHostStoreRegistry((_key, storage) => createKanbanCreatePreferenceStore(storage));\n\nexport const useKanbanCreatePreference = () => useStore(preferenceStore(preferenceKey, useHostStorage()));\n","import { Button, ButtonGroup, Icon, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\n\ninterface KanbanCreateSubmitProps {\n label: string;\n withoutOpeningLabel?: string;\n openCreatedRow: boolean;\n onChoose: (openCreatedRow: boolean) => void;\n onSubmit: () => void;\n disabled: boolean;\n submitting: boolean;\n}\n\nexport function KanbanCreateSubmit(props: KanbanCreateSubmitProps) {\n const { label, withoutOpeningLabel, openCreatedRow, onChoose, onSubmit, disabled, submitting } = props;\n const selectedLabel = !openCreatedRow && withoutOpeningLabel ? withoutOpeningLabel : label;\n return (\n <Menu.Root positioning={{ placement: \"top-end\" }}>\n <ButtonGroup size=\"sm\" variant=\"primary\" attached>\n <Button disabled={disabled || submitting} loading={submitting} onClick={onSubmit}>\n {selectedLabel}\n </Button>\n {withoutOpeningLabel ? (\n <Menu.Trigger asChild>\n <IconButton aria-label={withoutOpeningLabel} disabled={disabled || submitting}>\n <Icon as={ChevronDown} />\n </IconButton>\n </Menu.Trigger>\n ) : null}\n </ButtonGroup>\n {withoutOpeningLabel ? (\n <Portal>\n <Menu.Positioner>\n <Menu.Content>\n <Menu.RadioItemGroup\n value={openCreatedRow ? \"open\" : \"stay\"}\n onValueChange={({ value }) => onChoose(value === \"open\")}\n >\n <Menu.RadioItem value=\"open\">\n {label}\n <Menu.ItemIndicator />\n </Menu.RadioItem>\n <Menu.RadioItem value=\"stay\">\n {withoutOpeningLabel}\n <Menu.ItemIndicator />\n </Menu.RadioItem>\n </Menu.RadioItemGroup>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n ) : null}\n </Menu.Root>\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/lazy-markdown-editor\";\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 value: unknown;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, value, onChange } = props;\n\n return (\n <LazyMarkdownEditor\n // Lexical reads its seed once on mount. Use the retained draft when reopening.\n defaultState={typeof value === \"string\" ? value : \"\"}\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\")\n return <MarkdownControl disabled={disabled} field={field} value={value} 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 type { ViewFilterGroup, ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type { AttributeDescriptor } from \"./types\";\n\nconst branches = (group: ViewFilterGroup) => {\n const children: ViewFilterRule[][][] = (group.groups ?? []).map(branches);\n if (group.conjunction === \"or\") return [...group.rules.map((rule) => [rule]), ...children.flat()];\n return children.reduce(\n (parents, alternatives) => parents.flatMap((parent) => alternatives.map((child) => [...parent, ...child])),\n [group.rules],\n );\n};\n\nconst candidateValues = (attribute: AttributeDescriptor, rules: ViewFilterRule[]) => {\n const positive = rules.filter((rule) =>\n [\"is\", \"contains\", \"is-any-of\", \"has-any-of\", \"has-all-of\"].includes(rule.condition),\n );\n const values = positive.flatMap((rule) => (rule.value === undefined ? [] : [rule.value])).flat();\n const options = getEnumOptions(attribute.type).map((option) => option.value);\n if (attribute.type.kind !== \"enum-multi\") return [...values, ...options, \"\"];\n const excluded = rules\n .filter((rule) => [\"has-none-of\", \"is-none-of\"].includes(rule.condition))\n .flatMap((rule) => rule.value ?? [])\n .flat();\n const selected = [...new Set(values)].filter((value) => !excluded.includes(value));\n return [selected, ...options.map((value) => [value]), []];\n};\n\n/** Use the same filter semantics as the board, including alternatives and exclusions. */\nexport const getCreateAttributeValues = (\n attributes: AttributeDescriptor[],\n columnAttributeId: string | undefined,\n columnId: string,\n filter: ViewFilterGroup = { conjunction: \"and\", rules: [] },\n) => {\n const editable = attributes.filter((attribute) => attribute.editable);\n const empty: Record<string, unknown> = Object.fromEntries(\n editable.map((attribute) => {\n const value = attribute.type.kind === \"enum-multi\" ? [] : \"\";\n return [attribute.id, attribute.id === columnAttributeId ? columnId : value];\n }),\n );\n const editableIds = new Set(editable.map((attribute) => attribute.id));\n const readOnlyRuleCount = (rules: ViewFilterRule[]) =>\n rules.filter((rule) => !editableIds.has(rule.attributeId)).length;\n // Prefer a branch whose properties the form can choose. A read-only rule\n // (such as Created before a date) cannot be assumed to match a new row.\n const alternatives = branches(filter).sort((left, right) => readOnlyRuleCount(left) - readOnlyRuleCount(right));\n for (const rules of alternatives) {\n const result = { ...empty };\n let matches = true;\n for (const attribute of editable) {\n const fieldRules = rules.filter((rule) => rule.attributeId === attribute.id);\n if (fieldRules.length === 0) continue;\n const candidates = attribute.id === columnAttributeId ? [columnId] : candidateValues(attribute, fieldRules);\n const matching = candidates.find(\n (value) =>\n filterRowsByView(\n [{ id: \"draft\", title: \"\", attributes: { [attribute.id]: value } }],\n { conjunction: \"and\", rules: fieldRules },\n [attribute],\n ).length > 0,\n );\n if (matching === undefined) {\n matches = false;\n break;\n }\n result[attribute.id] = matching;\n }\n if (matches) return result;\n }\n return empty;\n};\n","import { useStore } from \"zustand\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createHostStoreRegistry, useHostStorage } from \"../../utils/host-storage\";\n\ninterface CreateDraft {\n values: Record<string, unknown>;\n attributeValues: Record<string, unknown>;\n}\n\ninterface CreateDraftState {\n draft: CreateDraft | null;\n setDraft: (update: (draft: CreateDraft | null) => CreateDraft | null) => void;\n clearDraft: () => void;\n}\n\n// One in-memory draft per host and view/filter survives renderer remounts and retains\n// File objects. Cancel and Escape suspend it; only X or successful creation clears it.\nconst draftStore = createHostStoreRegistry(() =>\n createStore<CreateDraftState>((set) => ({\n draft: null,\n setDraft: (update) =>\n set((state) => {\n const draft = update(state.draft);\n return draft === state.draft ? state : { draft };\n }),\n clearDraft: () => set({ draft: null }),\n })),\n);\n\nexport const useKanbanCreateDraft = (key: string) => useStore(draftStore(key, useHostStorage()));\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { useEffect, useId, 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 { useKanbanCreatePreference } from \"./kanban-create-preference.store\";\nimport { KanbanCreateSubmit } from \"./kanban-create-submit\";\nimport { CreateFieldControl } from \"./kanban-renderer-create-field\";\nimport { getCreateAttributeValues } from \"./kanban-renderer-create-values\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateField,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n} from \"./types\";\nimport { useKanbanCreateDraft } from \"./use-kanban-create-draft\";\n\ninterface KanbanRendererCreateDialogProps {\n open: boolean;\n columnId: string;\n columnAttributeId?: string;\n attributes: AttributeDescriptor[];\n config: KanbanRendererCreateRowConfig;\n draftKey?: string;\n filter?: ViewFilterGroup;\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\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, draftKey, filter, onClose, onSubmit } = props;\n const localKey = useId();\n const { draft, setDraft, clearDraft } = useKanbanCreateDraft(draftKey ?? localKey);\n const { openCreatedRow, setOpenCreatedRow } = useKanbanCreatePreference();\n const values = draft?.values ?? {};\n const attributeValues = draft?.attributeValues ?? {};\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState(\"\");\n const editableAttributes = editableCreateAttributes(attributes);\n\n // Reopening restores the board's draft, including markdown and attachments.\n // Cancel and Escape must never reset it: only X and successful submission do.\n useEffect(() => {\n if (!open) return;\n setDraft(\n (current) =>\n current ?? {\n values: initialFieldValues(config.fields),\n attributeValues: getCreateAttributeValues(attributes, columnAttributeId, columnId, filter),\n },\n );\n }, [attributes, columnAttributeId, columnId, config.fields, filter, open, setDraft]);\n\n useEffect(() => {\n if (open) setError(\"\");\n }, [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 setDraft((current) => {\n if (!current) return current;\n const kept = Object.entries(current.values).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current.values));\n if (added.length === 0 && kept.length === Object.keys(current.values).length) return current;\n return { ...current, values: { ...Object.fromEntries(added), ...Object.fromEntries(kept) } };\n });\n }, [config.fields, open, setDraft]);\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 = getCreateAttributeValues(editable, columnAttributeId, columnId, filter);\n const declared = new Set(editable.map((attribute) => attribute.id));\n setDraft((current) => {\n if (!current) return current;\n const kept = Object.entries(current.attributeValues).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current.attributeValues));\n const columnChanged = columnAttributeId && current.attributeValues[columnAttributeId] !== columnId;\n if (added.length === 0 && kept.length === Object.keys(current.attributeValues).length && !columnChanged)\n return current;\n return {\n ...current,\n attributeValues: {\n ...Object.fromEntries(added),\n ...Object.fromEntries(kept),\n ...(columnAttributeId ? { [columnAttributeId]: columnId } : {}),\n },\n };\n });\n }, [attributes, open, columnId, columnAttributeId, filter, setDraft]);\n\n const close = () => {\n if (!submitting) onClose();\n };\n\n const discard = () => {\n if (submitting) return;\n clearDraft();\n 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({\n columnId,\n columnAttributeId,\n values: declaredValues,\n attributeValues,\n files,\n openCreatedRow: config.labels.submitWithoutOpening ? openCreatedRow : true,\n });\n clearDraft();\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : config.labels.submitError);\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!draft) return null;\n\n return (\n <Dialog.Root\n open={open}\n size=\"lg\"\n variant=\"create\"\n scrollBehavior=\"inside\"\n closeOnInteractOutside={false}\n onOpenChange={(details) => !details.open && close()}\n >\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} onClick={discard} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n {config.fields.map((field) => (\n <CreateFieldControl\n key={field.id}\n field={field}\n removeLabel={config.labels.removeFile}\n value={values[field.id]}\n disabled={submitting}\n onChange={(value) =>\n setDraft((current) => current && { ...current, values: { ...current.values, [field.id]: value } })\n }\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 setDraft(\n (current) =>\n current && {\n ...current,\n attributeValues: { ...current.attributeValues, [attributeId]: value },\n },\n )\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 <KanbanCreateSubmit\n label={config.submitLabel}\n withoutOpeningLabel={config.labels.submitWithoutOpening}\n openCreatedRow={openCreatedRow}\n onChoose={setOpenCreatedRow}\n onSubmit={() => void submit()}\n disabled={!valid}\n submitting={submitting}\n />\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type { KanbanRendererMove, 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 { buildKanbanMove } from \"./kanban-move\";\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 onMove?: (move: KanbanRendererMove) => 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 onMove,\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(onMove || onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onMove || onAttributeChange || onReorder)\n ? (draggedId) =>\n runKanbanAction(\n \"Move row\",\n async () => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (onMove)\n return onMove(\n buildKanbanMove({\n rowId: draggedId,\n ...settings,\n sorts,\n targetColumnId: targetColumnKey,\n targetGroupKey: placement?.rowKey,\n beforeRowId: row.id,\n }),\n );\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 (onMove || onAttributeChange) && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) =>\n runKanbanAction(\n \"Move row\",\n async () => {\n const columnKey = parent?.columnKey ?? group.key;\n if (onMove) {\n const move = buildKanbanMove({\n rowId: draggedId,\n ...settings,\n sorts,\n targetColumnId: columnKey,\n targetGroupKey: parent ? group.key : undefined,\n });\n return onMove({ rowId: move.rowId, attributes: move.attributes });\n }\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:\n onMove || onAttributeChange\n ? (draggedId: string) =>\n runKanbanAction(\n \"Move row\",\n () =>\n onMove\n ? onMove({\n rowId: draggedId,\n attributes: buildKanbanMove({\n rowId: draggedId,\n ...settings,\n sorts,\n targetColumnId: column.key,\n }).attributes,\n })\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 { 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 type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport { buildKanbanMove } from \"./kanban-move\";\nimport type { KanbanRendererProps } from \"./kanban-renderer\";\nimport { runKanbanAction } from \"./kanban-renderer-action\";\nimport { applyBoardMoveItem, applyBoardMoveToGroup } from \"./kanban-renderer-board-move\";\nimport type { KanbanRendererRow, KanbanRendererSettings } from \"./types\";\nexport const kanbanMoveHandlers = <TRow extends KanbanRendererRow>(\n input: Pick<KanbanRendererProps<TRow>, \"onMove\" | \"onActionError\" | \"onAttributeChange\" | \"onReorder\"> & {\n settings: KanbanRendererSettings;\n sorts: ViewSort[];\n },\n) => {\n const { settings, sorts, onMove, onActionError, onAttributeChange, onReorder } = input;\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 onMove\n ? onMove(\n buildKanbanMove({\n rowId,\n ...settings,\n sorts,\n targetColumnId,\n targetGroupKey: context?.targetGroupKey,\n beforeRowId: context?.beforeItemId,\n }),\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 onMove\n ? onMove(\n buildKanbanMove({\n rowId,\n rowGrouping: settings.rowGrouping,\n sorts,\n targetGroupKey,\n beforeRowId: context?.beforeItemId,\n }),\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 { handleBoardMoveItem, handleBoardMoveToGroup };\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 { KanbanRendererMove, 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 } from \"./kanban-renderer-action\";\nimport type { KanbanRendererBoardColumnAction } from \"./kanban-renderer-board\";\nimport { buildKanbanBoardColumns, narrowKanbanRows } from \"./kanban-renderer-board-columns\";\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 { kanbanMoveHandlers } from \"./kanban-renderer-move-handlers\";\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 onMove?: (move: KanbanRendererMove) => Promise<void> | void;\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 onMove,\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 activeViewId = useKanbanRendererStore(storageKey, (state) => state.activeViewId, 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 =\n settings.viewMode === \"list\"\n ? buildKanbanRendererListItems({\n settings,\n sorts,\n search: deferredSearch,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onActionError,\n onAttributeChange,\n onReorder,\n onMove,\n getRowContextMenuActions,\n })\n : [];\n\n const boardColumns =\n settings.viewMode === \"board\"\n ? 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\n const { handleBoardMoveItem, handleBoardMoveToGroup } = kanbanMoveHandlers({\n settings,\n sorts,\n onMove,\n onActionError,\n onAttributeChange,\n onReorder,\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 draftKey={JSON.stringify([storageKey, activeViewId, filter])}\n filter={filter}\n onClose={() => setCreateColumnId(null)}\n onSubmit={onCreateRow}\n />\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}