feat: inherit model-picker reorder/accordion persistence and shift-delete from otto-ui (#1833)
* feat(model-picker): drag-to-reorder providers and persist accordion state Ports two model/provider picker QoL features from otto-ui: - Persist collapsed state of picker sections (favorites, recent, each provider) via a new persisted zustand store so collapse survives remounts and reloads, shared across every picker surface. - Desktop drag-to-reorder of provider sections (whole header as the mouse activator, 8px threshold so a plain click still toggles collapse), with the order persisted in useUIStore.providerOrder and applied across ModelControls, ModelMultiSelect and ModelSelector. Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com> * feat(sessions): shift-click quick action hard-deletes thread without prompt Ports the shift-quick-delete feature from otto-ui. The sidebar quick action (normally archive) becomes a no-prompt hard delete while Shift is held: the icon switches to a trash bin, the affordance turns destructive, and the click bypasses the confirmation dialog via a new skipConfirm source flag. A shared useShiftKeyHeld hook (single window listener set, useSyncExternalStore) keeps only the small action button re-rendering on Shift state changes, and resets on window blur so the affordance can't get stuck after alt-tab. Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com> --------- Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
co-authored by
Serhii Dziupin
parent
e7b952cbcb
commit
3e3cd82a47
@@ -366,6 +366,8 @@ export const ModelControls: React.FC<ModelControlsProps> = ({
|
||||
|
||||
const toggleFavoriteModel = useUIStore((state) => state.toggleFavoriteModel);
|
||||
const reorderFavoriteModel = useUIStore((state) => state.reorderFavoriteModel);
|
||||
const providerOrder = useUIStore((state) => state.providerOrder);
|
||||
const setProviderOrder = useUIStore((state) => state.setProviderOrder);
|
||||
const isFavoriteModel = useUIStore((state) => state.isFavoriteModel);
|
||||
const addRecentModel = useUIStore((state) => state.addRecentModel);
|
||||
const addRecentAgent = useUIStore((state) => state.addRecentAgent);
|
||||
@@ -2368,6 +2370,9 @@ export const ModelControls: React.FC<ModelControlsProps> = ({
|
||||
)}
|
||||
reorderFavoriteAriaLabel={t('chat.modelControls.reorderFavoriteAria')}
|
||||
reorderFavoriteTitle={t('chat.modelControls.reorderFavoriteTitle')}
|
||||
providerOrder={providerOrder}
|
||||
onReorderProvider={setProviderOrder}
|
||||
reorderProviderTitle={t('chat.modelControls.reorderProviderTitle')}
|
||||
footerContent={(activeEntry) => {
|
||||
const activeHasThinkingVariants = activeEntry
|
||||
? getModelVariantOptions(activeEntry.providerID, activeEntry.modelID).length > 0
|
||||
|
||||
Reference in New Issue
Block a user