import { createStore } from 'zustand' import type { Features } from './types' import { Resolution, TransferMethod } from '@/types/app' export type FeaturesModal = { showFeaturesModal: boolean setShowFeaturesModal: (showFeaturesModal: boolean) => void } export type FeaturesState = { features: Features } export type FeaturesAction = { setFeatures: (features: Features) => void } export type FeatureStoreState = FeaturesState & FeaturesAction & FeaturesModal export type FeaturesStore = ReturnType export const createFeaturesStore = (initProps?: Partial) => { const DEFAULT_PROPS: FeaturesState = { features: { moreLikeThis: { enabled: false, }, opening: { enabled: false, }, suggested: { enabled: false, }, text2speech: { enabled: false, }, speech2text: { enabled: false, }, citation: { enabled: false, }, moderation: { enabled: false, }, file: { image: { enabled: false, detail: Resolution.high, number_limits: 3, transfer_methods: [TransferMethod.local_file, TransferMethod.remote_url], }, }, annotationReply: { enabled: false, }, }, } return createStore()(set => ({ ...DEFAULT_PROPS, ...initProps, setFeatures: features => set(() => ({ features })), showFeaturesModal: false, setShowFeaturesModal: showFeaturesModal => set(() => ({ showFeaturesModal })), })) }