@pstdio/ui 0.43.0 → 0.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/{MermaidComponent-X7N-8w2S.js → MermaidComponent-_cmVeKKR.js} +3 -3
- package/dist/{MermaidComponent-X7N-8w2S.js.map → MermaidComponent-_cmVeKKR.js.map} +1 -1
- package/dist/chat-ui.d.ts +85 -57
- package/dist/chat-ui.js +1168 -1183
- package/dist/chat-ui.js.map +1 -1
- package/dist/{collection-view-fields-CajuwtKF.d.ts → collection-view-fields-B3fhsgn7.d.ts} +2 -0
- package/dist/{collection-view-grouping-DnuJ1U4R.js → collection-view-grouping-jIqOrBG8.js} +2 -2
- package/dist/{collection-view-grouping-DnuJ1U4R.js.map → collection-view-grouping-jIqOrBG8.js.map} +1 -1
- package/dist/{collection-view-search-D_7Qvz7p.js → collection-view-search-KbQpKHdn.js} +767 -630
- package/dist/collection-view-search-KbQpKHdn.js.map +1 -0
- package/dist/collection-view.d.ts +1 -1
- package/dist/collection-view.js +2 -2
- package/dist/{data-table-stats-row-C8CtvdDt.js → data-table-stats-row-83mX8b1B.js} +2 -2
- package/dist/{data-table-stats-row-C8CtvdDt.js.map → data-table-stats-row-83mX8b1B.js.map} +1 -1
- package/dist/data-table.d.ts +2 -2
- package/dist/data-table.js +8 -8
- package/dist/{diff-drawer-BGQhxyOh.js → diff-drawer-BMl0zobj.js} +2 -2
- package/dist/{diff-drawer-BGQhxyOh.js.map → diff-drawer-BMl0zobj.js.map} +1 -1
- package/dist/{diff-viewer-DYcswG6O.js → diff-viewer-C5KXwq7E.js} +5 -5
- package/dist/{diff-viewer-DYcswG6O.js.map → diff-viewer-C5KXwq7E.js.map} +1 -1
- package/dist/diff.js +2 -2
- package/dist/{display-sort-control-n3L5WvkJ.js → display-sort-control-BCkgKET1.js} +194 -183
- package/dist/display-sort-control-BCkgKET1.js.map +1 -0
- package/dist/{edit-mode-data-table-BclZ-pWe.js → edit-mode-data-table-ScVJJT9F.js} +8 -8
- package/dist/{edit-mode-data-table-BclZ-pWe.js.map → edit-mode-data-table-ScVJJT9F.js.map} +1 -1
- package/dist/{index-5Lw7YMKy.d.ts → index-Bc2BsdD1.d.ts} +6 -0
- package/dist/{index-DjZsR4Ey.d.ts → index-DXpADqIg.d.ts} +8 -4
- package/dist/index.d.ts +49 -49
- package/dist/index.js +453 -455
- package/dist/index.js.map +1 -1
- package/dist/kanban-renderer.d.ts +3 -3
- package/dist/kanban-renderer.js +935 -745
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/{list-row-CmFG_jCC.js → list-row-F8kBQGB-.js} +394 -384
- package/dist/list-row-F8kBQGB-.js.map +1 -0
- package/dist/{markdown-editor-CN4qOKky.js → markdown-editor-Dm4Fi3sX.js} +6 -6
- package/dist/{markdown-editor-CN4qOKky.js.map → markdown-editor-Dm4Fi3sX.js.map} +1 -1
- package/dist/{mermaid-renderer-DybQ_2Cp.js → mermaid-renderer-BtW_13Sz.js} +2 -2
- package/dist/{mermaid-renderer-DybQ_2Cp.js.map → mermaid-renderer-BtW_13Sz.js.map} +1 -1
- package/dist/mermaid.js +1 -1
- package/dist/{number-input-CyrMrDxB.js → number-input-QDqWYzTR.js} +2 -2
- package/dist/{number-input-CyrMrDxB.js.map → number-input-QDqWYzTR.js.map} +1 -1
- package/dist/{param-editor-28dBRSV4.js → param-editor-B9ASM5Lv.js} +2 -2
- package/dist/{param-editor-28dBRSV4.js.map → param-editor-B9ASM5Lv.js.map} +1 -1
- package/dist/{param-editor-field-GxhFb86w.js → param-editor-field-BmNUziwI.js} +7 -5
- package/dist/param-editor-field-BmNUziwI.js.map +1 -0
- package/dist/param-editor.js +3 -3
- package/dist/{prism-CnkSh-ZG.js → prism-EZSmZh-a.js} +2 -2
- package/dist/{prism-CnkSh-ZG.js.map → prism-EZSmZh-a.js.map} +1 -1
- package/dist/{rich-text-DOK4dDeb.js → rich-text-Dx5F8Zm1.js} +384 -363
- package/dist/rich-text-Dx5F8Zm1.js.map +1 -0
- package/dist/rich-text.d.ts +1 -1
- package/dist/rich-text.js +3 -3
- package/dist/{scroll-area-crJfiiuF.js → scroll-area-IeoRS73V.js} +3 -5
- package/dist/scroll-area-IeoRS73V.js.map +1 -0
- package/dist/terminal.js +1 -1
- package/dist/{theme-Bd_a7sU8.js → theme-CWDvF5Yn.js} +185 -73
- package/dist/theme-CWDvF5Yn.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/{tree-list-B_qqiIoM.js → tree-list-Ces1hpRd.js} +2 -2
- package/dist/{tree-list-B_qqiIoM.js.map → tree-list-Ces1hpRd.js.map} +1 -1
- package/dist/{workspace-badge-oFp29Gbe.d.ts → workspace-badge-De6OQjb5.d.ts} +2 -1
- package/dist/{workspace-badge-BfSkiGP_.js → workspace-badge-DqQKSUJw.js} +12 -12
- package/dist/workspace-badge-DqQKSUJw.js.map +1 -0
- package/package.json +2 -2
- package/dist/collection-view-search-D_7Qvz7p.js.map +0 -1
- package/dist/display-sort-control-n3L5WvkJ.js.map +0 -1
- package/dist/list-row-CmFG_jCC.js.map +0 -1
- package/dist/param-editor-field-GxhFb86w.js.map +0 -1
- package/dist/rich-text-DOK4dDeb.js.map +0 -1
- package/dist/scroll-area-crJfiiuF.js.map +0 -1
- package/dist/theme-Bd_a7sU8.js.map +0 -1
- package/dist/workspace-badge-BfSkiGP_.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-view-search-KbQpKHdn.js","names":["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","submitWithoutOpening","KanbanRendererCreateRowConfig","submitLabel","fields","labels","KanbanRendererCreateSubmission","columnId","columnAttributeId","values","attributeValues","files","File","openCreatedRow","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","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","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","ViewBarPopoverContext","ViewBarPopoverProps","open","onOpenChange","anchorRef","HTMLElement","width","placement","padding","testId","children","ViewBarPopover","props","$","_c","t0","t1","undefined","nested","t2","Symbol","for","mainAxis","t3","current","t4","strategy","hideWhenDetached","offset","getAnchorElement","t5","details","t6","event","target","detail","originalEvent","Node","contains","preventDefault","t7","t8","t9","t10","_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","Tabs","Text","useDraggable","useDroppable","ResourceContextAction","ResourceContextMenu","DropIndicator","CollectionViewTabProps","id","title","dirty","actions","reorderable","dropEdge","onMove","direction","CollectionViewTab","props","$","_c","t0","t1","disabled","drag","t2","t3","target","t4","Symbol","for","placement","t5","node","setNodeRef","t6","undefined","t7","isDragging","t8","t9","event","altKey","includes","key","preventDefault","stopPropagation","tab","currentTarget","requestAnimationFrame","scrollIntoView","block","inline","t10","t11","t12","listeners","t13","t14","t15","_c","Box","Button","Dialog","Icon","IconButton","Input","Tabs","DndContext","DragOverEvent","DragOverlay","MouseSensor","pointerWithin","TouchSensor","useSensor","useSensors","Copy","LayersPlus","Pencil","Trash2","FormEvent","useState","ResourceContextAction","ScrollArea","Tooltip","CollectionViewTab","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","draggedId","setDraggedId","drop","setDrop","reorderable","Boolean","onReorderViews","activationConstraint","distance","sensors","resolveDrop","_temp","id","targetId","edge","order","map","_temp2","remaining","filter","viewId","indexOf","includes","splice","every","viewId_0","position","reorder","undefined","finishDrag","view_0","key","label","isDisabled","icon","onClick","settings","sorts","copyFrom","separatorBefore","onDeleteView","actionsFor","view_1","find","entry","active","String","event_1","event_2","view_2","index_0","direction","neighbor","view_3","t13","t14","t15","t16","t17","t18","t19","t20","onUpdateView","t21","over","rect","current","translated","before","left","width","const","_c","_temp","_temp2","ScrollArea","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","onReorderViews","ids","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","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","ScrollArea","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","height","display","alignItems","map","rule","index","attributeId","isOpen","next","group","onUpdateView","_c","Tooltip","ScrollArea","_Fragment","normalizeSearchQuery","query","trim","toLocaleLowerCase","findSearchRanges","text","needle","ranges","Array","haystack","index","indexOf","push","length","searchRows","rows","TRow","textsOf","row","filter","some","includes","Tooltip$1","Checkbox$1","ListRow","ResourceContextMenu","DropIndicator","getIconComponent","useHostStorage","createHostPersistStorage","createHostStoreRegistry","NumberInputRoot","ParamEditorLabel","NumberInputField","normalFilter","filter","setAdvancedGroup","groups","next","group","entry","index","position","_groups","normal","addAdvancedGroup","NO_GROUPING","isEnumOptionsSource","options","isAttributesSource","attributes","DEFAULT_KANBAN_RENDERER_SETTINGS","findAttribute","id","attribute","dedupeEnumOptions","seen","option","getEnumOptions","type","toTitleCase","value","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","createContext","useCollectionItemLabel","useContext","FIELD_ICONS","Type","Hash","Calendar","SquareCheck","CircleDashed","Tags","UserRound","fieldIcon","FilterValuePanel","$","c","props","t0","t1","children","Stack","toList","RuleSelect","multiple","placeholder","T0","icon","label","selectedOptions","t10","t11","t12","t2","t3","t4","t5","t6","t7","t8","t9","onSelect","showSearch","selected","_temp$4","SearchableMenu","details","Text","option_1","t13","t14","t15","t16","Icon","t17","t18","t19","t20","ChevronDown","t21","width","Button","t22","option_0","CONDITION_LABELS","conditionLabel","pillConditionLabel","single","RELATIVE_DAY$1","dayLabel","relative","days","unit","optionLabel","ruleValueLabel","DIRECTION_LABELS","sortDirectionLabel","ascending","descending","direction","ViewBarPopoverContext","ViewBarPopover","placement","padding","nested","anchorRef","onOpenChange","target","event","testId","Popover","Portal","open","ISO_DAY$1","NumberParameterValue","draft","setDraft","useState","onChange","source","ScalarValueEditor","Input","event_0","DateBubbleValue","localOpen","setLocalOpen","useRef","setOpen","variant","Fragment","valueKind","toggle","withSavedOptions","listValue","NumberValue","TextValue","TextBubbleValue","details_0","details_1","Editable","RuleValueControl","suppliedOptions","kind","selectedLabel","allValuesLabel","_temp$3","_temp2$2","OptionChecklist","T1","ScrollArea$1","checked","HStack","RuleValueEditor","changeCondition","OptionConditionSelect","empty","positiveCondition","negativeCondition","ConditionSelect","boolean","choices","condition_0","selectedCondition","updated","RuleLead","conjunction","onConjunctionChange","FilterRuleRow","savedRule","normalizeBooleanViewRule","itemLabel","_temp$2","optionsFor","X","onDelete","IconButton","AdvancedFilterMenu","firstField","Box","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","CollectionViewTab","reorderable","drag","useDraggable","useDroppable","node","onMove","tab","title","dirty","Tabs","dropEdge","actions","RenameViewDialog","setValue","onClose","onRename","nextTitle","submit","Dialog","nextViewTitle","views","view","CollectionViewTabs","renameTarget","setRenameTarget","draggedId","setDraggedId","drop","setDrop","viewsSource","busy","sensors","useSensors","useSensor","MouseSensor","TouchSensor","resolveDrop","_temp$1","run","targetId","order","_temp2$1","remaining","viewId","viewId_0","reorder","finishDrag","createView","Pencil","view_0","Copy","Trash2","actionsFor","onActivate","view_1","active","event_1","event_2","activeViewId","view_2","neighbor","index_0","view_3","DragOverlay","DndContext","pointerWithin","state","LayersPlus","rect","before","EMPTY_VIEW_FILTER","ScalarPickerValue","complete","onSelectRule","FilterPickerValues","scalar","Check","value_0","contentProps","FilterMenu","query","setQuery","activeId","setActiveId","T2","visible","field_0","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","key","comparableFilter","isCollectionViewDirty","comparable","sort","useCollectionViews","input","store","_temp","defaults","_temp2","sourceViews","filter_0","_temp3","defaultId","previous","state_0","normalized","prior","view_5","fallback","view_4","useEffect","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","setOpenRuleIndex","isOpen","setFilter","next_0","RotateCcw","isOpen_0","selectRule","normalizeSearchQuery","findSearchRanges","ranges","haystack","text","searchRows","textsOf"],"sources":["../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/collection-view/filter-value-panel.tsx","../src/components/collection-view/rule-select.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-tab.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/collection-view/collection-view-search.ts"],"sourcesContent":["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 submitWithoutOpening?: 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 /** Defaults to opening the created row. False keeps the current board visible. */\n openCreatedRow?: boolean;\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 { 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 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 } 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 nested = useContext(ViewBarPopoverContext);\n\n return (\n <Popover.Root\n open={open}\n lazyMount\n unmountOnExit\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 onInteractOutside={(event) => {\n const target = event.detail.originalEvent.target;\n if (target instanceof Node && anchorRef.current?.contains(target)) event.preventDefault();\n }}\n >\n <Portal disabled={nested}>\n <Popover.Positioner>\n <Popover.Content\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, Tabs, Text } from \"@chakra-ui/react\";\nimport { useDraggable, useDroppable } from \"@dnd-kit/core\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { DropIndicator } from \"@/components/primitives/drop-indicator\";\n\ninterface CollectionViewTabProps {\n id: string;\n title: string;\n dirty: boolean;\n actions: ResourceContextAction[];\n reorderable: boolean;\n dropEdge?: \"before\" | \"after\";\n onMove: (direction: \"left\" | \"right\") => void;\n}\n\nexport const CollectionViewTab = (props: CollectionViewTabProps) => {\n const { id, title, dirty, actions, reorderable, dropEdge, onMove } = props;\n const drag = useDraggable({ id, disabled: !reorderable });\n const target = useDroppable({ id, disabled: !reorderable });\n return (\n <ResourceContextMenu actions={actions} positioning={{ placement: \"bottom-start\" }}>\n <Box\n position=\"relative\"\n flexShrink=\"0\"\n ref={(node: HTMLDivElement | null) => {\n drag.setNodeRef(node);\n target.setNodeRef(node);\n }}\n >\n <Tabs.Trigger\n value={id}\n title={title}\n data-reorderable={reorderable || undefined}\n data-dragging={drag.isDragging || undefined}\n aria-keyshortcuts={reorderable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n {...drag.listeners}\n onKeyDown={(event) => {\n if (!reorderable || !event.altKey || ![\"ArrowLeft\", \"ArrowRight\"].includes(event.key)) return;\n event.preventDefault();\n event.stopPropagation();\n const tab = event.currentTarget;\n onMove(event.key === \"ArrowLeft\" ? \"left\" : \"right\");\n // The optimistic move renders before the next frame, retaining this node.\n requestAnimationFrame(() => tab.scrollIntoView({ block: \"nearest\", inline: \"nearest\" }));\n }}\n >\n <Text as=\"span\" data-tab-label>\n {title}\n </Text>\n {dirty ? (\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 {dropEdge ? (\n <DropIndicator\n orientation=\"vertical\"\n left={dropEdge === \"before\" ? \"0\" : undefined}\n right={dropEdge === \"after\" ? \"0\" : undefined}\n />\n ) : null}\n </Box>\n </ResourceContextMenu>\n );\n};\n","import { Box, Button, Dialog, Icon, IconButton, Input, Tabs } from \"@chakra-ui/react\";\nimport {\n DndContext,\n type DragOverEvent,\n DragOverlay,\n MouseSensor,\n pointerWithin,\n TouchSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { Copy, LayersPlus, Pencil, Trash2 } from \"lucide-react\";\nimport { type FormEvent, useState } from \"react\";\nimport type { ResourceContextAction } from \"@/components/overlays/resource-context-menu\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { CollectionViewTab } from \"./collection-view-tab\";\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 const [draggedId, setDraggedId] = useState<string>();\n const [drop, setDrop] = useState<{ id: string; edge: \"before\" | \"after\" }>();\n const reorderable = Boolean(viewsSource?.onReorderViews && !busy && views.length > 1);\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { distance: 5 } }),\n );\n const resolveDrop = (event: DragOverEvent) => {\n if (!event.over || event.active.id === event.over.id) return undefined;\n const rect = event.active.rect.current.translated;\n const before = rect && rect.left + rect.width / 2 < event.over.rect.left + event.over.rect.width / 2;\n return { id: String(event.over.id), edge: before ? (\"before\" as const) : (\"after\" as const) };\n };\n const reorder = (id: string, targetId: string, edge: \"before\" | \"after\") => {\n if (!reorderable || id === targetId) return;\n const order = views.map((view) => view.id);\n const remaining = order.filter((viewId) => viewId !== id);\n const index = remaining.indexOf(targetId);\n if (index === -1 || !order.includes(id)) return;\n remaining.splice(index + (edge === \"after\" ? 1 : 0), 0, id);\n if (remaining.every((viewId, position) => viewId === order[position])) return;\n run(() => viewsSource!.onReorderViews!(remaining));\n };\n const finishDrag = () => {\n setDraggedId(undefined);\n setDrop(undefined);\n };\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 <DndContext\n sensors={sensors}\n collisionDetection={pointerWithin}\n onDragStart={({ active }) => setDraggedId(String(active.id))}\n onDragOver={(event) => setDrop(resolveDrop(event))}\n onDragMove={(event) => setDrop(resolveDrop(event))}\n onDragCancel={finishDrag}\n onDragEnd={(event) => {\n const target = resolveDrop(event);\n finishDrag();\n if (target) reorder(String(event.active.id), target.id, target.edge);\n }}\n >\n <ScrollArea height=\"auto\" showHorizontalScrollbar showVerticalScrollbar={false}>\n <Tabs.List width=\"max-content\">\n {views.map((view, index) => (\n <CollectionViewTab\n key={view.id}\n id={view.id}\n title={view.title}\n actions={actionsFor(view)}\n dirty={dirty && view.id === activeViewId}\n reorderable={reorderable}\n dropEdge={drop?.id === view.id ? drop.edge : undefined}\n onMove={(direction) => {\n const neighbor = views[index + (direction === \"left\" ? -1 : 1)];\n if (neighbor) reorder(view.id, neighbor.id, direction === \"left\" ? \"before\" : \"after\");\n }}\n />\n ))}\n </Tabs.List>\n </ScrollArea>\n <Box asChild pointerEvents=\"none\">\n <DragOverlay dropAnimation={null}>\n {draggedId ? (\n <Box layerStyle=\"floatingBar\" textStyle=\"label/XS/medium\">\n {views.find((view) => view.id === draggedId)?.title}\n </Box>\n ) : null}\n </DragOverlay>\n </Box>\n </DndContext>\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 /** Saves the complete view order. Omit when the source does not support reordering. */\n onReorderViews?: (ids: string[]) => 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 { ScrollArea } from \"@/components/primitives/scroll-area\";\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 <ScrollArea\n flex=\"1\"\n minW=\"0\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ height: \"full\", display: \"flex\", alignItems: \"center\" }}\n >\n <HStack gap=\"2xs\" width=\"max-content\">\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 </ScrollArea>\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","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"],"mappings":"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"}
|