{ "version": 3, "sources": ["../../../../src/lib/ui/hooks/useDialogsProvider.tsx"], "sourcesContent": ["import { Editor, uniqueId, useEditor } from '@tldraw/editor'\nimport { createContext, useCallback, useContext, useState } from 'react'\nimport { useUiEvents } from './useEventsProvider'\n\n/** @public */\nexport interface TLUiDialogProps {\n\tonClose: () => void\n}\n\n/** @public */\nexport interface TLUiDialog {\n\tid: string\n\tonClose?: () => void\n\tcomponent: (props: TLUiDialogProps) => any\n}\n\n/** @public */\nexport type TLUiDialogsContextType = {\n\taddDialog: (dialog: Omit & { id?: string }) => string\n\tremoveDialog: (id: string) => string\n\tupdateDialog: (id: string, newDialogData: Partial) => string\n\tclearDialogs: () => void\n\tdialogs: TLUiDialog[]\n}\n\n/** @internal */\nexport const DialogsContext = createContext({} as TLUiDialogsContextType)\n\n/** @internal */\nexport type DialogsProviderProps = {\n\toverrides?: (editor: Editor) => TLUiDialogsContextType\n\tchildren: any\n}\n\n/** @internal */\nexport function DialogsProvider({ children }: DialogsProviderProps) {\n\tconst editor = useEditor()\n\tconst trackEvent = useUiEvents()\n\n\tconst [dialogs, setDialogs] = useState([])\n\n\tconst addDialog = useCallback(\n\t\t(dialog: Omit & { id?: string }) => {\n\t\t\tconst id = dialog.id ?? uniqueId()\n\t\t\tsetDialogs((d) => {\n\t\t\t\treturn [...d.filter((m) => m.id !== dialog.id), { ...dialog, id }]\n\t\t\t})\n\n\t\t\ttrackEvent('open-menu', { source: 'dialog', id })\n\t\t\teditor.addOpenMenu(id)\n\n\t\t\treturn id\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tconst updateDialog = useCallback(\n\t\t(id: string, newDialogData: Partial) => {\n\t\t\tsetDialogs((d) =>\n\t\t\t\td.map((m) => {\n\t\t\t\t\tif (m.id === id) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...m,\n\t\t\t\t\t\t\t...newDialogData,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn m\n\t\t\t\t})\n\t\t\t)\n\n\t\t\ttrackEvent('open-menu', { source: 'dialog', id })\n\t\t\teditor.addOpenMenu(id)\n\n\t\t\treturn id\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tconst removeDialog = useCallback(\n\t\t(id: string) => {\n\t\t\tsetDialogs((d) =>\n\t\t\t\td.filter((m) => {\n\t\t\t\t\tif (m.id === id) {\n\t\t\t\t\t\tm.onClose?.()\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t)\n\n\t\t\ttrackEvent('close-menu', { source: 'dialog', id })\n\t\t\teditor.deleteOpenMenu(id)\n\n\t\t\treturn id\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tconst clearDialogs = useCallback(() => {\n\t\tsetDialogs((d) => {\n\t\t\td.forEach((m) => {\n\t\t\t\tm.onClose?.()\n\t\t\t\ttrackEvent('close-menu', { source: 'dialog', id: m.id })\n\t\t\t\teditor.deleteOpenMenu(m.id)\n\t\t\t})\n\t\t\treturn []\n\t\t})\n\t}, [editor, trackEvent])\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n\n/** @public */\nexport function useDialogs() {\n\tconst ctx = useContext(DialogsContext)\n\n\tif (!ctx) {\n\t\tthrow new Error('useDialogs must be used within a DialogsProvider')\n\t}\n\n\treturn ctx\n}\n"], "mappings": "AA8GE;AA9GF,SAAiB,UAAU,iBAAiB;AAC5C,SAAS,eAAe,aAAa,YAAY,gBAAgB;AACjE,SAAS,mBAAmB;AAwBrB,MAAM,iBAAiB,cAAc,CAAC,CAA2B;AASjE,SAAS,gBAAgB,EAAE,SAAS,GAAyB;AACnE,QAAM,SAAS,UAAU;AACzB,QAAM,aAAa,YAAY;AAE/B,QAAM,CAAC,SAAS,UAAU,IAAI,SAAuB,CAAC,CAAC;AAEvD,QAAM,YAAY;AAAA,IACjB,CAAC,WAAqD;AACrD,YAAM,KAAK,OAAO,MAAM,SAAS;AACjC,iBAAW,CAAC,MAAM;AACjB,eAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC;AAAA,MAClE,CAAC;AAED,iBAAW,aAAa,EAAE,QAAQ,UAAU,GAAG,CAAC;AAChD,aAAO,YAAY,EAAE;AAErB,aAAO;AAAA,IACR;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACpB;AAEA,QAAM,eAAe;AAAA,IACpB,CAAC,IAAY,kBAAuC;AACnD;AAAA,QAAW,CAAC,MACX,EAAE,IAAI,CAAC,MAAM;AACZ,cAAI,EAAE,OAAO,IAAI;AAChB,mBAAO;AAAA,cACN,GAAG;AAAA,cACH,GAAG;AAAA,YACJ;AAAA,UACD;AACA,iBAAO;AAAA,QACR,CAAC;AAAA,MACF;AAEA,iBAAW,aAAa,EAAE,QAAQ,UAAU,GAAG,CAAC;AAChD,aAAO,YAAY,EAAE;AAErB,aAAO;AAAA,IACR;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACpB;AAEA,QAAM,eAAe;AAAA,IACpB,CAAC,OAAe;AACf;AAAA,QAAW,CAAC,MACX,EAAE,OAAO,CAAC,MAAM;AACf,cAAI,EAAE,OAAO,IAAI;AAChB,cAAE,UAAU;AACZ,mBAAO;AAAA,UACR;AACA,iBAAO;AAAA,QACR,CAAC;AAAA,MACF;AAEA,iBAAW,cAAc,EAAE,QAAQ,UAAU,GAAG,CAAC;AACjD,aAAO,eAAe,EAAE;AAExB,aAAO;AAAA,IACR;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACpB;AAEA,QAAM,eAAe,YAAY,MAAM;AACtC,eAAW,CAAC,MAAM;AACjB,QAAE,QAAQ,CAAC,MAAM;AAChB,UAAE,UAAU;AACZ,mBAAW,cAAc,EAAE,QAAQ,UAAU,IAAI,EAAE,GAAG,CAAC;AACvD,eAAO,eAAe,EAAE,EAAE;AAAA,MAC3B,CAAC;AACD,aAAO,CAAC;AAAA,IACT,CAAC;AAAA,EACF,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,SACC;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACA,OAAO,EAAE,SAAS,WAAW,cAAc,cAAc,aAAa;AAAA,MAErE;AAAA;AAAA,EACF;AAEF;AAGO,SAAS,aAAa;AAC5B,QAAM,MAAM,WAAW,cAAc;AAErC,MAAI,CAAC,KAAK;AACT,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACnE;AAEA,SAAO;AACR;", "names": [] }