@pstdio/ui 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/chat-ui.js +1618 -1102
  2. package/dist/chat-ui.js.map +1 -1
  3. package/dist/{checkbox-D5AzFRlb.js → checkbox-B2zYVemL.js} +28 -28
  4. package/dist/checkbox-B2zYVemL.js.map +1 -0
  5. package/dist/components/chat-ui/components/chat-input-actions.d.ts +1 -0
  6. package/dist/components/chat-ui/components/chat-input.d.ts +8 -2
  7. package/dist/components/chat-ui/components/chat-panel.d.ts +11 -5
  8. package/dist/components/chat-ui/components/composer-constants.d.ts +1 -0
  9. package/dist/components/chat-ui/components/conversation-browse.d.ts +22 -0
  10. package/dist/components/chat-ui/components/message-types.d.ts +14 -0
  11. package/dist/components/chat-ui/components/queued-follow-up-list-state.d.ts +4 -0
  12. package/dist/components/chat-ui/components/queued-follow-up-list.d.ts +11 -0
  13. package/dist/components/chat-ui/components/timeline.d.ts +5 -0
  14. package/dist/components/chat-ui/components/working-indicator.d.ts +9 -0
  15. package/dist/components/chat-ui/components/workspace-hub.d.ts +8 -1
  16. package/dist/components/chat-ui/index.d.ts +4 -2
  17. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -2
  18. package/dist/components/chat-ui/tool-rendering/question-prompt.d.ts +9 -0
  19. package/dist/components/data-table/build-columns.d.ts +13 -2
  20. package/dist/components/data-table/categorical-color-cell.d.ts +8 -0
  21. package/dist/components/data-table/color-cell-style.d.ts +13 -0
  22. package/dist/components/data-table/color-scale-cell.d.ts +7 -0
  23. package/dist/components/data-table/data-table-column-menu.d.ts +12 -0
  24. package/dist/components/data-table/data-table-header.d.ts +18 -0
  25. package/dist/components/data-table/data-table-stat-chart.d.ts +21 -0
  26. package/dist/components/data-table/data-table-state.d.ts +27 -0
  27. package/dist/components/data-table/data-table-stats-row.d.ts +11 -0
  28. package/dist/components/data-table/data-table-stats.d.ts +19 -0
  29. package/dist/components/data-table/data-table-table-parts.d.ts +21 -0
  30. package/dist/components/data-table/data-table.story-descriptions.d.ts +6 -0
  31. package/dist/components/data-table/data-table.story-fixtures.d.ts +6 -0
  32. package/dist/components/data-table/friendly-json-display.d.ts +31 -0
  33. package/dist/components/data-table/index.d.ts +3 -1
  34. package/dist/components/data-table/json-cell.d.ts +6 -0
  35. package/dist/components/data-table/pagination-footer.d.ts +4 -1
  36. package/dist/components/data-table/selection-toolbar.d.ts +3 -1
  37. package/dist/components/data-table/types.d.ts +72 -0
  38. package/dist/components/{data-renderer → kanban-renderer}/display-menu.d.ts +4 -4
  39. package/dist/components/{data-renderer → kanban-renderer}/filter-menu.d.ts +3 -3
  40. package/dist/components/kanban-renderer/index.d.ts +19 -0
  41. package/dist/components/kanban-renderer/kanban-renderer-attribute-badge.d.ts +7 -0
  42. package/dist/components/{data-renderer/data-renderer-board-column-header.d.ts → kanban-renderer/kanban-renderer-board-column-header.d.ts} +2 -2
  43. package/dist/components/{data-renderer/data-renderer-board-group-section.d.ts → kanban-renderer/kanban-renderer-board-group-section.d.ts} +2 -2
  44. package/dist/components/{data-renderer/data-renderer-board-move.d.ts → kanban-renderer/kanban-renderer-board-move.d.ts} +3 -3
  45. package/dist/components/{data-renderer/data-renderer-board.d.ts → kanban-renderer/kanban-renderer-board.d.ts} +15 -14
  46. package/dist/components/{data-renderer/data-renderer-card.d.ts → kanban-renderer/kanban-renderer-card.d.ts} +4 -3
  47. package/dist/components/{data-renderer/data-renderer-content.d.ts → kanban-renderer/kanban-renderer-content.d.ts} +8 -8
  48. package/dist/components/kanban-renderer/kanban-renderer-create-dialog.d.ts +12 -0
  49. package/dist/components/kanban-renderer/kanban-renderer-create-field.d.ts +10 -0
  50. package/dist/components/kanban-renderer/kanban-renderer-grouping.d.ts +23 -0
  51. package/dist/components/{data-renderer/data-renderer-helpers.d.ts → kanban-renderer/kanban-renderer-helpers.d.ts} +15 -15
  52. package/dist/components/kanban-renderer/kanban-renderer-list-items.d.ts +25 -0
  53. package/dist/components/kanban-renderer/kanban-renderer-list.d.ts +43 -0
  54. package/dist/components/{data-renderer/data-renderer-story-fixtures.d.ts → kanban-renderer/kanban-renderer-story-fixtures.d.ts} +3 -2
  55. package/dist/components/kanban-renderer/kanban-renderer-toolbar.d.ts +15 -0
  56. package/dist/components/kanban-renderer/kanban-renderer-view-bar.d.ts +14 -0
  57. package/dist/components/kanban-renderer/kanban-renderer-views.d.ts +12 -0
  58. package/dist/components/{data-renderer/data-renderer.d.ts → kanban-renderer/kanban-renderer.d.ts} +11 -8
  59. package/dist/components/{data-renderer → kanban-renderer}/types.d.ts +51 -8
  60. package/dist/components/kanban-renderer/use-kanban-renderer-store.d.ts +78 -0
  61. package/dist/components/layout/index.d.ts +1 -0
  62. package/dist/components/layout/panel-header.constants.d.ts +2 -0
  63. package/dist/components/layout/resizable-split-layout.d.ts +3 -2
  64. package/dist/components/layout/resizable-split-layout.geometry.d.ts +56 -0
  65. package/dist/components/layout/resizable-split-layout.handle.d.ts +6 -2
  66. package/dist/components/layout/resizable-split-layout.panels.d.ts +25 -0
  67. package/dist/components/list-row/list-row-actions.d.ts +1 -0
  68. package/dist/components/list-row/list-row-content.d.ts +7 -0
  69. package/dist/components/list-row/list-row.types.d.ts +4 -1
  70. package/dist/components/overlays/attached-menu.d.ts +6 -0
  71. package/dist/components/overlays/attachment-chip.d.ts +13 -0
  72. package/dist/components/overlays/index.d.ts +6 -2
  73. package/dist/components/overlays/resource-context-menu.d.ts +13 -1
  74. package/dist/components/param-editor/index.d.ts +2 -1
  75. package/dist/components/param-editor/inputs/selection-input.d.ts +6 -6
  76. package/dist/components/param-editor/inputs/selection-menu.d.ts +29 -0
  77. package/dist/components/param-editor/param-editor-horizontal.d.ts +1 -0
  78. package/dist/components/param-editor/param-editor-read-only-field.d.ts +9 -0
  79. package/dist/components/param-editor/param-editor-section.d.ts +1 -0
  80. package/dist/components/param-editor/param-editor.d.ts +1 -0
  81. package/dist/components/param-editor/param-editor.types.d.ts +35 -6
  82. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/ReferenceMenuPlugin.d.ts +2 -1
  83. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/hooks/useContextLookup.d.ts +2 -1
  84. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/ReferencePlugin.d.ts +2 -1
  85. package/dist/components/rich-text/prompt-input/prompt-input.d.ts +3 -2
  86. package/dist/components/rich-text/types.d.ts +1 -1
  87. package/dist/components/{sidebar/sidebar-footer.d.ts → sidenav/sidenav-footer.d.ts} +2 -2
  88. package/dist/components/{sidebar/sidebar-header.d.ts → sidenav/sidenav-header.d.ts} +2 -2
  89. package/dist/components/sidenav/sidenav.d.ts +2 -0
  90. package/dist/components/sidenav/sidenav.store.d.ts +49 -0
  91. package/dist/components/{sidebar/sidebar.types.d.ts → sidenav/sidenav.types.d.ts} +5 -5
  92. package/dist/components/tab-strip/tab-visibility-filter.d.ts +1 -0
  93. package/dist/components/terminal/terminal.d.ts +11 -0
  94. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +0 -1
  95. package/dist/components/tree-list/tree-list.d.ts +1 -1
  96. package/dist/components/tree-list/tree-list.types.d.ts +4 -0
  97. package/dist/data-table.js +1271 -0
  98. package/dist/data-table.js.map +1 -0
  99. package/dist/diff.js +2 -2
  100. package/dist/index.d.ts +3 -3
  101. package/dist/index.js +1885 -3360
  102. package/dist/index.js.map +1 -1
  103. package/dist/kanban-renderer-toolbar-B9ro-9z1.js +1318 -0
  104. package/dist/kanban-renderer-toolbar-B9ro-9z1.js.map +1 -0
  105. package/dist/kanban-renderer.js +1087 -0
  106. package/dist/kanban-renderer.js.map +1 -0
  107. package/dist/list-row-YRUxEcy3.js +808 -0
  108. package/dist/list-row-YRUxEcy3.js.map +1 -0
  109. package/dist/param-editor-CYZJbmKu.js +933 -0
  110. package/dist/param-editor-CYZJbmKu.js.map +1 -0
  111. package/dist/param-editor-read-only-field-DgtLqcFa.js +925 -0
  112. package/dist/param-editor-read-only-field-DgtLqcFa.js.map +1 -0
  113. package/dist/prism-BXb57lxL.js +125 -0
  114. package/dist/prism-BXb57lxL.js.map +1 -0
  115. package/dist/rich-message-DBf_5YlW.js.map +1 -1
  116. package/dist/style.css +1 -1
  117. package/dist/terminal.js +197 -177
  118. package/dist/terminal.js.map +1 -1
  119. package/dist/theme/primitives/sizes.d.ts +23 -0
  120. package/dist/theme/recipes/button.d.ts +6 -0
  121. package/dist/theme/recipes/tabs.d.ts +4 -4
  122. package/dist/theme/tokens/colors.d.ts +18 -24
  123. package/dist/{theme-CJBYBJaA.js → theme-CNhnbvcE.js} +208 -162
  124. package/dist/theme-CNhnbvcE.js.map +1 -0
  125. package/dist/theme.js +1 -1
  126. package/dist/tree-list-CZHLAURU.js +1033 -0
  127. package/dist/tree-list-CZHLAURU.js.map +1 -0
  128. package/package.json +10 -4
  129. package/dist/checkbox-D5AzFRlb.js.map +0 -1
  130. package/dist/components/data-renderer/card-interaction-guard.d.ts +0 -2
  131. package/dist/components/data-renderer/data-renderer-attribute-badge.d.ts +0 -7
  132. package/dist/components/data-renderer/data-renderer-grouping.d.ts +0 -23
  133. package/dist/components/data-renderer/data-renderer-list.d.ts +0 -39
  134. package/dist/components/data-renderer/data-renderer-toolbar.d.ts +0 -12
  135. package/dist/components/data-renderer/index.d.ts +0 -18
  136. package/dist/components/data-renderer/use-data-renderer-store.d.ts +0 -59
  137. package/dist/components/sidebar/sidebar.d.ts +0 -2
  138. package/dist/components/sidebar/sidebar.store.d.ts +0 -49
  139. package/dist/data-renderer.js +0 -1669
  140. package/dist/data-renderer.js.map +0 -1
  141. package/dist/list-row-mi3Hn-Um.js +0 -740
  142. package/dist/list-row-mi3Hn-Um.js.map +0 -1
  143. package/dist/theme-CJBYBJaA.js.map +0 -1
  144. package/dist/tree-list-CcuZMLS5.js +0 -930
  145. package/dist/tree-list-CcuZMLS5.js.map +0 -1
  146. package/dist/workspace-badge-Fuo-1zPj.js +0 -314
  147. package/dist/workspace-badge-Fuo-1zPj.js.map +0 -1
  148. /package/dist/components/{data-renderer/data-renderer-badge-helpers.d.ts → kanban-renderer/kanban-renderer-badge-helpers.d.ts} +0 -0
  149. /package/dist/components/{data-renderer/data-renderer-enum-helpers.d.ts → kanban-renderer/kanban-renderer-enum-helpers.d.ts} +0 -0
  150. /package/dist/components/{data-renderer → kanban-renderer}/use-resolved-attributes.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-renderer.js","sources":["../src/components/kanban-renderer/kanban-renderer-board-move.ts","../src/components/kanban-renderer/kanban-renderer-board-column-header.tsx","../src/components/kanban-renderer/kanban-renderer-attribute-badge.tsx","../src/components/kanban-renderer/kanban-renderer-card.tsx","../src/components/kanban-renderer/kanban-renderer-board-group-section.tsx","../src/components/kanban-renderer/kanban-renderer-board.tsx","../src/components/kanban-renderer/kanban-renderer-list.tsx","../src/components/kanban-renderer/kanban-renderer-content.tsx","../src/components/param-editor/param-editor-horizontal.tsx","../src/components/kanban-renderer/kanban-renderer-create-field.tsx","../src/components/kanban-renderer/kanban-renderer-create-dialog.tsx","../src/components/kanban-renderer/kanban-renderer-list-items.ts","../src/components/kanban-renderer/kanban-renderer.tsx"],"sourcesContent":["import type { KanbanRendererSettings } from \"./types\";\nimport { MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\ninterface ApplyBoardMoveItemInput {\n settings: Pick<KanbanRendererSettings, \"columnGrouping\" | \"ordering\" | \"rowGrouping\">;\n rowId: string;\n targetColumnId: string;\n targetGroupKey?: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\ninterface ApplyBoardMoveToGroupInput {\n settings: Pick<KanbanRendererSettings, \"ordering\" | \"rowGrouping\">;\n rowId: string;\n targetGroupKey: string;\n beforeItemId?: string;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n}\n\nexport const applyBoardMoveItem = async (input: ApplyBoardMoveItemInput) => {\n const { settings, rowId, targetColumnId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n await onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n }\n if (settings.rowGrouping !== NO_GROUPING && targetGroupKey && onAttributeChange) {\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n }\n if (settings.ordering.attributeId === MANUAL_ORDERING) {\n await onReorder?.(rowId, beforeItemId);\n }\n};\n\nexport const applyBoardMoveToGroup = async (input: ApplyBoardMoveToGroupInput) => {\n const { settings, rowId, targetGroupKey, beforeItemId, onAttributeChange, onReorder } = input;\n\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n await onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n if (settings.ordering.attributeId === MANUAL_ORDERING) {\n await onReorder?.(rowId, beforeItemId);\n }\n};\n","import { Badge, HStack, Icon, IconButton, Menu, Spacer, Text } from \"@chakra-ui/react\";\nimport { MoreHorizontal, Plus } from \"lucide-react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { getIconComponent } from \"@/components/primitives/icon-color-picker\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\n\ninterface ColumnHeaderProps {\n column: KanbanRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack minH=\"1.5rem\" gap=\"2xs\" alignItems=\"center\" colorPalette={column.color ?? \"gray\"}>\n <Icon\n data-testid=\"column-status-icon\"\n as={getIconComponent(column.icon)}\n boxSize=\"0.875rem\"\n color=\"colorPalette.solid\"\n flexShrink={0}\n />\n <Text textStyle=\"label/S/medium\">{column.label}</Text>\n\n <Badge variant=\"number\" size=\"xs\" colorPalette=\"gray\">\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Badge, Icon, Menu, Portal } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Square, SquareCheck } from \"lucide-react\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { getIconComponent } from \"@/components/primitives/icon-color-picker\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\ninterface KanbanRendererAttributeBadgeProps {\n badge: AttributeBadge;\n onChange?: (attributeId: string, value: unknown) => void;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\n\nconst getSelectedValues = (badge: AttributeBadge) => {\n if (Array.isArray(badge.value)) return badge.value;\n return badge.value ? [badge.value] : [];\n};\n\nconst toggleMultiValue = (values: string[], optionValue: string) =>\n values.includes(optionValue) ? values.filter((value) => value !== optionValue) : [...values, optionValue];\n\nconst badgeStyleProps = {\n bg: { _light: \"bg.muted\", _dark: \"bg.subtle\" },\n color: \"fg.muted\",\n _hover: { bg: { _light: \"bg.subtle\", _dark: \"bg.hover\" } },\n} as const;\n\nconst getBadgeIconColor = (badge: AttributeBadge) => (badge.color ? `${badge.color}.fg` : \"fg.muted\");\n\nconst selectionIcon = (input: { isMultiValue: boolean; isSelected: boolean }) => {\n if (input.isMultiValue) return input.isSelected ? <SquareCheck size={14} /> : <Square size={14} />;\n return input.isSelected ? <Check size={14} /> : null;\n};\n\nexport const KanbanRendererAttributeBadge = (props: KanbanRendererAttributeBadgeProps) => {\n const { badge, onChange } = props;\n const options = badge.options ?? [];\n const canEdit = Boolean(onChange && badge.isEditable && options.length > 0);\n const isMultiValue = Array.isArray(badge.value);\n const selectedValues = getSelectedValues(badge);\n const rowInteractionProps = {\n onClick: stopRowActivation,\n onPointerDown: stopRowActivation,\n onKeyDown: stopRowActivation,\n };\n\n const handleOptionChange = (optionValue: string) => {\n let nextValue: string | string[];\n if (isMultiValue) nextValue = toggleMultiValue(selectedValues, optionValue);\n else nextValue = selectedValues.includes(optionValue) ? \"\" : optionValue;\n onChange?.(badge.attributeId, nextValue);\n };\n\n const badgeContent = (\n <>\n {badge.icon ? <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={getBadgeIconColor(badge)} /> : null}\n {badge.label}\n {canEdit ? <Icon as={ChevronDown} boxSize=\"3\" color=\"fg.muted\" /> : null}\n </>\n );\n\n if (!canEdit) {\n return (\n <Badge variant=\"subtle\" gap=\"2xs\" textStyle=\"label/XS/medium\" {...badgeStyleProps}>\n {badgeContent}\n </Badge>\n );\n }\n\n return (\n <Menu.Root closeOnSelect={!isMultiValue}>\n <Menu.Trigger asChild>\n <Badge\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n variant=\"subtle\"\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n {...badgeStyleProps}\n onClick={stopRowActivation}\n onPointerDown={stopRowActivation}\n onKeyDown={stopRowActivation}\n >\n {badgeContent}\n </Badge>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n minW=\"180px\"\n p=\"0\"\n gap=\"0\"\n onClick={stopRowActivation}\n onPointerDown={stopRowActivation}\n onKeyDown={stopRowActivation}\n >\n {options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n role={isMultiValue ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={isSelected}\n variant=\"full-width\"\n id={option.value}\n label={option.label}\n icon={<Icon as={getIconComponent(option.icon)} boxSize=\"16px\" />}\n iconColor={`${option.color ?? \"gray\"}.500`}\n isSelected={isSelected}\n endContent={selectionIcon({ isMultiValue, isSelected })}\n onActivate={() => handleOptionChange(option.value)}\n {...rowInteractionProps}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, MouseEvent, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/primitives/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/primitives/workspace-badge\";\nimport { KanbanRendererAttributeBadge } from \"./kanban-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\nexport interface KanbanRendererCardProps {\n eyebrow?: string;\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const KanbanRendererCard = (props: KanbanRendererCardProps) => {\n const {\n eyebrow,\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onBadgeChange,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (event.defaultPrevented) return;\n if (!(event.target instanceof Node) || !event.currentTarget.contains(event.target)) return;\n onClick?.();\n };\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"compact\"\n borderRadius=\"compact\"\n borderWidth=\"1px\"\n borderColor={isSelected ? \"border.accent\" : \"border\"}\n width=\"100%\"\n background=\"bg\"\n transition=\"border-color 0.2s ease-in-out, background 0.2s ease-in-out\"\n _hover={{ borderColor: isSelected ? \"border.accent\" : \"border.accent-light\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick ? handleClick : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\n >\n {eyebrow || workspaceBadge ? (\n <HStack minW=\"0\" gap=\"2xs\">\n {eyebrow ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\" fontFamily=\"mono\" truncate>\n {eyebrow}\n </Text>\n ) : null}\n <HStack marginLeft=\"auto\">{workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}</HStack>\n </HStack>\n ) : null}\n\n <Text textStyle=\"paragraph/S/regular\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <KanbanRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={onBadgeChange} />\n ))}\n {customSlots}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { type DragEvent, useState } from \"react\";\n\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport type { KanbanRendererBoardGroup } from \"./kanban-renderer-board\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\n\ninterface GroupSectionProps {\n columnId: string;\n group: KanbanRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nexport const GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((value) => !value)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"number\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"xs\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <KanbanRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { ColumnHeader } from \"./kanban-renderer-board-column-header\";\nimport { GroupSection } from \"./kanban-renderer-board-group-section\";\nimport { KanbanRendererCard } from \"./kanban-renderer-card\";\n\ntype KanbanRendererCardProps = ComponentProps<typeof KanbanRendererCard>;\n\nexport interface KanbanRendererBoardItem {\n id: string;\n cardProps: Omit<KanbanRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface KanbanRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface KanbanRendererBoardGroup {\n key: string;\n label: string;\n items: KanbanRendererBoardItem[];\n}\n\nexport interface KanbanRendererBoardColumn {\n id: string;\n label: string;\n createLabel?: string;\n color?: string;\n icon?: string | null;\n items: KanbanRendererBoardItem[];\n groups?: KanbanRendererBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: KanbanRendererBoardColumnAction[];\n}\n\ninterface KanbanRendererBoardProps {\n columns: KanbanRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (\n itemId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => Promise<void> | void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const KanbanRendererBoard = (props: KanbanRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n size=\"xs\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"sm\", padding: \"comfortable\", 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\"\n borderRadius=\"sm\"\n background={activeColumn === column.id ? \"bg.active\" : \"bg.subtle\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n if (onMoveItem) {\n onMoveItem(itemId, column.id, { beforeItemId, targetGroupKey: group.key });\n return;\n }\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <KanbanRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n","import { Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { type ComponentType, type DragEvent, type ReactNode, useState } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport { KanbanRendererAttributeBadge } from \"./kanban-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-helpers\";\n\nexport interface KanbanRendererListItem {\n id: string;\n eyebrow?: string;\n title: string;\n isGroup?: boolean;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n statusColorPalette?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: KanbanRendererListItem[];\n onClick?: () => void;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: string) => void;\n}\n\nexport type KanbanRendererListExpandedState = Record<string, boolean>;\n\nexport interface KanbanRendererListProps {\n items: KanbanRendererListItem[];\n selectedItemId?: string | null;\n expandedGroups?: KanbanRendererListExpandedState;\n onItemClick?: (item: KanbanRendererListItem) => void;\n onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\ninterface FlattenedKanbanRendererListItem {\n id: string;\n item: KanbanRendererListItem;\n depth: number;\n isGroup: boolean;\n canExpand: boolean;\n}\n\nexport const getKanbanRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nexport const flattenKanbanRendererListItems = (\n items: KanbanRendererListItem[],\n expanded: KanbanRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedKanbanRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({\n id: item.id,\n item,\n depth,\n isGroup: item.isGroup === true,\n canExpand,\n });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenKanbanRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetIndicatorProps = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n\n return {\n _before: {\n content: '\"\"',\n position: \"absolute\",\n bg: \"border.accent\",\n left: \"0\",\n top: \"0\",\n width: isGroup ? \"3px\" : \"100%\",\n height: isGroup ? \"100%\" : \"2px\",\n },\n } as const;\n};\n\nconst getRowIsExpanded = (expandedState: KanbanRendererListExpandedState, rowId: string) => {\n return expandedState[rowId] !== false;\n};\n\nconst updateExpandedState = (expandedState: KanbanRendererListExpandedState, rowId: string, isExpanded: boolean) => {\n return { ...expandedState, [rowId]: isExpanded };\n};\n\nconst renderLabel = (item: KanbanRendererListItem, isGroup: boolean) => {\n if (isGroup) {\n return (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/medium\" minW=\"0\" truncate>\n {item.title}\n </Text>\n <Text textStyle=\"label/XS\" color=\"fg.muted\" flexShrink={0}>\n {item.countBadge}\n </Text>\n </HStack>\n );\n }\n\n return (\n <HStack gap=\"compact\" minW=\"0\" maxW=\"full\" flex=\"1\">\n {item.eyebrow ? (\n <Text data-testid=\"list-row-eyebrow\" flexShrink={0} textStyle=\"mono/XS\" color=\"fg.muted\" truncate>\n {item.eyebrow}\n </Text>\n ) : null}\n <Text textStyle=\"paragraph/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n </HStack>\n );\n};\n\nconst renderEndContent = (item: KanbanRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <KanbanRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={item.onBadgeChange} />\n ))}\n {item.customSlots}\n </Wrap>\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: KanbanRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item, item.isGroup === true),\n icon: item.statusIcon ? (\n <Icon\n data-testid={item.isGroup ? \"list-status-icon\" : \"row-status-icon\"}\n as={item.statusIcon}\n boxSize=\"1rem\"\n colorPalette={item.statusColorPalette ?? item.countColorPalette ?? \"gray\"}\n color={item.statusColor ?? (item.isGroup || item.statusColorPalette ? \"colorPalette.solid\" : \"fg.muted\")}\n />\n ) : undefined,\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n separatorBefore: action.separatorBefore,\n endContent: action.endContent,\n onAction: action.onClick,\n })),\n});\n\nexport const KanbanRendererList = (props: KanbanRendererListProps) => {\n const { items, selectedItemId = null, expandedGroups, onItemClick, onExpandedGroupChange } = props;\n const [localExpandedGroups, setLocalExpandedGroups] = useState<KanbanRendererListExpandedState>({});\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const expanded = expandedGroups ?? localExpandedGroups;\n const rows = flattenKanbanRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n onExpandedGroupChange?.(rowId, isExpanded);\n if (expandedGroups === undefined) {\n setLocalExpandedGroups((current) => updateExpandedState(current, rowId, isExpanded));\n }\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <KanbanRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface KanbanRendererListRowProps {\n row: FlattenedKanbanRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: KanbanRendererListItem) => void;\n}\n\nconst KanbanRendererListRow = (props: KanbanRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, isGroup, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n if (isGroup) return;\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n position=\"relative\"\n borderBottomWidth=\"1px\"\n borderBottomColor=\"border.subtle\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n draggable={item.draggable}\n transition=\"background 120ms ease\"\n {...getDropTargetIndicatorProps(isDropTarget, canExpand)}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n aria-label={isGroup ? undefined : item.title}\n variant={isGroup ? \"compact\" : \"collection\"}\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n showContextMenuTrigger={false}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { KanbanRendererBoard, type KanbanRendererBoardColumn } from \"./kanban-renderer-board\";\nimport { KanbanRendererList, type KanbanRendererListItem } from \"./kanban-renderer-list\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface KanbanRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface KanbanRendererContentProps {\n viewMode: KanbanRendererSettings[\"viewMode\"];\n boardColumns: KanbanRendererBoardColumn[];\n listItems: KanbanRendererListItem[];\n listExpandedGroups: Record<string, boolean>;\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => Promise<void> | void;\n onBoardMoveToGroup: (\n rowId: string,\n targetGroupKey: string,\n context?: { beforeItemId?: string },\n ) => Promise<void> | void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n onListExpandedGroupChange: (rowId: string, isExpanded: boolean) => void;\n listKey: string;\n}\n\nconst KanbanRendererEmptyState = (props: KanbanRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const KanbanRendererContent = (props: KanbanRendererContentProps) => {\n const {\n viewMode,\n boardColumns,\n listItems,\n listExpandedGroups,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n onListExpandedGroupChange,\n listKey,\n } = props;\n\n if (viewMode === \"board\") {\n return (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <KanbanRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : (\n <KanbanRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n )}\n </Box>\n );\n }\n\n if (listItems.length > 0) {\n return (\n <KanbanRendererList\n key={listKey}\n items={listItems}\n selectedItemId={selectedRowId}\n expandedGroups={listExpandedGroups}\n onExpandedGroupChange={onListExpandedGroupChange}\n />\n );\n }\n\n return <KanbanRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import { HStack, Stack, Text, VStack } from \"@chakra-ui/react\";\nimport { ColorInput } from \"./inputs/color-input\";\nimport { DateInput } from \"./inputs/date-input\";\nimport { HorizontalTextInput } from \"./inputs/horizontal-text-input\";\nimport { NumberInput } from \"./inputs/number-input\";\nimport { SelectionInput } from \"./inputs/selection-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyField } from \"./param-editor-read-only-field\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\nexport interface ParamEditorHorizontalProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean; // This option doesn't do anything in horizontal mode\n variant?: \"default\" | \"small\";\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const ParamEditorHorizontal = (props: ParamEditorHorizontalProps) => {\n const { params = [], groups = [], defaultValues, onChange, readOnly, variant = \"default\" } = props;\n const isReadOnly = (param: Param) => readOnly || param.readOnly;\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n hideLabel\n hideSlider\n readOnly={isReadOnly(param)}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={onChange}\n tooltipPlacement=\"top\"\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <HorizontalTextInput\n hideLabel\n readOnly={isReadOnly(param)}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n tooltipPlacement=\"top\"\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n hideLabel\n readOnly={isReadOnly(param)}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={onChange}\n multiSelect={param.multiSelect}\n tooltipPlacement=\"top\"\n placeholder={param.placeholder}\n clearable={param.clearable}\n disabled={param.disabled}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n hideLabel\n readOnly={isReadOnly(param)}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n onChange={onChange}\n tooltipPlacement=\"top\"\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n hideLabel\n readOnly={isReadOnly(param)}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n tooltipPlacement=\"top\"\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => (\n <HStack key={param.id} gap=\"xs\" alignItems=\"center\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </HStack>\n );\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n case \"readOnly\":\n return <ParamEditorReadOnlyField key={param.id} param={param} />;\n default:\n return null;\n }\n };\n\n return (\n <Stack direction=\"row\" flex=\"1\" maxW=\"full\" gap={variant === \"small\" ? \"xs\" : \"sm\"} flexWrap=\"wrap\">\n {/* Render standalone params */}\n {params.map(renderParam)}\n\n {/* Render grouped params */}\n {groups.map((group) => (\n <VStack key={group.id} gap={variant === \"small\" ? \"2xs\" : \"xs\"} align=\"start\">\n <Text fontSize=\"sm\" fontWeight=\"medium\" color=\"fg.muted\">\n {group.title}\n </Text>\n <HStack gap={variant === \"small\" ? \"2xs\" : \"xs\"}>{group.params.map(renderParam)}</HStack>\n </VStack>\n ))}\n </Stack>\n );\n};\n","import { Box, Button, Icon, Input, Stack, Text, Textarea, Wrap } from \"@chakra-ui/react\";\nimport { Paperclip } from \"lucide-react\";\nimport { type ComponentType, useEffect, useRef, useState } from \"react\";\nimport { AttachmentChip } from \"@/components/overlays/attachment-chip\";\nimport { SelectionInput } from \"@/components/param-editor/inputs/selection-input\";\nimport type { MarkdownEditorProps } from \"@/components/rich-text\";\nimport { installPrismGlobal } from \"@/utils/prism\";\nimport type { KanbanRendererCreateField } from \"./types\";\n\n// The editor and its syntax highlighting are heavy and only needed once a\n// markdown field is actually on screen, so the host loads them on demand.\nconst MarkdownControl = (props: {\n disabled: boolean;\n field: KanbanRendererCreateField;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, onChange } = props;\n const [Editor, setEditor] = useState<ComponentType<MarkdownEditorProps> | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n await installPrismGlobal();\n const module = await import(\"@/components/rich-text\");\n if (!cancelled) setEditor(() => module.MarkdownEditor);\n })();\n return () => {\n cancelled = true;\n };\n }, []);\n\n // Reserve the editor's space without claiming textbox semantics — a disabled\n // stand-in would otherwise be the first textbox a caller (or test) finds.\n if (!Editor) return <Box minH=\"144px\" borderWidth=\"1px\" borderColor=\"border\" borderRadius=\"sm\" />;\n\n return (\n <Editor\n // Seed from the declared default so a pre-filled field is visible rather\n // than blank-but-submittable. Lexical reads this once, on mount.\n defaultState={typeof field.defaultValue === \"string\" ? field.defaultValue : \"\"}\n isEditable={!disabled}\n placeholder={field.placeholder}\n autoFocus\n onChange={(next) => onChange(next)}\n />\n );\n};\n\nconst FilesControl = (props: {\n disabled: boolean;\n field: KanbanRendererCreateField;\n removeLabel: string;\n value: unknown;\n onChange: (value: unknown) => void;\n}) => {\n const { disabled, field, removeLabel, value, onChange } = props;\n const input = useRef<HTMLInputElement>(null);\n const files = Array.isArray(value) ? (value as File[]) : [];\n\n return (\n <Stack gap=\"2xs\" align=\"start\">\n <input\n ref={input}\n hidden\n type=\"file\"\n accept={field.accept}\n multiple={field.multiple !== false}\n // Appending keeps earlier picks; replacing silently discards them. A\n // single-file field replaces instead, so it can never hold two.\n onChange={(event) => {\n const picked = Array.from(event.target.files ?? []);\n onChange(field.multiple === false ? picked.slice(0, 1) : [...files, ...picked]);\n event.target.value = \"\";\n }}\n />\n <Button size=\"xs\" variant=\"ghost\" disabled={disabled} onClick={() => input.current?.click()}>\n <Icon as={Paperclip} boxSize=\"4\" />\n {field.label}\n </Button>\n {files.length > 0 ? (\n <Wrap gap=\"2xs\">\n {files.map((file, index) => (\n <AttachmentChip\n key={`${file.name}-${index.toString()}`}\n file={file}\n disabled={disabled}\n removeLabel={removeLabel}\n onRemove={() => onChange(files.filter((_, itemIndex) => itemIndex !== index))}\n />\n ))}\n </Wrap>\n ) : null}\n </Stack>\n );\n};\n\ninterface CreateFieldControlProps {\n disabled: boolean;\n field: KanbanRendererCreateField;\n removeLabel: string;\n value: unknown;\n onChange: (value: unknown) => void;\n}\n\nconst FieldInput = (props: CreateFieldControlProps) => {\n const { disabled, field, value, onChange } = props;\n\n if (field.type === \"longtext\")\n return (\n <Textarea\n aria-label={field.label}\n minH=\"120px\"\n size=\"sm\"\n placeholder={field.placeholder}\n value={typeof value === \"string\" ? value : \"\"}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n\n // Declared selects share the ParamEditor's control, so they look and behave\n // exactly like the resource attributes rendered beside them.\n if (field.type === \"select\" || field.type === \"multi-select\")\n return (\n <SelectionInput\n hideLabel\n id={field.id}\n name={field.label}\n description={field.description ?? \"\"}\n defaultValue={(value as string | string[]) ?? (field.type === \"multi-select\" ? [] : \"\")}\n options={(field.options ?? []).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon ?? undefined,\n color: option.color,\n }))}\n multiSelect={field.type === \"multi-select\"}\n placeholder={field.placeholder ?? field.label}\n clearable={!field.required}\n readOnly={disabled}\n onChange={(_, next) => onChange(next)}\n />\n );\n\n if (field.type === \"boolean\")\n return (\n <Button size=\"sm\" variant=\"outline\" disabled={disabled} onClick={() => onChange(value !== true)}>\n {field.label}\n </Button>\n );\n\n return (\n <Input\n aria-label={field.label}\n size=\"sm\"\n type={field.type === \"number\" ? \"number\" : \"text\"}\n placeholder={field.placeholder}\n value={typeof value === \"string\" || typeof value === \"number\" ? value : \"\"}\n disabled={disabled}\n onChange={(event) =>\n onChange(field.type === \"number\" && event.target.value ? Number(event.target.value) : event.target.value)\n }\n />\n );\n};\n\nexport const CreateFieldControl = (props: CreateFieldControlProps) => {\n const { disabled, field, removeLabel, value, onChange } = props;\n\n // Files and markdown carry their own trigger label / placeholder, so the\n // stacked label above them would just repeat it.\n if (field.type === \"files\")\n return (\n <FilesControl disabled={disabled} field={field} removeLabel={removeLabel} value={value} onChange={onChange} />\n );\n\n if (field.type === \"markdown\") return <MarkdownControl disabled={disabled} field={field} onChange={onChange} />;\n\n return (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">{`${field.label}${field.required ? \" *\" : \"\"}`}</Text>\n {field.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\">\n {field.description}\n </Text>\n ) : null}\n <FieldInput {...props} />\n </Stack>\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { Param, ParamValueMap } from \"@/components/param-editor/param-editor.types\";\nimport { ParamEditorHorizontal } from \"@/components/param-editor/param-editor-horizontal\";\nimport { CreateFieldControl } from \"./kanban-renderer-create-field\";\nimport { getEnumOptions } from \"./kanban-renderer-helpers\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateField,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n} from \"./types\";\n\ninterface KanbanRendererCreateDialogProps {\n open: boolean;\n columnId: string;\n columnAttributeId?: string;\n attributes: AttributeDescriptor[];\n config: KanbanRendererCreateRowConfig;\n onClose: () => void;\n onSubmit: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;\n}\n\nconst emptyValue = (field: KanbanRendererCreateField) => {\n if (field.type === \"files\" || field.type === \"multi-select\") return [];\n if (field.type === \"boolean\") return false;\n return \"\";\n};\n\nconst initialFieldValues = (fields: KanbanRendererCreateField[]) =>\n Object.fromEntries(fields.map((field) => [field.id, field.defaultValue ?? emptyValue(field)]));\n\nconst isFilled = (field: KanbanRendererCreateField, value: unknown) => {\n if (!field.required) return true;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === \"string\") return value.trim().length > 0;\n return value !== undefined && value !== null;\n};\n\n// Every editable attribute is offered, whatever its kind — narrowing to enums\n// silently drops editable user/date/number attributes from the create form.\nconst editableCreateAttributes = (attributes: AttributeDescriptor[]) =>\n attributes.filter((attribute) => attribute.editable);\n\nconst initialAttributeValues = (\n attributes: AttributeDescriptor[],\n columnAttributeId: string | undefined,\n columnId: string,\n) =>\n Object.fromEntries(\n attributes.map((attribute) => [\n attribute.id,\n attribute.id === columnAttributeId ? columnId : attribute.type.kind === \"enum-multi\" ? [] : \"\",\n ]),\n );\n\n/**\n * Editable attributes render through the ParamEditor so a resource property and\n * a command param are the same control, not two that merely resemble each other.\n */\nconst attributeToParam = (attribute: AttributeDescriptor, locked: boolean): Param => {\n const base = { id: attribute.id, name: attribute.label, description: \"\" };\n\n if (attribute.type.kind === \"enum\" || attribute.type.kind === \"enum-multi\") {\n const multiSelect = attribute.type.kind === \"enum-multi\";\n return {\n ...base,\n type: \"selection\",\n defaultValue: multiSelect ? [] : \"\",\n multiSelect,\n // The trigger shows the value alone; the attribute name is the placeholder.\n placeholder: attribute.label,\n clearable: !locked,\n // The column already chose this value, and the create command reads it\n // from the column param — editing it here would be ignored.\n disabled: locked,\n options: getEnumOptions(attribute.type).map((option) => ({\n id: option.value,\n name: option.label,\n icon: option.icon ?? undefined,\n color: option.color,\n })),\n };\n }\n\n if (attribute.type.kind === \"number\") return { ...base, type: \"number\", defaultValue: 0 };\n return { ...base, type: \"text\", defaultValue: \"\", singleLine: true };\n};\n\nexport const KanbanRendererCreateDialog = (props: KanbanRendererCreateDialogProps) => {\n const { open, columnId, columnAttributeId, attributes, config, onClose, onSubmit } = props;\n const [values, setValues] = useState<Record<string, unknown>>({});\n const [attributeValues, setAttributeValues] = useState<Record<string, unknown>>({});\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState(\"\");\n // Uncontrolled editors (Lexical) read their seed once on mount, so a reset has\n // to remount the fields or the old text stays on screen over fresh state.\n const [resetToken, setResetToken] = useState(0);\n const initializedRef = useRef(false);\n const editableAttributes = editableCreateAttributes(attributes);\n\n // Opening is the only thing that clears the form. Attributes and fields can\n // arrive or change while it is open (they come from live sources), so this\n // runs once per open cycle — resetting on those would wipe what was typed.\n useEffect(() => {\n if (!open) {\n initializedRef.current = false;\n return;\n }\n if (initializedRef.current) return;\n initializedRef.current = true;\n\n setValues(initialFieldValues(config.fields));\n setAttributeValues(initialAttributeValues(editableCreateAttributes(attributes), columnAttributeId, columnId));\n setError(\"\");\n setResetToken((token) => token + 1);\n }, [attributes, columnAttributeId, columnId, config.fields, open]);\n\n // Fields can be added or withdrawn while the dialog is open. Seed the new\n // ones and drop the withdrawn, so what is submitted always matches what is\n // rendered — but leave everything the user has already filled in alone.\n useEffect(() => {\n if (!open) return;\n const seeded = initialFieldValues(config.fields);\n const declared = new Set(config.fields.map((field) => field.id));\n setValues((current) => {\n const kept = Object.entries(current).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current));\n if (added.length === 0 && kept.length === Object.keys(current).length) return current;\n return { ...Object.fromEntries(added), ...Object.fromEntries(kept) };\n });\n }, [config.fields, open]);\n\n // Same contract for attributes: seed the ones that appear after opening, drop\n // the ones withdrawn. A withdrawn entry left behind would still be submitted\n // even though its control is gone.\n useEffect(() => {\n if (!open) return;\n const editable = editableCreateAttributes(attributes);\n const seeded = initialAttributeValues(editable, columnAttributeId, columnId);\n const declared = new Set(editable.map((attribute) => attribute.id));\n setAttributeValues((current) => {\n const kept = Object.entries(current).filter(([id]) => declared.has(id));\n const added = Object.entries(seeded).filter(([id]) => !(id in current));\n if (added.length === 0 && kept.length === Object.keys(current).length) return current;\n return { ...Object.fromEntries(added), ...Object.fromEntries(kept) };\n });\n }, [attributes, open, columnId, columnAttributeId]);\n\n const close = () => {\n if (!submitting) onClose();\n };\n\n const valid = config.fields.every((field) => isFilled(field, values[field.id]));\n\n const submit = async () => {\n if (!valid || submitting) return;\n setSubmitting(true);\n setError(\"\");\n try {\n const fileFieldIds = new Set(config.fields.filter((field) => field.type === \"files\").map((field) => field.id));\n const files = [...fileFieldIds].flatMap((id) => (Array.isArray(values[id]) ? (values[id] as File[]) : []));\n const declaredValues = Object.fromEntries(Object.entries(values).filter(([id]) => !fileFieldIds.has(id)));\n\n await onSubmit({ columnId, columnAttributeId, values: declaredValues, attributeValues, files });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : config.labels.submitError);\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} size=\"lg\" scrollBehavior=\"inside\" onOpenChange={(details) => !details.open && close()}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content maxH=\"calc(100% - 48px)\">\n <Dialog.Header>\n <Text textStyle=\"heading/M/semibold\">{config.title}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n {config.fields.map((field) => (\n <CreateFieldControl\n key={`${field.id}:${resetToken.toString()}`}\n field={field}\n removeLabel={config.labels.removeFile}\n value={values[field.id]}\n disabled={submitting}\n onChange={(value) => setValues((current) => ({ ...current, [field.id]: value }))}\n />\n ))}\n {editableAttributes.length > 0 ? (\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/S/medium\">{config.labels.properties}</Text>\n <ParamEditorHorizontal\n variant=\"small\"\n params={editableAttributes.map((attribute) =>\n attributeToParam(attribute, attribute.id === columnAttributeId),\n )}\n defaultValues={attributeValues as ParamValueMap}\n readOnly={submitting}\n onChange={(attributeId, value) =>\n setAttributeValues((current) => ({ ...current, [attributeId]: value }))\n }\n />\n </Stack>\n ) : null}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Body>\n <Dialog.Footer justifyContent=\"end\">\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n {config.labels.cancel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!valid} loading={submitting} onClick={() => void submit()}>\n {config.submitLabel}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { getIconComponent } from \"@/components/primitives/icon-color-picker\";\nimport { type KanbanRendererColumnGroup, orderRows } from \"./kanban-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveListDropTargetColumnKey,\n} from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererListItem } from \"./kanban-renderer-list\";\nimport type { AttributeDescriptor, KanbanRendererRow, KanbanRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\ninterface BuildKanbanRendererListItemsInput<TRow extends KanbanRendererRow> {\n settings: KanbanRendererSettings;\n visibleRows: TRow[];\n grouped: KanbanRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nexport const buildKanbanRendererListItems = <TRow extends KanbanRendererRow>(\n input: BuildKanbanRendererListItemsInput<TRow>,\n) => {\n const {\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const listDisplayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const getStatusPresentation = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n const option = descriptor ? findEnumOption(descriptor.type, key) : undefined;\n return {\n statusColorPalette: option?.color,\n statusIcon: getIconComponent(option?.icon),\n };\n };\n const getRowStatusPresentation = (row: TRow) => {\n const status = row.attributes.status;\n if (typeof status !== \"string\") return {};\n return getStatusPresentation(\"status\", status);\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): KanbanRendererListItem => {\n const shorthand = typeof row.attributes.id === \"string\" ? row.attributes.id : undefined;\n\n return {\n id: row.id,\n eyebrow: shorthand && shorthand !== row.title ? shorthand : undefined,\n title: row.title,\n ...getRowStatusPresentation(row),\n badges: collectDisplayBadges(row, attributes, listDisplayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, listDisplayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n };\n };\n\n const toGroupListItem = (\n group: { key: string; label: string; rows: KanbanRendererRow[] },\n parent?: { columnKey: string },\n ): KanbanRendererListItem => {\n const groupingAttributeId = parent ? settings.rowGrouping : settings.columnGrouping;\n return {\n id: parent ? `group::${parent.columnKey}::${group.key}` : `group::${group.key}`,\n title: group.label,\n isGroup: true,\n countBadge: group.rows.length,\n ...getStatusPresentation(groupingAttributeId, group.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? group.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, group.key);\n }\n }\n : undefined,\n children: orderRows(group.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? group.key,\n rowKey: parent ? group.key : undefined,\n }),\n ),\n };\n };\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) =>\n column.subgroups.length > 0\n ? {\n id: `group::${column.key}`,\n title: column.label,\n isGroup: true,\n countBadge: column.rows.length,\n ...getStatusPresentation(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((group) => toGroupListItem(group, { columnKey: column.key })),\n }\n : toGroupListItem(column),\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { type ReactNode, useState } from \"react\";\n\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport type {\n KanbanRendererBoardColumn,\n KanbanRendererBoardColumnAction,\n KanbanRendererBoardGroup,\n} from \"./kanban-renderer-board\";\nimport { applyBoardMoveItem, applyBoardMoveToGroup } from \"./kanban-renderer-board-move\";\nimport { KanbanRendererContent } from \"./kanban-renderer-content\";\nimport { KanbanRendererCreateDialog } from \"./kanban-renderer-create-dialog\";\nimport { filterRows, groupRows, orderRows } from \"./kanban-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n} from \"./kanban-renderer-helpers\";\nimport { buildKanbanRendererListItems } from \"./kanban-renderer-list-items\";\nimport { KanbanRendererToolbar } from \"./kanban-renderer-toolbar\";\nimport type {\n AttributeDescriptor,\n KanbanRendererCreateRowConfig,\n KanbanRendererCreateSubmission,\n KanbanRendererFilterState,\n KanbanRendererRow,\n KanbanRendererSavedView,\n KanbanRendererSettings,\n} from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\nimport { 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 /** 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 defaultSettings?: Partial<KanbanRendererSettings>;\n defaultFilters?: KanbanRendererFilterState;\n defaultViews?: KanbanRendererSavedView[];\n defaultActiveViewId?: string;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n /** Called when a row attribute changes through drag/drop, board movement, or inline controls. */\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;\n /** Called for manual row ordering when a dragged row is dropped before another row. */\n onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;\n createRow?: KanbanRendererCreateRowConfig;\n onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nconst rowEyebrow = (row: KanbanRendererRow) => {\n const shorthand = row.attributes.id;\n return typeof shorthand === \"string\" && shorthand ? shorthand : row.id;\n};\n\nexport const KanbanRenderer = <TRow extends KanbanRendererRow>(props: KanbanRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n defaultSettings,\n defaultFilters,\n defaultViews,\n defaultActiveViewId,\n onRowClick,\n onAttributeChange,\n onReorder,\n createRow,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const [createColumnId, setCreateColumnId] = useState<string | null>(null);\n const initialState = {\n settings: defaultSettings,\n filters: defaultFilters,\n views: defaultViews,\n activeViewId: defaultActiveViewId,\n };\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n const expandedGroups = useKanbanRendererStore(storageKey, (state) => state.expandedGroups, initialState);\n const setExpandedGroup = useKanbanRendererStore(storageKey, (state) => state.setExpandedGroup, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildKanbanRendererListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const cardDisplayProperties = settings.displayProperties.filter((property) => property !== \"id\");\n const toBoardItems = (boardRows: KanbanRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n eyebrow: settings.displayProperties.includes(\"id\") ? rowEyebrow(row) : undefined,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, cardDisplayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, cardDisplayProperties),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: KanbanRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Column color follows the enum option when the contribution does not\n // provide one, while row display badges stay visually neutral.\n const enumOption = columnGroupingDescriptor ? findEnumOption(columnGroupingDescriptor.type, column.key) : undefined;\n\n const groups: KanbanRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumOption?.color,\n icon: enumOption?.icon ?? \"circle\",\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies KanbanRendererBoardColumn;\n });\n\n const handleBoardMoveItem = async (\n rowId: string,\n targetColumnId: string,\n context?: { beforeItemId?: string; targetGroupKey?: string },\n ) => {\n await applyBoardMoveItem({\n settings,\n rowId,\n targetColumnId,\n targetGroupKey: context?.targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n });\n };\n\n const handleBoardMoveToGroup = async (rowId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => {\n await applyBoardMoveToGroup({\n settings,\n rowId,\n targetGroupKey,\n beforeItemId: context?.beforeItemId,\n onAttributeChange,\n onReorder,\n });\n };\n\n return (\n <Stack data-testid=\"kanban-renderer\" height=\"100%\" minH=\"0\" gap=\"0\" background=\"bg\" overflow=\"hidden\">\n {hideToolbar ? null : (\n <KanbanRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n defaultViews={defaultViews}\n defaultActiveViewId={defaultActiveViewId}\n leading={toolbarLeading}\n />\n )}\n\n <KanbanRendererContent\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n listExpandedGroups={expandedGroups}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={createRow && onCreateRow ? setCreateColumnId : undefined}\n onColumnAction={onColumnAction}\n onListExpandedGroupChange={setExpandedGroup}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n {createRow && onCreateRow && createColumnId ? (\n <KanbanRendererCreateDialog\n open\n columnId={createColumnId}\n columnAttributeId={settings.columnGrouping === NO_GROUPING ? undefined : settings.columnGrouping}\n attributes={attributes}\n config={createRow}\n onClose={() => setCreateColumnId(null)}\n onSubmit={onCreateRow}\n />\n ) : null}\n </Stack>\n );\n};\n"],"names":["applyBoardMoveItem","input","settings","rowId","targetColumnId","targetGroupKey","beforeItemId","onAttributeChange","onReorder","columnGrouping","NO_GROUPING","rowGrouping","ordering","attributeId","MANUAL_ORDERING","applyBoardMoveToGroup","ColumnHeader","props","$","_c","column","onCreateStart","onColumnAction","t0","color","t1","icon","getIconComponent","t2","jsx","Icon","t3","label","Text","t4","items","length","Badge","t5","Symbol","for","Spacer","t6","canCreate","createLabel","id","Tooltip","IconButton","Plus","t7","actions","jsxs","Menu","MoreHorizontal","map","action","ListRow","t8","HStack","stopRowActivation","event","stopPropagation","getSelectedValues","badge","Array","isArray","value","toggleMultiValue","values","optionValue","includes","filter","badgeStyleProps","bg","_light","_dark","_hover","getBadgeIconColor","selectionIcon","isMultiValue","isSelected","SquareCheck","Square","Check","KanbanRendererAttributeBadge","onChange","T0","T1","T2","T3","t9","bb0","options","canEdit","Boolean","isEditable","selectedValues","t10","onClick","onPointerDown","onKeyDown","rowInteractionProps","handleOptionChange","nextValue","t11","t12","ChevronDown","t13","Fragment","badgeContent","t14","Root","Portal","Positioner","Content","option","KanbanRendererCard","eyebrow","title","badges","customSlots","workspaceBadge","draggable","onBadgeChange","onDragStart","onDragEnd","undefined","hasBadges","cursor","defaultPrevented","target","Node","currentTarget","contains","handleClick","borderColor","WorkspaceBadge","Wrap","Stack","GroupSection","columnId","group","selectedItemId","canDragIn","canDragOut","isDropTarget","onGroupDragOver","onGroupDragLeave","onGroupDrop","expanded","setExpanded","useState","_temp","Box","ChevronRight","item","ResourceContextMenu","contextMenuActions","_temp2","event_0","preventDefault","itemId","dataTransfer","getData","cardProps","key","dropEffect","KanbanRendererBoard","columns","onMoveItem","onMoveToGroup","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","handleDragEnd","handleDragOver","event_1","relatedTarget","handleDragLeave","columnId_0","event_2","itemId_0","handleDrop","display","alignItems","gap","padding","minH","ScrollArea","margin","spaceY","groups","groupId","event_3","event_4","event_5","itemId_1","event_6","event_7","itemId_2","setData","effectAllowed","flattenKanbanRendererListItems","depth","rows","canExpand","children","push","isGroup","getRowIsExpanded","getDropTargetIndicatorProps","_before","content","position","left","top","width","height","expandedState","updateExpandedState","isExpanded","renderLabel","countBadge","renderEndContent","buildListRowItem","hasChildren","statusIcon","statusColorPalette","countColorPalette","statusColor","endContent","isContainer","contextMenuItems","disabled","isDisabled","separatorBefore","onAction","KanbanRendererList","expandedGroups","onItemClick","onExpandedGroupChange","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","current","handleExpandedChange","row","KanbanRendererListRow","onDraggedItemChange","onDropTargetChange","onExpandedChange","canDropHere","onDropRow","rowItem","toggleExpanded","handleActivate","draggedId","t15","t16","KanbanRendererEmptyState","emptyState","description","EmptyState","KanbanRendererContent","viewMode","boardColumns","listItems","listExpandedGroups","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","onListExpandedGroupChange","listKey","resolveDefaultValue","defaultValues","paramId","fallback","ParamEditorHorizontal","params","readOnly","variant","param","isReadOnly","param_0","NumberInput","name","defaultValue","min","max","step","renderNumberParam","param_1","HorizontalTextInput","renderTextParam","param_2","SelectionInput","multiSelect","placeholder","clearable","renderSelectionParam","param_3","DateInput","renderDateParam","param_4","ColorInput","renderColorParam","renderPropertyParam","param_6","type","ParamEditorReadOnlyField","renderParam","VStack","param_5","ParamEditorLabel","ParamEditorReadOnlyValue","MarkdownControl","field","Editor","setEditor","useEffect","cancelled","installPrismGlobal","module","MarkdownEditor","next","FilesControl","removeLabel","useRef","files","multiple","picked","from","slice","accept","click","Paperclip","Button","file","index","AttachmentChip","_","itemIndex","toString","FieldInput","Textarea","required","Number","Input","CreateFieldControl","emptyValue","initialFieldValues","fields","Object","fromEntries","isFilled","trim","editableCreateAttributes","attributes","attribute","editable","initialAttributeValues","columnAttributeId","kind","attributeToParam","locked","base","getEnumOptions","singleLine","KanbanRendererCreateDialog","open","config","onClose","onSubmit","setValues","attributeValues","setAttributeValues","submitting","setSubmitting","error","setError","resetToken","setResetToken","initializedRef","editableAttributes","token","seeded","declared","Set","kept","entries","has","added","keys","close","valid","every","submit","fileFieldIds","flatMap","declaredValues","caught","Error","message","labels","submitError","Dialog","details","CloseButton","removeFile","properties","cancel","submitLabel","buildKanbanRendererListItems","visibleRows","grouped","onRowClick","getRowContextMenuActions","supportsManualReorder","listDisplayProperties","displayProperties","property","getStatusPresentation","descriptor","findAttribute","findEnumOption","getRowStatusPresentation","status","toListItem","placement","shorthand","collectDisplayBadges","collectDisplayCustomSlots","targetColumnKey","resolveListDropTargetColumnKey","rowKey","toGroupListItem","parent","groupingAttributeId","columnKey","orderRows","subgroups","rowEyebrow","KanbanRenderer","storageKey","rawAttributes","defaultSettings","defaultFilters","defaultViews","defaultActiveViewId","createRow","getBoardColumnConfig","hideToolbar","toolbarLeading","useResolvedAttributes","createColumnId","setCreateColumnId","filters","views","activeViewId","initialState","useKanbanRendererStore","_temp3","setExpandedGroup","_temp4","filterRows","knownColumnKeys","resolveKnownColumnKeys","groupRows","cardDisplayProperties","_temp5","toBoardItems","boardRows","columnGroupingDescriptor","columnConfig","orderedRows","enumOption","subgroup","context","handleBoardMoveItem","rowId_0","context_0","handleBoardMoveToGroup","KanbanRendererToolbar","state","state_0","state_1","state_2"],"mappings":"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"}