@pstdio/ui 0.43.0 → 0.43.1-nightly.20261013030813
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/{MermaidComponent-X7N-8w2S.js → MermaidComponent-CJCip-GB.js} +3 -3
- package/dist/{MermaidComponent-X7N-8w2S.js.map → MermaidComponent-CJCip-GB.js.map} +1 -1
- package/dist/chat-ui.d.ts +1 -1
- package/dist/chat-ui.js +621 -640
- package/dist/chat-ui.js.map +1 -1
- package/dist/{collection-view-grouping-DnuJ1U4R.js → collection-view-grouping-Bm7Hlt5w.js} +2 -2
- package/dist/{collection-view-grouping-DnuJ1U4R.js.map → collection-view-grouping-Bm7Hlt5w.js.map} +1 -1
- package/dist/{collection-view-search-D_7Qvz7p.js → collection-view-search-BqYMZQ4q.js} +166 -156
- package/dist/collection-view-search-BqYMZQ4q.js.map +1 -0
- package/dist/collection-view.d.ts +3 -90
- package/dist/collection-view.js +2 -2
- package/dist/{data-table-stats-row-C8CtvdDt.js → data-table-stats-row-RwLXF9EW.js} +2 -2
- package/dist/{data-table-stats-row-C8CtvdDt.js.map → data-table-stats-row-RwLXF9EW.js.map} +1 -1
- package/dist/data-table.d.ts +1 -0
- package/dist/data-table.js +8 -8
- package/dist/{diff-drawer-BGQhxyOh.js → diff-drawer-BMl0zobj.js} +2 -2
- package/dist/{diff-drawer-BGQhxyOh.js.map → diff-drawer-BMl0zobj.js.map} +1 -1
- package/dist/{diff-viewer-DYcswG6O.js → diff-viewer-BD2PQ4SS.js} +5 -5
- package/dist/{diff-viewer-DYcswG6O.js.map → diff-viewer-BD2PQ4SS.js.map} +1 -1
- package/dist/diff.js +2 -2
- package/dist/{display-sort-control-n3L5WvkJ.js → display-sort-control-BSFhWHgn.js} +194 -183
- package/dist/display-sort-control-BSFhWHgn.js.map +1 -0
- package/dist/{edit-mode-data-table-BclZ-pWe.js → edit-mode-data-table-TdIRPVU1.js} +8 -8
- package/dist/{edit-mode-data-table-BclZ-pWe.js.map → edit-mode-data-table-TdIRPVU1.js.map} +1 -1
- package/dist/{index-5Lw7YMKy.d.ts → index-Bc2BsdD1.d.ts} +6 -0
- package/dist/index-r6SFPkUI.d.ts +91 -0
- package/dist/index.js +6 -6
- package/dist/kanban-renderer.js +8 -8
- package/dist/{list-row-CmFG_jCC.js → list-row-DCHZXCVH.js} +2 -2
- package/dist/{list-row-CmFG_jCC.js.map → list-row-DCHZXCVH.js.map} +1 -1
- package/dist/{markdown-editor-CN4qOKky.js → markdown-editor-6jAy_E3r.js} +6 -6
- package/dist/{markdown-editor-CN4qOKky.js.map → markdown-editor-6jAy_E3r.js.map} +1 -1
- package/dist/{mermaid-renderer-DybQ_2Cp.js → mermaid-renderer-BtW_13Sz.js} +2 -2
- package/dist/{mermaid-renderer-DybQ_2Cp.js.map → mermaid-renderer-BtW_13Sz.js.map} +1 -1
- package/dist/mermaid.js +1 -1
- package/dist/{number-input-CyrMrDxB.js → number-input-QDqWYzTR.js} +2 -2
- package/dist/{number-input-CyrMrDxB.js.map → number-input-QDqWYzTR.js.map} +1 -1
- package/dist/{param-editor-28dBRSV4.js → param-editor-f57ea8V9.js} +2 -2
- package/dist/{param-editor-28dBRSV4.js.map → param-editor-f57ea8V9.js.map} +1 -1
- package/dist/{param-editor-field-GxhFb86w.js → param-editor-field-CePT5hCj.js} +5 -5
- package/dist/{param-editor-field-GxhFb86w.js.map → param-editor-field-CePT5hCj.js.map} +1 -1
- package/dist/param-editor.js +3 -3
- package/dist/{prism-CnkSh-ZG.js → prism-EZSmZh-a.js} +2 -2
- package/dist/{prism-CnkSh-ZG.js.map → prism-EZSmZh-a.js.map} +1 -1
- package/dist/{rich-text-DOK4dDeb.js → rich-text-bKBLAco5.js} +384 -363
- package/dist/rich-text-bKBLAco5.js.map +1 -0
- package/dist/rich-text.d.ts +1 -1
- package/dist/rich-text.js +3 -3
- package/dist/{scroll-area-crJfiiuF.js → scroll-area-IeoRS73V.js} +3 -5
- package/dist/scroll-area-IeoRS73V.js.map +1 -0
- package/dist/terminal.js +1 -1
- package/dist/{theme-Bd_a7sU8.js → theme-bxwJIMKe.js} +22 -2
- package/dist/theme-bxwJIMKe.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/{tree-list-B_qqiIoM.js → tree-list-nFNO7MV4.js} +2 -2
- package/dist/{tree-list-B_qqiIoM.js.map → tree-list-nFNO7MV4.js.map} +1 -1
- package/dist/{workspace-badge-BfSkiGP_.js → workspace-badge-BgiTennO.js} +2 -2
- package/dist/{workspace-badge-BfSkiGP_.js.map → workspace-badge-BgiTennO.js.map} +1 -1
- package/package.json +2 -2
- package/dist/collection-view-search-D_7Qvz7p.js.map +0 -1
- package/dist/display-sort-control-n3L5WvkJ.js.map +0 -1
- package/dist/rich-text-DOK4dDeb.js.map +0 -1
- package/dist/scroll-area-crJfiiuF.js.map +0 -1
- package/dist/theme-Bd_a7sU8.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"display-sort-control-n3L5WvkJ.js","names":["Badge","Icon","Text","LucideIcon","lucideIcons","CollectionBadgeProps","label","icon","onClick","toPascalCase","value","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","resolveIcon","name","undefined","pascalName","candidate","component","Record","CollectionBadge","props","$","_c","t0","BadgeIcon","t1","t2","t3","content","t4","Symbol","for","display","gap","alignItems","minW","maxW","variant","bg","_light","_dark","color","textStyle","sharedProps","const","t5","event","stopPropagation","t6","_c","_Fragment","enumOptionLabel","findEnumOption","getEnumOptions","toTitleCase","AttributeDescriptor","AttributeType","EnumOption","summarizeMultiEnum","values","type","length","map","value","join","AttributeBadge","attributeId","attributeLabel","label","color","icon","options","isEditable","getAttributeBadgeColorPalette","_badge","renderEnumBadge","descriptor","kind","stringValue","editable","id","undefined","option","renderMultiEnumBadge","Array","isArray","filter","entry","summary","firstOption","ViewFilterGroup","createElement","ReactNode","getAttributeStringValues","getAttributeValue","filterRowsByView","emptyGroupKey","groupKey","CollectionBadge","AttributeBadge","renderEnumBadge","renderMultiEnumBadge","getEnumOptions","toTitleCase","AttributeDescriptor","CollectionBadgeItem","KanbanRendererRow","findAttribute","NO_GROUPING","getAttributeBadgeColorPalette","enumOptionLabel","findEnumOption","formatDateValue","value","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","String","formatStringValue","undefined","formatUserValue","isRenderableNode","isRecord","Record","Array","isArray","textValue","trim","isCollectionResource","NonNullable","type","id","normalizeCollectionBadgeItems","flatMap","item","label","icon","resource","renderBadgeListDisplay","descriptor","row","openResource","display","kind","items","attributes","itemsAttributeId","length","selectedId","selectedItem","find","orderedItems","filter","map","key","onClick","renderAttributeBadge","render","formatted","attributeId","color","collectDisplayBadges","displayProperties","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","values","Set","add","FilterCategoryView","selectionMode","options","buildFilterCategories","categories","filterable","declared","auto","declaredValues","option","undeclared","has","sort","a","b","localeCompare","numeric","MenuOption","buildGroupingOptions","groupable","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","columnKey","resolveKnownColumnKeys","structureRows","keys","empty","some","conjunction","candidates","title","rules","rule","Button","HStack","Icon","IconButton","Menu","Popover","Portal","Text","Check","ChevronDown","List","Settings2","SquareKanban","Fragment","ReactNode","useEffect","useRef","useState","Tooltip","MenuOption","resolveSubGroupingOptions","KanbanRendererSettings","DisplayMenuProps","settings","sortControl","groupingOptions","displayPropertyOptions","onViewModeChange","value","onColumnGroupingChange","onRowGroupingChange","onDisplayPropertyToggle","property","SectionLabel","props","$","_c","t0","children","DisplayMenuSelectProps","label","options","onSelect","DisplayMenuSelect","find","option","selectedLabel","hasNoneFirst","t1","Symbol","for","strategy","hideWhenDetached","t2","t3","t4","t5","t6","map","option_0","index","t7","t8","DisplayMenu","triggerRef","contentRef","open","setOpen","closeOnOutsidePointerDown","event","target","Node","current","contains","document","addEventListener","removeEventListener","placement","offset","mainAxis","getAnchorElement","details","viewMode","t9","t10","t11","t12","t13","t14","t15","rowGrouping","t16","columnGrouping","t17","t18","t19","t20","t21","t22","displayProperties","t23","active","includes","t24","t25","_c","Fragment","Tooltip","Button","Icon","SearchX","X","EmptyState","CollectionViewEmptyStateProps","search","onClearSearch","CollectionViewEmptyState","props","$","_c","t0","Symbol","for","t1","trim","t2","t3","t4","t5","_c","EmptyState","HStack","Stack","Text","ViewSort","AttributeDescriptor","fieldIcon","canSortField","findField","sortDirectionLabel","RuleSelect","DisplaySortControlProps","fields","sorts","onSortsChange","DisplaySortControl","props","$","_c","sort","t0","field","attributeId","undefined","t1","Symbol","for","t2","t3","value","label","t4","filter","map","_temp","t5","direction","choice","slice","t6","entry","id","icon","_c","Tooltip$1","getAttributeValue","findEnumOption","enumOptionLabel","findAttribute","getEnumOptions","getAttributeStringValues","findField","fieldIcon","NO_GROUPING","toTitleCase","RuleSelect","filterRowsByView","canSortField","groupKey","emptyGroupKey","Fragment$1","lucideIcons","toPascalCase","value","part","resolveIcon","name","pascalName","candidate","component","CollectionBadge","$","c","props","t0","icon","BadgeIcon","t1","Icon","t2","label","Text","t3","Fragment","content","t4","sharedProps","onClick","t5","event","t6","Badge","summarizeMultiEnum","values","type","renderEnumBadge","stringValue","editable","descriptor","option","renderMultiEnumBadge","entry","summary","firstOption","formatDateValue","date","formatNumberValue","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","isCollectionResource","normalizeCollectionBadgeItems","item","id","resource","renderBadgeListDisplay","items","row","selectedId","selectedItem","createElement","openResource","renderAttributeBadge","formatted","collectDisplayBadges","badges","displayProperties","attributes","badge","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","declared","auto","declaredValues","undeclared","a","b","buildGroupingOptions","options","buildDisplayPropertyOptions","resolveSubGroupingOptions","columnGrouping","resolveListDropTargetColumnKey","placement","resolveKnownColumnKeys","keys","empty","structureRows","filter","candidates","key","rule","SectionLabel","DisplayMenuSelect","selectedLabel","hasNoneFirst","HStack","ChevronDown","Menu","Button","index","option_0","Check","t7","t8","DisplayMenu","triggerRef","useRef","contentRef","open","setOpen","useState","closeOnOutsidePointerDown","target","useEffect","details","Popover","IconButton","Settings2","settings","onViewModeChange","List","t9","t10","t11","t12","SquareKanban","t13","t14","t15","onColumnGroupingChange","onRowGroupingChange","t16","groupingOptions","t17","t18","t19","t20","t21","t22","displayPropertyOptions","onDisplayPropertyToggle","t23","active","t24","Portal","t25","CollectionViewEmptyState","SearchX","search","X","onClearSearch","EmptyState$1","DisplaySortControl","sort","sorts","fields","onSortsChange","field","_temp","choice","Stack","sortDirectionLabel"],"sources":["../src/components/kanban-renderer/collection-badge.tsx","../src/components/kanban-renderer/kanban-renderer-badge-helpers.ts","../src/components/kanban-renderer/kanban-renderer-helpers.ts","../src/components/kanban-renderer/display-menu.tsx","../src/components/collection-view/collection-view-empty-state.tsx","../src/components/collection-view/display-sort-control.tsx"],"sourcesContent":["import { Badge, Icon, Text } from \"@chakra-ui/react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport * as lucideIcons from \"lucide-react\";\n\ninterface CollectionBadgeProps {\n label: string;\n icon?: string;\n onClick?: () => void;\n}\n\nconst toPascalCase = (value: string) =>\n value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(\"\");\n\nconst resolveIcon = (name: string | undefined) => {\n if (!name) return undefined;\n const pascalName = toPascalCase(name);\n for (const candidate of [name, pascalName, `${pascalName}Icon`]) {\n const component = (lucideIcons as Record<string, unknown>)[candidate];\n if (component && (typeof component === \"function\" || typeof component === \"object\")) {\n return component as LucideIcon;\n }\n }\n return undefined;\n};\n\nexport const CollectionBadge = (props: CollectionBadgeProps) => {\n const { label, icon, onClick } = props;\n const BadgeIcon = resolveIcon(icon);\n\n const content = (\n <>\n {BadgeIcon ? <Icon as={BadgeIcon} boxSize=\"3.5\" flexShrink={0} aria-hidden=\"true\" /> : null}\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.muted\" minW=\"0\" maxW=\"10rem\" truncate>\n {label}\n </Text>\n </>\n );\n\n const sharedProps = {\n display: \"inline-flex\",\n gap: \"2xs\",\n alignItems: \"center\",\n minW: \"0\",\n maxW: \"100%\",\n variant: \"subtle\",\n bg: { _light: \"bg.muted\", _dark: \"bg.subtle\" },\n color: \"fg.muted\",\n textStyle: \"label/XS/medium\",\n \"data-testid\": \"collection-badge\",\n } as const;\n\n if (onClick) {\n return (\n <Badge asChild {...sharedProps} cursor=\"pointer\">\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onClick();\n }}\n >\n {content}\n </button>\n </Badge>\n );\n }\n\n return (\n <Badge as=\"span\" {...sharedProps} cursor=\"default\">\n {content}\n </Badge>\n );\n};\n","import { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, EnumOption } from \"./types\";\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n attributeLabel?: string;\n label: string;\n color?: string;\n icon?: string | null;\n value?: string | string[];\n options?: EnumOption[];\n isEditable?: boolean;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nexport const renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n const editable = descriptor.editable === true;\n if (!stringValue) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: stringValue ?? undefined,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n ...(editable ? { value: stringValue, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n\nexport const renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n const summary = summarizeMultiEnum(values, type);\n const editable = descriptor.editable === true;\n if (!summary) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: values,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: summary,\n color: firstOption?.color,\n icon: firstOption?.icon,\n ...(editable ? { value: values, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n","import type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { createElement, type ReactNode } from \"react\";\nimport { getAttributeStringValues, getAttributeValue } from \"../collection-view/collection-view-fields\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { emptyGroupKey, groupKey } from \"../collection-view/collection-view-grouping\";\nimport { CollectionBadge } from \"./collection-badge\";\nimport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nimport { renderEnumBadge, renderMultiEnumBadge } from \"./kanban-renderer-badge-helpers\";\nimport { getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, CollectionBadgeItem, KanbanRendererRow } from \"./types\";\nimport { findAttribute, NO_GROUPING } from \"./types\";\n\nexport type { AttributeBadge } from \"./kanban-renderer-badge-helpers\";\nexport { getAttributeBadgeColorPalette } from \"./kanban-renderer-badge-helpers\";\nexport { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./kanban-renderer-enum-helpers\";\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst textValue = (value: unknown) => (typeof value === \"string\" && value.trim() ? value.trim() : undefined);\n\nconst isCollectionResource = (value: unknown): value is NonNullable<CollectionBadgeItem[\"resource\"]> =>\n isRecord(value) && typeof value.type === \"string\" && typeof value.id === \"string\";\n\nconst normalizeCollectionBadgeItems = (value: unknown): CollectionBadgeItem[] => {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((item) => {\n if (!isRecord(item)) return [];\n const id = textValue(item.id);\n if (!id) return [];\n const label = textValue(item.label) ?? id;\n const icon = textValue(item.icon);\n const resource = isCollectionResource(item.resource) ? item.resource : undefined;\n return [{ id, label, ...(icon ? { icon } : {}), ...(resource ? { resource } : {}) }];\n });\n};\n\nexport const renderBadgeListDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: KanbanRendererRow,\n openResource?: (resource: NonNullable<CollectionBadgeItem[\"resource\"]>) => void,\n): ReactNode => {\n if (descriptor.display?.kind !== \"badge-list\") return null;\n const items = normalizeCollectionBadgeItems(row.attributes[descriptor.display.itemsAttributeId]);\n if (items.length === 0) return null;\n\n const selectedId = typeof value === \"string\" ? value : undefined;\n const selectedItem = items.find((item) => item.id === selectedId) ?? items[0];\n if (!selectedItem) return null;\n\n const orderedItems = [selectedItem, ...items.filter((item) => item.id !== selectedItem.id)];\n return orderedItems.map((item) =>\n createElement(CollectionBadge, {\n key: item.id,\n label: item.label,\n icon: item.icon,\n onClick: item.resource && openResource ? () => openResource(item.resource!) : undefined,\n }),\n );\n};\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (\n descriptor: AttributeDescriptor,\n row: KanbanRendererRow,\n): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render || descriptor.display) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: KanbanRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n\n const value = getAttributeValue(row, descriptor);\n const slot = descriptor.render ? descriptor.render(value, row) : renderBadgeListDisplay(descriptor, value, row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: KanbanRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n selectionMode: \"multiple\";\n options: { value: string; label: string; color?: string; icon?: string | null }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: KanbanRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n selectionMode: \"multiple\",\n options: [\n ...declared.map((option) => ({\n value: option.value,\n label: option.label,\n color: option.color,\n icon: option.icon,\n })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, selectionMode: \"multiple\", options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\n/**\n * Source rows keep the unassigned column visible. Only rules on the grouping field\n * limit which columns the filter can still show.\n */\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filter?: ViewFilterGroup,\n structureRows: KanbanRendererRow[] = [],\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor || descriptor.type.kind !== \"enum\") return undefined;\n const keys = getEnumOptions(descriptor.type).map((option) => option.value);\n const empty = emptyGroupKey(descriptor);\n if (structureRows.some((row) => groupKey(row, descriptor) === empty)) keys.push(empty);\n if (filter?.conjunction !== \"and\") return keys;\n const candidates = keys.map((key) => ({\n id: key,\n title: key,\n attributes: key === empty ? {} : { [columnGrouping]: key },\n }));\n return filterRowsByView(\n candidates,\n { conjunction: \"and\", rules: filter.rules.filter((rule) => rule.attributeId === columnGrouping) },\n [descriptor],\n ).map((row) => row.id);\n};\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, List, Settings2, SquareKanban } from \"lucide-react\";\nimport { Fragment, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./kanban-renderer-helpers\";\nimport type { KanbanRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: KanbanRendererSettings;\n sortControl?: ReactNode;\n groupingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: KanbanRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text paddingX=\"xs\" paddingTop=\"xs\" paddingBottom=\"2xs\" textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nexport interface DisplayMenuSelectProps {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}\n\n/** A Display menu row: the setting's name on the left, its value and a menu on the right. */\nexport const DisplayMenuSelect = (props: DisplayMenuSelectProps) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Menu.Root positioning={{ strategy: \"fixed\", hideWhenDetached: true }}>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"ghost\" width=\"full\" justifyContent=\"flex-start\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{props.label}</Text>\n <HStack marginLeft=\"auto\" minW=\"0\" gap=\"2xs\" color=\"fg.muted\">\n <Text textStyle=\"label/S/regular\" truncate>\n {selectedLabel}\n </Text>\n </HStack>\n <ChevronDown size={12} />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <HStack width=\"full\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n {option.value === props.value ? <Icon as={Check} marginLeft=\"auto\" boxSize=\"0.875rem\" /> : null}\n </HStack>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (!open) return;\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-end\",\n offset: { mainAxis: 8 },\n getAnchorElement: () => triggerRef.current,\n }}\n onOpenChange={(details) => setOpen(details.open)}\n >\n <Tooltip content=\"Display\">\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"2xs\">\n <Icon as={Settings2} />\n </IconButton>\n </Popover.Trigger>\n </Tooltip>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"18.75rem\" padding=\"xs\" gap=\"1px\">\n <SectionLabel>DISPLAY</SectionLabel>\n <HStack borderRadius=\"sm\" bg=\"bg.subtle\" padding=\"2xs\" gap=\"2xs\">\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"list\"}\n onClick={() => onViewModeChange(\"list\")}\n >\n <List />\n List\n </Button>\n <Button\n flex=\"1\"\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={settings.viewMode === \"board\"}\n onClick={() => onViewModeChange(\"board\")}\n >\n <SquareKanban />\n Board\n </Button>\n </HStack>\n\n <DisplayMenuSelect\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n <DisplayMenuSelect\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n {props.sortControl}\n <SectionLabel>PROPERTIES</SectionLabel>\n <HStack paddingX=\"xs\" paddingBottom=\"xs\" flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const active = settings.displayProperties.includes(option.value);\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant=\"ghost\"\n aria-pressed={active}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Button, Icon } from \"@chakra-ui/react\";\nimport { SearchX, X } from \"lucide-react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\n\nexport interface CollectionViewEmptyStateProps {\n search: string;\n onClearSearch: () => void;\n}\n\n/** Search feedback offers a direct way back to the collection. */\nexport const CollectionViewEmptyState = (props: CollectionViewEmptyStateProps) => {\n const { search, onClearSearch } = props;\n return (\n <EmptyState\n h=\"full\"\n icon={<Icon as={SearchX} />}\n title={`No results for “${search.trim()}”`}\n description=\"Search looks at the titles and properties this view shows.\"\n >\n <Button size=\"2xs\" variant=\"outline\" onClick={onClearSearch}>\n <X /> Clear search\n </Button>\n </EmptyState>\n );\n};\n","import { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { fieldIcon } from \"./collection-view-field-icon\";\nimport { canSortField, findField } from \"./collection-view-fields\";\nimport { sortDirectionLabel } from \"./collection-view-labels\";\nimport { RuleSelect } from \"./rule-select\";\n\nexport interface DisplaySortControlProps {\n fields: AttributeDescriptor[];\n sorts: ViewSort[];\n onSortsChange: (sorts: ViewSort[]) => void;\n}\n\n/** Display settings and table headers edit the same single sort. */\nexport const DisplaySortControl = (props: DisplaySortControlProps) => {\n const { fields, sorts, onSortsChange } = props;\n const sort = sorts[0];\n const field = sort ? findField(fields, sort.attributeId) : undefined;\n return (\n <Stack data-testid=\"display-sort-control\" gap=\"1px\">\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Ordering\n </Text>\n <RuleSelect\n aria-label=\"Ordering\"\n width=\"9rem\"\n value={sort ? `field:${sort.attributeId}` : \"none\"}\n options={[\n { value: \"none\", label: \"None\" },\n ...fields\n .filter(canSortField)\n .map((entry) => ({ value: `field:${entry.id}`, label: entry.label, icon: fieldIcon(entry) })),\n ]}\n onSelect={(choice) =>\n onSortsChange(\n choice === \"none\" ? [] : [{ attributeId: choice.slice(6), direction: sort?.direction ?? \"asc\" }],\n )\n }\n />\n </HStack>\n {sort ? (\n <HStack paddingX=\"xs\" minH=\"7\" gap=\"xs\">\n <Text textStyle=\"label/S/regular\" flex=\"1\">\n Direction\n </Text>\n <RuleSelect\n aria-label=\"Sort direction\"\n width=\"9rem\"\n value={sort.direction}\n options={[\n { value: \"asc\", label: sortDirectionLabel(field, \"asc\") },\n { value: \"desc\", label: sortDirectionLabel(field, \"desc\") },\n ]}\n onSelect={(direction) => onSortsChange([{ ...sort, direction: direction as ViewSort[\"direction\"] }])}\n />\n </HStack>\n ) : null}\n </Stack>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rich-text-DOK4dDeb.js","names":["AwarenessCursorsCSS","$","_c","t0","Symbol","for","_c","Box","Flex","LexicalCollaboration","CollaborationPluginV2__EXPERIMENTAL","LexicalComposer","LexicalErrorBoundary","HorizontalRulePlugin","LinkPlugin","ListPlugin","RichTextPlugin","TabIndentationPlugin","Provider","useEffect","useRef","useState","WebsocketProvider","Y","ContentEditable","editorNodes","editorTheme","CodeBlockActionsPlugin","ImportCodeBlocksPlugin","CodeHighlightingPlugin","EquationPlugin","FloatingTextFormatToolbarPlugin","ListMarkerWidthPlugin","AwarenessCursorsCSS","CollaborativeMarkdownEditorProps","roomId","wsUrl","wsParams","Record","userName","userColor","placeholder","CollaborativeMarkdownEditor","props","$","_c","t0","t1","t2","t3","undefined","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","_temp","t4","nextProvider","params","connect","on","isSynced","provider","t5","t6","disconnect","t7","t8","Symbol","for","current","t9","namespace","nodes","editorState","onError","_temp2","editable","theme","initialConfig","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","error","console","Doc","_c","_temp","_temp2","INSERT_BLOCK","createCommand","INSERT_BLOCK","INSERT_BLOCK_COMMAND","addClassNamesToElement","$createParagraphNode","DOMConversionMap","DOMConversionOutput","DOMExportOutput","EditorConfig","ElementFormatType","ElementNode","isHTMLElement","LexicalEditor","ParagraphNode","RangeSelection","SerializedElementNode","SerializedCommentNode","convertCommentElement","element","HTMLElement","node","$createCommentNode","style","setFormat","textAlign","CommentNode","getType","clone","__key","createDOM","config","document","createElement","theme","comment","updateDOM","importDOM","blockquote","conversion","priority","exportDOM","editor","isEmpty","append","formatType","getFormatType","direction","getDirection","dir","importJSON","serializedNode","format","setIndent","indent","setDirection","exportJSON","type","getTextContent","originalText","withEscapedReferences","replace","insertNewAfter","_","restoreSelection","newBlock","insertAfter","collapseAtStart","paragraph","children","getChildren","forEach","child","useLexicalComposerContext","$setBlocksType","mergeRegister","$getSelection","$isRangeSelection","COMMAND_PRIORITY_LOW","TextNode","useEffect","INSERT_BLOCK_COMMAND","$createCommentNode","insertCommentBlock","_blockType","nodeToReplace","selection","commentNode","nodeParent","getParent","replace","remove","selectEnd","InsertBlockEvent","optionId","useCommentCommands","$","_c","editor","t0","t1","registerCommand","_temp","event","_c","_temp","useLexicalComposerContext","mergeRegister","$createParagraphNode","useEffect","CommentNode","useCommentSchema","$","_c","editor","t0","t1","registerNodeTransform","node","children","getChildren","invalidChildren","filter","_temp","length","update","forEach","_temp2","child","getType","child_0","replace","_c","_temp","_temp2","useCommentCommands","useCommentSchema","CommentPlugin","matchCommandQuery","text","fragment","exec","leadOffset","length","matchingString","slice","replaceableString","useLexicalComposerContext","LexicalTypeaheadMenuPlugin","MenuOption","$createTextNode","$getSelection","$setSelection","useEffect","useState","createPortal","ListRow","ScrollArea","matchCommandQuery","PromptCommand","name","description","argumentHelp","disabledReason","onSelect","CommandOption","command","constructor","CommandMenuProps","options","selectedIndex","option","index","onHighlight","CommandMenu","props","$","_c","t0","Symbol","for","key","t1","useSlotRecipe","t2","styles","t3","t4","ref","current","scrollIntoView","block","t5","content","t6","t7","setRefElement","Boolean","_temp","map","t8","CommandMenuPlugin","commands","editor","query","setQuery","root","getRootElement","contains","ownerDocument","activeElement","update","_temp2","startsWith","matches","filter","_temp3","text","match","some","command_1","matchingString","node","closeMenu","replace","selectEnd","_temp4","Box","event","preventDefault","selection","clone","command_0","anchor","options_0","selectOptionAndCleanUp","setHighlightedIndex","setAttribute","option_0","_c","_temp","ScrollArea","_temp2","$isElementNode","RootNode","$getTextContent","root","textContent","children","getChildren","childrenLength","length","i","child","getTextContent","isInline","SerializedNode","type","text","SerializedRoot","shouldAppendParagraphBreak","node","Boolean","traverseSerializedNode","Array","isArray","getTextFromSerializedEditorState","state","parsed","JSON","parse","emptyEditorState","direction","format","indent","version","textFormat","undefined","generateEditorStateFromString","input","trim","stringify","paragraphs","split","map","line","detail","mode","style","useLexicalComposerContext","$getRoot","useImperativeHandle","generateEditorStateFromString","PromptEditorRef","setEditorValue","value","ImperativeAPIPlugin","t0","$","_c","editorRef","previousTextRef","editor","t1","t2","state","parseEditorState","JSON","stringify","_temp","setEditorState","current","focus","selectEnd","_c","_temp","KeyDownLikeEvent","key","ctrlKey","metaKey","shiftKey","altKey","shouldSubmitOnEnter","event","shouldRecallPrevious","shouldRecallNext","useLexicalComposerContext","COMMAND_PRIORITY_HIGH","INSERT_LINE_BREAK_COMMAND","INSERT_PARAGRAPH_COMMAND","KEY_DOWN_COMMAND","LexicalEditor","useEffect","shouldRecallNext","shouldRecallPrevious","shouldSubmitOnEnter","KeyboardShortcutPluginProps","onSubmit","onRecallPrevious","onRecallNext","insertModifiedEnter","editor","event","KeyboardEvent","preventDefault","shiftKey","dispatchCommand","undefined","KeyboardShortcutPlugin","props","$","_c","t0","t1","registerCommand","getRootElement","hasAttribute","key","_c","useLexicalComposerContext","$createRangeSelection","$getNodeByKey","$getRoot","$getSelection","$isElementNode","$isRangeSelection","$isTextNode","$setSelection","LexicalNode","PointType","RangeSelection","useLayoutEffect","useRef","validPoint","point","node","key","isAttached","type","offset","getTextContentSize","getChildrenSize","PromptSelectionSnapshot","anchor","path","focus","pointSnapshot","getParent","unshift","getIndexWithinParent","restorePoint","saved","index","getChildAtIndex","undefined","getKey","PreserveSelectionPlugin","props","isEditable","initialSelection","onSelectionChange","selection","initial","changed","current","editor","editing","registerUpdateListener","editorState","read","clone","root","getRootElement","contains","document","activeElement","restoreSelection","update","range","set","discrete","addEventListener","once","removeEventListener","EditorThemeClasses","baseTheme","promptInputTheme","paragraph","baseTheme","Flex","Text","MarkNode","LexicalComposer","LexicalErrorBoundary","HistoryPlugin","OnChangePlugin","RichTextPlugin","$getRoot","ReactElement","ForwardRefRenderFunction","forwardRef","useRef","ContentEditable","ToggleEditablePlugin","TreeViewPlugin","CommentPlugin","CommentNode","CommandMenuPlugin","PromptCommand","ImperativeAPIPlugin","PromptEditorRef","KeyboardShortcutPlugin","PreserveSelectionPlugin","PromptSelectionSnapshot","theme","$getTextContent","getTextFromSerializedEditorState","PromptEditorProps","defaultState","initialSelection","onSelectionChange","selection","debug","isEditable","placeholder","onChange","text","state","onError","error","Error","onSubmit","onRecallPrevious","onRecallNext","commands","nodes","BasePromptEditor","props","ref","$","_c","t0","t1","undefined","t2","t3","_temp","t4","namespace","editorState","editable","initialConfig","t5","previousTextRef","t6","placeholderNode","T0","t7","t8","t9","t10","T1","t11","Symbol","for","t12","t13","t14","read","root","rawText","current","toJSON","t15","t16","t17","t18","t19","T2","t20","map","_temp2","join","t21","t22","t23","t24","PromptEditor","command","name","_c","_temp","_temp2","EditorConfig","NodeKey","SerializedTextNode","TextNode","ChatCodeLinkNode","__href","__description","__animateArrival","getType","clone","node","__text","__key","constructor","text","href","description","key","animateArrival","importJSON","value","updateFromJSON","exportJSON","type","createDOM","config","anchor","document","createElement","classList","add","setAttribute","tabIndex","dataset","chatSource","chatOrigin","title","append","updateDOM","previous","__format","TextNode","StreamingTextNode","ChatCodeLinkNode","ChatLinkCandidate","ChatLinkHandler","parseChatLink","resolveChatCodeLink","node","handler","origin","hasFormat","parent","getParent","getType","includes","candidate","source","getTextContent","parsed","kind","replacement","resolveHref","describe","undefined","setFormat","getFormat","replace","useLexicalComposerContext","TextNode","useEffect","MarkdownLinkNode","StreamingTextNode","resolveChatCodeLink","ChatLinkCandidate","ChatLinkHandler","parseChatLink","useChatLinkHandler","isModifiedClick","event","MouseEvent","KeyboardEvent","button","metaKey","ctrlKey","shiftKey","altKey","activateChatLink","handler","key","target","Element","anchor","closest","dataset","chatSource","candidate","source","origin","chatOrigin","parsed","window","location","href","resolveHref","kind","preventDefault","stopImmediatePropagation","open","ChatLinkPlugin","$","_c","editor","t0","t1","removeLink","registerNodeTransform","node","getSource","setResolvedURL","removeLinkPresentation","registerMutationListener","mutations","mutation","getElementByKey","candidate_0","parsed_0","title","describe","transformCode","node_0","removeCode","removeStreamingCode","activate","removeRoot","registerRootListener","root","previous","removeEventListener","addEventListener","chatLinks","_c","useLexicalComposerContext","useEffect","StateUpdatePluginProps","value","onUpdate","StateUpdatePlugin","t0","$","_c","editor","t1","t2","update","tag","_c","$getRoot","$isElementNode","$isTextNode","ElementNode","LexicalNode","TextNode","ChatCodeLinkNode","createMarkdownLexicalNodes","MarkdownUrlResolver","$createStreamingTextNode","sameAttributes","left","right","attributes","node","children","_children","rest","exportJSON","ReturnType","JSON","stringify","href","__href","description","__description","sameTextFormat","getFormat","getStyle","isChunkText","Boolean","includes","getType","arrivingText","next","text","setFormat","setStyle","markNewText","animate","getTextContent","pending","length","current","pop","child","getChildren","replace","push","reconcileText","previous","start","nodes","cursor","old","remaining","startsWith","getTextContentSize","slice","setTextContent","toggleUnmergeable","reconcileChildren","parent","nextNodes","result","some","index","getKey","splice","getChildrenSize","importStreamingMarkdownToLexical","markdown","resolver","Flex","useRecipe","ClickableLinkPlugin","LexicalComposer","LexicalErrorBoundary","HorizontalRulePlugin","LinkPlugin","ListPlugin","OnChangePlugin","RichTextPlugin","TabIndentationPlugin","$addUpdateTag","$getRoot","useRef","ChatCodeLinkNode","ChatLinkProps","ChatLinkProvider","useChatLinkHandler","ChatLinkPlugin","ContentEditable","editorNodes","editorTheme","importMarkdownToLexical","createMarkdownSourceDocument","MarkdownTableSettingsContext","MarkdownUrlResolver","MarkdownUrlProvider","ImportCodeBlocksPlugin","CodeHighlightingPlugin","EquationPlugin","ListMarkerWidthPlugin","StateUpdatePlugin","ToggleEditablePlugin","TreeViewPlugin","importStreamingMarkdownToLexical","splitFrontmatter","RichMessageProps","debug","defaultState","fullWidth","isEditable","streaming","resolveMarkdownUrl","onChange","value","SOURCE_IMPORT_TAG","CHAT_TABLE_SETTINGS","rowNumbers","wrapRows","RichMessage","props","$","_c","inherited","t0","linkHandler","t1","t2","RichMessageContent","frontmatter","body","shouldTrackChanges","Boolean","motion","key","loadedRef","resolver","sourceDocumentRef","ReturnType","current","initialConfig","namespace","nodes","editorState","importToLexical","onError","error","Error","console","editable","theme","previous","sourceDocument","startsWith","_editor","tags","has","read","root","markdownBody","exportFromLexical","_c","StackProps","Button","HStack","Icon","Spinner","Stack","Text","Activity","Bell","CircleAlert","Component","ExternalLink","GitBranch","Info","MessageCircle","ScanSearch","Sparkles","ComponentType","ReactNode","ActivityActor","ActivityComment","ActivityEvent","ActivityFeed","ActivityTimeline","AlertMessage","EmptyState","RichMessage","ResourceActivityFeedSize","ResourceActivityIconName","ResourceActivityRelatedResource","id","type","label","ResourceActivityFeedAction","icon","ResourceActivityFeedAttention","statusLabel","actions","ResourceActivityFeedItemBase","createdAt","timestampLabel","actor","relatedResources","ResourceActivityFeedEventItem","kind","summary","ResourceActivityFeedMessageItem","markdown","attention","ResourceActivityFeedItem","ResourceActivityFeedProps","Omit","items","size","isLoading","error","hasMore","isLoadingMore","emptyTitle","emptyDescription","errorTitle","loadMoreLabel","loadingLabel","fallbackActorName","formatTimestamp","item","onActionSelect","action","onLoadMore","onRelatedResourceSelect","resource","ItemActionsProps","ResourceActivityItemProps","NonNullable","iconComponents","Record","activity","bell","component","info","sparkles","ActivityIcon","props","$","_c","IconComponent","name","t0","ItemActions","attentionActions","undefined","length","map","t1","t2","AttentionStatus","t3","ResourceActivityItem","timestamp","t4","t5","t6","t7","attentionIcon","t8","t9","t10","t11","t12","defaultFormatTimestamp","ResourceActivityFeed","rootProps","Symbol","for","t13","t14","Component","_c","EmptyState","Box","Table","Text","Textarea","ScrollArea","CodeEditorProps","DataTableProps","scaledSmallFontSize","formatValue","value","undefined","length","String","toUpperCase","Date","toISOString","JSON","stringify","DefaultRichTextCodeEditor","props","$","_c","defaultCode","t0","isEditable","t1","showLineNumbers","t2","disableScroll","t3","t4","lines","split","map","_temp","codeBlock","t5","DefaultRichTextDataTable","data","fullWidth","noBorder","hiddenColumns","Symbol","for","t6","Set","hiddenSet","Object","keys","filter","key","has","columns","t7","t8","t9","_temp2","t10","t11","row","rowIndex","join","column_0","column","t12","line","index","_c","ScrollArea","ResourceType","inferResourceTypeFromMediaType","mediaType","normalized","toLowerCase","trim","startsWith","fallback","extensionToMediaType","Record","csv","tsv","json","md","markdown","txt","pdf","png","jpg","jpeg","gif","svg","webp","mp4","mov","ts","tsx","js","jsx","sql","yml","yaml","mediaTypeFromPath","path","cleaned","split","ext","pop","toLowerCase","ActivityTimeline","ActivityEvent","ActivityFeed","ActivityComment","AlertMessage","ScrollArea$1","ListRow","EmptyState$1","ChatLinkProvider","MarkdownUrlProvider","parseChatLink","ContentEditable","theme","EquationPlugin","ToggleEditablePlugin","MarkdownLinkNode","importMarkdownToLexical","CodeHighlightingPlugin","ImportCodeBlocksPlugin","editorTheme","TreeViewPlugin","useChatLinkHandler","ListMarkerWidthPlugin","editorNodes","createMarkdownSourceDocument","CodeBlockActionsPlugin","splitFrontmatter","createMarkdownLexicalNodes","FloatingTextFormatToolbarPlugin","$createStreamingTextNode","MarkdownTableSettingsContext","StreamingTextNode","Component$1","Y","AwarenessCursorsCSS","$","c","t0","CollaborativeMarkdownEditor","t1","t2","props","t3","wsParams","userName","userColor","editorContainerRef","useRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","useState","synced","setSynced","doc","_temp$6","t4","roomId","wsUrl","nextProvider","WebsocketProvider","isSynced","provider","t5","t6","useEffect","t7","t8","t9","_temp2$4","initialConfig","t10","t11","t12","CollaborationPluginV2__EXPERIMENTAL","t13","t14","t15","t16","t17","t18","t19","LinkPlugin","ListPlugin","TabIndentationPlugin","HorizontalRulePlugin","t20","t21","t22","t23","placeholder","Box","t24","RichTextPlugin","LexicalErrorBoundary","t25","t26","Flex","LexicalComposer","LexicalCollaboration","error","INSERT_BLOCK_COMMAND","createCommand","convertCommentElement","node","$createCommentNode","element","CommentNode","ElementNode","addClassNamesToElement","config","editor","isHTMLElement","formatType","direction","serializedNode","newBlock","$createParagraphNode","restoreSelection","paragraph","child","insertCommentBlock","selection","$getSelection","commentNode","nodeToReplace","$isRangeSelection","$setBlocksType","useCommentCommands","useLexicalComposerContext","mergeRegister","_temp$5","COMMAND_PRIORITY_LOW","event","optionId","useCommentSchema","invalidChildren","_temp$4","_temp2$3","CommentPlugin","matchCommandQuery","fragment","text","CommandOption","MenuOption","command","CommandMenu","useSlotRecipe","styles","options","selectedIndex","onHighlight","onSelect","index","option","_temp$3","CommandMenuPlugin","query","setQuery","root","_temp2$2","commands","_temp3","match","command_1","$createTextNode","closeMenu","LexicalTypeaheadMenuPlugin","_temp4","$setSelection","command_0","options_0","anchor","createPortal","setHighlightedIndex","selectOptionAndCleanUp","option_0","$getTextContent","textContent","children","childrenLength","i","$isElementNode","shouldAppendParagraphBreak","traverseSerializedNode","getTextFromSerializedEditorState","state","emptyEditorState","generateEditorStateFromString","input","line","ImperativeAPIPlugin","previousTextRef","value","_temp$2","useImperativeHandle","editorRef","shouldSubmitOnEnter","shouldRecallPrevious","shouldRecallNext","insertModifiedEnter","INSERT_LINE_BREAK_COMMAND","INSERT_PARAGRAPH_COMMAND","KeyboardShortcutPlugin","onRecallNext","onRecallPrevious","onSubmit","KEY_DOWN_COMMAND","COMMAND_PRIORITY_HIGH","validPoint","$getNodeByKey","point","$isTextNode","pointSnapshot","path","restorePoint","$getRoot","saved","PreserveSelectionPlugin","initial","initialSelection","changed","onSelectionChange","editing","isEditable","useLayoutEffect","current","focus","range","$createRangeSelection","saved_0","promptInputTheme","nodes","MarkNode","PromptEditor","forwardRef","debug","onError","_temp$1","defaultState","Text","placeholderNode","T0","T1","HistoryPlugin","onChange","OnChangePlugin","rawText","editorState","ref","T2","_temp2$1","ChatCodeLinkNode","TextNode","key","href","description","animateArrival","previous","resolveChatCodeLink","parent","candidate","parsed","origin","replacement","handler","isModifiedClick","activateChatLink","target","ChatLinkPlugin","removeLink","removeLinkPresentation","mutation","mutations","source","candidate_0","parsed_0","transformCode","node_0","removeCode","removeStreamingCode","activate","removeRoot","StateUpdatePlugin","onUpdate","sameAttributes","attributes","_children","rest","left","right","sameTextFormat","isChunkText","arrivingText","next","markNewText","animate","pending","reconcileText","cursor","start","old","remaining","reconcileChildren","result","nextNodes","importStreamingMarkdownToLexical","markdown","resolver","SOURCE_IMPORT_TAG","CHAT_TABLE_SETTINGS","RichMessage","inherited","RichMessageContent","shouldTrackChanges","motion","useRecipe","loadedRef","resolveMarkdownUrl","sourceDocumentRef","body","$addUpdateTag","sourceDocument","streaming","ClickableLinkPlugin","tags","markdownBody","frontmatter","iconComponents","Activity","Bell","CircleAlert","ExternalLink","GitBranch","Info","MessageCircle","ScanSearch","Sparkles","ActivityIcon","IconComponent","Icon","ItemActions","attentionActions","item","onActionSelect","size","Button","action","onRelatedResourceSelect","resource","HStack","AttentionStatus","attention","ResourceActivityItem","fallbackActorName","actor","formatTimestamp","timestamp","attentionIcon","Stack","defaultFormatTimestamp","createdAt","ResourceActivityFeed","items","onLoadMore","rootProps","isLoading","hasMore","isLoadingMore","emptyTitle","emptyDescription","errorTitle","loadMoreLabel","loadingLabel","Spinner","scaledSmallFontSize","formatValue","DefaultRichTextCodeEditor","defaultCode","showLineNumbers","disableScroll","Textarea","lines","_temp","codeBlock","DefaultRichTextDataTable","fullWidth","noBorder","hiddenColumns","data","hiddenSet","columns","Table","_temp2","row","column_0","rowIndex","column","inferResourceTypeFromMediaType","normalized","mediaType","extensionToMediaType","mediaTypeFromPath","ext"],"sources":["../src/components/rich-text/collaborative-markdown-editor/awareness-cursors.tsx","../src/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.tsx","../src/components/rich-text/prompt-input/events.ts","../src/components/rich-text/prompt-input/commands.ts","../src/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.tsx","../src/components/rich-text/prompt-input/plugins/CommentPlugin/hooks/useCommentCommands.ts","../src/components/rich-text/prompt-input/plugins/CommentPlugin/hooks/useCommentSchema.ts","../src/components/rich-text/prompt-input/plugins/CommentPlugin/CommentPlugin.tsx","../src/components/rich-text/prompt-input/plugins/command-query.ts","../src/components/rich-text/prompt-input/plugins/command-menu-plugin.tsx","../src/components/rich-text/prompt-input/utils.ts","../src/components/rich-text/prompt-input/plugins/ImperativeAPIPlugin.tsx","../src/components/rich-text/prompt-input/plugins/keyboard-shortcuts.ts","../src/components/rich-text/prompt-input/plugins/KeyboardShortcutPlugin.tsx","../src/components/rich-text/prompt-input/plugins/preserve-selection-plugin.tsx","../src/components/rich-text/prompt-input/theme/prompt-input-theme.ts","../src/components/rich-text/prompt-input/prompt-input.tsx","../src/components/chat-ui/links/chat-code-link-node.ts","../src/components/chat-ui/links/chat-code-link-transform.ts","../src/components/chat-ui/links/chat-link-plugin.tsx","../src/components/rich-text/shared/plugins/StateUpdatePlugin.tsx","../src/components/rich-text/shared/streaming-markdown.ts","../src/components/rich-text/rich-message/rich-message.tsx","../src/components/rich-text/resource-activity-feed/resource-activity-feed.tsx","../src/components/rich-text/shared/components/default-rich-text-components.tsx","../src/components/rich-text/utils/inferResourceType.ts","../src/components/rich-text/utils/mediaType.ts"],"sourcesContent":["/**\n * Injects CSS for Yjs awareness cursor rendering in the collaborative editor.\n * @lexical/yjs injects cursor elements with data-* attributes; this styles them.\n */\nexport function AwarenessCursorsCSS() {\n return (\n <style>\n {`\n .collaboration-cursor-container {\n position: relative;\n display: inline;\n }\n\n .collaboration-cursor-caret {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n pointer-events: none;\n }\n\n .collaboration-cursor-label {\n position: absolute;\n top: -18px;\n left: -2px;\n padding: 1px 6px;\n font-size: 11px;\n font-weight: 600;\n line-height: 16px;\n white-space: nowrap;\n border-radius: 4px 4px 4px 0;\n color: #fff;\n pointer-events: none;\n user-select: none;\n }\n\n .collaboration-cursor-selection {\n position: absolute;\n pointer-events: none;\n opacity: 0.25;\n }\n `}\n </style>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { LexicalCollaboration } from \"@lexical/react/LexicalCollaborationContext\";\nimport { CollaborationPluginV2__EXPERIMENTAL } from \"@lexical/react/LexicalCollaborationPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport type { Provider } from \"@lexical/yjs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { WebsocketProvider } from \"y-websocket\";\nimport * as Y from \"yjs\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme } from \"../shared/editor-config\";\nimport { CodeBlockActionsPlugin } from \"../shared/plugins/CodePlugin/CodeBlockActionsPlugin\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { ListMarkerWidthPlugin } from \"../shared/plugins/list-marker-width-plugin\";\nimport { AwarenessCursorsCSS } from \"./awareness-cursors\";\n\nexport interface CollaborativeMarkdownEditorProps {\n roomId: string;\n wsUrl: string;\n wsParams?: Record<string, string>;\n userName?: string;\n userColor?: string;\n placeholder?: string;\n}\n\nexport function CollaborativeMarkdownEditor(props: CollaborativeMarkdownEditorProps) {\n const { roomId, wsUrl, wsParams = {}, userName = \"Anonymous\", userColor = \"#30bced\", placeholder } = props;\n\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n const [synced, setSynced] = useState(false);\n\n // Keep collaborative state stable for the component lifetime.\n const [doc] = useState(() => new Y.Doc());\n const [provider] = useState(() => {\n const nextProvider = new WebsocketProvider(wsUrl, roomId, doc, { params: wsParams, connect: false });\n\n nextProvider.on(\"sync\", (isSynced: boolean) => {\n if (isSynced) setSynced(true);\n });\n\n return nextProvider;\n });\n\n // Manage provider connect/disconnect lifecycle\n useEffect(() => {\n provider.connect();\n\n return () => {\n provider.disconnect();\n };\n }, [provider]);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"COLLABORATIVE_EDITOR\",\n nodes: editorNodes,\n editorState: null,\n onError: (error: Error) => console.error(error),\n editable: true,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <AwarenessCursorsCSS />\n\n <LexicalComposer initialConfig={initialConfig}>\n <LexicalCollaboration>\n <CollaborationPluginV2__EXPERIMENTAL\n id={roomId}\n doc={doc}\n provider={provider as unknown as Provider}\n __shouldBootstrapUnsafe={false}\n username={userName}\n cursorColor={userColor}\n />\n <LinkPlugin />\n <ListPlugin />\n <ListMarkerWidthPlugin />\n <TabIndentationPlugin maxIndent={7} />\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} layerStyle=\"markdownEditorInset\" />}\n placeholder={\n synced && placeholder ? (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n layerStyle=\"markdownEditorInset\"\n color=\"fg.muted\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n textStyle=\"paragraph/M/regular\"\n >\n {placeholder}\n </Box>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n </LexicalCollaboration>\n </LexicalComposer>\n </Flex>\n );\n}\n","export const INSERT_BLOCK = \"INSERT_BLOCK\";\n","import { createCommand } from \"lexical\";\nimport { INSERT_BLOCK } from \"./events\";\n\nexport const INSERT_BLOCK_COMMAND = createCommand(INSERT_BLOCK);\n","import { addClassNamesToElement } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n type DOMConversionMap,\n type DOMConversionOutput,\n type DOMExportOutput,\n type EditorConfig,\n type ElementFormatType,\n ElementNode,\n isHTMLElement,\n type LexicalEditor,\n type ParagraphNode,\n type RangeSelection,\n type SerializedElementNode,\n} from \"lexical\";\n\nexport type SerializedCommentNode = SerializedElementNode;\n\nfunction convertCommentElement(element: HTMLElement): DOMConversionOutput {\n const node = $createCommentNode();\n if (element.style !== null) {\n node.setFormat(element.style.textAlign as ElementFormatType);\n }\n return { node };\n}\n\nexport class CommentNode extends ElementNode {\n static getType(): string {\n return \"comment\";\n }\n\n static clone(node: CommentNode): CommentNode {\n return new CommentNode(node.__key);\n }\n\n createDOM(config: EditorConfig): HTMLElement {\n const element = document.createElement(\"blockquote\");\n addClassNamesToElement(element, config.theme.comment);\n return element;\n }\n\n updateDOM(): boolean {\n return false;\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n blockquote: () => ({\n conversion: convertCommentElement,\n priority: 0,\n }),\n };\n }\n\n exportDOM(editor: LexicalEditor): DOMExportOutput {\n const { element } = super.exportDOM(editor);\n\n if (element && isHTMLElement(element)) {\n if (this.isEmpty()) {\n element.append(document.createElement(\"br\"));\n }\n\n const formatType = this.getFormatType();\n element.style.textAlign = formatType;\n\n const direction = this.getDirection();\n if (direction) {\n element.dir = direction;\n }\n }\n\n return {\n element,\n };\n }\n\n static importJSON(serializedNode: SerializedCommentNode): CommentNode {\n const node = $createCommentNode();\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n return node;\n }\n\n exportJSON(): SerializedElementNode {\n return {\n ...super.exportJSON(),\n type: \"comment\",\n };\n }\n\n getTextContent(): string {\n const originalText = super.getTextContent();\n // escape { and } symbols\n const withEscapedReferences = originalText.replace(/([{}])/g, \"\\\\$1\");\n return `{{! ${withEscapedReferences} }}`;\n }\n\n // mutation\n\n insertNewAfter(_: RangeSelection, restoreSelection?: boolean): ParagraphNode {\n const newBlock = $createParagraphNode();\n const direction = this.getDirection();\n newBlock.setDirection(direction);\n this.insertAfter(newBlock, restoreSelection);\n return newBlock;\n }\n\n collapseAtStart(): true {\n const paragraph = $createParagraphNode();\n const children = this.getChildren();\n children.forEach((child) => {\n paragraph.append(child);\n });\n this.replace(paragraph);\n return true;\n }\n}\n\nexport function $createCommentNode(): CommentNode {\n return new CommentNode();\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_LOW, type TextNode } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { INSERT_BLOCK_COMMAND } from \"../../../commands\";\nimport { $createCommentNode } from \"../nodes/CommentNode/CommentNode\";\n\nexport const insertCommentBlock = (_blockType: string, nodeToReplace?: TextNode) => {\n const selection = $getSelection();\n const commentNode = $createCommentNode();\n\n if (nodeToReplace) {\n const nodeParent = nodeToReplace.getParent();\n nodeParent?.replace(commentNode, true);\n nodeToReplace.remove();\n commentNode.selectEnd();\n return;\n }\n\n if ($isRangeSelection(selection)) {\n $setBlocksType(selection, $createCommentNode);\n }\n};\n\ntype InsertBlockEvent = {\n optionId: string;\n nodeToReplace?: TextNode;\n};\n\nexport function useCommentCommands(): null {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n INSERT_BLOCK_COMMAND,\n (event: InsertBlockEvent) => {\n const { optionId, nodeToReplace } = event;\n insertCommentBlock(optionId, nodeToReplace);\n return false;\n },\n COMMAND_PRIORITY_LOW,\n ),\n );\n }, [editor]);\n\n return null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $createParagraphNode } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { CommentNode } from \"../nodes/CommentNode/CommentNode\";\n\nexport const useCommentSchema = () => {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return mergeRegister(\n editor.registerNodeTransform(CommentNode, (node) => {\n const children = node.getChildren();\n\n /**\n * Comment nodes cannot have other comments as children\n */\n const invalidChildren = children.filter((child) => child.getType() === \"comment\");\n\n if (invalidChildren.length > 0) {\n editor.update(() => {\n invalidChildren.forEach((child) => {\n child.replace($createParagraphNode(), true);\n });\n });\n }\n }),\n );\n }, [editor]);\n};\n","import { useCommentCommands } from \"./hooks/useCommentCommands\";\nimport { useCommentSchema } from \"./hooks/useCommentSchema\";\n\nexport function CommentPlugin(): null {\n useCommentSchema();\n useCommentCommands();\n return null;\n}\n","export const matchCommandQuery = (text: string) => {\n const fragment = /(?:^|\\s)(\\/[^\\s/]*)$/.exec(text)?.[1];\n if (!fragment) return null;\n return {\n leadOffset: text.length - fragment.length,\n matchingString: fragment.slice(1),\n replaceableString: fragment,\n };\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { LexicalTypeaheadMenuPlugin, MenuOption } from \"@lexical/react/LexicalTypeaheadMenuPlugin\";\nimport { $createTextNode, $getSelection, $setSelection } from \"lexical\";\nimport { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { matchCommandQuery } from \"./command-query\";\n\nexport interface PromptCommand {\n name: string;\n description: string;\n argumentHelp?: string;\n disabledReason?: string;\n /** Select local draft intent without inserting native command text. */\n onSelect?: () => void;\n}\n\nclass CommandOption extends MenuOption {\n readonly command: PromptCommand;\n constructor(command: PromptCommand) {\n super(command.name);\n this.command = command;\n }\n}\n\ninterface CommandMenuProps {\n options: CommandOption[];\n selectedIndex: number | null;\n onSelect: (option: CommandOption, index: number) => void;\n onHighlight: (index: number) => void;\n}\n\nconst CommandMenu = (props: CommandMenuProps) => {\n const { options, selectedIndex, onSelect, onHighlight } = props;\n const styles = useSlotRecipe({ key: \"menu\" })();\n useEffect(() => {\n options[selectedIndex ?? -1]?.ref?.current?.scrollIntoView({ block: \"nearest\" });\n }, [options, selectedIndex]);\n return (\n <Box css={styles.content} position=\"absolute\" bottom=\"100%\" mb=\"2xs\" zIndex=\"popover\">\n <ScrollArea maxH=\"xs\" showHorizontalScrollbar={false}>\n {options.map((option, index) => (\n <ListRow\n key={option.key}\n id={`typeahead-item-${index}`}\n ref={option.setRefElement}\n role=\"option\"\n aria-label={option.command.name}\n aria-disabled={Boolean(option.command.disabledReason)}\n tabIndex={-1}\n variant=\"full-width\"\n label={option.command.name}\n description={option.command.disabledReason ?? option.command.description}\n disabled={Boolean(option.command.disabledReason)}\n isSelected={selectedIndex === index}\n onMouseDown={(event) => event.preventDefault()}\n onPointerMove={() => onHighlight(index)}\n onActivate={() => onSelect(option, index)}\n />\n ))}\n </ScrollArea>\n </Box>\n );\n};\n\nexport const CommandMenuPlugin = (props: { commands: PromptCommand[] }) => {\n const { commands } = props;\n const [editor] = useLexicalComposerContext();\n const [query, setQuery] = useState<string | null>(null);\n useEffect(() => {\n // Refresh completion after discovery only while the editor owns focus.\n const root = editor.getRootElement();\n if (!root?.contains(root.ownerDocument.activeElement)) return;\n editor.update(() => {\n const selection = $getSelection();\n if (selection) $setSelection(selection.clone());\n });\n }, [editor]);\n const matches = commands.filter((command) => command.name.startsWith(`/${query ?? \"\"}`));\n const options = matches.map((command) => new CommandOption(command));\n return (\n <LexicalTypeaheadMenuPlugin<CommandOption>\n onQueryChange={setQuery}\n options={options}\n triggerFn={(text) => {\n const match = matchCommandQuery(text);\n if (!match || !commands.some((command) => command.name.startsWith(`/${match.matchingString}`))) return null;\n return match;\n }}\n onSelectOption={(option, node, closeMenu) => {\n if (option.command.disabledReason) return;\n editor.update(() => {\n node?.replace($createTextNode(option.command.onSelect ? \"\" : `${option.command.name} `)).selectEnd();\n closeMenu();\n });\n option.command.onSelect?.();\n }}\n menuRenderFn={(anchor, { options, selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => {\n anchor.current?.setAttribute(\"aria-label\", \"Harness commands\");\n return anchor.current\n ? createPortal(\n <CommandMenu\n options={options}\n selectedIndex={selectedIndex}\n onHighlight={setHighlightedIndex}\n onSelect={(option, index) => {\n setHighlightedIndex(index);\n selectOptionAndCleanUp(option);\n }}\n />,\n anchor.current,\n )\n : null;\n }}\n />\n );\n};\n\nimport { Box, useSlotRecipe } from \"@chakra-ui/react\";\n","import { $isElementNode, type RootNode } from \"lexical\";\n\nexport const $getTextContent = (root: RootNode) => {\n let textContent = \"\";\n const children = root.getChildren();\n const childrenLength = children.length;\n for (let i = 0; i < childrenLength; i++) {\n const child = children[i];\n textContent += child.getTextContent();\n if ($isElementNode(child) && i !== childrenLength - 1 && !child.isInline()) {\n textContent += \"\\n\";\n }\n }\n return textContent;\n};\n\ntype SerializedNode = {\n type?: string;\n text?: string;\n children?: SerializedNode[];\n};\n\ntype SerializedRoot = {\n root?: SerializedNode;\n};\n\nconst shouldAppendParagraphBreak = (node: SerializedNode) => {\n return node.type === \"paragraph\" && Boolean(node.children?.length);\n};\n\nconst traverseSerializedNode = (node: SerializedNode): string => {\n if (node.type === \"comment\") {\n return \"\";\n }\n\n let text = typeof node.text === \"string\" ? node.text : \"\";\n const children = node.children;\n if (!Array.isArray(children)) return text;\n\n const childrenLength = children.length;\n for (let i = 0; i < childrenLength; i += 1) {\n const child = children[i];\n if (child.type === \"comment\") {\n if (i !== childrenLength - 1) {\n text += \"\\n\";\n }\n continue;\n }\n\n text += traverseSerializedNode(child);\n if (shouldAppendParagraphBreak(child)) {\n text += \"\\n\";\n }\n }\n\n return text;\n};\n\nexport const getTextFromSerializedEditorState = (state: string): string => {\n try {\n const parsed = JSON.parse(state) as SerializedRoot;\n return traverseSerializedNode(parsed.root ?? {});\n } catch {\n return \"\";\n }\n};\n\nexport const emptyEditorState = {\n root: {\n direction: \"ltr\",\n format: \"\",\n indent: 0,\n type: \"root\",\n version: 1,\n children: [\n {\n type: \"paragraph\",\n version: 1,\n format: \"\",\n indent: 0,\n textFormat: undefined,\n direction: null,\n children: [],\n },\n ],\n },\n};\n\nexport function generateEditorStateFromString(input = \"\") {\n if (!input.trim()) {\n return JSON.parse(JSON.stringify(emptyEditorState));\n }\n\n // Split on line breaks → one paragraph per line\n const paragraphs = input.split(/\\r?\\n/);\n\n const children = paragraphs.map((line) => ({\n type: \"paragraph\",\n version: 1,\n format: \"\",\n indent: 0,\n textFormat: undefined,\n direction: null,\n children: line\n ? [\n {\n type: \"text\",\n version: 1,\n text: line,\n format: \"\",\n detail: 0,\n mode: \"normal\",\n style: \"\",\n },\n ]\n : [],\n }));\n\n return {\n root: {\n direction: \"ltr\",\n format: \"\",\n indent: 0,\n type: \"root\",\n version: 1,\n children,\n },\n };\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getRoot } from \"lexical\";\nimport { useImperativeHandle } from \"react\";\nimport { generateEditorStateFromString } from \"../utils\";\n\nexport interface PromptEditorRef {\n setEditorValue: (value: string) => void;\n}\n\nexport function ImperativeAPIPlugin({\n editorRef,\n previousTextRef,\n}: {\n editorRef: React.ForwardedRef<PromptEditorRef>;\n previousTextRef: React.MutableRefObject<string>;\n}) {\n const [editor] = useLexicalComposerContext();\n\n useImperativeHandle(\n editorRef,\n () => ({\n setEditorValue: (value: string) => {\n // Keep text and selection in one state when replacement runs inside a key command.\n const state = editor.parseEditorState(JSON.stringify(generateEditorStateFromString(value)), () => {\n $getRoot().selectEnd();\n });\n editor.setEditorState(state);\n previousTextRef.current = value;\n editor.focus();\n },\n }),\n [editor, previousTextRef],\n );\n\n return null;\n}\n","type KeyDownLikeEvent = {\n key: string;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n altKey: boolean;\n};\n\nexport const shouldSubmitOnEnter = (event: KeyDownLikeEvent) => {\n if (event.key !== \"Enter\") return false;\n\n return !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey;\n};\n\nexport const shouldRecallPrevious = (event: KeyDownLikeEvent) =>\n event.key === \"ArrowUp\" && !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey;\n\nexport const shouldRecallNext = (event: KeyDownLikeEvent) =>\n event.key === \"ArrowDown\" && !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey;\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n COMMAND_PRIORITY_HIGH,\n INSERT_LINE_BREAK_COMMAND,\n INSERT_PARAGRAPH_COMMAND,\n KEY_DOWN_COMMAND,\n type LexicalEditor,\n} from \"lexical\";\nimport { useEffect } from \"react\";\nimport { shouldRecallNext, shouldRecallPrevious, shouldSubmitOnEnter } from \"./keyboard-shortcuts\";\n\nexport interface KeyboardShortcutPluginProps {\n onSubmit?: () => void;\n onRecallPrevious?: () => boolean;\n onRecallNext?: () => boolean;\n}\n\nconst insertModifiedEnter = (editor: LexicalEditor, event: KeyboardEvent) => {\n event.preventDefault();\n if (event.shiftKey) editor.dispatchCommand(INSERT_LINE_BREAK_COMMAND, false);\n else editor.dispatchCommand(INSERT_PARAGRAPH_COMMAND, undefined);\n};\n\nexport function KeyboardShortcutPlugin(props: KeyboardShortcutPluginProps) {\n const { onSubmit, onRecallPrevious, onRecallNext } = props;\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n // The editor's typeahead menu owns Enter, Tab, and arrow keys while it is open.\n if (editor.getRootElement()?.hasAttribute(\"aria-controls\")) {\n if (event.key === \"Enter\" && !shouldSubmitOnEnter(event)) {\n insertModifiedEnter(editor, event);\n return true;\n }\n return false;\n }\n if (shouldSubmitOnEnter(event)) {\n event.preventDefault();\n onSubmit?.();\n return true;\n }\n\n if ((shouldRecallPrevious(event) && onRecallPrevious?.()) || (shouldRecallNext(event) && onRecallNext?.())) {\n event.preventDefault();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n );\n }, [editor, onSubmit, onRecallPrevious, onRecallNext]);\n\n return null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $createRangeSelection,\n $getNodeByKey,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n $isTextNode,\n $setSelection,\n type LexicalNode,\n type PointType,\n type RangeSelection,\n} from \"lexical\";\nimport { useLayoutEffect, useRef } from \"react\";\n\nconst validPoint = (point: PointType) => {\n const node = $getNodeByKey(point.key);\n if (!node?.isAttached()) return false;\n if (point.type === \"text\") return $isTextNode(node) && point.offset <= node.getTextContentSize();\n return $isElementNode(node) && point.offset <= node.getChildrenSize();\n};\n\nexport interface PromptSelectionSnapshot {\n anchor: { path: number[]; offset: number; type: \"text\" | \"element\" };\n focus: { path: number[]; offset: number; type: \"text\" | \"element\" };\n}\nconst pointSnapshot = (point: PointType) => {\n const path: number[] = [];\n let node = $getNodeByKey(point.key);\n while (node?.getParent()) {\n path.unshift(node.getIndexWithinParent());\n node = node.getParent();\n }\n return { path, offset: point.offset, type: point.type };\n};\nconst restorePoint = (saved: PromptSelectionSnapshot[\"anchor\"]) => {\n let node: LexicalNode | undefined = $getRoot();\n for (const index of saved.path) node = $isElementNode(node) ? (node.getChildAtIndex(index) ?? undefined) : undefined;\n return node ? { key: node.getKey(), offset: saved.offset, type: saved.type } : undefined;\n};\n\n/** Keep the last editing range when a temporarily disabled editor loses DOM selection. */\nexport const PreserveSelectionPlugin = (props: {\n isEditable: boolean;\n initialSelection?: PromptSelectionSnapshot;\n onSelectionChange?: (selection: PromptSelectionSnapshot) => void;\n}) => {\n const { isEditable, initialSelection, onSelectionChange } = props;\n const initial = useRef(initialSelection);\n const changed = useRef(onSelectionChange);\n changed.current = onSelectionChange;\n const [editor] = useLexicalComposerContext();\n const selection = useRef<RangeSelection | null>(null);\n const editing = useRef(isEditable);\n editing.current = isEditable;\n useLayoutEffect(\n () =>\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const saved = selection.current;\n if (saved && (!validPoint(saved.anchor) || !validPoint(saved.focus))) selection.current = null;\n if (!editing.current) return;\n const current = $getSelection();\n if ($isRangeSelection(current)) {\n selection.current = current.clone();\n changed.current?.({ anchor: pointSnapshot(current.anchor), focus: pointSnapshot(current.focus) });\n }\n });\n }),\n [editor],\n );\n useLayoutEffect(() => {\n if (!isEditable) return;\n const root = editor.getRootElement();\n if (!root || root.contains(document.activeElement) || (!selection.current && !initial.current)) return;\n // Restore on return even when another control had focus before takeover. Flush during native focus\n // so a later click or select-all can choose its own range without a deferred restore overwriting it.\n const restoreSelection = () => {\n editor.update(\n () => {\n if (!selection.current && initial.current) {\n const anchor = restorePoint(initial.current.anchor);\n const focus = restorePoint(initial.current.focus);\n if (anchor && focus) {\n const range = $createRangeSelection();\n range.anchor.set(anchor.key, anchor.offset, anchor.type);\n range.focus.set(focus.key, focus.offset, focus.type);\n selection.current = range;\n }\n initial.current = undefined;\n }\n const saved = selection.current;\n if (saved && validPoint(saved.anchor) && validPoint(saved.focus)) $setSelection(saved.clone());\n },\n { discrete: true },\n );\n };\n root.addEventListener(\"focus\", restoreSelection, { once: true });\n return () => root.removeEventListener(\"focus\", restoreSelection);\n }, [editor, isEditable]);\n return null;\n};\n","import type { EditorThemeClasses } from \"lexical\";\nimport baseTheme from \"../../theme/rich-text-theme\";\nimport \"./prompt-input-theme.css\";\n\nconst promptInputTheme: EditorThemeClasses = {\n ...baseTheme,\n // Override paragraph class to remove margins specifically for prompt input\n paragraph: \"rich-text__p rich-text__p--no-margin\",\n};\n\nexport default promptInputTheme;\n","import { Flex, Text } from \"@chakra-ui/react\";\nimport { MarkNode } from \"@lexical/mark\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { $getRoot } from \"lexical\";\nimport type { ReactElement } from \"react\";\nimport { type ForwardRefRenderFunction, forwardRef, useRef } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { CommentPlugin } from \"./plugins/CommentPlugin/CommentPlugin\";\nimport { CommentNode } from \"./plugins/CommentPlugin/nodes/CommentNode/CommentNode\";\nimport { CommandMenuPlugin, type PromptCommand } from \"./plugins/command-menu-plugin\";\nimport { ImperativeAPIPlugin, type PromptEditorRef } from \"./plugins/ImperativeAPIPlugin\";\nimport { KeyboardShortcutPlugin } from \"./plugins/KeyboardShortcutPlugin\";\nimport { PreserveSelectionPlugin, type PromptSelectionSnapshot } from \"./plugins/preserve-selection-plugin\";\nimport theme from \"./theme/prompt-input-theme\";\nimport { $getTextContent, getTextFromSerializedEditorState } from \"./utils\";\n\nexport interface PromptEditorProps {\n defaultState: string;\n initialSelection?: PromptSelectionSnapshot;\n onSelectionChange?: (selection: PromptSelectionSnapshot) => void;\n debug?: boolean;\n isEditable?: boolean;\n placeholder?: ReactElement | ((isEditable: boolean) => ReactElement | null);\n onChange?: (text: string, state: object) => void;\n onError?: (error: Error) => void;\n onSubmit?: () => void;\n onRecallPrevious?: () => boolean;\n onRecallNext?: () => boolean;\n /** Native command suggestions shown in the slash popover. Selection inserts plain text. */\n commands?: PromptCommand[];\n}\n\nconst nodes = [CommentNode, MarkNode];\n\nexport const BasePromptEditor: ForwardRefRenderFunction<PromptEditorRef, PromptEditorProps> = (props, ref) => {\n const { initialSelection, onSelectionChange, defaultState, debug = false, isEditable = true, placeholder } = props;\n const { onChange, onError = () => {}, onSubmit, onRecallPrevious, onRecallNext, commands = [] } = props;\n\n const initialConfig = {\n namespace: \"PROMPT_EDITOR\",\n nodes,\n editorState: defaultState,\n editable: isEditable,\n onError,\n theme,\n };\n\n const previousTextRef = useRef<string>(getTextFromSerializedEditorState(defaultState));\n const placeholderNode: ReactElement | ((isEditable: boolean) => ReactElement | null) = placeholder ?? (\n <Text textStyle=\"label/M/regular\" color=\"fg.subtle\" pointerEvents=\"none\" position=\"absolute\" top=\"0\">\n Type your message here.\n </Text>\n );\n\n return (\n <Flex direction=\"column\" justifyContent=\"space-between\" width=\"100%\" position=\"relative\">\n <LexicalComposer initialConfig={initialConfig}>\n <HistoryPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth />}\n placeholder={placeholderNode}\n ErrorBoundary={LexicalErrorBoundary}\n />\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState) => {\n editorState.read(() => {\n // handle comment blocks properly\n const root = $getRoot();\n const rawText = $getTextContent(root);\n\n if (rawText !== previousTextRef.current) {\n previousTextRef.current = rawText;\n onChange?.(rawText, editorState.toJSON());\n }\n });\n }}\n />\n <ImperativeAPIPlugin editorRef={ref} previousTextRef={previousTextRef} />\n <ToggleEditablePlugin isEditable={isEditable} />\n <PreserveSelectionPlugin\n isEditable={isEditable}\n initialSelection={initialSelection}\n onSelectionChange={onSelectionChange}\n />\n <CommentPlugin />\n <KeyboardShortcutPlugin onSubmit={onSubmit} onRecallPrevious={onRecallPrevious} onRecallNext={onRecallNext} />\n <CommandMenuPlugin key={commands.map((command) => command.name).join(\"\\n\")} commands={commands} />\n {debug ? <TreeViewPlugin /> : \"\"}\n </LexicalComposer>\n </Flex>\n );\n};\n\nexport const PromptEditor = forwardRef(BasePromptEditor);\n\nexport type { PromptCommand } from \"./plugins/command-menu-plugin\";\nexport type { PromptEditorRef } from \"./plugins/ImperativeAPIPlugin\";\n","import { type EditorConfig, type NodeKey, type SerializedTextNode, TextNode } from \"lexical\";\n\nexport class ChatCodeLinkNode extends TextNode {\n __href: string | null;\n __description?: string;\n __animateArrival: boolean;\n static getType() {\n return \"chat-code-link\";\n }\n static clone(node: ChatCodeLinkNode) {\n return new ChatCodeLinkNode(node.__text, node.__href, node.__description, node.__key, node.__animateArrival);\n }\n constructor(text: string, href: string | null, description?: string, key?: NodeKey, animateArrival = false) {\n super(text, key);\n this.__href = href;\n this.__description = description;\n this.__animateArrival = animateArrival;\n }\n static importJSON(value: SerializedTextNode) {\n return new ChatCodeLinkNode(value.text, null).updateFromJSON(value);\n }\n exportJSON(): SerializedTextNode {\n return { ...super.exportJSON(), type: \"chat-code-link\" };\n }\n createDOM(config: EditorConfig) {\n const anchor = document.createElement(\"a\");\n if (this.__animateArrival) anchor.classList.add(\"streaming-text-chunk\");\n if (this.__href) anchor.href = this.__href;\n else {\n anchor.setAttribute(\"role\", \"button\");\n anchor.tabIndex = 0;\n }\n anchor.dataset.chatSource = this.__text;\n anchor.dataset.chatOrigin = \"inline-code\";\n anchor.title = this.__description ?? `Open file: ${this.__text}`;\n anchor.append(super.createDOM(config));\n return anchor;\n }\n updateDOM(previous: ChatCodeLinkNode) {\n return previous.__text !== this.__text || previous.__format !== this.__format || previous.__href !== this.__href;\n }\n}\n","import type { TextNode } from \"lexical\";\nimport { StreamingTextNode } from \"../../rich-text/shared/nodes/streaming-text-node\";\nimport { ChatCodeLinkNode } from \"./chat-code-link-node\";\nimport { type ChatLinkCandidate, type ChatLinkHandler, parseChatLink } from \"./chat-link\";\n\nexport const resolveChatCodeLink = (node: TextNode, handler: ChatLinkHandler, origin: string) => {\n if (node instanceof ChatCodeLinkNode || !node.hasFormat(\"code\")) return;\n const parent = node.getParent();\n if (!parent || parent.getType() === \"code\" || parent.getType().includes(\"link\")) return;\n const candidate: ChatLinkCandidate = { source: node.getTextContent(), origin: \"inline-code\" };\n const parsed = parseChatLink(candidate, origin);\n if (!parsed || parsed.kind === \"external\") return;\n const replacement = new ChatCodeLinkNode(\n candidate.source,\n handler.resolveHref(candidate),\n handler.describe?.(candidate),\n undefined,\n node instanceof StreamingTextNode,\n );\n replacement.setFormat(node.getFormat());\n node.replace(replacement);\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { TextNode } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { MarkdownLinkNode } from \"@/components/rich-text/shared/nodes/MarkdownLinkNode\";\nimport { StreamingTextNode } from \"@/components/rich-text/shared/nodes/streaming-text-node\";\nimport { resolveChatCodeLink } from \"./chat-code-link-transform\";\nimport { type ChatLinkCandidate, type ChatLinkHandler, parseChatLink } from \"./chat-link\";\nimport { useChatLinkHandler } from \"./chat-link-context\";\n\nconst isModifiedClick = (event: MouseEvent | KeyboardEvent) =>\n event instanceof MouseEvent &&\n (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey);\n\nconst activateChatLink = (handler: ChatLinkHandler, event: MouseEvent | KeyboardEvent) => {\n if (event instanceof KeyboardEvent && event.key !== \"Enter\") return;\n const target = event.target;\n if (!(target instanceof Element)) return;\n const anchor = target.closest(\"a\");\n if (!anchor) return;\n if (!anchor.dataset.chatSource) return;\n const candidate: ChatLinkCandidate = {\n source: anchor.dataset.chatSource,\n origin: anchor.dataset.chatOrigin === \"markdown\" ? \"markdown\" : \"inline-code\",\n };\n const parsed = parseChatLink(candidate, window.location.origin);\n if (!parsed) return;\n const href = handler.resolveHref(candidate);\n if (parsed.kind === \"external\" && !href) return;\n if (href && isModifiedClick(event)) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n void handler.open(candidate);\n};\n\nexport const ChatLinkPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const handler = useChatLinkHandler();\n useEffect(() => {\n if (!handler) return;\n const removeLink = editor.registerNodeTransform(MarkdownLinkNode, (node) => {\n const candidate: ChatLinkCandidate = { source: node.getSource(), origin: \"markdown\" };\n const parsed = parseChatLink(candidate, window.location.origin);\n if (parsed && (parsed.kind !== \"external\" || handler.resolveHref(candidate))) {\n node.setResolvedURL(handler.resolveHref(candidate) ?? \"#\");\n }\n });\n const removeLinkPresentation = editor.registerMutationListener(MarkdownLinkNode, (mutations) => {\n for (const [key, mutation] of mutations) {\n if (mutation === \"destroyed\") continue;\n const anchor = editor.getElementByKey(key);\n const source = anchor?.dataset.chatSource;\n if (!anchor || !source) continue;\n const candidate: ChatLinkCandidate = { source, origin: \"markdown\" };\n const parsed = parseChatLink(candidate, window.location.origin);\n if (parsed && (parsed.kind !== \"external\" || handler.resolveHref(candidate)))\n anchor.title = handler.describe?.(candidate) ?? `Open file or document: ${source}`;\n }\n });\n const transformCode = (node: TextNode) => resolveChatCodeLink(node, handler, window.location.origin);\n const removeCode = editor.registerNodeTransform(TextNode, transformCode);\n const removeStreamingCode = editor.registerNodeTransform(StreamingTextNode, transformCode);\n const activate = (event: MouseEvent | KeyboardEvent) => activateChatLink(handler, event);\n const removeRoot = editor.registerRootListener((root, previous) => {\n // Root listeners are replaced with the editor's root, including streamed content.\n previous?.removeEventListener(\"click\", activate, true);\n previous?.removeEventListener(\"keydown\", activate, true);\n root?.addEventListener(\"click\", activate, true);\n root?.addEventListener(\"keydown\", activate, true);\n if (root) root.dataset.chatLinks = \"true\";\n });\n return () => {\n removeLink();\n removeCode();\n removeStreamingCode();\n removeLinkPresentation();\n removeRoot();\n };\n }, [editor, handler]);\n return null;\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\n\ntype StateUpdatePluginProps = {\n value: string;\n onUpdate: (value: string) => void;\n};\n\nexport default function StateUpdatePlugin({ value, onUpdate }: StateUpdatePluginProps) {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.update(() => onUpdate(value), { tag: \"history-merge\" });\n }, [value, editor, onUpdate]);\n\n return null;\n}\n","import { $getRoot, $isElementNode, $isTextNode, type ElementNode, type LexicalNode, type TextNode } from \"lexical\";\nimport { ChatCodeLinkNode } from \"../../chat-ui/links/chat-code-link-node\";\nimport { createMarkdownLexicalNodes } from \"./markdown-import\";\nimport type { MarkdownUrlResolver } from \"./markdown-url\";\nimport { $createStreamingTextNode } from \"./nodes/streaming-text-node\";\n\nconst sameAttributes = (left: LexicalNode, right: LexicalNode) => {\n const attributes = (node: LexicalNode) => {\n const { children: _children, ...rest } = node.exportJSON() as ReturnType<LexicalNode[\"exportJSON\"]> & {\n children?: unknown;\n };\n if (node instanceof ChatCodeLinkNode) {\n return JSON.stringify({ ...rest, href: node.__href, description: node.__description });\n }\n return JSON.stringify(rest);\n };\n return attributes(left) === attributes(right);\n};\n\nconst sameTextFormat = (left: TextNode, right: TextNode) =>\n left.getFormat() === right.getFormat() && left.getStyle() === right.getStyle();\nconst isChunkText = (node: LexicalNode | undefined): node is TextNode =>\n Boolean(node && $isTextNode(node) && [\"text\", \"streaming-text\"].includes(node.getType()));\nconst arrivingText = (next: TextNode, text: string) =>\n $createStreamingTextNode(text).setFormat(next.getFormat()).setStyle(next.getStyle());\n\nconst markNewText = (node: LexicalNode, animate: boolean) => {\n if (!animate) return node;\n if (isChunkText(node)) return arrivingText(node, node.getTextContent());\n const pending = [node];\n while (pending.length) {\n const current = pending.pop();\n if (!$isElementNode(current)) continue;\n for (const child of current.getChildren()) {\n if (isChunkText(child)) child.replace(arrivingText(child, child.getTextContent()));\n else pending.push(child);\n }\n }\n return node;\n};\n\nconst reconcileText = (next: TextNode, previous: LexicalNode[], start: number, animate: boolean) => {\n const nodes: LexicalNode[] = [];\n let cursor = start;\n let old = previous[cursor];\n let remaining = next.getTextContent();\n while (\n $isTextNode(old) &&\n sameTextFormat(old, next) &&\n old.getTextContent().length > 0 &&\n remaining.startsWith(old.getTextContent()) &&\n (remaining.length === old.getTextContentSize() || isChunkText(old))\n ) {\n remaining = remaining.slice(old.getTextContentSize());\n nodes.push(old);\n old = previous[++cursor];\n }\n if (remaining && isChunkText(old)) {\n // Reinterpreted text is already visible; do not fade it a second time.\n old.setTextContent(remaining).setFormat(next.getFormat()).setStyle(next.getStyle());\n nodes.push(old);\n cursor += 1;\n } else if (remaining) {\n nodes.push(animate ? arrivingText(next, remaining) : next.setTextContent(remaining).toggleUnmergeable());\n }\n return { nodes, cursor };\n};\n\n// Markdown may reinterpret unfinished syntax. Reconcile that affected structure,\n// while completed blocks and earlier chunks keep their keys and DOM.\nconst reconcileChildren = (parent: ElementNode, nextNodes: LexicalNode[], animate: boolean) => {\n const previous = parent.getChildren();\n const result: LexicalNode[] = [];\n let cursor = 0;\n for (const next of nextNodes) {\n const old = previous[cursor];\n if (isChunkText(next)) {\n const text = reconcileText(next, previous, cursor, animate);\n result.push(...text.nodes);\n cursor = text.cursor;\n continue;\n }\n if (old && sameAttributes(old, next)) {\n if ($isElementNode(old) && $isElementNode(next)) reconcileChildren(old, next.getChildren(), animate);\n result.push(old);\n cursor += 1;\n } else {\n result.push(markNewText(next, animate && !old));\n if (old) cursor += 1;\n }\n }\n if (result.length !== previous.length || result.some((node, index) => node.getKey() !== previous[index]?.getKey())) {\n parent.splice(0, parent.getChildrenSize(), result);\n }\n};\n\nexport const importStreamingMarkdownToLexical = (markdown: string, resolver?: MarkdownUrlResolver, animate = true) => {\n reconcileChildren($getRoot(), createMarkdownLexicalNodes(markdown, resolver), animate);\n};\n","import \"../theme/rich-text-theme.css\";\n\nimport { Flex, useRecipe } from \"@chakra-ui/react\";\nimport { ClickableLinkPlugin } from \"@lexical/react/LexicalClickableLinkPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport { $addUpdateTag, $getRoot } from \"lexical\";\nimport { useRef } from \"react\";\nimport { ChatCodeLinkNode } from \"@/components/chat-ui/links/chat-code-link-node\";\nimport type { ChatLinkProps } from \"@/components/chat-ui/links/chat-link\";\nimport { ChatLinkProvider, useChatLinkHandler } from \"@/components/chat-ui/links/chat-link-context\";\nimport { ChatLinkPlugin } from \"@/components/chat-ui/links/chat-link-plugin\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme } from \"../shared/editor-config\";\nimport { importMarkdownToLexical } from \"../shared/markdown-import\";\nimport { createMarkdownSourceDocument } from \"../shared/markdown-source-document\";\nimport { MarkdownTableSettingsContext } from \"../shared/markdown-table-settings-context\";\nimport type { MarkdownUrlResolver } from \"../shared/markdown-url\";\nimport { MarkdownUrlProvider } from \"../shared/markdown-url-context\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { ListMarkerWidthPlugin } from \"../shared/plugins/list-marker-width-plugin\";\nimport StateUpdatePlugin from \"../shared/plugins/StateUpdatePlugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { importStreamingMarkdownToLexical } from \"../shared/streaming-markdown\";\nimport { splitFrontmatter } from \"../utils/markdown\";\n\nexport interface RichMessageProps extends ChatLinkProps {\n debug?: boolean;\n defaultState: string;\n fullWidth?: boolean;\n isEditable?: boolean;\n streaming?: boolean;\n resolveMarkdownUrl?: MarkdownUrlResolver;\n onChange?: (value: string) => void;\n}\n\nconst SOURCE_IMPORT_TAG = \"markdown-source-import\";\nconst CHAT_TABLE_SETTINGS = { rowNumbers: false, wrapRows: true };\n\nexport function RichMessage(props: RichMessageProps) {\n const inherited = useChatLinkHandler();\n return (\n <ChatLinkProvider handler={props.linkHandler ?? inherited}>\n <RichMessageContent {...props} />\n </ChatLinkProvider>\n );\n}\n\nfunction RichMessageContent(props: RichMessageProps) {\n const {\n debug = false,\n defaultState = \"\",\n fullWidth = false,\n isEditable = false,\n streaming = false,\n resolveMarkdownUrl,\n onChange,\n } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const motion = useRecipe({ key: \"streamingText\" });\n const loadedRef = useRef({ body, resolver: resolveMarkdownUrl });\n const sourceDocumentRef = useRef<ReturnType<typeof createMarkdownSourceDocument> | null>(null);\n sourceDocumentRef.current ??= createMarkdownSourceDocument(body, resolveMarkdownUrl);\n\n const initialConfig = {\n namespace: \"RICH_MESSAGE\",\n nodes: [...editorNodes, ChatCodeLinkNode],\n editorState: () => {\n $addUpdateTag(SOURCE_IMPORT_TAG);\n if (isEditable) sourceDocumentRef.current?.importToLexical();\n else importMarkdownToLexical(body, resolveMarkdownUrl);\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\n theme: editorTheme,\n };\n\n return (\n <Flex\n className=\"rich-text\"\n data-rich-message=\"true\"\n css={motion()}\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"hidden\"\n >\n <MarkdownUrlProvider resolver={resolveMarkdownUrl}>\n <MarkdownTableSettingsContext value={CHAT_TABLE_SETTINGS}>\n <LexicalComposer initialConfig={initialConfig}>\n <StateUpdatePlugin\n value={body}\n onUpdate={(value: string) => {\n const previous = loadedRef.current;\n if (previous.body === value && previous.resolver === resolveMarkdownUrl) return;\n $addUpdateTag(SOURCE_IMPORT_TAG);\n if (isEditable) {\n const sourceDocument = createMarkdownSourceDocument(value, resolveMarkdownUrl);\n sourceDocumentRef.current = sourceDocument;\n sourceDocument.importToLexical();\n } else {\n importStreamingMarkdownToLexical(\n value,\n resolveMarkdownUrl,\n streaming && value.startsWith(previous.body),\n );\n }\n loadedRef.current = { body: value, resolver: resolveMarkdownUrl };\n }}\n />\n <LinkPlugin />\n <ChatLinkPlugin />\n <ClickableLinkPlugin newTab />\n <ListPlugin />\n <ListMarkerWidthPlugin />\n {isEditable ? <TabIndentationPlugin maxIndent={7} /> : null}\n <HorizontalRulePlugin />\n {!streaming ? <CodeHighlightingPlugin /> : null}\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={fullWidth} isRichMessage />}\n ErrorBoundary={LexicalErrorBoundary}\n />\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState, _editor, tags) => {\n if (tags.has(SOURCE_IMPORT_TAG)) return;\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = sourceDocumentRef.current?.exportFromLexical(root) ?? \"\";\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </MarkdownTableSettingsContext>\n </MarkdownUrlProvider>\n </Flex>\n );\n}\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Button, HStack, Icon, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport {\n Activity,\n Bell,\n CircleAlert,\n Component,\n ExternalLink,\n GitBranch,\n Info,\n MessageCircle,\n ScanSearch,\n Sparkles,\n} from \"lucide-react\";\nimport type { ComponentType, ReactNode } from \"react\";\n\nimport {\n type ActivityActor,\n ActivityComment,\n ActivityEvent,\n ActivityFeed,\n ActivityTimeline,\n} from \"@/components/activity\";\nimport { AlertMessage } from \"@/components/primitives/alert\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport { RichMessage } from \"../rich-message/rich-message\";\n\nexport type ResourceActivityFeedSize = \"comfortable\" | \"compact\";\n\nexport type ResourceActivityIconName =\n | \"activity\"\n | \"bell\"\n | \"circle-alert\"\n | \"component\"\n | \"external-link\"\n | \"git-branch\"\n | \"info\"\n | \"message-circle\"\n | \"scan-search\"\n | \"sparkles\";\n\nexport interface ResourceActivityRelatedResource {\n id: string;\n type: string;\n label: string;\n}\n\nexport interface ResourceActivityFeedAction {\n id: string;\n label: string;\n icon?: ResourceActivityIconName;\n}\n\nexport interface ResourceActivityFeedAttention {\n statusLabel?: string;\n icon?: ResourceActivityIconName;\n actions?: readonly ResourceActivityFeedAction[];\n}\n\ninterface ResourceActivityFeedItemBase {\n id: string;\n createdAt: string;\n timestampLabel?: string;\n actor?: ActivityActor;\n icon?: ResourceActivityIconName;\n relatedResources?: readonly ResourceActivityRelatedResource[];\n}\n\nexport interface ResourceActivityFeedEventItem extends ResourceActivityFeedItemBase {\n kind: \"event\";\n summary: string;\n}\n\nexport interface ResourceActivityFeedMessageItem extends ResourceActivityFeedItemBase {\n kind: \"message\";\n markdown: string;\n attention?: ResourceActivityFeedAttention;\n}\n\nexport type ResourceActivityFeedItem = ResourceActivityFeedEventItem | ResourceActivityFeedMessageItem;\n\nexport interface ResourceActivityFeedProps extends Omit<StackProps, \"children\"> {\n items: readonly ResourceActivityFeedItem[];\n size?: ResourceActivityFeedSize;\n isLoading?: boolean;\n error?: string | null;\n hasMore?: boolean;\n isLoadingMore?: boolean;\n emptyTitle?: string;\n emptyDescription?: string;\n errorTitle?: string;\n loadMoreLabel?: string;\n loadingLabel?: string;\n fallbackActorName?: string;\n formatTimestamp?: (createdAt: string, item: ResourceActivityFeedItem) => ReactNode;\n onActionSelect?: (action: ResourceActivityFeedAction, item: ResourceActivityFeedMessageItem) => void;\n onLoadMore?: () => void;\n onRelatedResourceSelect?: (resource: ResourceActivityRelatedResource, item: ResourceActivityFeedItem) => void;\n}\n\ninterface ItemActionsProps {\n item: ResourceActivityFeedItem;\n size: ResourceActivityFeedSize;\n onActionSelect?: ResourceActivityFeedProps[\"onActionSelect\"];\n onRelatedResourceSelect?: ResourceActivityFeedProps[\"onRelatedResourceSelect\"];\n}\n\ninterface ResourceActivityItemProps extends ItemActionsProps {\n fallbackActorName: string;\n formatTimestamp: NonNullable<ResourceActivityFeedProps[\"formatTimestamp\"]>;\n}\n\nconst iconComponents: Record<ResourceActivityIconName, ComponentType> = {\n activity: Activity,\n bell: Bell,\n \"circle-alert\": CircleAlert,\n component: Component,\n \"external-link\": ExternalLink,\n \"git-branch\": GitBranch,\n info: Info,\n \"message-circle\": MessageCircle,\n \"scan-search\": ScanSearch,\n sparkles: Sparkles,\n};\n\nconst ActivityIcon = (props: { name: ResourceActivityIconName }) => {\n const IconComponent = iconComponents[props.name];\n return <Icon as={IconComponent} boxSize=\"13px\" />;\n};\n\nconst ItemActions = (props: ItemActionsProps) => {\n const { item, size, onActionSelect, onRelatedResourceSelect } = props;\n const attentionActions = item.kind === \"message\" ? item.attention?.actions : undefined;\n if (!item.relatedResources?.length && !attentionActions?.length) return null;\n\n return (\n <HStack gap=\"2xs\" flexWrap=\"wrap\">\n {attentionActions?.map((action) => (\n <Button\n key={action.id}\n type=\"button\"\n size={size === \"compact\" ? \"2xs\" : \"xs\"}\n variant=\"outline\"\n disabled={!onActionSelect}\n onClick={() => onActionSelect?.(action, item as ResourceActivityFeedMessageItem)}\n >\n {action.icon ? <ActivityIcon name={action.icon} /> : null}\n {action.label}\n </Button>\n ))}\n {item.relatedResources?.map((resource) => (\n <Button\n key={`${resource.type}:${resource.id}`}\n type=\"button\"\n size={size === \"compact\" ? \"2xs\" : \"xs\"}\n variant=\"ghost\"\n disabled={!onRelatedResourceSelect}\n onClick={() => onRelatedResourceSelect?.(resource, item)}\n >\n {resource.label}\n </Button>\n ))}\n </HStack>\n );\n};\n\nconst AttentionStatus = (props: { attention: ResourceActivityFeedAttention }) => {\n const { attention } = props;\n if (!attention.statusLabel) return null;\n\n return (\n <HStack gap=\"2xs\" color=\"fg.warning\">\n <ActivityIcon name={attention.icon ?? \"bell\"} />\n <Text textStyle=\"label/XS/medium\">{attention.statusLabel}</Text>\n </HStack>\n );\n};\n\nconst ResourceActivityItem = (props: ResourceActivityItemProps) => {\n const { item, size, fallbackActorName, formatTimestamp, onActionSelect, onRelatedResourceSelect } = props;\n const actor = item.actor ?? { name: fallbackActorName };\n const timestamp = (\n <time dateTime={item.createdAt}>{item.timestampLabel ?? formatTimestamp(item.createdAt, item)}</time>\n );\n\n if (item.kind === \"event\") {\n return (\n <ActivityTimeline>\n <ActivityEvent\n actor={actor}\n icon={item.icon ? <ActivityIcon name={item.icon} /> : undefined}\n timestamp={timestamp}\n paddingX={size === \"compact\" ? \"sm\" : \"md\"}\n >\n <Text as=\"span\">{item.summary}</Text>\n <ItemActions item={item} size={size} onRelatedResourceSelect={onRelatedResourceSelect} />\n </ActivityEvent>\n </ActivityTimeline>\n );\n }\n\n const attentionIcon = item.attention?.icon ?? \"bell\";\n\n return (\n <ActivityComment\n actor={actor}\n icon={item.attention ? <ActivityIcon name={attentionIcon} /> : undefined}\n iconColor={item.attention ? \"fg.warning\" : undefined}\n iconBackground={item.attention ? \"bg.warning\" : undefined}\n timestamp={timestamp}\n actions={item.attention ? <AttentionStatus attention={item.attention} /> : undefined}\n tone={item.attention ? \"attention\" : \"default\"}\n size={size}\n >\n <Stack gap={size === \"compact\" ? \"xs\" : \"sm\"}>\n <RichMessage defaultState={item.markdown} fullWidth />\n <ItemActions\n item={item}\n size={size}\n onActionSelect={onActionSelect}\n onRelatedResourceSelect={onRelatedResourceSelect}\n />\n </Stack>\n </ActivityComment>\n );\n};\n\nconst defaultFormatTimestamp = (createdAt: string) => createdAt;\n\nexport const ResourceActivityFeed = (props: ResourceActivityFeedProps) => {\n const {\n items,\n size = \"comfortable\",\n isLoading = false,\n error,\n hasMore = false,\n isLoadingMore = false,\n emptyTitle = \"No activity yet\",\n emptyDescription = \"Events and messages will appear here.\",\n errorTitle = \"Activity unavailable\",\n loadMoreLabel = \"Load more\",\n loadingLabel = \"Loading activity\",\n fallbackActorName = \"System\",\n formatTimestamp = defaultFormatTimestamp,\n onActionSelect,\n onLoadMore,\n onRelatedResourceSelect,\n ...rootProps\n } = props;\n\n if (error) {\n return (\n <AlertMessage status=\"error\" colorPalette=\"red\" title={errorTitle} size=\"sm\" {...rootProps}>\n {error}\n </AlertMessage>\n );\n }\n\n if (isLoading && items.length === 0) {\n return (\n <HStack role=\"status\" aria-live=\"polite\" gap=\"xs\" color=\"fg.muted\" {...rootProps}>\n <Spinner size=\"sm\" />\n <Text textStyle=\"label/S/regular\">{loadingLabel}</Text>\n </HStack>\n );\n }\n\n if (items.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} {...rootProps} />;\n }\n\n return (\n <ActivityFeed gap={size === \"compact\" ? \"sm\" : \"md\"} {...rootProps}>\n {items.map((item) => (\n <ResourceActivityItem\n key={item.id}\n item={item}\n size={size}\n fallbackActorName={fallbackActorName}\n formatTimestamp={formatTimestamp}\n onActionSelect={onActionSelect}\n onRelatedResourceSelect={onRelatedResourceSelect}\n />\n ))}\n {hasMore ? (\n <Button\n type=\"button\"\n width=\"full\"\n size={size === \"compact\" ? \"xs\" : \"sm\"}\n variant=\"ghost\"\n loading={isLoadingMore}\n onClick={onLoadMore}\n >\n {loadMoreLabel}\n </Button>\n ) : null}\n </ActivityFeed>\n );\n};\n","import { Box, Table, Text, Textarea } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport type { CodeEditorProps, DataTableProps } from \"../types/rich-text-components\";\n\nconst scaledSmallFontSize = \"calc(var(--chakra-font-sizes-sm) * var(--rich-text-font-scale))\";\n\nconst formatValue = (value: unknown) => {\n if (value === null || value === undefined) return \"-\";\n if (typeof value === \"string\") return value.length ? value : \"-\";\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value).toUpperCase();\n if (value instanceof Date) return value.toISOString();\n return JSON.stringify(value);\n};\n\nexport const DefaultRichTextCodeEditor = (props: CodeEditorProps) => {\n const { defaultCode = \"\", isEditable = false, showLineNumbers = false, disableScroll = false } = props;\n\n if (isEditable) {\n return (\n <Textarea\n defaultValue={defaultCode}\n fontFamily=\"mono\"\n fontSize={scaledSmallFontSize}\n resize=\"vertical\"\n minHeight=\"100%\"\n />\n );\n }\n\n const lines = showLineNumbers ? defaultCode.split(\"\\n\") : [defaultCode];\n\n const codeBlock = (\n <Box\n as=\"pre\"\n margin={0}\n padding=\"sm\"\n fontFamily=\"mono\"\n fontSize={scaledSmallFontSize}\n lineHeight=\"1.5\"\n background=\"bg.code\"\n borderRadius=\"md\"\n width=\"100%\"\n overflowY={disableScroll ? \"hidden\" : undefined}\n >\n {showLineNumbers ? (\n <Box as=\"code\" display=\"grid\" gridTemplateColumns=\"auto 1fr\" columnGap=\"sm\">\n {lines.map((line, index) => (\n <Box as=\"span\" key={`${index}-${line}`} display=\"contents\">\n <Text as=\"span\" color=\"fg.muted\" textAlign=\"right\" fontSize=\"inherit\">\n {index + 1}\n </Text>\n <Text as=\"span\" fontSize=\"inherit\">\n {line.length ? line : \" \"}\n </Text>\n </Box>\n ))}\n </Box>\n ) : (\n <Box as=\"code\">{defaultCode}</Box>\n )}\n </Box>\n );\n\n if (disableScroll) return codeBlock;\n\n return (\n <ScrollArea width=\"100%\" background=\"bg.code\" borderRadius=\"md\" showHorizontalScrollbar>\n {codeBlock}\n </ScrollArea>\n );\n};\n\nexport const DefaultRichTextDataTable = (props: DataTableProps) => {\n const { data, fullWidth = false, noBorder = false, hiddenColumns = [] } = props;\n\n if (!data.length) {\n return (\n <Box padding=\"sm\" borderWidth={noBorder ? \"0\" : \"1px\"} borderColor=\"border.subtle\">\n <Text textStyle=\"label/S/regular\" fontSize={scaledSmallFontSize} color=\"fg.muted\">\n No data\n </Text>\n </Box>\n );\n }\n\n const hiddenSet = new Set(hiddenColumns);\n const columns = Object.keys(data[0] ?? {}).filter((key) => !hiddenSet.has(key));\n\n return (\n <ScrollArea maxWidth=\"100%\" showHorizontalScrollbar showVerticalScrollbar={false}>\n <Table.Root\n size=\"sm\"\n width={fullWidth ? \"100%\" : \"fit-content\"}\n borderWidth={noBorder ? \"0\" : \"1px\"}\n borderColor=\"border.subtle\"\n >\n <Table.Header>\n <Table.Row background=\"bg.muted\">\n {columns.map((column) => (\n <Table.ColumnHeader key={column} textTransform=\"none\" paddingX=\"xs\" paddingY=\"2xs\">\n <Text textStyle=\"label/S/medium\" fontSize={scaledSmallFontSize}>\n {column}\n </Text>\n </Table.ColumnHeader>\n ))}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {data.map((row, rowIndex) => (\n <Table.Row key={`${rowIndex}-${columns.join(\"-\")}`}>\n {columns.map((column) => (\n <Table.Cell key={`${rowIndex}-${column}`} paddingX=\"xs\" paddingY=\"2xs\">\n <Text textStyle=\"paragraph/S/regular\" fontSize={scaledSmallFontSize}>\n {formatValue(row[column])}\n </Text>\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n </ScrollArea>\n );\n};\n","import type { ResourceType } from \"../types\";\n\nexport function inferResourceTypeFromMediaType(mediaType: string) {\n const normalized = mediaType.toLowerCase().trim();\n if (!normalized) return \"text\";\n\n if (normalized.startsWith(\"image/\")) return \"image\";\n if (normalized === \"application/pdf\") return \"pdf\";\n if (normalized === \"text/markdown\") return \"markdown\";\n if (normalized === \"text/csv\" || normalized === \"text/tab-separated-values\") return \"table\";\n if (normalized === \"application/json\") return \"json\";\n if (normalized.startsWith(\"text/\")) return \"text\";\n if (normalized.startsWith(\"application/\")) return \"text\";\n\n const fallback: ResourceType = \"text\";\n return fallback;\n}\n","const extensionToMediaType: Record<string, string> = {\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\",\n mp4: \"video/mp4\",\n mov: \"video/quicktime\",\n ts: \"text/typescript\",\n tsx: \"text/typescript\",\n js: \"text/javascript\",\n jsx: \"text/javascript\",\n sql: \"text/x-sql\",\n yml: \"text/yaml\",\n yaml: \"text/yaml\",\n};\n\nexport function mediaTypeFromPath(path: string) {\n const cleaned = path.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = cleaned.split(\".\").pop()?.toLowerCase();\n if (!ext) return null;\n return extensionToMediaType[ext] ?? null;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-area-crJfiiuF.js","names":["Tooltip","ChakraTooltip","Portal","React","TooltipProps","RootProps","children","ReactElement","portalled","portalRef","RefObject","HTMLElement","content","ReactNode","contentProps","ContentProps","disabled","forwardRef","HTMLDivElement","props","ref","$","_c","ids","rest","t0","undefined","isEmptyContent","_temp2","childId","id","t1","trigger","t2","t3","t4","t5","t6","_temp","child","trim","length","node","arr","Children","toArray","every","Tooltip","_c","isEmptyContent","ChakraTooltip","ScrollArea","ChakraScrollArea","React","VerticalScrollbarProps","Omit","ScrollbarProps","HorizontalScrollbarProps","ScrollAreaProps","RootProps","viewportRef","Ref","HTMLDivElement","contentRef","viewportProps","ViewportProps","contentProps","ContentProps","verticalScrollbarProps","horizontalScrollbarProps","showVerticalScrollbar","showHorizontalScrollbar","showCorner","forwardRef","props","ref","$","_c","children","rest","t0","t1","t2","t3","size","undefined","t4","style","minWidth","mergedContentProps","t5","t6","t7","t8","t9","t10","ScrollArea","_c","ChakraScrollArea","React","Tooltip$1","$","c","children","content","contentProps","disabled","ids","portalRef","rest","t0","props","portalled","_temp2","childId","t1","t2","Tooltip","t3","t4","ref","t5","Portal","t6","_temp","child","node","arr","ScrollArea$1","contentRef","horizontalScrollbarProps","verticalScrollbarProps","viewportProps","viewportRef","showVerticalScrollbar","showHorizontalScrollbar","showCorner","size","mergedContentProps","ScrollArea","t7","t8","t9","t10"],"sources":["../src/components/primitives/tooltip.tsx","../src/components/primitives/scroll-area.tsx"],"sourcesContent":["import { Tooltip as ChakraTooltip, Portal } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface TooltipProps extends ChakraTooltip.RootProps {\n children?: React.ReactElement;\n portalled?: boolean;\n portalRef?: React.RefObject<HTMLElement>;\n content: React.ReactNode;\n contentProps?: ChakraTooltip.ContentProps;\n disabled?: boolean;\n}\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(props, ref) {\n const { children, disabled, portalled = true, content, contentProps, portalRef, ids, ...rest } = props;\n\n const isEmptyContent = (node: React.ReactNode): boolean => {\n if (node === null || node === undefined || node === false) return true;\n const arr = React.Children.toArray(node);\n if (arr.length === 0) return true;\n return arr.every((child) => (typeof child === \"string\" ? child.trim().length === 0 : false));\n };\n\n if (disabled || isEmptyContent(content)) return children;\n\n // A trigger child's own id replaces the generated trigger id, and Zag finds the anchor by that id.\n const childId = (children?.props as { id?: string } | undefined)?.id;\n\n return (\n <ChakraTooltip.Root openDelay={100} closeDelay={100} ids={{ trigger: childId, ...ids }} {...rest}>\n <ChakraTooltip.Trigger asChild>{children}</ChakraTooltip.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraTooltip.Positioner>\n <ChakraTooltip.Content ref={ref} {...contentProps}>\n {content}\n </ChakraTooltip.Content>\n </ChakraTooltip.Positioner>\n </Portal>\n </ChakraTooltip.Root>\n );\n});\n","import { ScrollArea as ChakraScrollArea } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\ntype VerticalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\ntype HorizontalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\n\nexport interface ScrollAreaProps extends ChakraScrollArea.RootProps {\n viewportRef?: React.Ref<HTMLDivElement>;\n contentRef?: React.Ref<HTMLDivElement>;\n viewportProps?: ChakraScrollArea.ViewportProps;\n contentProps?: ChakraScrollArea.ContentProps;\n verticalScrollbarProps?: VerticalScrollbarProps;\n horizontalScrollbarProps?: HorizontalScrollbarProps;\n showVerticalScrollbar?: boolean;\n showHorizontalScrollbar?: boolean;\n showCorner?: boolean;\n}\n\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(props, ref) {\n const {\n children,\n viewportRef,\n contentRef,\n viewportProps,\n contentProps,\n verticalScrollbarProps,\n horizontalScrollbarProps,\n showVerticalScrollbar = true,\n showHorizontalScrollbar = false,\n showCorner = showVerticalScrollbar && showHorizontalScrollbar,\n size = \"xs\",\n ...rest\n } = props;\n\n const mergedContentProps = showHorizontalScrollbar\n ? contentProps\n : { ...contentProps, style: { minWidth: 0, ...contentProps?.style } };\n\n return (\n <ChakraScrollArea.Root ref={ref} size={size} {...rest}>\n <ChakraScrollArea.Viewport {...viewportProps} ref={viewportRef}>\n <ChakraScrollArea.Content {...mergedContentProps} ref={contentRef}>\n {children}\n </ChakraScrollArea.Content>\n </ChakraScrollArea.Viewport>\n {showVerticalScrollbar ? (\n <ChakraScrollArea.Scrollbar zIndex=\"2\" {...verticalScrollbarProps} borderRadius={\"xs\"} />\n ) : null}\n {showHorizontalScrollbar ? (\n <ChakraScrollArea.Scrollbar\n orientation=\"horizontal\"\n zIndex=\"2\"\n {...horizontalScrollbarProps}\n borderRadius={\"xs\"}\n />\n ) : null}\n {showCorner ? <ChakraScrollArea.Corner zIndex=\"2\" /> : null}\n </ChakraScrollArea.Root>\n );\n});\n"],"mappings":"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"}
|