@pstdio/ui 0.39.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/{MermaidComponent-81jr28u4.js → MermaidComponent-BCiI63_G.js} +3 -3
  2. package/dist/{MermaidComponent-81jr28u4.js.map → MermaidComponent-BCiI63_G.js.map} +1 -1
  3. package/dist/chat-question-bubble-w2vMbFsS.js +68 -0
  4. package/dist/chat-question-bubble-w2vMbFsS.js.map +1 -0
  5. package/dist/chat-ui.d.ts +94 -17
  6. package/dist/chat-ui.js +2240 -1476
  7. package/dist/chat-ui.js.map +1 -1
  8. package/dist/{data-table-stats-row-CpRe_xK2.js → data-table-stats-row-EiTEONdY.js} +2 -2
  9. package/dist/{data-table-stats-row-CpRe_xK2.js.map → data-table-stats-row-EiTEONdY.js.map} +1 -1
  10. package/dist/data-table.d.ts +27 -7
  11. package/dist/data-table.js +1035 -872
  12. package/dist/data-table.js.map +1 -1
  13. package/dist/diff-bubble-DewUd_2w.js +61 -0
  14. package/dist/diff-bubble-DewUd_2w.js.map +1 -0
  15. package/dist/{diff-drawer-45rpk3aq.js → diff-drawer-BwZBOObe.js} +106 -85
  16. package/dist/diff-drawer-BwZBOObe.js.map +1 -0
  17. package/dist/diff-viewer-kOOd7C7h.js +574 -0
  18. package/dist/diff-viewer-kOOd7C7h.js.map +1 -0
  19. package/dist/diff.d.ts +11 -0
  20. package/dist/diff.js +107 -98
  21. package/dist/diff.js.map +1 -1
  22. package/dist/display-sort-control-DPxc0e5z.js +587 -0
  23. package/dist/display-sort-control-DPxc0e5z.js.map +1 -0
  24. package/dist/{workspace-badge-Brm3Xr3m.d.ts → host-storage-DP0RLj4i.d.ts} +15 -1
  25. package/dist/{index-BfFLdci8.d.ts → index-C9mywhyX.d.ts} +49 -13
  26. package/dist/index-D3UJyWWh.d.ts +501 -0
  27. package/dist/index.d.ts +38 -13
  28. package/dist/index.js +941 -908
  29. package/dist/index.js.map +1 -1
  30. package/dist/kanban-renderer.d.ts +2 -326
  31. package/dist/kanban-renderer.js +991 -610
  32. package/dist/kanban-renderer.js.map +1 -1
  33. package/dist/list-row-DM0DiIrN.js +1167 -0
  34. package/dist/list-row-DM0DiIrN.js.map +1 -0
  35. package/dist/{mermaid-renderer-DImi0fDp.js → mermaid-renderer-0PmNkOXI.js} +29 -29
  36. package/dist/mermaid-renderer-0PmNkOXI.js.map +1 -0
  37. package/dist/mermaid.js +1 -1
  38. package/dist/param-editor.js +2 -3
  39. package/dist/prism-JVIsQMoJ.js +1029 -0
  40. package/dist/prism-JVIsQMoJ.js.map +1 -0
  41. package/dist/{resource-badge-95WPVlZf.d.ts → resource-badge-nOWPqxFU.d.ts} +1 -0
  42. package/dist/rich-text-DM24VNQZ.js +10447 -0
  43. package/dist/rich-text-DM24VNQZ.js.map +1 -0
  44. package/dist/rich-text.d.ts +2 -2
  45. package/dist/rich-text.js +2 -2
  46. package/dist/style.css +1 -1
  47. package/dist/terminal.d.ts +5 -63
  48. package/dist/terminal.js +102 -122
  49. package/dist/terminal.js.map +1 -1
  50. package/dist/{theme-BsOWAIi2.js → theme-at0rtSnX.js} +441 -246
  51. package/dist/theme-at0rtSnX.js.map +1 -0
  52. package/dist/theme-kKuLN2jb.js +80 -0
  53. package/dist/theme-kKuLN2jb.js.map +1 -0
  54. package/dist/theme-preference-BV4cbJNB.js +115 -0
  55. package/dist/theme-preference-BV4cbJNB.js.map +1 -0
  56. package/dist/theme.js +3 -2
  57. package/dist/{tree-list-WhISG-cz.js → tree-list-Cqgl8mnN.js} +400 -377
  58. package/dist/tree-list-Cqgl8mnN.js.map +1 -0
  59. package/package.json +4 -4
  60. package/dist/diff-bubble-DZsarmSG.js +0 -61
  61. package/dist/diff-bubble-DZsarmSG.js.map +0 -1
  62. package/dist/diff-drawer-45rpk3aq.js.map +0 -1
  63. package/dist/diff-viewer-DJ1B5hxL.js +0 -558
  64. package/dist/diff-viewer-DJ1B5hxL.js.map +0 -1
  65. package/dist/list-row-uqD-q4gv.js +0 -1018
  66. package/dist/list-row-uqD-q4gv.js.map +0 -1
  67. package/dist/mermaid-renderer-DImi0fDp.js.map +0 -1
  68. package/dist/param-editor-BQd4AOUP.js +0 -225
  69. package/dist/param-editor-BQd4AOUP.js.map +0 -1
  70. package/dist/param-editor-field-BJ_rLUnV.js +0 -2385
  71. package/dist/param-editor-field-BJ_rLUnV.js.map +0 -1
  72. package/dist/prism-BStPsJSB.js +0 -658
  73. package/dist/prism-BStPsJSB.js.map +0 -1
  74. package/dist/rich-text-VYAmEigU.js +0 -6979
  75. package/dist/rich-text-VYAmEigU.js.map +0 -1
  76. package/dist/slider-hwHYe98I.js +0 -423
  77. package/dist/slider-hwHYe98I.js.map +0 -1
  78. package/dist/theme-BsOWAIi2.js.map +0 -1
  79. package/dist/theme-preference-pzfuK5cH.js +0 -101
  80. package/dist/theme-preference-pzfuK5cH.js.map +0 -1
  81. package/dist/tree-list-WhISG-cz.js.map +0 -1
  82. package/dist/types-DWA3enV6.d.ts +0 -182
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-text-DM24VNQZ.js","names":["Box","chakra","ContentEditable","LexicalContentEditable","ScrollArea","StyledEditable","ContentEditableProps","onRef","elem","HTMLDivElement","fullWidth","padding","isRichMessage","scrollable","t0","$","_c","t1","t2","t3","undefined","t4","t5","t6","t7","editor","t8","t9","Symbol","for","width","minH","t10","LexicalContentEditable","ContentEditable","_c","ScrollArea","ChatLinkCandidate","source","origin","ChatLinkHandler","resolveHref","candidate","resolveImageSource","Promise","describe","open","ChatLinkProps","linkHandler","ChatSourcePosition","line","column","endLine","ParsedChatLink","kind","path","position","href","reason","invalid","const","positive","value","Number","isSafeInteger","localSource","test","url","URL","hostname","pathname","replace","hash","search","filePosition","indexOf","match","exec","slice","index","undefined","isInlinePath","original","explicit","startsWith","shaped","includes","parseChatLink","dashboardOrigin","trim","local","file","decodeURIComponent","replaceAll","createContext","ReactNode","useContext","ChatLinkHandler","ChatLinkContext","undefined","ChatLinkProvider","props","$","_c","handler","children","t0","useChatLinkHandler","_c","Link","ReactNode","Tooltip","ChatLinkCandidate","parseChatLink","useChatLinkHandler","ChatLinkAnchor","props","$","_c","candidate","children","handler","parsed","window","undefined","location","origin","t0","resolveHref","href","kind","t1","describe","source","t2","t3","t4","t5","event","stopPropagation","metaKey","ctrlKey","shiftKey","altKey","button","preventDefault","open","event_0","key","t6","t7","_c","Tooltip","Box","ChatLinkAnchor","useChatLinkHandler","ResourceBadge","ReferenceLinkBadge","props","$","_c","href","handler","T0","T1","T2","t0","t1","t2","t3","t4","candidate","source","origin","const","t5","split","pop","label","describe","test","window","open","dispatchEvent","CustomEvent","detail","replace","location","assign","t6","t7","t8","_c","DecoratorNode","EditorConfig","LexicalEditor","LexicalNode","NodeKey","SerializedLexicalNode","Spread","ReactElement","ReferenceLinkBadge","SerializedReferenceLinkNode","href","label","ReferenceLinkNode","__href","__label","getType","clone","node","__key","constructor","key","createDOM","_config","_editor","HTMLElement","document","createElement","updateDOM","_prevNode","_dom","getTextContent","exportJSON","type","version","importJSON","serializedNode","$createReferenceLinkNode","decorate","$isReferenceLinkNode","TextMatchTransformer","$createReferenceLinkNode","$isReferenceLinkNode","ReferenceLinkNode","LINK_REGEXP","REFERENCE_LINK_TRANSFORMER","dependencies","export","node","href","__href","label","__label","regExp","importRegExp","replace","textNode","match","value","looksLikeUrl","test","type","EditorThemeClasses","theme","code","codeHighlight","atrule","attr","boolean","builtin","cdata","char","class","comment","constant","deleted","doctype","entity","function","important","inserted","keyword","namespace","number","operator","prolog","property","punctuation","regex","selector","string","symbol","tag","url","variable","embedBlock","base","focus","list","checklist","listitem","listitemChecked","listitemUnchecked","nested","olDepth","ol","ul","heading","h1","h2","h3","paragraph","text","underline","italic","link","quote","reference","table","tableCell","tableRow","tableCellHeader","layoutContainer","layoutItem","draggableBlockDemo","row","content","ViewFilterGroup","normalFilter","filter","conjunction","rules","groups","setAdvancedGroup","index","group","next","undefined","_","entry","map","position","_groups","normal","length","addAdvancedGroup","ReactNode","CollectionSavedView","CollectionViewsSource","ViewMode","NO_GROUPING","EnumOption","value","label","color","icon","EnumOptionsSource","subscribe","listener","getSnapshot","EnumOptions","AttributeType","kind","options","legacyValues","Record","isEnumOptionsSource","Array","isArray","AttributeKind","AttributeDisplayDescriptor","itemsAttributeId","CollectionBadgeJsonValue","CollectionBadgeJsonObject","key","CollectionBadgeResource","type","id","projectId","extensionId","metadata","CollectionBadgeItem","resource","AttributeDescriptor","filterable","groupable","sortable","displayable","editable","display","render","row","KanbanRendererRow","compare","a","b","AttributesSource","isAttributesSource","attributes","title","KanbanRendererSettings","viewMode","columnGrouping","rowGrouping","displayProperties","KanbanRendererSavedView","KanbanRendererCreateFieldType","KanbanRendererCreateField","description","placeholder","required","defaultValue","multiple","accept","KanbanRendererCreateLabels","cancel","properties","submitError","removeFile","KanbanRendererCreateRowConfig","submitLabel","fields","labels","KanbanRendererCreateSubmission","columnId","columnAttributeId","values","attributeValues","files","File","DEFAULT_KANBAN_RENDERER_SETTINGS","findAttribute","undefined","find","attribute","KanbanRendererViewsSource","AttributeType","EnumOption","isEnumOptionsSource","dedupeEnumOptions","options","seen","Set","filter","option","has","value","add","getEnumOptions","type","kind","getSnapshot","toTitleCase","replaceAll","split","chunk","length","map","toUpperCase","slice","join","findEnumOption","undefined","find","enumOptionLabel","label","VIEW_FILTER_CONDITIONS","ViewFilterCondition","enumOptionLabel","AttributeDescriptor","KanbanRendererRow","TITLE_FIELD","id","label","type","kind","filterable","sortable","withTitleField","attributes","some","attribute","findField","fields","find","field","isOptionField","canSortField","fieldConditions","EQUIVALENT_CONDITIONS","Partial","Record","acceptedCondition","condition","conditions","includes","equivalent","undefined","getAttributeValue","row","descriptor","raw","title","Array","isArray","filter","entry","getAttributeStringValues","value","String","DATE_ONLY","parseViewDate","day","exec","date","Date","Number","isNaN","getTime","formatFieldText","values","map","toLocaleDateString","ViewFilterGroup","ViewFilterRule","AttributeDescriptor","fieldConditions","defaultCondition","field","newRule","attributeId","id","condition","type","kind","value","setRuleAt","filter","index","rule","rules","undefined","_","entry","map","item","addRule","setConjunction","conjunction","selectRuleValues","negative","Array","isArray","createContext","useContext","CollectionItemLabelContext","useCollectionItemLabel","Calendar","CircleDashed","Hash","SquareCheck","Tags","Type","UserRound","AttributeDescriptor","FIELD_ICONS","string","number","date","boolean","enum","user","fieldIcon","field","type","kind","HStack","Icon","Text","Info","Tooltip","ParamEditorLabelProps","name","description","compact","ParamEditorLabel","props","$","_c","t0","undefined","t1","t2","t3","t4","t5","placement","strategy","hideWhenDetached","t6","_c","Tooltip","Stack","ReactNode","ParamEditorFieldLabel","FilterValuePanelProps","children","FilterValuePanel","props","$","_c","t0","Symbol","for","t1","_c","ParamEditorFieldLabel","Button","Icon","Text","ChevronDown","ElementType","SearchableMenu","RuleSelectOption","value","label","icon","iconColor","count","disabled","RuleSelectProps","options","onSelect","multiple","placeholder","selectedLabel","width","showSearch","variant","size","showSelectedIcon","open","onOpenChange","toList","Array","isArray","undefined","RuleSelect","props","$","_c","t0","t1","T0","selectedOptions","t10","t11","t12","t2","t3","t4","t5","t6","t7","t8","t9","selected","filter","option","includes","map","_temp","join","length","details","Symbol","for","strategy","hideWhenDetached","option_1","id","secondaryLabel","String","isDisabled","isSelected","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","option_0","_c","_temp","NumberInput","ChakraNumberInput","React","NumberInputProps","RootProps","NumberInputRoot","forwardRef","HTMLDivElement","props","ref","$","_c","children","rest","t0","Symbol","for","t1","NumberInputField","Input","NumberInput","_c","ChakraNumberInput","ViewFilterCondition","ViewFilterRule","ViewSortDirection","enumOptionLabel","AttributeDescriptor","CONDITION_LABELS","Record","contains","is","gt","gte","lt","lte","conditionLabel","condition","field","type","kind","pillConditionLabel","rule","value","single","Array","isArray","length","many","includes","RELATIVE_DAY","dayLabel","relative","exec","days","Number","unit","date","Date","isNaN","getTime","toLocaleDateString","optionLabel","ruleValueLabel","undefined","label","map","entry","join","String","DIRECTION_LABELS","boolean","number","enum","sortDirectionLabel","direction","ascending","descending","RELATIVE_DAY","Popover","Portal","createContext","ReactNode","RefObject","useContext","useEffect","useRef","ViewBarPopoverContext","ViewBarPopoverProps","open","onOpenChange","anchorRef","HTMLElement","width","placement","padding","testId","children","ViewBarPopover","props","$","_c","t0","t1","undefined","contentRef","nested","t2","t3","closeOnOutsidePointerDown","event","target","Node","current","contains","document","addEventListener","removeEventListener","t4","Symbol","for","mainAxis","t5","t6","strategy","hideWhenDetached","offset","getAnchorElement","t7","details","t8","t9","t10","t11","_c","Button","Input","Text","useRef","useState","NumberInputField","NumberInputRoot","dayLabel","RuleValueProps","FilterValuePanel","ViewBarPopover","ISO_DAY","NumberParameterValue","props","$","_c","rule","onChange","value","undefined","t0","String","t1","source","text","draft","setDraft","t2","details","Number","isFinite","valueAsNumber","t3","Symbol","for","t4","ScalarValueEditor","field","type","kind","test","event","target","event_0","DateBubbleValue","variant","localOpen","setLocalOpen","anchorRef","open","setOpen","onOpenChange","t5","t6","t7","ISO_DAY","_c","_Fragment","Editable","HStack","Icon","Input","Stack","Text","ViewFilterRule","Checkbox","getIconComponent","ScrollArea","AttributeDescriptor","ListRow","FilterValuePanel","RuleSelect","DateBubbleValue","ScalarValueEditor","RuleValueOption","value","label","count","icon","color","RuleValueProps","field","rule","options","onChange","variant","open","onOpenChange","valueKind","condition","includes","type","kind","Array","isArray","toggle","values","filter","entry","withSavedOptions","listValue","some","option","map","NumberValue","props","$","_c","width","t0","t1","String","t2","event","target","undefined","Number","t3","TextValue","TextBubbleValue","details","edit","details_0","details_1","t4","t5","Symbol","for","t6","RuleValueControl","suppliedOptions","T0","t7","t8","bb0","t9","t10","selectedLabel","allValuesLabel","_temp","join","_temp2","t11","OptionChecklist","T1","selected","overscrollBehavior","checked","tabIndex","RuleValueEditor","option_0","option_1","iconColor","_c","_temp","_temp2","ScrollArea","Checkbox","HStack","Icon","IconButton","Stack","Text","ViewFilterCondition","ViewFilterRule","X","AttributeDescriptor","useCollectionItemLabel","fieldConditions","conditionLabel","selectRuleValues","RuleValueEditor","RuleValueOption","RuleSelect","ViewFilterRuleEditorProps","field","rule","options","onChange","onDelete","changeCondition","condition","attributeId","ConditionSelectProps","width","variant","open","onOpenChange","OptionConditionSelect","props","$","_c","empty","t0","Symbol","for","negative","includes","positiveCondition","type","kind","negativeCondition","many","Array","isArray","value","length","t1","t2","label","t3","t4","t5","t6","next","t7","ConditionSelect","boolean","optionField","listRule","T0","conditions","choices","condition_0","map","selectedCondition","source","updated","ViewFilterRuleEditor","itemLabel","t8","_c","HStack","Icon","IconButton","Text","normalizeBooleanViewRule","ViewFilterGroup","ViewFilterRule","X","AttributeDescriptor","useCollectionItemLabel","fieldIcon","findField","newRule","selectRuleValues","RuleValueControl","RuleValueOption","RuleSelect","ConditionSelect","Conjunction","RuleLeadProps","index","conjunction","onConjunctionChange","RuleLead","props","$","_c","label","t0","Symbol","for","value","t1","t2","FilterRuleRowProps","fields","rule","optionsFor","field","onChange","onDelete","FilterRuleRow","savedRule","attributeId","type","itemLabel","map","_temp","t3","kind","undefined","t4","id","next","t5","t6","t7","t8","t9","t10","entry","icon","_c","_temp","_Fragment","Box","Button","HStack","Stack","Text","ViewFilterGroup","Plus","AttributeDescriptor","addRule","newRule","setConjunction","setRuleAt","FilterRuleRow","RuleValueOption","AdvancedFilterMenuProps","fields","filter","optionsFor","field","onChange","AdvancedFilterMenu","props","$","_c","firstField","t0","rules","map","rule","index","attributeId","conjunction","next","undefined","t1","length","t2","t3","Symbol","for","t4","t5","t6","_c","Button","HStack","Icon","IconButton","ViewFilterGroup","ListFilter","X","useRef","useState","AttributeDescriptor","AdvancedFilterMenu","useCollectionItemLabel","findField","pillConditionLabel","ruleValueLabel","RuleValueOption","ViewBarPopover","AdvancedFilterPillProps","group","fields","optionsFor","field","onChange","onRemove","AdvancedFilterPill","props","$","_c","open","setOpen","rules","length","anchorRef","itemLabel","t0","conjunction","t1","rule","attributeId","subject","type","kind","value","label","filter","Boolean","join","map","summary","t2","Symbol","for","t3","t4","t5","t6","t7","t8","t9","_c","normalizeBooleanViewRule","ViewFilterGroup","ViewFilterRule","AttributeDescriptor","KanbanRendererRow","acceptedCondition","findField","getAttributeStringValues","getAttributeValue","parseViewDate","RowTest","row","RELATIVE_DAY","ISO_DAY","dayKey","date","Date","getFullYear","getMonth","getDate","resolveViewDay","value","today","relative","exec","offset","Number","iso","undefined","rowDay","rowNumber","isFinite","trim","rowText","field","join","toLocaleLowerCase","compareTests","Record","left","right","is","gt","gte","lt","lte","is-before","is-after","is-on-or-before","is-on-or-after","ordered","read","condition","target","test","compileListRule","length","matched","filter","entry","includes","Set","size","compileTextRule","needle","compileValueRule","kind","type","Array","isArray","actual","compileRule","rule","fields","attributeId","filterable","compileGroup","group","tests","rules","flatMap","child","groups","push","conjunction","some","every","filterRowsByView","rows","TRow","countFilterRules","reduce","count","HStack","Icon","IconButton","Text","normalizeBooleanViewRule","ViewFilterRule","X","AttributeDescriptor","useCollectionItemLabel","findField","selectRuleValues","RuleValueControl","RuleValueOption","ConditionSelect","FilterRulePillProps","fields","rule","options","open","onOpenChange","onChange","onRemove","FilterRulePill","props","$","_c","savedRule","field","t0","attributeId","type","itemLabel","label","boolean","kind","t1","t2","value","t3","t4","undefined","t5","t6","Symbol","for","t7","t8","_c","_Fragment","Box","Button","Dialog","Icon","IconButton","Input","Tabs","Text","Copy","LayersPlus","Pencil","Trash2","FormEvent","useState","ResourceContextAction","ResourceContextMenu","Tooltip","CollectionSavedView","CollectionViewState","CollectionViewsSource","RenameViewDialogProps","title","onClose","onRename","RenameViewDialog","props","$","_c","value","setValue","t0","event","preventDefault","nextTitle","trim","submit","t1","details","open","t2","Symbol","for","t3","t4","event_0","target","t5","t6","t7","t8","t9","t10","t11","t12","nextViewTitle","views","index","length","some","view","CollectionViewTabsProps","TSettings","builtIn","activeViewId","viewsSource","dirty","busy","state","onActivate","run","action","Promise","createView","input","Parameters","CollectionViewTabs","renameTarget","setRenameTarget","key","label","isDisabled","icon","onClick","settings","filter","sorts","copyFrom","id","separatorBefore","onDeleteView","actionsFor","view_0","find","entry","view_1","placement","map","undefined","onUpdateView","_c","Tooltip","_Fragment","ViewFilterGroup","ViewSort","ViewFilterCondition","ViewFilterRule","ViewSortDirection","EMPTY_VIEW_FILTER","conjunction","rules","CollectionSavedView","id","title","settings","TSettings","filter","sorts","isDefault","CollectionViewState","CollectionViewsSource","views","builtIn","defaultViewId","onCreateView","input","copyFrom","Promise","onUpdateView","Partial","onDeleteView","onSetDefaultView","Box","Button","Icon","Stack","normalizeBooleanViewRule","ViewFilterRule","Check","X","useState","AttributeDescriptor","ListRow","Checkbox","ScrollArea","newRule","selectRuleValues","RuleValueEditor","RuleValueOption","FilterValuePanel","FilterPickerValuesProps","field","rule","options","onSelectRule","ScalarPickerValue","props","$","_c","value","setValue","text","type","kind","complete","undefined","t0","submit","t1","event","key","preventDefault","t2","Symbol","for","overscrollBehavior","t3","t4","t5","t6","t7","FilterPickerValues","scalar","bb0","source","includes","condition","map","String","Boolean","tabIndex","id","value_0","_c","ScrollArea","Checkbox","Box","HStack","Icon","Input","Stack","Text","ViewFilterGroup","ViewFilterRule","ChevronRight","ListFilter","Search","useState","ScrollArea","AttributeDescriptor","ListRow","fieldIcon","isOptionField","FilterPickerValues","RuleValueOption","FilterMenuProps","fields","filter","optionsFor","field","onSelectRule","rule","onAddAdvanced","onClear","contentProps","p","display","flexDirection","gap","const","FilterMenu","props","$","_c","query","setQuery","t0","optionFields","activeId","setActiveId","id","T0","T1","T2","t1","t10","t11","t12","t13","t14","t15","t2","t3","t4","t5","t6","t7","t8","t9","needle","trim","toLocaleLowerCase","visible","label","includes","t16","field_0","active","find","t17","Symbol","for","t18","event","target","value","t19","overscrollBehavior","map","field_1","rules","attributeId","length","groups","_c","optionFields","ScrollArea","ViewFilterGroup","ViewFilterRule","ViewSort","useStore","persist","createStore","StoreApi","createHostPersistStorage","createHostStoreRegistry","HostStorage","useHostStorage","AttributeDescriptor","normalFilter","addRule","newRule","setRuleAt","CollectionSavedView","EMPTY_VIEW_FILTER","CollectionViewSnapshot","settings","TSettings","filter","sorts","expandedGroups","Record","activeViewId","CollectionViewMenu","CollectionViewStoreInitialState","CollectionViewStoreState","openMenu","openRuleIndex","setOpenMenu","menu","setOpenRuleIndex","index","startRule","field","selectRule","rule","setSettings","Partial","setFilter","setSorts","setExpandedGroup","groupId","isExpanded","activateView","view","reset","CreateCollectionViewStoreOptions","storageKey","storage","initialState","STORE_NAMESPACE","createCollectionViewStore","options","snapshot","slice","set","state","current","rules","findIndex","attributeId","id","length","entry","Array","isArray","value","undefined","structuredClone","name","version","migrate","merge","persisted","restored","partialize","AnyCollectionViewStore","hostCollectionViewStore","getCollectionViewStore","useCollectionViewStore","selector","$","_c","t0","t1","_c","normalizeBooleanViewRule","ViewFilterGroup","AttributeDescriptor","normalizeBooleanViewFilter","filter","fields","rules","map","rule","field","find","id","attributeId","type","groups","group","changed","some","index","ViewFilterGroup","useEffect","useRef","useStore","useHostStorage","AttributeDescriptor","normalFilter","CollectionSavedView","CollectionViewState","CollectionViewsSource","EMPTY_VIEW_FILTER","normalizeBooleanViewFilter","CollectionViewStoreInitialState","getCollectionViewStore","UNORDERED_SETTINGS","Set","comparableSettings","settings","Object","entries","Record","sort","left","right","localeCompare","map","key","value","has","Array","isArray","comparableFilter","filter","conjunction","rules","rule","attributeId","condition","groups","length","undefined","isCollectionViewDirty","view","TSettings","state","comparable","JSON","stringify","sorts","direction","CollectionViewsInput","storageKey","fields","initialState","viewsSource","defaultViews","defaultActiveViewId","useCollectionViews","input","$","_c","t0","t1","t2","t3","store","activeViewId","_temp","t4","t5","t6","t7","id","title","defaults","t8","views","_temp2","sourceViews","t9","view_0","filter_0","t10","defaultViewId","t11","find","_temp3","t12","t13","t14","some","view_2","defaultId","previous","t15","t16","state_0","getState","normalized","setFilter","active","view_3","prior","current","view_5","fallback","view_4","activateView","t17","builtIn","view_1","isDefault","_c","_temp","_temp2","_temp3","HStack","Icon","IconButton","Input","Text","Search","X","useRef","useState","Tooltip","ViewSearchFieldProps","value","onValueChange","resultLabel","ViewSearchField","props","$","_c","open","setOpen","inputRef","t0","close","t1","Symbol","for","setTimeout","current","focus","t2","event","target","t3","t4","event_0","key","t5","t6","t7","t8","t9","_c","Tooltip","Box","Button","HStack","Icon","Stack","Text","ListFilter","RotateCcw","ReactNode","RefObject","useRef","useState","Tooltip","AttributeDescriptor","addAdvancedGroup","normalFilter","setAdvancedGroup","AdvancedFilterPill","CollectionItemLabelContext","findField","countFilterRules","FilterRulePill","setRuleAt","CollectionViewTabs","CollectionSavedView","CollectionViewsSource","EMPTY_VIEW_FILTER","FilterMenu","RuleValueOption","CollectionViewStoreInitialState","CollectionViewStoreState","useCollectionViewStore","isCollectionViewDirty","ViewBarPopover","ViewSearchField","CollectionViewBarProps","storageKey","itemLabel","initialState","TSettings","views","builtIn","viewsSource","fields","optionsFor","field","search","onSearchChange","value","searchResultLabel","leading","actions","displayControl","align","CountButtonProps","label","icon","count","buttonRef","HTMLButtonElement","onClick","CountButton","props","$","_c","t0","t1","t2","t3","t4","CollectionViewBar","store","state","activeViewId","settings","sorts","openMenu","openRuleIndex","filter","activateView","setFilter","setOpenMenu","setOpenRuleIndex","selectRule","activeView","find","view","id","dirty","filterFields","filterable","filterButtonRef","error","setError","busy","setBusy","open","run","action","Promise","undefined","failure","Error","message","String","createView","input","Parameters","onCreateView","optionsForId","showCriteria","rules","length","Boolean","groups","addAdvanced","map","rule","index","attributeId","isOpen","next","group","onUpdateView","_c","Tooltip","_Fragment","ReactNode","CollectionViewBar","AttributeDescriptor","DataTableViewsSource","useDataTableView","DataTableHeaderProps","itemLabel","view","ReturnType","viewsSource","displayControl","actions","noOptions","_field","DataTableHeader","props","$","_c","searching","deferredSearch","trim","t0","shownRows","length","filteredRows","undefined","t1","attributes","initialState","search","setSearch","storageKey","views","_c","Box","Icon","IconButton","Popover","Portal","Text","Settings2","Switch","DataTableRowDisplaySwitchProps","showDivider","wrapRows","onWrapRowsChange","DataTableRowDisplaySwitch","props","$","_c","t0","undefined","t1","t2","Symbol","for","role","t3","details","checked","t4","t5","t6","DataTableRowDisplayMenuProps","compact","DataTableRowDisplayMenu","content","mainAxis","placement","offset","t7","t8","t9","_c","Switch","resolveDataTableComparableValue","DataTableDiffValue","isDataTableDiffValue","value","additions","deletions","normalizeSearchQuery","query","trim","toLocaleLowerCase","findSearchRanges","text","needle","ranges","Array","haystack","index","indexOf","push","length","searchRows","rows","TRow","textsOf","row","filter","some","includes","Box","findSearchRanges","HighlightedTextProps","text","query","HighlightedText","props","ranges","length","parts","Array","match","start","cursor","end","push","slice","map","part","Text","useEffect","useState","Tooltip","HighlightedText","relativeUnits","unit","seconds","const","parseDate","value","time","Date","parse","Number","isNaN","formatDataTableRelativeDate","now","locale","date","format","Intl","RelativeTimeFormat","numeric","elapsedSeconds","getTime","match","find","candidate","Math","abs","round","DataTableDateCellProps","search","DataTableDateCell","props","$","_c","t0","undefined","setNow","_temp","t1","t2","Symbol","for","timer","setInterval","clearInterval","t3","relativeLabel","t4","toLocaleString","dateStyle","timeStyle","fullDate","t5","t6","t7","_c","_temp","Tooltip","Box","Flex","ReactNode","ParamEditorFieldLabel","ControlItemOrientation","ParamEditorControlItemProps","name","description","hideLabel","fullWidth","orientation","labelTrailing","children","ParamEditorControlItem","props","$","_c","t0","t1","t2","undefined","t3","label","autoOrientation","resolved","header","t4","t5","_c","ParamEditorFieldLabel","Button","Flex","Icon","IconButton","Menu","Portal","Check","ChevronDown","Square","SquareCheck","ReactNode","ListRow","filterSearchableMenuItems","SearchableMenu","SearchableMenuItem","getIconComponent","SelectionGroup","SelectionMenuOption","id","name","icon","color","description","disabled","SelectionMenuProps","triggerLabel","options","selectedIds","multiSelect","reselectable","searchable","allowCustomValues","searchPlaceholder","emptyText","group","fullWidth","triggerVariant","triggerAriaLabel","size","onToggle","optionId","onGroupChange","selectionIndicator","selected","selectionIconComponent","option","undefined","selectionOptionIcon","boxSize","SelectionMenu","props","$","_c","t0","t1","t2","t3","t4","t5","t6","t7","some","defaultValue","canChangeGroup","Boolean","t8","t9","option_0","includes","canChangeValue","isDisabled","bg","borderColor","outline","boxShadow","trigger","t10","t11","option_1","label","searchText","filter","join","secondaryLabel","isSelected","onSelect","map","items","selectedGroup","find","option_2","t12","items_0","query","filtered","value","trim","option_3","t13","option_4","selectedLabel","placeholder","toLowerCase","selectedIcon","ariaLabel","showSearch","emptyState","item","option_5","t14","_c","canChangeValue","Button","Flex","useEffect","useState","ActionOption","ParamEditorControlItem","SelectionMenu","ActionInputProps","id","name","description","defaultValue","options","onChange","value","readOnly","fullWidth","presentation","ActionInput","props","$","_c","t0","undefined","active","setActive","t1","t2","t3","optionId","run","horizontal","t4","find","option","selectedName","t5","t6","option_0","disabled","bg","borderColor","outline","boxShadow","map","row","t7","_c","AnchorGridValue","ANCHOR_GRID_VALUES","isAnchorGridValue","value","includes","Box","BoxProps","ReactNode","ParamEditorReadOnlyValueProps","Omit","children","preserveWhitespace","ParamEditorReadOnlyValue","props","$","_c","boxProps","t0","undefined","t1","t2","_c","Box","Grid","IconButton","useEffect","useState","AnchorGridValue","ParamEditorControlItem","ParamEditorReadOnlyValue","ANCHOR_GRID_VALUES","AnchorGridInputProps","id","name","description","defaultValue","onChange","value","readOnly","fullWidth","AnchorGridInput","props","$","_c","setValue","t0","t1","t2","next","select","t3","t4","map","anchor","selected","bg","grid","t5","t6","_c","useEffect","useState","Switch","ParamEditorControlItem","ParamEditorReadOnlyValue","BooleanInputProps","id","name","description","defaultValue","onChange","value","readOnly","hideLabel","fullWidth","size","BooleanInput","props","$","_c","t0","undefined","setValue","t1","t2","t3","String","t4","t5","details","checked","t6","_c","Switch","Box","ColorPicker","ColorPickerValueChangeDetails","Flex","parseColor","FocusEvent","ReactFocusEvent","useEffect","useRef","useState","ParamEditorLabel","ParamEditorReadOnlyValue","ColorInputProps","id","defaultValue","name","onChange","value","description","readOnly","hideLabel","tooltipPlacement","fullWidth","size","ColorInput","props","$","_c","t0","t1","t2","undefined","setValue","open","setOpen","rootRef","contentRef","timeoutRef","t3","nextColor","current","clearTimeout","setTimeout","scheduleChange","t4","t5","t6","t7","isInsidePicker","target","node","Node","contains","handleOutsideInteraction","event","document","addEventListener","removeEventListener","t8","newColor","handleChange","t9","Symbol","for","event_0","root","currentTarget","ownerDocument","activeElement","handleBlur","t10","valueElement","t11","t12","t13","details","t14","details_0","toString","t15","onOpenChange","onFocusOutside","onInteractOutside","onBlur","onValueChange","disabled","rootProps","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","picker","t28","_c","calendarDatePattern","formatReadOnlyDate","value","calendarDate","exec","year","month","day","Intl","DateTimeFormat","undefined","dateStyle","format","Date","Number","date","isNaN","getTime","timeStyle","Box","Flex","Input","useEffect","useRef","useState","ParamEditorLabel","ParamEditorReadOnlyValue","formatReadOnlyDate","DateInputProps","id","defaultValue","name","min","max","onChange","value","description","readOnly","hideLabel","tooltipPlacement","fullWidth","size","DateInput","props","$","_c","t0","t1","t2","undefined","setValue","timeoutRef","t3","nextValue","current","clearTimeout","setTimeout","scheduleChange","t4","t5","t6","newValue","handleChange","t7","t8","valueElement","t9","t10","e","target","_temp","e_1","_temp2","e_0","key","currentTarget","blur","e_2","_c","_temp","_temp2","FileUploadValue","FileUploadSummaryState","valueId","file","File","index","name","size","toString","lastModified","createFileUploadValues","files","existing","multiple","offset","length","selected","map","id","status","const","slice","getFileUploadSummary","values","states","state","find","candidate","some","value","count","filter","Button","Flex","Icon","Spinner","Stack","Text","Wrap","CircleAlert","CircleCheck","Clock3","Paperclip","useEffect","useRef","useState","AttachmentChip","FileUploadValue","ParamEditorControlItem","createFileUploadValues","getFileUploadSummary","FileUploadInputProps","id","name","description","defaultValue","accept","multiple","uploadLabel","onChange","value","readOnly","presentation","statusIcons","queued","complete","error","UploadStatus","props","$","_c","values","noun","summary","t0","t1","t2","t3","t4","Symbol","for","bb0","state","count","toString","t5","t6","uploading","empty","labels","t7","icon","t8","t9","t10","t11","UploadQueue","onRemove","length","file","map","FileUploadInput","undefined","setValues","inputRef","next","commit","valueId","filter","remove","current","click","button","event","Array","from","currentTarget","files","input","t12","_c","Box","Flex","Input","Textarea","useEffect","useRef","useState","ParamEditorLabel","ParamEditorReadOnlyValue","HorizontalTextInputProps","id","defaultValue","name","onChange","value","description","readOnly","hideLabel","tooltipPlacement","size","HorizontalTextInput","props","$","_c","t0","t1","undefined","setValue","isExpanded","setIsExpanded","timeoutRef","t2","nextValue","current","clearTimeout","setTimeout","scheduleChange","t3","t4","t5","newValue","handleChange","t6","handleClick","t7","trim","length","handleBlur","t8","Symbol","for","e","key","preventDefault","handleKeyDown","t9","t10","t11","e_0","target","_temp","borderColor","boxShadow","e_2","e_1","currentTarget","blur","_c","_temp","Box","Flex","Input","Stack","useEffect","useState","LazyMarkdownEditor","ParamEditorFieldLabel","ParamEditorReadOnlyValue","MarkdownInputProps","id","name","description","defaultValue","placeholder","onChange","value","readOnly","presentation","size","MarkdownInput","props","$","_c","t0","t1","undefined","setValue","isExpanded","setIsExpanded","t2","t3","t4","next","commit","t5","editorValue","editor","t6","label","t7","event","target","borderColor","event_0","key","preventDefault","t8","_c","ParamEditorFieldLabel","Box","Flex","NumberInputValueChangeDetails","SliderValueChangeDetails","useEffect","useRef","useState","NumberInputField","NumberInputRoot","Slider","ParamEditorLabel","ParamEditorReadOnlyValue","NumberInputProps","id","defaultValue","name","step","min","max","onChange","value","description","readOnly","hideLabel","hideSlider","tooltipPlacement","fullWidth","size","NumberInput","props","$","_c","t0","t1","t2","t3","t4","undefined","setValue","isRange","showSlider","useFullWidthLayout","timeoutRef","pendingRef","t5","nextValue","current","clearTimeout","setTimeout","scheduleChange","t6","nextValue_0","flushChange","t7","t8","t9","valueElement","t10","t11","details","next","Number","isNaN","valueAsNumber","_temp","details_0","next_0","_temp2","details_1","details_2","e","key","currentTarget","blur","e_0","NumberInput","_c","_temp","_temp2","Slider","clampToRange","value","min","max","lower","Math","upper","snapToStep","step","origin","steps","round","formatUnitValue","unit","rounded","Number","isInteger","toFixed","RangeValue","clampToRange","snapToStep","normalizeRange","value","min","max","step","first","second","start","Math","end","updateRangeHandle","index","next","draft","Box","Flex","SliderMarksProps","count","SliderMarks","props","$","_c","t0","Array","from","length","_","index","positions","t1","map","_temp","position","_c","_temp","Box","Button","Flex","Icon","Popover","SliderValueChangeDetails","Stack","Text","ChevronDown","useEffect","useState","Slider","RangeValue","ParamEditorControlItem","ParamEditorReadOnlyValue","formatUnitValue","normalizeRange","SliderMarks","RangeInputProps","id","name","description","defaultValue","min","max","step","unit","markerCount","onChange","value","readOnly","fullWidth","presentation","RangeInput","props","$","_c","t0","t1","undefined","t2","setValue","t3","t4","t5","t6","label","horizontal","t7","t8","trailing","details","t9","details_0","next","t10","t11","t12","slider","t13","Symbol","for","placement","offset","mainAxis","t14","t15","t16","t17","t18","t19","t20","_c","Slider","Icon","Text","Wrap","Chip","getIconComponent","ResourceBadge","ResourceOption","ResourceRefValue","optionIcon","option","icon","color","openExternal","href","window","open","copyToClipboard","text","navigator","clipboard","writeText","catch","undefined","ResourceChipProps","onOpenResource","ref","onRemove","ResourceChip","props","$","_c","isReference","Boolean","copyText","t0","name","handleSelect","length","t1","t2","t3","t4","ResourceChipListProps","options","optionId","emptyText","ResourceChipList","id","map","_c","Box","Flex","Icon","Stack","Plus","ReactNode","useEffect","useRef","useState","ResourceOption","ResourceRefValue","ParamEditorLabel","ResourceChipList","SelectionMenu","selectionOptionIcon","ResourceInputProps","id","name","description","defaultValue","options","onChange","value","onOpenResource","ref","readOnly","editable","multiSelect","placeholder","emptyText","fullWidth","presentation","size","toIds","Array","isArray","resolveOptions","ids","map","find","option","filter","Boolean","FieldShellProps","label","control","FieldShell","props","$","_c","t0","t1","ResourceSelectMenuProps","triggerLabel","selectedIds","triggerVariant","triggerAriaLabel","onToggle","optionId","ResourceSelectMenu","ResourceInput","t2","t3","t4","undefined","setValue","timeoutRef","t5","t6","emitChange","next","current","clearTimeout","scheduleChange","next_0","setTimeout","selectedOptions","interactive","t7","t8","toggleOption","next_1","includes","entry","next_2","removeOption","optionId_0","next_3","entry_0","t9","Symbol","for","length","selected","t10","_c","Box","Button","Group","useEffect","useState","SegmentedOption","ParamEditorControlItem","ParamEditorReadOnlyValue","SelectionMenu","SegmentedInputProps","id","name","description","defaultValue","options","variant","onChange","value","readOnly","fullWidth","presentation","SegmentedInput","props","$","_c","t0","t1","undefined","setValue","t2","t3","t4","next","select","t5","find","option","selectedName","horizontal","t6","t7","t8","Symbol","for","borderColor","boxShadow","t9","t10","option_0","selected","indicatorColor","map","group","t11","_c","Box","Flex","useEffect","useState","SelectionGroup","ParamEditorLabel","ParamEditorReadOnlyValue","SelectionMenu","SelectionMenuOption","selectionOptionIcon","SelectionInputProps","id","defaultValue","name","options","onChange","value","description","readOnly","hideLabel","multiSelect","tooltipPlacement","placeholder","fullWidth","clearable","disabled","searchable","allowCustomValues","searchPlaceholder","emptyText","group","size","withCustomChoices","selectedIds","filter","some","option","map","SelectionInput","props","$","_c","t0","t1","t2","t3","t4","t5","t6","t7","undefined","setValue","groupValue","setGroupValue","t8","t9","t10","t11","t12","T0","T1","availableOptions","handleGroupChange","handleToggle","label","t13","t14","t15","t16","t17","Symbol","for","bb0","multiSelectedIds","Array","isArray","singleSelectedIds","getDisplayText","names","selectedId","find","_temp","length","join","slice","toString","t18","nextValue","commit","optionId","includes","item","t19","optionId_0","triggerOption","option_0","t20","valueElement","t21","t22","menu","t23","optionName","Boolean","_c","_temp","_Fragment","Box","Flex","Input","Textarea","useEffect","useRef","useState","ParamEditorLabel","ParamEditorReadOnlyValue","TextInputProps","id","defaultValue","name","onChange","value","description","readOnly","singleLine","hideLabel","fullWidth","size","TextInput","props","$","_c","t0","t1","t2","t3","undefined","setValue","timeoutRef","t4","nextValue","current","clearTimeout","setTimeout","scheduleChange","t5","t6","t7","newValue","handleChange","t8","handleBlur","t9","t10","valueElement","t11","t12","e","target","_temp","e_1","_temp2","e_3","e_0","key","currentTarget","blur","e_2","_c","_temp","_temp2","Flex","FlexProps","ParamEditorInlineGroupProps","ParamEditorInlineGroup","props","$","_c","children","rest","t0","_c","VectorValue","clampToRange","VectorBounds","min","max","clampAxis","value","bounds","undefined","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","updateVectorAxis","axis","next","clamped","x","y","Flex","Text","useEffect","useState","VectorValue","ParamEditorControlItem","ParamEditorInlineGroup","ParamEditorReadOnlyValue","NumberInput","updateVectorAxis","VectorInputProps","id","name","description","defaultValue","xLabel","yLabel","min","max","step","onChange","value","readOnly","fullWidth","VectorAxisFieldProps","label","fieldId","onCommit","VectorAxisField","props","$","_c","t0","t1","_","next","t2","t3","VectorInput","undefined","setValue","t4","t5","axis","updated","commitAxis","t6","x","y","t7","t8","next_0","t9","t10","next_1","t11","t12","t13","_c","NumberInput","ParamValueMap","resolveParamValue","defaultValues","paramId","fallback","T","undefined","ActionInput","AnchorGridInput","FileUploadInput","RangeInput","SegmentedInput","VectorInput","Param","ParamValue","ParamValueMap","resolveParamValue","AdvancedParam","Extract","type","ParamEditorAdvancedFieldProps","param","defaultValues","onChange","id","value","readOnly","fullWidth","presentation","ParamEditorAdvancedField","props","$","_c","t0","t1","t2","common","t3","name","t4","description","t5","defaultValue","t6","markerCount","max","min","step","unit","options","variant","xLabel","yLabel","t7","accept","multiple","uploadLabel","_c","Param","isParamEditorRichControl","param","type","isParamEditorHorizontalControl","Badge","HStack","Image","Param","ParamEditorControlItem","ParamEditorReadOnlyValue","ParamEditorReadOnlyFieldProps","param","Extract","type","fullWidth","formatPrimitive","value","String","ReadOnlyContent","props","$","_c","Array","isArray","length","t0","Symbol","for","map","_temp","t1","alt","images","src","_temp2","t2","ParamEditorReadOnlyField","description","name","item","index","image","_c","_temp","_temp2","Box","Flex","BooleanInput","ColorInput","DateInput","HorizontalTextInput","MarkdownInput","NumberInput","ResourceInput","SelectionInput","TextInput","Param","ParamValue","ParamValueMap","ResourceRefValue","ParamEditorAdvancedField","ParamEditorLabel","isParamEditorRichControl","ParamEditorReadOnlyField","ParamEditorReadOnlyValue","resolveParamValue","ParamEditorFieldProps","param","defaultValues","onChange","id","value","onOpenResource","ref","readOnly","fullWidth","presentation","size","PropertyField","props","$","_c","t0","description","name","t1","t2","ParamEditorField","undefined","horizontal","t3","richControl","t4","t5","t6","common","type","t7","t8","t9","defaultValue","t10","max","min","step","singleLine","t11","placeholder","group","allowCustomValues","clearable","disabled","emptyText","multiSelect","options","searchPlaceholder","searchable","editable","_c","NumberInput","Box","Param","ParamValue","ParamValueMap","ResourceRefValue","ParamEditorField","ParamEditorRowProps","param","values","onChange","id","value","onOpenResource","ref","readOnly","fullWidth","variant","ParamEditorRow","props","$","_c","t0","t1","t2","undefined","small","t3","t4","_temp","t5","t6","t7","_c","_temp","Button","Collapsible","Flex","Icon","Stack","Text","ChevronDown","useState","Param","ParamValue","ParamValueMap","ResourceRefValue","ParamEditorRow","ParamEditorSectionProps","title","description","params","defaultValues","onChange","id","value","onOpenResource","ref","readOnly","fullWidth","collapsible","defaultCollapsed","isFirst","variant","ParamEditorSectionTitle","props","$","_c","t0","t1","t2","ParamEditorSectionHeader","open","onToggle","Symbol","for","bg","t3","t4","ParamEditorSectionBody","sectionPadding","param","map","ParamEditorSection","undefined","setOpen","hasTitle","Boolean","canCollapse","contentOpen","_temp","t5","t6","t7","current","_c","_temp","Stack","InputGroup","Param","ParamValue","ParamValueMap","ResourceRefValue","ParamEditorSection","ParamEditorProps","params","groups","defaultValues","onChange","id","value","onOpenResource","ref","readOnly","fullWidth","variant","ParamEditor","props","$","_c","t0","t1","t2","t3","t4","t5","undefined","t6","t7","handleChange","_temp","t8","length","t9","t10","group","index","title","description","collapsible","defaultCollapsed","map","_c","_temp","Stack","StackProps","ParamEditorControlListProps","ParamEditorControlList","props","$","_c","children","rest","t0","_c","ParamEditor","JsonField","label","value","FriendlyJsonDisplayProps","imageExtensionPattern","imageLabelPattern","humanizeKey","key","words","replace","trim","toLowerCase","toUpperCase","slice","formatPath","path","map","part","test","join","isPrimitiveArray","every","item","appendJsonFields","fields","Array","isArray","length","push","forEach","index","String","entries","Object","parseJsonCellValue","JSON","parse","buildJsonFields","field","isJsonImageValue","startsWith","url","URL","protocol","pathname","isJsonImageArray","formatJsonPrimitive","undefined","formatJsonValue","getJsonCellSummary","parsedValue","keys","filter","visibleValues","remainingCount","Boolean","toReadOnlyValue","type","const","src","alt","images","image","buildFriendlyJsonParams","id","name","FriendlyJsonDisplay","props","$","_c","t0","t1","_c","Icon","ChakraIcon","createColumnHelper","CalendarClock","CheckCircle2","Hash","Type","isValidElement","ReactElement","ReactNode","ColumnType","DisplayValue","RowData","isDisplayValue","value","isString","v","String","isNumber","Number","isBoolean","Boolean","getType","values","comparableValues","map","sortValue","valueOf","filter","undefined","length","every","isNaN","Date","parse","toString","headerIconProps","boxSize","marginRight","getIcon","type","formatDisplayValue","display","JSON","stringify","columnHelper","ChakraIcon","resolveDataTableFieldKind","isValidElement","ReactNode","AttributeDescriptor","KanbanRendererRow","isDataTableDiffValue","resolveDataTableComparableValue","formatDataTableRelativeDate","getJsonCellSummary","formatDisplayValue","DataTableProps","DataTableSelectionAction","RowData","defaultPageSize","DataTableRendererRow","sourceRow","resolveDataTableRowId","row","index","getRowId","id","String","resolveInitialPageSize","props","Pick","initialPageSize","getSelectedOriginalRows","rows","Array","original","map","resolveSelectionActions","actions","selectionActions","onCSVDownload","push","label","onSelect","shouldEnableSelection","selectionMode","Boolean","length","shouldHighlightActiveRow","enableRowActivation","activeRowId","rowId","ColumnRenderers","toAttributeValue","value","renderer","NonNullable","raw","ColumnOptions","resolveAttributeType","columnKey","options","kind","type","columnTypes","columnRenderers","buildDataTableRendererAttributes","columnKeys","compactHeaders","filterable","filterableColumns","includes","sortable","groupable","groupableColumns","displayable","buildDataTableRendererRows","renderers","attributes","Object","fromEntries","firstValue","title","resolveDataTableColumnOrder","availableColumnIds","requestedColumnOrder","availableColumnIdSet","Set","orderedColumnIds","filter","columnId","has","orderedColumnIdSet","missingColumnIds","toggleHiddenDataTableColumn","hiddenColumnIds","visible","nodeText","isArray","flatMap","children","dataTableCellText","now","Date","additions","deletions","reorderDataTableColumns","columnIds","activeColumnId","overColumnId","activeIndex","indexOf","overIndex","nextColumnIds","activeColumn","splice","resolveDataTableToolbarStorageKey","toolbarStorageKey","join","Box","chakra","Flex","IconButton","Popover","Portal","Check","X","KeyboardEvent","ReactNode","RefObject","useEffect","useRef","ScrollArea","InlineEditActionsProps","cancelLabel","saveLabel","onCancel","onSave","InlineEditActions","props","$","_c","t0","Symbol","for","t1","t2","t3","t4","EditModeTextSurfaceProps","accessibleName","textStyle","value","onChange","EditModeTextSurface","elementRef","initialValueRef","element","current","textContent","focus","selection","globalThis","getSelection","range","document","createRange","selectNodeContents","removeAllRanges","addRange","event","key","preventDefault","handleKeyDown","event_0","currentTarget","EditModeHeaderEditorProps","draft","EditModeHeaderEditor","EditModeCellEditorProps","anchorRef","HTMLElement","customEditor","EditModeCellEditor","mainAxis","placement","offset","getAnchorElement","minHeight","maxHeight","overscrollBehavior","t5","t6","t7","t8","_c","ScrollArea","Box","Table","KeyboardEvent","ReactNode","useRef","EditModeCellEditor","DataTableCellContext","DataTableEditModeColumn","DataTableEditModeConfig","EditModeDataTableCellProps","activeDraft","column","context","editMode","isActive","isReadOnly","wrapRows","onActivate","onCancel","onDraftChange","draft","onSave","getRowDisplayProps","height","undefined","maxHeight","overflowWrap","const","textOverflow","verticalAlign","whiteSpace","EditModeDataTableCell","props","$","_c","t0","cellRef","t1","isCellEditable","isEditable","t2","rowDisplayProps","content","t3","renderCellEditor","value","onChange","customEditor","t4","renderCell","String","event","key","preventDefault","handleKeyDown","id","t5","t6","t7","t8","t9","alignment","t10","t11","t12","t13","_c","Icon","ChakraIcon","Table","Check","Minus","Checkbox","stopControlPropagation","event","stopPropagation","EditModeSelectionHeaderProps","checked","indeterminate","onChange","EditModeSelectionHeader","props","$","_c","t0","t1","t2","t3","details","t4","EditModeSelectionCellProps","EditModeSelectionCell","Symbol","for","_c","ChakraIcon","Checkbox","Button","Icon","Table","Plus","Trash2","ResourceContextMenu","EditModeDataTableCell","EditModeSelectionCell","DataTableCellContext","DataTableEditModeColumn","DataTableEditModeConfig","RowData","ActiveCell","rowId","columnId","draft","EditModeDataTableBodyProps","activeCell","columns","data","editMode","enableSelection","isReadOnly","pageIndex","pageRows","pageSize","selectedRowIds","Set","showNewRow","wrapRows","onActivateCell","cell","onAddRow","onCancelCell","onCommitCell","onDraftChange","onRemoveRow","onToggleRowSelection","checked","rowIdFor","row","index","EditModeDataTableBody","props","$","_c","t0","t1","visibleIndex","rowIndex","sourceIndex","indexOf","tableRow","has","undefined","map","column","context","id","value","isActive","String","key","label","icon","onClick","length","t2","_c","Flex","Icon","IconButton","Table","Text","Pencil","Plus","Trash2","ReactNode","ResourceContextMenu","EditModeHeaderEditor","getIcon","DataTableEditModeColumn","DataTableEditModeConfig","RowData","ActiveHeader","columnId","draft","EditModeDataTableHeaderProps","activeHeader","columnIcons","Record","columns","data","editMode","isReadOnly","rowDisplayControl","selectionHeader","onAddColumn","onCancelHeaderEdit","onDeleteColumn","onHeaderDraftChange","onHeaderEdit","column","onSaveHeader","EditModeDataTableHeader","props","$","_c","t0","t1","t2","t3","t4","length","isEditing","id","headerIcon","map","row","header","alignment","label","renderHeader","key","icon","onClick","isDisabled","separatorBefore","t5","_c","Button","Icon","ChakraIcon","Flex","IconButton","Menu","Portal","Stack","Text","ChevronLeft","ChevronRight","ChevronsLeft","ChevronsRight","NumberInputField","NumberInputRoot","ListRow","PaginationFooterProps","pageCount","pageIndex","pageSize","pageSizeOptions","onPageChange","onPageSizeChange","PaginationFooter","props","$","_c","totalPages","Math","max","canGoBack","canGoForward","t0","Symbol","for","t1","t2","t3","option","map","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","details","next","Number","isNaN","valueAsNumber","clamped","min","t24","t25","t26","t27","t28","_c","ChakraIcon","Button","Icon","ChakraIcon","Flex","IconButton","Menu","Portal","Stack","Text","X","ListRow","DataTableSelectionAction","RowData","SelectionToolbarProps","selectedCount","totalCount","onClearSelection","onSelectAll","actions","selectedRows","SelectionToolbar","props","$","_c","actionLabel","length","label","t0","Symbol","for","t1","t2","t3","t4","onSelect","t5","map","action","destructive","icon","t6","_c","ChakraIcon","ViewSort","getEnumOptions","AttributeDescriptor","AttributeType","KanbanRendererRow","canSortField","findField","getAttributeStringValues","getAttributeValue","parseViewDate","compareEnumValues","left","right","type","kind","options","toIndex","value","undefined","length","index","findIndex","option","toTime","getTime","Number","NaN","compareFieldValues","a","b","field","compare","leftValue","rightValue","String","localeCompare","numeric","sensitivity","isEmpty","row","isFinite","compileSort","sort","fields","attributeId","direction","leftEmpty","rightEmpty","sortRowsByView","rows","TRow","sorts","enumOptionLabel","getEnumOptions","AttributeDescriptor","KanbanRendererRow","getAttributeStringValues","compareEnumValues","CollectionRowGroup","key","label","rows","TRow","emptyGroupKey","field","toLowerCase","groupLabel","type","kind","resolveGroupValue","value","undefined","some","option","groupKey","row","compareGroupKeys","left","right","empty","Number","ordered","localeCompare","numeric","groupRowsByField","knownKeys","groups","Map","map","group","get","push","set","entries","sort","groupRows","DEFAULT_DATA_TABLE_SETTINGS","useDeferredValue","useState","findField","filterRowsByView","groupRowsByField","searchRows","sortRowsByView","CollectionViewStoreState","useCollectionViewStore","useCollectionViews","buildDataTableRendererAttributes","buildDataTableRendererRows","dataTableCellText","resolveDataTableColumnOrder","resolveDataTableToolbarStorageKey","DataTableProps","DataTableSettings","DataTableViewDefaults","Pick","dataTableInitialState","defaults","settings","defaultSettings","filter","defaultFilter","sorts","defaultSorts","useDataTableViewStore","storageKey","selector","t0","$","_c","t1","undefined","t2","useDataTableView","props","data","hiddenColumns","getRowId","compactHeaders","columnRenderers","columnTypes","groupableColumns","filterableColumns","permanentlyHidden","Set","baseColumnKeys","Object","keys","key","has","toolbarStorageKey","columnKeys","initialState","views","viewsSource","defaultViews","defaultActiveViewId","store","_temp","search","setSearch","deferredSearch","orderedColumnKeys","columnOrder","key_0","includes","visibleColumnKeys","attributes","rows","filteredRows","sortedRows","shownRows","row","flatMap","key_1","sourceRow","groupField","grouping","groups","groupable","map","_temp2","state","group","_c","_temp","_temp2","Box","Flex","Table","useEffect","useState","ScrollArea","DataTableHeader","DataTableRowDisplayMenu","resolveSelectionActions","shouldEnableSelection","EditModeDataTableBody","EditModeDataTableHeader","EditModeSelectionHeader","PaginationFooter","SelectionToolbar","DataTableEditModeColumn","DataTableProps","RowData","useDataTableView","createId","kind","unique","globalThis","crypto","randomUUID","Date","now","Math","random","ActiveCell","rowId","columnId","draft","ActiveHeader","EditModeDataTable","props","$","_c","data","editMode","fullWidth","t0","initialPageSize","t1","pageSizeOptions","t2","isReadOnly","t3","getRowId","columnIcons","toolbarStorageKey","undefined","pageIndex","setPageIndex","t4","min","max","pageSize","setPageSize","activeCell","setActiveCell","activeHeader","setActiveHeader","selectedRowIds","setSelectedRowIds","_temp","columns","t5","t6","t7","t8","columnKeys","map","_temp2","Object","fromEntries","_temp3","keys","filter","key","includes","t9","compactHeaders","hiddenColumns","view","wrapRows","settings","t10","next","setSettings","setWrapRows","filteredRendererRows","shownRows","filteredData","_temp4","cappedPageSizeOptions","Set","_temp5","pageCount","ceil","length","pageRows","slice","tableWidth","t11","enableSelection","t12","selectionActions","t13","t14","t15","visibleIds","_temp6","current","next_0","has","isUnchanged","size","every","rowId_0","t16","t17","row_1","index","row","String","id","rowIdFor","t18","onDataChange","row_2","index_0","commitCell","t19","update","onColumnsChange","column_1","column","updateColumn","t20","label","commitHeader","t21","alignment","addColumn","t22","columnId_0","column_2","removeColumn","t23","row_3","_temp7","addRow","t24","nextPageSize","changePageSize","t25","rowId_1","row_4","index_1","removeRow","t26","rowId_2","checked","current_0","next_1","add","delete","toggleRowSelection","allRowsSelected","t27","t28","row_5","_temp8","selectedRows","t29","rowDisplayControl","t30","viewsSource","t31","Symbol","for","overflowY","t33","t34","t35","_temp9","t36","t37","t38","t39","t40","t41","current_1","column_5","t42","checked_0","_temp0","t43","t44","t45","t46","t47","t48","_temp1","t49","t50","t51","column_0","sourceRow","option","row_0","column_3","row_6","column_4","row_7","row_8","_c","_temp","_temp2","_temp3","_temp4","ScrollArea","Box","ComponentType","useEffect","useState","installPrismGlobal","MarkdownEditorProps","LazyMarkdownEditor","props","Editor","setEditor","cancelled","module","MarkdownEditor","Paragraph","PhrasingContent","Root","RootContent","fromMarkdown","gfmFromMarkdown","gfmToMarkdown","mathFromMarkdown","mathToMarkdown","toMarkdown","gfm","math","parserOptions","extensions","mdastExtensions","serializerOptions","bullet","const","emphasis","fence","fences","listItemIndent","rule","strong","fenceStart","line","match","normalizeLegacyInlineMath","codeFenceLength","result","index","length","end","slice","delimiter","normalizeLegacyMath","markdown","fencedCode","character","normalized","split","push","closingFence","openingFence","displayMath","indent","test","replace","join","parseMarkdown","parseMarkdownSource","serializeMarkdownAst","tree","trimEnd","serializeMarkdownBlock","node","type","children","serializeMarkdownInline","paragraph","parseMarkdownInline","first","MarkdownUrlKind","MarkdownUrlResolver","source","kind","SAFE_LINK_PROTOCOLS","Set","SAFE_IMAGE_DATA_URL","PROTOCOL","hasSafeLinkProtocol","startsWith","test","has","URL","protocol","hasSafeImageProtocol","resolveMarkdownUrl","resolver","resolved","sourceIsRelative","createContext","ReactNode","useContext","MarkdownUrlResolver","MarkdownUrlContext","undefined","MarkdownUrlProviderProps","children","resolver","MarkdownUrlProvider","props","$","_c","t0","useMarkdownUrlResolver","_c","createContext","useContext","resolveMarkdownUrl","ChatMessagePart","SessionMessage","ChatLinkHandler","parseChatLink","imageSourceKey","source","handler","parsed","origin","kind","undefined","resolveHref","path","addCapturedImages","sources","ReadonlyMap","part","type","Array","isArray","state","output","next","Map","image","src","key","set","indexChatImageSources","messages","index","WeakMap","message","parts","capturedChatImageSource","get","ChatImageHistoryContext","useChatImageHistory","ChatImageSourcesContext","useChatImageSources","Box","Image","Text","$applyNodeReplacement","$getNodeByKey","$getSelection","$isRangeSelection","DecoratorNode","LexicalEditor","LexicalNode","NodeKey","SerializedLexicalNode","Spread","ReactNode","useEffect","useState","capturedChatImageSource","useChatImageSources","ChatLinkHandler","useChatLinkHandler","resolveMarkdownUrl","useMarkdownUrlResolver","SerializedMarkdownImageNode","source","alt","title","MarkdownImageProps","onLoad","MarkdownImage","props","$","_c","resolver","handler","t0","t1","captured","loaded","setLoaded","t2","direct","t3","value","resolved","t4","t5","resolveImageSource","current","catch","_temp","then","t6","t7","undefined","MarkdownImageNode","__source","__alt","__title","getType","clone","node","__key","constructor","key","createDOM","document","createElement","updateDOM","isInline","getSource","getAlt","getTitle","getTextContent","exportJSON","type","version","importJSON","$createMarkdownImageNode","decorate","editor","keepFollowingSelectionVisible","isEditable","selectedBlockKey","getEditorState","read","selection","imageNode","getKey","isCollapsed","imageBlock","getTopLevelElement","followingBlock","getNextSibling","followingBlockKey","selectionBlock","anchor","getNode","blockKey","requestAnimationFrame","getElementByKey","scrollIntoView","block","$isMarkdownImageNode","_c","_temp","DOMPurify","$applyNodeReplacement","DecoratorNode","LexicalNode","NodeKey","SerializedLexicalNode","Spread","ReactNode","useEffect","useRef","resolveMarkdownUrl","useMarkdownUrlResolver","RawHtmlDisplay","SerializedRawHtmlNode","source","display","isHtmlComment","test","trim","sanitizeMarkdownHtml","resolver","ReturnType","document","clean","sanitize","FORBID_TAGS","template","createElement","innerHTML","element","content","querySelectorAll","HTMLElement","attribute","hasAttribute","kind","sourceUrl","getAttribute","resolved","setAttribute","removeAttribute","RawHtmlProps","RawHtml","props","$","_c","elementRef","t0","Symbol","for","current","attachElement","t1","t2","fragment","element_0","replaceChildren","cloneNode","createTextNode","t3","RawHtmlNode","__source","__display","getType","clone","node","__key","constructor","key","createDOM","updateDOM","previous","isInline","getSource","getDisplay","getTextContent","exportJSON","type","version","importJSON","$createRawHtmlNode","decorate","$isRawHtmlNode","_c","Box","Code","Link","Text","PhrasingContent","Fragment","ReactNode","parseChatLink","ChatLinkAnchor","useChatLinkHandler","parseMarkdownInline","resolveMarkdownUrl","useMarkdownUrlResolver","MarkdownImage","RawHtml","MarkdownInlineProps","value","InlineChildrenProps","nodes","InlineChildren","props","$","_c","resolver","handler","t0","t1","node","index","key","type","children","source","origin","candidate","url","const","parsed","window","undefined","location","kind","resolveHref","href","title","alt","map","MarkdownInline","_c","Fragment","Box","$applyNodeReplacement","$createParagraphNode","$getNodeByKey","DecoratorNode","HISTORY_PUSH_TAG","LexicalEditor","LexicalNode","NodeKey","REDO_COMMAND","SerializedLexicalNode","Spread","UNDO_COMMAND","React","FocusEvent","KeyboardEvent","MouseEvent","useRef","useState","EditModeDataTable","DataTableEditModeColumn","RowData","LazyMarkdownEditor","MarkdownInline","MarkdownTableValue","MarkdownDataTableProps","editor","nodeKey","table","projectRows","rows","map","row","id","cells","projectColumns","columns","MarkdownDataTable","props","$","_c","isSelected","setSelected","containerRef","t0","Symbol","for","setTimeout","current","focus","focusTable","t1","change","update","node","$isDataTableNode","setTable","getTable","tag","updateTable","t2","Object","fromEntries","column","handleColumnsChange","t3","data","current_0","row_0","index","String","column_0","handleDataChange","t4","node_0","paragraph","replace","select","deleteTable","t5","event","target","HTMLElement","closest","preventDefault","handleClick","t6","event_0","currentTarget","contains","relatedTarget","Node","handleBlur","t7","event_1","target_0","isTextInput","matches","isContentEditable","isUndo","ctrlKey","metaKey","key","toLowerCase","stopPropagation","dispatchCommand","shiftKey","undefined","handleKeyDown","t8","t9","t10","t11","t12","t13","onColumnsChange","onDataChange","renderHeader","_temp","renderCell","_temp2","renderCellEditor","_temp3","t14","isEditable","t15","t16","_temp4","t17","DataTableNode","JSX","Element","__table","getType","clone","__key","constructor","getLatest","writable","getWritable","createDOM","document","createElement","updateDOM","decorate","exportJSON","SerializedDataTableNode","type","version","importJSON","json","$createDataTableNode","getTextContent","headers","label","join","separator","column_1","context","value","onChange","row_1","_c","_temp","_temp2","_temp3","_temp4","LinkAttributes","LinkNode","SerializedLinkNode","$applyNodeReplacement","EditorConfig","LexicalNode","NodeKey","SerializedLexicalNode","Spread","MarkdownUrlResolver","resolveMarkdownUrl","SerializedMarkdownLinkNode","source","safeLinkUrl","resolver","MarkdownLinkNode","__source","getType","clone","node","__url","rel","__rel","target","__target","title","__title","__key","constructor","resolvedUrl","attributes","key","createDOM","config","anchor","dataset","chatSource","chatOrigin","updateDOM","previous","HTMLAnchorElement","changed","getSource","setResolvedURL","url","getURL","getWritable","setURL","writable","exportJSON","type","version","importJSON","$createMarkdownLinkNode","undefined","$isMarkdownLinkNode","katex","DOMConversionMap","DOMConversionOutput","EditorConfig","LexicalNode","NodeKey","SerializedLexicalNode","Spread","$applyNodeReplacement","DecoratorNode","DOMExportOutput","React","Suspense","EquationComponent","lazy","SerializedEquationNode","equation","inline","$convertEquationElement","domNode","HTMLElement","getAttribute","atob","node","$createEquationNode","EquationNode","ReactNode","__equation","__inline","getType","clone","__key","constructor","key","importJSON","serializedNode","exportJSON","getEquation","type","version","createDOM","_config","element","document","createElement","className","exportDOM","btoa","setAttribute","render","displayMode","errorColor","output","strict","throwOnError","trust","importDOM","div","hasAttribute","conversion","priority","span","updateDOM","prevNode","getTextContent","setEquation","writable","getWritable","isInline","decorate","equationNode","$isEquationNode","MultilineElementTransformer","TextMatchTransformer","$createEquationNode","$isEquationNode","EquationNode","EQUATION_INLINE","dependencies","export","node","isInline","getEquation","trim","importRegExp","regExp","replace","textNode","match","equationNode","type","EQUATION_MULTILINE","regExpStart","regExpEnd","rootNode","_children","_startMatch","_endMatch","linesInBetween","append","join","EquationPlugin","EditorConfig","ElementNode","LexicalEditor","LexicalNode","SerializedElementNode","Spread","SerializedHRNode","HRNode","getType","clone","node","__key","importJSON","_serializedNode","$createHRNode","exportJSON","createDOM","_config","_editor","HTMLElement","element","document","createElement","style","updateDOM","_prevNode","_dom","decorate","$isHRNode","LexicalNode","NodeKey","SerializedLexicalNode","$applyNodeReplacement","DecoratorNode","ReactNode","lazy","Suspense","MermaidComponent","SerializedMermaidNode","type","code","version","MermaidNode","__code","getType","clone","node","__key","constructor","key","createDOM","document","createElement","updateDOM","importJSON","serializedNode","exportJSON","getTextContent","getCode","setCode","writable","getWritable","decorate","$isMermaidNode","$createMermaidNode","ElementTransformer","LexicalNode","$createHRNode","$isHRNode","HRNode","HR","dependencies","export","node","regExp","replace","parentNode","line","type","$createAutoLinkNode","$createLinkNode","$isAutoLinkNode","$isLinkNode","AutoLinkNode","LinkNode","TextMatchTransformer","$createTextNode","TextNode","HR","UNDERLINE_INS_TAG","dependencies","export","node","_children","markdownText","getTextContent","hasFormat","regExp","importRegExp","replace","match","textNode","toggleFormat","type","UNDERLINE_U_TAG","_node","BARE_URL_REGEXP","unescapeUrl","url","escapeLinkTitle","title","unescapeLinkTitle","normalizeEscapedUrlText","textContent","href","exportedText","escapedHref","LINK","exportChildren","getTitle","getURL","linkText","linkUrl","linkTitle","linkNode","openBracketAmount","split","length","closeBracketAmount","parsedLinkText","outsideLinkText","linkTextParts","slice","join","normalizedLinkText","linkTextNode","setFormat","getFormat","append","insertBefore","trigger","BARE_URL","autoLinkNode","TRANSFORMERS_EXTENDED","LINK","AutoLinkNode","LinkNode","ListItemNode","ListNode","CHECK_LIST","LINK","LEXICAL_LINK","TRANSFORMERS","HeadingNode","QuoteNode","Klass","LexicalNode","REFERENCE_LINK_TRANSFORMER","ReferenceLinkNode","theme","CodeHighlightNode","CodeNode","DataTableNode","MarkdownImageNode","MarkdownLinkNode","RawHtmlNode","EquationNode","EQUATION_INLINE","EQUATION_MULTILINE","HRNode","MermaidNode","TRANSFORMERS_EXTENDED","editorNodes","Array","baseEditorTransformers","filter","transformer","editorTransformers","editorTheme","LEXICAL_LINK","IconButton","useLexicalComposerContext","$findMatchingParent","mergeRegister","$getSelection","$isRangeSelection","COMMAND_PRIORITY_CRITICAL","SELECTION_CHANGE_COMMAND","Check","Copy","React","CSSProperties","useEffect","useRef","useState","createPortal","Tooltip","$isCodeNode","getCodeElementFromSelection","editor","ReturnType","selection","anchorNode","anchor","getNode","codeNode","node","codeElement","getElementByKey","getKey","HTMLElement","getCodeElementFromTarget","target","EventTarget","closest","getActionPosition","anchorElem","anchorRect","getBoundingClientRect","codeRect","top","left","right","CodeBlockActionsPlugin","t0","$","_c","activeCodeElement","setActiveCodeElement","isCopied","setIsCopied","copyResetTimeoutRef","t1","t2","Symbol","for","current","window","clearTimeout","t3","t4","rootElement","getRootElement","handlePointerMove","event","nextCodeElement","handlePointerLeave","getEditorState","read","selectionCodeElement","addEventListener","removeEventListener","t5","t6","registerUpdateListener","t7","editorState","selectionCodeElement_0","registerCommand","selectionCodeElement_1","_temp","position","t8","style","t9","t10","t11","textContent","code","navigator","clipboard","writeText","setTimeout","t12","t13","t14","t15","t16","matches","_c","_temp","Tooltip","useLexicalComposerContext","$nodesOfType","useEffect","CodeNode","MermaidNode","isMermaidLanguage","language","trim","toLowerCase","replaceCodeNodeWithMermaidNode","node","getLanguage","replace","getTextContent","ImportCodeBlocksPlugin","$","_c","editor","t0","t1","update","_temp","codeNodes","n","_c","_temp","useLexicalComposerContext","useEffect","registerCodeHighlighting","CodeHighlightingPlugin","$","_c","editor","t0","t1","_c","createCommand","LexicalCommand","TOGGLE_LINK_EDIT_MODE_COMMAND","$isAtNodeEnd","ElementNode","RangeSelection","TextNode","getSelectedNode","selection","anchor","focus","anchorNode","getNode","focusNode","isBackward","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","DOMRect","floatingElem","HTMLElement","anchorElem","verticalGap","horizontalOffset","placement","coordinateSpace","scrollerElem","parentElement","style","opacity","transform","floatingElemRect","getBoundingClientRect","anchorElementRect","editorScrollerRect","document","documentElement","clientWidth","clientHeight","top","height","left","bottom","width","right","Math","abs","IconButton","Stack","Text","HeadingTagType","FORMAT_TEXT_COMMAND","LexicalEditor","Code","Link","LinkIcon","List","ListOrdered","ListTodo","TextQuote","Tooltip","BlockType","FloatingToolbarButtonsProps","editor","blockType","isBold","isItalic","isUnderline","isCode","isLink","formatHeading","headingSize","formatList","type","formatQuote","insertLink","ToolbarSeparator","$","_c","t0","Symbol","for","display","height","margin","borderLeft","FloatingToolbarButtons","props","undefined","t1","dispatchCommand","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","_c","Tooltip","Code","LinkIcon","$isListNode","$isHeadingNode","$findMatchingParent","$isRootOrShadowRoot","LexicalNode","blockTypeToBlockName","bullet","check","code","h1","h2","h3","h4","h5","h6","number","paragraph","quote","BlockType","toKnownBlockType","type","findSelectionElement","anchorNode","rootMatch","getKey","node","parent","getParent","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","getListType","parentList","getTag","getType","ShouldShowFloatingToolbarParams","hasSelection","isRangeSelection","isCollapsed","hasNativeSelection","hasNativeRange","isAnchorInsideEditor","isEditorEditable","isPointerSelecting","shouldShowFloatingToolbar","params","Box","$isAutoLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","INSERT_CHECK_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_UNORDERED_LIST_COMMAND","REMOVE_LIST_COMMAND","useLexicalComposerContext","$createHeadingNode","$createQuoteNode","HeadingTagType","$setBlocksType","$findMatchingParent","mergeRegister","$createParagraphNode","$getSelection","$isRangeSelection","CLICK_COMMAND","COMMAND_PRIORITY_CRITICAL","COMMAND_PRIORITY_HIGH","LexicalEditor","SELECTION_CHANGE_COMMAND","React","Dispatch","useEffect","useRef","useState","createPortal","TOGGLE_LINK_EDIT_MODE_COMMAND","getSelectedNode","setFloatingElemPos","FloatingToolbarButtons","BlockType","resolveBlockTypeFromAnchor","shouldShowFloatingToolbar","GAP","FloatingTextToolbar","editor","anchorElem","isToolbarActive","setIsToolbarActive","HTMLElement","JSX","Element","editorRef","HTMLDivElement","blockType","setBlockType","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","isCode","setIsCode","isLink","setIsLink","isPointerSelectingRef","updateFloatingToolbarRef","undefined","formatHeading","headingSize","update","selection","formatList","type","dispatchCommand","command","bullet","number","check","formatQuote","insertLink","updateToolbar","hasFormat","node","linkParent","autoLinkParent","nextBlockType","anchor","getNode","current","editorElem","nativeSelection","window","getSelection","rootElement","getRootElement","hasNativeSelection","hasNativeRange","rangeCount","isAnchorInsideEditor","Boolean","contains","anchorNode","hasSelection","isRangeSelection","isCollapsed","isEditorEditable","isEditable","isPointerSelecting","domRect","DOMRect","getRangeAt","getBoundingClientRect","bottomRect","left","bottom","ownerDocument","startPointerSelection","finishPointerSelection","getEditorState","read","addEventListener","removeEventListener","registerUpdateListener","editorState","registerCommand","_payload","FloatingTextFormatToolbarPlugin","t0","$","_c","t1","document","body","t2","GAP","_c","ListNode","useLexicalComposerContext","useEffect","ListMarkerWidthPlugin","$","_c","editor","t0","t1","registerMutationListener","mutations","key","mutation","list","getElementByKey","HTMLOListElement","values","children","flatMap","_temp","style","setProperty","String","Math","max","start","length","toString","item","HTMLLIElement","value","_c","_temp","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","ContentEditable","$isLinkNode","$isListItemNode","$isListNode","ListItemNode","ListNode","$isHeadingNode","$isQuoteNode","$isElementNode","$isInlineElementOrDecoratorNode","$isLineBreakNode","$isParagraphNode","$isTextNode","ElementNode","LexicalNode","TextNode","BlockContent","ListItem","Paragraph","PhrasingContent","Root","Table","TableCell","$isReferenceLinkNode","$isCodeNode","parseMarkdownInline","serializeMarkdownAst","$isDataTableNode","DataTableNode","$isMarkdownImageNode","$isMarkdownLinkNode","$isRawHtmlNode","$isEquationNode","$isHRNode","$isMermaidNode","exportText","node","content","hasFormat","type","value","getTextContent","children","exportInlineNode","url","getSource","alt","getAlt","title","getTitle","isInline","getEquation","getURL","exportInlineChildren","getChildren","flatMap","exportQuoteChildren","inline","flushInline","length","push","splice","child","block","exportBlock","paragraphFrom","exportListItem","exportList","unshift","checked","getChecked","spread","const","ordered","getListType","start","getStart","filter","map","tableCell","exportTable","table","getTable","align","columns","column","alignment","label","rows","row","cells","id","depth","Number","getTag","slice","lang","getLanguage","meta","getCode","exportLexicalToMarkdown","root","tree","$createListItemNode","$createListNode","$createHeadingNode","$createQuoteNode","$createLineBreakNode","$createParagraphNode","$createTextNode","$getRoot","ElementNode","LexicalNode","TextFormatType","Definition","ImageReference","LinkReference","PhrasingContent","RootContent","Table","$createReferenceLinkNode","$createCodeNode","parseMarkdown","serializeMarkdownBlock","serializeMarkdownInline","MarkdownTableAlignment","MarkdownTableValue","MarkdownUrlResolver","$createDataTableNode","$createMarkdownImageNode","$createMarkdownLinkNode","$createRawHtmlNode","$createEquationNode","$createHRNode","$createMermaidNode","ImportContext","definitions","Map","resolver","tableIndex","REFERENCE_TOKEN","formattedText","value","formats","Set","node","format","toggleFormat","textWithReferences","nodes","start","match","matchAll","index","push","slice","label","href","test","length","referenceDefinition","context","get","identifier","toLowerCase","importInlineNode","type","importInlineChildren","children","link","url","title","append","definition","alt","underlineDepth","trim","Math","max","activeFormats","add","tableValue","table","prefix","header","columnCount","columns","Array","from","_","id","alignment","align","rows","map","row","rowIndex","cells","Object","fromEntries","column","columnIndex","appendListItem","parent","item","checked","undefined","child","appendBlock","paragraph","heading","depth","quote","entries","hasTasks","some","listType","ordered","list","lang","importMarkdownToLexical","markdown","tree","filter","root","clear","isEmpty","$createCodeNode","Link","LinkReference","Parent","RootContent","parseMarkdownSource","TextEdit","end","replacement","start","LinkChanges","edits","normalizedCurrent","LinkOccurrence","block","node","nodeOffsets","position","offset","undefined","isParent","Array","isArray","children","isLink","type","linksIn","links","child","push","linkOccurrencesIn","markdown","flatMap","map","removedLinkReplacements","baseline","current","sourceLinks","baselineBlock","baselineLinks","currentBlock","baselineBlockOffsets","currentBlockOffsets","linkOffsets","some","offsets","segments","baselineOffset","slice","currentBlockSource","firstSegment","startsWith","replacements","value","currentOffset","length","index","nextSegment","replacementEnd","indexOf","sourceLinkOffsets","baselineLinkOffsets","edit","normalization","findRemovedLinkReplacements","currentBlocks","preferredBlockIndex","usedCurrentBlocks","Set","candidateIndexes","_","sort","left","right","Number","currentBlockIndex","has","currentLinks","collectMarkdownLinkChanges","source","baselineTree","currentTree","normalizations","linkOrdinal","blockIndex","linkChanges","add","nodeOffsets","diffChars","parseMarkdownSource","SourceMap","end","start","diffSourceBlocks","canonical","source","canonicalBlocks","children","sourceBlocks","sameBlocks","length","every","block","index","type","position","offset","undefined","canonicalOffset","sourceOffset","canonicalEnd","sourceEnd","slice","buildSourceMap","Array","from","fill","removedAtBoundary","change","value","added","removed","nearestMappedOffset","values","direction","at","mappedStart","map","exact","mappedEnd","diffChars","$getRoot","ElementNode","Table","TableCell","parseMarkdownSource","exportLexicalToMarkdown","importMarkdownToLexical","collectMarkdownLinkChanges","buildSourceMap","mappedEnd","mappedStart","SourceMap","MarkdownUrlResolver","TextEdit","end","replacement","start","TableChanges","edits","normalizedCurrent","collectEdits","baseline","current","baselineOffset","pending","finishPending","push","change","added","removed","value","length","sourceLineEnding","source","includes","withSourceLineEndings","lineEnding","replaceAll","withoutPosition","Array","isArray","map","Object","fromEntries","entries","filter","key","entry","sameMarkdownNode","left","right","JSON","stringify","tablesIn","markdown","children","node","type","Boolean","position","tableCells","table","flatMap","row","sameTableShape","every","index","nodeOffsets","offset","undefined","cellContentOffsets","cell","first","last","at","contentStart","contentEnd","cellOffsets","cellSource","slice","leftDelimiter","indexOf","rightDelimiter","endsWith","insideStart","leadingSpace","match","cellMarkdown","offsets","collectTableCellEdits","sourceTable","baselineTable","currentTable","sourceCells","baselineCells","currentCells","currentCell","sourceCell","baselineCell","sourceContent","editsForTable","cellOnlyChange","align","sourceOffsets","currentOffsets","collectTableChanges","sourceTables","baselineTables","currentTables","baselineOffsets","applyChanges","sourceMap","linkChanges","tableChanges","edit","concat","sort","result","MarkdownSourceDocument","exportFromLexical","root","importToLexical","createMarkdownSourceDocument","resolver","loadedBaseline","Link","ChakraLink","IconButton","Input","Stack","Check","Pencil","Trash2","X","React","Tooltip","LinkEditorContentProps","isActive","isLinkEditMode","editedLinkUrl","editedLinkUrlIsValid","linkUrl","href","inputRef","RefObject","HTMLInputElement","onEditedLinkUrlChange","url","onInputKeyDown","event","KeyboardEvent","onClose","onSubmit","onEdit","onRemove","LinkEditorContent","props","$","_c","t0","t1","target","value","t2","t3","Symbol","for","t4","preventFocusLoss","t5","t6","t7","t8","MouseEvent","preventDefault","_c","Tooltip","ChakraLink","shouldCancelLinkEdit","isLinkEditMode","isLink","linkUrl","$isLinkNode","$findMatchingParent","RangeSelection","getSelectedNode","getSelectionLinkUrl","selection","node","linkParent","getURL","SUPPORTED_URL_PROTOCOLS","Set","sanitizeUrl","url","parsedUrl","URL","has","protocol","validateUrl","hostname","pathname","trim","Box","$createLinkNode","$isAutoLinkNode","$isLinkNode","TOGGLE_LINK_COMMAND","useLexicalComposerContext","$findMatchingParent","mergeRegister","$getSelection","$isLineBreakNode","$isRangeSelection","$setSelection","BaseSelection","CLICK_COMMAND","COMMAND_PRIORITY_CRITICAL","COMMAND_PRIORITY_HIGH","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","LexicalEditor","SELECTION_CHANGE_COMMAND","React","Dispatch","useEffect","useLayoutEffect","useRef","useState","createPortal","TOGGLE_LINK_EDIT_MODE_COMMAND","LinkEditorContent","getSelectedNode","shouldCancelLinkEdit","getSelectionLinkUrl","setFloatingElemPos","sanitizeUrl","validateUrl","GAP","LinkEditor","editor","isLink","setIsLink","anchorElem","isLinkEditMode","setIsLinkEditMode","HTMLElement","JSX","Element","editorRef","HTMLDivElement","inputRef","HTMLInputElement","updateLinkEditorRef","undefined","linkUrl","setLinkUrl","editedLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","isActive","editedLinkUrlIsValid","current","selection","nextLinkUrl","closeLinkEditor","editorElem","nativeSelection","window","getSelection","activeElement","document","rootElement","getRootElement","hasNativeRange","rangeCount","contains","anchorNode","isEditable","rangeRect","getRangeAt","getBoundingClientRect","topRect","DOMRect","left","top","height","scrollerElem","parentElement","update","getEditorState","read","addEventListener","removeEventListener","registerUpdateListener","editorState","registerCommand","focus","monitorInputInteraction","event","KeyboardEvent","key","preventDefault","handleLinkSubmission","dispatchCommand","parent","getParent","linkNode","getURL","rel","__rel","target","__target","title","__title","replace","useLinkEditorToolbar","$","_c","activeEditor","setActiveEditor","t0","t1","$updateToolbar","focusNode","focusLinkNode","focusAutoLinkNode","badNode","getNodes","filter","_temp","find","node_0","node","autoLinkNode","autoLinkIsUnlinked","getIsUnlinked","is","t2","_payload","newEditor","_temp2","payload_0","payload","body","selection_0","node_1","linkNode_0","metaKey","ctrlKey","open","LinkEditorPlugin","_c","_temp","_temp2","LinkPlugin","LexicalLinkPlugin","validateUrl","$","_c","t0","Symbol","for","LinkPlugin","_c","LexicalLinkPlugin","useLexicalComposerContext","useEffect","ToggleEditablePlugin","t0","$","_c","isEditable","editor","t1","t2","setEditable","_c","Box","useLexicalComposerContext","TreeView","TreeViewPlugin","$","_c","editor","t0","_c","FRONTMATTER_PATTERN","FENCE_PATTERN","LIST_ITEM_PATTERN","INDENTED_LINE_PATTERN","ActiveListIndent","normalizedIndentWidth","sourceIndentWidth","MarkdownListState","isInCodeFence","activeListIndents","getExpandedIndentWidth","indent","width","char","findParentIndent","reverse","find","toNormalizedIndent","normalizedWidth","sourceWidth","includes","repeat","normalizeIndentedContinuation","line","indentedLineMatch","match","trim","length","parentLevel","normalizedIndent","slice","normalizeListItem","RegExpMatchArray","at","pop","currentLevel","indentStep","push","normalizeMarkdownLine","state","test","trimStart","normalizeMarkdownListIndentation","content","lines","split","map","join","splitFrontmatter","frontmatter","body","MarkdownSectionAnchor","id","heading","occurrence","MarkdownSectionNavigation","anchors","targetId","MatchedMarkdownSection","headingIndex","MarkdownSectionPosition","top","normalizeHeading","value","trim","replace","matchMarkdownSectionAnchors","headings","normalizedHeadings","map","implicitOccurrences","Map","matches","anchor","get","set","seen","candidate","entries","push","sort","left","right","resolveActiveMarkdownSection","sections","threshold","first","active","section","useLexicalComposerContext","useEffect","useRef","MarkdownSectionAnchor","matchMarkdownSectionAnchors","resolveActiveMarkdownSection","MarkdownSectionNavigationPluginProps","anchors","targetId","onActiveSectionChange","sectionId","findScrollContainer","root","HTMLElement","current","parentElement","overflowY","getComputedStyle","includes","MarkdownSectionNavigationPlugin","props","editor","callbackRef","cleanup","frame","requestAnimationFrame","getRootElement","headingElements","Array","from","querySelectorAll","matches","map","heading","textContent","matchedElements","match","id","element","headingIndex","dataset","markdownSectionId","target","find","console","warn","tabIndex","scrollIntoView","block","focus","preventScroll","scrollContainer","previousId","publishActiveSection","containerTop","getBoundingClientRect","top","activeId","scrollTarget","Window","window","addEventListener","passive","removeEventListener","cancelAnimationFrame","MarkdownTableAlignment","MarkdownTableColumn","id","label","alignment","MarkdownTableRow","cells","Record","MarkdownTableValue","columns","rows","updateMarkdownTableColumn","table","columnId","update","Partial","Pick","map","column","updateMarkdownTableCell","rowId","value","row","addMarkdownTableColumn","removeMarkdownTableColumn","length","some","filter","Object","fromEntries","entries","key","addMarkdownTableRow","removeMarkdownTableRow","createEmptyMarkdownTable","Box","Button","Dialog","Field","Flex","Icon","Input","Text","$createCodeNode","useLexicalComposerContext","$createHorizontalRuleNode","LexicalTypeaheadMenuPlugin","MenuTextMatch","$addUpdateTag","$createParagraphNode","$getNodeByKey","$getSelection","$isParagraphNode","$isRangeSelection","HISTORY_MERGE_TAG","LexicalNode","TextNode","Code2","Image","ImageIcon","Minus","Table2","ElementType","FormEvent","useEffect","useState","ReactDOM","createEmptyMarkdownTable","$createDataTableNode","$createMarkdownImageNode","SlashCommandOption","id","key","label","icon","setRefElement","element","HTMLElement","commandDefinitions","Array","Omit","slashTrigger","text","selection","anchorNode","anchor","getNode","getParent","getPreviousSibling","match","exec","leadOffset","matchingString","replaceableString","createTableId","unique","globalThis","crypto","randomUUID","Date","now","Math","random","replaceSlashWithBlock","queryNode","block","parent","replace","nextParagraph","insertAfter","select","SlashCommandMenuProps","options","selectedIndex","onSelect","option","index","onHighlight","SlashCommandMenu","props","$","_c","t0","t1","document","getElementById","scrollIntoView","t2","Symbol","for","t3","length","t4","t5","selected","background","_temp","map","MarkdownSlashCommandPlugin","editor","query","setQuery","imageParagraphKey","setImageParagraphKey","imageUrl","setImageUrl","imageAlt","setImageAlt","filter","toLowerCase","includes","_temp3","update","paragraph","selectStart","tag","setTimeout","focus","closeImageDialog","event","preventDefault","trim","paragraph_0","splice","insertImage","option_1","closeMenu","paragraph_1","set","getKey","removeText","_temp4","Boolean","t6","getRootElement","t7","details","open","t8","t9","t10","t11","event_0","target","value","t12","t13","t14","event_1","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","_temp2","option_0","anchorElementRef","menu","current","createPortal","setHighlightedIndex","option_2","selectOptionAndCleanUp","ImageIcon","_c","_temp","_temp3","_temp4","_Fragment","_temp2","useLexicalComposerContext","HistoryPlugin","COMMAND_PRIORITY_HIGH","KEY_DOWN_COMMAND","REDO_COMMAND","UNDO_COMMAND","useEffect","useState","MarkdownHistoryPlugin","editor","historyState","current","editorState","getEditorState","redoStack","undoStack","registerCommand","event","target","HTMLInputElement","HTMLTextAreaElement","ctrlKey","metaKey","key","toLowerCase","preventDefault","dispatchCommand","shiftKey","undefined","Box","Flex","AutoFocusPlugin","CheckListPlugin","LexicalComposer","LexicalErrorBoundary","HorizontalRulePlugin","ListPlugin","MarkdownShortcutPlugin","OnChangePlugin","RichTextPlugin","TabIndentationPlugin","$addUpdateTag","$getRoot","useEffect","useRef","useState","ContentEditable","editorNodes","editorTheme","editorTransformers","createMarkdownSourceDocument","MarkdownUrlResolver","MarkdownUrlProvider","CodeBlockActionsPlugin","ImportCodeBlocksPlugin","CodeHighlightingPlugin","EquationPlugin","FloatingTextFormatToolbarPlugin","LinkEditorPlugin","LinkPlugin","ListMarkerWidthPlugin","ToggleEditablePlugin","TreeViewPlugin","splitFrontmatter","MarkdownSectionNavigationPlugin","MarkdownSlashCommandPlugin","MarkdownHistoryPlugin","MarkdownSectionNavigation","INITIAL_IMPORT_TAG","MarkdownEditorProps","autoFocus","debug","defaultState","fullWidth","isEditable","padding","placeholder","scrollable","sectionNavigation","resolveMarkdownUrl","onActiveSectionChange","sectionId","onChange","value","MarkdownEditor","props","frontmatter","body","shouldTrackChanges","Boolean","editorContainerRef","HTMLDivElement","sourceDocumentRef","ReturnType","current","sourceDocument","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","HTMLElement","initialConfig","namespace","nodes","editorState","importToLexical","onError","error","Error","console","editable","theme","anchors","targetId","_editor","tags","has","read","root","markdownBody","exportFromLexical","LinkPlugin","ContentEditable","_Fragment","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","$getNodeByKey","$getSelection","$isElementNode","$isRangeSelection","$isTextNode","$setSelection","PointType","RangeSelection","useLayoutEffect","useRef","validPoint","point","node","key","isAttached","type","offset","getTextContentSize","getChildrenSize","PreserveSelectionPlugin","props","isEditable","editor","selection","editing","current","registerUpdateListener","editorState","read","saved","anchor","focus","clone","root","getRootElement","contains","document","activeElement","restoreSelection","update","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","theme","$getTextContent","getTextFromSerializedEditorState","PromptEditorProps","defaultState","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","ContentEditable","_temp2","EditorConfig","NodeKey","SerializedTextNode","TextNode","ChatCodeLinkNode","__href","__description","getType","clone","node","__text","__key","constructor","text","href","description","key","importJSON","value","updateFromJSON","exportJSON","type","createDOM","config","anchor","document","createElement","setAttribute","tabIndex","dataset","chatSource","chatOrigin","title","append","updateDOM","previous","__format","useLexicalComposerContext","TextNode","useEffect","MarkdownLinkNode","ChatCodeLinkNode","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","removeCode","node_0","hasFormat","parent","getParent","getType","includes","candidate_1","getTextContent","parsed_1","replacement","setFormat","getFormat","replace","activate","removeRoot","registerRootListener","root","previous","removeEventListener","addEventListener","chatLinks","_c","useLexicalComposerContext","useEffect","StateUpdatePluginProps","value","onUpdate","StateUpdatePlugin","t0","$","_c","editor","t1","t2","update","tag","_c","Flex","ClickableLinkPlugin","LexicalComposer","LexicalErrorBoundary","HorizontalRulePlugin","LinkPlugin","ListPlugin","OnChangePlugin","RichTextPlugin","TabIndentationPlugin","$addUpdateTag","$getRoot","useRef","ChatCodeLinkNode","ChatLinkProps","ChatLinkProvider","useChatLinkHandler","ChatLinkPlugin","ContentEditable","editorNodes","editorTheme","createMarkdownSourceDocument","MarkdownUrlResolver","MarkdownUrlProvider","ImportCodeBlocksPlugin","CodeHighlightingPlugin","EquationPlugin","ListMarkerWidthPlugin","StateUpdatePlugin","ToggleEditablePlugin","TreeViewPlugin","splitFrontmatter","RichMessageProps","debug","defaultState","fullWidth","isEditable","resolveMarkdownUrl","onChange","value","SOURCE_IMPORT_TAG","RichMessage","props","$","_c","inherited","t0","linkHandler","t1","t2","RichMessageContent","frontmatter","body","shouldTrackChanges","Boolean","sourceDocumentRef","ReturnType","current","initialConfig","namespace","nodes","editorState","importToLexical","onError","error","Error","console","editable","theme","sourceDocument","_editor","tags","has","read","root","markdownBody","exportFromLexical","_c","ContentEditable","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","__exportAll","ActivityComment","ActivityTimeline","useHostStorage","ResourceBadge","AlertMessage","AttachmentChip","createHostStoreRegistry","Chip","Switch$1","createHostPersistStorage","Slider$1","installPrismGlobal","getIconComponent","ActivityFeed","ActivityEvent","Tooltip$1","ScrollArea$1","Checkbox$1","filterSearchableMenuItems","ResourceContextMenu","SearchableMenu","ListRow","EmptyState$1","React","Fragment$1","Code$1","Component$1","Image$1","Link$1","Y","$createCodeNode$1","DOMPurify","katex","ReactDOM","StyledEditable","chakra","ContentEditable","ContentEditable$1","$","c","t1","t2","t3","t0","fullWidth","isRichMessage","scrollable","t4","t5","t6","t7","onRef","padding","Box","editor","t8","t9","t10","invalid","positive","value","localSource","source","url","filePosition","position","hash","match","isInlinePath","explicit","original","shaped","parseChatLink","candidate","dashboardOrigin","local","file","path","ChatLinkContext","createContext","ChatLinkProvider","props","children","handler","useChatLinkHandler","useContext","ChatLinkAnchor","parsed","href","event","event_0","Link","ReferenceLinkBadge","T0","T1","T2","label","ReferenceLinkNode","DecoratorNode","node","key","$createReferenceLinkNode","serializedNode","$isReferenceLinkNode","LINK_REGEXP","REFERENCE_LINK_TRANSFORMER","theme","normalFilter","filter","setAdvancedGroup","groups","next","group","entry","index","_groups","normal","addAdvancedGroup","NO_GROUPING","isEnumOptionsSource","options","isAttributesSource","attributes","DEFAULT_KANBAN_RENDERER_SETTINGS","findAttribute","id","attribute","dedupeEnumOptions","seen","option","getEnumOptions","type","toTitleCase","chunk","findEnumOption","enumOptionLabel","TITLE_FIELD","withTitleField","findField","fields","field","isOptionField","canSortField","fieldConditions","VIEW_FILTER_CONDITIONS","EQUIVALENT_CONDITIONS","acceptedCondition","conditions","condition","equivalent","getAttributeValue","raw","descriptor","row","getAttributeStringValues","DATE_ONLY","parseViewDate","day","date","formatFieldText","values","defaultCondition","newRule","setRuleAt","rule","item","addRule","setConjunction","selectRuleValues","negative","CollectionItemLabelContext","useCollectionItemLabel","FIELD_ICONS","Type","Hash","Calendar","SquareCheck","CircleDashed","Tags","UserRound","fieldIcon","ParamEditorLabel","compact","name","Text","description","Icon","Info","HStack","FilterValuePanel","Stack","toList","RuleSelect","multiple","placeholder","icon","selectedOptions","t11","t12","onSelect","showSearch","selected","_temp$30","details","option_1","t13","t14","t15","t16","t17","t18","t19","t20","ChevronDown","t21","width","Button","t22","option_0","NumberInputRoot","rest","NumberInput","ref","NumberInputField","CONDITION_LABELS","conditionLabel","pillConditionLabel","single","RELATIVE_DAY$1","dayLabel","relative","days","unit","optionLabel","ruleValueLabel","DIRECTION_LABELS","sortDirectionLabel","ascending","descending","direction","ViewBarPopoverContext","ViewBarPopover","placement","contentRef","useRef","nested","anchorRef","onOpenChange","open","closeOnOutsidePointerDown","target","useEffect","testId","Popover","Portal","ISO_DAY$1","NumberParameterValue","draft","setDraft","useState","onChange","ScalarValueEditor","Input","DateBubbleValue","localOpen","setLocalOpen","setOpen","variant","Fragment","valueKind","toggle","withSavedOptions","listValue","NumberValue","TextValue","TextBubbleValue","details_0","details_1","Editable","RuleValueControl","suppliedOptions","kind","selectedLabel","allValuesLabel","_temp$29","_temp2$15","OptionChecklist","checked","RuleValueEditor","changeCondition","OptionConditionSelect","empty","positiveCondition","negativeCondition","ConditionSelect","boolean","choices","condition_0","selectedCondition","updated","RuleLead","conjunction","onConjunctionChange","FilterRuleRow","savedRule","normalizeBooleanViewRule","itemLabel","_temp$28","optionsFor","X","onDelete","IconButton","AdvancedFilterMenu","firstField","Plus","AdvancedFilterPill","summary","ListFilter","onRemove","RELATIVE_DAY","ISO_DAY","dayKey","resolveViewDay","offset","today","iso","rowDay","rowNumber","rowText","compareTests","left","right","ordered","read","test","compileListRule","matched","compileTextRule","needle","compileValueRule","actual","compileRule","compileGroup","tests","child","filterRowsByView","rows","countFilterRules","count","FilterRulePill","RenameViewDialog","setValue","title","onClose","onRename","nextTitle","submit","Dialog","nextViewTitle","views","view","CollectionViewTabs","renameTarget","setRenameTarget","busy","createView","run","viewsSource","Pencil","Copy","Trash2","actionsFor","onActivate","view_0","activeViewId","dirty","view_1","Tabs","state","LayersPlus","EMPTY_VIEW_FILTER","ScalarPickerValue","complete","onSelectRule","FilterPickerValues","scalar","Check","value_0","contentProps","FilterMenu","query","setQuery","activeId","setActiveId","visible","field_0","active","Search","field_1","ChevronRight","STORE_NAMESPACE","createCollectionViewStore","snapshot","initialState","createStore","persist","set","openMenu","openRuleIndex","current","settings","sorts","groupId","isExpanded","storageKey","storage","restored","persisted","hostCollectionViewStore","getCollectionViewStore","useCollectionViewStore","useStore","selector","normalizeBooleanViewFilter","rules","UNORDERED_SETTINGS","comparableSettings","comparableFilter","isCollectionViewDirty","comparable","sort","useCollectionViews","input","store","_temp$27","defaults","_temp2$14","sourceViews","filter_0","_temp3$4","view_2","defaultId","previous","state_0","normalized","view_3","prior","view_5","fallback","view_4","ViewSearchField","inputRef","onValueChange","close","resultLabel","CountButton","buttonRef","onClick","CollectionViewBar","activeView","filterFields","filterButtonRef","error","setError","setBusy","setOpenMenu","action","failure","activateView","optionsForId","showCriteria","leading","align","search","onSearchChange","searchResultLabel","displayControl","actions","setOpenRuleIndex","isOpen","setFilter","index_0","next_0","RotateCcw","isOpen_0","selectRule","noOptions","DataTableHeader","DataTableRowDisplaySwitch","onWrapRowsChange","wrapRows","DataTableRowDisplayMenu","content","Settings2","isDataTableDiffValue","normalizeSearchQuery","findSearchRanges","ranges","haystack","text","searchRows","textsOf","HighlightedText","parts","cursor","start","end","part","relativeUnits","parseDate","time","formatDataTableRelativeDate","format","locale","elapsedSeconds","now","DataTableDateCell","setNow","_temp$26","timer","relativeLabel","fullDate","ParamEditorControlItem","hideLabel","orientation","header","labelTrailing","Flex","selectionIndicator","multiSelect","Square","selectionIconComponent","selectionOptionIcon","SelectionMenu","reselectable","searchable","allowCustomValues","searchPlaceholder","emptyText","triggerVariant","size","onGroupChange","canChangeGroup","selectedIds","isDisabled","disabled","triggerAriaLabel","triggerLabel","trigger","onToggle","items","selectedGroup","option_2","filtered","items_0","option_3","Menu","option_4","option_5","ActionInput","presentation","setActive","defaultValue","optionId","horizontal","selectedName","readOnly","ANCHOR_GRID_VALUES","isAnchorGridValue","ParamEditorReadOnlyValue","boxProps","AnchorGridInput","select","anchor","Grid","grid","BooleanInput","ColorInput","rootRef","timeoutRef","nextColor","scheduleChange","isInsidePicker","handleOutsideInteraction","newColor","handleChange","root","handleBlur","valueElement","parseColor","rootProps","ColorPicker","t23","t24","t25","t26","t27","picker","t28","calendarDatePattern","formatReadOnlyDate","calendarDate","year","month","DateInput","nextValue","newValue","max","min","_temp$25","e_1","_temp2$13","e_0","e_2","valueId","createFileUploadValues","existing","files","getFileUploadSummary","statusIcons","Clock3","CircleCheck","CircleAlert","UploadStatus","noun","labels","Spinner","UploadQueue","Wrap","FileUploadInput","uploadLabel","setValues","commit","remove","Paperclip","button","accept","HorizontalTextInput","setIsExpanded","handleClick","handleKeyDown","Textarea","_temp$24","MarkdownInput","LazyMarkdownEditor","editorValue","NumberInput$1","step","hideSlider","showSlider","useFullWidthLayout","pendingRef","nextValue_0","flushChange","_temp$23","_temp2$12","details_2","clampToRange","lower","upper","snapToStep","origin","formatUnitValue","rounded","normalizeRange","first","second","SliderMarks","positions","_temp$22","RangeInput","trailing","markerCount","slider","optionIcon","openExternal","copyToClipboard","ResourceChip","handleSelect","onOpenResource","ResourceChipList","toIds","resolveOptions","ids","FieldShell","control","ResourceSelectMenu","ResourceInput","editable","emitChange","interactive","toggleOption","next_1","next_2","removeOption","next_3","entry_0","optionId_0","SegmentedInput","Group","withCustomChoices","SelectionInput","clearable","groupValue","setGroupValue","availableOptions","handleGroupChange","handleToggle","getDisplayText","names","selectedId","_temp$21","triggerOption","menu","optionName","TextInput","singleLine","_temp$20","_temp2$11","e_3","ParamEditorInlineGroup","clampAxis","bounds","updateVectorAxis","clamped","axis","VectorAxisField","onCommit","fieldId","VectorInput","xLabel","yLabel","commitAxis","resolveParamValue","defaultValues","paramId","ParamEditorAdvancedField","param","common","isParamEditorRichControl","isParamEditorHorizontalControl","formatPrimitive","ReadOnlyContent","_temp$19","images","_temp2$10","ParamEditorReadOnlyField","Badge","Image","image","PropertyField","ParamEditorField","richControl","ParamEditorRow","small","_temp$18","ParamEditorSectionTitle","ParamEditorSectionHeader","collapsible","ParamEditorSectionBody","sectionPadding","defaultCollapsed","isFirst","params","ParamEditorSection","canCollapse","contentOpen","_temp$17","Collapsible","ParamEditor","_temp$16","ParamEditorControlList","imageExtensionPattern","imageLabelPattern","humanizeKey","words","formatPath","isPrimitiveArray","appendJsonFields","entries","parseJsonCellValue","buildJsonFields","isJsonImageValue","isJsonImageArray","formatJsonPrimitive","formatJsonValue","getJsonCellSummary","parsedValue","visibleValues","remainingCount","toReadOnlyValue","buildFriendlyJsonParams","FriendlyJsonDisplay","isDisplayValue","isString","v","isNumber","isBoolean","getType","comparableValues","isValidElement","headerIconProps","getIcon","CalendarClock","CheckCircle2","formatDisplayValue","columnHelper","createColumnHelper","resolveDataTableRowId","getRowId","resolveInitialPageSize","getSelectedOriginalRows","resolveSelectionActions","shouldEnableSelection","shouldHighlightActiveRow","toAttributeValue","resolveDataTableComparableValue","renderer","resolveAttributeType","resolveDataTableFieldKind","columnKey","buildDataTableRendererAttributes","columnKeys","buildDataTableRendererRows","renderers","rowId","firstValue","resolveDataTableColumnOrder","availableColumnIdSet","availableColumnIds","orderedColumnIds","requestedColumnOrder","columnId","orderedColumnIdSet","missingColumnIds","toggleHiddenDataTableColumn","hiddenColumnIds","nodeText","dataTableCellText","reorderDataTableColumns","activeIndex","columnIds","activeColumnId","overIndex","overColumnId","nextColumnIds","activeColumn","resolveDataTableToolbarStorageKey","InlineEditActions","onSave","saveLabel","cancelLabel","onCancel","EditModeTextSurface","elementRef","initialValueRef","element","selection","range","accessibleName","textStyle","EditModeHeaderEditor","EditModeCellEditor","customEditor","getRowDisplayProps","EditModeDataTableCell","activeDraft","cellRef","context","editMode","isReadOnly","isEditable","rowDisplayProps","isActive","onDraftChange","column","Table","stopControlPropagation","EditModeSelectionHeader","indeterminate","Minus","EditModeSelectionCell","EditModeDataTableBody","activeCell","columns","data","enableSelection","onActivateCell","onCancelCell","onCommitCell","onRemoveRow","onToggleRowSelection","pageIndex","pageRows","pageSize","rowIdFor","selectedRowIds","rowIndex","visibleIndex","sourceIndex","tableRow","onAddRow","showNewRow","EditModeDataTableHeader","rowDisplayControl","selectionHeader","activeHeader","columnIcons","onCancelHeaderEdit","onDeleteColumn","onHeaderDraftChange","onHeaderEdit","onSaveHeader","isEditing","headerIcon","onAddColumn","PaginationFooter","totalPages","pageCount","canGoBack","canGoForward","onPageSizeChange","pageSizeOptions","onPageChange","ChevronsLeft","ChevronLeft","ChevronsRight","SelectionToolbar","actionLabel","onClearSelection","selectedCount","onSelectAll","totalCount","selectedRows","compareEnumValues","toIndex","toTime","compareFieldValues","a","b","leftValue","rightValue","isEmpty","compileSort","leftEmpty","rightEmpty","sortRowsByView","compare","emptyGroupKey","groupLabel","resolveGroupValue","groupKey","compareGroupKeys","groupRowsByField","knownKeys","groupRows","dataTableInitialState","DEFAULT_DATA_TABLE_SETTINGS","useDataTableViewStore","useDataTableView","permanentlyHidden","hiddenColumns","baseColumnKeys","_temp$15","setSearch","deferredSearch","useDeferredValue","orderedColumnKeys","key_0","visibleColumnKeys","columnRenderers","filteredRows","shownRows","key_1","groupField","_temp2$9","createId","EditModeDataTable","initialPageSize","setPageIndex","setPageSize","setActiveCell","setActiveHeader","setSelectedRowIds","_temp$14","_temp2$8","_temp3$3","setWrapRows","filteredRendererRows","filteredData","_temp4$3","cappedPageSizeOptions","_temp5","tableWidth","selectionActions","visibleIds","_temp6","rowId_0","row_1","row_2","commitCell","column_1","update","updateColumn","commitHeader","addColumn","column_2","columnId_0","removeColumn","row_3","_temp7","addRow","nextPageSize","changePageSize","row_4","index_1","rowId_1","removeRow","current_0","rowId_2","toggleRowSelection","allRowsSelected","row_5","_temp8","toolbarStorageKey","t29","t30","t31","t32","t33","t34","t35","_temp9","t36","t37","t38","t39","t40","t41","current_1","column_5","t42","checked_0","_temp0","t43","t44","t45","t46","t47","t48","_temp1","t49","t50","t51","column_0","row_0","column_3","row_6","column_4","row_7","row_8","Editor","setEditor","cancelled","module","markdown_editor_exports","parserOptions","gfm","math","gfmFromMarkdown","mathFromMarkdown","serializerOptions","gfmToMarkdown","mathToMarkdown","fenceStart","line","normalizeLegacyInlineMath","codeFenceLength","result","length","delimiter","normalizeLegacyMath","fencedCode","markdown","closingFence","openingFence","displayMath","indent","parseMarkdown","fromMarkdown","parseMarkdownSource","serializeMarkdownAst","toMarkdown","tree","serializeMarkdownBlock","serializeMarkdownInline","parseMarkdownInline","SAFE_LINK_PROTOCOLS","SAFE_IMAGE_DATA_URL","PROTOCOL","hasSafeLinkProtocol","hasSafeImageProtocol","resolveMarkdownUrl","resolved","resolver","MarkdownUrlContext","MarkdownUrlProvider","useMarkdownUrlResolver","imageSourceKey","addCapturedImages","sources","src","indexChatImageSources","message","messages","capturedChatImageSource","ChatImageHistoryContext","useChatImageHistory","ChatImageSourcesContext","useChatImageSources","MarkdownImage","captured","loaded","setLoaded","direct","_temp$13","alt","onLoad","MarkdownImageNode","$createMarkdownImageNode","selectedBlockKey","$getSelection","imageNode","$getNodeByKey","$isRangeSelection","followingBlockKey","selectionBlock","blockKey","$applyNodeReplacement","$isMarkdownImageNode","isHtmlComment","sanitizeMarkdownHtml","clean","template","RawHtml","attachElement","fragment","element_0","display","RawHtmlNode","$createRawHtmlNode","$isRawHtmlNode","InlineChildren","nodes","Code","MarkdownInline","projectRows","table","projectColumns","MarkdownDataTable","isSelected","setSelected","containerRef","focusTable","nodeKey","$isDataTableNode","change","HISTORY_PUSH_TAG","updateTable","handleColumnsChange","handleDataChange","node_0","paragraph","$createParagraphNode","deleteTable","target_0","event_1","isTextInput","REDO_COMMAND","UNDO_COMMAND","_temp$12","_temp2$7","_temp3$2","_temp4$2","DataTableNode","writable","$createDataTableNode","json","safeLinkUrl","MarkdownLinkNode","LinkNode","resolvedUrl","config","changed","$createMarkdownLinkNode","$isMarkdownLinkNode","EquationComponent","$convertEquationElement","equation","domNode","inline","$createEquationNode","EquationNode","prevNode","Suspense","equationNode","$isEquationNode","EQUATION_INLINE","EQUATION_MULTILINE","linesInBetween","rootNode","EquationPlugin","HRNode","ElementNode","$createHRNode","$isHRNode","MermaidComponent","lazy","MermaidNode","code","$isMermaidNode","$createMermaidNode","HR","UNDERLINE_INS_TAG","TextNode","markdownText","textNode","$createTextNode","UNDERLINE_U_TAG","BARE_URL_REGEXP","unescapeUrl","escapeLinkTitle","unescapeLinkTitle","normalizeEscapedUrlText","textContent","exportedText","escapedHref","TRANSFORMERS_EXTENDED","$isLinkNode","$isAutoLinkNode","exportChildren","linkText","linkUrl","linkTitle","linkNode","$createLinkNode","openBracketAmount","closeBracketAmount","parsedLinkText","outsideLinkText","linkTextParts","normalizedLinkText","linkTextNode","AutoLinkNode","autoLinkNode","$createAutoLinkNode","editorNodes","QuoteNode","HeadingNode","ListNode","ListItemNode","CodeNode","CodeHighlightNode","editorTransformers","CHECK_LIST","TRANSFORMERS","transformer","LINK","editorTheme","getCodeElementFromSelection","anchorNode","codeNode","$isCodeNode","$findMatchingParent","codeElement","getCodeElementFromTarget","getActionPosition","anchorRect","anchorElem","codeRect","CodeBlockActionsPlugin","useLexicalComposerContext","activeCodeElement","setActiveCodeElement","isCopied","setIsCopied","copyResetTimeoutRef","rootElement","handlePointerMove","nextCodeElement","handlePointerLeave","selectionCodeElement","mergeRegister","selectionCodeElement_0","SELECTION_CHANGE_COMMAND","selectionCodeElement_1","_temp$11","COMMAND_PRIORITY_CRITICAL","style","jsx","createPortal","isMermaidLanguage","language","replaceCodeNodeWithMermaidNode","ImportCodeBlocksPlugin","_temp$10","codeNodes","$nodesOfType","n","CodeHighlightingPlugin","registerCodeHighlighting","TOGGLE_LINK_EDIT_MODE_COMMAND","createCommand","getSelectedNode","focus","focusNode","$isAtNodeEnd","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","scrollerElem","targetRect","floatingElemRect","floatingElem","anchorElementRect","editorScrollerRect","coordinateSpace","top","verticalGap","horizontalOffset","ToolbarSeparator","FloatingToolbarButtons","isBold","FORMAT_TEXT_COMMAND","isItalic","isUnderline","blockType","formatHeading","isCode","isLink","insertLink","TextQuote","formatQuote","formatList","List","ListOrdered","ListTodo","t52","blockTypeToBlockName","toKnownBlockType","findSelectionElement","parent","$isRootOrShadowRoot","resolveBlockTypeFromAnchor","$isListNode","parentList","$isHeadingNode","shouldShowFloatingToolbar","hasSelection","isRangeSelection","isCollapsed","hasNativeSelection","hasNativeRange","isAnchorInsideEditor","isEditorEditable","isPointerSelecting","GAP$1","FloatingTextToolbar","editorRef","setBlockType","setIsBold","setIsItalic","setIsUnderline","setIsCode","setIsLink","isPointerSelectingRef","updateFloatingToolbarRef","headingSize","$createHeadingNode","REMOVE_LIST_COMMAND","command","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_CHECK_LIST_COMMAND","selection_0","$createQuoteNode","TOGGLE_LINK_COMMAND","updateToolbar","selection_1","linkParent","autoLinkParent","nextBlockType","selection_2","editorElem","nativeSelection","domRect","setIsToolbarActive","rootElement_0","ownerDocument","startPointerSelection","finishPointerSelection","ownerDocument_0","CLICK_COMMAND","selection_3","COMMAND_PRIORITY_HIGH","isToolbarActive","FloatingTextFormatToolbarPlugin","ListMarkerWidthPlugin","mutation","mutations","list","_temp$9","AwarenessCursorsCSS","CollaborativeMarkdownEditor","wsParams","userName","userColor","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","_temp$8","roomId","wsUrl","nextProvider","WebsocketProvider","isSynced","provider","_temp2$6","initialConfig","CollaborationPluginV2__EXPERIMENTAL","LinkPlugin","ListPlugin","TabIndentationPlugin","HorizontalRulePlugin","RichTextPlugin","LexicalErrorBoundary","LexicalComposer","LexicalCollaboration","exportText","exportInlineNode","$isTextNode","$isLineBreakNode","exportInlineChildren","$isElementNode","exportQuoteChildren","flushInline","$isInlineElementOrDecoratorNode","block","exportBlock","paragraphFrom","exportListItem","exportList","$isParagraphNode","$isListItemNode","tableCell","exportTable","$isQuoteNode","exportLexicalToMarkdown","REFERENCE_TOKEN","formattedText","formats","textWithReferences","referenceDefinition","importInlineNode","importInlineChildren","$createLineBreakNode","link","definition","underlineDepth","activeFormats","tableValue","prefix","columnCount","columnIndex","appendListItem","$createListItemNode","appendBlock","heading","quote","hasTasks","listType","$createListNode","importMarkdownToLexical","$getRoot","nodeOffsets$1","isParent","linksIn","links","linkOccurrencesIn","removedLinkReplacements","baselineBlockOffsets","baselineBlock","currentBlockOffsets","currentBlock","linkOffsets","baselineLinks","offsets","segments","baselineOffset","baseline","currentBlockSource","firstSegment","replacements","currentOffset","nextSegment","replacementEnd","replacement","sourceLinkOffsets","sourceLinks","baselineLinkOffsets","findRemovedLinkReplacements","candidateIndexes","currentBlocks","preferredBlockIndex","currentBlockIndex","usedCurrentBlocks","currentLinks","collectMarkdownLinkChanges","baselineTree","currentTree","edits","normalizations","linkOrdinal","blockIndex","linkChanges","normalizedCurrent","normalization","diffSourceBlocks","canonicalBlocks","canonical","sourceBlocks","diffChars","canonicalOffset","sourceOffset","canonicalEnd","sourceEnd","buildSourceMap","removedAtBoundary","nearestMappedOffset","mappedStart","exact","map","mappedEnd","collectEdits","pending","finishPending","sourceLineEnding","withSourceLineEndings","lineEnding","withoutPosition","sameMarkdownNode","tablesIn","tableCells","sameTableShape","nodeOffsets","cellContentOffsets","cell","last","contentStart","contentEnd","cellOffsets","cellSource","leftDelimiter","rightDelimiter","insideStart","leadingSpace","cellMarkdown","collectTableCellEdits","sourceCells","sourceTable","baselineCells","baselineTable","currentTable","sourceCell","baselineCell","currentCell","sourceContent","editsForTable","sourceOffsets","currentOffsets","collectTableChanges","sourceTables","baselineTables","currentTables","baselineOffsets","applyChanges","tableChanges","edit","sourceMap","createMarkdownSourceDocument","loadedBaseline","LinkEditorContent","isLinkEditMode","editedLinkUrlIsValid","onEditedLinkUrlChange","editedLinkUrl","onInputKeyDown","preventFocusLoss","onSubmit","onEdit","shouldCancelLinkEdit","getSelectionLinkUrl","SUPPORTED_URL_PROTOCOLS","sanitizeUrl","parsedUrl","validateUrl","GAP","LinkEditor","updateLinkEditorRef","setLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","nextLinkUrl","closeLinkEditor","activeElement","rangeRect","setIsLinkEditMode","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","useLayoutEffect","monitorInputInteraction","handleLinkSubmission","useLinkEditorToolbar","activeEditor","setActiveEditor","$updateToolbar","focusLinkNode","focusAutoLinkNode","_temp$7","autoLinkIsUnlinked","newEditor","_temp2$5","payload_0","node_1","linkNode_0","payload","LinkEditorPlugin","LinkPlugin$1","ToggleEditablePlugin","TreeViewPlugin","TreeView","FRONTMATTER_PATTERN","splitFrontmatter","normalizeHeading","matchMarkdownSectionAnchors","normalizedHeadings","headings","implicitOccurrences","matches","anchors","occurrence","headingIndex","resolveActiveMarkdownSection","sections","section","threshold","findScrollContainer","overflowY","MarkdownSectionNavigationPlugin","callbackRef","onActiveSectionChange","cleanup","frame","headingElements","matchedElements","match_0","match_1","targetId","scrollContainer","previousId","publishActiveSection","containerTop","match_2","scrollTarget","createEmptyMarkdownTable","commandDefinitions","Table2","Code2","slashTrigger","createTableId","replaceSlashWithBlock","queryNode","nextParagraph","SlashCommandMenu","selectedIndex","onHighlight","_temp$6","MarkdownSlashCommandPlugin","imageParagraphKey","setImageParagraphKey","imageUrl","setImageUrl","imageAlt","setImageAlt","_temp3$1","HISTORY_MERGE_TAG","closeImageDialog","paragraph_0","insertImage","paragraph_1","$addUpdateTag","closeMenu","$createCodeNode","$createHorizontalRuleNode","LexicalTypeaheadMenuPlugin","_temp4$1","Field","_temp2$4","anchorElementRef","MarkdownHistoryPlugin","historyState","KEY_DOWN_COMMAND","HistoryPlugin","MarkdownEditor","INITIAL_IMPORT_TAG","defaultState","shouldTrackChanges","sourceDocumentRef","body","sourceDocument","sectionNavigation","autoFocus","AutoFocusPlugin","CheckListPlugin","MarkdownShortcutPlugin","OnChangePlugin","tags","editorState","markdownBody","frontmatter","debug","INSERT_BLOCK_COMMAND","convertCommentElement","$createCommentNode","CommentNode","addClassNamesToElement","isHTMLElement","formatType","newBlock","restoreSelection","insertCommentBlock","commentNode","nodeToReplace","$setBlocksType","useCommentCommands","_temp$5","useCommentSchema","invalidChildren","_temp$4","_temp2$3","CommentPlugin","matchCommandQuery","CommandOption","MenuOption","CommandMenu","useSlotRecipe","styles","_temp$3","CommandMenuPlugin","_temp2$2","commands","_temp3","command_1","_temp4","$setSelection","command_0","options_0","setHighlightedIndex","selectOptionAndCleanUp","$getTextContent","childrenLength","i","shouldAppendParagraphBreak","traverseSerializedNode","getTextFromSerializedEditorState","emptyEditorState","generateEditorStateFromString","ImperativeAPIPlugin","previousTextRef","_temp$2","useImperativeHandle","shouldSubmitOnEnter","shouldRecallPrevious","shouldRecallNext","insertModifiedEnter","INSERT_LINE_BREAK_COMMAND","INSERT_PARAGRAPH_COMMAND","KeyboardShortcutPlugin","onRecallNext","onRecallPrevious","validPoint","point","PreserveSelectionPlugin","editing","saved","saved_0","promptInputTheme","MarkNode","PromptEditor","forwardRef","onError","_temp$1","placeholderNode","rawText","_temp2$1","ChatCodeLinkNode","isModifiedClick","activateChatLink","ChatLinkPlugin","removeLink","removeLinkPresentation","candidate_0","parsed_0","removeCode","candidate_1","parsed_1","activate","removeRoot","StateUpdatePlugin","onUpdate","SOURCE_IMPORT_TAG","RichMessage","inherited","RichMessageContent","ClickableLinkPlugin","iconComponents","Activity","Bell","ExternalLink","GitBranch","MessageCircle","ScanSearch","Sparkles","ActivityIcon","IconComponent","ItemActions","attentionActions","onActionSelect","onRelatedResourceSelect","resource","AttentionStatus","attention","ResourceActivityItem","fallbackActorName","actor","formatTimestamp","timestamp","attentionIcon","defaultFormatTimestamp","createdAt","ResourceActivityFeed","onLoadMore","isLoading","hasMore","isLoadingMore","emptyTitle","emptyDescription","errorTitle","loadMoreLabel","loadingLabel","scaledSmallFontSize","formatValue","DefaultRichTextCodeEditor","defaultCode","showLineNumbers","disableScroll","lines","_temp","codeBlock","DefaultRichTextDataTable","noBorder","hiddenSet","_temp2","inferResourceTypeFromMediaType","mediaType","extensionToMediaType","mediaTypeFromPath","ext"],"sources":["../src/components/rich-text/shared/components/content-editable.tsx","../src/components/chat-ui/links/chat-link.ts","../src/components/chat-ui/links/chat-link-context.tsx","../src/components/chat-ui/links/chat-link-anchor.tsx","../src/components/rich-text/shared/components/reference-link-badge.tsx","../src/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode.tsx","../src/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkTransformer.ts","../src/components/rich-text/theme/rich-text-theme.tsx","../src/components/collection-view/advanced-filter.ts","../src/components/kanban-renderer/types.ts","../src/components/kanban-renderer/kanban-renderer-enum-helpers.ts","../src/components/collection-view/collection-view-fields.ts","../src/components/collection-view/collection-view-rules.ts","../src/components/collection-view/collection-item-label.tsx","../src/components/collection-view/collection-view-field-icon.ts","../src/components/param-editor/param-editor-label.tsx","../src/components/collection-view/filter-value-panel.tsx","../src/components/collection-view/rule-select.tsx","../src/components/primitives/number-input.tsx","../src/components/collection-view/collection-view-labels.ts","../src/components/collection-view/view-bar-popover.tsx","../src/components/collection-view/scalar-filter-value.tsx","../src/components/collection-view/filter-rule-value.tsx","../src/components/collection-view/view-filter-rule-editor.tsx","../src/components/collection-view/filter-rule-row.tsx","../src/components/collection-view/advanced-filter-menu.tsx","../src/components/collection-view/advanced-filter-pill.tsx","../src/components/collection-view/collection-view-filter.ts","../src/components/collection-view/collection-view-pills.tsx","../src/components/collection-view/collection-view-tabs.tsx","../src/components/collection-view/collection-view-types.ts","../src/components/collection-view/filter-picker-values.tsx","../src/components/collection-view/filter-menu.tsx","../src/components/collection-view/use-collection-view-store.ts","../src/components/collection-view/normalize-boolean-view-filter.ts","../src/components/collection-view/use-collection-views.ts","../src/components/collection-view/view-search-field.tsx","../src/components/collection-view/collection-view-bar.tsx","../src/components/data-table/data-table-header.tsx","../src/components/data-table/data-table-row-display.tsx","../src/components/data-table/data-table-cell-value.ts","../src/components/collection-view/collection-view-search.ts","../src/components/collection-view/highlighted-text.tsx","../src/components/data-table/data-table-date-cell.tsx","../src/components/param-editor/param-editor-control-item.tsx","../src/components/param-editor/inputs/selection-menu.tsx","../src/components/param-editor/inputs/action-input.tsx","../src/components/param-editor/inputs/anchor-grid.ts","../src/components/param-editor/param-editor-read-only-value.tsx","../src/components/param-editor/inputs/anchor-grid-input.tsx","../src/components/param-editor/inputs/boolean-input.tsx","../src/components/param-editor/inputs/color-input.tsx","../src/components/param-editor/inputs/date-value.ts","../src/components/param-editor/inputs/date-input.tsx","../src/components/param-editor/inputs/file-upload-value.ts","../src/components/param-editor/inputs/file-upload-input.tsx","../src/components/param-editor/inputs/horizontal-text-input.tsx","../src/components/param-editor/inputs/markdown-input.tsx","../src/components/param-editor/inputs/number-input.tsx","../src/components/param-editor/inputs/numeric-value.ts","../src/components/param-editor/inputs/range-value.ts","../src/components/param-editor/inputs/slider-marks.tsx","../src/components/param-editor/inputs/range-input.tsx","../src/components/param-editor/inputs/resource-input-chips.tsx","../src/components/param-editor/inputs/resource-input.tsx","../src/components/param-editor/inputs/segmented-input.tsx","../src/components/param-editor/inputs/selection-input.tsx","../src/components/param-editor/inputs/text-input.tsx","../src/components/param-editor/param-editor-inline-group.tsx","../src/components/param-editor/inputs/vector-value.ts","../src/components/param-editor/inputs/vector-input.tsx","../src/components/param-editor/resolve-param-value.ts","../src/components/param-editor/param-editor-advanced-field.tsx","../src/components/param-editor/param-editor-presentation.ts","../src/components/param-editor/param-editor-read-only-field.tsx","../src/components/param-editor/param-editor-field.tsx","../src/components/param-editor/param-editor-row.tsx","../src/components/param-editor/param-editor-section.tsx","../src/components/param-editor/param-editor.tsx","../src/components/param-editor/param-editor-control-list.tsx","../src/components/data-table/friendly-json-display.tsx","../src/components/data-table/helpers.tsx","../src/components/data-table/data-table-state.ts","../src/components/data-table/edit-mode-data-table-editors.tsx","../src/components/data-table/edit-mode-data-table-cell.tsx","../src/components/data-table/edit-mode-data-table-selection.tsx","../src/components/data-table/edit-mode-data-table-body.tsx","../src/components/data-table/edit-mode-data-table-header.tsx","../src/components/data-table/pagination-footer.tsx","../src/components/data-table/selection-toolbar.tsx","../src/components/collection-view/collection-view-sort.ts","../src/components/collection-view/collection-view-grouping.ts","../src/components/data-table/use-data-table-view.ts","../src/components/data-table/edit-mode-data-table.tsx","../src/components/rich-text/lazy-markdown-editor.tsx","../src/components/rich-text/shared/markdown-ast.ts","../src/components/rich-text/shared/markdown-url.ts","../src/components/rich-text/shared/markdown-url-context.tsx","../src/components/chat-ui/links/chat-image-sources.ts","../src/components/rich-text/shared/nodes/MarkdownImageNode.tsx","../src/components/rich-text/shared/nodes/RawHtmlNode.tsx","../src/components/rich-text/shared/markdown-inline.tsx","../src/components/rich-text/shared/nodes/DataTableNode.tsx","../src/components/rich-text/shared/nodes/MarkdownLinkNode.ts","../src/components/rich-text/shared/plugins/EquationPlugin/EquationNode.tsx","../src/components/rich-text/shared/plugins/EquationPlugin/EquationPlugin.tsx","../src/components/rich-text/shared/plugins/HorizontalRulePlugin/HorizontalRuleNode.ts","../src/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.tsx","../src/components/rich-text/shared/plugins/HorizontalRulePlugin/horizontalRule.ts","../src/components/rich-text/shared/transformers/markdown-transformers.ts","../src/components/rich-text/shared/editor-config.ts","../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.tsx","../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockPlugin.tsx","../src/components/rich-text/shared/plugins/CodePlugin/CodeHighlightingPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/commands.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/getSelectedNode.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.tsx","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/should-show-floating-toolbar.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.tsx","../src/components/rich-text/shared/plugins/list-marker-width-plugin.tsx","../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/shared/markdown-export.ts","../src/components/rich-text/shared/markdown-import.ts","../src/components/rich-text/shared/markdown-source-links.ts","../src/components/rich-text/shared/markdown-source-map.ts","../src/components/rich-text/shared/markdown-source-document.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/link-editor-content.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/link-edit-state.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/selection-link-url.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/url.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/LinkEditorPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/LinkPlugin.tsx","../src/components/rich-text/shared/plugins/ToggleEditablePlugin.tsx","../src/components/rich-text/shared/plugins/TreeViewPlugin/TreeViewPlugin.tsx","../src/components/rich-text/utils/markdown.ts","../src/components/rich-text/markdown-editor/plugins/markdown-section-navigation.ts","../src/components/rich-text/markdown-editor/plugins/MarkdownSectionNavigationPlugin.tsx","../src/components/rich-text/shared/markdown-table.ts","../src/components/rich-text/markdown-editor/plugins/MarkdownSlashCommandPlugin.tsx","../src/components/rich-text/markdown-editor/plugins/markdown-history-plugin.tsx","../src/components/rich-text/markdown-editor/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-link-plugin.tsx","../src/components/rich-text/shared/plugins/StateUpdatePlugin.tsx","../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":["import { Box, chakra } from \"@chakra-ui/react\";\nimport { ContentEditable as LexicalContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nconst StyledEditable = chakra(LexicalContentEditable);\n\ninterface ContentEditableProps {\n onRef?: (elem: HTMLDivElement) => void;\n fullWidth?: boolean;\n padding?: string;\n isRichMessage?: boolean;\n scrollable?: boolean;\n}\n\nexport function ContentEditable({\n onRef,\n fullWidth = false,\n padding,\n isRichMessage = false,\n scrollable = true,\n}: ContentEditableProps) {\n const editor = (\n <Box ref={onRef} width=\"100%\" minH=\"100%\" padding={padding}>\n <StyledEditable\n data-testid=\"content-editable\"\n height=\"fit-content\"\n minH=\"100%\"\n width=\"100%\"\n maxWidth={fullWidth ? \"100%\" : \"45rem\"}\n marginInline={fullWidth ? \"0\" : \"auto\"}\n textStyle=\"paragraph/M/regular\"\n fontSize=\"calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale))\"\n position=\"relative\"\n outline=\"none\"\n />\n </Box>\n );\n\n if (!scrollable) return editor;\n\n return (\n <ScrollArea\n className=\"rich-text\"\n data-rich-message={isRichMessage ? \"true\" : undefined}\n height=\"100%\"\n minH=\"0\"\n position=\"relative\"\n contentProps={{ width: \"100%\", minH: \"100%\" }}\n >\n {editor}\n </ScrollArea>\n );\n}\n","export interface ChatLinkCandidate {\n source: string;\n origin: \"markdown\" | \"inline-code\" | \"reference\" | \"tool\";\n}\n\nexport interface ChatLinkHandler {\n resolveHref(candidate: ChatLinkCandidate): string | null;\n resolveImageSource?(source: string): Promise<string | null>;\n describe?(candidate: ChatLinkCandidate): string;\n open(candidate: ChatLinkCandidate): void | Promise<void>;\n}\n\nexport interface ChatLinkProps {\n linkHandler?: ChatLinkHandler;\n}\n\nexport interface ChatSourcePosition {\n line: number;\n column?: number;\n endLine?: number;\n}\n\nexport type ParsedChatLink =\n | { kind: \"file\"; path: string; position?: ChatSourcePosition }\n | { kind: \"page\"; href: string }\n | { kind: \"external\"; href: string }\n | { kind: \"invalid\"; reason: string };\n\nconst invalid = (reason: string) => ({ kind: \"invalid\" as const, reason });\nconst positive = (value: number) => Number.isSafeInteger(value) && value > 0;\n\nconst localSource = (source: string) => {\n if (/^file:/i.test(source)) {\n try {\n const url = new URL(source);\n if (url.hostname) return invalid(\"Network file links are unavailable.\");\n source = url.pathname.replace(/^\\/([a-z]:\\/)/i, \"$1\") + url.hash;\n if (url.search) return invalid(\"File links cannot contain a query.\");\n } catch {\n return invalid(\"This file link is malformed.\");\n }\n } else if (\n /^[a-z][a-z\\d+.-]*:/i.test(source) &&\n !/^[a-z]:[/\\\\]/i.test(source) &&\n !/^[^:]+:\\d+(?::\\d+)?$/.test(source)\n ) {\n return invalid(\"This link scheme is unsupported.\");\n }\n\n return source.replace(/^#?\\$PROJECT\\//i, \"\");\n};\n\nconst filePosition = (source: string) => {\n let position: ChatSourcePosition | undefined;\n const hash = source.indexOf(\"#\");\n if (hash >= 0) {\n const match = /^#L(\\d+)(?:-L(\\d+))?$/.exec(source.slice(hash));\n if (!match) return invalid(\"This file location is unsupported.\");\n position = { line: Number(match[1]), ...(match[2] ? { endLine: Number(match[2]) } : {}) };\n source = source.slice(0, hash);\n } else {\n const match = /:(\\d+)(?::(\\d+))?$/.exec(source);\n if (match) {\n position = { line: Number(match[1]), ...(match[2] ? { column: Number(match[2]) } : {}) };\n source = source.slice(0, match.index);\n }\n }\n if (\n position &&\n (!positive(position.line) ||\n (position.column !== undefined && !positive(position.column)) ||\n (position.endLine !== undefined && (!positive(position.endLine) || position.endLine < position.line)))\n )\n return invalid(\"Source locations must use positive line and column numbers.\");\n\n return { kind: \"file\" as const, path: source, position };\n};\n\nconst isInlinePath = (source: string, original: string) => {\n const explicit = /^(\\.\\.?\\/|\\/|[a-z]:\\/)/i.test(source) || original.startsWith(\"$PROJECT/\");\n const shaped =\n !/^(@|v\\d)/.test(source) &&\n !/[\\s()]/.test(source) &&\n (source.includes(\"/\") || /^[\\w-]+\\.[a-z][\\w-]*$/i.test(source));\n\n return explicit || shaped;\n};\n\nexport const parseChatLink = (candidate: ChatLinkCandidate, dashboardOrigin?: string): ParsedChatLink | undefined => {\n const source = candidate.source.trim();\n if (!source) return undefined;\n if (/^https?:/i.test(source)) {\n try {\n const url = new URL(source);\n if (url.origin === dashboardOrigin && url.pathname.startsWith(\"/projects/\"))\n return { kind: \"page\", href: source };\n return { kind: \"external\", href: source };\n } catch {\n return invalid(\"This URL is malformed.\");\n }\n }\n if (/^(mailto:|sms:|tel:)/i.test(source)) return { kind: \"external\", href: source };\n if (/^\\/projects\\//.test(source)) return { kind: \"page\", href: source };\n if (/^(~\\/|\\\\\\\\|\\/\\/)/.test(source)) return invalid(\"This path has no supported workspace root.\");\n if (/^(javascript|data|vscode|pstdio):/i.test(source)) return invalid(\"This link scheme is unsupported.\");\n const local = localSource(source);\n if (typeof local !== \"string\") return local;\n const file = filePosition(local);\n if (file.kind === \"invalid\") return file;\n if (file.path.includes(\"?\")) return invalid(\"Encode question marks in file names.\");\n let path: string;\n try {\n path = decodeURIComponent(file.path).replaceAll(\"\\\\\", \"/\");\n } catch {\n return invalid(\"This path has invalid URL encoding.\");\n }\n if (path.includes(\"\\0\")) return invalid(\"This path is malformed.\");\n if (candidate.origin === \"inline-code\" && !isInlinePath(path, candidate.source)) return undefined;\n return { ...file, path };\n};\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport type { ChatLinkHandler } from \"./chat-link\";\n\nconst ChatLinkContext = createContext<ChatLinkHandler | undefined>(undefined);\nexport const ChatLinkProvider = (props: { handler?: ChatLinkHandler; children: ReactNode }) => {\n const { handler, children } = props;\n return <ChatLinkContext.Provider value={handler}>{children}</ChatLinkContext.Provider>;\n};\nexport const useChatLinkHandler = () => useContext(ChatLinkContext);\n","import { Link } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { type ChatLinkCandidate, parseChatLink } from \"./chat-link\";\nimport { useChatLinkHandler } from \"./chat-link-context\";\n\nexport const ChatLinkAnchor = (props: { candidate: ChatLinkCandidate; children: ReactNode }) => {\n const { candidate, children } = props;\n const handler = useChatLinkHandler();\n const parsed = parseChatLink(candidate, typeof window === \"undefined\" ? undefined : window.location.origin);\n const href = handler?.resolveHref(candidate);\n if (!handler || !parsed || (parsed.kind === \"external\" && !href)) return children;\n return (\n <Tooltip content={handler.describe?.(candidate) ?? `Open file or document: ${candidate.source}`}>\n <Link\n href={href ?? undefined}\n role={href ? undefined : \"button\"}\n tabIndex={0}\n onClickCapture={(event) => {\n event.stopPropagation();\n if (href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0)) return;\n event.preventDefault();\n void handler.open(candidate);\n }}\n onKeyDownCapture={(event) => {\n if (!href && event.key === \"Enter\") {\n event.preventDefault();\n void handler.open(candidate);\n }\n }}\n >\n {children}\n </Link>\n </Tooltip>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { ChatLinkAnchor } from \"@/components/chat-ui/links/chat-link-anchor\";\nimport { useChatLinkHandler } from \"@/components/chat-ui/links/chat-link-context\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\n\nexport const ReferenceLinkBadge = (props: { href: string }) => {\n const { href } = props;\n const handler = useChatLinkHandler();\n const candidate = { source: href, origin: \"reference\" as const };\n const label = href.split(\"/\").pop() || \"unknown\";\n return (\n <Box width=\"fit-content\" display=\"inline-block\">\n <ChatLinkAnchor candidate={candidate}>\n <ResourceBadge\n fileName={label}\n tooltip={handler?.describe?.(candidate)}\n onSelect={() => {\n if (/^https?:\\/\\//i.test(href)) {\n window.open(href, \"_blank\", \"noopener,noreferrer\");\n } else if (/^#?\\$PROJECT\\//i.test(href)) {\n window.dispatchEvent(\n new CustomEvent(\"ui:open-project-file\", { detail: href.replace(/^#?\\$PROJECT\\//i, \"\") }),\n );\n } else {\n window.location.assign(href);\n }\n }}\n />\n </ChatLinkAnchor>\n </Box>\n );\n};\n","import {\n DecoratorNode,\n type EditorConfig,\n type LexicalEditor,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport type { ReactElement } from \"react\";\nimport { ReferenceLinkBadge } from \"@/components/rich-text/shared/components/reference-link-badge\";\n\nexport type SerializedReferenceLinkNode = Spread<\n {\n href: string;\n label?: string;\n },\n SerializedLexicalNode\n>;\n\nexport class ReferenceLinkNode extends DecoratorNode<ReactElement> {\n __href: string;\n __label?: string;\n\n static getType(): string {\n return \"reference-link\";\n }\n\n static clone(node: ReferenceLinkNode): ReferenceLinkNode {\n return new ReferenceLinkNode(node.__href, node.__label, node.__key);\n }\n\n constructor(href: string, label?: string, key?: NodeKey) {\n super(key);\n this.__href = href;\n this.__label = label;\n }\n\n createDOM(_config: EditorConfig, _editor: LexicalEditor): HTMLElement {\n return document.createElement(\"span\");\n }\n\n updateDOM(_prevNode: ReferenceLinkNode, _dom: HTMLElement, _config: EditorConfig): boolean {\n return false;\n }\n\n getTextContent(): string {\n const label = this.__label ?? this.__href;\n return `{{link('${label}')}}`;\n }\n\n exportJSON(): SerializedReferenceLinkNode {\n return {\n type: ReferenceLinkNode.getType(),\n version: 1,\n href: this.__href,\n label: this.__label,\n };\n }\n\n static importJSON(serializedNode: SerializedReferenceLinkNode): ReferenceLinkNode {\n return $createReferenceLinkNode(serializedNode.href, serializedNode.label);\n }\n\n decorate(_editor: LexicalEditor, _config: EditorConfig): ReactElement {\n return <ReferenceLinkBadge href={this.__href} />;\n }\n}\n\nexport function $createReferenceLinkNode(href: string, label?: string): ReferenceLinkNode {\n return new ReferenceLinkNode(href, label);\n}\n\nexport function $isReferenceLinkNode(node: LexicalNode | null | undefined): node is ReferenceLinkNode {\n return node instanceof ReferenceLinkNode;\n}\n","import type { TextMatchTransformer } from \"@lexical/markdown\";\nimport { $createReferenceLinkNode, $isReferenceLinkNode, ReferenceLinkNode } from \"./ReferenceLinkNode\";\n\n// Matches {{link('xxx')}} or {{ link(\"xxx\") }}\nconst LINK_REGEXP = /\\{\\{\\s*link\\((['\"])([^'\"\\s]+)\\1\\)\\s*\\}\\}/;\n\nexport const REFERENCE_LINK_TRANSFORMER: TextMatchTransformer = {\n dependencies: [ReferenceLinkNode],\n export: (node) => {\n if ($isReferenceLinkNode(node)) {\n const href = (node as ReferenceLinkNode).__href;\n const label = (node as ReferenceLinkNode).__label ?? href;\n // Export back to token form so markdown roundtrips\n if (label) {\n return `{{link('${label}')}}`;\n }\n return `{{link('${href}')}}`;\n }\n return null;\n },\n regExp: LINK_REGEXP,\n importRegExp: LINK_REGEXP,\n replace: (textNode, match) => {\n const value = match[2];\n // For now we assume value is both label and href; if it looks like a URL, use as href.\n const looksLikeUrl = /^(https?:\\/\\/|\\/)/i.test(value);\n const href = looksLikeUrl ? value : `#${value}`;\n const label = value;\n textNode.replace($createReferenceLinkNode(href, label));\n },\n type: \"text-match\",\n};\n","import type { EditorThemeClasses } from \"lexical\";\n\nimport \"./rich-text-theme.css\";\n\nconst theme: EditorThemeClasses = {\n code: \"rich-text__code\",\n codeHighlight: {\n atrule: \"rich-text__tokenAttr\",\n attr: \"rich-text__tokenAttr\",\n boolean: \"rich-text__tokenProperty\",\n builtin: \"rich-text__tokenSelector\",\n cdata: \"rich-text__tokenComment\",\n char: \"rich-text__tokenSelector\",\n class: \"rich-text__tokenFunction\",\n \"class-name\": \"rich-text__tokenFunction\",\n comment: \"rich-text__tokenComment\",\n constant: \"rich-text__tokenProperty\",\n deleted: \"rich-text__tokenProperty\",\n doctype: \"rich-text__tokenComment\",\n entity: \"rich-text__tokenOperator\",\n function: \"rich-text__tokenFunction\",\n important: \"rich-text__tokenVariable\",\n inserted: \"rich-text__tokenSelector\",\n keyword: \"rich-text__tokenAttr\",\n namespace: \"rich-text__tokenVariable\",\n number: \"rich-text__tokenProperty\",\n operator: \"rich-text__tokenOperator\",\n prolog: \"rich-text__tokenComment\",\n property: \"rich-text__tokenProperty\",\n punctuation: \"rich-text__tokenPunctuation\",\n regex: \"rich-text__tokenVariable\",\n selector: \"rich-text__tokenSelector\",\n string: \"rich-text__tokenSelector\",\n symbol: \"rich-text__tokenProperty\",\n tag: \"rich-text__tokenProperty\",\n url: \"rich-text__tokenOperator\",\n variable: \"rich-text__tokenVariable\",\n },\n embedBlock: {\n base: \"rich-text__embedBlock\",\n focus: \"rich-text__embedBlockFocus\",\n },\n list: {\n checklist: \"rich-text__checklist\",\n listitem: \"rich-text__listItem\",\n listitemChecked: \"rich-text__listItemChecked\",\n listitemUnchecked: \"rich-text__listItemUnchecked\",\n nested: {\n listitem: \"rich-text__nestedListItem\",\n },\n olDepth: [\"rich-text__ol1\", \"rich-text__ol2\", \"rich-text__ol3\", \"rich-text__ol4\", \"rich-text__ol5\"],\n ol: \"rich-text__ol\",\n ul: \"rich-text__ul\",\n },\n heading: {\n h1: \"rich-text__h1\",\n h2: \"rich-text__h2\",\n h3: \"rich-text__h3\",\n },\n paragraph: \"rich-text__p\",\n text: {\n underline: \"rich-text__textUnderline\",\n italic: \"rich-text__textItalic\",\n code: \"rich-text__textCode\",\n },\n link: \"rich-text__link\",\n quote: \"rich-text__quote\",\n reference: \"rich-text__reference\",\n table: \"rich-text__table\",\n tableCell: \"rich-text__tableCell\",\n tableRow: \"rich-text__tableRow\",\n tableCellHeader: \"rich-text__tableCellHeader\",\n layoutContainer: \"rich-text__layoutContainer\",\n layoutItem: \"rich-text__layoutItem\",\n draggableBlockDemo: {\n row: \"rich-text__row\",\n content: \"rich-text__content\",\n },\n};\n\nexport default theme;\n","import type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\n\n/** Existing whole-view OR filters appear as one advanced bubble without changing their meaning. */\nexport const normalFilter = (filter: ViewFilterGroup): ViewFilterGroup =>\n filter.conjunction === \"or\"\n ? { conjunction: \"and\", rules: [], groups: [{ conjunction: \"or\", rules: filter.rules }] }\n : filter;\n\nexport const setAdvancedGroup = (filter: ViewFilterGroup, index: number, group?: ViewFilterGroup): ViewFilterGroup => {\n const groups = filter.groups ?? [];\n const next =\n group === undefined\n ? groups.filter((_, entry) => entry !== index)\n : groups.map((entry, position) => (position === index ? group : entry));\n const { groups: _groups, ...normal } = filter;\n return next.length ? { ...normal, groups: next } : normal;\n};\n\nexport const addAdvancedGroup = (filter: ViewFilterGroup): ViewFilterGroup => ({\n ...filter,\n groups: [...(filter.groups ?? []), { conjunction: \"and\", rules: [] }],\n});\n","import type { ReactNode } from \"react\";\nimport type { CollectionSavedView, CollectionViewsSource } from \"../collection-view/collection-view-types\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport const NO_GROUPING = \"none\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"boolean\"; legacyValues?: Record<string, boolean> }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\n// Keep the display and badge contracts below aligned with\n// pstdio-api-contracts/src/extension-kernel/types/kanban-renderer.ts. This published\n// package cannot import the private contracts package, so it owns a structural copy.\nexport type AttributeDisplayDescriptor = { kind: \"badge-list\"; itemsAttributeId: string };\n\ntype CollectionBadgeJsonValue =\n | string\n | number\n | boolean\n | null\n | CollectionBadgeJsonValue[]\n | CollectionBadgeJsonObject;\n\ninterface CollectionBadgeJsonObject {\n [key: string]: CollectionBadgeJsonValue;\n}\n\nexport interface CollectionBadgeResource {\n type: string;\n id: string;\n projectId?: string;\n label?: string;\n extensionId?: string;\n metadata?: CollectionBadgeJsonObject;\n}\n\nexport interface CollectionBadgeItem {\n id: string;\n label: string;\n icon?: string;\n resource?: CollectionBadgeResource;\n}\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n display?: AttributeDisplayDescriptor;\n render?: (value: unknown, row: KanbanRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * kanban-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface KanbanRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\n/** Board display settings. Order lives in the view's sorts. */\nexport interface KanbanRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n displayProperties: string[];\n}\n\nexport type KanbanRendererSavedView = CollectionSavedView<KanbanRendererSettings>;\n\nexport type KanbanRendererCreateFieldType =\n | \"text\"\n | \"longtext\"\n | \"markdown\"\n | \"number\"\n | \"boolean\"\n | \"select\"\n | \"multi-select\"\n | \"files\";\n\nexport interface KanbanRendererCreateField {\n id: string;\n label: string;\n description?: string;\n placeholder?: string;\n type: KanbanRendererCreateFieldType;\n required?: boolean;\n defaultValue?: unknown;\n options?: EnumOption[];\n /** `files` fields only. */\n multiple?: boolean;\n accept?: string;\n}\n\n/** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */\nexport interface KanbanRendererCreateLabels {\n cancel: string;\n properties: string;\n submitError: string;\n removeFile: string;\n}\n\nexport interface KanbanRendererCreateRowConfig {\n title: string;\n submitLabel: string;\n fields: KanbanRendererCreateField[];\n labels: KanbanRendererCreateLabels;\n}\n\nexport interface KanbanRendererCreateSubmission {\n columnId: string;\n columnAttributeId?: string;\n /** Declared field values, excluding `files` fields — those arrive as `files`. */\n values: Record<string, unknown>;\n /** Every editable attribute the user set, keyed by attribute id. */\n attributeValues: Record<string, unknown>;\n files: File[];\n}\n\nexport const DEFAULT_KANBAN_RENDERER_SETTINGS: KanbanRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n displayProperties: [],\n};\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for the \"none\" grouping or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n\nexport type KanbanRendererViewsSource = CollectionViewsSource<KanbanRendererSettings>;\n","import type { AttributeType, EnumOption } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst dedupeEnumOptions = (options: EnumOption[]) => {\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain option list.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values.\n */\nexport const getEnumOptions = (type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n const options = isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n return dedupeEnumOptions(options);\n};\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\nexport const findEnumOption = (type: AttributeType, value: string) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\n};\n","import { VIEW_FILTER_CONDITIONS, type ViewFilterCondition } from \"@pstdio/sdk/extensions\";\nimport { enumOptionLabel } from \"../kanban-renderer/kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, KanbanRendererRow } from \"../kanban-renderer/types\";\n\n/** Every kanban row has a title. Views filter, sort, and search it as a text field. */\nexport const TITLE_FIELD: AttributeDescriptor = {\n id: \"title\",\n label: \"Title\",\n type: { kind: \"string\" },\n filterable: true,\n sortable: true,\n};\n\nexport const withTitleField = (attributes: AttributeDescriptor[]) =>\n attributes.some((attribute) => attribute.id === TITLE_FIELD.id) ? attributes : [TITLE_FIELD, ...attributes];\n\nexport const findField = (fields: AttributeDescriptor[], id: string) => fields.find((field) => field.id === id);\n\nexport const isOptionField = (field: AttributeDescriptor) =>\n field.type.kind === \"enum\" || field.type.kind === \"enum-multi\" || field.type.kind === \"user\";\n\n/** enum-multi fields hold several values, so one order does not exist. */\nexport const canSortField = (field: AttributeDescriptor) => field.sortable === true && field.type.kind !== \"enum-multi\";\n\nexport const fieldConditions = (field: AttributeDescriptor) => VIEW_FILTER_CONDITIONS[field.type.kind];\n\n/**\n * Rules written for single-value options also fit multi-value options and the reverse,\n * so a field that changes kind keeps its meaning.\n */\nconst EQUIVALENT_CONDITIONS: Partial<Record<ViewFilterCondition, ViewFilterCondition>> = {\n \"is-any-of\": \"has-any-of\",\n \"has-any-of\": \"is-any-of\",\n \"is-none-of\": \"has-none-of\",\n \"has-none-of\": \"is-none-of\",\n};\n\nexport const acceptedCondition = (field: AttributeDescriptor, condition: ViewFilterCondition) => {\n const conditions = fieldConditions(field);\n if (conditions.includes(condition)) return condition;\n const equivalent = EQUIVALENT_CONDITIONS[condition];\n return equivalent && conditions.includes(equivalent) ? equivalent : undefined;\n};\n\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: KanbanRendererRow, descriptor: AttributeDescriptor) => {\n const raw = descriptor === TITLE_FIELD ? row.title : row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: KanbanRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"boolean\") return typeof value === \"boolean\" ? [String(value)] : [];\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\" || typeof value === \"boolean\") return [String(value)];\n return [];\n};\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/** A date-only value names a day on the viewer's calendar, not midnight in UTC. */\nexport const parseViewDate = (value: unknown) => {\n if (typeof value !== \"string\" && typeof value !== \"number\") return undefined;\n const day = typeof value === \"string\" ? DATE_ONLY.exec(value) : null;\n const date = day ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3])) : new Date(value);\n return Number.isNaN(date.getTime()) ? undefined : date;\n};\n\n/** The text a view shows for a field: option labels, dates as dates, everything else as written. */\nexport const formatFieldText = (row: KanbanRendererRow, field: AttributeDescriptor) => {\n const values = getAttributeStringValues(row, field);\n if (field.type.kind === \"enum\" || field.type.kind === \"enum-multi\")\n return values.map((value) => enumOptionLabel(field.type, value));\n if (field.type.kind !== \"date\") return values;\n const date = parseViewDate(getAttributeValue(row, field));\n return date ? [date.toLocaleDateString()] : values;\n};\n","import type { ViewFilterGroup, ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { fieldConditions } from \"./collection-view-fields\";\n\nexport const defaultCondition = (field: AttributeDescriptor) => fieldConditions(field)[0]!;\nexport const newRule = (field: AttributeDescriptor): ViewFilterRule => ({\n attributeId: field.id,\n condition: defaultCondition(field),\n ...(field.type.kind === \"boolean\" ? { value: true } : {}),\n});\n\nexport const setRuleAt = (\n filter: ViewFilterGroup,\n index: number,\n rule: ViewFilterRule | undefined,\n): ViewFilterGroup => ({\n ...filter,\n rules:\n rule === undefined\n ? filter.rules.filter((_, entry) => entry !== index)\n : filter.rules.map((item, entry) => (entry === index ? rule : item)),\n});\nexport const addRule = (filter: ViewFilterGroup, rule: ViewFilterRule): ViewFilterGroup => ({\n ...filter,\n rules: [...filter.rules, rule],\n});\nexport const setConjunction = (\n filter: ViewFilterGroup,\n conjunction: ViewFilterGroup[\"conjunction\"],\n): ViewFilterGroup => ({\n ...filter,\n conjunction,\n});\n/** Selecting a categorical value replaces an empty predicate in the same edit. */\nexport const selectRuleValues = (\n field: AttributeDescriptor,\n rule: ViewFilterRule,\n value: ViewFilterRule[\"value\"],\n): ViewFilterRule => {\n if (field.type.kind === \"boolean\" && typeof value === \"boolean\") {\n const negative = rule.condition === \"is-not\";\n return { attributeId: field.id, condition: negative ? \"is-not\" : \"is\", value: negative ? !value : value };\n }\n let condition = rule.condition;\n if (Array.isArray(value) && (condition === \"is-empty\" || condition === \"is-not-empty\")) {\n const negative = condition === \"is-not-empty\";\n if (field.type.kind === \"enum-multi\") condition = negative ? \"has-none-of\" : \"has-any-of\";\n else condition = negative ? \"is-none-of\" : \"is-any-of\";\n }\n return { ...rule, condition, value };\n};\n","import { createContext, useContext } from \"react\";\n\nexport const CollectionItemLabelContext = createContext(\"Item\");\nexport const useCollectionItemLabel = () => useContext(CollectionItemLabelContext);\n","import { Calendar, CircleDashed, Hash, SquareCheck, Tags, Type, UserRound } from \"lucide-react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\n\nconst FIELD_ICONS = {\n string: Type,\n number: Hash,\n date: Calendar,\n boolean: SquareCheck,\n enum: CircleDashed,\n \"enum-multi\": Tags,\n user: UserRound,\n};\n\nexport const fieldIcon = (field: AttributeDescriptor) => FIELD_ICONS[field.type.kind];\n","import { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { Info } from \"lucide-react\";\nimport { Tooltip } from \"../primitives/tooltip\";\n\ninterface ParamEditorLabelProps {\n name: string;\n description?: string;\n compact?: boolean;\n}\n\nexport const ParamEditorLabel = (props: ParamEditorLabelProps) => {\n const { name, description, compact = false } = props;\n\n return (\n <HStack gap=\"1\" alignItems=\"center\" minW=\"0\">\n <Text\n textStyle={compact ? \"label/XS/medium\" : \"label/S/medium\"}\n color=\"fg.muted\"\n letterSpacing={compact ? \"0.08em\" : undefined}\n textTransform={compact ? \"uppercase\" : undefined}\n truncate\n >\n {name}\n </Text>\n {description ? (\n <Tooltip\n content={description}\n portalled={false}\n positioning={{ placement: \"bottom-start\", strategy: \"fixed\", hideWhenDetached: true }}\n >\n <Icon\n asChild\n role=\"img\"\n aria-label={`About ${name}`}\n aria-hidden={false}\n focusable=\"true\"\n tabIndex={0}\n boxSize=\"3\"\n color=\"fg.muted\"\n flexShrink={0}\n >\n <Info />\n </Icon>\n </Tooltip>\n ) : null}\n </HStack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { ParamEditorFieldLabel } from \"../param-editor/param-editor-field-label\";\n\ninterface FilterValuePanelProps {\n children: ReactNode;\n}\n\nexport const FilterValuePanel = (props: FilterValuePanelProps) => {\n const { children } = props;\n return (\n <Stack height=\"full\" minH=\"0\" gap=\"xs\" padding=\"sm\" minW=\"0\">\n <ParamEditorFieldLabel name=\"Value\" />\n {children}\n </Stack>\n );\n};\n","import { Button, Icon, Text } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport type { ElementType } from \"react\";\nimport { SearchableMenu } from \"@/components/overlays/searchable-menu\";\n\nexport interface RuleSelectOption {\n value: string;\n label: string;\n icon?: ElementType;\n iconColor?: string;\n count?: number;\n disabled?: boolean;\n}\n\nexport interface RuleSelectProps {\n \"aria-label\": string;\n options: RuleSelectOption[];\n /** One value, or several when `multiple` is set. */\n value: string | string[] | undefined;\n onSelect: (value: string) => void;\n multiple?: boolean;\n placeholder?: string;\n selectedLabel?: string;\n /** Rule rows pass a fixed width so the columns of a rule list line up. */\n width?: string;\n showSearch?: boolean;\n variant?: \"subtle\" | \"filter-segment\" | \"filter-condition\" | \"outline\";\n size?: \"2xs\" | \"sm\";\n showSelectedIcon?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst toList = (value: RuleSelectProps[\"value\"]) => {\n if (Array.isArray(value)) return value;\n return value === undefined ? [] : [value];\n};\n\n/** Compact select used inside filter and sort rules. */\nexport const RuleSelect = (props: RuleSelectProps) => {\n const { options, value, onSelect, multiple = false, placeholder = \"Choose…\", width, showSearch } = props;\n const selected = toList(value);\n const selectedOptions = options.filter((option) => selected.includes(option.value));\n const label = selectedOptions.map((option) => option.label).join(\", \") || placeholder;\n const icon = selectedOptions.length === 1 ? selectedOptions[0]?.icon : undefined;\n\n return (\n <SearchableMenu\n portalled={false}\n open={props.open}\n onOpenChange={props.onOpenChange ? (details) => props.onOpenChange?.(details.open) : undefined}\n positioning={{ strategy: \"fixed\", hideWhenDetached: true }}\n multiple={multiple}\n closeOnSelect={!multiple}\n showSearch={showSearch ?? options.length > 8}\n searchPlaceholder=\"Search…\"\n emptyState={\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" padding=\"xs\">\n No matches\n </Text>\n }\n width=\"14rem\"\n items={options.map((option) => ({\n id: option.value,\n label: option.label,\n icon: option.icon,\n iconColor: option.iconColor,\n variant: \"compact\",\n secondaryLabel: option.count && option.count > 0 ? String(option.count) : undefined,\n isDisabled: option.disabled,\n isSelected: selected.includes(option.value),\n onSelect: () => onSelect(option.value),\n }))}\n trigger={\n <Button\n aria-label={props[\"aria-label\"]}\n variant={props.variant ?? \"subtle\"}\n size={props.size ?? \"2xs\"}\n width={width}\n minW=\"0\"\n justifyContent=\"flex-start\"\n gap=\"2xs\"\n flexShrink={0}\n >\n {icon && props.showSelectedIcon !== false ? (\n <Icon as={icon} color={selectedOptions[0]?.iconColor ?? \"fg.muted\"} />\n ) : null}\n <Text\n as=\"span\"\n flex=\"1\"\n minW=\"0\"\n textAlign=\"start\"\n textStyle={props.size === \"sm\" ? \"label/S/regular\" : \"label/XS\"}\n truncate\n >\n {props.selectedLabel ?? label}\n </Text>\n {props.variant !== \"filter-segment\" && props.variant !== \"filter-condition\" ? (\n <Icon as={ChevronDown} color=\"fg.subtle\" />\n ) : null}\n </Button>\n }\n />\n );\n};\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {}\n\nexport const NumberInputRoot = React.forwardRef<HTMLDivElement, NumberInputProps>(function NumberInput(props, ref) {\n const { children, ...rest } = props;\n return (\n <ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n {children}\n <ChakraNumberInput.Control>\n <ChakraNumberInput.IncrementTrigger />\n <ChakraNumberInput.DecrementTrigger />\n </ChakraNumberInput.Control>\n </ChakraNumberInput.Root>\n );\n});\n\nexport const NumberInputField = ChakraNumberInput.Input;\n","import type { ViewFilterCondition, ViewFilterRule, ViewSortDirection } from \"@pstdio/sdk/extensions\";\nimport { enumOptionLabel } from \"../kanban-renderer/kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\n\nconst CONDITION_LABELS: Record<ViewFilterCondition, string> = {\n contains: \"contains\",\n \"does-not-contain\": \"does not contain\",\n is: \"is\",\n \"is-not\": \"is not\",\n gt: \">\",\n gte: \"≥\",\n lt: \"<\",\n lte: \"≤\",\n \"is-before\": \"is before\",\n \"is-after\": \"is after\",\n \"is-on-or-before\": \"is on or before\",\n \"is-on-or-after\": \"is on or after\",\n \"is-any-of\": \"is any of\",\n \"is-none-of\": \"is none of\",\n \"has-any-of\": \"has any of\",\n \"has-all-of\": \"has all of\",\n \"has-none-of\": \"has none of\",\n \"is-empty\": \"is empty\",\n \"is-not-empty\": \"is not empty\",\n};\n\n/** The full condition name, as the condition select shows it. Numbers read as symbols. */\nexport const conditionLabel = (condition: ViewFilterCondition, field?: AttributeDescriptor) => {\n if (field?.type.kind === \"number\" && condition === \"is\") return \"=\";\n if (field?.type.kind === \"number\" && condition === \"is-not\") return \"≠\";\n return CONDITION_LABELS[condition];\n};\n\n/** A pill reads as a sentence, so a single option reads \"is\" or \"is not\". */\nexport const pillConditionLabel = (rule: ViewFilterRule, field?: AttributeDescriptor) => {\n if (\n field?.type.kind === \"boolean\" &&\n rule.value === false &&\n (rule.condition === \"is\" || rule.condition === \"is-not\")\n )\n return conditionLabel(rule.condition === \"is\" ? \"is-not\" : \"is\");\n const single = Array.isArray(rule.value) && rule.value.length === 1;\n const many = Array.isArray(rule.value) && rule.value.length > 1;\n if (many && [\"is-any-of\", \"has-any-of\"].includes(rule.condition)) return \"is any of\";\n if ([\"is-none-of\", \"has-none-of\"].includes(rule.condition)) return \"is not\";\n if (single && rule.condition === \"is-any-of\") return \"is\";\n if (single && rule.condition === \"is-none-of\") return \"is not\";\n return conditionLabel(rule.condition, field);\n};\n\nconst RELATIVE_DAY = /^today([+-])(\\d+)$/;\n\nexport const dayLabel = (value: string) => {\n if (value === \"today\") return \"today\";\n const relative = RELATIVE_DAY.exec(value);\n if (relative) {\n const days = Number(relative[2]);\n const unit = days === 1 ? \"day\" : \"days\";\n return relative[1] === \"-\" ? `${days} ${unit} ago` : `in ${days} ${unit}`;\n }\n const date = new Date(`${value}T00:00:00`);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleDateString();\n};\n\nexport const optionLabel = (field: AttributeDescriptor | undefined, value: string) =>\n field ? enumOptionLabel(field.type, value) : value;\n\nexport const ruleValueLabel = (rule: ViewFilterRule, field?: AttributeDescriptor) => {\n const { value } = rule;\n if (value === undefined) return \"\";\n if (field?.type.kind === \"boolean\" && typeof value === \"boolean\") return field.label;\n if (Array.isArray(value)) return value.map((entry) => optionLabel(field, entry)).join(\", \");\n if (field?.type.kind === \"date\" && typeof value === \"string\") return dayLabel(value);\n return String(value);\n};\n\nconst DIRECTION_LABELS: Record<string, [string, string]> = {\n boolean: [\"False first\", \"True first\"],\n number: [\"1 → 9\", \"9 → 1\"],\n date: [\"Oldest first\", \"Newest first\"],\n enum: [\"Option order\", \"Reverse order\"],\n};\n\nexport const sortDirectionLabel = (field: AttributeDescriptor | undefined, direction: ViewSortDirection) => {\n const [ascending, descending] = DIRECTION_LABELS[field?.type.kind ?? \"\"] ?? [\"A → Z\", \"Z → A\"];\n return direction === \"asc\" ? ascending : descending;\n};\n","import { Popover, Portal } from \"@chakra-ui/react\";\nimport { createContext, type ReactNode, type RefObject, useContext, useEffect, useRef } from \"react\";\n\nconst ViewBarPopoverContext = createContext(false);\n\nexport interface ViewBarPopoverProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** The button the menu opens from. Several buttons can open the same menu. */\n anchorRef: RefObject<HTMLElement | null>;\n width: string;\n placement?: \"bottom-start\" | \"bottom-end\";\n /** The quick picker draws its own panes edge to edge. */\n padding?: \"0\" | \"2xs\";\n testId?: string;\n children: ReactNode;\n}\n\n/** The menu shell for Search, Filter, and Sort. Menus inside it render in place, so using them never closes it. */\nexport const ViewBarPopover = (props: ViewBarPopoverProps) => {\n const { open, onOpenChange, anchorRef, width, placement = \"bottom-start\", padding = \"2xs\", testId, children } = props;\n const contentRef = useRef<HTMLDivElement>(null);\n const nested = useContext(ViewBarPopoverContext);\n\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) || anchorRef.current?.contains(target)) return;\n onOpenChange(false);\n };\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open, anchorRef, onOpenChange]);\n\n return (\n <Popover.Root\n open={open}\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n positioning={{\n placement,\n strategy: \"fixed\",\n hideWhenDetached: true,\n offset: { mainAxis: 8 },\n getAnchorElement: () => anchorRef.current,\n }}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Portal disabled={nested}>\n <Popover.Positioner>\n <Popover.Content\n ref={contentRef}\n data-testid={testId}\n width={width}\n maxWidth=\"calc(100vw - 32px)\"\n padding={padding}\n gap=\"0\"\n overflow=\"visible\"\n >\n <ViewBarPopoverContext value>{children}</ViewBarPopoverContext>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Button, Input, Text } from \"@chakra-ui/react\";\nimport { useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"../primitives/number-input\";\nimport { dayLabel } from \"./collection-view-labels\";\nimport type { RuleValueProps } from \"./filter-rule-value\";\nimport { FilterValuePanel } from \"./filter-value-panel\";\nimport { ViewBarPopover } from \"./view-bar-popover\";\n\nconst ISO_DAY = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst NumberParameterValue = (props: RuleValueProps) => {\n const { rule, onChange } = props;\n const value = typeof rule.value === \"number\" ? rule.value : undefined;\n const [draft, setDraft] = useState({ source: value, text: value === undefined ? \"\" : String(value) });\n if (draft.source !== value) setDraft({ source: value, text: value === undefined ? \"\" : String(value) });\n return (\n <NumberInputRoot\n size=\"sm\"\n width=\"full\"\n value={draft.text}\n onValueChange={(details) => {\n const source = Number.isFinite(details.valueAsNumber) ? details.valueAsNumber : undefined;\n // Keep the decimal point and caret while typing; project only complete numbers into the rule.\n setDraft({ source, text: details.value });\n onChange(source);\n }}\n >\n <NumberInputField aria-label=\"Value\" />\n </NumberInputRoot>\n );\n};\n\n/** Use the parameter-field scaffold and recipes, while filter drafts update immediately. */\nexport const ScalarValueEditor = (props: RuleValueProps) => {\n const { field, rule, onChange } = props;\n const value = typeof rule.value === \"string\" ? rule.value : \"\";\n if (field.type.kind === \"date\")\n return (\n <FilterValuePanel>\n <Input\n aria-label=\"Value\"\n type=\"date\"\n size=\"sm\"\n width=\"full\"\n value={ISO_DAY.test(value) ? value : \"\"}\n onChange={(event) => onChange(event.target.value || undefined)}\n />\n </FilterValuePanel>\n );\n return (\n <FilterValuePanel>\n {field.type.kind === \"number\" ? (\n <NumberParameterValue {...props} />\n ) : (\n <Input\n aria-label=\"Value\"\n size=\"sm\"\n placeholder=\"Enter text…\"\n width=\"full\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n )}\n </FilterValuePanel>\n );\n};\n\n/** Date editing uses the same exact-date field wherever the rule is opened. */\nexport const DateBubbleValue = (props: RuleValueProps) => {\n const { rule, variant } = props;\n const [localOpen, setLocalOpen] = useState(false);\n const anchorRef = useRef<HTMLButtonElement>(null);\n const open = props.open ?? localOpen;\n const setOpen = props.onOpenChange ?? setLocalOpen;\n return (\n <>\n <Button\n ref={anchorRef}\n aria-label=\"Values\"\n variant={variant ?? \"subtle\"}\n size=\"2xs\"\n onClick={() => setOpen(!open)}\n >\n <Text textStyle=\"label/XS\">{typeof rule.value === \"string\" ? dayLabel(rule.value) : \"Choose date…\"}</Text>\n </Button>\n <ViewBarPopover open={open} onOpenChange={setOpen} anchorRef={anchorRef} width=\"18rem\" padding=\"0\">\n <ScalarValueEditor {...props} />\n </ViewBarPopover>\n </>\n );\n};\n","import { Editable, HStack, Icon, Input, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { getIconComponent } from \"@/components/primitives/icon-options\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { FilterValuePanel } from \"./filter-value-panel\";\nimport { RuleSelect } from \"./rule-select\";\nimport { DateBubbleValue, ScalarValueEditor } from \"./scalar-filter-value\";\n\nexport interface RuleValueOption {\n value: string;\n label: string;\n count?: number;\n icon?: string | null;\n color?: string;\n}\n\nexport interface RuleValueProps {\n field: AttributeDescriptor;\n rule: ViewFilterRule;\n options: RuleValueOption[];\n onChange: (value: ViewFilterRule[\"value\"]) => void;\n variant?: \"subtle\" | \"filter-segment\";\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst valueKind = (field: AttributeDescriptor, rule: ViewFilterRule) => {\n if (rule.condition === \"is-empty\" || rule.condition === \"is-not-empty\")\n return [\"enum\", \"enum-multi\", \"user\"].includes(field.type.kind) ? \"options\" : \"none\";\n if (Array.isArray(rule.value)) return \"options\";\n if (field.type.kind === \"boolean\") return \"boolean\";\n if (field.type.kind === \"number\") return \"number\";\n if (field.type.kind === \"date\") return \"day\";\n if (field.type.kind === \"string\") return \"text\";\n return \"options\";\n};\n\nconst toggle = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\nconst withSavedOptions = (options: RuleValueOption[], rule: ViewFilterRule) => [\n ...options,\n ...listValue(rule)\n .filter((value) => !options.some((option) => option.value === value))\n .map<RuleValueOption>((value) => ({ value, label: value })),\n];\n\nconst listValue = (rule: ViewFilterRule) => (Array.isArray(rule.value) ? rule.value : []);\n\nconst NumberValue = (props: RuleValueProps & { width?: string }) => {\n const { rule, onChange, width } = props;\n return (\n <Input\n aria-label=\"Value\"\n type=\"number\"\n variant={props.variant === \"filter-segment\" ? \"borderless\" : \"outline\"}\n size=\"2xs\"\n width={width}\n value={typeof rule.value === \"number\" ? String(rule.value) : \"\"}\n onChange={(event) => onChange(event.target.value === \"\" ? undefined : Number(event.target.value))}\n />\n );\n};\n\nconst TextValue = (props: RuleValueProps & { width?: string }) => {\n const { rule, onChange, width } = props;\n return (\n <Input\n aria-label=\"Value\"\n size=\"2xs\"\n width={width}\n value={typeof rule.value === \"string\" ? rule.value : \"\"}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n};\n\nconst TextBubbleValue = (props: RuleValueProps) => {\n const { rule, onChange, open, onOpenChange } = props;\n return (\n <Editable.Root\n size=\"xs\"\n variant=\"filter-segment\"\n value={typeof rule.value === \"string\" ? rule.value : \"\"}\n placeholder=\"Value…\"\n edit={open}\n activationMode=\"click\"\n selectOnFocus\n onEditChange={(details) => onOpenChange?.(details.edit)}\n onValueChange={(details) => onChange(details.value)}\n onValueRevert={(details) => onChange(details.value)}\n >\n <Editable.Preview />\n <Editable.Input aria-label=\"Value\" />\n </Editable.Root>\n );\n};\n\n/** The value control inside a rule row. */\nexport const RuleValueControl = (props: RuleValueProps) => {\n const { field, rule, options: suppliedOptions, onChange } = props;\n const options = withSavedOptions(suppliedOptions, rule);\n const kind = valueKind(field, rule);\n if (kind === \"none\") return null;\n if (kind === \"boolean\")\n return (\n <Text textStyle={props.variant === \"filter-segment\" ? \"label/XS\" : \"label/S/medium\"} paddingX=\"xs\">\n {field.label}\n </Text>\n );\n if (kind === \"number\") return <NumberValue {...props} width=\"9rem\" />;\n if (kind === \"text\")\n return props.variant === \"filter-segment\" ? <TextBubbleValue {...props} /> : <TextValue {...props} width=\"9rem\" />;\n if (kind === \"day\") return <DateBubbleValue {...props} />;\n const selectedLabel = rule.condition === \"is-empty\" || rule.condition === \"is-not-empty\" ? \"Empty\" : undefined;\n const allValuesLabel =\n rule.condition === \"has-all-of\"\n ? `all of ${options\n .filter((option) => listValue(rule).includes(option.value))\n .map((option) => option.label)\n .join(\", \")}`\n : selectedLabel;\n return (\n <RuleSelect\n aria-label=\"Values\"\n selectedLabel={allValuesLabel}\n multiple\n variant={props.variant}\n width={props.variant === \"filter-segment\" ? undefined : \"9rem\"}\n open={props.open}\n onOpenChange={props.onOpenChange}\n options={options.map((option) => ({\n ...option,\n icon: option.icon ? getIconComponent(option.icon) : undefined,\n iconColor: option.color ? `${option.color}.500` : undefined,\n }))}\n value={listValue(rule)}\n onSelect={(value) => onChange(toggle(listValue(rule), value))}\n />\n );\n};\n\nconst OptionChecklist = (props: RuleValueProps) => {\n const { rule, options: suppliedOptions, onChange } = props;\n const options = withSavedOptions(suppliedOptions, rule);\n const selected = listValue(rule);\n\n return (\n <Stack gap=\"0\" flex=\"1\" minH=\"0\">\n <ScrollArea flex=\"1\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n {options.map((option) => {\n const checked = selected.includes(option.value);\n return (\n <ListRow\n key={option.value}\n id={option.value}\n role=\"checkbox\"\n aria-label={option.label}\n aria-checked={checked}\n variant=\"compact\"\n label={\n <HStack minW=\"0\" gap=\"xs\">\n {option.icon ? (\n <Icon\n as={getIconComponent(option.icon)}\n boxSize=\"3\"\n color={option.color ? `${option.color}.500` : \"fg.muted\"}\n />\n ) : null}\n <Text textStyle=\"label/S/regular\" truncate>\n {option.label}\n </Text>\n </HStack>\n }\n endContent={\n <HStack gap=\"xs\">\n {option.count && option.count > 0 ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n {option.count}\n </Text>\n ) : null}\n <Checkbox\n checked={checked}\n readOnly\n aria-readonly=\"true\"\n inputProps={{ tabIndex: -1, \"aria-hidden\": true }}\n pointerEvents=\"none\"\n size=\"xs\"\n />\n </HStack>\n }\n onActivate={() => onChange(toggle(selected, option.value))}\n />\n );\n })}\n </ScrollArea>\n </Stack>\n );\n};\n\n/** The value control inside the rule editor and the quick picker. */\nexport const RuleValueEditor = (props: RuleValueProps) => {\n const { field, rule } = props;\n const kind = valueKind(field, rule);\n if (kind === \"none\") return null;\n if (kind === \"boolean\")\n return (\n <FilterValuePanel>\n <Text textStyle=\"label/S/medium\">{field.label}</Text>\n </FilterValuePanel>\n );\n if (kind === \"options\")\n return (\n <FilterValuePanel>\n <OptionChecklist {...props} />\n </FilterValuePanel>\n );\n return <ScalarValueEditor {...props} />;\n};\n","import { HStack, Icon, IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewFilterCondition, ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { X } from \"lucide-react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { useCollectionItemLabel } from \"./collection-item-label\";\nimport { fieldConditions } from \"./collection-view-fields\";\nimport { conditionLabel } from \"./collection-view-labels\";\nimport { selectRuleValues } from \"./collection-view-rules\";\nimport { RuleValueEditor, type RuleValueOption } from \"./filter-rule-value\";\nimport { RuleSelect } from \"./rule-select\";\n\nexport interface ViewFilterRuleEditorProps {\n field: AttributeDescriptor;\n rule: ViewFilterRule;\n options: RuleValueOption[];\n onChange: (rule: ViewFilterRule) => void;\n onDelete: () => void;\n}\n\n/**\n * Every condition of a field that takes a value takes the same kind of value, so changing the\n * condition keeps it and \"is any of\" turns into \"is none of\" in one step.\n */\nexport const changeCondition = (rule: ViewFilterRule, condition: ViewFilterCondition): ViewFilterRule => {\n if (condition === \"is-empty\" || condition === \"is-not-empty\") return { attributeId: rule.attributeId, condition };\n return { ...rule, condition };\n};\n\ninterface ConditionSelectProps {\n field: AttributeDescriptor;\n rule: ViewFilterRule;\n width?: string;\n onChange: (rule: ViewFilterRule) => void;\n variant?: \"subtle\" | \"filter-segment\" | \"filter-condition\";\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst OptionConditionSelect = (props: ConditionSelectProps) => {\n const { field, rule, width, onChange } = props;\n const empty = rule.condition === \"is-empty\" || rule.condition === \"is-not-empty\";\n const negative = [\"is-none-of\", \"has-none-of\", \"is-not-empty\"].includes(rule.condition);\n const positiveCondition = field.type.kind === \"enum-multi\" ? \"has-any-of\" : \"is-any-of\";\n const negativeCondition = field.type.kind === \"enum-multi\" ? \"has-none-of\" : \"is-none-of\";\n const many = Array.isArray(rule.value) && rule.value.length > 1;\n return (\n <RuleSelect\n aria-label=\"Condition\"\n width={width}\n variant={props.variant}\n options={[\n { value: \"is\", label: many ? \"is any of\" : \"is\" },\n { value: \"is-not\", label: \"is not\" },\n ]}\n value={negative ? \"is-not\" : \"is\"}\n onSelect={(next) => {\n if (next === (negative ? \"is-not\" : \"is\")) return;\n if (empty) {\n onChange({ attributeId: rule.attributeId, condition: next === \"is\" ? \"is-empty\" : \"is-not-empty\" });\n return;\n }\n onChange({ ...rule, condition: next === \"is\" ? positiveCondition : negativeCondition });\n }}\n />\n );\n};\n\nexport const ConditionSelect = (props: ConditionSelectProps) => {\n const { field, rule, width, onChange } = props;\n const boolean = field.type.kind === \"boolean\";\n const optionField = [\"enum\", \"enum-multi\", \"user\"].includes(field.type.kind);\n const listRule = optionField || Array.isArray(rule.value);\n if (listRule) return <OptionConditionSelect {...props} />;\n let condition = rule.condition;\n if (boolean && rule.value === false) {\n if (rule.condition === \"is\") condition = \"is-not\";\n if (rule.condition === \"is-not\") condition = \"is\";\n }\n const conditions: readonly ViewFilterCondition[] = boolean ? [\"is\", \"is-not\"] : fieldConditions(field);\n const choices = conditions.includes(rule.condition) ? conditions : [rule.condition, ...conditions];\n return (\n <RuleSelect\n aria-label=\"Condition\"\n variant={props.variant}\n open={props.open}\n onOpenChange={props.onOpenChange}\n width={width}\n options={choices.map((condition) => ({\n value: condition,\n label: conditionLabel(condition, field),\n }))}\n value={condition}\n onSelect={(next) => {\n if (next === condition && (!boolean || typeof rule.value === \"boolean\")) return;\n const selectedCondition = next as ViewFilterCondition;\n const source =\n !conditions.includes(rule.condition) && Array.isArray(rule.value)\n ? { attributeId: rule.attributeId, condition: rule.condition }\n : rule;\n const updated = changeCondition(source, selectedCondition);\n if (boolean && (selectedCondition === \"is\" || selectedCondition === \"is-not\")) {\n const negative = rule.condition === \"is-not\";\n onChange({\n attributeId: rule.attributeId,\n condition: negative ? \"is-not\" : \"is\",\n value: negative ? selectedCondition === \"is-not\" : selectedCondition === \"is\",\n });\n return;\n }\n onChange(updated);\n }}\n />\n );\n};\n\n/** Opens from a filter pill and edits that one rule in place. */\nexport const ViewFilterRuleEditor = (props: ViewFilterRuleEditorProps) => {\n const { field, rule, options, onChange, onDelete } = props;\n const itemLabel = useCollectionItemLabel();\n\n return (\n <Stack data-testid=\"view-filter-rule-editor\" gap=\"2xs\" minW=\"0\">\n <HStack gap=\"xs\" paddingX=\"xs\" paddingTop=\"2xs\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {field.type.kind === \"boolean\" && typeof rule.value === \"boolean\" ? itemLabel : field.label}\n </Text>\n <ConditionSelect field={field} rule={rule} onChange={onChange} />\n <IconButton aria-label=\"Remove filter\" variant=\"ghost\" size=\"2xs\" marginLeft=\"auto\" onClick={onDelete}>\n <Icon as={X} />\n </IconButton>\n </HStack>\n <RuleValueEditor\n field={field}\n rule={rule}\n options={options}\n onChange={(value) => onChange(selectRuleValues(field, rule, value))}\n />\n </Stack>\n );\n};\n","import { HStack, Icon, IconButton, Text } from \"@chakra-ui/react\";\nimport { normalizeBooleanViewRule, type ViewFilterGroup, type ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { X } from \"lucide-react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { useCollectionItemLabel } from \"./collection-item-label\";\nimport { fieldIcon } from \"./collection-view-field-icon\";\nimport { findField } from \"./collection-view-fields\";\nimport { newRule, selectRuleValues } from \"./collection-view-rules\";\nimport { RuleValueControl, type RuleValueOption } from \"./filter-rule-value\";\nimport { RuleSelect } from \"./rule-select\";\nimport { ConditionSelect } from \"./view-filter-rule-editor\";\n\ntype Conjunction = ViewFilterGroup[\"conjunction\"];\n\ninterface RuleLeadProps {\n index: number;\n conjunction: Conjunction;\n onConjunctionChange?: (conjunction: Conjunction) => void;\n}\n\n/** A filter has one conjunction, so only its second rule offers a choice and later rules repeat it. */\nexport const RuleLead = (props: RuleLeadProps) => {\n const { index, conjunction, onConjunctionChange } = props;\n const label = conjunction === \"and\" ? \"And\" : \"Or\";\n if (index === 1 && onConjunctionChange)\n return (\n <RuleSelect\n aria-label=\"Conjunction\"\n width=\"3.75rem\"\n options={[\n { value: \"and\", label: \"And\" },\n { value: \"or\", label: \"Or\" },\n ]}\n value={conjunction}\n onSelect={(value) => onConjunctionChange(value as Conjunction)}\n />\n );\n return (\n <Text width=\"3.75rem\" flexShrink={0} paddingX=\"xs\" textStyle=\"label/S/regular\" color=\"fg.muted\">\n {index === 0 ? \"Where\" : label}\n </Text>\n );\n};\n\nexport interface FilterRuleRowProps extends RuleLeadProps {\n fields: AttributeDescriptor[];\n rule: ViewFilterRule;\n optionsFor: (field: AttributeDescriptor) => RuleValueOption[];\n onChange: (rule: ViewFilterRule) => void;\n onDelete: () => void;\n}\n\nexport const FilterRuleRow = (props: FilterRuleRowProps) => {\n const { fields, rule: savedRule, optionsFor, onChange, onDelete } = props;\n const field = findField(fields, savedRule.attributeId);\n const rule = field ? normalizeBooleanViewRule(savedRule, field.type) : savedRule;\n const itemLabel = useCollectionItemLabel();\n\n return (\n <HStack data-testid=\"filter-rule-row\" gap=\"xs\" minH=\"1.75rem\" minW=\"0\">\n <RuleLead {...props} />\n <RuleSelect\n aria-label=\"Field\"\n width=\"8.75rem\"\n showSearch\n options={fields.map((entry) => ({ value: entry.id, label: entry.label, icon: fieldIcon(entry) }))}\n showSelectedIcon={false}\n selectedLabel={field?.type.kind === \"boolean\" && typeof rule.value === \"boolean\" ? itemLabel : undefined}\n value={rule.attributeId}\n onSelect={(id) => {\n const next = findField(fields, id);\n if (next && id !== rule.attributeId) onChange(newRule(next));\n }}\n />\n {field ? (\n <>\n <ConditionSelect field={field} rule={rule} width=\"7.5rem\" onChange={onChange} />\n <RuleValueControl\n field={field}\n rule={rule}\n options={optionsFor(field)}\n onChange={(value) => onChange(selectRuleValues(field, rule, value))}\n />\n </>\n ) : (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n This field is no longer available\n </Text>\n )}\n <HStack flex=\"1\" />\n <IconButton aria-label=\"Remove filter\" variant=\"ghost\" size=\"2xs\" flexShrink={0} onClick={onDelete}>\n <Icon as={X} />\n </IconButton>\n </HStack>\n );\n};\n","import { Box, Button, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { Plus } from \"lucide-react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { addRule, newRule, setConjunction, setRuleAt } from \"./collection-view-rules\";\nimport { FilterRuleRow } from \"./filter-rule-row\";\nimport type { RuleValueOption } from \"./filter-rule-value\";\n\nexport interface AdvancedFilterMenuProps {\n /** The filterable fields, in menu order. */\n fields: AttributeDescriptor[];\n filter: ViewFilterGroup;\n optionsFor: (field: AttributeDescriptor) => RuleValueOption[];\n onChange: (filter: ViewFilterGroup) => void;\n}\n\n/** All rules share one conjunction. */\nexport const AdvancedFilterMenu = (props: AdvancedFilterMenuProps) => {\n const { fields, filter, optionsFor, onChange } = props;\n const firstField = fields[0];\n\n return (\n <Stack data-testid=\"advanced-filter-menu\" gap=\"2xs\" minW=\"0\">\n <Stack gap=\"2xs\" paddingX=\"xs\">\n {filter.rules.map((rule, index) => (\n <FilterRuleRow\n key={`${index}:${rule.attributeId}`}\n index={index}\n conjunction={filter.conjunction}\n onConjunctionChange={(conjunction) => onChange(setConjunction(filter, conjunction))}\n fields={fields}\n rule={rule}\n optionsFor={optionsFor}\n onChange={(next) => onChange(setRuleAt(filter, index, next))}\n onDelete={() => onChange(setRuleAt(filter, index, undefined))}\n />\n ))}\n {filter.rules.length === 0 ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" paddingY=\"xs\">\n No filter rules. Add one to narrow this view.\n </Text>\n ) : null}\n </Stack>\n <Box borderTopWidth=\"1px\" borderColor=\"border.subtle\" />\n <HStack gap=\"2xs\" paddingX=\"2xs\" paddingBottom=\"2xs\">\n {firstField ? (\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onChange(addRule(filter, newRule(firstField)))}>\n <Plus />\n Add filter rule\n </Button>\n ) : null}\n </HStack>\n </Stack>\n );\n};\n","import { Button, HStack, Icon, IconButton } from \"@chakra-ui/react\";\nimport type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { ListFilter, X } from \"lucide-react\";\nimport { useRef, useState } from \"react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { AdvancedFilterMenu } from \"./advanced-filter-menu\";\nimport { useCollectionItemLabel } from \"./collection-item-label\";\nimport { findField } from \"./collection-view-fields\";\nimport { pillConditionLabel, ruleValueLabel } from \"./collection-view-labels\";\nimport type { RuleValueOption } from \"./filter-rule-value\";\nimport { ViewBarPopover } from \"./view-bar-popover\";\n\ninterface AdvancedFilterPillProps {\n group: ViewFilterGroup;\n fields: AttributeDescriptor[];\n optionsFor: (field: AttributeDescriptor) => RuleValueOption[];\n onChange: (group: ViewFilterGroup) => void;\n onRemove: () => void;\n}\n\nexport const AdvancedFilterPill = (props: AdvancedFilterPillProps) => {\n const { group, fields, optionsFor, onChange, onRemove } = props;\n const [open, setOpen] = useState(group.rules.length === 0);\n const anchorRef = useRef<HTMLButtonElement>(null);\n const itemLabel = useCollectionItemLabel();\n const summary = group.rules\n .map((rule) => {\n const field = findField(fields, rule.attributeId);\n const subject =\n field?.type.kind === \"boolean\" && typeof rule.value === \"boolean\"\n ? itemLabel\n : (field?.label ?? rule.attributeId);\n return [subject, pillConditionLabel(rule, field), ruleValueLabel(rule, field)].filter(Boolean).join(\" \");\n })\n .join(group.conjunction === \"and\" ? \" and \" : \" or \");\n return (\n <HStack role=\"group\" aria-label=\"Advanced filter\" layerStyle=\"filterPill\" gap=\"0\" flexShrink={0}>\n <Button\n ref={anchorRef}\n aria-label=\"Edit advanced filter\"\n variant=\"filter-segment\"\n size=\"2xs\"\n onClick={() => setOpen(!open)}\n >\n <Icon as={ListFilter} />\n {summary || \"Advanced filter\"}\n </Button>\n <IconButton aria-label=\"Remove advanced filter\" variant=\"ghost\" size=\"2xs\" onClick={onRemove}>\n <Icon as={X} />\n </IconButton>\n <ViewBarPopover\n open={open}\n onOpenChange={setOpen}\n anchorRef={anchorRef}\n width=\"40rem\"\n testId=\"advanced-filter-popover\"\n >\n <AdvancedFilterMenu fields={fields} filter={group} optionsFor={optionsFor} onChange={onChange} />\n </ViewBarPopover>\n </HStack>\n );\n};\n","import { normalizeBooleanViewRule, type ViewFilterGroup, type ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor, KanbanRendererRow } from \"../kanban-renderer/types\";\nimport {\n acceptedCondition,\n findField,\n getAttributeStringValues,\n getAttributeValue,\n parseViewDate,\n} from \"./collection-view-fields\";\n\ntype RowTest = (row: KanbanRendererRow) => boolean;\n\nconst RELATIVE_DAY = /^today([+-]\\d+)?$/;\nconst ISO_DAY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nconst dayKey = (date: Date) => date.getFullYear() * 10_000 + (date.getMonth() + 1) * 100 + date.getDate();\n\n/** Relative days resolve against the viewer's local date each time the view renders. */\nexport const resolveViewDay = (value: string, today: Date) => {\n const relative = RELATIVE_DAY.exec(value);\n if (relative) {\n const offset = Number(relative[1] ?? 0);\n return dayKey(new Date(today.getFullYear(), today.getMonth(), today.getDate() + offset));\n }\n const iso = ISO_DAY.exec(value);\n if (!iso) return undefined;\n return Number(iso[1]) * 10_000 + Number(iso[2]) * 100 + Number(iso[3]);\n};\n\nconst rowDay = (value: unknown) => {\n const date = parseViewDate(value);\n return date && dayKey(date);\n};\n\nconst rowNumber = (value: unknown) => {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined;\n if (typeof value === \"string\" && value.trim() !== \"\" && Number.isFinite(Number(value))) return Number(value);\n return undefined;\n};\n\nconst rowText = (row: KanbanRendererRow, field: AttributeDescriptor) =>\n getAttributeStringValues(row, field).join(\" \").toLocaleLowerCase();\n\nconst compareTests: Record<string, (left: number, right: number) => boolean> = {\n is: (left, right) => left === right,\n gt: (left, right) => left > right,\n gte: (left, right) => left >= right,\n lt: (left, right) => left < right,\n lte: (left, right) => left <= right,\n \"is-before\": (left, right) => left < right,\n \"is-after\": (left, right) => left > right,\n \"is-on-or-before\": (left, right) => left <= right,\n \"is-on-or-after\": (left, right) => left >= right,\n};\n\nconst ordered = (read: (value: unknown) => number | undefined, condition: string, target: number) => {\n if (condition === \"is-not\") return (value: unknown) => read(value) !== target;\n const test = compareTests[condition]!;\n return (value: unknown) => {\n const left = read(value);\n return left !== undefined && test(left, target);\n };\n};\n\nconst compileListRule = (field: AttributeDescriptor, condition: string, value: string[]): RowTest | undefined => {\n if (value.length === 0) return undefined;\n const matched = (row: KanbanRendererRow) =>\n getAttributeStringValues(row, field).filter((entry) => value.includes(entry));\n if (condition === \"is-any-of\" || condition === \"has-any-of\") return (row) => matched(row).length > 0;\n if (condition === \"is-none-of\" || condition === \"has-none-of\") return (row) => matched(row).length === 0;\n if (condition === \"has-all-of\") return (row) => new Set(matched(row)).size === new Set(value).size;\n return undefined;\n};\n\nconst compileTextRule = (field: AttributeDescriptor, condition: string, value: string): RowTest | undefined => {\n if (value === \"\") return undefined;\n const needle = value.toLocaleLowerCase();\n if (condition === \"contains\") return (row) => rowText(row, field).includes(needle);\n if (condition === \"does-not-contain\") return (row) => !rowText(row, field).includes(needle);\n if (condition === \"is\") return (row) => rowText(row, field) === needle;\n if (condition === \"is-not\") return (row) => rowText(row, field) !== needle;\n return undefined;\n};\n\nconst compileValueRule = (\n field: AttributeDescriptor,\n condition: string,\n value: ViewFilterRule[\"value\"],\n today: Date,\n): RowTest | undefined => {\n const kind = field.type.kind;\n if (Array.isArray(value)) return compileListRule(field, condition, value);\n if (kind === \"boolean\" && typeof value === \"boolean\") {\n return (row) => {\n const actual = getAttributeValue(row, field);\n if (condition === \"is-not\" && (actual === undefined || actual === null)) return true;\n return typeof actual === \"boolean\" && (condition === \"is\" ? actual === value : actual !== value);\n };\n }\n if (kind === \"number\" && typeof value === \"number\") {\n const test = ordered(rowNumber, condition, value);\n return (row: KanbanRendererRow) => test(getAttributeValue(row, field));\n }\n if (kind === \"date\" && typeof value === \"string\") {\n const target = resolveViewDay(value, today);\n if (target === undefined) return undefined;\n const test = ordered(rowDay, condition, target);\n return (row: KanbanRendererRow) => test(getAttributeValue(row, field));\n }\n if (kind === \"string\" && typeof value === \"string\") return compileTextRule(field, condition, value);\n return undefined;\n};\n\n/** Returns undefined for a rule that is still being built or no longer fits its field. */\nconst compileRule = (rule: ViewFilterRule, fields: AttributeDescriptor[], today: Date): RowTest | undefined => {\n const field = findField(fields, rule.attributeId);\n if (!field || field.filterable === false) return undefined;\n rule = normalizeBooleanViewRule(rule, field.type);\n const condition = acceptedCondition(field, rule.condition);\n // Old views picked exact values on every field. When a host cannot tell a field's kind up front,\n // they still arrive as \"any of\" lists, and keep their meaning.\n if (\n !condition &&\n field.type.kind !== \"boolean\" &&\n [\"is-any-of\", \"is-none-of\"].includes(rule.condition) &&\n Array.isArray(rule.value)\n )\n return compileListRule(field, rule.condition, rule.value);\n if (!condition) return undefined;\n if (condition === \"is-empty\") return (row) => getAttributeStringValues(row, field).length === 0;\n if (condition === \"is-not-empty\") return (row) => getAttributeStringValues(row, field).length > 0;\n return compileValueRule(field, condition, rule.value, today);\n};\n\nconst compileGroup = (group: ViewFilterGroup, fields: AttributeDescriptor[], today: Date): RowTest | undefined => {\n const tests = group.rules.flatMap((rule) => {\n const test = compileRule(rule, fields, today);\n return test ? [test] : [];\n });\n for (const child of group.groups ?? []) {\n const test = compileGroup(child, fields, today);\n if (test) tests.push(test);\n }\n if (tests.length === 0) return undefined;\n if (group.conjunction === \"or\") return (row) => tests.some((test) => test(row));\n return (row) => tests.every((test) => test(row));\n};\n\n/** Rules that are incomplete or no longer fit a field are skipped, so they never hide rows. */\nexport const filterRowsByView = <TRow extends KanbanRendererRow>(\n rows: TRow[],\n filter: ViewFilterGroup,\n fields: AttributeDescriptor[],\n today = new Date(),\n) => {\n const test = compileGroup(filter, fields, today);\n return test ? rows.filter(test) : rows;\n};\n\n/** The number of rules a person sees in the criteria row and the Filter button. */\nexport const countFilterRules = (filter: ViewFilterGroup) =>\n filter.rules.length + (filter.groups ?? []).reduce((count, group) => count + group.rules.length, 0);\n","import { HStack, Icon, IconButton, Text } from \"@chakra-ui/react\";\nimport { normalizeBooleanViewRule, type ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { X } from \"lucide-react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { useCollectionItemLabel } from \"./collection-item-label\";\nimport { findField } from \"./collection-view-fields\";\nimport { selectRuleValues } from \"./collection-view-rules\";\nimport { RuleValueControl, type RuleValueOption } from \"./filter-rule-value\";\nimport { ConditionSelect } from \"./view-filter-rule-editor\";\n\nexport interface FilterRulePillProps {\n fields: AttributeDescriptor[];\n rule: ViewFilterRule;\n options: RuleValueOption[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onChange: (rule: ViewFilterRule) => void;\n onRemove: () => void;\n}\n\n/** Each part of a filter can be changed without opening another editor. */\nexport const FilterRulePill = (props: FilterRulePillProps) => {\n const { fields, rule: savedRule, options, open, onOpenChange, onChange, onRemove } = props;\n const field = findField(fields, savedRule.attributeId);\n const rule = field ? normalizeBooleanViewRule(savedRule, field.type) : savedRule;\n const itemLabel = useCollectionItemLabel();\n const label = field?.label ?? rule.attributeId;\n const boolean = field?.type.kind === \"boolean\";\n return (\n <HStack role=\"group\" aria-label={`${label} filter`} layerStyle=\"filterPill\" gap=\"0\" flexShrink={0}>\n <Text as=\"span\" textStyle=\"label/XS\" layerStyle=\"filterLabel\" alignItems=\"center\" flexShrink=\"0\">\n {boolean && typeof rule.value === \"boolean\" ? itemLabel : label}\n </Text>\n {field ? (\n <>\n <ConditionSelect\n field={field}\n rule={rule}\n variant=\"filter-condition\"\n onChange={onChange}\n open={boolean ? open : undefined}\n onOpenChange={boolean ? onOpenChange : undefined}\n />\n <RuleValueControl\n field={field}\n rule={rule}\n options={options}\n variant=\"filter-segment\"\n open={open}\n onOpenChange={onOpenChange}\n onChange={(value) => onChange(selectRuleValues(field, rule, value))}\n />\n </>\n ) : (\n <Text textStyle=\"label/XS\">Unavailable field</Text>\n )}\n <IconButton aria-label={`Remove ${label} filter`} variant=\"ghost\" size=\"2xs\" onClick={onRemove}>\n <Icon as={X} />\n </IconButton>\n </HStack>\n );\n};\n","import { Box, Button, Dialog, Icon, IconButton, Input, Tabs, Text } from \"@chakra-ui/react\";\nimport { Copy, LayersPlus, Pencil, Trash2 } from \"lucide-react\";\nimport { type FormEvent, useState } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { CollectionSavedView, CollectionViewState, CollectionViewsSource } from \"./collection-view-types\";\n\ninterface RenameViewDialogProps {\n title: string;\n onClose: () => void;\n onRename: (title: string) => void;\n}\n\nconst RenameViewDialog = (props: RenameViewDialogProps) => {\n const { title, onClose, onRename } = props;\n const [value, setValue] = useState(title);\n const submit = (event: FormEvent) => {\n event.preventDefault();\n const nextTitle = value.trim();\n if (!nextTitle) return;\n onRename(nextTitle);\n onClose();\n };\n\n return (\n <Dialog.Root open onOpenChange={(details) => !details.open && onClose()}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content asChild>\n <form onSubmit={submit}>\n <Dialog.Header>\n <Dialog.Title>Rename view</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n <Input\n autoFocus\n aria-label=\"View name\"\n value={value}\n onChange={(event) => setValue(event.target.value)}\n />\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"primary\" disabled={!value.trim()}>\n Rename\n </Button>\n </Dialog.Footer>\n </form>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n\nconst nextViewTitle = (views: { title: string }[]) => {\n let index = views.length + 1;\n while (views.some((view) => view.title === `View ${index}`)) index += 1;\n return `View ${index}`;\n};\n\nexport interface CollectionViewTabsProps<TSettings> {\n views: (CollectionSavedView<TSettings> & { builtIn: boolean })[];\n activeViewId: string;\n viewsSource?: CollectionViewsSource<TSettings>;\n dirty: boolean;\n busy: boolean;\n state: CollectionViewState<TSettings>;\n onActivate: (view: CollectionSavedView<TSettings>) => void;\n /** Runs a views-source call and reports its error in the bar. */\n run: (action: () => Promise<void>) => void;\n createView: (input: Parameters<CollectionViewsSource<TSettings>[\"onCreateView\"]>[0]) => Promise<void>;\n}\n\nexport const CollectionViewTabs = <TSettings,>(props: CollectionViewTabsProps<TSettings>) => {\n const { views, activeViewId, viewsSource, dirty, busy, state, onActivate, run, createView } = props;\n const [renameTarget, setRenameTarget] = useState<CollectionSavedView<TSettings>>();\n\n const actionsFor = (view: CollectionSavedView<TSettings> & { builtIn: boolean }): ResourceContextAction[] =>\n viewsSource\n ? [\n {\n key: \"rename\",\n label: \"Rename\",\n isDisabled: busy,\n icon: <Icon as={Pencil} boxSize=\"0.875rem\" />,\n onClick: () => setRenameTarget(view),\n },\n {\n key: \"duplicate\",\n label: \"Duplicate\",\n icon: <Icon as={Copy} boxSize=\"0.875rem\" />,\n isDisabled: busy,\n onClick: () =>\n run(() =>\n createView({\n settings: view.settings,\n filter: view.filter,\n sorts: view.sorts,\n title: `${view.title} copy`,\n copyFrom: view.id,\n }),\n ),\n },\n {\n key: \"delete\",\n label: \"Delete view\",\n icon: <Icon as={Trash2} boxSize=\"0.875rem\" />,\n isDisabled: views.length === 1 || busy,\n separatorBefore: true,\n onClick: () => run(() => viewsSource.onDeleteView(view.id)),\n },\n ]\n : [];\n\n return (\n <>\n <Tabs.Root\n value={activeViewId}\n size=\"sm\"\n variant=\"subtle\"\n minW=\"0\"\n overflow=\"hidden\"\n onValueChange={(details) => {\n const view = views.find((entry) => entry.id === details.value);\n if (view) onActivate(view);\n }}\n >\n <Tabs.List overflowX=\"auto\" overflowY=\"hidden\">\n {views.map((view) => (\n <ResourceContextMenu key={view.id} actions={actionsFor(view)} positioning={{ placement: \"bottom-start\" }}>\n <Tabs.Trigger value={view.id} title={view.title}>\n <Text as=\"span\" data-tab-label>\n {view.title}\n </Text>\n {dirty && view.id === activeViewId ? (\n <Box\n aria-label=\"Unsaved view changes\"\n width=\"0.375rem\"\n height=\"0.375rem\"\n flexShrink={0}\n borderRadius=\"full\"\n bg=\"fg.warning\"\n />\n ) : null}\n </Tabs.Trigger>\n </ResourceContextMenu>\n ))}\n </Tabs.List>\n </Tabs.Root>\n <Tooltip content=\"Add view\">\n <IconButton\n aria-label=\"Add view\"\n size=\"2xs\"\n variant=\"ghost\"\n disabled={!viewsSource || busy}\n onClick={() => viewsSource && run(() => createView({ title: nextViewTitle(views), ...state }))}\n >\n <Icon as={LayersPlus} />\n </IconButton>\n </Tooltip>\n {renameTarget && viewsSource ? (\n <RenameViewDialog\n key={renameTarget.id}\n title={renameTarget.title}\n onClose={() => setRenameTarget(undefined)}\n onRename={(title) => run(() => viewsSource.onUpdateView(renameTarget.id, { title }))}\n />\n ) : null}\n </>\n );\n};\n","import type { ViewFilterGroup, ViewSort } from \"@pstdio/sdk/extensions\";\n\nexport type {\n ViewFilterCondition,\n ViewFilterGroup,\n ViewFilterRule,\n ViewSort,\n ViewSortDirection,\n} from \"@pstdio/sdk/extensions\";\n\nexport const EMPTY_VIEW_FILTER: ViewFilterGroup = { conjunction: \"and\", rules: [] };\n\n/** What a saved view stores. Search, selection, and collapsed groups are screen state and never saved. */\nexport interface CollectionSavedView<TSettings> {\n id: string;\n title: string;\n settings: TSettings;\n filter: ViewFilterGroup;\n sorts: ViewSort[];\n /** @deprecated Use defaultActiveViewId instead. */\n isDefault?: boolean;\n}\n\nexport interface CollectionViewState<TSettings> {\n settings: TSettings;\n filter: ViewFilterGroup;\n sorts: ViewSort[];\n}\n\nexport interface CollectionViewsSource<TSettings> {\n views: (CollectionSavedView<TSettings> & { builtIn: boolean })[];\n defaultViewId: string;\n onCreateView: (\n input: CollectionViewState<TSettings> & { title: string; copyFrom?: string },\n ) => Promise<CollectionSavedView<TSettings>>;\n onUpdateView: (id: string, input: Partial<CollectionViewState<TSettings>> & { title?: string }) => Promise<void>;\n onDeleteView: (id: string) => Promise<void>;\n onSetDefaultView: (id: string | null) => Promise<void>;\n}\n","import { Box, Button, Icon, Stack } from \"@chakra-ui/react\";\nimport { normalizeBooleanViewRule, type ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { Check, X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { Checkbox } from \"../primitives/checkbox\";\nimport { ScrollArea } from \"../primitives/scroll-area\";\nimport { newRule, selectRuleValues } from \"./collection-view-rules\";\nimport { RuleValueEditor, type RuleValueOption } from \"./filter-rule-value\";\nimport { FilterValuePanel } from \"./filter-value-panel\";\n\ninterface FilterPickerValuesProps {\n field: AttributeDescriptor;\n rule?: ViewFilterRule;\n options: RuleValueOption[];\n onSelectRule: (rule: ViewFilterRule) => void;\n}\n\nconst ScalarPickerValue = (props: FilterPickerValuesProps & { rule: ViewFilterRule }) => {\n const { field, rule, options, onSelectRule } = props;\n const [value, setValue] = useState(rule.value);\n const text = field.type.kind === \"string\";\n const complete = text || (value !== undefined && value !== \"\");\n const submit = () => {\n if (complete) onSelectRule(selectRuleValues(field, rule, value));\n };\n return (\n <Stack\n height=\"full\"\n minH=\"0\"\n gap=\"xs\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n submit();\n }\n }}\n >\n <ScrollArea flex=\"1\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n <RuleValueEditor field={field} rule={{ ...rule, value }} options={options} onChange={setValue} />\n </ScrollArea>\n <Box paddingX=\"sm\" paddingBottom=\"sm\" flexShrink={0}>\n <Button size=\"sm\" variant=\"primary\" width=\"full\" disabled={!complete} onClick={submit}>\n Apply filter\n </Button>\n </Box>\n </Stack>\n );\n};\n\n/** Browsing does not add a rule. Values commit immediately; scalar drafts use Apply filter. */\nexport const FilterPickerValues = (props: FilterPickerValuesProps) => {\n const { field, options, onSelectRule } = props;\n const source = normalizeBooleanViewRule(props.rule ?? newRule(field), field.type);\n const scalar = [\"string\", \"number\", \"date\"].includes(field.type.kind);\n const rule = scalar && [\"is-empty\", \"is-not-empty\"].includes(source.condition) ? newRule(field) : source;\n if (field.type.kind === \"boolean\")\n return (\n <FilterValuePanel>\n <Stack gap=\"0\">\n {[true, false].map((value) => (\n <ListRow\n key={String(value)}\n id={String(value)}\n role=\"button\"\n variant=\"compact\"\n icon={<Icon as={value ? Check : X} boxSize=\"3\" />}\n label={value ? \"Yes\" : \"No\"}\n endContent={\n <Checkbox\n checked={\n Boolean(props.rule) &&\n typeof rule.value === \"boolean\" &&\n (rule.condition === \"is-not\" ? !rule.value : rule.value) === value\n }\n readOnly\n inputProps={{ tabIndex: -1, \"aria-hidden\": true }}\n pointerEvents=\"none\"\n size=\"xs\"\n />\n }\n onActivate={() => onSelectRule(selectRuleValues(field, rule, value))}\n />\n ))}\n </Stack>\n </FilterValuePanel>\n );\n if (scalar) return <ScalarPickerValue key={field.id} {...props} rule={rule} />;\n return (\n <RuleValueEditor\n field={field}\n rule={rule}\n options={options}\n onChange={(value) => {\n if (value === undefined || value === \"\") return;\n onSelectRule(selectRuleValues(field, rule, value));\n }}\n />\n );\n};\n","import { Box, HStack, Icon, Input, Stack, Text } from \"@chakra-ui/react\";\nimport type { ViewFilterGroup, ViewFilterRule } from \"@pstdio/sdk/extensions\";\nimport { ChevronRight, ListFilter, Search } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { fieldIcon } from \"./collection-view-field-icon\";\nimport { isOptionField } from \"./collection-view-fields\";\nimport { FilterPickerValues } from \"./filter-picker-values\";\nimport type { RuleValueOption } from \"./filter-rule-value\";\n\nexport interface FilterMenuProps {\n /** The filterable fields, in menu order. */\n fields: AttributeDescriptor[];\n filter: ViewFilterGroup;\n optionsFor: (field: AttributeDescriptor) => RuleValueOption[];\n onSelectRule: (rule: ViewFilterRule) => void;\n onAddAdvanced?: () => void;\n onClear?: () => void;\n}\n\nconst contentProps = { p: \"2xs\", display: \"flex\", flexDirection: \"column\", gap: \"1px\" } as const;\n\n/** Browse properties and select values before closing the picker. */\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { fields, filter, optionsFor, onSelectRule } = props;\n const [query, setQuery] = useState(\"\");\n const optionFields = fields.filter(isOptionField);\n const [activeId, setActiveId] = useState(optionFields[0]?.id ?? fields[0]?.id ?? \"\");\n const needle = query.trim().toLocaleLowerCase();\n const visible = fields.filter((field) => field.label.toLocaleLowerCase().includes(needle));\n const active = visible.find((field) => field.id === activeId);\n\n return (\n <Stack data-testid=\"filter-menu\" layerStyle=\"filterPicker\" gap=\"0\" overflow=\"hidden\">\n <HStack height=\"2.25rem\" gap=\"xs\" paddingX=\"sm\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\">\n <Icon as={Search} boxSize=\"0.875rem\" color=\"fg.muted\" />\n <Input\n autoFocus\n aria-label=\"Filter properties\"\n value={query}\n placeholder=\"Filter by…\"\n variant=\"flushed\"\n border=\"0\"\n height=\"full\"\n padding=\"0\"\n onChange={(event) => setQuery(event.target.value)}\n />\n </HStack>\n <HStack alignItems=\"stretch\" gap=\"0\" flex=\"1\" minH=\"0\">\n <Stack\n data-testid=\"filter-property-column\"\n width=\"11.75rem\"\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderColor=\"border.subtle\"\n gap=\"0\"\n minH=\"0\"\n >\n <ScrollArea flex=\"1\" minH=\"0\" viewportProps={{ overscrollBehavior: \"contain\" }} contentProps={contentProps}>\n {visible.map((field) => (\n <ListRow\n key={field.id}\n id={field.id}\n role=\"button\"\n variant=\"compact\"\n isSelected={active?.id === field.id}\n icon={<Icon as={fieldIcon(field)} boxSize=\"3\" />}\n label={field.label}\n endContent={<Icon as={ChevronRight} boxSize=\"3\" color=\"fg.subtle\" />}\n onActivate={() => setActiveId(field.id)}\n />\n ))}\n </ScrollArea>\n </Stack>\n <Stack flex=\"1\" minW=\"0\" minH=\"0\" gap=\"0\">\n {active ? (\n <Box data-testid=\"filter-value-column\" flex=\"1\" minH=\"0\">\n <FilterPickerValues\n field={active}\n rule={filter.rules.find((rule) => rule.attributeId === active.id)}\n options={optionsFor(active)}\n onSelectRule={onSelectRule}\n />\n </Box>\n ) : null}\n </Stack>\n </HStack>\n {props.onAddAdvanced || props.onClear ? (\n <HStack data-testid=\"filter-menu-footer\" padding=\"2xs\" borderTopWidth=\"1px\" borderColor=\"border.subtle\">\n {props.onAddAdvanced ? (\n <ListRow\n id=\"advanced-filter\"\n role=\"button\"\n variant=\"compact\"\n flex=\"1\"\n label=\"Advanced filter\"\n icon={<Icon as={ListFilter} boxSize=\"3\" />}\n onActivate={props.onAddAdvanced}\n />\n ) : (\n <Box flex=\"1\" />\n )}\n {props.onClear ? (\n <ListRow\n id=\"clear-all\"\n role=\"button\"\n aria-label=\"Clear all\"\n variant=\"compact\"\n flex=\"1\"\n label=\"\"\n endContent={<Text textStyle=\"label/S/regular\">Clear all</Text>}\n disabled={filter.rules.length === 0 && !filter.groups?.length}\n onActivate={props.onClear}\n />\n ) : null}\n </HStack>\n ) : null}\n </Stack>\n );\n};\n","import type { ViewFilterGroup, ViewFilterRule, ViewSort } from \"@pstdio/sdk/extensions\";\nimport { useStore } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\nimport { createStore, type StoreApi } from \"zustand/vanilla\";\nimport {\n createHostPersistStorage,\n createHostStoreRegistry,\n type HostStorage,\n useHostStorage,\n} from \"../../utils/host-storage\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { normalFilter } from \"./advanced-filter\";\nimport { addRule, newRule, setRuleAt } from \"./collection-view-rules\";\nimport { type CollectionSavedView, EMPTY_VIEW_FILTER } from \"./collection-view-types\";\n\n/** The unsaved state of one renderer: the active view and the edits made on top of it. */\nexport interface CollectionViewSnapshot<TSettings> {\n settings: TSettings;\n filter: ViewFilterGroup;\n sorts: ViewSort[];\n expandedGroups: Record<string, boolean>;\n activeViewId: string;\n}\n\nexport type CollectionViewMenu = \"filter\";\n\nexport interface CollectionViewStoreInitialState<TSettings> {\n settings: TSettings;\n filter?: ViewFilterGroup;\n sorts?: ViewSort[];\n}\n\nexport interface CollectionViewStoreState<TSettings> extends CollectionViewSnapshot<TSettings> {\n /** The view bar menu that is open. Screen state: never persisted. */\n openMenu: CollectionViewMenu | null;\n /** The root rule whose pill editor is open. Screen state: never persisted. */\n openRuleIndex: number | null;\n setOpenMenu: (menu: CollectionViewMenu | null) => void;\n setOpenRuleIndex: (index: number | null) => void;\n /** Adds a rule for the field and opens its pill editor. */\n startRule: (field: AttributeDescriptor) => void;\n /** Commits picker values; scalar values transfer editing to their bubble. */\n selectRule: (rule: ViewFilterRule) => void;\n setSettings: (settings: Partial<TSettings>) => void;\n setFilter: (filter: ViewFilterGroup) => void;\n setSorts: (sorts: ViewSort[]) => void;\n setExpandedGroup: (groupId: string, isExpanded: boolean) => void;\n activateView: (view: CollectionSavedView<TSettings>) => void;\n reset: () => void;\n}\n\ninterface CreateCollectionViewStoreOptions<TSettings> {\n storageKey: string;\n storage?: HostStorage;\n initialState: CollectionViewStoreInitialState<TSettings>;\n}\n\nconst STORE_NAMESPACE = \"pstdio/ui/kanban-renderer\";\n\nexport const createCollectionViewStore = <TSettings>(options: CreateCollectionViewStoreOptions<TSettings>) => {\n const { storageKey, initialState, storage } = options;\n const snapshot: CollectionViewSnapshot<TSettings> = {\n settings: initialState.settings,\n filter: initialState.filter ?? EMPTY_VIEW_FILTER,\n sorts: (initialState.sorts ?? []).slice(0, 1),\n expandedGroups: {},\n activeViewId: \"\",\n };\n\n return createStore<CollectionViewStoreState<TSettings>>()(\n persist(\n (set) => ({\n ...snapshot,\n openMenu: null,\n openRuleIndex: null,\n // Opening one menu closes the other; closing one leaves the other alone.\n setOpenMenu: (openMenu) => set(openMenu ? { openMenu, openRuleIndex: null } : { openMenu }),\n setOpenRuleIndex: (openRuleIndex) =>\n set(openRuleIndex === null ? { openRuleIndex } : { openRuleIndex, openMenu: null }),\n startRule: (field) =>\n set((state) => {\n const current = normalFilter(state.filter);\n const index = current.rules.findIndex((rule) => rule.attributeId === field.id);\n if (index !== -1) return { filter: current, openMenu: null, openRuleIndex: index };\n const filter = addRule(current, newRule(field));\n return { filter, openMenu: null, openRuleIndex: filter.rules.length - 1 };\n }),\n selectRule: (rule) =>\n set((state) => {\n const current = normalFilter(state.filter);\n const index = current.rules.findIndex((entry) => entry.attributeId === rule.attributeId);\n if (Array.isArray(rule.value) && rule.value.length === 0)\n return { filter: setRuleAt(current, index, undefined), openRuleIndex: null };\n const filter = index === -1 ? addRule(current, rule) : setRuleAt(current, index, rule);\n // Option lists keep their stable toolbar anchor while the selection changes.\n if (Array.isArray(rule.value) && state.openMenu === \"filter\") return { filter, openRuleIndex: null };\n return { filter, openMenu: null, openRuleIndex: index === -1 ? filter.rules.length - 1 : index };\n }),\n setSettings: (settings) => set((state) => ({ settings: { ...state.settings, ...settings } })),\n setFilter: (filter) => set({ filter }),\n setSorts: (sorts) => set({ sorts: sorts.slice(0, 1) }),\n setExpandedGroup: (groupId, isExpanded) =>\n set((state) => ({ expandedGroups: { ...state.expandedGroups, [groupId]: isExpanded } })),\n activateView: (view) =>\n set({\n settings: structuredClone(view.settings),\n filter: structuredClone(view.filter),\n sorts: structuredClone(view.sorts.slice(0, 1)),\n activeViewId: view.id,\n expandedGroups: {},\n openRuleIndex: null,\n }),\n reset: () => set(snapshot),\n }),\n {\n name: `${STORE_NAMESPACE}/${storageKey}`,\n version: 5,\n // Older local state used the single-value filter map and one ordering. Start from the server's views.\n migrate: () => snapshot,\n storage: createHostPersistStorage(storage),\n merge: (persisted, current) => {\n const restored = { ...current, ...(persisted as Partial<CollectionViewSnapshot<TSettings>>) };\n return { ...restored, sorts: restored.sorts.slice(0, 1) };\n },\n partialize: (state) => ({\n settings: state.settings,\n filter: state.filter,\n sorts: state.sorts,\n activeViewId: state.activeViewId,\n expandedGroups: state.expandedGroups,\n }),\n },\n ),\n );\n};\n\ntype AnyCollectionViewStore = StoreApi<CollectionViewStoreState<unknown>>;\n\nconst hostCollectionViewStore = createHostStoreRegistry<\n AnyCollectionViewStore,\n [CollectionViewStoreInitialState<unknown>]\n>((storageKey, storage, initialState) => createCollectionViewStore({ storageKey, initialState, storage }));\n\n/** One store per host storage and key. The first caller's initial state wins. */\nexport const getCollectionViewStore = <TSettings>(\n storageKey: string,\n initialState: CollectionViewStoreInitialState<TSettings>,\n storage?: HostStorage,\n) =>\n hostCollectionViewStore(storageKey, storage, initialState) as unknown as StoreApi<\n CollectionViewStoreState<TSettings>\n >;\n\nexport const useCollectionViewStore = <TSettings, T>(\n storageKey: string,\n initialState: CollectionViewStoreInitialState<TSettings>,\n selector: (state: CollectionViewStoreState<TSettings>) => T,\n) => useStore(getCollectionViewStore(storageKey, initialState, useHostStorage()), selector);\n","import { normalizeBooleanViewRule, type ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\n\n/** Normalize saved values before editing or saving them, including unsaved local view state. */\nexport const normalizeBooleanViewFilter = (filter: ViewFilterGroup, fields: AttributeDescriptor[]): ViewFilterGroup => {\n const rules = filter.rules.map((rule) => {\n const field = fields.find((field) => field.id === rule.attributeId);\n return field ? normalizeBooleanViewRule(rule, field.type) : rule;\n });\n const groups = filter.groups?.map((group) => normalizeBooleanViewFilter(group, fields));\n const changed =\n rules.some((rule, index) => rule !== filter.rules[index]) ||\n groups?.some((group, index) => group !== filter.groups?.[index]);\n return changed ? { ...filter, rules, ...(groups ? { groups } : {}) } : filter;\n};\n","import type { ViewFilterGroup } from \"@pstdio/sdk/extensions\";\nimport { useEffect, useRef } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useHostStorage } from \"../../utils/host-storage\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { normalFilter } from \"./advanced-filter\";\nimport {\n type CollectionSavedView,\n type CollectionViewState,\n type CollectionViewsSource,\n EMPTY_VIEW_FILTER,\n} from \"./collection-view-types\";\nimport { normalizeBooleanViewFilter } from \"./normalize-boolean-view-filter\";\nimport { type CollectionViewStoreInitialState, getCollectionViewStore } from \"./use-collection-view-store\";\n\n// The order of these lists does not change what the view shows.\nconst UNORDERED_SETTINGS = new Set([\"displayProperties\", \"hiddenColumns\"]);\n\nconst comparableSettings = (settings: unknown) =>\n Object.entries(settings as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, value]) => [key, UNORDERED_SETTINGS.has(key) && Array.isArray(value) ? [...value].sort() : value]);\n\nconst comparableFilter = (filter: ViewFilterGroup): unknown => ({\n conjunction: filter.conjunction,\n rules: filter.rules.map((rule) => ({\n attributeId: rule.attributeId,\n condition: rule.condition,\n value: Array.isArray(rule.value) ? [...rule.value].sort() : rule.value,\n })),\n groups: filter.groups?.length ? filter.groups.map(comparableFilter) : undefined,\n});\n\n/** Search never counts: it is screen state, so it never marks a view as changed. */\nexport const isCollectionViewDirty = <TSettings>(\n view: CollectionSavedView<TSettings> | undefined,\n state: CollectionViewState<TSettings>,\n) => {\n if (!view) return false;\n const comparable = (value: CollectionViewState<TSettings>) =>\n JSON.stringify([\n comparableSettings(value.settings),\n comparableFilter(normalFilter(value.filter)),\n value.sorts.map((sort) => [sort.attributeId, sort.direction]),\n ]);\n return comparable(view) !== comparable(state);\n};\n\nexport interface CollectionViewsInput<TSettings> {\n storageKey: string;\n fields?: AttributeDescriptor[];\n initialState: CollectionViewStoreInitialState<TSettings>;\n viewsSource?: CollectionViewsSource<TSettings>;\n defaultViews?: CollectionSavedView<TSettings>[];\n defaultActiveViewId?: string;\n}\n\n/** Picks the views a renderer offers and keeps the store on a view that still exists. */\nexport const useCollectionViews = <TSettings>(input: CollectionViewsInput<TSettings>) => {\n const store = getCollectionViewStore(input.storageKey, input.initialState, useHostStorage());\n const activeViewId = useStore(store, (state) => state.activeViewId);\n const { settings, filter = EMPTY_VIEW_FILTER, sorts = [] } = input.initialState;\n const defaults = input.defaultViews?.length\n ? input.defaultViews\n : [{ id: \"default\", title: \"All\", settings, filter, sorts }];\n const sourceViews = input.viewsSource?.views ?? defaults.map((view) => ({ ...view, builtIn: true }));\n const views = input.fields\n ? sourceViews.map((view) => {\n const filter = normalizeBooleanViewFilter(view.filter, input.fields!);\n return filter === view.filter ? view : { ...view, filter };\n })\n : sourceViews;\n const defaultId = [\n input.viewsSource?.defaultViewId,\n input.defaultActiveViewId,\n input.defaultViews?.find((view) => view.isDefault)?.id,\n views[0]?.id,\n ].find((id) => views.some((view) => view.id === id));\n const previous = useRef<{ views: CollectionSavedView<TSettings>[]; active?: CollectionSavedView<TSettings> }>(\n undefined,\n );\n useEffect(() => {\n const state = store.getState();\n if (input.fields) {\n const normalized = normalizeBooleanViewFilter(state.filter, input.fields);\n if (normalized !== state.filter) state.setFilter(normalized);\n }\n const active = views.find((view) => view.id === activeViewId);\n const prior = previous.current;\n if (!active) {\n // A create response can select its view before the sync event arrives.\n // Only replace missing selections on mount or when a known view was deleted.\n if (!prior || !activeViewId || prior.views.some((view) => view.id === activeViewId)) {\n const fallback = views.find((view) => view.id === defaultId) ?? views[0];\n if (fallback) state.activateView(fallback);\n }\n } else if (\n prior?.active?.id === active.id &&\n !isCollectionViewDirty(prior.active, state) &&\n isCollectionViewDirty(active, state)\n ) {\n // Another client saved the view this person has open without edits: follow it.\n state.activateView(active);\n }\n previous.current = { views, active };\n }, [store, views, defaultId, activeViewId, input.fields]);\n return { views, defaultId };\n};\n","import { HStack, Icon, IconButton, Input, Text } from \"@chakra-ui/react\";\nimport { Search, X } from \"lucide-react\";\nimport { useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\n\nexport interface ViewSearchFieldProps {\n value: string;\n onValueChange: (value: string) => void;\n /** How many rows or cards match, such as \"4 of 10\". Shown while the field has text. */\n resultLabel?: string;\n}\n\n/** Starts as an icon button. Escape or the clear button empties it and folds it back. */\nexport const ViewSearchField = (props: ViewSearchFieldProps) => {\n const { value, onValueChange, resultLabel } = props;\n const [open, setOpen] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const close = () => {\n onValueChange(\"\");\n setOpen(false);\n };\n\n if (!open && !value) {\n return (\n <Tooltip content=\"Search\">\n <IconButton\n aria-label=\"Search this view\"\n variant=\"ghost\"\n size=\"2xs\"\n onClick={() => {\n setOpen(true);\n setTimeout(() => inputRef.current?.focus(), 0);\n }}\n >\n <Icon as={Search} />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <HStack\n data-testid=\"view-search-field\"\n width=\"13.75rem\"\n height=\"filter-pill\"\n gap=\"2xs\"\n paddingX=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border\"\n borderRadius=\"xs\"\n bg=\"bg.subtle\"\n flexShrink={0}\n >\n <Icon as={Search} boxSize=\"0.75rem\" color=\"fg.muted\" flexShrink={0} />\n <Input\n ref={inputRef}\n autoFocus\n aria-label=\"Search this view\"\n value={value}\n placeholder=\"Search…\"\n variant=\"borderless\"\n size=\"2xs\"\n height=\"full\"\n padding=\"0\"\n textStyle=\"label/S/regular\"\n onChange={(event) => onValueChange(event.target.value)}\n onBlur={() => !value && setOpen(false)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") close();\n }}\n />\n {value && resultLabel ? (\n <Text textStyle=\"label/XS\" color=\"fg.subtle\" flexShrink={0}>\n {resultLabel}\n </Text>\n ) : null}\n <IconButton aria-label=\"Close search\" variant=\"ghost\" size=\"2xs\" minW=\"1rem\" h=\"1rem\" onClick={close}>\n <Icon as={X} boxSize=\"0.6875rem\" color=\"fg.subtle\" />\n </IconButton>\n </HStack>\n );\n};\n","import { Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ListFilter, RotateCcw } from \"lucide-react\";\nimport { type ReactNode, type RefObject, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport { addAdvancedGroup, normalFilter, setAdvancedGroup } from \"./advanced-filter\";\nimport { AdvancedFilterPill } from \"./advanced-filter-pill\";\nimport { CollectionItemLabelContext } from \"./collection-item-label\";\nimport { findField } from \"./collection-view-fields\";\nimport { countFilterRules } from \"./collection-view-filter\";\nimport { FilterRulePill } from \"./collection-view-pills\";\nimport { setRuleAt } from \"./collection-view-rules\";\nimport { CollectionViewTabs } from \"./collection-view-tabs\";\nimport { type CollectionSavedView, type CollectionViewsSource, EMPTY_VIEW_FILTER } from \"./collection-view-types\";\nimport { FilterMenu } from \"./filter-menu\";\nimport type { RuleValueOption } from \"./filter-rule-value\";\nimport {\n type CollectionViewStoreInitialState,\n type CollectionViewStoreState,\n useCollectionViewStore,\n} from \"./use-collection-view-store\";\nimport { isCollectionViewDirty } from \"./use-collection-views\";\nimport { ViewBarPopover } from \"./view-bar-popover\";\nimport { ViewSearchField } from \"./view-search-field\";\n\nexport interface CollectionViewBarProps<TSettings> {\n storageKey: string;\n /** Singular resource label used as the subject of boolean predicates. */\n itemLabel?: string;\n initialState: CollectionViewStoreInitialState<TSettings>;\n views: (CollectionSavedView<TSettings> & { builtIn: boolean })[];\n viewsSource?: CollectionViewsSource<TSettings>;\n /** Every field of the view. Filter offers the filterable ones and Sort the sortable ones. */\n fields: AttributeDescriptor[];\n optionsFor: (field: AttributeDescriptor) => RuleValueOption[];\n /** Search is screen state owned by the renderer. It is never saved. */\n search: string;\n onSearchChange: (value: string) => void;\n searchResultLabel?: string;\n leading?: ReactNode;\n actions?: ReactNode;\n displayControl: ReactNode;\n align?: \"split\" | \"end\";\n}\n\ninterface CountButtonProps {\n label: string;\n icon: typeof ListFilter;\n count: number;\n buttonRef: RefObject<HTMLButtonElement | null>;\n onClick: () => void;\n}\n\n/** An icon button while the view has no rules, then a button that shows the rule count. */\nconst CountButton = (props: CountButtonProps) => {\n const { label, icon, count, buttonRef, onClick } = props;\n return (\n <Tooltip content={label}>\n <Button ref={buttonRef} aria-label={label} variant={count > 0 ? \"subtle\" : \"ghost\"} size=\"2xs\" onClick={onClick}>\n <Icon as={icon} />\n {count > 0 ? count : null}\n </Button>\n </Tooltip>\n );\n};\n\n/** One view bar for data tables and both kanban displays: saved views, then Search, Filter, and Display. */\nexport const CollectionViewBar = <TSettings,>(props: CollectionViewBarProps<TSettings>) => {\n const { storageKey, initialState, views, viewsSource, fields, optionsFor } = props;\n const { search, onSearchChange, searchResultLabel, leading, actions, displayControl, align = \"split\" } = props;\n const store: CollectionViewStoreState<TSettings> = useCollectionViewStore(storageKey, initialState, (state) => state);\n const { activeViewId, settings, sorts, openMenu, openRuleIndex } = store;\n const filter = normalFilter(store.filter);\n const { activateView, setFilter, setOpenMenu, setOpenRuleIndex, selectRule } = store;\n const activeView = views.find((view) => view.id === activeViewId);\n const state = { settings, filter, sorts };\n const dirty = isCollectionViewDirty(activeView, state);\n const filterFields = fields.filter((field) => field.filterable);\n const filterButtonRef = useRef<HTMLButtonElement>(null);\n const [error, setError] = useState<string>();\n const [busy, setBusy] = useState(false);\n\n const open = () => setOpenMenu(openMenu === \"filter\" ? null : \"filter\");\n const run = async (action: () => Promise<void>) => {\n setBusy(true);\n setError(undefined);\n try {\n await action();\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : String(failure));\n } finally {\n setBusy(false);\n }\n };\n const createView = async (input: Parameters<CollectionViewsSource<TSettings>[\"onCreateView\"]>[0]) => {\n if (viewsSource) activateView(await viewsSource.onCreateView(input));\n };\n const optionsForId = (id: string) => {\n const field = findField(filterFields, id);\n return field ? optionsFor(field) : [];\n };\n const showCriteria = dirty || filter.rules.length > 0 || Boolean(filter.groups?.length);\n const addAdvanced = () => {\n setOpenMenu(null);\n setFilter(addAdvancedGroup(filter));\n };\n\n return (\n <CollectionItemLabelContext.Provider value={props.itemLabel ?? \"Item\"}>\n <Stack\n data-testid=\"collection-view-bar\"\n gap=\"0\"\n flexShrink={0}\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <HStack height=\"view-bar\" minW=\"0\" gap=\"2xs\" paddingX=\"xs\">\n {leading}\n <CollectionViewTabs\n views={views}\n activeViewId={activeViewId}\n viewsSource={viewsSource}\n dirty={dirty}\n busy={busy}\n state={state}\n onActivate={activateView}\n run={run}\n createView={createView}\n />\n {align === \"split\" ? <Box flex=\"1\" /> : null}\n <ViewSearchField value={search} onValueChange={onSearchChange} resultLabel={searchResultLabel} />\n <CountButton\n label=\"Filter\"\n icon={ListFilter}\n count={countFilterRules(filter)}\n buttonRef={filterButtonRef}\n onClick={open}\n />\n {displayControl}\n {actions}\n </HStack>\n\n {showCriteria ? (\n <HStack\n data-testid=\"collection-view-criteria\"\n height=\"view-subheader\"\n minW=\"0\"\n gap=\"2xs\"\n paddingX=\"xs\"\n borderTopWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <HStack minW=\"0\" gap=\"2xs\" overflowX=\"auto\">\n {filter.rules.map((rule, index) => (\n <FilterRulePill\n key={`${index}:${rule.attributeId}`}\n fields={filterFields}\n rule={rule}\n options={optionsForId(rule.attributeId)}\n open={openRuleIndex === index}\n onOpenChange={(isOpen) => setOpenRuleIndex(isOpen ? index : null)}\n onChange={(next) => setFilter(setRuleAt(filter, index, next))}\n onRemove={() => {\n setOpenRuleIndex(null);\n setFilter(setRuleAt(filter, index, undefined));\n }}\n />\n ))}\n {filter.groups?.map((group, index) => (\n <AdvancedFilterPill\n key={index}\n fields={filterFields}\n group={group}\n optionsFor={optionsFor}\n onChange={(next) => setFilter(setAdvancedGroup(filter, index, next))}\n onRemove={() => setFilter(setAdvancedGroup(filter, index))}\n />\n ))}\n </HStack>\n <Box flex=\"1\" />\n {dirty ? (\n <>\n <Button size=\"2xs\" variant=\"outline\" onClick={() => activeView && activateView(activeView)}>\n <RotateCcw />\n Reset\n </Button>\n <Button\n size=\"2xs\"\n variant=\"primary\"\n disabled={!viewsSource || busy}\n onClick={() => viewsSource && activeView && run(() => viewsSource.onUpdateView(activeView.id, state))}\n >\n Save view\n </Button>\n </>\n ) : null}\n </HStack>\n ) : null}\n\n {error ? (\n <Text role=\"alert\" color=\"fg.error\" textStyle=\"label/S\" padding=\"xs\">\n {error}\n </Text>\n ) : null}\n\n <ViewBarPopover\n open={openMenu === \"filter\"}\n onOpenChange={(isOpen) => setOpenMenu(isOpen ? \"filter\" : null)}\n anchorRef={filterButtonRef}\n placement=\"bottom-end\"\n width=\"min(440px, calc(100vw - 32px))\"\n padding=\"0\"\n testId=\"filter-menu-popover\"\n >\n <FilterMenu\n fields={filterFields}\n filter={filter}\n optionsFor={optionsFor}\n onSelectRule={selectRule}\n onAddAdvanced={addAdvanced}\n onClear={() => {\n setOpenMenu(null);\n setOpenRuleIndex(null);\n setFilter(EMPTY_VIEW_FILTER);\n }}\n />\n </ViewBarPopover>\n </Stack>\n </CollectionItemLabelContext.Provider>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { CollectionViewBar } from \"../collection-view/collection-view-bar\";\nimport type { AttributeDescriptor } from \"../kanban-renderer/types\";\nimport type { DataTableViewsSource } from \"./types\";\nimport type { useDataTableView } from \"./use-data-table-view\";\n\ninterface DataTableHeaderProps {\n itemLabel?: string;\n view: ReturnType<typeof useDataTableView>;\n viewsSource?: DataTableViewsSource;\n displayControl: ReactNode;\n actions?: ReactNode;\n}\n\n// Table columns have no option lists, so every rule is built in the rule editor.\nconst noOptions = (_field: AttributeDescriptor) => [];\n\n/** The table uses the same view bar as boards: saved views, Search, Filter, and Display. */\nexport const DataTableHeader = (props: DataTableHeaderProps) => {\n const { view, viewsSource, displayControl, actions } = props;\n const searching = view.deferredSearch.trim() !== \"\";\n\n return (\n <CollectionViewBar\n itemLabel={props.itemLabel}\n storageKey={view.storageKey}\n initialState={view.initialState}\n views={view.views.views}\n viewsSource={viewsSource}\n fields={view.attributes}\n optionsFor={noOptions}\n search={view.search}\n onSearchChange={view.setSearch}\n searchResultLabel={searching ? `${view.shownRows.length} of ${view.filteredRows.length}` : undefined}\n displayControl={displayControl}\n actions={actions}\n />\n );\n};\n","import { Box, Icon, IconButton, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Settings2 } from \"lucide-react\";\nimport { Switch } from \"@/components/primitives/switch\";\n\ninterface DataTableRowDisplaySwitchProps {\n showDivider?: boolean;\n wrapRows: boolean;\n onWrapRowsChange: (wrapRows: boolean) => void;\n}\n\nexport const DataTableRowDisplaySwitch = (props: DataTableRowDisplaySwitchProps) => {\n const { showDivider = false, wrapRows, onWrapRowsChange } = props;\n\n return (\n <Box borderBottomWidth={showDivider ? \"1px\" : undefined} borderColor=\"border.subtle\" padding=\"xs\">\n <Switch\n checked={wrapRows}\n inputProps={{ role: \"switch\" }}\n width=\"full\"\n flexDirection=\"row-reverse\"\n justifyContent=\"space-between\"\n onCheckedChange={(details) => onWrapRowsChange(details.checked === true)}\n >\n <Text as=\"span\" textStyle=\"label/S/regular\">\n Wrap rows\n </Text>\n </Switch>\n </Box>\n );\n};\n\ninterface DataTableRowDisplayMenuProps extends DataTableRowDisplaySwitchProps {\n compact?: boolean;\n}\n\nexport const DataTableRowDisplayMenu = (props: DataTableRowDisplayMenuProps) => {\n const { compact = false, wrapRows, onWrapRowsChange } = props;\n const content = (\n <Popover.Positioner>\n <Popover.Content width=\"min(240px, calc(100vw - 32px))\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTableRowDisplaySwitch wrapRows={wrapRows} onWrapRowsChange={onWrapRowsChange} />\n </Popover.Content>\n </Popover.Positioner>\n );\n\n return (\n <Popover.Root positioning={{ placement: compact ? \"bottom-start\" : \"bottom-end\", offset: { mainAxis: 8 } }}>\n <Popover.Trigger asChild>\n <IconButton aria-label=\"Display settings\" variant=\"ghost\" size={compact ? \"2xs\" : \"sm\"}>\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n {compact ? content : <Portal>{content}</Portal>}\n </Popover.Root>\n );\n};\n","export { resolveDataTableComparableValue } from \"@pstdio/sdk/extensions\";\n\nimport type { DataTableDiffValue } from \"./types\";\n\nexport const isDataTableDiffValue = (value: unknown): value is DataTableDiffValue =>\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as DataTableDiffValue).additions === \"number\" &&\n typeof (value as DataTableDiffValue).deletions === \"number\";\n","export const normalizeSearchQuery = (query: string) => query.trim().toLocaleLowerCase();\n\n/** Every case-insensitive match of the query in the text, as [start, end) ranges. */\nexport const findSearchRanges = (text: string, query: string) => {\n const needle = normalizeSearchQuery(query);\n const ranges: Array<[number, number]> = [];\n if (!needle) return ranges;\n const haystack = text.toLocaleLowerCase();\n let index = haystack.indexOf(needle);\n while (index !== -1) {\n ranges.push([index, index + needle.length]);\n index = haystack.indexOf(needle, index + needle.length);\n }\n return ranges;\n};\n\n/** Search only looks at the text a view shows, which the caller collects per row. */\nexport const searchRows = <TRow>(rows: TRow[], query: string, textsOf: (row: TRow) => string[]) => {\n const needle = normalizeSearchQuery(query);\n if (!needle) return rows;\n return rows.filter((row) => textsOf(row).some((text) => text.toLocaleLowerCase().includes(needle)));\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { findSearchRanges } from \"./collection-view-search\";\n\nexport interface HighlightedTextProps {\n text: string;\n /** The view's search text. Every match in `text` is marked. */\n query: string;\n}\n\nexport const HighlightedText = (props: HighlightedTextProps) => {\n const { text, query } = props;\n const ranges = findSearchRanges(text, query);\n if (ranges.length === 0) return text;\n const parts: Array<{ text: string; match: boolean; start: number }> = [];\n let cursor = 0;\n for (const [start, end] of ranges) {\n if (start > cursor) parts.push({ text: text.slice(cursor, start), match: false, start: cursor });\n parts.push({ text: text.slice(start, end), match: true, start });\n cursor = end;\n }\n if (cursor < text.length) parts.push({ text: text.slice(cursor), match: false, start: cursor });\n\n return parts.map((part) =>\n part.match ? (\n <Box as=\"mark\" key={part.start} bg=\"bg.warning\" color=\"inherit\" borderRadius=\"2xs\">\n {part.text}\n </Box>\n ) : (\n part.text\n ),\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { HighlightedText } from \"../collection-view/highlighted-text\";\n\nconst relativeUnits = [\n { unit: \"year\", seconds: 365 * 24 * 60 * 60 },\n { unit: \"month\", seconds: 30 * 24 * 60 * 60 },\n { unit: \"day\", seconds: 24 * 60 * 60 },\n { unit: \"hour\", seconds: 60 * 60 },\n { unit: \"minute\", seconds: 60 },\n] as const;\n\nconst parseDate = (value: unknown) => {\n if (typeof value !== \"string\") return null;\n const time = Date.parse(value);\n return Number.isNaN(time) ? null : new Date(time);\n};\n\nexport const formatDataTableRelativeDate = (value: unknown, now = new Date(), locale?: string) => {\n const date = parseDate(value);\n if (!date) return null;\n const format = new Intl.RelativeTimeFormat(locale, { numeric: \"auto\" });\n const elapsedSeconds = (date.getTime() - now.getTime()) / 1000;\n const match = relativeUnits.find((candidate) => Math.abs(elapsedSeconds) >= candidate.seconds);\n if (!match) return format.format(0, \"second\");\n return format.format(Math.round(elapsedSeconds / match.seconds), match.unit);\n};\n\ninterface DataTableDateCellProps {\n value: string;\n search?: string;\n}\n\nexport const DataTableDateCell = (props: DataTableDateCellProps) => {\n const { value, search = \"\" } = props;\n const [now, setNow] = useState(() => new Date());\n useEffect(() => {\n const timer = setInterval(() => setNow(new Date()), 60_000);\n return () => clearInterval(timer);\n }, []);\n const relativeLabel = formatDataTableRelativeDate(value, now);\n const fullDate = new Date(value).toLocaleString(undefined, { dateStyle: \"medium\", timeStyle: \"short\" });\n\n return (\n <Tooltip content={fullDate} openDelay={300}>\n <Text as=\"span\" tabIndex={0} textStyle=\"paragraph/S/regular\" color=\"fg.muted\" whiteSpace=\"nowrap\">\n <HighlightedText text={relativeLabel ?? \"\"} query={search} />\n </Text>\n </Tooltip>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { ParamEditorFieldLabel } from \"./param-editor-field-label\";\n\ntype ControlItemOrientation = \"auto\" | \"inline\" | \"stacked\";\n\ninterface ParamEditorControlItemProps {\n name?: string;\n description?: string;\n hideLabel?: boolean;\n fullWidth?: boolean;\n /** `auto` renders inline when compact and stacked when full-width. */\n orientation?: ControlItemOrientation;\n /** Rendered on the label row, right-aligned (e.g. an editable value readout). */\n labelTrailing?: ReactNode;\n children: ReactNode;\n}\n\n// Shared row scaffold for control layouts: a labelled control that renders either\n// inline (label left / control right) or stacked (label above the control).\nexport const ParamEditorControlItem = (props: ParamEditorControlItemProps) => {\n const {\n name,\n description,\n hideLabel = false,\n fullWidth = false,\n orientation = \"auto\",\n labelTrailing,\n children,\n } = props;\n\n const label = hideLabel || !name ? null : <ParamEditorFieldLabel name={name} description={description} />;\n const autoOrientation = fullWidth ? \"stacked\" : \"inline\";\n const resolved = orientation === \"auto\" ? autoOrientation : orientation;\n\n if (resolved === \"stacked\") {\n const header = label || labelTrailing;\n return (\n <Box minW=\"0\">\n {header ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" mb=\"xs\" minW=\"0\">\n {label}\n {labelTrailing}\n </Flex>\n ) : null}\n {children}\n </Box>\n );\n }\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\" minW=\"0\">\n {label}\n <Flex alignItems=\"center\" gap=\"xs\" minW=\"0\">\n {labelTrailing}\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { Button, Flex, Icon, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, Square, SquareCheck } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ListRow } from \"../../list-row/list-row\";\nimport { filterSearchableMenuItems, SearchableMenu, type SearchableMenuItem } from \"../../overlays/searchable-menu\";\nimport { getIconComponent } from \"../../primitives\";\nimport type { SelectionGroup } from \"../param-editor.types\";\n\nexport interface SelectionMenuOption {\n id: string;\n name: string;\n icon?: string;\n /** Palette key (e.g. \"blue\") applied to the option's icon. */\n color?: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface SelectionMenuProps {\n triggerLabel: ReactNode;\n options: SelectionMenuOption[];\n selectedIds: string[];\n multiSelect: boolean;\n /** Selecting the active item can clear a value or repeat an action. */\n reselectable?: boolean;\n disabled?: boolean;\n searchable?: boolean;\n allowCustomValues?: boolean;\n searchPlaceholder?: string;\n emptyText?: string;\n group?: SelectionGroup;\n fullWidth?: boolean;\n triggerVariant?: \"button\" | \"icon\";\n triggerAriaLabel?: string;\n size?: \"xs\" | \"sm\";\n onToggle: (optionId: string) => void;\n onGroupChange?: (optionId: string) => void;\n}\n\nexport const selectionIndicator = (multiSelect: boolean, selected: boolean) => {\n if (multiSelect)\n return <Icon as={selected ? SquareCheck : Square} boxSize=\"14px\" color={selected ? \"fg\" : \"fg.muted\"} />;\n return selected ? <Icon as={Check} boxSize=\"14px\" color=\"fg\" /> : null;\n};\n\nconst selectionIconComponent = (option: SelectionMenuOption | undefined) =>\n option?.icon ? getIconComponent(option.icon) : undefined;\n\nexport const selectionOptionIcon = (option: SelectionMenuOption | undefined, boxSize: string) => {\n if (!option?.icon) return null;\n return (\n <Icon\n as={getIconComponent(option.icon)}\n boxSize={boxSize}\n color={option.color ? `${option.color}.500` : \"fg.muted\"}\n />\n );\n};\n\n/**\n * The single dropdown behind every option picker in the editor — selection\n * params and editable resource params alike. Sharing it is what keeps a\n * resource attribute and a command param from drifting into two looks.\n *\n * Clearable single-selects clear by re-picking the selected option.\n */\nexport const SelectionMenu = (props: SelectionMenuProps) => {\n const {\n triggerLabel,\n options,\n selectedIds,\n multiSelect,\n reselectable = false,\n disabled,\n searchable = false,\n allowCustomValues = false,\n searchPlaceholder = \"Search options…\",\n emptyText = \"No options found\",\n group,\n fullWidth,\n triggerVariant = \"button\",\n triggerAriaLabel,\n size = \"sm\",\n onToggle,\n onGroupChange,\n } = props;\n const canChangeGroup = Boolean(\n onGroupChange &&\n group &&\n !group.disabled &&\n group.options.some((option) => !option.disabled && option.id !== group.defaultValue),\n );\n const canChangeValue = options.some(\n (option) => !option.disabled && (multiSelect || reselectable || !selectedIds.includes(option.id)),\n );\n const isDisabled = disabled || (!allowCustomValues && !canChangeValue && !canChangeGroup);\n const trigger =\n triggerVariant === \"icon\" ? (\n <IconButton aria-label={triggerAriaLabel ?? \"Open options\"} size=\"2xs\" variant=\"ghost\" disabled={isDisabled}>\n {triggerLabel}\n </IconButton>\n ) : (\n <Button\n size={size}\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={isDisabled}\n textStyle={size === \"xs\" ? \"label/XS\" : \"label/S/regular\"}\n width={fullWidth ? \"100%\" : undefined}\n minW=\"0\"\n flexShrink={1}\n _hover={{ bg: \"bg.hover\", borderColor: \"border.accent-light\" }}\n _active={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _expanded={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" minW=\"0\" w={fullWidth ? \"full\" : undefined}>\n <Flex alignItems=\"center\" gap=\"xs\" minW=\"0\">\n {triggerLabel}\n </Flex>\n <ChevronDown size={14} />\n </Flex>\n </Button>\n );\n\n if (searchable || allowCustomValues || group) {\n const items: SearchableMenuItem[] = options.map((option) => ({\n id: option.id,\n label: option.name,\n searchText: [option.id, option.description].filter(Boolean).join(\" \"),\n secondaryLabel: option.description,\n icon: selectionIconComponent(option),\n isDisabled: option.disabled,\n isSelected: selectedIds.includes(option.id),\n onSelect: () => onToggle(option.id),\n }));\n const selectedGroup = group?.options.find((option) => option.id === group.defaultValue);\n\n return (\n <SearchableMenu\n trigger={trigger}\n items={items}\n listId={group?.defaultValue}\n showSearch={searchable || allowCustomValues}\n filterItems={(items, query) => {\n const filtered = filterSearchableMenuItems(items, query);\n const value = query.trim();\n if (!allowCustomValues || !value || options.some((option) => option.id === value)) return filtered;\n return [...filtered, { id: value, label: `Use \"${value}\"`, onSelect: () => onToggle(value) }];\n }}\n searchPlaceholder={searchPlaceholder}\n closeOnSelect={!multiSelect}\n emptyState={\n <Menu.Item value=\"empty\" disabled asChild>\n <ListRow asChild variant=\"full-width\" id=\"empty\" label={emptyText} disabled />\n </Menu.Item>\n }\n parentList={\n group\n ? {\n items: group.options.map((option) => ({\n id: option.id,\n label: option.name,\n searchText: [option.id, option.description].filter(Boolean).join(\" \"),\n secondaryLabel: option.description,\n icon: selectionIconComponent(option),\n isDisabled: option.disabled,\n isSelected: option.id === group.defaultValue,\n })),\n selectedLabel: selectedGroup?.name ?? group.placeholder ?? `Select ${group.name.toLowerCase()}`,\n selectedIcon: selectionIconComponent(selectedGroup),\n ariaLabel: group.name,\n disabled: !canChangeGroup,\n showSearch: group.searchable,\n searchPlaceholder: group.searchPlaceholder ?? `Search ${group.name.toLowerCase()}…`,\n emptyState: (\n <Menu.Item value=\"group-empty\" disabled asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id=\"group-empty\"\n label={group.emptyText ?? `No ${group.name.toLowerCase()} found`}\n disabled\n />\n </Menu.Item>\n ),\n onSelect: (item) => onGroupChange?.(item.id),\n }\n : undefined\n }\n />\n );\n }\n\n return (\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n {/* Portaled like every other menu: rendered inline it is clipped by the\n panel's overflow and can extend past the viewport. */}\n <Portal>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((option) => {\n const selected = selectedIds.includes(option.id);\n return (\n <Menu.Item key={option.id} value={option.id} disabled={option.disabled} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n role={multiSelect ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-checked={selected}\n id={option.id}\n label={option.name}\n icon={selectionOptionIcon(option, \"16px\")}\n tooltip={option.description}\n disabled={option.disabled}\n isSelected={selected}\n endContent={selectionIndicator(multiSelect, selected)}\n onActivate={() => onToggle(option.id)}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Button, Flex } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { ActionOption } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { SelectionMenu } from \"./selection-menu\";\n\ninterface ActionInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue?: string;\n options: ActionOption[];\n onChange: (id: string, value: string) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n}\n\nexport const ActionInput = (props: ActionInputProps) => {\n const { id, name, description, defaultValue, options, onChange, readOnly, presentation = \"stacked\" } = props;\n const [active, setActive] = useState(defaultValue);\n\n useEffect(() => {\n setActive(defaultValue);\n }, [defaultValue]);\n\n const run = (optionId: string) => {\n setActive(optionId);\n onChange(id, optionId);\n };\n const horizontal = presentation === \"horizontal\";\n const selectedName = options.find((option) => option.id === active)?.name ?? name;\n\n if (horizontal) {\n return (\n <SelectionMenu\n triggerLabel={selectedName}\n options={options}\n selectedIds={active ? [active] : []}\n multiSelect={false}\n reselectable\n disabled={readOnly}\n onToggle={run}\n />\n );\n }\n\n const row = (\n <Flex gap=\"xs\" wrap=\"wrap\">\n {options.map((option) => (\n <Button\n key={option.id}\n size=\"xs\"\n variant={active === option.id ? \"subtle\" : \"outline\"}\n disabled={option.disabled || readOnly}\n _hover={{ bg: \"bg.hover\", borderColor: \"border.accent-light\" }}\n _active={{ bg: \"bg.active\", borderColor: \"border.accent-light\" }}\n _focusVisible={{ borderColor: \"border.accent-light\", outline: \"none\", boxShadow: \"none\" }}\n onClick={() => run(option.id)}\n >\n {option.name}\n </Button>\n ))}\n </Flex>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n {row}\n </ParamEditorControlItem>\n );\n};\n","import type { AnchorGridValue } from \"../param-editor.types\";\n\n/** The nine anchors in row-major order (top-left → bottom-right). */\nexport const ANCHOR_GRID_VALUES: AnchorGridValue[] = [\n \"top-left\",\n \"top\",\n \"top-right\",\n \"left\",\n \"center\",\n \"right\",\n \"bottom-left\",\n \"bottom\",\n \"bottom-right\",\n];\n\nexport const isAnchorGridValue = (value: unknown): value is AnchorGridValue =>\n typeof value === \"string\" && (ANCHOR_GRID_VALUES as string[]).includes(value);\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface ParamEditorReadOnlyValueProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n preserveWhitespace?: boolean;\n}\n\nexport const ParamEditorReadOnlyValue = (props: ParamEditorReadOnlyValueProps) => {\n const { children, preserveWhitespace = false, ...boxProps } = props;\n\n return (\n <Box minW=\"0\" textStyle=\"label/S/regular\" whiteSpace={preserveWhitespace ? \"pre-wrap\" : undefined} {...boxProps}>\n {children}\n </Box>\n );\n};\n","import { Box, Grid, IconButton } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { AnchorGridValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { ANCHOR_GRID_VALUES } from \"./anchor-grid\";\n\ninterface AnchorGridInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: AnchorGridValue;\n onChange: (id: string, value: AnchorGridValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nexport const AnchorGridInput = (props: AnchorGridInputProps) => {\n const { id, name, description, defaultValue, onChange, readOnly, fullWidth } = props;\n const [value, setValue] = useState<AnchorGridValue>(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const select = (next: AnchorGridValue) => {\n setValue(next);\n onChange(id, next);\n };\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description} fullWidth={fullWidth}>\n <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n const grid = (\n <Grid\n templateColumns=\"repeat(3, 1.5rem)\"\n gap=\"1px\"\n width=\"fit-content\"\n bg=\"border.subtle\"\n p=\"1px\"\n borderRadius=\"sm\"\n overflow=\"hidden\"\n >\n {ANCHOR_GRID_VALUES.map((anchor) => {\n const selected = anchor === value;\n return (\n <IconButton\n key={anchor}\n aria-label={anchor}\n aria-pressed={selected}\n size=\"2xs\"\n variant=\"ghost\"\n bg={selected ? \"fg\" : \"bg\"}\n _hover={{ bg: selected ? \"fg\" : \"bg.muted\" }}\n borderRadius=\"0\"\n onClick={() => select(anchor)}\n >\n <Box boxSize=\"0.375rem\" borderRadius=\"full\" bg={selected ? \"bg\" : \"fg.muted\"} />\n </IconButton>\n );\n })}\n </Grid>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation={fullWidth ? \"stacked\" : \"inline\"}>\n {grid}\n </ParamEditorControlItem>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { Switch } from \"@/components/primitives/switch\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface BooleanInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: boolean;\n onChange: (id: string, value: boolean) => void;\n readOnly?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n size?: \"xs\" | \"sm\";\n}\n\nexport const BooleanInput = (props: BooleanInputProps) => {\n const { id, name, description, defaultValue, onChange, readOnly, hideLabel, fullWidth, size = \"sm\" } = props;\n const [value, setValue] = useState(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n if (readOnly) {\n return (\n <ParamEditorControlItem\n name={name}\n description={description}\n hideLabel={hideLabel}\n fullWidth={fullWidth}\n orientation=\"inline\"\n >\n <ParamEditorReadOnlyValue>{String(value)}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n return (\n <ParamEditorControlItem\n name={name}\n description={description}\n hideLabel={hideLabel}\n fullWidth={fullWidth}\n orientation=\"inline\"\n >\n <Switch\n size={size}\n checked={value}\n inputProps={{ \"aria-label\": name }}\n onCheckedChange={(details) => {\n setValue(details.checked);\n onChange(id, details.checked);\n }}\n />\n </ParamEditorControlItem>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { type FocusEvent as ReactFocusEvent, useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface ColorInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n size?: \"xs\" | \"sm\";\n}\n\nexport const ColorInput = (props: ColorInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n size = \"sm\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextColor: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextColor), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n useEffect(() => {\n if (!open) return;\n\n const isInsidePicker = (target: EventTarget | null) => {\n const node = target as Node;\n return rootRef.current?.contains(node) || contentRef.current?.contains(node);\n };\n\n const handleOutsideInteraction = (event: FocusEvent | PointerEvent) => {\n if (isInsidePicker(event.target)) return;\n\n setOpen(false);\n };\n\n document.addEventListener(\"focusin\", handleOutsideInteraction, true);\n document.addEventListener(\"pointerdown\", handleOutsideInteraction, true);\n document.addEventListener(\"click\", handleOutsideInteraction, true);\n\n return () => {\n document.removeEventListener(\"focusin\", handleOutsideInteraction, true);\n document.removeEventListener(\"pointerdown\", handleOutsideInteraction, true);\n document.removeEventListener(\"click\", handleOutsideInteraction, true);\n };\n }, [open]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n const handleBlur = (event: ReactFocusEvent<HTMLDivElement>) => {\n const root = event.currentTarget;\n\n setTimeout(() => {\n if (!root.contains(root.ownerDocument.activeElement)) setOpen(false);\n });\n };\n\n if (readOnly) {\n const valueElement = (\n <ParamEditorReadOnlyValue>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Box boxSize=\"0.75rem\" borderRadius=\"xs\" bg={value} />\n <Box as=\"span\">{value}</Box>\n </Flex>\n </ParamEditorReadOnlyValue>\n );\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n const rootProps = {\n value: parseColor(value),\n open,\n onOpenChange: (details: { open: boolean }) => setOpen(details.open),\n onFocusOutside: () => setOpen(false),\n onInteractOutside: () => setOpen(false),\n onBlur: handleBlur,\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root ref={rootRef} {...rootProps} size={size} width={fullWidth ? \"100%\" : \"8.75rem\"} maxW=\"100%\">\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} onFocus={() => setOpen(false)} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content ref={contentRef} onBlur={handleBlur}>\n <ColorPicker.Area />\n <ColorPicker.Sliders />\n <ColorPicker.SwatchGroup>\n <ColorPicker.SwatchTrigger value={value}>\n <ColorPicker.Swatch value={value} />\n </ColorPicker.SwatchTrigger>\n </ColorPicker.SwatchGroup>\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </ColorPicker.Root>\n );\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {picker}\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {picker}\n </Flex>\n )}\n </Box>\n );\n};\n","const calendarDatePattern = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/**\n * Formats a read-only date in the viewer's locale and time zone. A calendar date\n * (`YYYY-MM-DD`) has no time zone, so it is read as a local date and never shifts a day.\n */\nexport const formatReadOnlyDate = (value: string) => {\n const calendarDate = calendarDatePattern.exec(value);\n if (calendarDate) {\n const [, year, month, day] = calendarDate;\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" }).format(\n new Date(Number(year), Number(month) - 1, Number(day)),\n );\n }\n\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"short\" }).format(date);\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { formatReadOnlyDate } from \"./date-value\";\n\ninterface DateInputProps {\n id: string;\n defaultValue: string;\n name: string;\n min?: string;\n max?: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n size?: \"xs\" | \"sm\";\n}\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n id,\n defaultValue,\n name,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n size = \"sm\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{formatReadOnlyDate(value)}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size={size}\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"8.75rem\"\n size={size}\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n )}\n </Box>\n );\n};\n","import type { FileUploadValue } from \"../param-editor.types\";\n\nexport type FileUploadSummaryState = \"empty\" | \"queued\" | \"uploading\" | \"complete\" | \"error\";\n\nconst valueId = (file: File, index: number) =>\n `${file.name}-${file.size.toString()}-${file.lastModified.toString()}-${index.toString()}`;\n\nexport const createFileUploadValues = (\n files: File[],\n existing: FileUploadValue[],\n multiple: boolean,\n): FileUploadValue[] => {\n const offset = multiple ? existing.length : 0;\n const selected = files.map((file, index) => ({\n id: valueId(file, offset + index),\n file,\n status: \"queued\" as const,\n }));\n\n return multiple ? [...existing, ...selected] : selected.slice(0, 1);\n};\n\nexport const getFileUploadSummary = (values: FileUploadValue[]) => {\n const states: FileUploadSummaryState[] = [\"uploading\", \"error\", \"queued\", \"complete\"];\n const state = states.find((candidate) => values.some((value) => value.status === candidate)) ?? \"empty\";\n const count = state === \"empty\" ? 0 : values.filter((value) => value.status === state).length;\n\n return { state, count };\n};\n","import { Button, Flex, Icon, Spinner, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport { CircleAlert, CircleCheck, Clock3, Paperclip } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { AttachmentChip } from \"@/components/overlays/attachment-chip\";\nimport type { FileUploadValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { createFileUploadValues, getFileUploadSummary } from \"./file-upload-value\";\n\ninterface FileUploadInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: FileUploadValue[];\n accept?: string;\n multiple?: boolean;\n uploadLabel?: string;\n onChange: (id: string, value: FileUploadValue[]) => void;\n readOnly?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n}\n\nconst statusIcons = { queued: Clock3, complete: CircleCheck, error: CircleAlert };\n\nconst UploadStatus = (props: { values: FileUploadValue[] }) => {\n const { values } = props;\n const summary = getFileUploadSummary(values);\n if (summary.state === \"empty\") return null;\n\n const noun = summary.count === 1 ? \"file\" : \"files\";\n const labels = {\n queued: `${summary.count.toString()} ${noun} queued`,\n uploading: `Uploading ${summary.count.toString()} ${noun}`,\n complete: `${summary.count.toString()} ${noun} uploaded`,\n error: `${summary.count.toString()} ${noun} failed`,\n empty: \"\",\n };\n const icon =\n summary.state === \"uploading\" ? (\n <Spinner boxSize=\"12px\" borderWidth=\"1px\" />\n ) : (\n <Icon as={statusIcons[summary.state]} boxSize=\"12px\" />\n );\n\n return (\n <Flex alignItems=\"center\" gap=\"2xs\" color={summary.state === \"error\" ? \"fg.error\" : \"fg.muted\"}>\n {icon}\n <Text textStyle=\"label/XS/medium\">{labels[summary.state]}</Text>\n </Flex>\n );\n};\n\nconst UploadQueue = (props: { readOnly?: boolean; values: FileUploadValue[]; onRemove: (valueId: string) => void }) => {\n const { readOnly, values, onRemove } = props;\n if (values.length === 0) return null;\n\n return (\n <Stack gap=\"2xs\" minW=\"0\">\n <UploadStatus values={values} />\n <Wrap gap=\"2xs\">\n {values.map((value) => (\n <AttachmentChip\n key={value.id}\n file={value.file}\n disabled={readOnly}\n removeLabel={`Remove ${value.file.name}`}\n onRemove={() => onRemove(value.id)}\n />\n ))}\n </Wrap>\n </Stack>\n );\n};\n\nexport const FileUploadInput = (props: FileUploadInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n accept,\n multiple = true,\n uploadLabel = \"Attach files\",\n onChange,\n readOnly,\n presentation = \"stacked\",\n } = props;\n const [values, setValues] = useState(defaultValue);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setValues(defaultValue);\n }, [defaultValue]);\n\n const commit = (next: FileUploadValue[]) => {\n setValues(next);\n onChange(id, next);\n };\n const remove = (valueId: string) => commit(values.filter((value) => value.id !== valueId));\n const button = readOnly ? null : (\n <Button size=\"xs\" variant=\"ghost\" flexShrink={0} onClick={() => inputRef.current?.click()}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n {uploadLabel}\n </Button>\n );\n const input = (\n <input\n ref={inputRef}\n hidden\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={(event) => {\n commit(createFileUploadValues(Array.from(event.currentTarget.files ?? []), values, multiple));\n event.currentTarget.value = \"\";\n }}\n />\n );\n\n if (presentation === \"horizontal\") {\n return (\n <Flex alignItems=\"center\" gap=\"sm\" minW=\"0\" width=\"full\">\n {input}\n {button}\n <UploadQueue readOnly={readOnly} values={values} onRemove={remove} />\n </Flex>\n );\n }\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n <Stack alignItems=\"start\" gap=\"xs\" minW=\"0\">\n {input}\n {button}\n <UploadQueue readOnly={readOnly} values={values} onRemove={remove} />\n </Stack>\n </ParamEditorControlItem>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface HorizontalTextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n size?: \"xs\" | \"sm\";\n}\n\nexport const HorizontalTextInput = (props: HorizontalTextInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false, size = \"sm\" } = props;\n const [value, setValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n const handleClick = () => {\n if (!readOnly) {\n setIsExpanded(true);\n }\n };\n\n const handleBlur = () => {\n // Only collapse if the value is empty\n if (value.trim().length === 0) {\n setIsExpanded(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n // Allow users to collapse with Escape key\n if (e.key === \"Escape\") {\n setIsExpanded(false);\n e.preventDefault();\n }\n };\n\n if (readOnly) {\n return (\n <Box position=\"relative\" flex=\"1\" minW=\"12.5rem\">\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <ParamEditorReadOnlyValue preserveWhitespace>{value}</ParamEditorReadOnlyValue>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box position=\"relative\" flex=\"1\" minW=\"12.5rem\">\n <Box position=\"relative\" minHeight=\"2rem\">\n {!isExpanded ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" height=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n aria-label={name}\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size={size}\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onClick={handleClick}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n zIndex=\"10\"\n bg=\"bg\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n borderRadius=\"lg\"\n p=\"2\"\n transition=\"border-color 0.2s ease-in-out\"\n boxShadow=\"none\"\n _hover={{ borderColor: \"border.accent-light\" }}\n _active={{ borderColor: \"border.accent-light\" }}\n _focusWithin={{ borderColor: \"border.accent-light\", boxShadow: \"none\" }}\n >\n {!hideLabel && (\n <Box mb=\"sm\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Textarea\n aria-label={name}\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size={size}\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n rows={3}\n resize=\"vertical\"\n autoFocus\n />\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n","import { Box, Flex, Input, Stack } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { LazyMarkdownEditor } from \"@/components/rich-text\";\nimport { ParamEditorFieldLabel } from \"../param-editor-field-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface MarkdownInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: string;\n placeholder?: string;\n onChange: (id: string, value: string) => void;\n readOnly?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n size?: \"xs\" | \"sm\";\n}\n\nexport const MarkdownInput = (props: MarkdownInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n placeholder,\n onChange,\n readOnly,\n presentation = \"stacked\",\n size = \"sm\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [isExpanded, setIsExpanded] = useState(false);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const commit = (next: string) => {\n setValue(next);\n onChange(id, next);\n };\n\n const editor = (editorValue: string) => (\n <Box borderWidth=\"1px\" borderColor=\"border\" borderRadius=\"xs\" minH=\"7rem\" minW=\"0\" overflow=\"visible\" width=\"full\">\n <LazyMarkdownEditor\n defaultState={editorValue}\n isEditable={!readOnly}\n placeholder={placeholder}\n scrollable={false}\n onChange={commit}\n />\n </Box>\n );\n const label = <ParamEditorFieldLabel name={name} description={description} />;\n\n if (presentation === \"horizontal\") {\n if (readOnly) {\n return (\n <Box position=\"relative\" flex=\"1\" minW=\"12.5rem\">\n <Flex alignItems=\"center\" minHeight=\"2rem\">\n <ParamEditorReadOnlyValue preserveWhitespace>{value}</ParamEditorReadOnlyValue>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box position=\"relative\" flex=\"1\" minW=\"12.5rem\">\n <Box position=\"relative\" minHeight=\"2rem\">\n {!isExpanded ? (\n <Input\n className=\"nodrag\"\n flex=\"1\"\n maxW=\"12.5rem\"\n size={size}\n type=\"text\"\n placeholder={name}\n value={value}\n onClick={() => {\n setIsExpanded(true);\n }}\n onChange={(event) => commit(event.target.value)}\n />\n ) : (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n zIndex=\"10\"\n bg=\"bg\"\n borderWidth=\"1px\"\n borderColor=\"border\"\n borderRadius=\"lg\"\n p=\"2\"\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{ borderColor: \"border.accent-light\" }}\n _focusWithin={{ borderColor: \"border.accent-light\" }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n setIsExpanded(false);\n event.preventDefault();\n }\n }}\n >\n {editor(value)}\n </Box>\n )}\n </Box>\n </Box>\n );\n }\n\n return (\n <Stack gap=\"xs\" minW=\"0\" width=\"full\">\n {label}\n {editor(value)}\n </Stack>\n );\n};\n","import { Box, Flex, type NumberInputValueChangeDetails, type SliderValueChangeDetails } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"@/components/primitives/number-input\";\nimport { Slider } from \"@/components/primitives/slider\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface NumberInputProps {\n id: string;\n defaultValue: number;\n name: string;\n step?: number;\n min?: number;\n max?: number;\n onChange: (id: string, value: number) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n hideSlider?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n size?: \"xs\" | \"sm\";\n}\n\nexport const NumberInput = (props: NumberInputProps) => {\n const {\n id,\n defaultValue,\n name,\n step = 1,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n hideSlider = false,\n fullWidth = false,\n size = \"sm\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n const isRange = min !== undefined && max !== undefined;\n const showSlider = isRange && !hideSlider;\n const useFullWidthLayout = fullWidth && !showSlider;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pendingRef = useRef<number | null>(null);\n\n const scheduleChange = (nextValue: number) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n pendingRef.current = nextValue;\n timeoutRef.current = setTimeout(() => {\n pendingRef.current = null;\n onChange(id, nextValue);\n }, 540);\n };\n const flushChange = () => {\n if (pendingRef.current === null) return;\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n const nextValue = pendingRef.current;\n pendingRef.current = null;\n onChange(id, nextValue);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {useFullWidthLayout ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <NumberInputRoot\n disabled={readOnly}\n width=\"100%\"\n size={size}\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onBlur={flushChange}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <NumberInputRoot\n disabled={readOnly}\n width=\"5rem\"\n size={size}\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onBlur={flushChange}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Flex>\n )}\n {showSlider && (\n <Slider\n disabled={readOnly}\n value={[value]}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: SliderValueChangeDetails) => {\n setValue(details.value[0]);\n }}\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n onChange(id, details.value[0]);\n }}\n />\n )}\n </Box>\n );\n};\n","/** Clamp `value` into the inclusive range, tolerating an inverted min/max. */\nexport const clampToRange = (value: number, min: number, max: number) => {\n const lower = Math.min(min, max);\n const upper = Math.max(min, max);\n if (value < lower) return lower;\n if (value > upper) return upper;\n return value;\n};\n\n/** Snap `value` to the nearest multiple of `step` measured from `origin`. */\nexport const snapToStep = (value: number, step: number, origin = 0) => {\n if (!(step > 0)) return value;\n const steps = Math.round((value - origin) / step);\n return origin + steps * step;\n};\n\n/** Format a number with an optional unit suffix, trimming float noise. */\nexport const formatUnitValue = (value: number, unit?: string) => {\n const rounded = Number.isInteger(value) ? `${value}` : `${Number(value.toFixed(3))}`;\n return unit ? `${rounded}${unit}` : rounded;\n};\n","import type { RangeValue } from \"../param-editor.types\";\nimport { clampToRange, snapToStep } from \"./numeric-value\";\n\n/** Order both handles and clamp (and optionally snap) them into `[min, max]`. */\nexport const normalizeRange = (value: RangeValue, min: number, max: number, step?: number): RangeValue => {\n const first = clampToRange(value[0], min, max);\n const second = clampToRange(value[1], min, max);\n let start = Math.min(first, second);\n let end = Math.max(first, second);\n if (step && step > 0) {\n start = clampToRange(snapToStep(start, step, min), min, max);\n end = clampToRange(snapToStep(end, step, min), min, max);\n }\n return [start, end];\n};\n\n/** Replace a single handle, keeping the pair ordered. */\nexport const updateRangeHandle = (\n value: RangeValue,\n index: 0 | 1,\n next: number,\n min: number,\n max: number,\n step?: number,\n): RangeValue => {\n const draft: RangeValue = index === 0 ? [next, value[1]] : [value[0], next];\n return normalizeRange(draft, min, max, step);\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\n\ninterface SliderMarksProps {\n count?: number;\n}\n\n// Evenly-spaced tick marks rendered under a slider track. Purely decorative.\nexport const SliderMarks = (props: SliderMarksProps) => {\n const { count } = props;\n if (!count || count < 2) return null;\n const positions = Array.from({ length: count }, (_, index) => index / (count - 1));\n\n return (\n <Flex justifyContent=\"space-between\" mt=\"2xs\" aria-hidden=\"true\">\n {positions.map((position) => (\n <Box key={position} width=\"1px\" height=\"0.375rem\" bg=\"border.subtle\" />\n ))}\n </Flex>\n );\n};\n","import { Box, Button, Flex, Icon, Popover, type SliderValueChangeDetails, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { Slider } from \"@/components/primitives/slider\";\nimport type { RangeValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { formatUnitValue } from \"./numeric-value\";\nimport { normalizeRange } from \"./range-value\";\nimport { SliderMarks } from \"./slider-marks\";\n\ninterface RangeInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: RangeValue;\n min: number;\n max: number;\n step?: number;\n unit?: string;\n markerCount?: number;\n onChange: (id: string, value: RangeValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n}\n\nexport const RangeInput = (props: RangeInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n min,\n max,\n step = 1,\n unit,\n markerCount,\n onChange,\n readOnly,\n fullWidth,\n presentation = \"stacked\",\n } = props;\n\n const [value, setValue] = useState<RangeValue>(() => normalizeRange(defaultValue, min, max, step));\n\n useEffect(() => {\n setValue(normalizeRange(defaultValue, min, max, step));\n }, [defaultValue, min, max, step]);\n\n const label = `${formatUnitValue(value[0], unit)} – ${formatUnitValue(value[1], unit)}`;\n const horizontal = presentation === \"horizontal\";\n\n if (readOnly) {\n if (horizontal) {\n return <ParamEditorReadOnlyValue>{label}</ParamEditorReadOnlyValue>;\n }\n\n return (\n <ParamEditorControlItem name={name} description={description} fullWidth={fullWidth}>\n <ParamEditorReadOnlyValue>{label}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n const trailing = (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" whiteSpace=\"nowrap\">\n {label}\n </Text>\n );\n const slider = (\n <Box>\n <Slider\n size=\"sm\"\n value={value}\n min={min}\n max={max}\n step={step}\n onValueChange={(details: SliderValueChangeDetails) =>\n setValue(normalizeRange(details.value as RangeValue, min, max, step))\n }\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n const next = normalizeRange(details.value as RangeValue, min, max, step);\n setValue(next);\n onChange(id, next);\n }}\n />\n <SliderMarks count={markerCount} />\n </Box>\n );\n\n if (horizontal) {\n return (\n <Popover.Root positioning={{ placement: \"bottom-start\", offset: { mainAxis: 4 } }}>\n <Popover.Trigger asChild>\n <Button size=\"xs\" variant=\"ghost\" aria-label={`${name}: ${label}`}>\n {label}\n <Icon as={ChevronDown} boxSize=\"14px\" />\n </Button>\n </Popover.Trigger>\n <Popover.Positioner>\n <Popover.Content width=\"60\" padding=\"sm\" background=\"bg\">\n <Stack gap=\"xs\">\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\">\n <Text textStyle=\"label/S/medium\">{name}</Text>\n {trailing}\n </Flex>\n {slider}\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Popover.Root>\n );\n }\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\" labelTrailing={trailing}>\n {slider}\n </ParamEditorControlItem>\n );\n};\n","import { Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { Chip } from \"../../primitives/chip\";\nimport { getIconComponent } from \"../../primitives/icon-options\";\nimport { ResourceBadge } from \"../../primitives/resource-badge\";\nimport type { ResourceOption, ResourceRefValue } from \"../param-editor.types\";\n\nconst optionIcon = (option: ResourceOption) => (\n <Icon as={getIconComponent(option.icon)} boxSize=\"14px\" color={option.color ? `${option.color}.500` : \"fg.muted\"} />\n);\n\nconst openExternal = (href: string) => window.open(href, \"_blank\", \"noreferrer\");\n\nconst copyToClipboard = (text: string) => void navigator.clipboard?.writeText(text).catch(() => undefined);\n\ninterface ResourceChipProps {\n option: ResourceOption;\n onOpenResource?: (ref: ResourceRefValue) => void;\n onRemove?: () => void;\n}\n\n// A chip opens its external href in a new tab, opens its internal ref via the host, or\n// copies its text to the clipboard — whichever the option declares.\nexport const ResourceChip = (props: ResourceChipProps) => {\n const { option, onOpenResource, onRemove } = props;\n const isReference = Boolean(option.href || option.ref || option.copyText);\n\n if (!isReference) {\n return <Chip>{option.name}</Chip>;\n }\n\n let handleSelect: (() => void) | undefined;\n if (option.href && option.href.length > 0) handleSelect = () => openExternal(option.href!);\n else if (option.ref && onOpenResource) handleSelect = () => onOpenResource(option.ref!);\n else if (option.copyText) handleSelect = () => copyToClipboard(option.copyText!);\n\n return (\n <ResourceBadge\n fileName={option.name}\n icon={optionIcon(option)}\n size=\"md\"\n onSelect={handleSelect ? () => handleSelect() : undefined}\n onRemove={onRemove ? () => onRemove() : undefined}\n />\n );\n};\n\ninterface ResourceChipListProps {\n options: ResourceOption[];\n onOpenResource?: (ref: ResourceRefValue) => void;\n onRemove?: (optionId: string) => void;\n emptyText?: string;\n}\n\nexport const ResourceChipList = (props: ResourceChipListProps) => {\n const { options, onOpenResource, onRemove, emptyText } = props;\n\n if (options.length === 0) {\n return (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {emptyText ?? \"None\"}\n </Text>\n );\n }\n\n return (\n <Wrap gap=\"2xs\">\n {options.map((option) => (\n <ResourceChip\n key={option.id}\n option={option}\n onOpenResource={onOpenResource}\n onRemove={onRemove ? () => onRemove(option.id) : undefined}\n />\n ))}\n </Wrap>\n );\n};\n","import { Box, Flex, Icon, Stack } from \"@chakra-ui/react\";\nimport { Plus } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ResourceOption, ResourceRefValue } from \"../param-editor.types\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ResourceChipList } from \"./resource-input-chips\";\nimport { SelectionMenu, selectionOptionIcon } from \"./selection-menu\";\n\ninterface ResourceInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: string | string[];\n options: ResourceOption[];\n onChange: (id: string, value: string | string[]) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n editable?: boolean;\n multiSelect?: boolean;\n placeholder?: string;\n emptyText?: string;\n fullWidth?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n size?: \"xs\" | \"sm\";\n}\n\nconst toIds = (value: string | string[]) => {\n if (Array.isArray(value)) return value;\n return value ? [value] : [];\n};\n\nconst resolveOptions = (ids: string[], options: ResourceOption[]) =>\n ids\n .map((id) => options.find((option) => option.id === id))\n .filter((option): option is ResourceOption => Boolean(option));\n\ninterface FieldShellProps {\n fullWidth: boolean;\n label: ReactNode;\n control: ReactNode;\n presentation: \"stacked\" | \"horizontal\";\n}\n\nconst FieldShell = (props: FieldShellProps) => {\n const { fullWidth, label, control, presentation } = props;\n\n if (presentation === \"horizontal\") {\n return (\n <Stack gap=\"2xs\" alignItems=\"start\" minW=\"0\">\n {label}\n {control}\n </Stack>\n );\n }\n\n if (fullWidth) {\n return (\n <Box>\n <Box mb=\"xs\">{label}</Box>\n {control}\n </Box>\n );\n }\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {label}\n {control}\n </Flex>\n );\n};\n\ninterface ResourceSelectMenuProps {\n triggerLabel: ReactNode;\n options: ResourceOption[];\n selectedIds: string[];\n multiSelect: boolean;\n triggerVariant?: \"button\" | \"icon\";\n triggerAriaLabel?: string;\n size?: \"xs\" | \"sm\";\n onToggle: (optionId: string) => void;\n}\n\n// Resource params share the editor's one dropdown, so a ticket property and a\n// command param cannot drift into two looks.\nconst ResourceSelectMenu = (props: ResourceSelectMenuProps) => {\n const { triggerLabel, options, selectedIds, multiSelect, triggerVariant, triggerAriaLabel, size, onToggle } = props;\n\n return (\n <SelectionMenu\n triggerLabel={triggerLabel}\n options={options}\n selectedIds={selectedIds}\n multiSelect={multiSelect}\n reselectable\n triggerVariant={triggerVariant}\n triggerAriaLabel={triggerAriaLabel}\n size={size}\n onToggle={onToggle}\n />\n );\n};\n\nexport const ResourceInput = (props: ResourceInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n options,\n onChange,\n onOpenResource,\n readOnly,\n editable = false,\n multiSelect = false,\n placeholder,\n emptyText,\n fullWidth = false,\n presentation = \"stacked\",\n size = \"sm\",\n } = props;\n\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const emitChange = (next: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n onChange(id, next);\n };\n\n // Debounce multi-select toggles so a burst of menu clicks makes one update call.\n const scheduleChange = (next: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, next), 540);\n };\n\n const selectedIds = toIds(value);\n const selectedOptions = resolveOptions(selectedIds, options);\n const interactive = editable && !readOnly;\n\n const label = <ParamEditorLabel name={name} description={description} compact={presentation === \"horizontal\"} />;\n\n if (!interactive) {\n return (\n <FieldShell\n fullWidth={fullWidth}\n label={label}\n presentation={presentation}\n control={<ResourceChipList options={selectedOptions} onOpenResource={onOpenResource} emptyText={emptyText} />}\n />\n );\n }\n\n const toggleOption = (optionId: string) => {\n if (multiSelect) {\n const next = selectedIds.includes(optionId)\n ? selectedIds.filter((entry) => entry !== optionId)\n : [...selectedIds, optionId];\n setValue(next);\n scheduleChange(next);\n return;\n }\n // Re-picking the selected option clears it.\n const next = selectedIds.includes(optionId) ? \"\" : optionId;\n setValue(next);\n emitChange(next);\n };\n\n const removeOption = (optionId: string) => {\n const next = selectedIds.filter((entry) => entry !== optionId);\n setValue(next);\n scheduleChange(next);\n };\n\n if (multiSelect) {\n const control = (\n <Flex gap=\"2xs\" alignItems=\"center\" flexWrap=\"wrap\" minW=\"0\">\n {selectedOptions.length > 0 ? (\n <ResourceChipList\n options={selectedOptions}\n onOpenResource={onOpenResource}\n onRemove={removeOption}\n emptyText={emptyText}\n />\n ) : null}\n <ResourceSelectMenu\n triggerLabel={<Icon as={Plus} boxSize=\"12px\" />}\n options={options}\n selectedIds={selectedIds}\n multiSelect\n triggerVariant=\"icon\"\n triggerAriaLabel={placeholder ?? `Add ${name}`}\n size={size}\n onToggle={toggleOption}\n />\n </Flex>\n );\n\n return <FieldShell fullWidth={fullWidth} label={label} control={control} presentation={presentation} />;\n }\n\n const selected = selectedOptions[0];\n const triggerLabel = selected ? (\n <Flex align=\"center\" gap=\"2xs\" minW=\"0\">\n {selectionOptionIcon(selected, \"14px\")}\n {selected.name}\n </Flex>\n ) : (\n (placeholder ?? \"Select\")\n );\n\n return (\n <FieldShell\n fullWidth={fullWidth}\n label={label}\n presentation={presentation}\n control={\n <ResourceSelectMenu\n triggerLabel={triggerLabel}\n options={options}\n selectedIds={selectedIds}\n multiSelect={false}\n size={size}\n onToggle={toggleOption}\n />\n }\n />\n );\n};\n","import { Box, Button, Group } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { SegmentedOption } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { SelectionMenu } from \"./selection-menu\";\n\ninterface SegmentedInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: string;\n options: SegmentedOption[];\n variant?: \"default\" | \"dots\";\n onChange: (id: string, value: string) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n}\n\nexport const SegmentedInput = (props: SegmentedInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n options,\n variant = \"default\",\n onChange,\n readOnly,\n fullWidth,\n presentation = \"stacked\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const select = (next: string) => {\n setValue(next);\n onChange(id, next);\n };\n\n const selectedName = options.find((option) => option.id === value)?.name ?? value;\n const horizontal = presentation === \"horizontal\";\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description} hideLabel={horizontal} fullWidth={fullWidth}>\n <ParamEditorReadOnlyValue>{selectedName}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n if (horizontal) {\n return (\n <SelectionMenu\n triggerLabel={selectedName}\n options={options}\n selectedIds={[value]}\n multiSelect={false}\n onToggle={select}\n />\n );\n }\n\n const group = (\n <Group\n attached\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border\"\n borderRadius=\"xs\"\n overflow=\"hidden\"\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{ borderColor: \"border.accent-light\" }}\n _active={{ borderColor: \"border.accent-light\" }}\n _focusWithin={{ borderColor: \"border.accent-light\", boxShadow: \"none\" }}\n >\n {options.map((option) => {\n const selected = option.id === value;\n return (\n <Button\n key={option.id}\n flex=\"1\"\n size=\"xs\"\n variant={selected ? \"subtle\" : \"ghost\"}\n borderRadius=\"0\"\n aria-pressed={selected}\n onClick={() => select(option.id)}\n >\n {variant === \"dots\" ? (\n <Box boxSize=\"0.5rem\" borderRadius=\"full\" bg={option.indicatorColor ?? \"fg.muted\"} mr=\"1\" />\n ) : null}\n {option.name}\n </Button>\n );\n })}\n </Group>\n );\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n {group}\n </ParamEditorControlItem>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { SelectionGroup } from \"../param-editor.types\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { SelectionMenu, type SelectionMenuOption, selectionOptionIcon } from \"./selection-menu\";\n\ninterface SelectionInputProps {\n id: string;\n defaultValue: string | string[];\n name: string;\n options: SelectionMenuOption[];\n onChange: (id: string, value: string | string[]) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n multiSelect?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n placeholder?: string;\n fullWidth?: boolean;\n /** Re-picking the selected option clears it. */\n clearable?: boolean;\n /** Inert, but still rendered as a control. */\n disabled?: boolean;\n searchable?: boolean;\n allowCustomValues?: boolean;\n searchPlaceholder?: string;\n emptyText?: string;\n group?: SelectionGroup;\n size?: \"xs\" | \"sm\";\n}\n\nconst withCustomChoices = (options: SelectionMenuOption[], selectedIds: string[], allowCustomValues: boolean) => {\n if (!allowCustomValues) return options;\n return [\n ...options,\n ...selectedIds.filter((id) => !options.some((option) => option.id === id)).map((id) => ({ id, name: id })),\n ];\n};\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const {\n id,\n defaultValue,\n name,\n options,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n multiSelect = false,\n placeholder,\n fullWidth = false,\n clearable = false,\n disabled = false,\n searchable = false,\n allowCustomValues = false,\n searchPlaceholder,\n emptyText,\n group,\n size = \"sm\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [groupValue, setGroupValue] = useState(group?.defaultValue ?? \"\");\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n useEffect(() => {\n setGroupValue(group?.defaultValue ?? \"\");\n }, [group?.defaultValue]);\n\n const multiSelectedIds = Array.isArray(value) ? value : [];\n const singleSelectedIds = typeof value === \"string\" && value ? [value] : [];\n const selectedIds = multiSelect ? multiSelectedIds : singleSelectedIds;\n\n const availableOptions = withCustomChoices(options, selectedIds, allowCustomValues);\n\n const getDisplayText = () => {\n const names = selectedIds\n .map((selectedId) => availableOptions.find((option) => option.id === selectedId)?.name)\n .filter((optionName): optionName is string => Boolean(optionName));\n\n if (names.length === 0) return placeholder || \"Select\";\n if (names.length <= 3) return names.join(\", \");\n return `${names.slice(0, 3).join(\", \")} +${(names.length - 3).toString()}`;\n };\n\n const commit = (nextValue: string | string[]) => {\n setValue(nextValue);\n onChange(id, nextValue);\n };\n\n const handleToggle = (optionId: string) => {\n if (!multiSelect) {\n // Re-picking the selected option clears it, so a single-select needs no\n // extra \"none\" row cluttering the list.\n commit(clearable && selectedIds.includes(optionId) ? \"\" : optionId);\n return;\n }\n commit(\n selectedIds.includes(optionId) ? selectedIds.filter((item) => item !== optionId) : [...selectedIds, optionId],\n );\n };\n\n const handleGroupChange = (optionId: string) => {\n if (!group || optionId === groupValue) return;\n setGroupValue(optionId);\n onChange(group.id, optionId);\n };\n\n // Only a lone selection can colour the trigger; a multi-pick has no single icon.\n const triggerOption = selectedIds.length === 1 ? options.find((option) => option.id === selectedIds[0]) : undefined;\n const label = !hideLabel ? <ParamEditorLabel name={name} description={description} /> : null;\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{getDisplayText()}</ParamEditorReadOnlyValue>;\n\n if (fullWidth)\n return (\n <Box>\n {label ? <Box mb=\"xs\">{label}</Box> : null}\n {valueElement}\n </Box>\n );\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {label}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n const menu = (\n <SelectionMenu\n triggerLabel={\n <>\n {selectionOptionIcon(triggerOption, \"14px\")}\n <Box as=\"span\" truncate>\n {getDisplayText()}\n </Box>\n </>\n }\n options={availableOptions}\n allowCustomValues={allowCustomValues}\n selectedIds={selectedIds}\n multiSelect={multiSelect}\n reselectable={clearable}\n disabled={disabled}\n searchable={searchable}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n group={group ? { ...group, defaultValue: groupValue } : undefined}\n fullWidth={fullWidth}\n size={size}\n onToggle={handleToggle}\n onGroupChange={handleGroupChange}\n />\n );\n\n if (fullWidth)\n return (\n <Box>\n {label ? <Box mb=\"xs\">{label}</Box> : null}\n {menu}\n </Box>\n );\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {/* A long value truncates in its button instead of squeezing out the label. */}\n {label ? <Box flexShrink={0}>{label}</Box> : null}\n {menu}\n </Flex>\n </Box>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"../param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\n\ninterface TextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n singleLine?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n size?: \"xs\" | \"sm\";\n}\n\nexport const TextInput = (props: TextInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n singleLine = true,\n hideLabel = false,\n fullWidth = false,\n size = \"sm\",\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n // Leaving the field is a commit: a form submitted inside the debounce window\n // would otherwise send the value as it was before the last keystrokes.\n const handleBlur = () => {\n if (!timeoutRef.current) return;\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n onChange(id, value);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue preserveWhitespace={!singleLine}>{value}</ParamEditorReadOnlyValue>;\n\n if (singleLine && !fullWidth) {\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n {singleLine && !fullWidth ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n aria-label={name}\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size={size}\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onBlur={handleBlur}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {singleLine ? (\n <Input\n aria-label={name}\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size={size}\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onBlur={handleBlur}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n ) : (\n <Textarea\n aria-label={name}\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size={size}\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onBlur={handleBlur}\n rows={3}\n resize=\"vertical\"\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\n\ninterface ParamEditorInlineGroupProps extends FlexProps {}\n\n// A horizontal row of controls that share a line (e.g. paired x/y inputs).\nexport const ParamEditorInlineGroup = (props: ParamEditorInlineGroupProps) => {\n const { children, ...rest } = props;\n\n return (\n <Flex alignItems=\"center\" gap=\"xs\" minW=\"0\" {...rest}>\n {children}\n </Flex>\n );\n};\n","import type { VectorValue } from \"../param-editor.types\";\nimport { clampToRange } from \"./numeric-value\";\n\nexport interface VectorBounds {\n min?: number;\n max?: number;\n}\n\nconst clampAxis = (value: number, bounds: VectorBounds) => {\n if (bounds.min === undefined && bounds.max === undefined) return value;\n const min = bounds.min ?? Number.NEGATIVE_INFINITY;\n const max = bounds.max ?? Number.POSITIVE_INFINITY;\n return clampToRange(value, min, max);\n};\n\n/** Update a single axis without dropping the other, clamping into optional bounds. */\nexport const updateVectorAxis = (\n value: VectorValue,\n axis: \"x\" | \"y\",\n next: number,\n bounds: VectorBounds = {},\n): VectorValue => {\n const clamped = clampAxis(next, bounds);\n return axis === \"x\" ? { x: clamped, y: value.y } : { x: value.x, y: clamped };\n};\n","import { Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport type { VectorValue } from \"../param-editor.types\";\nimport { ParamEditorControlItem } from \"../param-editor-control-item\";\nimport { ParamEditorInlineGroup } from \"../param-editor-inline-group\";\nimport { ParamEditorReadOnlyValue } from \"../param-editor-read-only-value\";\nimport { NumberInput } from \"./number-input\";\nimport { updateVectorAxis } from \"./vector-value\";\n\ninterface VectorInputProps {\n id: string;\n name: string;\n description?: string;\n defaultValue: VectorValue;\n xLabel?: string;\n yLabel?: string;\n min?: number;\n max?: number;\n step?: number;\n onChange: (id: string, value: VectorValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\ninterface VectorAxisFieldProps {\n label: string;\n fieldId: string;\n value: number;\n min?: number;\n max?: number;\n step?: number;\n onCommit: (value: number) => void;\n}\n\n// A single axis: the shared NumberInput (label/slider hidden) prefixed with its axis letter.\nconst VectorAxisField = (props: VectorAxisFieldProps) => {\n const { label, fieldId, value, min, max, step, onCommit } = props;\n\n return (\n <Flex alignItems=\"center\" gap=\"1\" flexShrink={0}>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" width=\"1rem\" flexShrink={0}>\n {label}\n </Text>\n <NumberInput\n id={fieldId}\n name={label}\n description=\"\"\n defaultValue={value}\n min={min}\n max={max}\n step={step}\n hideLabel\n hideSlider\n onChange={(_, next) => onCommit(next)}\n />\n </Flex>\n );\n};\n\nexport const VectorInput = (props: VectorInputProps) => {\n const {\n id,\n name,\n description,\n defaultValue,\n xLabel = \"X\",\n yLabel = \"Y\",\n min,\n max,\n step = 1,\n onChange,\n readOnly,\n } = props;\n const [value, setValue] = useState<VectorValue>(defaultValue);\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const commitAxis = (axis: \"x\" | \"y\", next: number) => {\n const updated = updateVectorAxis(value, axis, next, { min, max });\n setValue(updated);\n onChange(id, updated);\n };\n\n if (readOnly) {\n return (\n <ParamEditorControlItem name={name} description={description}>\n <ParamEditorReadOnlyValue>{`${value.x}, ${value.y}`}</ParamEditorReadOnlyValue>\n </ParamEditorControlItem>\n );\n }\n\n return (\n <ParamEditorControlItem name={name} description={description} orientation=\"stacked\">\n <ParamEditorInlineGroup>\n <VectorAxisField\n label={xLabel}\n fieldId={`${id}.x`}\n value={value.x}\n min={min}\n max={max}\n step={step}\n onCommit={(next) => commitAxis(\"x\", next)}\n />\n <VectorAxisField\n label={yLabel}\n fieldId={`${id}.y`}\n value={value.y}\n min={min}\n max={max}\n step={step}\n onCommit={(next) => commitAxis(\"y\", next)}\n />\n </ParamEditorInlineGroup>\n </ParamEditorControlItem>\n );\n};\n","import type { ParamValueMap } from \"./param-editor.types\";\n\nexport const resolveParamValue = <T>(defaultValues: ParamValueMap, paramId: string, fallback: T) =>\n defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n","import { ActionInput } from \"./inputs/action-input\";\nimport { AnchorGridInput } from \"./inputs/anchor-grid-input\";\nimport { FileUploadInput } from \"./inputs/file-upload-input\";\nimport { RangeInput } from \"./inputs/range-input\";\nimport { SegmentedInput } from \"./inputs/segmented-input\";\nimport { VectorInput } from \"./inputs/vector-input\";\nimport type { Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { resolveParamValue } from \"./resolve-param-value\";\n\ntype AdvancedParam = Extract<\n Param,\n { type: \"range\" | \"segmented\" | \"actions\" | \"anchorGrid\" | \"vector\" | \"fileUpload\" }\n>;\n\ninterface ParamEditorAdvancedFieldProps {\n param: AdvancedParam;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n presentation: \"stacked\" | \"horizontal\";\n}\n\nexport const ParamEditorAdvancedField = (props: ParamEditorAdvancedFieldProps) => {\n const { param, defaultValues, onChange, readOnly, fullWidth, presentation } = props;\n const common = {\n id: param.id,\n readOnly: readOnly || param.readOnly,\n onChange,\n fullWidth: presentation === \"horizontal\" ? false : fullWidth,\n };\n\n switch (param.type) {\n case \"range\":\n return (\n <RangeInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n unit={param.unit}\n markerCount={param.markerCount}\n presentation={presentation}\n />\n );\n case \"segmented\":\n return (\n <SegmentedInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n variant={param.variant}\n presentation={presentation}\n />\n );\n case \"actions\":\n return (\n <ActionInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n presentation={presentation}\n />\n );\n case \"anchorGrid\":\n if (presentation === \"horizontal\") return null;\n return (\n <AnchorGridInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n />\n );\n case \"vector\":\n return (\n <VectorInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n xLabel={param.xLabel}\n yLabel={param.yLabel}\n min={param.min}\n max={param.max}\n step={param.step}\n />\n );\n case \"fileUpload\":\n return (\n <FileUploadInput\n id={param.id}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n accept={param.accept}\n multiple={param.multiple}\n uploadLabel={param.uploadLabel}\n readOnly={common.readOnly}\n presentation={presentation}\n onChange={onChange}\n />\n );\n }\n};\n","import type { Param } from \"./param-editor.types\";\n\nexport const isParamEditorRichControl = (param: Param) => param.type === \"fileUpload\";\n\nexport const isParamEditorHorizontalControl = (param: Param) => param.type !== \"anchorGrid\";\n","import { Badge, HStack, Image } from \"@chakra-ui/react\";\nimport type { Param } from \"./param-editor.types\";\nimport { ParamEditorControlItem } from \"./param-editor-control-item\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface ParamEditorReadOnlyFieldProps {\n param: Extract<Param, { type: \"readOnly\" }>;\n fullWidth?: boolean;\n}\n\nconst formatPrimitive = (value: string | number | boolean | null) => {\n if (value === null || value === \"\") return \"Not provided\";\n return String(value);\n};\n\nconst ReadOnlyContent = (props: Pick<ParamEditorReadOnlyFieldProps[\"param\"], \"value\">) => {\n const { value } = props;\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return <ParamEditorReadOnlyValue color=\"fg.muted\">None</ParamEditorReadOnlyValue>;\n }\n\n return (\n <HStack gap=\"2xs\" flexWrap=\"wrap\">\n {value.map((item, index) => (\n <Badge key={`${String(item)}-${index}`} variant=\"subtle\" colorPalette=\"gray\">\n {formatPrimitive(item)}\n </Badge>\n ))}\n </HStack>\n );\n }\n\n if (typeof value === \"object\" && value !== null) {\n const images = value.type === \"image\" ? [{ src: value.src, alt: value.alt }] : value.images;\n return (\n <HStack gap=\"2xs\" flexWrap=\"wrap\">\n {images.map((image) => (\n <Image\n key={`${image.src}-${image.alt}`}\n src={image.src}\n alt={image.alt}\n width=\"96px\"\n height=\"72px\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n objectFit=\"cover\"\n />\n ))}\n </HStack>\n );\n }\n\n if (typeof value === \"boolean\") {\n return <ParamEditorReadOnlyValue>{formatPrimitive(value)}</ParamEditorReadOnlyValue>;\n }\n\n return (\n <ParamEditorReadOnlyValue color={value === null || value === \"\" ? \"fg.muted\" : \"fg\"}>\n {formatPrimitive(value)}\n </ParamEditorReadOnlyValue>\n );\n};\n\nexport const ParamEditorReadOnlyField = (props: ParamEditorReadOnlyFieldProps) => {\n const { param, fullWidth } = props;\n\n return (\n <ParamEditorControlItem name={param.name} description={param.description} fullWidth={fullWidth}>\n <ReadOnlyContent value={param.value} />\n </ParamEditorControlItem>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { BooleanInput } from \"./inputs/boolean-input\";\nimport { ColorInput } from \"./inputs/color-input\";\nimport { DateInput } from \"./inputs/date-input\";\nimport { HorizontalTextInput } from \"./inputs/horizontal-text-input\";\nimport { MarkdownInput } from \"./inputs/markdown-input\";\nimport { NumberInput } from \"./inputs/number-input\";\nimport { ResourceInput } from \"./inputs/resource-input\";\nimport { SelectionInput } from \"./inputs/selection-input\";\nimport { TextInput } from \"./inputs/text-input\";\nimport type { Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorAdvancedField } from \"./param-editor-advanced-field\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { isParamEditorRichControl } from \"./param-editor-presentation\";\nimport { ParamEditorReadOnlyField } from \"./param-editor-read-only-field\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { resolveParamValue } from \"./resolve-param-value\";\n\ninterface ParamEditorFieldProps {\n param: Param;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n presentation?: \"stacked\" | \"horizontal\";\n size?: \"xs\" | \"sm\";\n}\n\nconst PropertyField = (props: { param: Extract<Param, { type: \"property\" }>; fullWidth?: boolean }) => {\n const { param, fullWidth } = props;\n\n if (fullWidth) {\n return (\n <Box>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n};\n\nexport const ParamEditorField = (props: ParamEditorFieldProps) => {\n const {\n param,\n defaultValues,\n onChange,\n onOpenResource,\n readOnly,\n fullWidth = false,\n presentation = \"stacked\",\n size = \"sm\",\n } = props;\n const horizontal = presentation === \"horizontal\";\n const richControl = isParamEditorRichControl(param);\n const common = {\n id: param.id,\n readOnly: readOnly || param.readOnly,\n onChange,\n fullWidth: horizontal ? richControl : fullWidth,\n size,\n };\n\n switch (param.type) {\n case \"number\":\n return (\n <NumberInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n hideLabel={horizontal}\n hideSlider={horizontal}\n />\n );\n case \"boolean\":\n return (\n <BooleanInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n hideLabel={horizontal}\n />\n );\n case \"text\":\n if (horizontal) {\n return (\n <HorizontalTextInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n hideLabel\n />\n );\n }\n return (\n <TextInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n />\n );\n case \"markdown\":\n return (\n <MarkdownInput\n id={param.id}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n placeholder={param.placeholder}\n readOnly={common.readOnly}\n presentation={presentation}\n size={size}\n onChange={onChange}\n />\n );\n case \"selection\":\n return (\n <SelectionInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n clearable={param.clearable}\n disabled={param.disabled}\n searchable={param.searchable}\n allowCustomValues={param.allowCustomValues}\n searchPlaceholder={param.searchPlaceholder}\n emptyText={param.emptyText}\n group={\n param.group\n ? {\n ...param.group,\n defaultValue: resolveParamValue(defaultValues, param.group.id, param.group.defaultValue),\n }\n : undefined\n }\n hideLabel={horizontal}\n />\n );\n case \"date\":\n return (\n <DateInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n hideLabel={horizontal}\n />\n );\n case \"color\":\n return (\n <ColorInput\n {...common}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n hideLabel={horizontal}\n />\n );\n case \"property\":\n return <PropertyField param={param} fullWidth={horizontal ? false : fullWidth} />;\n case \"readOnly\":\n return <ParamEditorReadOnlyField param={param} fullWidth={horizontal ? false : fullWidth} />;\n case \"resource\":\n return (\n <ResourceInput\n {...common}\n name={param.name}\n description={param.description}\n defaultValue={resolveParamValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n multiSelect={param.multiSelect}\n editable={param.editable}\n placeholder={param.placeholder}\n emptyText={param.emptyText}\n onOpenResource={onOpenResource}\n presentation={presentation}\n />\n );\n case \"range\":\n case \"segmented\":\n case \"actions\":\n case \"anchorGrid\":\n case \"vector\":\n case \"fileUpload\":\n return (\n <ParamEditorAdvancedField\n param={param}\n defaultValues={defaultValues}\n onChange={onChange}\n readOnly={readOnly}\n fullWidth={fullWidth}\n presentation={presentation}\n />\n );\n default:\n return null;\n }\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorField } from \"./param-editor-field\";\n\nexport interface ParamEditorRowProps {\n param: Param;\n values?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n variant?: \"default\" | \"small\";\n}\n\n/**\n * The padded field row every param surface is built from. Surfaces that compose\n * their own list of fields — a command dialog mixing built-in and host-supplied\n * controls — stack these instead of nesting one editor per field, so the whole\n * form keeps a single rhythm.\n */\nexport const ParamEditorRow = (props: ParamEditorRowProps) => {\n const { param, values = {}, onChange, onOpenResource, readOnly, fullWidth, variant = \"default\" } = props;\n const small = variant === \"small\";\n\n return (\n <Box px=\"sm\" py={small ? \"2xs\" : \"xs\"}>\n <ParamEditorField\n param={param}\n defaultValues={values}\n onChange={onChange ?? (() => undefined)}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n size={small ? \"xs\" : \"sm\"}\n />\n </Box>\n );\n};\n","import { Button, Collapsible, Flex, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\nimport type { Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorRow } from \"./param-editor-row\";\n\ninterface ParamEditorSectionProps {\n title?: string;\n description?: string;\n params: Param[];\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n isFirst?: boolean;\n variant?: \"default\" | \"small\";\n}\n\nconst ParamEditorSectionTitle = (props: { title: string; description?: string }) => {\n const { title, description } = props;\n\n return (\n <Stack gap=\"2xs\" minW=\"0\" textAlign=\"left\">\n <Text textStyle=\"label/M/medium\" color=\"fg\" truncate>\n {title}\n </Text>\n {description ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" lineClamp={2}>\n {description}\n </Text>\n ) : null}\n </Stack>\n );\n};\n\nconst ParamEditorSectionHeader = (props: {\n title: string;\n description?: string;\n open: boolean;\n collapsible?: boolean;\n onToggle: () => void;\n}) => {\n const { title, description, open, collapsible, onToggle } = props;\n\n if (!collapsible) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2.25rem\" px=\"sm\" py=\"xs\">\n <ParamEditorSectionTitle title={title} description={description} />\n </Flex>\n );\n }\n\n return (\n <Button\n aria-expanded={open}\n borderRadius=\"0\"\n height=\"auto\"\n justifyContent=\"space-between\"\n minHeight=\"2.25rem\"\n onClick={onToggle}\n px=\"sm\"\n py=\"xs\"\n size=\"xs\"\n variant=\"ghost\"\n width=\"full\"\n _expanded={{ bg: \"transparent\" }}\n >\n <ParamEditorSectionTitle title={title} description={description} />\n <Icon\n as={ChevronDown}\n boxSize=\"14px\"\n color=\"fg.muted\"\n flexShrink={0}\n transform={open ? \"rotate(0deg)\" : \"rotate(-90deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Button>\n );\n};\n\nconst ParamEditorSectionBody = (props: Omit<ParamEditorSectionProps, \"title\" | \"description\" | \"collapsible\">) => {\n const { params, defaultValues, onChange, onOpenResource, readOnly, fullWidth, defaultCollapsed, isFirst, variant } =\n props;\n let sectionPadding = defaultCollapsed || isFirst ? \"2xs\" : \"xs\";\n if (variant === \"small\") sectionPadding = \"none\";\n\n return (\n <Stack gap=\"0\" py={sectionPadding}>\n {params.map((param) => (\n <ParamEditorRow\n key={param.id}\n param={param}\n values={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n variant={variant}\n />\n ))}\n </Stack>\n );\n};\n\nexport const ParamEditorSection = (props: ParamEditorSectionProps) => {\n const {\n title,\n description,\n params,\n defaultValues,\n onChange,\n onOpenResource,\n readOnly,\n fullWidth,\n collapsible,\n defaultCollapsed = false,\n isFirst = false,\n variant = \"default\",\n } = props;\n const [open, setOpen] = useState(!defaultCollapsed);\n const hasTitle = Boolean(title);\n const canCollapse = Boolean(hasTitle && collapsible);\n const contentOpen = canCollapse ? open : true;\n\n return (\n <Stack as=\"section\" gap=\"0\" borderTopWidth={isFirst ? \"0\" : \"1px\"} borderColor=\"border.subtle\" minW=\"0\">\n {title ? (\n <ParamEditorSectionHeader\n title={title}\n description={description}\n open={contentOpen}\n collapsible={canCollapse}\n onToggle={() => setOpen((current) => !current)}\n />\n ) : null}\n <Collapsible.Root open={contentOpen}>\n <Collapsible.Content>\n <ParamEditorSectionBody\n params={params}\n defaultValues={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n defaultCollapsed={defaultCollapsed}\n isFirst={isFirst}\n variant={variant}\n />\n </Collapsible.Content>\n </Collapsible.Root>\n </Stack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorSection } from \"./param-editor-section\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n variant?: \"default\" | \"small\";\n}\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const {\n params = [],\n groups = [],\n defaultValues = {},\n onChange,\n onOpenResource,\n readOnly,\n fullWidth = false,\n variant = \"default\",\n } = props;\n const handleChange = onChange ?? (() => undefined);\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"0\">\n {params.length > 0 ? (\n <ParamEditorSection\n params={params}\n defaultValues={defaultValues}\n onChange={handleChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n variant={variant}\n isFirst\n />\n ) : null}\n {groups.map((group, index) => (\n <ParamEditorSection\n key={group.id}\n title={group.title}\n description={group.description}\n params={group.params}\n defaultValues={defaultValues}\n onChange={handleChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n variant={variant}\n collapsible={group.collapsible}\n defaultCollapsed={group.defaultCollapsed}\n isFirst={params.length === 0 && index === 0}\n />\n ))}\n </Stack>\n );\n};\n","import { Stack, type StackProps } from \"@chakra-ui/react\";\n\ninterface ParamEditorControlListProps extends StackProps {}\n\n// A vertical stack of control items with consistent authoring density. Use it to\n// compose control layouts outside a full <ParamEditor> section.\nexport const ParamEditorControlList = (props: ParamEditorControlListProps) => {\n const { children, ...rest } = props;\n\n return (\n <Stack gap=\"sm\" minW=\"0\" {...rest}>\n {children}\n </Stack>\n );\n};\n","import { ParamEditor } from \"@/components/param-editor\";\n\ninterface JsonField {\n label: string;\n value: unknown;\n}\n\nexport interface FriendlyJsonDisplayProps {\n value: unknown;\n}\n\nconst imageExtensionPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i;\nconst imageLabelPattern = /(^|\\s)(avatar|image|logo|photo|picture|thumbnail)(\\s|$)/i;\n\nconst humanizeKey = (key: string) => {\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .toLowerCase();\n\n return words ? `${words[0]?.toUpperCase()}${words.slice(1)}` : \"Details\";\n};\n\nconst formatPath = (path: string[]) => path.map((part) => (/^\\d+$/.test(part) ? part : humanizeKey(part))).join(\" / \");\n\nconst isPrimitiveArray = (value: unknown[]) => value.every((item) => item === null || typeof item !== \"object\");\n\nconst appendJsonFields = (value: unknown, path: string[], fields: JsonField[]) => {\n if (Array.isArray(value)) {\n if (value.length === 0 || isPrimitiveArray(value)) {\n fields.push({ label: formatPath(path), value });\n return;\n }\n\n value.forEach((item, index) => {\n appendJsonFields(item, [...path, String(index + 1)], fields);\n });\n return;\n }\n\n if (value !== null && typeof value === \"object\") {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n fields.push({ label: formatPath(path), value: null });\n return;\n }\n\n entries.forEach(([key, item]) => {\n appendJsonFields(item, [...path, key], fields);\n });\n return;\n }\n\n fields.push({ label: formatPath(path), value });\n};\n\nexport const parseJsonCellValue = (value: unknown) => {\n if (typeof value !== \"string\") return value;\n\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n};\n\nexport const buildJsonFields = (value: unknown) => {\n const fields: JsonField[] = [];\n appendJsonFields(parseJsonCellValue(value), [], fields);\n return fields.map((field) => ({ ...field, label: field.label || \"Value\" }));\n};\n\nexport const isJsonImageValue = (value: unknown, label: string) => {\n if (typeof value !== \"string\") return false;\n if (value.startsWith(\"data:image/\")) return true;\n\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\n return imageExtensionPattern.test(url.pathname) || imageLabelPattern.test(label);\n } catch {\n return false;\n }\n};\n\nexport const isJsonImageArray = (value: unknown, label: string) => {\n return Array.isArray(value) && value.length > 0 && value.every((item) => isJsonImageValue(item, label));\n};\n\nconst formatJsonPrimitive = (value: unknown) => {\n if (value === null || value === undefined || value === \"\") return \"Not provided\";\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n return String(value);\n};\n\nconst formatJsonValue = (value: unknown) => {\n if (Array.isArray(value)) return value.length === 0 ? \"None\" : value.map(formatJsonPrimitive).join(\", \");\n return formatJsonPrimitive(value);\n};\n\nexport const getJsonCellSummary = (value: unknown) => {\n const parsedValue = parseJsonCellValue(value);\n if (Array.isArray(parsedValue) && parsedValue.length === 0) return \"No details\";\n if (parsedValue !== null && typeof parsedValue === \"object\" && Object.keys(parsedValue).length === 0) {\n return \"No details\";\n }\n\n const fields = buildJsonFields(value).filter(\n (field) => !isJsonImageValue(field.value, field.label) && !isJsonImageArray(field.value, field.label),\n );\n if (fields.length === 0) return \"No details\";\n\n const visibleValues = fields.slice(0, 2).map((field) => formatJsonValue(field.value));\n const remainingCount = fields.length - visibleValues.length;\n return [...visibleValues, remainingCount > 0 ? `${remainingCount} more` : null].filter(Boolean).join(\" · \");\n};\n\nconst toReadOnlyValue = (field: JsonField) => {\n const { label, value } = field;\n if (isJsonImageValue(value, label)) {\n return { type: \"image\" as const, src: String(value), alt: `${label} preview` };\n }\n if (Array.isArray(value) && isJsonImageArray(value, label)) {\n return {\n type: \"image-gallery\" as const,\n images: value.map((image, index) => ({ src: String(image), alt: `${label} ${index + 1} preview` })),\n };\n }\n if (Array.isArray(value)) return value as Array<string | number | boolean | null>;\n if (value === undefined) return null;\n return value as string | number | boolean | null;\n};\n\nexport const buildFriendlyJsonParams = (value: unknown) =>\n buildJsonFields(value).map((field, index) => ({\n id: `friendly-json-${index}`,\n name: field.label,\n type: \"readOnly\" as const,\n value: toReadOnlyValue(field),\n }));\n\nexport const FriendlyJsonDisplay = (props: FriendlyJsonDisplayProps) => {\n const { value } = props;\n return <ParamEditor params={buildFriendlyJsonParams(value)} readOnly fullWidth />;\n};\n","import { Icon as ChakraIcon } from \"@chakra-ui/react\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\nimport { CalendarClock, CheckCircle2, Hash, Type } from \"lucide-react\";\nimport { isValidElement, type ReactElement, type ReactNode } from \"react\";\n\nimport type { ColumnType, DisplayValue, RowData } from \"./types\";\n\nexport const isDisplayValue = (value: unknown): value is DisplayValue =>\n typeof value === \"object\" && value !== null && \"display\" in value;\n\nexport const isString = (v: unknown): v is string => typeof v === \"string\" || v instanceof String;\nexport const isNumber = (v: unknown): v is number => typeof v === \"number\" || v instanceof Number;\nexport const isBoolean = (v: unknown): v is boolean => typeof v === \"boolean\" || v instanceof Boolean;\n\nexport const getType = (values: unknown[]): ColumnType => {\n const comparableValues = values\n .map((value) => {\n if (isDisplayValue(value)) return value.sortValue ?? null;\n if (value instanceof String || value instanceof Number || value instanceof Boolean) return value.valueOf();\n if (isValidElement(value)) return null;\n return value;\n })\n .filter((value) => value !== null && value !== undefined);\n\n if (comparableValues.length === 0) return \"unknown\";\n if (comparableValues.every((v) => isString(v) && !Number.isNaN(Date.parse(v.toString())))) return \"date\";\n if (comparableValues.every((v) => isNumber(v))) return \"number\";\n if (comparableValues.every((v) => isBoolean(v))) return \"boolean\";\n if (comparableValues.every((v) => isString(v))) return \"string\";\n return \"unknown\";\n};\n\nconst headerIconProps = {\n boxSize: \"14px\",\n marginRight: \"2px\",\n};\n\nexport const getIcon = (values: unknown[]): ReactElement | null => {\n const type = getType(values);\n if (type === \"date\") return <ChakraIcon as={CalendarClock} {...headerIconProps} />;\n if (type === \"string\") return <ChakraIcon as={Type} {...headerIconProps} />;\n if (type === \"number\") return <ChakraIcon as={Hash} {...headerIconProps} />;\n if (type === \"boolean\") return <ChakraIcon as={CheckCircle2} {...headerIconProps} />;\n return null;\n};\n\nexport function formatDisplayValue(value: unknown): ReactNode {\n if (isDisplayValue(value)) return value.display;\n if (isValidElement(value)) return value;\n\n if (value instanceof String || value instanceof Number || value instanceof Boolean) {\n value = value.valueOf();\n }\n\n switch (typeof value) {\n case \"boolean\":\n return value ? \"TRUE\" : \"FALSE\";\n case \"number\":\n return value;\n case \"object\":\n return value !== null ? JSON.stringify(value) : \"-\";\n case \"undefined\":\n return \"-\";\n default:\n return value ? String(value) : \"-\";\n }\n}\n\nexport const columnHelper = createColumnHelper<RowData>();\n","import { resolveDataTableFieldKind } from \"@pstdio/sdk/extensions\";\nimport { isValidElement, type ReactNode } from \"react\";\nimport type { AttributeDescriptor, KanbanRendererRow } from \"@/components/kanban-renderer/types\";\nimport { isDataTableDiffValue, resolveDataTableComparableValue } from \"./data-table-cell-value\";\nimport { formatDataTableRelativeDate } from \"./data-table-date-cell\";\nimport { getJsonCellSummary } from \"./friendly-json-display\";\nimport { formatDisplayValue } from \"./helpers\";\nimport type { DataTableProps, DataTableSelectionAction, RowData } from \"./types\";\n\nexport const defaultPageSize = 30;\n\nexport interface DataTableRendererRow extends KanbanRendererRow {\n sourceRow: RowData;\n}\n\nexport const resolveDataTableRowId = (row: RowData, index: number, getRowId?: DataTableProps[\"getRowId\"]) => {\n if (getRowId) return getRowId(row, index);\n return typeof row.id === \"string\" ? row.id : String(index);\n};\n\nexport const resolveInitialPageSize = (props: Pick<DataTableProps, \"initialPageSize\">) => {\n if (typeof props.initialPageSize === \"number\" && props.initialPageSize > 0) return props.initialPageSize;\n return defaultPageSize;\n};\n\nexport const getSelectedOriginalRows = (rows: Array<{ original: RowData }>) => rows.map((row) => row.original);\n\nexport const resolveSelectionActions = (\n props: Pick<DataTableProps, \"selectionActions\" | \"onCSVDownload\" | \"getRowId\">,\n) => {\n const actions: DataTableSelectionAction[] = [...(props.selectionActions ?? [])];\n\n if (props.onCSVDownload) {\n actions.push({\n label: \"Download CSV\",\n onSelect: (rows) => {\n props.onCSVDownload?.(rows.map((row, index) => resolveDataTableRowId(row, index, props.getRowId)));\n },\n });\n }\n\n return actions;\n};\n\nexport const shouldEnableSelection = (\n props: Pick<DataTableProps, \"selectionMode\" | \"selectionActions\" | \"onCSVDownload\">,\n) => props.selectionMode === \"multiple\" || Boolean(props.onCSVDownload) || Boolean(props.selectionActions?.length);\n\nexport const shouldHighlightActiveRow = (props: {\n enableRowActivation?: boolean;\n activeRowId?: string | null;\n rowId: string;\n}) => props.enableRowActivation === true && props.activeRowId === props.rowId;\n\ntype ColumnRenderers = DataTableProps[\"columnRenderers\"];\n\nconst toAttributeValue = (value: unknown, renderer?: NonNullable<ColumnRenderers>[string]) => {\n const raw = resolveDataTableComparableValue(value, renderer);\n return raw;\n};\n\ntype ColumnOptions = Pick<\n DataTableProps,\n \"compactHeaders\" | \"columnRenderers\" | \"columnTypes\" | \"groupableColumns\" | \"filterableColumns\"\n>;\n\nconst resolveAttributeType = (\n rows: RowData[],\n columnKey: string,\n options: ColumnOptions,\n): AttributeDescriptor[\"type\"] => {\n return {\n kind: resolveDataTableFieldKind(\n rows.map((row) => row[columnKey]),\n { type: options.columnTypes?.[columnKey], renderer: options.columnRenderers?.[columnKey] },\n ),\n };\n};\n\n/** Every column is a view field, so filters, sorts, and grouping read them like board attributes. */\nexport const buildDataTableRendererAttributes = (\n rows: RowData[],\n columnKeys: string[],\n options: ColumnOptions = {},\n): AttributeDescriptor[] =>\n columnKeys.map((columnKey) => ({\n id: columnKey,\n label: options.compactHeaders?.[columnKey] ?? columnKey,\n type: resolveAttributeType(rows, columnKey, options),\n filterable: options.filterableColumns?.includes(columnKey) ?? true,\n sortable: true,\n groupable: options.groupableColumns?.includes(columnKey) ?? false,\n displayable: true,\n }));\n\nexport const buildDataTableRendererRows = (\n rows: RowData[],\n columnKeys: string[],\n getRowId?: DataTableProps[\"getRowId\"],\n renderers?: ColumnRenderers,\n): DataTableRendererRow[] =>\n rows.map((row, index) => {\n const attributes = Object.fromEntries(\n columnKeys.map((columnKey) => [columnKey, toAttributeValue(row[columnKey], renderers?.[columnKey])]),\n );\n const rowId = resolveDataTableRowId(row, index, getRowId);\n const firstValue = columnKeys.length > 0 ? attributes[columnKeys[0]!] : rowId;\n\n return {\n id: rowId,\n title: String(firstValue ?? rowId),\n attributes,\n sourceRow: row,\n };\n });\n\nexport const resolveDataTableColumnOrder = (availableColumnIds: string[], requestedColumnOrder: string[]) => {\n const availableColumnIdSet = new Set(availableColumnIds);\n const orderedColumnIds = requestedColumnOrder.filter((columnId) => availableColumnIdSet.has(columnId));\n const orderedColumnIdSet = new Set(orderedColumnIds);\n const missingColumnIds = availableColumnIds.filter((columnId) => !orderedColumnIdSet.has(columnId));\n\n return [...orderedColumnIds, ...missingColumnIds];\n};\n\nexport const toggleHiddenDataTableColumn = (hiddenColumnIds: string[], columnId: string, visible: boolean) =>\n visible ? hiddenColumnIds.filter((id) => id !== columnId) : [...new Set([...hiddenColumnIds, columnId])];\n\n/** The text a cell shows, which is all that search looks at. */\nconst nodeText = (value: ReactNode): string[] => {\n if (typeof value === \"string\" || typeof value === \"number\") return [String(value)];\n if (Array.isArray(value)) return value.flatMap(nodeText);\n if (isValidElement<{ children?: ReactNode }>(value)) return nodeText(value.props.children);\n return [];\n};\nexport const dataTableCellText = (\n value: unknown,\n renderer?: NonNullable<ColumnRenderers>[string],\n now = new Date(),\n) => {\n if (renderer?.type === \"json\") return [getJsonCellSummary(value)];\n if (renderer?.type === \"badge\" && [\"string\", \"number\", \"boolean\"].includes(typeof value)) return [String(value)];\n if (renderer?.type === \"date\") {\n const label = formatDataTableRelativeDate(value, now);\n if (label) return [label];\n }\n if (renderer?.type === \"diff\" && isDataTableDiffValue(value)) return [`+${value.additions}`, `-${value.deletions}`];\n return nodeText(formatDisplayValue(value));\n};\n\nexport const reorderDataTableColumns = (columnIds: string[], activeColumnId: string, overColumnId: string) => {\n const activeIndex = columnIds.indexOf(activeColumnId);\n const overIndex = columnIds.indexOf(overColumnId);\n\n if (activeIndex < 0 || overIndex < 0 || activeIndex === overIndex) return columnIds;\n\n const nextColumnIds = [...columnIds];\n const [activeColumn] = nextColumnIds.splice(activeIndex, 1);\n if (!activeColumn) return columnIds;\n\n nextColumnIds.splice(overIndex, 0, activeColumn);\n return nextColumnIds;\n};\n\nexport const resolveDataTableToolbarStorageKey = (props: { toolbarStorageKey?: string; columnKeys: string[] }) =>\n props.toolbarStorageKey ?? `data-table:${props.columnKeys.join(\"|\") || \"empty\"}`;\n","import { Box, chakra, Flex, IconButton, Popover, Portal } from \"@chakra-ui/react\";\nimport { Check, X } from \"lucide-react\";\nimport { type KeyboardEvent, type ReactNode, type RefObject, useEffect, useRef } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\ninterface InlineEditActionsProps {\n cancelLabel: string;\n saveLabel: string;\n onCancel: () => void;\n onSave: () => void;\n}\n\nconst InlineEditActions = (props: InlineEditActionsProps) => {\n const { cancelLabel, saveLabel, onCancel, onSave } = props;\n\n return (\n <Flex gap=\"2xs\" flexShrink=\"0\">\n <IconButton type=\"button\" size=\"2xs\" variant=\"ghost\" aria-label={saveLabel} onClick={onSave}>\n <Check />\n </IconButton>\n <IconButton type=\"button\" size=\"2xs\" variant=\"ghost\" aria-label={cancelLabel} onClick={onCancel}>\n <X />\n </IconButton>\n </Flex>\n );\n};\n\ninterface EditModeTextSurfaceProps {\n accessibleName: string;\n textStyle: string;\n value: string;\n onCancel: () => void;\n onChange: (value: string) => void;\n onSave: () => void;\n}\n\nconst EditModeTextSurface = (props: EditModeTextSurfaceProps) => {\n const { accessibleName, textStyle, value, onCancel, onChange, onSave } = props;\n const elementRef = useRef<HTMLDivElement>(null);\n const initialValueRef = useRef(value);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n element.textContent = initialValueRef.current;\n element.focus();\n const selection = globalThis.getSelection();\n const range = document.createRange();\n range.selectNodeContents(element);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }, []);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n onSave();\n }\n if (event.key === \"Escape\") onCancel();\n };\n\n return (\n <chakra.div\n ref={elementRef}\n role=\"textbox\"\n aria-label={accessibleName}\n contentEditable\n suppressContentEditableWarning\n height=\"10\"\n width=\"100%\"\n paddingX=\"xs\"\n paddingY=\"xs\"\n overflow=\"hidden\"\n background=\"transparent\"\n border=\"none\"\n borderRadius=\"0\"\n outline=\"none\"\n textStyle={textStyle}\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n onInput={(event) => onChange(event.currentTarget.textContent ?? \"\")}\n onKeyDown={handleKeyDown}\n />\n );\n};\n\ninterface EditModeHeaderEditorProps {\n accessibleName: string;\n draft: string;\n onCancel: () => void;\n onChange: (value: string) => void;\n onSave: () => void;\n}\n\nexport const EditModeHeaderEditor = (props: EditModeHeaderEditorProps) => {\n const { accessibleName, draft, onCancel, onChange, onSave } = props;\n\n return (\n <Box position=\"absolute\" inset=\"0\" width=\"100%\" height=\"10\" background=\"bg.subtle\" zIndex=\"1\">\n <EditModeTextSurface\n accessibleName={`Rename column ${accessibleName}`}\n textStyle=\"label/S/medium\"\n value={draft}\n onChange={onChange}\n onSave={onSave}\n onCancel={onCancel}\n />\n <Box position=\"absolute\" top=\"50%\" right=\"2xs\" transform=\"translateY(-50%)\" background=\"bg.subtle\">\n <InlineEditActions\n saveLabel=\"Save column name\"\n cancelLabel=\"Cancel column rename\"\n onSave={onSave}\n onCancel={onCancel}\n />\n </Box>\n </Box>\n );\n};\n\ninterface EditModeCellEditorProps {\n anchorRef: RefObject<HTMLElement | null>;\n customEditor?: ReactNode;\n draft: string;\n onCancel: () => void;\n onChange: (value: string) => void;\n onSave: () => void;\n}\n\nexport const EditModeCellEditor = (props: EditModeCellEditorProps) => {\n const { anchorRef, customEditor, draft, onCancel, onChange, onSave } = props;\n\n return (\n <Popover.Root\n open\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-start\",\n offset: { mainAxis: -40 },\n getAnchorElement: () => anchorRef.current,\n }}\n >\n <Portal>\n <Popover.Positioner>\n <Popover.Content\n data-table-cell-editor\n width=\"calc(var(--reference-width) + 3rem)\"\n minWidth=\"calc(var(--reference-width) + 3rem)\"\n maxWidth=\"calc(100vw - 2rem)\"\n padding=\"0\"\n overflow=\"hidden\"\n background=\"bg\"\n animation=\"none\"\n zIndex=\"popover\"\n >\n <ScrollArea\n data-table-cell-editor-body\n width=\"100%\"\n minHeight=\"10\"\n maxHeight=\"48\"\n contentProps={{ minHeight: \"10\" }}\n viewportProps={{ maxHeight: \"48\", overscrollBehavior: \"contain\" }}\n >\n {customEditor ?? (\n <EditModeTextSurface\n accessibleName=\"Edit cell\"\n textStyle=\"paragraph/S/regular\"\n value={draft}\n onChange={onChange}\n onSave={onSave}\n onCancel={onCancel}\n />\n )}\n </ScrollArea>\n <Flex\n data-table-cell-editor-footer\n height=\"8\"\n flexShrink=\"0\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n paddingX=\"xs\"\n borderTopWidth=\"1px\"\n borderColor=\"border.subtle\"\n background=\"bg.subtle\"\n >\n <InlineEditActions\n saveLabel=\"Save cell\"\n cancelLabel=\"Cancel cell edit\"\n onSave={onSave}\n onCancel={onCancel}\n />\n </Flex>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Box, Table } from \"@chakra-ui/react\";\nimport { type KeyboardEvent, type ReactNode, useRef } from \"react\";\nimport { EditModeCellEditor } from \"./edit-mode-data-table-editors\";\nimport type { DataTableCellContext, DataTableEditModeColumn, DataTableEditModeConfig } from \"./types\";\n\ninterface EditModeDataTableCellProps {\n activeDraft?: string;\n column: DataTableEditModeColumn;\n context: DataTableCellContext;\n editMode: DataTableEditModeConfig;\n isActive: boolean;\n isReadOnly: boolean;\n wrapRows: boolean;\n onActivate: () => void;\n onCancel: () => void;\n onDraftChange: (draft: string) => void;\n onSave: () => void;\n}\n\nconst getRowDisplayProps = (wrapRows: boolean) => {\n if (wrapRows) {\n return {\n height: undefined,\n maxHeight: undefined,\n overflowWrap: \"anywhere\" as const,\n textOverflow: undefined,\n verticalAlign: \"top\" as const,\n whiteSpace: \"normal\" as const,\n };\n }\n\n return {\n height: \"10\",\n maxHeight: \"10\",\n overflowWrap: undefined,\n textOverflow: \"ellipsis\" as const,\n verticalAlign: \"middle\" as const,\n whiteSpace: \"nowrap\" as const,\n };\n};\n\nexport const EditModeDataTableCell = (props: EditModeDataTableCellProps) => {\n const {\n activeDraft = \"\",\n column,\n context,\n editMode,\n isActive,\n isReadOnly,\n wrapRows,\n onActivate,\n onCancel,\n onDraftChange,\n onSave,\n } = props;\n const cellRef = useRef<HTMLTableCellElement>(null);\n const isEditable = !isReadOnly && (editMode.isCellEditable?.(context) ?? true);\n const rowDisplayProps = getRowDisplayProps(wrapRows);\n let content: ReactNode;\n\n if (isActive) {\n const customEditor = editMode.renderCellEditor?.({ context, value: activeDraft, onChange: onDraftChange });\n content = (\n <EditModeCellEditor\n anchorRef={cellRef}\n draft={activeDraft}\n customEditor={customEditor}\n onChange={onDraftChange}\n onSave={onSave}\n onCancel={onCancel}\n />\n );\n } else {\n content = (\n <Box\n width=\"100%\"\n minHeight=\"5\"\n textAlign=\"inherit\"\n overflowWrap={rowDisplayProps.overflowWrap}\n whiteSpace={rowDisplayProps.whiteSpace}\n >\n {editMode.renderCell?.(context) ?? String(context.value ?? \"\")}\n </Box>\n );\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableCellElement>) => {\n if (!isEditable || isActive || (event.key !== \"Enter\" && event.key !== \" \")) return;\n event.preventDefault();\n onActivate();\n };\n\n return (\n <Table.Cell\n ref={cellRef}\n data-column-id={column.id}\n data-editable={String(isEditable)}\n data-editing={isActive ? \"true\" : undefined}\n padding={isActive ? \"0\" : \"xs\"}\n height={rowDisplayProps.height}\n maxHeight={rowDisplayProps.maxHeight}\n position=\"relative\"\n overflow={isActive ? \"visible\" : \"hidden\"}\n background=\"bg\"\n textAlign={column.alignment ?? \"left\"}\n textStyle=\"paragraph/S/regular\"\n textOverflow={rowDisplayProps.textOverflow}\n verticalAlign={rowDisplayProps.verticalAlign}\n whiteSpace={rowDisplayProps.whiteSpace}\n borderRightWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n cursor={isEditable && !isActive ? \"text\" : undefined}\n tabIndex={isEditable && !isActive ? 0 : undefined}\n onClick={isEditable && !isActive ? onActivate : undefined}\n onKeyDown={handleKeyDown}\n >\n {content}\n </Table.Cell>\n );\n};\n","import { Icon as ChakraIcon, Table } from \"@chakra-ui/react\";\nimport { Check, Minus } from \"lucide-react\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\n\nconst stopControlPropagation = (event: { stopPropagation: () => void }) => {\n event.stopPropagation();\n};\n\ninterface EditModeSelectionHeaderProps {\n checked: boolean;\n indeterminate: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport const EditModeSelectionHeader = (props: EditModeSelectionHeaderProps) => {\n const { checked, indeterminate, onChange } = props;\n\n return (\n <Checkbox\n checked={checked || (indeterminate ? \"indeterminate\" : false)}\n aria-label=\"Select all\"\n icon={<ChakraIcon as={indeterminate ? Minus : Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onClick={stopControlPropagation}\n onCheckedChange={(details) => onChange(details.checked === true)}\n />\n );\n};\n\ninterface EditModeSelectionCellProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport const EditModeSelectionCell = (props: EditModeSelectionCellProps) => {\n const { checked, onChange } = props;\n\n return (\n <Table.Cell\n data-column-id=\"rowSelection\"\n height=\"10\"\n padding=\"xs\"\n textAlign=\"center\"\n background=\"bg\"\n borderRightWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <Checkbox\n checked={checked}\n aria-label=\"Select row\"\n icon={<ChakraIcon as={Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onClick={stopControlPropagation}\n onCheckedChange={(details) => onChange(details.checked === true)}\n />\n </Table.Cell>\n );\n};\n","import { Button, Icon, Table } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { EditModeDataTableCell } from \"./edit-mode-data-table-cell\";\nimport { EditModeSelectionCell } from \"./edit-mode-data-table-selection\";\nimport type { DataTableCellContext, DataTableEditModeColumn, DataTableEditModeConfig, RowData } from \"./types\";\n\ninterface ActiveCell {\n rowId: string;\n columnId: string;\n draft: string;\n}\n\ninterface EditModeDataTableBodyProps {\n activeCell: ActiveCell | null;\n columns: DataTableEditModeColumn[];\n data: RowData[];\n editMode: DataTableEditModeConfig;\n enableSelection: boolean;\n isReadOnly: boolean;\n pageIndex: number;\n pageRows: RowData[];\n pageSize: number;\n selectedRowIds: Set<string>;\n showNewRow: boolean;\n wrapRows: boolean;\n onActivateCell: (cell: ActiveCell) => void;\n onAddRow: () => void;\n onCancelCell: () => void;\n onCommitCell: () => void;\n onDraftChange: (cell: ActiveCell) => void;\n onRemoveRow: (rowId: string) => void;\n onToggleRowSelection: (rowId: string, checked: boolean) => void;\n rowIdFor: (row: RowData, index: number) => string;\n}\n\nexport const EditModeDataTableBody = (props: EditModeDataTableBodyProps) => {\n const {\n activeCell,\n columns,\n data,\n editMode,\n enableSelection,\n isReadOnly,\n pageIndex,\n pageRows,\n pageSize,\n selectedRowIds,\n showNewRow,\n wrapRows,\n onActivateCell,\n onAddRow,\n onCancelCell,\n onCommitCell,\n onDraftChange,\n onRemoveRow,\n onToggleRowSelection,\n rowIdFor,\n } = props;\n\n return (\n <Table.Body>\n {pageRows.map((row, visibleIndex) => {\n const rowIndex = pageIndex * pageSize + visibleIndex;\n const sourceIndex = data.indexOf(row);\n const rowId = rowIdFor(row, sourceIndex);\n const tableRow = (\n <Table.Row\n key={rowId}\n data-document-row=\"true\"\n data-selected={selectedRowIds.has(rowId) ? \"true\" : undefined}\n aria-selected={selectedRowIds.has(rowId)}\n height={wrapRows ? undefined : \"10\"}\n background=\"bg\"\n >\n <Table.Cell\n data-column-id=\"rowIndex\"\n height={wrapRows ? undefined : \"10\"}\n padding=\"xs\"\n textAlign=\"center\"\n textStyle=\"paragraph/S/regular\"\n background=\"bg.subtle\"\n borderRightWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n verticalAlign={wrapRows ? \"top\" : \"middle\"}\n >\n {rowIndex + 1}\n </Table.Cell>\n {enableSelection ? (\n <EditModeSelectionCell\n checked={selectedRowIds.has(rowId)}\n onChange={(checked) => onToggleRowSelection(rowId, checked)}\n />\n ) : null}\n {columns.map((column) => {\n const context: DataTableCellContext = {\n row,\n rowId,\n columnId: column.id,\n value: row[column.id] ?? \"\",\n };\n const isActive = activeCell?.rowId === rowId && activeCell.columnId === column.id;\n return (\n <EditModeDataTableCell\n key={column.id}\n activeDraft={isActive ? activeCell?.draft : undefined}\n column={column}\n context={context}\n editMode={editMode}\n isActive={isActive}\n isReadOnly={isReadOnly}\n wrapRows={wrapRows}\n onActivate={() => onActivateCell({ rowId, columnId: column.id, draft: String(context.value ?? \"\") })}\n onDraftChange={(draft) => onDraftChange({ rowId, columnId: column.id, draft })}\n onSave={onCommitCell}\n onCancel={onCancelCell}\n />\n );\n })}\n {!isReadOnly ? (\n <Table.Cell\n data-column-id=\"editControl\"\n width=\"min-content\"\n height={wrapRows ? undefined : \"10\"}\n position=\"sticky\"\n right=\"0\"\n zIndex=\"1\"\n background=\"bg\"\n borderLeftWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n verticalAlign={wrapRows ? \"top\" : \"middle\"}\n />\n ) : null}\n </Table.Row>\n );\n\n if (isReadOnly) return tableRow;\n\n return (\n <ResourceContextMenu\n key={rowId}\n contentMinWidth=\"12rem\"\n actions={[\n {\n key: \"delete-row\",\n label: \"Delete row\",\n icon: <Icon as={Trash2} boxSize=\"14px\" />,\n onClick: () => onRemoveRow(rowId),\n },\n ]}\n >\n {tableRow}\n </ResourceContextMenu>\n );\n })}\n {!isReadOnly && showNewRow ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length + 2 + (enableSelection ? 1 : 0)} padding=\"0\">\n <Button\n size=\"xs\"\n variant=\"ghost-static\"\n width=\"100%\"\n justifyContent=\"flex-start\"\n paddingX=\"xs\"\n color=\"fg.muted\"\n onClick={onAddRow}\n >\n <Icon as={Plus} />\n New row\n </Button>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n );\n};\n","import { Flex, Icon, IconButton, Table, Text } from \"@chakra-ui/react\";\nimport { Pencil, Plus, Trash2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { EditModeHeaderEditor } from \"./edit-mode-data-table-editors\";\nimport { getIcon } from \"./helpers\";\nimport type { DataTableEditModeColumn, DataTableEditModeConfig, RowData } from \"./types\";\n\ninterface ActiveHeader {\n columnId: string;\n draft: string;\n}\n\ninterface EditModeDataTableHeaderProps {\n activeHeader: ActiveHeader | null;\n columnIcons?: Record<string, ReactNode>;\n columns: DataTableEditModeColumn[];\n data: RowData[];\n editMode: DataTableEditModeConfig;\n isReadOnly: boolean;\n rowDisplayControl?: ReactNode;\n selectionHeader?: ReactNode;\n onAddColumn: () => void;\n onCancelHeaderEdit: () => void;\n onDeleteColumn: (columnId: string) => void;\n onHeaderDraftChange: (draft: string) => void;\n onHeaderEdit: (column: DataTableEditModeColumn) => void;\n onSaveHeader: () => void;\n}\n\nexport const EditModeDataTableHeader = (props: EditModeDataTableHeaderProps) => {\n const {\n activeHeader,\n columnIcons,\n columns,\n data,\n editMode,\n isReadOnly,\n rowDisplayControl,\n selectionHeader,\n onAddColumn,\n onCancelHeaderEdit,\n onDeleteColumn,\n onHeaderDraftChange,\n onHeaderEdit,\n onSaveHeader,\n } = props;\n\n return (\n <Table.Header>\n <Table.Row height=\"10\" background=\"bg.subtle\">\n <Table.ColumnHeader\n data-column-id=\"rowIndex\"\n width=\"fit-content\"\n padding={rowDisplayControl ? \"2xs\" : \"xs\"}\n background=\"bg.subtle\"\n borderRightWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n {rowDisplayControl}\n </Table.ColumnHeader>\n {selectionHeader ? (\n <Table.ColumnHeader\n data-column-id=\"rowSelection\"\n padding=\"xs\"\n textAlign=\"center\"\n background=\"bg.subtle\"\n borderRightWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n {selectionHeader}\n </Table.ColumnHeader>\n ) : null}\n {columns.map((column) => {\n const isEditing = activeHeader?.columnId === column.id;\n const headerIcon = columnIcons?.[column.id] ?? getIcon(data.map((row) => row[column.id]));\n const header = (\n <Table.ColumnHeader\n key={column.id}\n data-column-id={column.id}\n data-data-column=\"true\"\n height=\"10\"\n padding={isEditing ? \"0\" : \"xs\"}\n position=\"relative\"\n overflow=\"hidden\"\n background=\"bg.subtle\"\n textAlign={column.alignment ?? \"left\"}\n borderRightWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n cursor={isReadOnly ? \"default\" : \"context-menu\"}\n >\n {isEditing ? (\n <EditModeHeaderEditor\n accessibleName={column.label || \"empty\"}\n draft={activeHeader.draft}\n onChange={onHeaderDraftChange}\n onSave={onSaveHeader}\n onCancel={onCancelHeaderEdit}\n />\n ) : (\n <Flex alignItems=\"center\" gap=\"1\" minWidth=\"0\" overflow=\"hidden\">\n {headerIcon}\n <Text as=\"div\" textStyle=\"label/S/medium\" truncate>\n {editMode.renderHeader?.(column) ?? column.label}\n </Text>\n </Flex>\n )}\n </Table.ColumnHeader>\n );\n\n if (isReadOnly) return header;\n\n return (\n <ResourceContextMenu\n key={column.id}\n contentMinWidth=\"12rem\"\n actions={[\n {\n key: \"edit-header\",\n label: \"Rename column\",\n icon: <Icon as={Pencil} boxSize=\"14px\" />,\n onClick: () => onHeaderEdit(column),\n },\n {\n key: \"delete-column\",\n label: \"Delete column\",\n icon: <Icon as={Trash2} boxSize=\"14px\" />,\n isDisabled: columns.length === 1,\n separatorBefore: true,\n onClick: () => onDeleteColumn(column.id),\n },\n ]}\n >\n {header}\n </ResourceContextMenu>\n );\n })}\n {!isReadOnly ? (\n <Table.ColumnHeader\n data-column-id=\"editControl\"\n width=\"min-content\"\n padding=\"2xs\"\n textAlign=\"center\"\n position=\"sticky\"\n right=\"0\"\n zIndex=\"3\"\n background=\"bg.subtle\"\n borderLeftWidth=\"1px\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <IconButton size=\"xs\" variant=\"ghost\" aria-label=\"Insert column\" onClick={onAddColumn}>\n <Plus />\n </IconButton>\n </Table.ColumnHeader>\n ) : null}\n </Table.Row>\n </Table.Header>\n );\n};\n","import { Button, Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\";\n\nimport { NumberInputField, NumberInputRoot } from \"@/components/primitives/number-input\";\nimport { ListRow } from \"../list-row/list-row\";\n\ninterface PaginationFooterProps {\n pageCount: number;\n pageIndex: number;\n pageSize: number;\n pageSizeOptions: number[];\n onPageChange: (pageIndex: number) => void;\n onPageSizeChange: (pageSize: number) => void;\n}\n\nexport function PaginationFooter(props: PaginationFooterProps) {\n const { pageCount, pageIndex, pageSize, pageSizeOptions, onPageChange, onPageSizeChange } = props;\n const totalPages = Math.max(pageCount, 1);\n const canGoBack = pageIndex > 0;\n const canGoForward = pageIndex < totalPages - 1;\n\n return (\n <Flex\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n borderTop=\"1px solid\"\n borderColor={\"border.subtle\"}\n paddingX=\"xs\"\n >\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"flex-end\" paddingY=\"xs\">\n <Flex alignItems=\"center\" gap=\"xs\" marginRight=\"sm\">\n <Text textStyle=\"label/S/regular\">Rows per page</Text>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"outline\">\n {pageSize}\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content bg=\"bg\">\n {pageSizeOptions.map((option) => (\n <Menu.Item key={option} value={`${option}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={`${option}`}\n isSelected={option === pageSize}\n onActivate={() => onPageSizeChange(option)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n </Flex>\n <IconButton size=\"xs\" aria-label=\"Go to first page\" onClick={() => onPageChange(0)} disabled={!canGoBack}>\n <ChakraIcon as={ChevronsLeft} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to previous page\"\n onClick={() => onPageChange(pageIndex - 1)}\n disabled={!canGoBack}\n >\n <ChakraIcon as={ChevronLeft} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to next page\"\n onClick={() => onPageChange(pageIndex + 1)}\n disabled={!canGoForward}\n >\n <ChakraIcon as={ChevronRight} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to last page\"\n onClick={() => onPageChange(totalPages - 1)}\n disabled={!canGoForward}\n >\n <ChakraIcon as={ChevronsRight} boxSize=\"14px\" />\n </IconButton>\n <Flex alignItems=\"center\" height=\"100%\" marginLeft=\"sm\" marginRight=\"md\" gap=\"xs\">\n <Text>Page</Text>\n <NumberInputRoot\n margin=\"2xs\"\n width=\"3rem\"\n size=\"xs\"\n min={1}\n max={totalPages}\n value={`${pageIndex + 1}`}\n onValueChange={(details) => {\n const next = Number.isNaN(details.valueAsNumber) ? 1 : details.valueAsNumber;\n const clamped = Math.min(totalPages, Math.max(1, next));\n onPageChange(clamped - 1);\n }}\n >\n <NumberInputField className=\"nodrag\" />\n </NumberInputRoot>\n <Text>of {totalPages}</Text>\n </Flex>\n </Stack>\n </Flex>\n );\n}\n","import { Button, Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { X } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { DataTableSelectionAction, RowData } from \"./types\";\n\ninterface SelectionToolbarProps {\n selectedCount: number;\n totalCount: number;\n onClearSelection: () => void;\n onSelectAll: () => void;\n actions: DataTableSelectionAction[];\n selectedRows: RowData[];\n}\n\nexport function SelectionToolbar(props: SelectionToolbarProps) {\n const { selectedCount, totalCount, onClearSelection, onSelectAll, actions, selectedRows } = props;\n const actionLabel = actions.length === 1 ? actions[0]?.label : \"Actions\";\n\n return (\n <Flex position=\"absolute\" insetX=\"sm\" bottom=\"sm\" zIndex=\"popover\" justifyContent=\"center\" pointerEvents=\"none\">\n <Stack\n role=\"toolbar\"\n aria-label=\"Selection actions\"\n direction=\"row\"\n alignItems=\"center\"\n layerStyle=\"floatingBar\"\n pointerEvents=\"auto\"\n maxWidth=\"100%\"\n overflowX=\"auto\"\n >\n <IconButton aria-label=\"clear-selection\" onClick={onClearSelection} size=\"xs\">\n <ChakraIcon as={X} boxSize=\"16px\" />\n </IconButton>\n <Text>{selectedCount} rows selected</Text>\n {selectedCount !== totalCount && (\n <Button size=\"xs\" onClick={onSelectAll}>\n Select all {totalCount} rows\n </Button>\n )}\n {actions.length === 1 && actions[0] ? (\n <Button size=\"xs\" onClick={() => actions[0]?.onSelect(selectedRows)}>\n {actionLabel}\n </Button>\n ) : null}\n {actions.length > 1 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"xs\">{actionLabel}</Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content bg=\"bg\">\n {actions.map((action) => (\n <Menu.Item key={action.label} value={action.label} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n tone={action.destructive ? \"danger\" : \"default\"}\n label={action.label}\n icon={action.icon}\n onActivate={() => action.onSelect(selectedRows)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Stack>\n </Flex>\n );\n}\n","import type { ViewSort } from \"@pstdio/sdk/extensions\";\nimport { getEnumOptions } from \"../kanban-renderer/kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, KanbanRendererRow } from \"../kanban-renderer/types\";\nimport {\n canSortField,\n findField,\n getAttributeStringValues,\n getAttributeValue,\n parseViewDate,\n} from \"./collection-view-fields\";\n\n/** Option order: declared options first, unknown values after them, missing values last. */\nexport const compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst toTime = (value: unknown) => parseViewDate(value)?.getTime() ?? Number.NaN;\n\nconst compareFieldValues = (a: KanbanRendererRow, b: KanbanRendererRow, field: AttributeDescriptor) => {\n const left = getAttributeValue(a, field);\n const right = getAttributeValue(b, field);\n if (field.compare) return field.compare(left, right);\n if (field.type.kind === \"date\") return toTime(left) - toTime(right);\n if (field.type.kind === \"number\") return Number(left) - Number(right);\n if (field.type.kind === \"enum\") {\n const [leftValue] = getAttributeStringValues(a, field);\n const [rightValue] = getAttributeStringValues(b, field);\n return compareEnumValues(leftValue, rightValue, field.type);\n }\n return String(left).localeCompare(String(right), undefined, { numeric: true, sensitivity: \"base\" });\n};\n\nconst isEmpty = (row: KanbanRendererRow, field: AttributeDescriptor) => {\n if (field.type.kind === \"date\") return parseViewDate(getAttributeValue(row, field)) === undefined;\n const [value] = getAttributeStringValues(row, field);\n if (value === undefined) return true;\n if (field.type.kind === \"number\") return !Number.isFinite(Number(value));\n return false;\n};\n\nconst compileSort = (sort: ViewSort, fields: AttributeDescriptor[]) => {\n const field = findField(fields, sort.attributeId);\n if (!field || !canSortField(field)) return undefined;\n const direction = sort.direction === \"asc\" ? 1 : -1;\n // Rows without a value stay last in both directions.\n return (a: KanbanRendererRow, b: KanbanRendererRow) => {\n const leftEmpty = isEmpty(a, field);\n const rightEmpty = isEmpty(b, field);\n if (leftEmpty || rightEmpty) return Number(leftEmpty) - Number(rightEmpty);\n return direction * compareFieldValues(a, b, field);\n };\n};\n\n/** One field decides the order; ties keep their incoming order. */\nexport const sortRowsByView = <TRow extends KanbanRendererRow>(\n rows: TRow[],\n sorts: ViewSort[],\n fields: AttributeDescriptor[],\n) => {\n const sort = sorts[0];\n const compare = sort ? compileSort(sort, fields) : undefined;\n return compare ? [...rows].sort(compare) : rows;\n};\n","import { enumOptionLabel, getEnumOptions } from \"../kanban-renderer/kanban-renderer-enum-helpers\";\nimport type { AttributeDescriptor, KanbanRendererRow } from \"../kanban-renderer/types\";\nimport { getAttributeStringValues } from \"./collection-view-fields\";\nimport { compareEnumValues } from \"./collection-view-sort\";\n\nexport interface CollectionRowGroup<TRow extends KanbanRendererRow = KanbanRendererRow> {\n key: string;\n label: string;\n rows: TRow[];\n}\n\nexport const emptyGroupKey = (field: AttributeDescriptor) => `No ${field.label.toLowerCase()}`;\n\nexport const groupLabel = (key: string, field: AttributeDescriptor) => {\n if (key === emptyGroupKey(field)) return key;\n if (field.type.kind === \"enum\" || field.type.kind === \"enum-multi\") return enumOptionLabel(field.type, key);\n return key;\n};\n\n// Drops values that are no longer a declared option, so rows pointing at a removed\n// status join the \"No <field>\" group instead of an orphaned group for the deleted value.\nconst resolveGroupValue = (value: string | undefined, field: AttributeDescriptor) => {\n if (value === undefined) return undefined;\n if (field.type.kind !== \"enum\" && field.type.kind !== \"enum-multi\") return value;\n return getEnumOptions(field.type).some((option) => option.value === value) ? value : undefined;\n};\n\n/** One group per row. A multi-value field is not offered for grouping, so its first value decides. */\nexport const groupKey = (row: KanbanRendererRow, field: AttributeDescriptor) => {\n const [value] = getAttributeStringValues(row, field);\n return resolveGroupValue(value, field) ?? emptyGroupKey(field);\n};\n\n/** Option fields follow option order, other fields go A to Z, and the \"No <field>\" group comes last. */\nexport const compareGroupKeys = (left: string, right: string, field: AttributeDescriptor) => {\n const empty = emptyGroupKey(field);\n if (left === empty || right === empty) return Number(left === empty) - Number(right === empty);\n const ordered = compareEnumValues(left, right, field.type);\n if (ordered !== 0) return ordered;\n return left.localeCompare(right, undefined, { numeric: true });\n};\n\nexport const groupRowsByField = <TRow extends KanbanRendererRow>(\n rows: TRow[],\n field: AttributeDescriptor,\n knownKeys: string[] = [],\n): CollectionRowGroup<TRow>[] => {\n const groups = new Map<string, TRow[]>(knownKeys.map((key) => [key, []]));\n for (const row of rows) {\n const key = groupKey(row, field);\n const group = groups.get(key);\n if (group) group.push(row);\n else groups.set(key, [row]);\n }\n return [...groups.entries()]\n .sort(([left], [right]) => compareGroupKeys(left, right, field))\n .map(([key, groupRows]) => ({ key, label: groupLabel(key, field), rows: groupRows }));\n};\n","import { DEFAULT_DATA_TABLE_SETTINGS } from \"@pstdio/sdk/extensions\";\nimport { useDeferredValue, useState } from \"react\";\nimport { findField } from \"../collection-view/collection-view-fields\";\nimport { filterRowsByView } from \"../collection-view/collection-view-filter\";\nimport { groupRowsByField } from \"../collection-view/collection-view-grouping\";\nimport { searchRows } from \"../collection-view/collection-view-search\";\nimport { sortRowsByView } from \"../collection-view/collection-view-sort\";\nimport { type CollectionViewStoreState, useCollectionViewStore } from \"../collection-view/use-collection-view-store\";\nimport { useCollectionViews } from \"../collection-view/use-collection-views\";\nimport {\n buildDataTableRendererAttributes,\n buildDataTableRendererRows,\n dataTableCellText,\n resolveDataTableColumnOrder,\n resolveDataTableToolbarStorageKey,\n} from \"./data-table-state\";\nimport type { DataTableProps, DataTableSettings } from \"./types\";\n\ntype DataTableViewDefaults = Pick<DataTableProps, \"defaultSettings\" | \"defaultFilter\" | \"defaultSorts\">;\n\nexport const dataTableInitialState = (defaults: DataTableViewDefaults) => ({\n settings: { ...DEFAULT_DATA_TABLE_SETTINGS, ...defaults.defaultSettings } as DataTableSettings,\n filter: defaults.defaultFilter,\n sorts: defaults.defaultSorts,\n});\n\n/** The unsaved view state of one table. Hosts read it to send the view to their query. */\nexport const useDataTableViewStore = <T>(\n storageKey: string,\n selector: (state: CollectionViewStoreState<DataTableSettings>) => T,\n defaults: DataTableViewDefaults = {},\n) => useCollectionViewStore(storageKey, dataTableInitialState(defaults), selector);\n\n/**\n * Runs a table's view: the saved or edited filter, sorts, and display settings, plus the search\n * typed on screen. Order is decided here, so the table itself never sorts.\n */\nexport const useDataTableView = (props: DataTableProps) => {\n const {\n data,\n hiddenColumns,\n getRowId,\n compactHeaders,\n columnRenderers,\n columnTypes,\n groupableColumns,\n filterableColumns,\n } = props;\n const permanentlyHidden = new Set(hiddenColumns ?? []);\n const baseColumnKeys = Object.keys(data[0] || {}).filter((key) => !permanentlyHidden.has(key));\n const storageKey = resolveDataTableToolbarStorageKey({\n toolbarStorageKey: props.toolbarStorageKey,\n columnKeys: baseColumnKeys,\n });\n const initialState = dataTableInitialState(props);\n const views = useCollectionViews({\n storageKey,\n initialState,\n viewsSource: props.viewsSource,\n defaultViews: props.defaultViews,\n defaultActiveViewId: props.defaultActiveViewId,\n });\n const store = useCollectionViewStore(storageKey, initialState, (state) => state);\n const { settings, filter, sorts } = store;\n const [search, setSearch] = useState(\"\");\n // Typing stays responsive on large tables; the narrowed rows follow a frame later.\n const deferredSearch = useDeferredValue(search);\n\n const orderedColumnKeys = resolveDataTableColumnOrder(baseColumnKeys, settings.columnOrder);\n const visibleColumnKeys = orderedColumnKeys.filter((key) => !settings.hiddenColumns.includes(key));\n const attributes = buildDataTableRendererAttributes(data, orderedColumnKeys, {\n compactHeaders,\n columnRenderers,\n columnTypes,\n groupableColumns,\n filterableColumns,\n });\n const rows = buildDataTableRendererRows(data, orderedColumnKeys, getRowId, columnRenderers);\n const filteredRows = filterRowsByView(rows, filter, attributes);\n const sortedRows = sortRowsByView(filteredRows, sorts, attributes);\n // Hidden columns keep their rules but are not searched: search matches only what the view shows.\n const shownRows = searchRows(sortedRows, deferredSearch, (row) =>\n visibleColumnKeys.flatMap((key) => dataTableCellText(row.sourceRow[key], columnRenderers?.[key])),\n );\n const groupField = findField(attributes, settings.grouping);\n const groups = groupField?.groupable\n ? groupRowsByField(\n shownRows,\n groupField,\n groupRowsByField(rows, groupField).map((group) => group.key),\n )\n : undefined;\n\n return {\n ...store,\n storageKey,\n initialState,\n views,\n search,\n deferredSearch,\n setSearch,\n attributes,\n rows,\n filteredRows,\n shownRows,\n groups,\n orderedColumnKeys,\n visibleColumnKeys,\n };\n};\n","import { Box, Flex, Table } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { DataTableHeader } from \"./data-table-header\";\nimport { DataTableRowDisplayMenu } from \"./data-table-row-display\";\nimport { resolveSelectionActions, shouldEnableSelection } from \"./data-table-state\";\nimport { EditModeDataTableBody } from \"./edit-mode-data-table-body\";\nimport { EditModeDataTableHeader } from \"./edit-mode-data-table-header\";\nimport { EditModeSelectionHeader } from \"./edit-mode-data-table-selection\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { SelectionToolbar } from \"./selection-toolbar\";\nimport type { DataTableEditModeColumn, DataTableProps, RowData } from \"./types\";\nimport { useDataTableView } from \"./use-data-table-view\";\n\nconst createId = (kind: \"column\" | \"row\") => {\n const unique = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n return `${kind}-${unique}`;\n};\n\ninterface ActiveCell {\n rowId: string;\n columnId: string;\n draft: string;\n}\n\ninterface ActiveHeader {\n columnId: string;\n draft: string;\n}\n\nexport const EditModeDataTable = (props: DataTableProps) => {\n const {\n data,\n editMode,\n fullWidth = false,\n initialPageSize = 30,\n pageSizeOptions = [10, 20, 30, 50],\n isReadOnly = true,\n getRowId,\n columnIcons,\n toolbarStorageKey,\n } = props;\n const [pageIndex, setPageIndex] = useState(0);\n const [pageSize, setPageSize] = useState(() => Math.min(Math.max(initialPageSize, 1), 50));\n const [activeCell, setActiveCell] = useState<ActiveCell | null>(null);\n const [activeHeader, setActiveHeader] = useState<ActiveHeader | null>(null);\n const [selectedRowIds, setSelectedRowIds] = useState<Set<string>>(() => new Set());\n const columns = editMode?.columns ?? [];\n const columnKeys = columns.map((column) => column.id);\n // Edit mode owns its columns, so keys outside them, such as row ids, never become view fields.\n const view = useDataTableView({\n ...props,\n compactHeaders: Object.fromEntries(columns.map((column) => [column.id, column.label])),\n hiddenColumns: Object.keys(data[0] ?? {}).filter((key) => !columnKeys.includes(key)),\n });\n const wrapRows = view.settings.wrapRows;\n const setWrapRows = (next: boolean) => view.setSettings({ wrapRows: next });\n const filteredRendererRows = view.shownRows;\n const filteredData = filteredRendererRows.map((row) => row.sourceRow);\n const cappedPageSizeOptions = [...new Set(pageSizeOptions.filter((option) => option > 0 && option <= 50))];\n const pageCount = Math.max(Math.ceil(filteredData.length / pageSize), 1);\n const pageRows = filteredData.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize);\n let tableWidth = \"fit-content\";\n if (fullWidth) tableWidth = isReadOnly ? \"100%\" : \"calc(100% + var(--chakra-spacing-10))\";\n const enableSelection = shouldEnableSelection(props);\n const selectionActions = resolveSelectionActions(props);\n\n useEffect(() => {\n if (pageIndex < pageCount) return;\n setPageIndex(pageCount - 1);\n }, [pageCount, pageIndex]);\n\n useEffect(() => {\n const visibleIds = new Set(filteredRendererRows.map((row) => row.id));\n setSelectedRowIds((current) => {\n const next = new Set([...current].filter((rowId) => visibleIds.has(rowId)));\n const isUnchanged = next.size === current.size && [...next].every((rowId) => current.has(rowId));\n return isUnchanged ? current : next;\n });\n }, [filteredRendererRows]);\n\n if (!editMode) return null;\n\n const rowIdFor = (row: RowData, index: number) => getRowId?.(row, index) ?? String(row.id ?? index);\n\n const commitCell = () => {\n if (!activeCell) return;\n\n editMode.onDataChange(\n data.map((row, index) =>\n rowIdFor(row, index) === activeCell.rowId ? { ...row, [activeCell.columnId]: activeCell.draft } : row,\n ),\n );\n setActiveCell(null);\n };\n\n const updateColumn = (columnId: string, update: Partial<DataTableEditModeColumn>) => {\n editMode.onColumnsChange(\n columns.map((column) => (column.id === columnId ? { ...column, ...update, id: column.id } : column)),\n );\n };\n\n const commitHeader = () => {\n if (!activeHeader) return;\n updateColumn(activeHeader.columnId, { label: activeHeader.draft });\n setActiveHeader(null);\n };\n\n const addColumn = () => {\n const id = createId(\"column\");\n editMode.onColumnsChange([...columns, { id, label: `Column ${columns.length + 1}`, alignment: null }]);\n };\n\n const removeColumn = (columnId: string) => {\n if (columns.length === 1) return;\n editMode.onColumnsChange(columns.filter((column) => column.id !== columnId));\n if (activeHeader?.columnId === columnId) setActiveHeader(null);\n };\n\n const addRow = () => {\n const row = Object.fromEntries(columns.map((column) => [column.id, \"\"]));\n row.id = createId(\"row\");\n editMode.onDataChange([...data, row]);\n };\n\n const changePageSize = (nextPageSize: number) => {\n setPageSize(Math.min(nextPageSize, 50));\n setPageIndex(0);\n };\n\n const removeRow = (rowId: string) => {\n editMode.onDataChange(data.filter((row, index) => rowIdFor(row, index) !== rowId));\n };\n\n const toggleRowSelection = (rowId: string, checked: boolean) => {\n setSelectedRowIds((current) => {\n const next = new Set(current);\n if (checked) next.add(rowId);\n else next.delete(rowId);\n return next;\n });\n };\n\n const allRowsSelected = filteredRendererRows.length > 0 && selectedRowIds.size === filteredRendererRows.length;\n const selectedRows = filteredRendererRows.filter((row) => selectedRowIds.has(row.id)).map((row) => row.sourceRow);\n const rowDisplayControl = (\n <DataTableRowDisplayMenu compact={!toolbarStorageKey} wrapRows={wrapRows} onWrapRowsChange={setWrapRows} />\n );\n\n return (\n <Flex direction=\"column\" width=\"100%\" gap=\"2xs\">\n {toolbarStorageKey ? (\n <DataTableHeader view={view} viewsSource={props.viewsSource} displayControl={rowDisplayControl} />\n ) : null}\n <Box position=\"relative\" width=\"100%\">\n <ScrollArea\n data-table-scroll-area\n maxWidth=\"100%\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n viewportProps={{ overflowY: \"hidden\" }}\n >\n <Table.Root\n data-edit-mode=\"true\"\n size=\"sm\"\n tableLayout=\"fixed\"\n width={tableWidth}\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n >\n <colgroup>\n <Box as=\"col\" width=\"9\" />\n {enableSelection ? <Box as=\"col\" width=\"9\" /> : null}\n {columns.map((column) => (\n <col key={column.id} />\n ))}\n {!isReadOnly ? <Box as=\"col\" width=\"10\" /> : null}\n </colgroup>\n <EditModeDataTableHeader\n activeHeader={activeHeader}\n columnIcons={columnIcons}\n columns={columns}\n data={data}\n editMode={editMode}\n isReadOnly={isReadOnly}\n rowDisplayControl={toolbarStorageKey ? undefined : rowDisplayControl}\n onAddColumn={addColumn}\n onCancelHeaderEdit={() => setActiveHeader(null)}\n onDeleteColumn={removeColumn}\n onHeaderDraftChange={(draft) => setActiveHeader((current) => (current ? { ...current, draft } : current))}\n onHeaderEdit={(column) => setActiveHeader({ columnId: column.id, draft: column.label })}\n onSaveHeader={commitHeader}\n selectionHeader={\n enableSelection ? (\n <EditModeSelectionHeader\n checked={allRowsSelected}\n indeterminate={selectedRowIds.size > 0 && !allRowsSelected}\n onChange={(checked) =>\n setSelectedRowIds(checked ? new Set(filteredRendererRows.map((row) => row.id)) : new Set())\n }\n />\n ) : undefined\n }\n />\n <EditModeDataTableBody\n activeCell={activeCell}\n columns={columns}\n data={data}\n editMode={editMode}\n enableSelection={enableSelection}\n isReadOnly={isReadOnly}\n pageIndex={pageIndex}\n pageRows={pageRows}\n pageSize={pageSize}\n selectedRowIds={selectedRowIds}\n showNewRow={pageIndex === pageCount - 1}\n wrapRows={wrapRows}\n onActivateCell={setActiveCell}\n onAddRow={addRow}\n onCancelCell={() => setActiveCell(null)}\n onCommitCell={commitCell}\n onDraftChange={setActiveCell}\n onRemoveRow={removeRow}\n onToggleRowSelection={toggleRowSelection}\n rowIdFor={rowIdFor}\n />\n </Table.Root>\n </ScrollArea>\n {enableSelection && selectedRows.length > 0 ? (\n <SelectionToolbar\n selectedCount={selectedRows.length}\n totalCount={filteredRendererRows.length}\n onClearSelection={() => setSelectedRowIds(new Set())}\n onSelectAll={() => setSelectedRowIds(new Set(filteredRendererRows.map((row) => row.id)))}\n actions={selectionActions}\n selectedRows={selectedRows}\n />\n ) : null}\n </Box>\n {pageCount > 1 ? (\n <PaginationFooter\n pageCount={pageCount}\n pageIndex={pageIndex}\n pageSize={pageSize}\n pageSizeOptions={cappedPageSizeOptions}\n onPageChange={setPageIndex}\n onPageSizeChange={changePageSize}\n />\n ) : null}\n </Flex>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { type ComponentType, useEffect, useState } from \"react\";\nimport { installPrismGlobal } from \"@/utils/prism\";\nimport type { MarkdownEditorProps } from \"./markdown-editor/markdown-editor\";\n\nexport const LazyMarkdownEditor = (props: MarkdownEditorProps) => {\n const [Editor, setEditor] = useState<ComponentType<MarkdownEditorProps> | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n void (async () => {\n await installPrismGlobal();\n const module = await import(\"./markdown-editor/markdown-editor\");\n if (!cancelled) setEditor(() => module.MarkdownEditor);\n })();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n if (!Editor) return <Box minH=\"7rem\" borderWidth=\"1px\" borderColor=\"border\" borderRadius=\"xs\" />;\n\n return <Editor {...props} />;\n};\n","import type { Paragraph, PhrasingContent, Root, RootContent } from \"mdast\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { gfmFromMarkdown, gfmToMarkdown } from \"mdast-util-gfm\";\nimport { mathFromMarkdown, mathToMarkdown } from \"mdast-util-math\";\nimport { toMarkdown } from \"mdast-util-to-markdown\";\nimport { gfm } from \"micromark-extension-gfm\";\nimport { math } from \"micromark-extension-math\";\n\nconst parserOptions = {\n extensions: [gfm(), math()],\n mdastExtensions: [gfmFromMarkdown(), mathFromMarkdown()],\n};\n\nconst serializerOptions = {\n bullet: \"-\" as const,\n emphasis: \"*\" as const,\n extensions: [gfmToMarkdown(), mathToMarkdown()],\n fence: \"`\" as const,\n fences: true,\n listItemIndent: \"one\" as const,\n rule: \"-\" as const,\n strong: \"*\" as const,\n};\n\nconst fenceStart = (line: string) => line.match(/^ {0,3}(`{3,}|~{3,})/);\n\nconst normalizeLegacyInlineMath = (line: string) => {\n let codeFenceLength: number | null = null;\n let result = \"\";\n\n for (let index = 0; index < line.length; ) {\n if (line[index] === \"`\") {\n let end = index;\n while (line[end] === \"`\") end += 1;\n const length = end - index;\n\n if (codeFenceLength === null) codeFenceLength = length;\n else if (codeFenceLength === length) codeFenceLength = null;\n\n result += line.slice(index, end);\n index = end;\n continue;\n }\n\n const delimiter = line.slice(index, index + 2);\n if (codeFenceLength === null && (delimiter === \"\\\\(\" || delimiter === \"\\\\)\")) {\n result += \"$\";\n index += 2;\n continue;\n }\n if (codeFenceLength === null && (delimiter === \"\\\\[\" || delimiter === \"\\\\]\")) {\n result += \"$$\";\n index += 2;\n continue;\n }\n\n result += line[index];\n index += 1;\n }\n\n return result;\n};\n\nconst normalizeLegacyMath = (markdown: string) => {\n let fencedCode: { character: string; length: number } | null = null;\n const normalized: string[] = [];\n\n for (const line of markdown.split(\"\\n\")) {\n if (fencedCode) {\n normalized.push(line);\n const closingFence = line.match(/^ {0,3}(`+|~+)[ \\t]*$/)?.[1];\n if (closingFence?.[0] === fencedCode.character && closingFence.length >= fencedCode.length) {\n fencedCode = null;\n }\n continue;\n }\n\n const openingFence = fenceStart(line)?.[1];\n if (openingFence) {\n fencedCode = { character: openingFence[0] ?? \"`\", length: openingFence.length };\n normalized.push(line);\n continue;\n }\n\n const displayMath = line.match(/^( {0,3})\\\\\\[\\s*(.*?)\\s*\\\\\\][ \\t]*$/);\n if (displayMath) {\n const indent = displayMath[1] ?? \"\";\n normalized.push(`${indent}$$`, displayMath[2] ?? \"\", `${indent}$$`);\n continue;\n }\n\n if (/^ {0,3}\\\\\\[[ \\t]*$/.test(line)) {\n normalized.push(line.replace(\"\\\\[\", () => \"$$\"));\n continue;\n }\n if (/^ {0,3}\\\\\\][ \\t]*$/.test(line)) {\n normalized.push(line.replace(\"\\\\]\", () => \"$$\"));\n continue;\n }\n\n normalized.push(normalizeLegacyInlineMath(line));\n }\n\n return normalized.join(\"\\n\");\n};\n\nexport const parseMarkdown = (markdown: string) => fromMarkdown(normalizeLegacyMath(markdown), parserOptions);\n\nexport const parseMarkdownSource = (markdown: string) => fromMarkdown(markdown, parserOptions);\n\nexport const serializeMarkdownAst = (tree: Root) => toMarkdown(tree, serializerOptions).trimEnd();\n\nexport const serializeMarkdownBlock = (node: RootContent) => serializeMarkdownAst({ type: \"root\", children: [node] });\n\nexport const serializeMarkdownInline = (children: PhrasingContent[]) => {\n const paragraph: Paragraph = { type: \"paragraph\", children };\n return serializeMarkdownBlock(paragraph);\n};\n\nexport const parseMarkdownInline = (markdown: string) => {\n const tree = parseMarkdown(markdown);\n const first = tree.children[0];\n\n return first?.type === \"paragraph\" || first?.type === \"heading\" ? first.children : [];\n};\n","export type MarkdownUrlKind = \"link\" | \"image\";\n\nexport type MarkdownUrlResolver = (source: string, kind: MarkdownUrlKind) => string | null;\n\nconst SAFE_LINK_PROTOCOLS = new Set([\"http:\", \"https:\", \"mailto:\", \"sms:\", \"tel:\"]);\nconst SAFE_IMAGE_DATA_URL = /^data:image\\/(?:png|gif|jpeg|webp);base64,[a-z0-9+/=]+$/i;\nconst PROTOCOL = /^[a-z][a-z\\d+.-]*:/i;\n\nconst hasSafeLinkProtocol = (source: string) => {\n if (source.startsWith(\"#\") || source.startsWith(\"/\") || source.startsWith(\"./\") || source.startsWith(\"../\")) {\n return true;\n }\n\n if (!PROTOCOL.test(source)) return true;\n\n try {\n return SAFE_LINK_PROTOCOLS.has(new URL(source).protocol);\n } catch {\n return false;\n }\n};\n\nconst hasSafeImageProtocol = (source: string) => {\n if (source.startsWith(\"https://\")) return true;\n return SAFE_IMAGE_DATA_URL.test(source);\n};\n\nexport const resolveMarkdownUrl = (source: string, kind: MarkdownUrlKind, resolver?: MarkdownUrlResolver) => {\n const resolved = resolver ? resolver(source, kind) : source;\n if (resolved === null) return null;\n\n if (kind === \"image\") {\n const sourceIsRelative = !PROTOCOL.test(source);\n if (sourceIsRelative && !resolver) return null;\n return hasSafeImageProtocol(resolved) ? resolved : null;\n }\n\n return hasSafeLinkProtocol(resolved) ? resolved : null;\n};\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport type { MarkdownUrlResolver } from \"./markdown-url\";\n\nconst MarkdownUrlContext = createContext<MarkdownUrlResolver | undefined>(undefined);\n\ninterface MarkdownUrlProviderProps {\n children: ReactNode;\n resolver?: MarkdownUrlResolver;\n}\n\nexport const MarkdownUrlProvider = (props: MarkdownUrlProviderProps) => {\n const { children, resolver } = props;\n return <MarkdownUrlContext.Provider value={resolver}>{children}</MarkdownUrlContext.Provider>;\n};\n\nexport const useMarkdownUrlResolver = () => useContext(MarkdownUrlContext);\n","import { createContext, useContext } from \"react\";\nimport { resolveMarkdownUrl } from \"@/components/rich-text/shared/markdown-url\";\nimport type { ChatMessagePart, SessionMessage } from \"../components/message-types\";\nimport { type ChatLinkHandler, parseChatLink } from \"./chat-link\";\n\nconst imageSourceKey = (source: string, handler?: ChatLinkHandler) => {\n const parsed = parseChatLink({ source, origin: \"markdown\" });\n if (parsed?.kind !== \"file\") return undefined;\n return handler?.resolveHref({ source, origin: \"markdown\" }) ?? parsed.path;\n};\n\nconst addCapturedImages = (sources: ReadonlyMap<string, string>, part: ChatMessagePart, handler?: ChatLinkHandler) => {\n if (part.type !== \"tool\" || !Array.isArray(part.state?.output)) return sources;\n let next: Map<string, string> | undefined;\n for (const image of part.state.output) {\n if (image?.type !== \"image\" || typeof image.source !== \"string\" || typeof image.src !== \"string\") continue;\n const key = imageSourceKey(image.source, handler);\n const src = resolveMarkdownUrl(image.src, \"image\");\n if (!key || !src) continue;\n next ??= new Map(sources);\n next.set(key, src);\n }\n return next ?? sources;\n};\n\n// Display normalization keeps the original parts, even when it combines activity messages.\nexport const indexChatImageSources = (messages: SessionMessage[], handler?: ChatLinkHandler) => {\n const index = new WeakMap<ChatMessagePart, ReadonlyMap<string, string>>();\n let sources: ReadonlyMap<string, string> = new Map();\n for (const message of messages)\n for (const part of message.parts) {\n sources = addCapturedImages(sources, part, handler);\n index.set(part, sources);\n }\n return index;\n};\n\nexport const capturedChatImageSource = (\n sources: ReadonlyMap<string, string>,\n source: string,\n handler?: ChatLinkHandler,\n) => {\n const key = imageSourceKey(source, handler);\n return key ? sources.get(key) : undefined;\n};\nexport const ChatImageHistoryContext = createContext(new WeakMap<ChatMessagePart, ReadonlyMap<string, string>>());\nexport const useChatImageHistory = () => useContext(ChatImageHistoryContext);\nexport const ChatImageSourcesContext = createContext<ReadonlyMap<string, string>>(new Map());\nexport const useChatImageSources = () => useContext(ChatImageSourcesContext);\n","import { Box, Image, Text } from \"@chakra-ui/react\";\nimport {\n $applyNodeReplacement,\n $getNodeByKey,\n $getSelection,\n $isRangeSelection,\n DecoratorNode,\n type LexicalEditor,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport { capturedChatImageSource, useChatImageSources } from \"@/components/chat-ui/links/chat-image-sources\";\nimport type { ChatLinkHandler } from \"@/components/chat-ui/links/chat-link\";\nimport { useChatLinkHandler } from \"@/components/chat-ui/links/chat-link-context\";\nimport { resolveMarkdownUrl } from \"../markdown-url\";\nimport { useMarkdownUrlResolver } from \"../markdown-url-context\";\n\nexport type SerializedMarkdownImageNode = Spread<\n { source: string; alt: string; title: string | null },\n SerializedLexicalNode\n>;\n\ninterface MarkdownImageProps {\n source: string;\n alt: string;\n title: string | null;\n onLoad?: () => void;\n}\n\nexport const MarkdownImage = (props: MarkdownImageProps) => {\n const { source, alt, title, onLoad } = props;\n const resolver = useMarkdownUrlResolver();\n const handler = useChatLinkHandler();\n const captured = capturedChatImageSource(useChatImageSources(), source, handler);\n const [loaded, setLoaded] = useState<{ source: string; handler: ChatLinkHandler; value: string | null }>();\n const direct = captured ?? resolveMarkdownUrl(source, \"image\", resolver);\n const resolved =\n direct ??\n (loaded?.source === source && loaded.handler === handler && loaded.value\n ? resolveMarkdownUrl(loaded.value, \"image\")\n : null);\n useEffect(() => {\n if (direct || !handler?.resolveImageSource) return;\n let current = true;\n void handler\n .resolveImageSource(source)\n .catch(() => null)\n .then((value) => {\n if (current) setLoaded({ source, handler, value });\n });\n return () => {\n current = false;\n };\n }, [direct, source, handler]);\n\n if (!resolved) {\n return (\n <Box as=\"span\" display=\"inline-block\" paddingX=\"xs\" paddingY=\"2xs\" background=\"bg.muted\" borderRadius=\"sm\">\n <Text as=\"span\" textStyle=\"label/S/regular\" color=\"fg.muted\">\n {alt || \"Image\"}\n </Text>\n </Box>\n );\n }\n\n return (\n <Image\n src={resolved}\n alt={alt}\n title={title ?? undefined}\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n onLoad={onLoad}\n />\n );\n};\n\nexport class MarkdownImageNode extends DecoratorNode<ReactNode> {\n __source: string;\n __alt: string;\n __title: string | null;\n\n static getType() {\n return \"markdown-image\";\n }\n\n static clone(node: MarkdownImageNode) {\n return new MarkdownImageNode(node.__source, node.__alt, node.__title, node.__key);\n }\n\n constructor(source: string, alt: string, title: string | null = null, key?: NodeKey) {\n super(key);\n this.__source = source;\n this.__alt = alt;\n this.__title = title;\n }\n\n createDOM() {\n return document.createElement(\"span\");\n }\n\n updateDOM() {\n return false;\n }\n\n isInline() {\n return true;\n }\n\n getSource() {\n return this.__source;\n }\n\n getAlt() {\n return this.__alt;\n }\n\n getTitle() {\n return this.__title;\n }\n\n getTextContent() {\n return this.__alt;\n }\n\n exportJSON(): SerializedMarkdownImageNode {\n return {\n type: \"markdown-image\",\n version: 1,\n source: this.__source,\n alt: this.__alt,\n title: this.__title,\n };\n }\n\n static importJSON(node: SerializedMarkdownImageNode) {\n return $createMarkdownImageNode(node.source, node.alt, node.title);\n }\n\n decorate(editor: LexicalEditor) {\n const keepFollowingSelectionVisible = () => {\n if (!editor.isEditable()) return;\n\n let selectedBlockKey: NodeKey | null = null;\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n const imageNode = $getNodeByKey(this.getKey());\n if (!$isRangeSelection(selection) || !selection.isCollapsed() || !imageNode) return;\n\n const imageBlock = imageNode.getTopLevelElement();\n const followingBlock = imageBlock?.getNextSibling();\n const followingBlockKey = followingBlock?.getKey();\n const selectionBlock = selection.anchor.getNode().getTopLevelElement();\n if (followingBlockKey && followingBlockKey === selectionBlock?.getKey()) {\n selectedBlockKey = followingBlockKey;\n }\n });\n\n const blockKey = selectedBlockKey;\n if (!blockKey) return;\n requestAnimationFrame(() => {\n editor.getElementByKey(blockKey)?.scrollIntoView({ block: \"end\" });\n });\n };\n\n return (\n <MarkdownImage\n source={this.__source}\n alt={this.__alt}\n title={this.__title}\n onLoad={keepFollowingSelectionVisible}\n />\n );\n }\n}\n\nexport const $createMarkdownImageNode = (source: string, alt: string, title: string | null = null) =>\n $applyNodeReplacement(new MarkdownImageNode(source, alt, title));\n\nexport const $isMarkdownImageNode = (node: LexicalNode | null | undefined): node is MarkdownImageNode =>\n node instanceof MarkdownImageNode;\n","import DOMPurify from \"dompurify\";\nimport {\n $applyNodeReplacement,\n DecoratorNode,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport { resolveMarkdownUrl } from \"../markdown-url\";\nimport { useMarkdownUrlResolver } from \"../markdown-url-context\";\n\nexport type RawHtmlDisplay = \"inline\" | \"block\";\n\nexport type SerializedRawHtmlNode = Spread<{ source: string; display: RawHtmlDisplay }, SerializedLexicalNode>;\n\nconst isHtmlComment = (source: string) => /^<!--[\\s\\S]*-->$/.test(source.trim());\n\nconst sanitizeMarkdownHtml = (source: string, resolver: ReturnType<typeof useMarkdownUrlResolver>) => {\n if (typeof document === \"undefined\") return null;\n\n const clean = DOMPurify.sanitize(source, {\n FORBID_TAGS: [\"script\", \"style\", \"iframe\", \"object\", \"embed\", \"form\", \"input\", \"button\", \"textarea\", \"select\"],\n });\n const template = document.createElement(\"template\");\n template.innerHTML = clean;\n\n for (const element of template.content.querySelectorAll<HTMLElement>(\"[href], [src]\")) {\n const attribute = element.hasAttribute(\"href\") ? \"href\" : \"src\";\n const kind = attribute === \"href\" ? \"link\" : \"image\";\n const sourceUrl = element.getAttribute(attribute) ?? \"\";\n const resolved = resolveMarkdownUrl(sourceUrl, kind, resolver);\n\n if (resolved) element.setAttribute(attribute, resolved);\n else element.removeAttribute(attribute);\n }\n\n return template.content;\n};\n\ninterface RawHtmlProps {\n source: string;\n display: RawHtmlDisplay;\n}\n\nexport const RawHtml = (props: RawHtmlProps) => {\n const { source, display } = props;\n const resolver = useMarkdownUrlResolver();\n const elementRef = useRef<HTMLElement | null>(null);\n const attachElement = (element: HTMLElement | null) => {\n elementRef.current = element;\n };\n\n useEffect(() => {\n const fragment = sanitizeMarkdownHtml(source, resolver);\n const element = elementRef.current;\n if (!element) return;\n\n element.replaceChildren(fragment ? fragment.cloneNode(true) : document.createTextNode(\"\"));\n }, [resolver, source]);\n\n if (isHtmlComment(source)) return null;\n if (display === \"inline\") return <span ref={attachElement} />;\n return <div ref={attachElement} />;\n};\n\nexport class RawHtmlNode extends DecoratorNode<ReactNode> {\n __source: string;\n __display: RawHtmlDisplay;\n\n static getType() {\n return \"raw-html\";\n }\n\n static clone(node: RawHtmlNode) {\n return new RawHtmlNode(node.__source, node.__display, node.__key);\n }\n\n constructor(source: string, display: RawHtmlDisplay, key?: NodeKey) {\n super(key);\n this.__source = source;\n this.__display = display;\n }\n\n createDOM() {\n return document.createElement(this.__display === \"inline\" ? \"span\" : \"div\");\n }\n\n updateDOM(previous: RawHtmlNode) {\n return previous.__display !== this.__display;\n }\n\n isInline() {\n return this.__display === \"inline\";\n }\n\n getSource() {\n return this.__source;\n }\n\n getDisplay() {\n return this.__display;\n }\n\n getTextContent() {\n return isHtmlComment(this.__source) ? \"\" : this.__source;\n }\n\n exportJSON(): SerializedRawHtmlNode {\n return {\n type: \"raw-html\",\n version: 1,\n source: this.__source,\n display: this.__display,\n };\n }\n\n static importJSON(node: SerializedRawHtmlNode) {\n return $createRawHtmlNode(node.source, node.display);\n }\n\n decorate() {\n return <RawHtml source={this.__source} display={this.__display} />;\n }\n}\n\nexport const $createRawHtmlNode = (source: string, display: RawHtmlDisplay) =>\n $applyNodeReplacement(new RawHtmlNode(source, display));\n\nexport const $isRawHtmlNode = (node: LexicalNode | null | undefined): node is RawHtmlNode =>\n node instanceof RawHtmlNode;\n","import { Box, Code, Link, Text } from \"@chakra-ui/react\";\nimport type { PhrasingContent } from \"mdast\";\nimport { Fragment, type ReactNode } from \"react\";\nimport { parseChatLink } from \"@/components/chat-ui/links/chat-link\";\nimport { ChatLinkAnchor } from \"@/components/chat-ui/links/chat-link-anchor\";\nimport { useChatLinkHandler } from \"@/components/chat-ui/links/chat-link-context\";\nimport { parseMarkdownInline } from \"./markdown-ast\";\nimport { resolveMarkdownUrl } from \"./markdown-url\";\nimport { useMarkdownUrlResolver } from \"./markdown-url-context\";\nimport { MarkdownImage } from \"./nodes/MarkdownImageNode\";\nimport { RawHtml } from \"./nodes/RawHtmlNode\";\n\ninterface MarkdownInlineProps {\n value: string;\n}\n\ninterface InlineChildrenProps {\n nodes: PhrasingContent[];\n}\n\nconst InlineChildren = (props: InlineChildrenProps) => {\n const { nodes } = props;\n const resolver = useMarkdownUrlResolver();\n const handler = useChatLinkHandler();\n\n return nodes.map((node, index): ReactNode => {\n const key = `${node.type}-${index}`;\n\n switch (node.type) {\n case \"text\":\n return <Fragment key={key}>{node.value}</Fragment>;\n case \"strong\":\n return (\n <Text as=\"strong\" key={key} fontWeight=\"semibold\">\n <InlineChildren nodes={node.children} />\n </Text>\n );\n case \"emphasis\":\n return (\n <Box as=\"em\" key={key}>\n <InlineChildren nodes={node.children} />\n </Box>\n );\n case \"delete\":\n return (\n <Box as=\"del\" key={key}>\n <InlineChildren nodes={node.children} />\n </Box>\n );\n case \"inlineCode\":\n return (\n <ChatLinkAnchor key={key} candidate={{ source: node.value, origin: \"inline-code\" }}>\n <Code>{node.value}</Code>\n </ChatLinkAnchor>\n );\n case \"break\":\n return <br key={key} />;\n case \"link\": {\n const candidate = { source: node.url, origin: \"markdown\" as const };\n const parsed = parseChatLink(candidate, typeof window === \"undefined\" ? undefined : window.location.origin);\n if (handler && parsed && (parsed.kind !== \"external\" || handler.resolveHref(candidate)))\n return (\n <ChatLinkAnchor key={key} candidate={candidate}>\n <InlineChildren nodes={node.children} />\n </ChatLinkAnchor>\n );\n const href = resolveMarkdownUrl(node.url, \"link\", resolver);\n if (!href) return <InlineChildren key={key} nodes={node.children} />;\n return (\n <Link key={key} href={href} title={node.title ?? undefined} target=\"_blank\" rel=\"noopener noreferrer\">\n <InlineChildren nodes={node.children} />\n </Link>\n );\n }\n case \"image\":\n return <MarkdownImage key={key} source={node.url} alt={node.alt ?? \"\"} title={node.title ?? null} />;\n case \"html\":\n return <RawHtml key={key} source={node.value} display=\"inline\" />;\n case \"inlineMath\":\n return <Code key={key}>{node.value}</Code>;\n default:\n return null;\n }\n });\n};\n\nexport const MarkdownInline = (props: MarkdownInlineProps) => {\n const { value } = props;\n return <InlineChildren nodes={parseMarkdownInline(value)} />;\n};\n","import { Box } from \"@chakra-ui/react\";\nimport {\n $applyNodeReplacement,\n $createParagraphNode,\n $getNodeByKey,\n DecoratorNode,\n HISTORY_PUSH_TAG,\n type LexicalEditor,\n type LexicalNode,\n type NodeKey,\n REDO_COMMAND,\n type SerializedLexicalNode,\n type Spread,\n UNDO_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type FocusEvent, type KeyboardEvent, type MouseEvent, useRef, useState } from \"react\";\nimport { EditModeDataTable } from \"@/components/data-table/edit-mode-data-table\";\nimport type { DataTableEditModeColumn, RowData } from \"@/components/data-table/types\";\nimport { LazyMarkdownEditor } from \"../../lazy-markdown-editor\";\nimport { MarkdownInline } from \"../markdown-inline\";\nimport type { MarkdownTableValue } from \"../markdown-table\";\n\ninterface MarkdownDataTableProps {\n editor: LexicalEditor;\n nodeKey: NodeKey;\n table: MarkdownTableValue;\n}\n\nconst projectRows = (table: MarkdownTableValue): RowData[] => table.rows.map((row) => ({ id: row.id, ...row.cells }));\n\nconst projectColumns = (table: MarkdownTableValue): DataTableEditModeColumn[] => table.columns;\n\nconst MarkdownDataTable = (props: MarkdownDataTableProps) => {\n const { editor, nodeKey, table } = props;\n const [isSelected, setSelected] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const focusTable = () => {\n setTimeout(() => containerRef.current?.focus(), 0);\n };\n\n const updateTable = (change: (current: MarkdownTableValue) => MarkdownTableValue) => {\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey);\n if ($isDataTableNode(node)) node.setTable(change(node.getTable()));\n },\n { tag: HISTORY_PUSH_TAG },\n );\n focusTable();\n };\n\n const handleColumnsChange = (columns: DataTableEditModeColumn[]) => {\n updateTable((current) => ({\n columns,\n rows: current.rows.map((row) => ({\n ...row,\n cells: Object.fromEntries(columns.map((column) => [column.id, row.cells[column.id] ?? \"\"])),\n })),\n }));\n };\n\n const handleDataChange = (data: RowData[]) => {\n updateTable((current) => ({\n ...current,\n rows: data.map((row, index) => ({\n id: String(row.id ?? current.rows[index]?.id ?? `row-${index + 1}`),\n cells: Object.fromEntries(current.columns.map((column) => [column.id, String(row[column.id] ?? \"\")])),\n })),\n }));\n };\n\n const deleteTable = () => {\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey);\n if ($isDataTableNode(node)) {\n const paragraph = $createParagraphNode();\n node.replace(paragraph);\n paragraph.select();\n }\n },\n { tag: HISTORY_PUSH_TAG },\n );\n setTimeout(() => editor.focus(), 0);\n };\n\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"button, input, textarea, [contenteditable='true'], [role='menuitem']\")) return;\n\n event.preventDefault();\n containerRef.current?.focus();\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setSelected(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n const isTextInput = target.matches(\"input, textarea\") || target.isContentEditable;\n const isUndo = (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"z\";\n\n if (isUndo && !isTextInput) {\n event.preventDefault();\n event.stopPropagation();\n editor.dispatchCommand(event.shiftKey ? REDO_COMMAND : UNDO_COMMAND, undefined);\n return;\n }\n\n if (isTextInput) return;\n\n if (isSelected && (event.key === \"Delete\" || event.key === \"Backspace\")) {\n event.preventDefault();\n event.stopPropagation();\n deleteTable();\n }\n };\n\n return (\n <Box\n ref={containerRef}\n data-testid=\"markdown-table-node\"\n data-selected={String(isSelected)}\n aria-label=\"Markdown table\"\n aria-selected={isSelected}\n tabIndex={0}\n outline={isSelected ? \"2px solid\" : \"none\"}\n outlineColor=\"border.accent-light\"\n outlineOffset=\"2px\"\n borderRadius=\"sm\"\n onFocus={() => setSelected(true)}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDownCapture={handleKeyDown}\n >\n <EditModeDataTable\n data={projectRows(table)}\n editMode={{\n columns: projectColumns(table),\n onColumnsChange: handleColumnsChange,\n onDataChange: handleDataChange,\n renderHeader: (column) => <MarkdownInline value={column.label} />,\n renderCell: (context) => <MarkdownInline value={String(context.value ?? \"\")} />,\n renderCellEditor: ({ value, onChange }) => (\n <LazyMarkdownEditor\n autoFocus\n defaultState={value}\n fullWidth\n isEditable\n padding=\"xs\"\n scrollable={false}\n onChange={onChange}\n />\n ),\n }}\n fullWidth\n getRowId={(row) => String(row.id)}\n initialPageSize={30}\n isReadOnly={!editor.isEditable()}\n />\n </Box>\n );\n};\n\nexport class DataTableNode extends DecoratorNode<React.JSX.Element> {\n __table: MarkdownTableValue;\n\n static getType() {\n return \"data_table\";\n }\n\n static clone(node: DataTableNode) {\n return new DataTableNode(node.__table, node.__key);\n }\n\n constructor(table: MarkdownTableValue, key?: NodeKey) {\n super(key);\n this.__table = table;\n }\n\n getTable() {\n return this.getLatest().__table;\n }\n\n setTable(table: MarkdownTableValue) {\n const writable = this.getWritable();\n writable.__table = table;\n }\n\n createDOM() {\n return document.createElement(\"div\");\n }\n\n updateDOM() {\n return false;\n }\n\n decorate(editor: LexicalEditor) {\n return <MarkdownDataTable editor={editor} nodeKey={this.__key} table={this.__table} />;\n }\n\n exportJSON(): SerializedDataTableNode {\n return {\n type: \"data_table\",\n version: 2,\n table: this.__table,\n };\n }\n\n static importJSON(json: SerializedDataTableNode) {\n return $createDataTableNode(json.table);\n }\n\n getTextContent() {\n const headers = this.__table.columns.map((column) => column.label).join(\" | \");\n const separator = this.__table.columns.map(() => \"---\").join(\" | \");\n const rows = this.__table.rows.map((row) =>\n this.__table.columns.map((column) => row.cells[column.id] ?? \"\").join(\" | \"),\n );\n return [headers, separator, ...rows].join(\"\\n\");\n }\n}\n\nexport type SerializedDataTableNode = Spread<\n { table: MarkdownTableValue; type: \"data_table\"; version: 2 },\n SerializedLexicalNode\n>;\n\nexport const $createDataTableNode = (table: MarkdownTableValue) => $applyNodeReplacement(new DataTableNode(table));\n\nexport const $isDataTableNode = (node: LexicalNode | null | undefined): node is DataTableNode =>\n node instanceof DataTableNode;\n","import { type LinkAttributes, LinkNode, type SerializedLinkNode } from \"@lexical/link\";\nimport {\n $applyNodeReplacement,\n type EditorConfig,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from \"lexical\";\nimport { type MarkdownUrlResolver, resolveMarkdownUrl } from \"../markdown-url\";\n\nexport type SerializedMarkdownLinkNode = Spread<{ source: string }, Spread<SerializedLinkNode, SerializedLexicalNode>>;\n\nconst safeLinkUrl = (source: string, resolver?: MarkdownUrlResolver) =>\n resolveMarkdownUrl(source, \"link\", resolver) ?? \"about:blank\";\n\nexport class MarkdownLinkNode extends LinkNode {\n __source: string;\n\n static getType() {\n return \"markdown-link\";\n }\n\n static clone(node: MarkdownLinkNode) {\n return new MarkdownLinkNode(\n node.__source,\n node.__url,\n { rel: node.__rel, target: node.__target, title: node.__title },\n node.__key,\n );\n }\n\n constructor(source = \"\", resolvedUrl?: string | null, attributes?: LinkAttributes, key?: NodeKey) {\n super(resolvedUrl ?? safeLinkUrl(source), attributes, key);\n this.__source = source;\n }\n\n createDOM(config: EditorConfig) {\n const anchor = super.createDOM(config);\n anchor.dataset.chatSource = this.__source;\n anchor.dataset.chatOrigin = \"markdown\";\n return anchor;\n }\n\n updateDOM(previous: this, anchor: HTMLAnchorElement, config: EditorConfig) {\n const changed = super.updateDOM(previous, anchor, config);\n anchor.dataset.chatSource = this.__source;\n return changed;\n }\n\n getSource() {\n return this.__source;\n }\n\n setResolvedURL(url: string) {\n if (this.getURL() !== url) this.getWritable().__url = url;\n return this;\n }\n\n setURL(url: string) {\n const writable = this.getWritable();\n writable.__source = url;\n writable.__url = safeLinkUrl(url);\n return writable;\n }\n\n exportJSON(): SerializedMarkdownLinkNode {\n return {\n ...super.exportJSON(),\n source: this.__source,\n type: \"markdown-link\",\n version: 1,\n };\n }\n\n static importJSON(node: SerializedMarkdownLinkNode) {\n return $createMarkdownLinkNode(node.source, undefined, {\n rel: node.rel,\n target: node.target,\n title: node.title,\n });\n }\n}\n\nexport const $createMarkdownLinkNode = (source: string, resolver?: MarkdownUrlResolver, attributes?: LinkAttributes) =>\n $applyNodeReplacement(new MarkdownLinkNode(source, safeLinkUrl(source, resolver), attributes));\n\nexport const $isMarkdownLinkNode = (node: LexicalNode | null | undefined): node is MarkdownLinkNode =>\n node instanceof MarkdownLinkNode;\n","import katex from \"katex\";\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode, type DOMExportOutput } from \"lexical\";\nimport * as React from \"react\";\nimport { Suspense } from \"react\";\n\nconst EquationComponent = React.lazy(() => import(\"./EquationComponent\"));\n\nexport type SerializedEquationNode = Spread<\n {\n equation: string;\n inline: boolean;\n },\n SerializedLexicalNode\n>;\n\nfunction $convertEquationElement(domNode: HTMLElement): null | DOMConversionOutput {\n let equation = domNode.getAttribute(\"data-lexical-equation\");\n const inline = domNode.getAttribute(\"data-lexical-inline\") === \"true\";\n\n // Decode the equation from base64\n equation = atob(equation || \"\");\n\n if (equation) {\n const node = $createEquationNode(equation, inline);\n return { node };\n }\n\n return null;\n}\n\nexport class EquationNode extends DecoratorNode<React.ReactNode> {\n __equation: string;\n __inline: boolean;\n\n static getType(): string {\n return \"equation\";\n }\n\n static clone(node: EquationNode): EquationNode {\n return new EquationNode(node.__equation, node.__inline, node.__key);\n }\n\n constructor(equation: string, inline?: boolean, key?: NodeKey) {\n super(key);\n this.__equation = equation;\n this.__inline = inline ?? false;\n }\n\n static importJSON(serializedNode: SerializedEquationNode): EquationNode {\n return $createEquationNode(serializedNode.equation, serializedNode.inline);\n }\n\n exportJSON(): SerializedEquationNode {\n return {\n equation: this.getEquation(),\n inline: this.__inline,\n type: \"equation\",\n version: 1,\n };\n }\n\n createDOM(_config: EditorConfig): HTMLElement {\n const element = document.createElement(this.__inline ? \"span\" : \"div\");\n\n // EquationNodes should implement `user-action:none` in their CSS to avoid issues with deletion on Android.\n element.className = \"editor-equation\";\n return element;\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement(this.__inline ? \"span\" : \"div\");\n\n // Encode the equation as base64 to avoid issues with special characters\n const equation = btoa(this.__equation);\n element.setAttribute(\"data-lexical-equation\", equation);\n element.setAttribute(\"data-lexical-inline\", `${this.__inline}`);\n katex.render(this.__equation, element, {\n displayMode: !this.__inline, // true === block display //\n errorColor: \"#cc0000\",\n output: \"html\",\n strict: \"warn\",\n throwOnError: false,\n trust: false,\n });\n\n return { element };\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: (domNode: HTMLElement) => {\n if (!domNode.hasAttribute(\"data-lexical-equation\")) {\n return null;\n }\n\n return {\n conversion: $convertEquationElement,\n priority: 2,\n };\n },\n span: (domNode: HTMLElement) => {\n if (!domNode.hasAttribute(\"data-lexical-equation\")) {\n return null;\n }\n\n return {\n conversion: $convertEquationElement,\n priority: 1,\n };\n },\n };\n }\n\n updateDOM(prevNode: EquationNode): boolean {\n // If the inline property changes, replace the element\n return this.__inline !== prevNode.__inline;\n }\n\n getTextContent(): string {\n return this.__equation;\n }\n\n getEquation(): string {\n return this.__equation;\n }\n\n setEquation(equation: string): void {\n const writable = this.getWritable();\n writable.__equation = equation;\n }\n\n isInline(): boolean {\n return this.__inline;\n }\n\n decorate() {\n return (\n <Suspense fallback={null}>\n <EquationComponent equation={this.__equation} inline={this.__inline} />\n </Suspense>\n );\n }\n}\n\nexport function $createEquationNode(equation = \"\", inline = false): EquationNode {\n const equationNode = new EquationNode(equation, inline);\n return $applyNodeReplacement(equationNode);\n}\n\nexport function $isEquationNode(node: LexicalNode | null | undefined): node is EquationNode {\n return node instanceof EquationNode;\n}\n","import \"./EquationPlugin.css\";\n\nimport type { MultilineElementTransformer, TextMatchTransformer } from \"@lexical/markdown\";\nimport { $createEquationNode, $isEquationNode, EquationNode } from \"./EquationNode.tsx\";\n\nexport const EQUATION_INLINE: TextMatchTransformer = {\n dependencies: [EquationNode],\n export: (node) => {\n if ($isEquationNode(node) && node.isInline()) {\n return `\\\\( ${node.getEquation().trim()} \\\\)`;\n }\n return null;\n },\n importRegExp: /\\\\\\((.*?)\\\\\\)/,\n regExp: /\\\\\\((.*?)\\\\\\)/,\n replace: (textNode, match) => {\n const equationNode = $createEquationNode(match[1].trim(), true);\n textNode.replace(equationNode);\n },\n type: \"text-match\",\n};\n\nexport const EQUATION_MULTILINE: MultilineElementTransformer = {\n dependencies: [EquationNode],\n regExpStart: /\\\\\\[/,\n regExpEnd: /\\\\]/,\n export: (node) => {\n if ($isEquationNode(node) && !node.isInline()) {\n return `\\\\[ ${node.getEquation().trim()} \\\\]`;\n }\n return null;\n },\n replace: (rootNode, _children, _startMatch, _endMatch, linesInBetween) => {\n if (linesInBetween) {\n rootNode.append($createEquationNode(linesInBetween.join(\" \"), false));\n return true;\n }\n return false;\n },\n type: \"multiline-element\",\n};\n\nexport function EquationPlugin(): null {\n return null;\n}\n","import {\n type EditorConfig,\n ElementNode,\n type LexicalEditor,\n type LexicalNode,\n type SerializedElementNode,\n type Spread,\n} from \"lexical\";\n\nexport type SerializedHRNode = Spread<SerializedElementNode, SerializedElementNode>;\n\nexport class HRNode extends ElementNode {\n static getType() {\n return \"hr\";\n }\n\n static clone(node: HRNode) {\n return new HRNode(node?.__key);\n }\n\n static importJSON(_serializedNode: SerializedHRNode) {\n return $createHRNode();\n }\n\n exportJSON(): SerializedHRNode {\n return {\n ...super.exportJSON(),\n };\n }\n\n createDOM(_config: EditorConfig, _editor: LexicalEditor): HTMLElement {\n const element = document.createElement(\"hr\");\n element.style = \"margin: 2rem 0;\";\n return element;\n }\n\n updateDOM(_prevNode: unknown, _dom: HTMLElement, _config: EditorConfig): boolean {\n return false;\n }\n\n decorate(_editor: LexicalEditor) {\n return null;\n }\n}\n\nexport function $createHRNode(): HRNode {\n return new HRNode();\n}\n\nexport function $isHRNode(node: LexicalNode | null | undefined): node is HRNode {\n return node instanceof HRNode;\n}\n","import type { LexicalNode, NodeKey, SerializedLexicalNode } from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode } from \"lexical\";\nimport type { ReactNode } from \"react\";\nimport { lazy, Suspense } from \"react\";\n\nconst MermaidComponent = lazy(() => import(\"./MermaidComponent\"));\n\nexport interface SerializedMermaidNode extends SerializedLexicalNode {\n type: \"mermaid\";\n code: string;\n version: 1;\n}\n\nexport class MermaidNode extends DecoratorNode<ReactNode> {\n __code: string;\n\n static getType() {\n return \"mermaid\";\n }\n\n static clone(node: MermaidNode) {\n return new MermaidNode(node.__code, node.__key);\n }\n\n constructor(code: string, key?: NodeKey) {\n super(key);\n this.__code = code;\n }\n\n createDOM() {\n return document.createElement(\"div\");\n }\n\n updateDOM() {\n return false;\n }\n\n static importJSON(serializedNode: SerializedMermaidNode): MermaidNode {\n return new MermaidNode(serializedNode.code);\n }\n\n exportJSON(): SerializedMermaidNode {\n return {\n type: \"mermaid\",\n code: this.__code,\n version: 1,\n };\n }\n\n getTextContent() {\n return `\\`\\`\\`mermaid\\n${this.__code}\\n\\`\\`\\``;\n }\n\n getCode() {\n return this.__code;\n }\n\n setCode(code: string) {\n const writable = this.getWritable();\n writable.__code = code;\n }\n\n decorate() {\n return (\n <Suspense fallback={null}>\n <MermaidComponent code={this.__code} nodeKey={this.__key} />\n </Suspense>\n );\n }\n}\n\nexport function $isMermaidNode(node: LexicalNode | null | undefined): node is MermaidNode {\n return node instanceof MermaidNode;\n}\n\nexport function $createMermaidNode(code: string) {\n return $applyNodeReplacement(new MermaidNode(code));\n}\n","import type { ElementTransformer } from \"@lexical/markdown\";\nimport type { LexicalNode } from \"lexical\";\nimport { $createHRNode, $isHRNode, HRNode } from \"./HorizontalRuleNode\";\n\nexport const HR: ElementTransformer = {\n dependencies: [HRNode],\n export: (node: LexicalNode) => {\n return $isHRNode(node) ? \"***\" : null;\n },\n regExp: /^(---|\\*\\*\\*|___)\\s?$/,\n replace: (parentNode) => {\n const line = $createHRNode();\n parentNode.replace(line);\n },\n type: \"element\",\n};\n","import {\n $createAutoLinkNode,\n $createLinkNode,\n $isAutoLinkNode,\n $isLinkNode,\n AutoLinkNode,\n LinkNode,\n} from \"@lexical/link\";\nimport type { TextMatchTransformer } from \"@lexical/markdown\";\nimport { $createTextNode, TextNode } from \"lexical\";\nimport { HR } from \"../plugins/HorizontalRulePlugin/horizontalRule\";\n\nexport const UNDERLINE_INS_TAG: TextMatchTransformer = {\n dependencies: [TextNode],\n export: (node, _children) => {\n if (node instanceof TextNode) {\n let markdownText = node.getTextContent();\n\n if (node.hasFormat(\"bold\")) {\n markdownText = `**${markdownText}**`;\n } else if (node.hasFormat(\"italic\")) {\n markdownText = `*${markdownText}*`;\n } else if (node.hasFormat(\"underline\")) {\n markdownText = `<ins>${markdownText}</ins>`;\n } else {\n return null;\n }\n\n return markdownText;\n }\n return null;\n },\n regExp: /<ins>(.*)<\\/ins>/,\n importRegExp: /<ins>(.*)<\\/ins>/,\n replace: (node, match) => {\n const textNode = $createTextNode(match[1]);\n textNode.toggleFormat(\"underline\");\n node.replace(textNode);\n },\n type: \"text-match\",\n};\n\nexport const UNDERLINE_U_TAG: TextMatchTransformer = {\n dependencies: [TextNode],\n export: (_node, _children) => {\n return null;\n },\n regExp: /<u>(.*)<\\/u>/,\n importRegExp: /<u>(.*)<\\/u>/,\n replace: (node, match) => {\n const textNode = $createTextNode(match[1]);\n textNode.toggleFormat(\"underline\");\n node.replace(textNode);\n },\n type: \"text-match\",\n};\n\nconst BARE_URL_REGEXP = /https?:\\/\\/[^\\s<>\"']*[^\\s<>\"'.,:;\"')\\]}]/;\n\n// Strip markdown character escapes that may have leaked into a URL, e.g.\n// `https://example.com/foo\\_bar` -> `https://example.com/foo_bar`.\n// Without this, repeated save/reopen cycles would accumulate backslashes\n// because the URL is stored as both text content and href.\nconst unescapeUrl = (url: string) => url.replace(/\\\\([*_`~\\\\])/g, \"$1\");\n\nconst escapeLinkTitle = (title: string) => title.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n\nconst unescapeLinkTitle = (title: string | undefined) => title?.replace(/\\\\([\"\\\\])/g, \"$1\");\n\nconst normalizeEscapedUrlText = (textContent: string, href: string, exportedText: string) => {\n if (textContent !== href) {\n return exportedText;\n }\n\n const escapedHref = href.replace(/([*_`~\\\\])/g, \"\\\\$1\");\n\n return exportedText.replace(escapedHref, href);\n};\n\nexport const LINK: TextMatchTransformer = {\n dependencies: [LinkNode],\n export: (node, exportChildren) => {\n if (!$isLinkNode(node) || $isAutoLinkNode(node)) {\n return null;\n }\n\n const title = node.getTitle();\n const href = unescapeUrl(node.getURL());\n const textContent = normalizeEscapedUrlText(node.getTextContent(), href, exportChildren(node));\n\n return title != null ? `[${textContent}](${href} \"${escapeLinkTitle(title)}\")` : `[${textContent}](${href})`;\n },\n importRegExp: /(?:\\[(.+?)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))/,\n regExp: /(?:\\[(.+?)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))$/,\n replace: (textNode, match) => {\n const [, linkText, linkUrl, linkTitle] = match;\n const href = unescapeUrl(linkUrl);\n const linkNode = $createLinkNode(href, { title: unescapeLinkTitle(linkTitle) });\n const openBracketAmount = linkText.split(\"[\").length - 1;\n const closeBracketAmount = linkText.split(\"]\").length - 1;\n let parsedLinkText = linkText;\n let outsideLinkText = \"\";\n\n if (openBracketAmount < closeBracketAmount) {\n return;\n }\n\n if (openBracketAmount > closeBracketAmount) {\n const linkTextParts = linkText.split(\"[\");\n outsideLinkText = `[${linkTextParts[0]}`;\n parsedLinkText = linkTextParts.slice(1).join(\"[\");\n }\n\n const normalizedLinkText = unescapeUrl(parsedLinkText);\n const linkTextNode = $createTextNode(normalizedLinkText === href ? href : normalizedLinkText);\n\n linkTextNode.setFormat(textNode.getFormat());\n linkNode.append(linkTextNode);\n textNode.replace(linkNode);\n\n if (outsideLinkText) {\n linkNode.insertBefore($createTextNode(outsideLinkText));\n }\n\n return linkTextNode;\n },\n trigger: \")\",\n type: \"text-match\",\n};\n\nexport const BARE_URL: TextMatchTransformer = {\n dependencies: [AutoLinkNode],\n export: (node, exportChildren) => {\n if (!$isAutoLinkNode(node)) {\n return null;\n }\n\n const href = unescapeUrl(node.getURL());\n\n return normalizeEscapedUrlText(node.getTextContent(), href, exportChildren(node));\n },\n regExp: BARE_URL_REGEXP,\n importRegExp: BARE_URL_REGEXP,\n replace: (textNode, match) => {\n const href = unescapeUrl(match[0]);\n const autoLinkNode = $createAutoLinkNode(href);\n const linkTextNode = $createTextNode(href);\n\n linkTextNode.setFormat(textNode.getFormat());\n autoLinkNode.append(linkTextNode);\n textNode.replace(autoLinkNode);\n },\n type: \"text-match\",\n};\n\nexport const TRANSFORMERS_EXTENDED = [HR, UNDERLINE_INS_TAG, UNDERLINE_U_TAG, LINK, BARE_URL];\n","import { AutoLinkNode, LinkNode } from \"@lexical/link\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { CHECK_LIST, LINK as LEXICAL_LINK, TRANSFORMERS } from \"@lexical/markdown\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport type { Klass, LexicalNode } from \"lexical\";\nimport { REFERENCE_LINK_TRANSFORMER, ReferenceLinkNode } from \"../markdown-editor/plugins/ReferenceLinkPlugin\";\nimport theme from \"../theme/rich-text-theme\";\nimport { CodeHighlightNode, CodeNode } from \"./lexical-code\";\nimport { DataTableNode } from \"./nodes/DataTableNode\";\nimport { MarkdownImageNode } from \"./nodes/MarkdownImageNode\";\nimport { MarkdownLinkNode } from \"./nodes/MarkdownLinkNode\";\nimport { RawHtmlNode } from \"./nodes/RawHtmlNode\";\nimport { EquationNode } from \"./plugins/EquationPlugin/EquationNode\";\nimport { EQUATION_INLINE, EQUATION_MULTILINE } from \"./plugins/EquationPlugin/EquationPlugin\";\nimport { HRNode } from \"./plugins/HorizontalRulePlugin/HorizontalRuleNode\";\nimport { MermaidNode } from \"./plugins/MermaidPlugin/MermaidNode\";\nimport { TRANSFORMERS_EXTENDED } from \"./transformers/markdown-transformers\";\n\nexport const editorNodes: Array<Klass<LexicalNode>> = [\n QuoteNode,\n LinkNode,\n AutoLinkNode,\n MarkdownLinkNode,\n MarkdownImageNode,\n RawHtmlNode,\n DataTableNode,\n HeadingNode,\n ListNode,\n ListItemNode,\n CodeNode,\n CodeHighlightNode,\n MermaidNode,\n EquationNode,\n HRNode,\n ReferenceLinkNode,\n];\n\nexport const baseEditorTransformers = [\n CHECK_LIST,\n ...TRANSFORMERS.filter((transformer) => transformer !== LEXICAL_LINK),\n ...TRANSFORMERS_EXTENDED,\n EQUATION_INLINE,\n EQUATION_MULTILINE,\n];\n\nexport const editorTransformers = [...baseEditorTransformers, REFERENCE_LINK_TRANSFORMER];\n\nexport const editorTheme = theme;\n","import \"./CodeBlockActionsPlugin.css\";\n\nimport { IconButton } from \"@chakra-ui/react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_CRITICAL, SELECTION_CHANGE_COMMAND } from \"lexical\";\nimport { Check, Copy } from \"lucide-react\";\nimport type React from \"react\";\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { $isCodeNode } from \"../../lexical-code\";\n\nfunction getCodeElementFromSelection(editor: ReturnType<typeof useLexicalComposerContext>[0]) {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return null;\n }\n\n const anchorNode = selection.anchor.getNode();\n const codeNode = $isCodeNode(anchorNode)\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n return $isCodeNode(node);\n });\n\n if (!$isCodeNode(codeNode)) {\n return null;\n }\n\n const codeElement = editor.getElementByKey(codeNode.getKey());\n return codeElement instanceof HTMLElement ? codeElement : null;\n}\n\nfunction getCodeElementFromTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return null;\n }\n\n return target.closest(\".rich-text__code\");\n}\n\nfunction getActionPosition(anchorElem: HTMLElement, codeElement: HTMLElement) {\n const anchorRect = anchorElem.getBoundingClientRect();\n const codeRect = codeElement.getBoundingClientRect();\n\n return {\n top: codeRect.top - anchorRect.top + 6,\n left: codeRect.right - anchorRect.left - 30,\n };\n}\n\nexport function CodeBlockActionsPlugin({ anchorElem }: { anchorElem?: HTMLElement | null }): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [activeCodeElement, setActiveCodeElement] = useState<HTMLElement | null>(null);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n const rootElement = editor.getRootElement();\n if (!rootElement) {\n return;\n }\n\n const handlePointerMove = (event: PointerEvent) => {\n const nextCodeElement = getCodeElementFromTarget(event.target);\n setActiveCodeElement(nextCodeElement instanceof HTMLElement ? nextCodeElement : null);\n };\n\n const handlePointerLeave = () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n setActiveCodeElement(selectionCodeElement);\n });\n };\n\n rootElement.addEventListener(\"pointermove\", handlePointerMove);\n rootElement.addEventListener(\"pointerleave\", handlePointerLeave);\n\n return () => {\n rootElement.removeEventListener(\"pointermove\", handlePointerMove);\n rootElement.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (selectionCodeElement) {\n setActiveCodeElement(selectionCodeElement);\n }\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (!selectionCodeElement) {\n setActiveCodeElement((current) => {\n return current?.matches(\":hover\") ? current : null;\n });\n return;\n }\n\n setActiveCodeElement(selectionCodeElement);\n });\n\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n );\n }, [editor]);\n\n if (!anchorElem || !activeCodeElement) {\n return null;\n }\n\n const position = getActionPosition(anchorElem, activeCodeElement);\n const style: CSSProperties = {\n position: \"absolute\",\n top: position.top,\n left: position.left,\n };\n\n return createPortal(\n <div className=\"code-block-actions\" style={style}>\n <Tooltip content={isCopied ? \"Copied\" : \"Copy code\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy code\"}\n variant=\"subtle\"\n size=\"xs\"\n onClick={async () => {\n const code = activeCodeElement.textContent ?? \"\";\n try {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => {\n setIsCopied(false);\n }, 1200);\n } catch {\n setIsCopied(false);\n }\n }}\n >\n {isCopied ? <Check size={14} /> : <Copy size={14} />}\n </IconButton>\n </Tooltip>\n </div>,\n anchorElem,\n );\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $nodesOfType } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { CodeNode } from \"../../lexical-code\";\nimport { MermaidNode } from \"../MermaidPlugin/MermaidNode\";\n\nfunction isMermaidLanguage(language: string) {\n return language.trim().toLowerCase() === \"mermaid\";\n}\n\nexport function replaceCodeNodeWithMermaidNode(node: CodeNode) {\n const language = node.getLanguage() ?? \"plaintext\";\n if (!isMermaidLanguage(language)) {\n return false;\n }\n\n node.replace(new MermaidNode(node.getTextContent()));\n return true;\n}\n\nexport function ImportCodeBlocksPlugin() {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n editor.update(() => {\n const codeNodes = $nodesOfType(CodeNode);\n for (const n of codeNodes) {\n replaceCodeNodeWithMermaidNode(n);\n }\n });\n }, [editor]);\n\n return null;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\nimport { registerCodeHighlighting } from \"../../lexical-code\";\n\nexport function CodeHighlightingPlugin() {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return registerCodeHighlighting(editor);\n }, [editor]);\n\n return null;\n}\n","import { createCommand, type LexicalCommand } from \"lexical\";\n\nexport const TOGGLE_LINK_EDIT_MODE_COMMAND: LexicalCommand<boolean> = createCommand(\"TOGGLE_LINK_EDIT_MODE_COMMAND\");\n","import { $isAtNodeEnd } from \"@lexical/selection\";\nimport type { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n }\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode;\n}\n","const VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPos(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n placement: \"above\" | \"legacy\" = \"legacy\",\n coordinateSpace: \"anchor\" | \"viewport\" = \"anchor\",\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect =\n coordinateSpace === \"viewport\"\n ? new DOMRect(0, 0, document.documentElement.clientWidth, document.documentElement.clientHeight)\n : scrollerElem.getBoundingClientRect();\n\n let top =\n placement === \"above\" ? targetRect.top - floatingElemRect.height - verticalGap : targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top =\n placement === \"above\"\n ? targetRect.bottom + verticalGap\n : top + floatingElemRect.height + targetRect.height + verticalGap * 2;\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n\n if (top + floatingElemRect.height > editorScrollerRect.bottom) {\n top = targetRect.top - floatingElemRect.height - Math.abs(verticalGap);\n }\n\n if (coordinateSpace === \"anchor\") {\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n }\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport type { HeadingTagType } from \"@lexical/rich-text\";\nimport { FORMAT_TEXT_COMMAND, type LexicalEditor } from \"lexical\";\nimport { Code, Link as LinkIcon, List, ListOrdered, ListTodo, TextQuote } from \"lucide-react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { BlockType } from \"./resolve-block-type\";\n\ninterface FloatingToolbarButtonsProps {\n editor: LexicalEditor;\n blockType: BlockType;\n isBold: boolean;\n isItalic: boolean;\n isUnderline: boolean;\n isCode: boolean;\n isLink: boolean;\n formatHeading: (headingSize: HeadingTagType) => void;\n formatList: (type: \"bullet\" | \"number\" | \"check\") => void;\n formatQuote: () => void;\n insertLink: () => void;\n}\n\nfunction ToolbarSeparator() {\n return (\n <span\n style={{\n display: \"inline-flex\",\n height: \"1rem\",\n margin: \"0 0.25rem\",\n borderLeft: \"1px solid var(--chakra-colors-border-subtle)\",\n }}\n />\n );\n}\n\nexport function FloatingToolbarButtons(props: FloatingToolbarButtonsProps) {\n const {\n editor,\n blockType,\n isBold,\n isItalic,\n isUnderline,\n isCode,\n isLink,\n formatHeading,\n formatList,\n formatQuote,\n insertLink,\n } = props;\n\n return (\n <Stack direction=\"row\" gap=\"0.5\" alignItems=\"center\">\n <Tooltip content=\"Bold\">\n <IconButton\n data-active={isBold || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n variant=\"ghost\"\n aria-label=\"Bold\"\n size=\"xs\"\n >\n <Text fontWeight=\"bold\" fontSize=\".75rem\">\n B\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Italic\">\n <IconButton\n data-active={isItalic || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n variant=\"ghost\"\n aria-label=\"Italic\"\n size=\"xs\"\n >\n <Text fontStyle=\"italic\" fontSize=\".75rem\">\n I\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Underline\">\n <IconButton\n data-active={isUnderline || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n variant=\"ghost\"\n aria-label=\"Underline\"\n size=\"xs\"\n >\n <Text textDecoration=\"underline\" fontSize=\".75rem\">\n U\n </Text>\n </IconButton>\n </Tooltip>\n <ToolbarSeparator />\n\n <Tooltip content=\"Heading 1\">\n <IconButton\n data-active={blockType === \"h1\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 1\"\n size=\"xs\"\n onClick={() => formatHeading(\"h1\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H1\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 2\">\n <IconButton\n data-active={blockType === \"h2\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 2\"\n size=\"xs\"\n onClick={() => formatHeading(\"h2\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H2\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 3\">\n <IconButton\n data-active={blockType === \"h3\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 3\"\n size=\"xs\"\n onClick={() => formatHeading(\"h3\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H3\n </Text>\n </IconButton>\n </Tooltip>\n <ToolbarSeparator />\n\n <Tooltip content=\"Inline Code\">\n <IconButton\n data-active={isCode || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\")}\n variant=\"ghost\"\n aria-label=\"Inline Code\"\n size=\"xs\"\n >\n <Code size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content={isLink ? \"Remove Link\" : \"Insert Link\"}>\n <IconButton\n data-active={isLink || undefined}\n variant=\"ghost\"\n aria-label={isLink ? \"Remove Link\" : \"Insert Link\"}\n size=\"xs\"\n onClick={insertLink}\n >\n <LinkIcon size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Quote\">\n <IconButton\n data-active={blockType === \"quote\" || undefined}\n variant=\"ghost\"\n aria-label=\"Quote\"\n size=\"xs\"\n onClick={formatQuote}\n >\n <TextQuote size={14} />\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n <Tooltip content=\"Bulleted List\">\n <IconButton\n data-active={blockType === \"bullet\" || undefined}\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n size=\"xs\"\n onClick={() => formatList(\"bullet\")}\n >\n <List size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Numbered List\">\n <IconButton\n data-active={blockType === \"number\" || undefined}\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n size=\"xs\"\n onClick={() => formatList(\"number\")}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Check List\">\n <IconButton\n data-active={blockType === \"check\" || undefined}\n variant=\"ghost\"\n aria-label=\"Check List\"\n size=\"xs\"\n onClick={() => formatList(\"check\")}\n >\n <ListTodo size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n}\n","import { $isListNode } from \"@lexical/list\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport { $isRootOrShadowRoot, type LexicalNode } from \"lexical\";\n\nexport const blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nexport type BlockType = keyof typeof blockTypeToBlockName;\n\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as BlockType) : null;\n};\n\nconst findSelectionElement = (anchorNode: LexicalNode) => {\n const rootMatch =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n const parent = node.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n return rootMatch ?? anchorNode.getTopLevelElementOrThrow();\n};\n\nexport const resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as BlockType;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as BlockType;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\n};\n","interface ShouldShowFloatingToolbarParams {\n hasSelection: boolean;\n isRangeSelection: boolean;\n isCollapsed: boolean;\n hasNativeSelection: boolean;\n hasNativeRange: boolean;\n isAnchorInsideEditor: boolean;\n isEditorEditable: boolean;\n isPointerSelecting: boolean;\n}\n\nexport function shouldShowFloatingToolbar(params: ShouldShowFloatingToolbarParams) {\n const {\n hasSelection,\n isRangeSelection,\n isCollapsed,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable,\n isPointerSelecting,\n } = params;\n\n return (\n hasSelection &&\n isRangeSelection &&\n !isCollapsed &&\n hasNativeSelection &&\n hasNativeRange &&\n isAnchorInsideEditor &&\n isEditorEditable &&\n !isPointerSelecting\n );\n}\n","import \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { Box } from \"@chakra-ui/react\";\nimport { $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHeadingNode, $createQuoteNode, type HeadingTagType } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOGGLE_LINK_EDIT_MODE_COMMAND } from \"../LinkEditorPlugin/commands\";\nimport { getSelectedNode } from \"../LinkEditorPlugin/utils/getSelectedNode\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\nimport { FloatingToolbarButtons } from \"./floating-toolbar-buttons\";\nimport { type BlockType, resolveBlockTypeFromAnchor } from \"./resolve-block-type\";\nimport { shouldShowFloatingToolbar } from \"./should-show-floating-toolbar\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nfunction FloatingTextToolbar({\n editor,\n anchorElem,\n isToolbarActive,\n setIsToolbarActive,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isToolbarActive: boolean;\n setIsToolbarActive: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const [blockType, setBlockType] = useState<BlockType>(\"paragraph\");\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isCode, setIsCode] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const isPointerSelectingRef = useRef(false);\n const updateFloatingToolbarRef = useRef<() => boolean | undefined>(() => undefined);\n\n const formatHeading = (headingSize: HeadingTagType) => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === headingSize) {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n };\n\n const formatList = (type: \"bullet\" | \"number\" | \"check\") => {\n if (blockType === type) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n return;\n }\n const command = {\n bullet: INSERT_UNORDERED_LIST_COMMAND,\n number: INSERT_ORDERED_LIST_COMMAND,\n check: INSERT_CHECK_LIST_COMMAND,\n }[type];\n editor.dispatchCommand(command, undefined);\n };\n\n const formatQuote = () => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === \"quote\") {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, $createQuoteNode);\n });\n };\n\n const insertLink = () => {\n if (isLink) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n return;\n }\n editor.dispatchCommand(TOGGLE_LINK_EDIT_MODE_COMMAND, true);\n };\n\n const updateToolbar = () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n setIsCode(selection.hasFormat(\"code\"));\n\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n const autoLinkParent = $findMatchingParent(node, $isAutoLinkNode);\n setIsLink(linkParent !== null || autoLinkParent !== null);\n\n const nextBlockType = resolveBlockTypeFromAnchor(selection.anchor.getNode());\n if (nextBlockType) {\n setBlockType(nextBlockType);\n }\n };\n\n updateFloatingToolbarRef.current = () => {\n const selection = $getSelection();\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeSelection = nativeSelection !== null;\n const hasNativeRange = hasNativeSelection && nativeSelection.rangeCount > 0;\n const isAnchorInsideEditor = Boolean(rootElement?.contains(hasNativeSelection ? nativeSelection.anchorNode : null));\n\n if (\n shouldShowFloatingToolbar({\n hasSelection: selection !== null,\n isRangeSelection: $isRangeSelection(selection),\n isCollapsed: $isRangeSelection(selection) ? selection.isCollapsed() : false,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable: editor.isEditable(),\n isPointerSelecting: isPointerSelectingRef.current,\n }) &&\n nativeSelection\n ) {\n const domRect: DOMRect | undefined = nativeSelection.getRangeAt(0).getBoundingClientRect();\n\n if (domRect) {\n // Anchor to the bottom of the selection to avoid overlap with tall selections\n const bottomRect = new DOMRect(domRect.left, domRect.bottom, 0, 0);\n setFloatingElemPos(bottomRect, editorElem, anchorElem, GAP, undefined, \"legacy\", \"viewport\");\n }\n\n setIsToolbarActive(true);\n } else {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem, undefined, undefined, \"legacy\", \"viewport\");\n }\n setIsToolbarActive(false);\n }\n\n updateToolbar();\n\n return true;\n };\n\n useEffect(() => {\n const rootElement = editor.getRootElement();\n if (!rootElement) return;\n\n const ownerDocument = rootElement.ownerDocument;\n const startPointerSelection = () => {\n isPointerSelectingRef.current = true;\n setIsToolbarActive(false);\n };\n const finishPointerSelection = () => {\n if (!isPointerSelectingRef.current) return;\n\n isPointerSelectingRef.current = false;\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\n });\n };\n\n rootElement.addEventListener(\"pointerdown\", startPointerSelection);\n ownerDocument.addEventListener(\"pointerup\", finishPointerSelection);\n ownerDocument.addEventListener(\"pointercancel\", finishPointerSelection);\n\n return () => {\n rootElement.removeEventListener(\"pointerdown\", startPointerSelection);\n ownerDocument.removeEventListener(\"pointerup\", finishPointerSelection);\n ownerDocument.removeEventListener(\"pointercancel\", finishPointerSelection);\n };\n }, [editor, setIsToolbarActive]);\n\n useEffect(() => {\n const ownerDocument = anchorElem.ownerDocument;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n // Scroll does not bubble; capture it from the editor and its scrollable ancestors.\n ownerDocument.addEventListener(\"scroll\", update, true);\n\n return () => {\n window.removeEventListener(\"resize\", update);\n ownerDocument.removeEventListener(\"scroll\", update, true);\n };\n }, [anchorElem, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateFloatingToolbarRef.current();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n updateFloatingToolbarRef.current();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (_payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n updateFloatingToolbarRef.current();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor]);\n\n return (\n <Box ref={editorRef} zIndex=\"tooltip\" className={`floating-text-format-toolbar ${isToolbarActive ? \"active\" : \"\"}`}>\n <FloatingToolbarButtons\n editor={editor}\n blockType={blockType}\n isBold={isBold}\n isItalic={isItalic}\n isUnderline={isUnderline}\n isCode={isCode}\n isLink={isLink}\n formatHeading={formatHeading}\n formatList={formatList}\n formatQuote={formatQuote}\n insertLink={insertLink}\n />\n </Box>\n );\n}\n\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [isToolbarActive, setIsToolbarActive] = useState(false);\n\n return createPortal(\n <FloatingTextToolbar\n editor={editor}\n anchorElem={anchorElem}\n isToolbarActive={isToolbarActive}\n setIsToolbarActive={setIsToolbarActive}\n />,\n document.body,\n );\n}\n","import { ListNode } from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\n\n// List numbers sit in the indent before each item. Each numbered list records the\n// digit count of its widest number so the theme can make the indent wide enough.\nexport function ListMarkerWidthPlugin() {\n const [editor] = useLexicalComposerContext();\n\n useEffect(\n () =>\n editor.registerMutationListener(ListNode, (mutations) => {\n for (const [key, mutation] of mutations) {\n if (mutation === \"destroyed\") continue;\n const list = editor.getElementByKey(key);\n if (!(list instanceof HTMLOListElement)) continue;\n const values = [...list.children].flatMap((item) => (item instanceof HTMLLIElement ? [item.value] : []));\n list.style.setProperty(\"--rich-text-list-digits\", String(Math.max(list.start, ...values)).length.toString());\n }\n }),\n [editor],\n );\n\n return null;\n}\n","/**\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} />}\n placeholder={\n synced && placeholder ? (\n <Box\n position=\"absolute\"\n top=\"0\"\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","import { $isLinkNode } from \"@lexical/link\";\nimport { $isListItemNode, $isListNode, type ListItemNode, type ListNode } from \"@lexical/list\";\nimport { $isHeadingNode, $isQuoteNode } from \"@lexical/rich-text\";\nimport {\n $isElementNode,\n $isInlineElementOrDecoratorNode,\n $isLineBreakNode,\n $isParagraphNode,\n $isTextNode,\n type ElementNode,\n type LexicalNode,\n type TextNode,\n} from \"lexical\";\nimport type { BlockContent, ListItem, Paragraph, PhrasingContent, Root, Table, TableCell } from \"mdast\";\nimport { $isReferenceLinkNode } from \"../markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode\";\nimport { $isCodeNode } from \"./lexical-code\";\nimport { parseMarkdownInline, serializeMarkdownAst } from \"./markdown-ast\";\nimport { $isDataTableNode, type DataTableNode } from \"./nodes/DataTableNode\";\nimport { $isMarkdownImageNode } from \"./nodes/MarkdownImageNode\";\nimport { $isMarkdownLinkNode } from \"./nodes/MarkdownLinkNode\";\nimport { $isRawHtmlNode } from \"./nodes/RawHtmlNode\";\nimport { $isEquationNode } from \"./plugins/EquationPlugin/EquationNode\";\nimport { $isHRNode } from \"./plugins/HorizontalRulePlugin/HorizontalRuleNode\";\nimport { $isMermaidNode } from \"./plugins/MermaidPlugin/MermaidNode\";\n\nconst exportText = (node: TextNode) => {\n let content: PhrasingContent = node.hasFormat(\"code\")\n ? { type: \"inlineCode\", value: node.getTextContent() }\n : { type: \"text\", value: node.getTextContent() };\n\n if (!node.hasFormat(\"code\")) {\n if (node.hasFormat(\"bold\")) content = { type: \"strong\", children: [content] };\n if (node.hasFormat(\"italic\")) content = { type: \"emphasis\", children: [content] };\n if (node.hasFormat(\"strikethrough\")) content = { type: \"delete\", children: [content] };\n }\n\n if (node.hasFormat(\"underline\")) {\n return [\n { type: \"html\", value: \"<ins>\" } as PhrasingContent,\n content,\n { type: \"html\", value: \"</ins>\" } as PhrasingContent,\n ];\n }\n\n return [content];\n};\n\nconst exportInlineNode = (node: LexicalNode): PhrasingContent[] => {\n if ($isTextNode(node)) return exportText(node);\n if ($isLineBreakNode(node)) return [{ type: \"break\" }];\n if ($isMarkdownImageNode(node)) {\n return [{ type: \"image\", url: node.getSource(), alt: node.getAlt(), title: node.getTitle() }];\n }\n if ($isEquationNode(node) && node.isInline()) return [{ type: \"inlineMath\", value: node.getEquation() }];\n if ($isRawHtmlNode(node)) return [{ type: \"html\", value: node.getSource() }];\n if ($isReferenceLinkNode(node)) return [{ type: \"text\", value: node.getTextContent() }];\n\n if ($isLinkNode(node)) {\n return [\n {\n type: \"link\",\n url: $isMarkdownLinkNode(node) ? node.getSource() : node.getURL(),\n title: node.getTitle(),\n children: exportInlineChildren(node),\n },\n ];\n }\n\n if ($isElementNode(node)) return exportInlineChildren(node);\n const value = node.getTextContent();\n return value ? [{ type: \"text\", value }] : [];\n};\n\nconst exportInlineChildren = (node: ElementNode) => node.getChildren().flatMap(exportInlineNode);\n\nconst exportQuoteChildren = (node: ElementNode) => {\n const children: BlockContent[] = [];\n const inline: PhrasingContent[] = [];\n const flushInline = () => {\n if (inline.length) children.push({ type: \"paragraph\", children: inline.splice(0) });\n };\n\n for (const child of node.getChildren()) {\n if ($isTextNode(child) || $isLineBreakNode(child) || $isInlineElementOrDecoratorNode(child)) {\n inline.push(...exportInlineNode(child));\n } else {\n flushInline();\n const block = exportBlock(child);\n if (block) children.push(block);\n }\n }\n flushInline();\n return children;\n};\n\nconst paragraphFrom = (node: ElementNode): Paragraph => ({\n type: \"paragraph\",\n children: exportInlineChildren(node),\n});\n\nconst exportListItem = (node: ListItemNode): ListItem => {\n const children: BlockContent[] = [];\n const inline: PhrasingContent[] = [];\n\n for (const child of node.getChildren()) {\n if ($isListNode(child)) {\n if (inline.length) children.push({ type: \"paragraph\", children: inline.splice(0) });\n children.push(exportList(child));\n } else if ($isParagraphNode(child)) {\n if (inline.length) children.push({ type: \"paragraph\", children: inline.splice(0) });\n children.push(paragraphFrom(child));\n } else {\n inline.push(...exportInlineNode(child));\n }\n }\n\n if (inline.length || children.length === 0) children.unshift({ type: \"paragraph\", children: inline });\n\n return {\n type: \"listItem\",\n checked: node.getChecked(),\n spread: false,\n children,\n };\n};\n\nconst exportList = (node: ListNode) => ({\n type: \"list\" as const,\n ordered: node.getListType() === \"number\",\n start: node.getListType() === \"number\" ? node.getStart() : null,\n spread: false,\n children: node.getChildren().filter($isListItemNode).map(exportListItem),\n});\n\nconst tableCell = (value: string): TableCell => ({\n type: \"tableCell\",\n children: parseMarkdownInline(value),\n});\n\nconst exportTable = (node: DataTableNode): Table => {\n const table = node.getTable();\n return {\n type: \"table\",\n align: table.columns.map((column) => column.alignment),\n children: [\n {\n type: \"tableRow\",\n children: table.columns.map((column) => tableCell(column.label)),\n },\n ...table.rows.map((row) => ({\n type: \"tableRow\" as const,\n children: table.columns.map((column) => tableCell(row.cells[column.id] ?? \"\")),\n })),\n ],\n };\n};\n\nconst exportBlock = (node: LexicalNode): BlockContent | null => {\n if ($isParagraphNode(node)) return paragraphFrom(node);\n if ($isHeadingNode(node)) {\n return {\n type: \"heading\",\n depth: Number(node.getTag().slice(1)) as 1 | 2 | 3 | 4 | 5 | 6,\n children: exportInlineChildren(node),\n };\n }\n if ($isQuoteNode(node)) {\n return {\n type: \"blockquote\",\n children: exportQuoteChildren(node),\n };\n }\n if ($isListNode(node)) return exportList(node);\n if ($isCodeNode(node)) {\n return { type: \"code\", lang: node.getLanguage() || null, meta: null, value: node.getTextContent() };\n }\n if ($isMermaidNode(node)) return { type: \"code\", lang: \"mermaid\", meta: null, value: node.getCode() };\n if ($isEquationNode(node)) return { type: \"math\", meta: null, value: node.getEquation() };\n if ($isHRNode(node)) return { type: \"thematicBreak\" };\n if ($isDataTableNode(node)) return exportTable(node);\n if ($isRawHtmlNode(node)) return { type: \"html\", value: node.getSource() };\n if ($isElementNode(node)) return paragraphFrom(node);\n\n const value = node.getTextContent();\n return value ? { type: \"paragraph\", children: [{ type: \"text\", value }] } : null;\n};\n\nexport const exportLexicalToMarkdown = (root: ElementNode) => {\n const tree: Root = {\n type: \"root\",\n children: root\n .getChildren()\n .map(exportBlock)\n .filter((node) => node !== null),\n };\n return serializeMarkdownAst(tree);\n};\n","import { $createListItemNode, $createListNode } from \"@lexical/list\";\nimport { $createHeadingNode, $createQuoteNode } from \"@lexical/rich-text\";\nimport {\n $createLineBreakNode,\n $createParagraphNode,\n $createTextNode,\n $getRoot,\n type ElementNode,\n type LexicalNode,\n type TextFormatType,\n} from \"lexical\";\nimport type { Definition, ImageReference, LinkReference, PhrasingContent, RootContent, Table } from \"mdast\";\nimport { $createReferenceLinkNode } from \"../markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode\";\nimport { $createCodeNode } from \"./lexical-code\";\nimport { parseMarkdown, serializeMarkdownBlock, serializeMarkdownInline } from \"./markdown-ast\";\nimport type { MarkdownTableAlignment, MarkdownTableValue } from \"./markdown-table\";\nimport type { MarkdownUrlResolver } from \"./markdown-url\";\nimport { $createDataTableNode } from \"./nodes/DataTableNode\";\nimport { $createMarkdownImageNode } from \"./nodes/MarkdownImageNode\";\nimport { $createMarkdownLinkNode } from \"./nodes/MarkdownLinkNode\";\nimport { $createRawHtmlNode } from \"./nodes/RawHtmlNode\";\nimport { $createEquationNode } from \"./plugins/EquationPlugin/EquationNode\";\nimport { $createHRNode } from \"./plugins/HorizontalRulePlugin/HorizontalRuleNode\";\nimport { $createMermaidNode } from \"./plugins/MermaidPlugin/MermaidNode\";\n\ninterface ImportContext {\n definitions: Map<string, Definition>;\n resolver?: MarkdownUrlResolver;\n tableIndex: number;\n}\n\nconst REFERENCE_TOKEN = /\\{\\{\\s*link\\((['\"])([^'\"\\s]+)\\1\\)\\s*\\}\\}/g;\n\nconst formattedText = (value: string, formats: Set<TextFormatType>) => {\n const node = $createTextNode(value);\n for (const format of formats) node.toggleFormat(format);\n return node;\n};\n\nconst textWithReferences = (value: string, formats: Set<TextFormatType>) => {\n const nodes: LexicalNode[] = [];\n let start = 0;\n\n for (const match of value.matchAll(REFERENCE_TOKEN)) {\n const index = match.index ?? 0;\n if (index > start) nodes.push(formattedText(value.slice(start, index), formats));\n const label = match[2] ?? \"\";\n const href = /^(?:https?:\\/\\/|\\/)/i.test(label) ? label : `#${label}`;\n nodes.push($createReferenceLinkNode(href, label));\n start = index + match[0].length;\n }\n\n if (start < value.length) nodes.push(formattedText(value.slice(start), formats));\n return nodes;\n};\n\nconst referenceDefinition = (node: LinkReference | ImageReference, context: ImportContext) =>\n context.definitions.get(node.identifier.toLowerCase());\n\nfunction importInlineNode(node: PhrasingContent, context: ImportContext, formats: Set<TextFormatType>) {\n switch (node.type) {\n case \"text\":\n return textWithReferences(node.value, formats);\n case \"strong\":\n return importInlineChildren(node.children, context, new Set([...formats, \"bold\"]));\n case \"emphasis\":\n return importInlineChildren(node.children, context, new Set([...formats, \"italic\"]));\n case \"delete\":\n return importInlineChildren(node.children, context, new Set([...formats, \"strikethrough\"]));\n case \"inlineCode\":\n return [formattedText(node.value, new Set([...formats, \"code\"]))];\n case \"break\":\n return [$createLineBreakNode()];\n case \"link\": {\n const link = $createMarkdownLinkNode(node.url, context.resolver, { title: node.title });\n link.append(...importInlineChildren(node.children, context, formats));\n return [link];\n }\n case \"linkReference\": {\n const definition = referenceDefinition(node, context);\n if (!definition) return [formattedText(serializeMarkdownInline([node]), formats)];\n const link = $createMarkdownLinkNode(definition.url, context.resolver, { title: definition.title });\n link.append(...importInlineChildren(node.children, context, formats));\n return [link];\n }\n case \"image\":\n return [$createMarkdownImageNode(node.url, node.alt ?? \"\", node.title ?? null)];\n case \"imageReference\": {\n const definition = referenceDefinition(node, context);\n if (!definition) return [formattedText(serializeMarkdownInline([node]), formats)];\n return [$createMarkdownImageNode(definition.url, node.alt ?? \"\", definition.title ?? null)];\n }\n case \"inlineMath\":\n return [$createEquationNode(node.value, true)];\n case \"html\":\n return [$createRawHtmlNode(node.value, \"inline\")];\n default:\n return [formattedText(serializeMarkdownInline([node]), formats)];\n }\n}\n\nfunction importInlineChildren(\n children: PhrasingContent[],\n context: ImportContext,\n formats = new Set<TextFormatType>(),\n) {\n const nodes: LexicalNode[] = [];\n let underlineDepth = 0;\n\n for (const node of children) {\n if (node.type === \"html\" && /^<(?:ins|u)>$/i.test(node.value.trim())) {\n underlineDepth += 1;\n continue;\n }\n if (node.type === \"html\" && /^<\\/(?:ins|u)>$/i.test(node.value.trim())) {\n underlineDepth = Math.max(underlineDepth - 1, 0);\n continue;\n }\n\n const activeFormats = new Set(formats);\n if (underlineDepth > 0) activeFormats.add(\"underline\");\n nodes.push(...importInlineNode(node, context, activeFormats));\n }\n\n return nodes;\n}\n\nconst tableValue = (table: Table, context: ImportContext): MarkdownTableValue => {\n context.tableIndex += 1;\n const prefix = `table-${context.tableIndex}`;\n const header = table.children[0];\n const columnCount = Math.max(header?.children.length ?? 0, 1);\n const columns = Array.from({ length: columnCount }, (_, index) => ({\n id: `${prefix}-column-${index + 1}`,\n label: header?.children[index] ? serializeMarkdownInline(header.children[index].children) : \"\",\n alignment: (table.align?.[index] ?? null) as MarkdownTableAlignment,\n }));\n const rows = table.children.slice(1).map((row, rowIndex) => ({\n id: `${prefix}-row-${rowIndex + 1}`,\n cells: Object.fromEntries(\n columns.map((column, columnIndex) => [\n column.id,\n row.children[columnIndex] ? serializeMarkdownInline(row.children[columnIndex].children) : \"\",\n ]),\n ),\n }));\n\n return { columns, rows };\n};\n\nconst appendListItem = (parent: ElementNode, node: RootContent, context: ImportContext) => {\n if (node.type !== \"listItem\") return;\n const item = $createListItemNode(node.checked ?? undefined);\n parent.append(item);\n\n for (const child of node.children) {\n if (child.type === \"paragraph\") item.append(...importInlineChildren(child.children, context));\n else if (child.type === \"list\") appendBlock(item, child, context);\n else item.append(formattedText(serializeMarkdownBlock(child), new Set()));\n }\n};\n\nconst appendBlock = (parent: ElementNode, node: RootContent, context: ImportContext) => {\n switch (node.type) {\n case \"paragraph\": {\n const paragraph = $createParagraphNode();\n paragraph.append(...importInlineChildren(node.children, context));\n parent.append(paragraph);\n break;\n }\n case \"heading\": {\n const heading = $createHeadingNode(`h${node.depth}`);\n heading.append(...importInlineChildren(node.children, context));\n parent.append(heading);\n break;\n }\n case \"blockquote\": {\n const quote = $createQuoteNode();\n parent.append(quote);\n for (const [index, child] of node.children.entries()) {\n if (child.type === \"paragraph\") {\n // Native Lexical quotes hold inline content; paragraph children intercept Enter.\n if (node.children[index - 1]?.type === \"paragraph\") quote.append($createTextNode(\"\\n\\n\"));\n quote.append(...importInlineChildren(child.children, context));\n } else {\n appendBlock(quote, child, context);\n }\n }\n break;\n }\n case \"list\": {\n const hasTasks = node.children.some((item) => item.checked !== null && item.checked !== undefined);\n let listType: \"bullet\" | \"check\" | \"number\" = \"bullet\";\n if (node.ordered) listType = \"number\";\n else if (hasTasks) listType = \"check\";\n const list = $createListNode(listType, node.start ?? 1);\n parent.append(list);\n for (const item of node.children) appendListItem(list, item, context);\n break;\n }\n case \"code\":\n parent.append(\n node.lang === \"mermaid\"\n ? $createMermaidNode(node.value)\n : $createCodeNode(node.lang ?? undefined).append($createTextNode(node.value)),\n );\n break;\n case \"math\":\n parent.append($createEquationNode(node.value, false));\n break;\n case \"thematicBreak\":\n parent.append($createHRNode());\n break;\n case \"table\":\n parent.append($createDataTableNode(tableValue(node, context)));\n break;\n case \"html\":\n parent.append($createRawHtmlNode(node.value, \"block\"));\n break;\n case \"definition\":\n break;\n default: {\n const paragraph = $createParagraphNode();\n paragraph.append($createTextNode(serializeMarkdownBlock(node)));\n parent.append(paragraph);\n }\n }\n};\n\nexport const importMarkdownToLexical = (markdown: string, resolver?: MarkdownUrlResolver) => {\n const tree = parseMarkdown(markdown);\n const definitions = new Map(\n tree.children\n .filter((node): node is Definition => node.type === \"definition\")\n .map((node) => [node.identifier.toLowerCase(), node]),\n );\n const context: ImportContext = { definitions, resolver, tableIndex: 0 };\n const root = $getRoot();\n root.clear();\n\n for (const node of tree.children) appendBlock(root, node, context);\n // Lexical treats a root-only state as uninitialized and skips its first change notification.\n if (root.isEmpty()) root.append($createParagraphNode());\n};\n","import type { Link, LinkReference, Parent, RootContent } from \"mdast\";\nimport { parseMarkdownSource } from \"./markdown-ast\";\n\ninterface TextEdit {\n end: number;\n replacement: string;\n start: number;\n}\n\ninterface LinkChanges {\n edits: TextEdit[];\n normalizedCurrent: string;\n}\n\ninterface LinkOccurrence {\n block: RootContent;\n node: Link | LinkReference;\n}\n\nconst nodeOffsets = (node: { position?: { start: { offset?: number }; end: { offset?: number } } }) => {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n return start === undefined || end === undefined ? null : { end, start };\n};\n\nconst isParent = (node: unknown): node is Parent =>\n typeof node === \"object\" && node !== null && \"children\" in node && Array.isArray(node.children);\n\nconst isLink = (node: unknown): node is Link | LinkReference =>\n typeof node === \"object\" &&\n node !== null &&\n \"type\" in node &&\n (node.type === \"link\" || node.type === \"linkReference\");\n\nconst linksIn = (node: unknown) => {\n const links: Array<Link | LinkReference> = [];\n\n if (!isParent(node)) return links;\n\n for (const child of node.children) {\n if (isLink(child)) links.push(child);\n if (isParent(child)) links.push(...linksIn(child));\n }\n\n return links;\n};\n\nconst linkOccurrencesIn = (markdown: string) =>\n parseMarkdownSource(markdown).children.flatMap((block) =>\n block.type === \"table\" ? [] : linksIn(block).map((node) => ({ block, node })),\n );\n\nconst removedLinkReplacements = (\n baseline: string,\n current: string,\n sourceLinks: LinkOccurrence[],\n baselineBlock: RootContent,\n baselineLinks: Array<Link | LinkReference>,\n currentBlock: RootContent,\n) => {\n const baselineBlockOffsets = nodeOffsets(baselineBlock);\n const currentBlockOffsets = nodeOffsets(currentBlock);\n if (!baselineBlockOffsets || !currentBlockOffsets) return [];\n\n const linkOffsets = baselineLinks.map(nodeOffsets);\n if (linkOffsets.some((offsets) => !offsets)) return [];\n\n const segments: string[] = [];\n let baselineOffset = baselineBlockOffsets.start;\n for (const offsets of linkOffsets) {\n if (!offsets) return [];\n segments.push(baseline.slice(baselineOffset, offsets.start));\n baselineOffset = offsets.end;\n }\n segments.push(baseline.slice(baselineOffset, baselineBlockOffsets.end));\n\n const currentBlockSource = current.slice(currentBlockOffsets.start, currentBlockOffsets.end);\n const firstSegment = segments[0] ?? \"\";\n if (!currentBlockSource.startsWith(firstSegment)) return [];\n\n const replacements: Array<{ end: number; start: number; value: string }> = [];\n let currentOffset = firstSegment.length;\n\n for (let index = 0; index < baselineLinks.length; index += 1) {\n const nextSegment = segments[index + 1] ?? \"\";\n const replacementEnd =\n index === baselineLinks.length - 1\n ? currentBlockSource.length - nextSegment.length\n : currentBlockSource.indexOf(nextSegment, currentOffset);\n if (replacementEnd < currentOffset) return [];\n\n replacements.push({\n start: currentOffset,\n end: replacementEnd,\n value: currentBlockSource.slice(currentOffset, replacementEnd),\n });\n currentOffset = replacementEnd + nextSegment.length;\n }\n\n if (currentOffset !== currentBlockSource.length) return [];\n\n return replacements.flatMap((replacement, index) => {\n if (linkOccurrencesIn(replacement.value).length > 0) return [];\n\n const sourceLinkOffsets = nodeOffsets(sourceLinks[index]?.node ?? {});\n const baselineLinkOffsets = linkOffsets[index];\n if (!sourceLinkOffsets || !baselineLinkOffsets) return [];\n\n return [\n {\n edit: { ...sourceLinkOffsets, replacement: replacement.value },\n normalization: {\n start: currentBlockOffsets.start + replacement.start,\n end: currentBlockOffsets.start + replacement.end,\n replacement: baseline.slice(baselineLinkOffsets.start, baselineLinkOffsets.end),\n },\n },\n ];\n });\n};\n\nconst findRemovedLinkReplacements = (\n sourceLinks: LinkOccurrence[],\n baseline: string,\n current: string,\n baselineBlock: RootContent,\n baselineLinks: Array<Link | LinkReference>,\n currentBlocks: RootContent[],\n preferredBlockIndex: number,\n usedCurrentBlocks: Set<number>,\n) => {\n const candidateIndexes = currentBlocks.map((_, index) => index);\n candidateIndexes.sort((left, right) => Number(right === preferredBlockIndex) - Number(left === preferredBlockIndex));\n\n for (const currentBlockIndex of candidateIndexes) {\n if (usedCurrentBlocks.has(currentBlockIndex)) continue;\n const currentBlock = currentBlocks[currentBlockIndex];\n if (!currentBlock) continue;\n\n const currentLinks = linksIn(currentBlock);\n if (baselineLinks.length <= currentLinks.length) continue;\n\n const replacements = removedLinkReplacements(\n baseline,\n current,\n sourceLinks,\n baselineBlock,\n baselineLinks,\n currentBlock,\n );\n if (replacements.length === baselineLinks.length - currentLinks.length) {\n return { currentBlockIndex, replacements };\n }\n }\n\n return null;\n};\n\nexport const collectMarkdownLinkChanges = (source: string, baseline: string, current: string): LinkChanges => {\n const sourceLinks = linkOccurrencesIn(source);\n if (linkOccurrencesIn(current).length >= linkOccurrencesIn(baseline).length) {\n return { edits: [], normalizedCurrent: current };\n }\n\n const baselineTree = parseMarkdownSource(baseline);\n const currentTree = parseMarkdownSource(current);\n const edits: TextEdit[] = [];\n const normalizations: TextEdit[] = [];\n const usedCurrentBlocks = new Set<number>();\n let linkOrdinal = 0;\n\n for (let blockIndex = 0; blockIndex < baselineTree.children.length; blockIndex += 1) {\n const baselineBlock = baselineTree.children[blockIndex];\n if (!baselineBlock || baselineBlock.type === \"table\") continue;\n\n const baselineLinks = linksIn(baselineBlock);\n const linkChanges = findRemovedLinkReplacements(\n sourceLinks.slice(linkOrdinal, linkOrdinal + baselineLinks.length),\n baseline,\n current,\n baselineBlock,\n baselineLinks,\n currentTree.children,\n blockIndex,\n usedCurrentBlocks,\n );\n if (linkChanges) {\n for (const replacement of linkChanges.replacements) {\n edits.push(replacement.edit);\n normalizations.push(replacement.normalization);\n }\n usedCurrentBlocks.add(linkChanges.currentBlockIndex);\n }\n\n linkOrdinal += baselineLinks.length;\n }\n\n let normalizedCurrent = current;\n for (const normalization of normalizations.sort((left, right) => right.start - left.start)) {\n normalizedCurrent =\n normalizedCurrent.slice(0, normalization.start) +\n normalization.replacement +\n normalizedCurrent.slice(normalization.end);\n }\n\n return { edits, normalizedCurrent };\n};\n","import { diffChars } from \"diff\";\nimport { parseMarkdownSource } from \"./markdown-ast\";\n\nexport interface SourceMap {\n end: number[];\n start: number[];\n}\n\nfunction* diffSourceBlocks(canonical: string, source: string) {\n const canonicalBlocks = parseMarkdownSource(canonical).children;\n const sourceBlocks = parseMarkdownSource(source).children;\n const sameBlocks =\n canonicalBlocks.length === sourceBlocks.length &&\n canonicalBlocks.every(\n (block, index) =>\n block.type === sourceBlocks[index]?.type &&\n block.position?.end.offset !== undefined &&\n sourceBlocks[index]?.position?.end.offset !== undefined,\n );\n\n if (!sameBlocks) {\n yield* diffChars(canonical, source);\n return;\n }\n\n // Import preserves block order. Match spelling within those blocks so many\n // normalized tokens do not create one quadratic diff across the document.\n let canonicalOffset = 0;\n let sourceOffset = 0;\n for (let index = 0; index < canonicalBlocks.length; index += 1) {\n const canonicalEnd = canonicalBlocks[index]!.position!.end.offset!;\n const sourceEnd = sourceBlocks[index]!.position!.end.offset!;\n yield* diffChars(canonical.slice(canonicalOffset, canonicalEnd), source.slice(sourceOffset, sourceEnd));\n canonicalOffset = canonicalEnd;\n sourceOffset = sourceEnd;\n }\n yield* diffChars(canonical.slice(canonicalOffset), source.slice(sourceOffset));\n}\n\nexport const buildSourceMap = (canonical: string, source: string) => {\n const start = Array.from<number>({ length: canonical.length + 1 }).fill(-1);\n const end = Array.from<number>({ length: canonical.length + 1 }).fill(-1);\n let canonicalOffset = 0;\n let sourceOffset = 0;\n let removedAtBoundary = false;\n\n start[0] = 0;\n end[0] = 0;\n\n for (const change of diffSourceBlocks(canonical, source)) {\n const length = change.value.length;\n\n if (change.added) {\n end[canonicalOffset] = sourceOffset;\n sourceOffset += length;\n start[canonicalOffset] = sourceOffset;\n if (removedAtBoundary) end[canonicalOffset] = sourceOffset;\n removedAtBoundary = false;\n continue;\n }\n\n if (change.removed) {\n for (let index = 0; index <= length; index += 1) {\n start[canonicalOffset + index] = sourceOffset;\n end[canonicalOffset + index] = sourceOffset;\n }\n canonicalOffset += length;\n removedAtBoundary = true;\n continue;\n }\n\n for (let index = 0; index <= length; index += 1) {\n const offset = canonicalOffset + index;\n start[offset] = sourceOffset + index;\n // A source-only insertion at this boundary belongs between the\n // canonical characters. Keep its left edge as the end of the preceding\n // range so an edit before it does not consume untouched source.\n if (end[offset] === undefined || end[offset] < 0) end[offset] = sourceOffset + index;\n }\n canonicalOffset += length;\n sourceOffset += length;\n removedAtBoundary = false;\n }\n\n return { end, start } satisfies SourceMap;\n};\n\nconst nearestMappedOffset = (values: number[], index: number, direction: -1 | 1) => {\n for (let offset = index; offset >= 0 && offset < values.length; offset += direction) {\n const value = values[offset];\n if (value !== undefined && value >= 0) return value;\n }\n return direction === -1 ? 0 : (values.at(-1) ?? 0);\n};\n\nexport const mappedStart = (map: SourceMap, index: number) => {\n const exact = map.start[index];\n if (exact !== undefined && exact >= 0) return exact;\n return nearestMappedOffset(map.start, index, -1);\n};\n\nexport const mappedEnd = (map: SourceMap, index: number) => {\n const exact = map.end[index];\n if (exact !== undefined && exact >= 0) return exact;\n return nearestMappedOffset(map.end, index, 1);\n};\n","import { diffChars } from \"diff\";\nimport { $getRoot, type ElementNode } from \"lexical\";\nimport type { Table, TableCell } from \"mdast\";\nimport { parseMarkdownSource } from \"./markdown-ast\";\nimport { exportLexicalToMarkdown } from \"./markdown-export\";\nimport { importMarkdownToLexical } from \"./markdown-import\";\nimport { collectMarkdownLinkChanges } from \"./markdown-source-links\";\nimport { buildSourceMap, mappedEnd, mappedStart, type SourceMap } from \"./markdown-source-map\";\nimport type { MarkdownUrlResolver } from \"./markdown-url\";\n\ninterface TextEdit {\n end: number;\n replacement: string;\n start: number;\n}\n\ninterface TableChanges {\n edits: TextEdit[];\n normalizedCurrent: string;\n}\n\nconst collectEdits = (baseline: string, current: string) => {\n const edits: TextEdit[] = [];\n let baselineOffset = 0;\n let pending: TextEdit | null = null;\n\n const finishPending = () => {\n if (!pending) return;\n edits.push(pending);\n pending = null;\n };\n\n for (const change of diffChars(baseline, current)) {\n if (!change.added && !change.removed) {\n finishPending();\n baselineOffset += change.value.length;\n continue;\n }\n\n pending ??= { start: baselineOffset, end: baselineOffset, replacement: \"\" };\n if (change.added) {\n pending.replacement += change.value;\n continue;\n }\n\n baselineOffset += change.value.length;\n pending.end = baselineOffset;\n }\n\n finishPending();\n return edits;\n};\n\nconst sourceLineEnding = (source: string) => (source.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\");\n\nconst withSourceLineEndings = (value: string, source: string) => {\n const lineEnding = sourceLineEnding(source);\n return lineEnding === \"\\n\" ? value : value.replaceAll(\"\\n\", lineEnding);\n};\n\nconst withoutPosition = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(withoutPosition);\n if (!value || typeof value !== \"object\") return value;\n\n return Object.fromEntries(\n Object.entries(value)\n .filter(([key]) => key !== \"position\")\n .map(([key, entry]) => [key, withoutPosition(entry)]),\n );\n};\n\nconst sameMarkdownNode = (left: unknown, right: unknown) =>\n JSON.stringify(withoutPosition(left)) === JSON.stringify(withoutPosition(right));\n\nconst tablesIn = (markdown: string) =>\n parseMarkdownSource(markdown).children.filter(\n (node): node is Table => node.type === \"table\" && Boolean(node.position),\n );\n\nconst tableCells = (table: Table) => table.children.flatMap((row) => row.children);\n\nconst sameTableShape = (left: Table, right: Table) =>\n left.children.length === right.children.length &&\n left.children.every((row, index) => row.children.length === right.children[index]?.children.length);\n\nconst nodeOffsets = (node: { position?: { start: { offset?: number }; end: { offset?: number } } }) => {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n return start === undefined || end === undefined ? null : { end, start };\n};\n\nconst cellContentOffsets = (markdown: string, cell: TableCell) => {\n const first = cell.children[0];\n const last = cell.children.at(-1);\n const contentStart = first?.position?.start.offset;\n const contentEnd = last?.position?.end.offset;\n\n if (contentStart !== undefined && contentEnd !== undefined) {\n return { start: contentStart, end: contentEnd };\n }\n\n const cellOffsets = nodeOffsets(cell);\n if (!cellOffsets) return null;\n const cellSource = markdown.slice(cellOffsets.start, cellOffsets.end);\n const leftDelimiter = cellSource.indexOf(\"|\");\n const rightDelimiter = cellSource.endsWith(\"|\") ? cellSource.length - 1 : cellSource.length;\n const insideStart = leftDelimiter < 0 ? 0 : leftDelimiter + 1;\n const leadingSpace = cellSource.slice(insideStart, rightDelimiter).match(/^\\s*/)?.[0].length ?? 0;\n const offset = cellOffsets.start + insideStart + leadingSpace;\n return { start: offset, end: offset };\n};\n\nconst cellMarkdown = (markdown: string, cell: TableCell) => {\n const offsets = cellContentOffsets(markdown, cell);\n return offsets ? markdown.slice(offsets.start, offsets.end) : \"\";\n};\n\nconst collectTableCellEdits = (\n source: string,\n current: string,\n sourceTable: Table,\n baselineTable: Table,\n currentTable: Table,\n) => {\n const sourceCells = tableCells(sourceTable);\n const baselineCells = tableCells(baselineTable);\n const currentCells = tableCells(currentTable);\n\n return currentCells.flatMap((currentCell, index) => {\n const sourceCell = sourceCells[index];\n const baselineCell = baselineCells[index];\n if (!sourceCell || !baselineCell || sameMarkdownNode(baselineCell, currentCell)) return [];\n\n const sourceContent = cellContentOffsets(source, sourceCell);\n if (!sourceContent) return [];\n return [{ ...sourceContent, replacement: cellMarkdown(current, currentCell) }];\n });\n};\n\nconst editsForTable = (\n source: string,\n current: string,\n sourceTable: Table,\n baselineTable: Table,\n currentTable: Table,\n) => {\n if (sameMarkdownNode(baselineTable, currentTable)) return [];\n\n const cellOnlyChange =\n sameTableShape(baselineTable, currentTable) &&\n sameTableShape(sourceTable, baselineTable) &&\n JSON.stringify(baselineTable.align) === JSON.stringify(currentTable.align);\n\n if (cellOnlyChange) {\n return collectTableCellEdits(source, current, sourceTable, baselineTable, currentTable);\n }\n\n const sourceOffsets = nodeOffsets(sourceTable);\n const currentOffsets = nodeOffsets(currentTable);\n if (!sourceOffsets || !currentOffsets) return [];\n return [\n {\n start: sourceOffsets.start,\n end: sourceOffsets.end,\n replacement: current.slice(currentOffsets.start, currentOffsets.end),\n },\n ];\n};\n\nconst collectTableChanges = (source: string, baseline: string, current: string): TableChanges => {\n const sourceTables = tablesIn(source);\n const baselineTables = tablesIn(baseline);\n const currentTables = tablesIn(current);\n\n if (sourceTables.length !== baselineTables.length || baselineTables.length !== currentTables.length) {\n return { edits: [], normalizedCurrent: current };\n }\n\n const edits: TextEdit[] = [];\n let normalizedCurrent = current;\n\n for (let index = currentTables.length - 1; index >= 0; index -= 1) {\n const sourceTable = sourceTables[index];\n const baselineTable = baselineTables[index];\n const currentTable = currentTables[index];\n if (!sourceTable || !baselineTable || !currentTable) continue;\n\n const baselineOffsets = nodeOffsets(baselineTable);\n const currentOffsets = nodeOffsets(currentTable);\n if (!baselineOffsets || !currentOffsets) continue;\n\n normalizedCurrent =\n normalizedCurrent.slice(0, currentOffsets.start) +\n baseline.slice(baselineOffsets.start, baselineOffsets.end) +\n normalizedCurrent.slice(currentOffsets.end);\n\n edits.push(...editsForTable(source, current, sourceTable, baselineTable, currentTable));\n }\n\n return { edits, normalizedCurrent };\n};\n\nconst applyChanges = (source: string, sourceMap: SourceMap, baseline: string, current: string) => {\n if (baseline === current) return source;\n\n const linkChanges = collectMarkdownLinkChanges(source, baseline, current);\n const tableChanges = collectTableChanges(source, baseline, linkChanges.normalizedCurrent);\n\n // Lexical reports semantic Markdown but normalizes its spelling. Map those\n // semantic edits back onto the loaded source so unrelated syntax never moves.\n const edits = collectEdits(baseline, tableChanges.normalizedCurrent)\n .map((edit) => ({\n start: edit.start === edit.end ? mappedEnd(sourceMap, edit.start) : mappedStart(sourceMap, edit.start),\n end: mappedEnd(sourceMap, edit.end),\n replacement: withSourceLineEndings(edit.replacement, source),\n }))\n .concat(\n linkChanges.edits.map((edit) => ({\n ...edit,\n replacement: withSourceLineEndings(edit.replacement, source),\n })),\n )\n .concat(\n tableChanges.edits.map((edit) => ({\n ...edit,\n replacement: withSourceLineEndings(edit.replacement, source),\n })),\n )\n .sort((left, right) => right.start - left.start);\n\n let result = source;\n for (const edit of edits) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n};\n\nexport interface MarkdownSourceDocument {\n exportFromLexical: (root: ElementNode) => string;\n importToLexical: () => void;\n}\n\nexport const createMarkdownSourceDocument = (\n source: string,\n resolver?: MarkdownUrlResolver,\n): MarkdownSourceDocument => {\n let baseline: string | null = null;\n let sourceMap: SourceMap | null = null;\n\n return {\n importToLexical() {\n importMarkdownToLexical(source, resolver);\n baseline = exportLexicalToMarkdown($getRoot());\n sourceMap = buildSourceMap(baseline, source);\n },\n exportFromLexical(root) {\n const current = exportLexicalToMarkdown(root);\n const loadedBaseline = baseline ?? current;\n return applyChanges(source, sourceMap ?? buildSourceMap(loadedBaseline, source), loadedBaseline, current);\n },\n };\n};\n","import { Link as ChakraLink, IconButton, Input, Stack } from \"@chakra-ui/react\";\nimport { Check, Pencil, Trash2, X } from \"lucide-react\";\nimport type React from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\n\ninterface LinkEditorContentProps {\n isActive: boolean;\n isLinkEditMode: boolean;\n editedLinkUrl: string;\n editedLinkUrlIsValid: boolean;\n linkUrl: string;\n href: string;\n inputRef: React.RefObject<HTMLInputElement | null>;\n onEditedLinkUrlChange: (url: string) => void;\n onInputKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onClose: () => void;\n onSubmit: () => void;\n onEdit: () => void;\n onRemove: () => void;\n}\n\nexport function LinkEditorContent(props: LinkEditorContentProps) {\n const {\n isActive,\n isLinkEditMode,\n editedLinkUrl,\n editedLinkUrlIsValid,\n linkUrl,\n href,\n inputRef,\n onEditedLinkUrlChange,\n onInputKeyDown,\n onClose,\n onSubmit,\n onEdit,\n onRemove,\n } = props;\n\n if (!isActive) {\n return null;\n }\n\n if (isLinkEditMode) {\n return (\n <Stack className=\"link-editor-content\" direction=\"row\" gap=\"1\" alignItems=\"center\" p=\"1\">\n <Input\n ref={inputRef}\n className=\"link-editor-url-field\"\n size=\"sm\"\n fontSize=\"sm\"\n value={editedLinkUrl}\n placeholder=\"https://\"\n aria-label=\"Link URL\"\n aria-invalid={!editedLinkUrlIsValid}\n onChange={(event) => {\n onEditedLinkUrlChange(event.target.value);\n }}\n onKeyDown={onInputKeyDown}\n />\n <Tooltip content=\"Cancel\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Cancel link edit\"\n onMouseDown={preventFocusLoss}\n onClick={onClose}\n >\n <X size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Confirm\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Confirm link edit\"\n disabled={!editedLinkUrlIsValid}\n onMouseDown={preventFocusLoss}\n onClick={onSubmit}\n >\n <Check size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n }\n\n return (\n <Stack className=\"link-editor-content\" direction=\"row\" gap=\"1\" alignItems=\"center\" p=\"1\">\n <ChakraLink\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"link-editor-url-field\"\n fontSize=\"sm\"\n textDecoration=\"underline\"\n px=\"2\"\n truncate\n >\n {linkUrl}\n </ChakraLink>\n <Tooltip content=\"Edit link\">\n <IconButton variant=\"ghost\" size=\"xs\" aria-label=\"Edit link\" onMouseDown={preventFocusLoss} onClick={onEdit}>\n <Pencil size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Remove link\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Remove link\"\n onMouseDown={preventFocusLoss}\n onClick={onRemove}\n >\n <Trash2 size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n}\n\nfunction preventFocusLoss(event: React.MouseEvent) {\n event.preventDefault();\n}\n","export function shouldCancelLinkEdit(isLinkEditMode: boolean, isLink: boolean, linkUrl: string) {\n return isLinkEditMode && isLink && linkUrl === \"\";\n}\n","import { $isLinkNode } from \"@lexical/link\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport type { RangeSelection } from \"lexical\";\nimport { getSelectedNode } from \"./getSelectedNode\";\n\nexport function getSelectionLinkUrl(selection: RangeSelection) {\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n\n if (linkParent) {\n return linkParent.getURL();\n }\n if ($isLinkNode(node)) {\n return node.getURL();\n }\n return \"\";\n}\n","const SUPPORTED_URL_PROTOCOLS = new Set([\"http:\", \"https:\", \"mailto:\", \"sms:\", \"tel:\"]);\n\nexport function sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return \"about:blank\";\n }\n } catch {\n return url;\n }\n return url;\n}\n\nexport function validateUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url);\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return false;\n }\n if (parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\") {\n return parsedUrl.hostname !== \"\";\n }\n return parsedUrl.pathname.trim() !== \"\";\n } catch {\n return false;\n }\n}\n","import \"./LinkEditorPlugin.css\";\n\nimport { Box } from \"@chakra-ui/react\";\nimport { $createLinkNode, $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOGGLE_LINK_EDIT_MODE_COMMAND } from \"./commands\";\nimport { LinkEditorContent } from \"./link-editor-content\";\nimport { getSelectedNode } from \"./utils/getSelectedNode\";\nimport { shouldCancelLinkEdit } from \"./utils/link-edit-state\";\nimport { getSelectionLinkUrl } from \"./utils/selection-link-url\";\nimport { setFloatingElemPos } from \"./utils/setFloatingElemPos\";\nimport { sanitizeUrl, validateUrl } from \"./utils/url\";\n\nconst GAP = 8;\n\nfunction LinkEditor({\n editor,\n isLink,\n setIsLink,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n}: {\n editor: LexicalEditor;\n isLink: boolean;\n setIsLink: Dispatch<boolean>;\n anchorElem: HTMLElement;\n isLinkEditMode: boolean;\n setIsLinkEditMode: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const updateLinkEditorRef = useRef<() => void>(() => undefined);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const [editedLinkUrl, setEditedLinkUrl] = useState(\"https://\");\n const [lastSelection, setLastSelection] = useState<BaseSelection | null>(null);\n const isActive = isLink || isLinkEditMode;\n const editedLinkUrlIsValid = validateUrl(editedLinkUrl);\n\n updateLinkEditorRef.current = () => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const nextLinkUrl = getSelectionLinkUrl(selection);\n setLinkUrl(nextLinkUrl);\n if (shouldCancelLinkEdit(isLinkEditMode, isLink, nextLinkUrl)) {\n closeLinkEditor();\n }\n if (isLinkEditMode && nextLinkUrl !== \"\") {\n setEditedLinkUrl(nextLinkUrl);\n }\n }\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n const activeElement = document.activeElement;\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeRange = nativeSelection !== null && nativeSelection.rangeCount > 0;\n\n if (\n selection !== null &&\n nativeSelection !== null &&\n hasNativeRange &&\n rootElement?.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const rangeRect = nativeSelection.getRangeAt(0).getBoundingClientRect();\n const topRect = new DOMRect(rangeRect.left, rangeRect.top, 0, rangeRect.height);\n setFloatingElemPos(topRect, editorElem, anchorElem, GAP, undefined, \"above\", \"viewport\");\n setLastSelection(selection);\n } else if (!editorElem.contains(activeElement)) {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem, undefined, undefined, \"legacy\", \"viewport\");\n }\n setLastSelection(null);\n setIsLinkEditMode(false);\n setLinkUrl(\"\");\n }\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem.parentElement, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateLinkEditorRef.current();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateLinkEditorRef.current();\n return true;\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setIsLink(false);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor, setIsLink, isLink]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n }, [editor]);\n\n useLayoutEffect(() => {\n if (!isActive) {\n return;\n }\n\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n }, [editor, isActive]);\n\n useEffect(() => {\n if (isLinkEditMode && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isLinkEditMode]);\n\n const monitorInputInteraction = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleLinkSubmission();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n closeLinkEditor();\n }\n };\n\n const closeLinkEditor = () => {\n setEditedLinkUrl(\"https://\");\n setIsLinkEditMode(false);\n };\n\n const handleLinkSubmission = () => {\n if (lastSelection === null || !editedLinkUrlIsValid) {\n return;\n }\n\n editor.update(() => {\n $setSelection(lastSelection);\n });\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(editedLinkUrl));\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const parent = getSelectedNode(selection).getParent();\n if ($isAutoLinkNode(parent)) {\n const linkNode = $createLinkNode(parent.getURL(), {\n rel: parent.__rel,\n target: parent.__target,\n title: parent.__title,\n });\n parent.replace(linkNode, true);\n }\n }\n });\n closeLinkEditor();\n };\n\n return (\n <Box ref={editorRef} zIndex=\"tooltip\" className={`link-editor ${isActive ? \"active\" : \"\"}`}>\n <LinkEditorContent\n isActive={isActive}\n isLinkEditMode={isLinkEditMode}\n editedLinkUrl={editedLinkUrl}\n editedLinkUrlIsValid={editedLinkUrlIsValid}\n linkUrl={linkUrl}\n href={sanitizeUrl(linkUrl)}\n inputRef={inputRef}\n onEditedLinkUrlChange={setEditedLinkUrl}\n onInputKeyDown={monitorInputInteraction}\n onClose={closeLinkEditor}\n onSubmit={handleLinkSubmission}\n onEdit={() => {\n setEditedLinkUrl(linkUrl);\n setIsLinkEditMode(true);\n }}\n onRemove={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }}\n />\n </Box>\n );\n}\n\nfunction useLinkEditorToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isLinkEditMode: boolean,\n setIsLinkEditMode: Dispatch<boolean>,\n): React.JSX.Element | null {\n const [activeEditor, setActiveEditor] = useState(editor);\n const [isLink, setIsLink] = useState(false);\n\n useEffect(() => {\n function $updateToolbar() {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const focusNode = getSelectedNode(selection);\n const focusLinkNode = $findMatchingParent(focusNode, $isLinkNode);\n const focusAutoLinkNode = $findMatchingParent(focusNode, $isAutoLinkNode);\n if (!(focusLinkNode || focusAutoLinkNode)) {\n setIsLink(false);\n return;\n }\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode);\n const autoLinkNode = $findMatchingParent(node, $isAutoLinkNode);\n const autoLinkIsUnlinked = $isAutoLinkNode(autoLinkNode) && autoLinkNode.getIsUnlinked();\n return (\n (focusLinkNode && !focusLinkNode.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkNode)) ||\n (focusAutoLinkNode && !focusAutoLinkNode.is(autoLinkNode)) ||\n (autoLinkNode && (!autoLinkNode.is(focusAutoLinkNode) || autoLinkIsUnlinked))\n );\n });\n if (!badNode) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n }\n }\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n $updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n const linkNode = $findMatchingParent(node, $isLinkNode);\n if ($isLinkNode(linkNode) && (payload.metaKey || payload.ctrlKey)) {\n window.open(sanitizeUrl(linkNode.getURL()), \"_blank\", \"noopener,noreferrer\");\n return true;\n }\n }\n return false;\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n TOGGLE_LINK_EDIT_MODE_COMMAND,\n (payload) => {\n setIsLinkEditMode(payload);\n return true;\n },\n COMMAND_PRIORITY_LOW,\n ),\n );\n }, [editor, setIsLinkEditMode]);\n\n return createPortal(\n <LinkEditor\n editor={activeEditor}\n isLink={isLink}\n anchorElem={anchorElem}\n setIsLink={setIsLink}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />,\n document.body,\n );\n}\n\nexport default function LinkEditorPlugin({ anchorElem = document.body }: { anchorElem?: HTMLElement }) {\n const [isLinkEditMode, setIsLinkEditMode] = useState(false);\n const [editor] = useLexicalComposerContext();\n return useLinkEditorToolbar(editor, anchorElem, isLinkEditMode, setIsLinkEditMode);\n}\n","import { LinkPlugin as LexicalLinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { validateUrl } from \"./utils/url.ts\";\n\nexport default function LinkPlugin(): React.JSX.Element {\n return <LexicalLinkPlugin validateUrl={validateUrl} />;\n}\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\n\nexport default function ToggleEditablePlugin({ isEditable }: { isEditable: boolean }) {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n editor.setEditable(isEditable);\n }, [isEditable, editor]);\n\n return null;\n}\n","import { Box } from \"@chakra-ui/react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { TreeView } from \"@lexical/react/LexicalTreeView\";\n\nexport function TreeViewPlugin() {\n const [editor] = useLexicalComposerContext();\n return (\n <Box fontSize=\"xs\" color=\"fg.muted\" padding=\"4\">\n <TreeView\n treeTypeButtonClassName=\"debug-treetype-button\"\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-slider\"\n viewClassName=\"tree-view-output\"\n editor={editor}\n />\n </Box>\n );\n}\n","const FRONTMATTER_PATTERN = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*(?:\\n|$)/;\n\nconst FENCE_PATTERN = /^```/;\nconst LIST_ITEM_PATTERN = /^([ \\t]*)((?:[-*+])|(?:\\d+\\.))\\s+/;\nconst INDENTED_LINE_PATTERN = /^([ \\t]+)/;\n\ninterface ActiveListIndent {\n normalizedIndentWidth: number;\n sourceIndentWidth: number;\n}\n\ninterface MarkdownListState {\n isInCodeFence: boolean;\n activeListIndents: ActiveListIndent[];\n}\n\nfunction getExpandedIndentWidth(indent: string) {\n let width = 0;\n\n for (const char of indent) {\n width += char === \"\\t\" ? 4 : 1;\n }\n\n return width;\n}\n\nfunction findParentIndent(activeListIndents: ActiveListIndent[], sourceIndentWidth: number) {\n return [...activeListIndents].reverse().find((indent) => indent.sourceIndentWidth < sourceIndentWidth);\n}\n\nfunction toNormalizedIndent(indent: string, normalizedWidth: number, sourceWidth: number) {\n if (normalizedWidth === sourceWidth && !indent.includes(\"\\t\")) return indent;\n return \" \".repeat(normalizedWidth);\n}\n\nfunction normalizeIndentedContinuation(line: string, activeListIndents: ActiveListIndent[]) {\n const indentedLineMatch = line.match(INDENTED_LINE_PATTERN);\n if (!indentedLineMatch) {\n if (line.trim() !== \"\") {\n activeListIndents.length = 0;\n }\n\n return line;\n }\n\n const sourceIndentWidth = getExpandedIndentWidth(indentedLineMatch[1]);\n const parentLevel = findParentIndent(activeListIndents, sourceIndentWidth);\n if (!parentLevel) return line;\n\n const normalizedIndentWidth = sourceIndentWidth + (parentLevel.normalizedIndentWidth - parentLevel.sourceIndentWidth);\n const normalizedIndent = toNormalizedIndent(indentedLineMatch[1], normalizedIndentWidth, sourceIndentWidth);\n\n if (normalizedIndent === indentedLineMatch[1]) return line;\n\n return `${normalizedIndent}${line.slice(indentedLineMatch[1].length)}`;\n}\n\nfunction normalizeListItem(line: string, match: RegExpMatchArray, activeListIndents: ActiveListIndent[]) {\n const sourceIndentWidth = getExpandedIndentWidth(match[1]);\n\n while (activeListIndents.length && activeListIndents.at(-1)!.sourceIndentWidth > sourceIndentWidth) {\n activeListIndents.pop();\n }\n\n const currentLevel = activeListIndents.at(-1);\n if (currentLevel?.sourceIndentWidth === sourceIndentWidth) {\n return `${toNormalizedIndent(match[1], currentLevel.normalizedIndentWidth, sourceIndentWidth)}${line.slice(match[1].length)}`;\n }\n\n const parentLevel = activeListIndents.at(-1);\n const indentStep = sourceIndentWidth - (parentLevel?.sourceIndentWidth ?? 0);\n let normalizedIndentWidth = sourceIndentWidth;\n\n if (parentLevel && indentStep === 2 && !match[1].includes(\"\\t\")) {\n normalizedIndentWidth = parentLevel.normalizedIndentWidth + 4;\n }\n\n activeListIndents.push({ normalizedIndentWidth, sourceIndentWidth });\n\n return `${toNormalizedIndent(match[1], normalizedIndentWidth, sourceIndentWidth)}${line.slice(match[1].length)}`;\n}\n\nfunction normalizeMarkdownLine(line: string, state: MarkdownListState) {\n if (FENCE_PATTERN.test(line.trimStart())) {\n state.isInCodeFence = !state.isInCodeFence;\n return line;\n }\n\n if (state.isInCodeFence) return line;\n\n const match = line.match(LIST_ITEM_PATTERN);\n if (!match) return normalizeIndentedContinuation(line, state.activeListIndents);\n\n return normalizeListItem(line, match, state.activeListIndents);\n}\n\nexport function normalizeMarkdownListIndentation(content: string) {\n const lines = content.split(\"\\n\");\n const state: MarkdownListState = { isInCodeFence: false, activeListIndents: [] };\n\n return lines.map((line) => normalizeMarkdownLine(line, state)).join(\"\\n\");\n}\n\nexport function splitFrontmatter(content: string) {\n const match = content.match(FRONTMATTER_PATTERN);\n if (!match) {\n return { frontmatter: \"\", body: content };\n }\n return {\n frontmatter: match[0],\n body: content.slice(match[0].length),\n };\n}\n","export interface MarkdownSectionAnchor {\n id: string;\n heading: string;\n occurrence?: number;\n}\n\nexport interface MarkdownSectionNavigation {\n anchors: MarkdownSectionAnchor[];\n targetId: string;\n}\n\nexport interface MatchedMarkdownSection {\n id: string;\n headingIndex: number;\n}\n\ninterface MarkdownSectionPosition {\n id: string;\n top: number;\n}\n\nconst normalizeHeading = (value: string) => value.trim().replace(/\\s+/g, \" \");\n\nexport const matchMarkdownSectionAnchors = (headings: string[], anchors: MarkdownSectionAnchor[]) => {\n const normalizedHeadings = headings.map(normalizeHeading);\n const implicitOccurrences = new Map<string, number>();\n const matches: MatchedMarkdownSection[] = [];\n\n for (const anchor of anchors) {\n const heading = normalizeHeading(anchor.heading);\n const occurrence = anchor.occurrence ?? implicitOccurrences.get(heading) ?? 0;\n implicitOccurrences.set(heading, occurrence + 1);\n let seen = 0;\n\n for (const [headingIndex, candidate] of normalizedHeadings.entries()) {\n if (candidate !== heading) continue;\n if (seen === occurrence) {\n matches.push({ id: anchor.id, headingIndex });\n break;\n }\n seen += 1;\n }\n }\n\n return matches.sort((left, right) => left.headingIndex - right.headingIndex);\n};\n\nexport const resolveActiveMarkdownSection = (sections: MarkdownSectionPosition[], threshold: number) => {\n const first = sections[0]?.id;\n let active = first;\n\n for (const section of sections) {\n if (section.top > threshold) break;\n active = section.id;\n }\n\n return active;\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect, useRef } from \"react\";\nimport {\n type MarkdownSectionAnchor,\n matchMarkdownSectionAnchors,\n resolveActiveMarkdownSection,\n} from \"./markdown-section-navigation\";\n\ninterface MarkdownSectionNavigationPluginProps {\n anchors: MarkdownSectionAnchor[];\n targetId: string;\n onActiveSectionChange?: (sectionId: string | null) => void;\n}\n\nconst findScrollContainer = (root: HTMLElement) => {\n let current = root.parentElement;\n\n while (current) {\n const overflowY = getComputedStyle(current).overflowY;\n if ([\"auto\", \"scroll\", \"overlay\"].includes(overflowY)) return current;\n current = current.parentElement;\n }\n\n return null;\n};\n\nexport const MarkdownSectionNavigationPlugin = (props: MarkdownSectionNavigationPluginProps) => {\n const { anchors, targetId, onActiveSectionChange } = props;\n const [editor] = useLexicalComposerContext();\n const callbackRef = useRef(onActiveSectionChange);\n callbackRef.current = onActiveSectionChange;\n\n useEffect(() => {\n let cleanup: () => void = () => {};\n const frame = requestAnimationFrame(() => {\n const root = editor.getRootElement();\n if (!root) return;\n const headingElements = Array.from(root.querySelectorAll<HTMLElement>(\"h1, h2, h3, h4, h5, h6\"));\n const matches = matchMarkdownSectionAnchors(\n headingElements.map((heading) => heading.textContent ?? \"\"),\n anchors,\n );\n const matchedElements = matches.map((match) => ({\n id: match.id,\n element: headingElements[match.headingIndex]!,\n }));\n\n for (const match of matchedElements) match.element.dataset.markdownSectionId = match.id;\n\n const target = matchedElements.find((match) => match.id === targetId);\n if (!target) {\n console.warn(`[markdown section] Unknown section id: ${targetId}`);\n callbackRef.current?.(null);\n return;\n }\n\n target.element.tabIndex = -1;\n target.element.scrollIntoView({ block: \"start\" });\n target.element.focus({ preventScroll: true });\n\n const scrollContainer = findScrollContainer(root);\n let previousId: string | undefined;\n const publishActiveSection = () => {\n const containerTop = scrollContainer?.getBoundingClientRect().top ?? 0;\n const activeId = resolveActiveMarkdownSection(\n matchedElements.map((match) => ({\n id: match.id,\n top: match.element.getBoundingClientRect().top - containerTop,\n })),\n 8,\n );\n if (!activeId || activeId === previousId) return;\n previousId = activeId;\n callbackRef.current?.(activeId);\n };\n\n const scrollTarget: HTMLElement | Window = scrollContainer ?? window;\n scrollTarget.addEventListener(\"scroll\", publishActiveSection, { passive: true });\n publishActiveSection();\n cleanup = () => {\n scrollTarget.removeEventListener(\"scroll\", publishActiveSection);\n };\n });\n\n return () => {\n cancelAnimationFrame(frame);\n cleanup();\n };\n }, [anchors, editor, targetId]);\n\n return null;\n};\n","export type MarkdownTableAlignment = \"left\" | \"center\" | \"right\" | null;\n\nexport interface MarkdownTableColumn {\n id: string;\n label: string;\n alignment: MarkdownTableAlignment;\n}\n\nexport interface MarkdownTableRow {\n id: string;\n cells: Record<string, string>;\n}\n\nexport interface MarkdownTableValue {\n columns: MarkdownTableColumn[];\n rows: MarkdownTableRow[];\n}\n\nexport const updateMarkdownTableColumn = (\n table: MarkdownTableValue,\n columnId: string,\n update: Partial<Pick<MarkdownTableColumn, \"label\" | \"alignment\">>,\n) => ({\n ...table,\n columns: table.columns.map((column) => (column.id === columnId ? { ...column, ...update } : column)),\n});\n\nexport const updateMarkdownTableCell = (table: MarkdownTableValue, rowId: string, columnId: string, value: string) => ({\n ...table,\n rows: table.rows.map((row) =>\n row.id === rowId\n ? {\n ...row,\n cells: { ...row.cells, [columnId]: value },\n }\n : row,\n ),\n});\n\nexport const addMarkdownTableColumn = (table: MarkdownTableValue, column: MarkdownTableColumn) => ({\n columns: [...table.columns, column],\n rows: table.rows.map((row) => ({\n ...row,\n cells: { ...row.cells, [column.id]: \"\" },\n })),\n});\n\nexport const removeMarkdownTableColumn = (table: MarkdownTableValue, columnId: string) => {\n if (table.columns.length === 1 || !table.columns.some((column) => column.id === columnId)) return table;\n\n return {\n columns: table.columns.filter((column) => column.id !== columnId),\n rows: table.rows.map((row) => ({\n ...row,\n cells: Object.fromEntries(Object.entries(row.cells).filter(([key]) => key !== columnId)),\n })),\n };\n};\n\nexport const addMarkdownTableRow = (table: MarkdownTableValue, row: MarkdownTableRow) => ({\n ...table,\n rows: [\n ...table.rows,\n {\n ...row,\n cells: Object.fromEntries(table.columns.map((column) => [column.id, row.cells[column.id] ?? \"\"])),\n },\n ],\n});\n\nexport const removeMarkdownTableRow = (table: MarkdownTableValue, rowId: string) => ({\n ...table,\n rows: table.rows.filter((row) => row.id !== rowId),\n});\n\nexport const createEmptyMarkdownTable = (id: string): MarkdownTableValue => ({\n columns: [\n { id: `${id}-column-1`, label: \"Column 1\", alignment: null },\n { id: `${id}-column-2`, label: \"Column 2\", alignment: null },\n ],\n rows: [\n {\n id: `${id}-row-1`,\n cells: {\n [`${id}-column-1`]: \"\",\n [`${id}-column-2`]: \"\",\n },\n },\n ],\n});\n","import { Box, Button, Dialog, Field, Flex, Icon, Input, Text } from \"@chakra-ui/react\";\nimport { $createCodeNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHorizontalRuleNode } from \"@lexical/react/LexicalHorizontalRuleNode\";\nimport { LexicalTypeaheadMenuPlugin, type MenuTextMatch } from \"@lexical/react/LexicalTypeaheadMenuPlugin\";\nimport {\n $addUpdateTag,\n $createParagraphNode,\n $getNodeByKey,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n HISTORY_MERGE_TAG,\n type LexicalNode,\n type TextNode,\n} from \"lexical\";\nimport { Code2, Image as ImageIcon, Minus, Table2 } from \"lucide-react\";\nimport { type ElementType, type FormEvent, useEffect, useState } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createEmptyMarkdownTable } from \"../../shared/markdown-table\";\nimport { $createDataTableNode } from \"../../shared/nodes/DataTableNode\";\nimport { $createMarkdownImageNode } from \"../../shared/nodes/MarkdownImageNode\";\n\ninterface SlashCommandOption {\n id: \"table\" | \"image\" | \"code\" | \"divider\";\n key: string;\n label: string;\n icon: ElementType;\n setRefElement: (element: HTMLElement | null) => void;\n}\n\nconst commandDefinitions: Array<Omit<SlashCommandOption, \"key\" | \"setRefElement\">> = [\n { id: \"table\", label: \"Table\", icon: Table2 },\n { id: \"image\", label: \"Image\", icon: ImageIcon },\n { id: \"code\", label: \"Code block\", icon: Code2 },\n { id: \"divider\", label: \"Divider\", icon: Minus },\n];\n\nconst slashTrigger = (text: string): MenuTextMatch | null => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return null;\n const anchorNode = selection.anchor.getNode();\n if (!$isParagraphNode(anchorNode.getParent()) || anchorNode.getPreviousSibling()) return null;\n\n const match = /^\\/([a-z ]*)$/i.exec(text);\n if (!match) return null;\n\n return {\n leadOffset: 0,\n matchingString: match[1] ?? \"\",\n replaceableString: match[0],\n };\n};\n\nconst createTableId = () => {\n const unique = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n return `table-${unique}`;\n};\n\nconst replaceSlashWithBlock = (queryNode: TextNode | null, block: LexicalNode) => {\n const parent = queryNode?.getParent();\n if (!$isParagraphNode(parent)) return;\n\n parent.replace(block);\n const nextParagraph = $createParagraphNode();\n block.insertAfter(nextParagraph);\n nextParagraph.select();\n};\n\ninterface SlashCommandMenuProps {\n options: SlashCommandOption[];\n selectedIndex: number | null;\n onSelect: (option: SlashCommandOption, index: number) => void;\n onHighlight: (index: number) => void;\n}\n\nconst SlashCommandMenu = (props: SlashCommandMenuProps) => {\n const { options, selectedIndex, onSelect, onHighlight } = props;\n\n useEffect(() => {\n document.getElementById(`slash-command-${selectedIndex}`)?.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n return (\n <Box\n role=\"listbox\"\n aria-label=\"Insert content\"\n position=\"absolute\"\n zIndex=\"popover\"\n layerStyle=\"modal\"\n minWidth=\"13rem\"\n overflow=\"hidden\"\n paddingY=\"2xs\"\n >\n <Text paddingX=\"sm\" paddingY=\"2xs\" color=\"fg.muted\" textStyle=\"label/S/medium\">\n Insert\n </Text>\n {options.length === 0 ? (\n <Text padding=\"sm\" color=\"fg.muted\" textStyle=\"paragraph/S/regular\">\n No matching commands\n </Text>\n ) : null}\n {options.map((option, index) => {\n const selected = selectedIndex === index;\n return (\n <Flex\n key={option.id}\n ref={option.setRefElement}\n id={`slash-command-${index}`}\n role=\"option\"\n aria-selected={selected}\n alignItems=\"center\"\n gap=\"xs\"\n paddingX=\"sm\"\n paddingY=\"xs\"\n cursor=\"pointer\"\n background={selected ? \"bg.active\" : \"transparent\"}\n _hover={{ background: selected ? \"bg.active\" : \"bg.hover\" }}\n onMouseEnter={() => onHighlight(index)}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => onSelect(option, index)}\n >\n <Icon as={option.icon} boxSize=\"16px\" flexShrink={0} />\n <Text minWidth=\"0\" truncate textStyle=\"label/M/medium\">\n {option.label}\n </Text>\n </Flex>\n );\n })}\n </Box>\n );\n};\n\nexport const MarkdownSlashCommandPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const [query, setQuery] = useState<string | null>(null);\n const [imageParagraphKey, setImageParagraphKey] = useState<string | null>(null);\n const [imageUrl, setImageUrl] = useState(\"\");\n const [imageAlt, setImageAlt] = useState(\"Image\");\n const options = commandDefinitions\n .filter((option) => !query || option.label.toLowerCase().includes(query.toLowerCase()))\n .map((option) => ({ ...option, key: option.id, setRefElement: () => {} }));\n\n const closeImageDialog = () => {\n if (imageParagraphKey) {\n editor.update(\n () => {\n const paragraph = $getNodeByKey(imageParagraphKey);\n if ($isParagraphNode(paragraph)) paragraph.selectStart();\n },\n { tag: HISTORY_MERGE_TAG },\n );\n }\n\n setImageParagraphKey(null);\n setTimeout(() => editor.focus(), 0);\n };\n\n const insertImage = (event: FormEvent) => {\n event.preventDefault();\n if (!imageParagraphKey || !imageUrl.trim()) return;\n\n editor.update(\n () => {\n const paragraph = $getNodeByKey(imageParagraphKey);\n if ($isParagraphNode(paragraph)) {\n paragraph.splice(0, 0, [$createMarkdownImageNode(imageUrl.trim(), imageAlt.trim() || \"Image\")]);\n const nextParagraph = $createParagraphNode();\n paragraph.insertAfter(nextParagraph);\n nextParagraph.select();\n }\n },\n { tag: HISTORY_MERGE_TAG },\n );\n setImageParagraphKey(null);\n setTimeout(() => editor.focus(), 0);\n };\n\n return (\n <>\n <LexicalTypeaheadMenuPlugin<SlashCommandOption>\n onQueryChange={setQuery}\n triggerFn={slashTrigger}\n options={options}\n onSelectOption={(option, queryNode, closeMenu) => {\n if (option.id === \"image\") {\n const paragraph = queryNode?.getParent();\n const selection = $getSelection();\n if (!$isParagraphNode(paragraph) || !$isRangeSelection(selection)) return;\n\n // Typeahead text nodes can merge after this update. Keep the paragraph\n // as the insertion position and consume the command before opening the dialog.\n $addUpdateTag(HISTORY_MERGE_TAG);\n selection.anchor.set(paragraph.getKey(), 0, \"element\");\n selection.removeText();\n setImageUrl(\"\");\n setImageAlt(\"Image\");\n setImageParagraphKey(paragraph.getKey());\n closeMenu();\n return;\n }\n\n $addUpdateTag(HISTORY_MERGE_TAG);\n if (option.id === \"table\") {\n replaceSlashWithBlock(queryNode, $createDataTableNode(createEmptyMarkdownTable(createTableId())));\n }\n if (option.id === \"code\") replaceSlashWithBlock(queryNode, $createCodeNode());\n if (option.id === \"divider\") replaceSlashWithBlock(queryNode, $createHorizontalRuleNode());\n closeMenu();\n }}\n menuRenderFn={(anchorElementRef, menu) => {\n if (!anchorElementRef.current) return null;\n return ReactDOM.createPortal(\n <SlashCommandMenu\n options={menu.options}\n selectedIndex={menu.selectedIndex}\n onHighlight={menu.setHighlightedIndex}\n onSelect={(option, index) => {\n menu.setHighlightedIndex(index);\n menu.selectOptionAndCleanUp(option);\n }}\n />,\n anchorElementRef.current,\n );\n }}\n />\n <Dialog.Root\n open={Boolean(imageParagraphKey)}\n finalFocusEl={() => editor.getRootElement()}\n onOpenChange={(details) => {\n if (!details.open && imageParagraphKey) closeImageDialog();\n }}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content asChild>\n <form onSubmit={insertImage}>\n <Dialog.Header>\n <Dialog.Title>Insert image</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n <Flex direction=\"column\" gap=\"sm\">\n <Field.Root required>\n <Field.Label>Image URL</Field.Label>\n <Input autoFocus value={imageUrl} onChange={(event) => setImageUrl(event.target.value)} />\n </Field.Root>\n <Field.Root>\n <Field.Label>Alt text</Field.Label>\n <Input value={imageAlt} onChange={(event) => setImageAlt(event.target.value)} />\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Button type=\"button\" variant=\"ghost\" onClick={closeImageDialog}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"primary\" disabled={!imageUrl.trim()}>\n Insert image\n </Button>\n </Dialog.Footer>\n </form>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n </>\n );\n};\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { COMMAND_PRIORITY_HIGH, KEY_DOWN_COMMAND, REDO_COMMAND, UNDO_COMMAND } from \"lexical\";\nimport { useEffect, useState } from \"react\";\n\nexport const MarkdownHistoryPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const [historyState] = useState(() => ({\n current: { editor, editorState: editor.getEditorState() },\n redoStack: [],\n undoStack: [],\n }));\n\n useEffect(() => {\n historyState.current = { editor, editorState: editor.getEditorState() };\n }, [editor, historyState]);\n\n useEffect(\n () =>\n editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event) => {\n const target = event.target;\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) return false;\n if ((!event.ctrlKey && !event.metaKey) || event.key.toLowerCase() !== \"z\") return false;\n\n event.preventDefault();\n editor.dispatchCommand(event.shiftKey ? REDO_COMMAND : UNDO_COMMAND, undefined);\n return true;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n [editor],\n );\n\n return <HistoryPlugin externalHistoryState={historyState} />;\n};\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { CheckListPlugin } from \"@lexical/react/LexicalCheckListPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { MarkdownShortcutPlugin } from \"@lexical/react/LexicalMarkdownShortcutPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport { $addUpdateTag, $getRoot } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme, editorTransformers } from \"../shared/editor-config\";\nimport { createMarkdownSourceDocument } from \"../shared/markdown-source-document\";\nimport type { MarkdownUrlResolver } from \"../shared/markdown-url\";\nimport { MarkdownUrlProvider } from \"../shared/markdown-url-context\";\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 { LinkEditorPlugin, LinkPlugin } from \"../shared/plugins/LinkEditorPlugin\";\nimport { ListMarkerWidthPlugin } from \"../shared/plugins/list-marker-width-plugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { splitFrontmatter } from \"../utils/markdown\";\nimport { MarkdownSectionNavigationPlugin } from \"./plugins/MarkdownSectionNavigationPlugin\";\nimport { MarkdownSlashCommandPlugin } from \"./plugins/MarkdownSlashCommandPlugin\";\nimport { MarkdownHistoryPlugin } from \"./plugins/markdown-history-plugin\";\nimport type { MarkdownSectionNavigation } from \"./plugins/markdown-section-navigation\";\n\nconst INITIAL_IMPORT_TAG = \"markdown-initial-import\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n fullWidth?: boolean;\n isEditable?: boolean;\n padding?: string;\n placeholder?: string;\n scrollable?: boolean;\n sectionNavigation?: MarkdownSectionNavigation;\n resolveMarkdownUrl?: MarkdownUrlResolver;\n onActiveSectionChange?: (sectionId: string | null) => void;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const {\n autoFocus = false,\n debug = false,\n defaultState = \"\",\n fullWidth = false,\n isEditable = false,\n padding = \"sm\",\n placeholder,\n scrollable = true,\n sectionNavigation,\n resolveMarkdownUrl,\n onActiveSectionChange,\n onChange,\n } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const sourceDocumentRef = useRef<ReturnType<typeof createMarkdownSourceDocument> | null>(null);\n sourceDocumentRef.current ??= createMarkdownSourceDocument(body, resolveMarkdownUrl);\n const sourceDocument = sourceDocumentRef.current;\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"MARKDOWN_EDITOR\",\n nodes: editorNodes,\n editorState: () => {\n // Tag the mount-time import so change tracking can tell it apart from a\n // real edit. Lexical also tags it history-merge, but slash commands reuse\n // that tag for their inserts, so ignoring history-merge would swallow them.\n $addUpdateTag(INITIAL_IMPORT_TAG);\n sourceDocument.importToLexical();\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\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={scrollable ? \"100%\" : \"auto\"}\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <MarkdownUrlProvider resolver={resolveMarkdownUrl}>\n <LexicalComposer initialConfig={initialConfig}>\n {isEditable ? <MarkdownSlashCommandPlugin /> : null}\n {sectionNavigation ? (\n <MarkdownSectionNavigationPlugin\n anchors={sectionNavigation.anchors}\n targetId={sectionNavigation.targetId}\n onActiveSectionChange={onActiveSectionChange}\n />\n ) : null}\n {autoFocus ? <AutoFocusPlugin /> : null}\n <MarkdownHistoryPlugin />\n <LinkPlugin />\n <ListPlugin />\n <ListMarkerWidthPlugin />\n {isEditable ? <TabIndentationPlugin maxIndent={7} /> : null}\n <CheckListPlugin />\n {isEditable ? <MarkdownShortcutPlugin transformers={editorTransformers} /> : null}\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={fullWidth} padding={padding} scrollable={scrollable} />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\n padding=\"sm\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n justifyContent=\"center\"\n >\n <Box width=\"100%\" maxWidth=\"45rem\" color=\"fg.muted\" textStyle=\"paragraph/M/regular\">\n {placeholder}\n </Box>\n </Flex>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {isEditable && floatingToolbarAnchorElem ? (\n <>\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n <LinkEditorPlugin anchorElem={floatingToolbarAnchorElem} />\n </>\n ) : null}\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState, _editor, tags) => {\n // Reporting the mount-time import as a change makes every mount\n // look like an edit and schedules a save of content the user\n // never touched.\n if (tags.has(INITIAL_IMPORT_TAG)) return;\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = sourceDocument.exportFromLexical(root);\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </MarkdownUrlProvider>\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 $getNodeByKey,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n $isTextNode,\n $setSelection,\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\n/** Keep the last editing range when a temporarily disabled editor loses DOM selection. */\nexport const PreserveSelectionPlugin = (props: { isEditable: boolean }) => {\n const { isEditable } = props;\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)) selection.current = current.clone();\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) 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 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 } 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 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 { 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 isEditable={isEditable} />\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 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);\n }\n constructor(text: string, href: string | null, description?: string, key?: NodeKey) {\n super(text, key);\n this.__href = href;\n this.__description = description;\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.__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 { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { TextNode } from \"lexical\";\nimport { useEffect } from \"react\";\nimport { MarkdownLinkNode } from \"@/components/rich-text/shared/nodes/MarkdownLinkNode\";\nimport { ChatCodeLinkNode } from \"./chat-code-link-node\";\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 removeCode = editor.registerNodeTransform(TextNode, (node) => {\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, window.location.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 );\n replacement.setFormat(node.getFormat());\n node.replace(replacement);\n });\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 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 \"../theme/rich-text-theme.css\";\n\nimport { Flex } 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 { createMarkdownSourceDocument } from \"../shared/markdown-source-document\";\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 { splitFrontmatter } from \"../utils/markdown\";\n\nexport interface RichMessageProps extends ChatLinkProps {\n debug?: boolean;\n defaultState: string;\n fullWidth?: boolean;\n isEditable?: boolean;\n resolveMarkdownUrl?: MarkdownUrlResolver;\n onChange?: (value: string) => void;\n}\n\nconst SOURCE_IMPORT_TAG = \"markdown-source-import\";\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 resolveMarkdownUrl,\n onChange,\n } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\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 sourceDocumentRef.current?.importToLexical();\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 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 <LexicalComposer initialConfig={initialConfig}>\n <StateUpdatePlugin\n value={body}\n onUpdate={(value: string) => {\n const sourceDocument = createMarkdownSourceDocument(value, resolveMarkdownUrl);\n sourceDocumentRef.current = sourceDocument;\n $addUpdateTag(SOURCE_IMPORT_TAG);\n sourceDocument.importToLexical();\n }}\n />\n <LinkPlugin />\n <ChatLinkPlugin />\n <ClickableLinkPlugin newTab />\n <ListPlugin />\n <ListMarkerWidthPlugin />\n {isEditable ? <TabIndentationPlugin maxIndent={7} /> : null}\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\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 </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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"}