async void Load(FigmaFileVersion version = null, int pageIndex = 0)
        {
            if (string.IsNullOrEmpty(DocumentID))
            {
                return;
            }

            windowController.EnableButtons(false);

            if (response == null)
            {
                windowController.Title = string.Format("Opening “{0}”…", DocumentID);
            }

            FigmaSharp.AppContext.Current.SetAccessToken(Token);

            if (response == null || version != null)
            {
                fileProvider = new FigmaRemoteFileProvider()
                {
                    File = DocumentID, Version = version
                };
                fileProvider.ImageLinksProcessed += (sender, e) => {
                    InvokeOnMainThread(() => {
                        windowController.ToggleToolbarSpinner(toggle_on: false);
                    });
                };

                var embeddedSheetConverter  = new EmbededSheetDialogConverter(fileProvider);
                var embeddedWindowConverter = new EmbededWindowConverter(fileProvider);

                rendererService = new NativeViewRenderingService(fileProvider);
                rendererService.CustomConverters.Add(embeddedSheetConverter);
                rendererService.CustomConverters.Add(embeddedWindowConverter);

                embeddedWindowConverter.LivePreviewLoading += (s, e) => windowController.ToggleToolbarSpinner(true);
                embeddedWindowConverter.LivePreviewLoaded  += (s, e) => windowController.ToggleToolbarSpinner(false);
            }

            var scrollView = CreateScrollView();
            await rendererService.StartAsync(DocumentID, scrollView.ContentView, new FigmaViewRendererServiceOptions()
            {
                StartPage = pageIndex
            });

            windowController.ToggleToolbarSpinner(toggle_on: true);

            new StoryboardLayoutManager().Run(scrollView.ContentView, rendererService);
            response = fileProvider.Response;

            NativeScrollView.RemoveFromSuperview();
            MainScrollView = scrollView;

            NativeScrollView = (NSScrollView)scrollView.NativeObject;
            View.AddSubview(NativeScrollView);

            windowController.Window.Title           = windowController.Title = response.name;
            windowController.Window.BackgroundColor = NativeScrollView.BackgroundColor;

            windowController.UpdatePagesPopupButton(response.document, pageIndex);
            await windowController.UpdateVersionMenu(DocumentID);

            windowController.EnableButtons(true);

            RecentStore.SharedRecentStore.AddRecent(DocumentID, windowController.Window.Title);
            ToggleSpinner(toggle_on: false);
        }
        async void Load(FigmaFileVersion version = null, int pageIndex = 0)
        {
            if (string.IsNullOrEmpty(DocumentID))
            {
                return;
            }

            windowController.EnableButtons(false);

            if (response == null)
            {
                windowController.Title = string.Format("Opening “{0}”…", DocumentID);
            }

            if (response == null || version != null)
            {
                fileProvider = new ControlRemoteNodeProvider()
                {
                    File = DocumentID, Version = version
                };
                fileProvider.ImageLinksProcessed += (sender, e) => {
                    InvokeOnMainThread(() => {
                        windowController.ToggleToolbarSpinner(toggle_on: false);
                    });
                };

                var embeddedSheetConverter  = new EmbededSheetDialogConverter(fileProvider);
                var embeddedWindowConverter = new EmbededWindowConverter(fileProvider);

                rendererService = new ControlViewRenderingService(fileProvider);
                rendererService.CustomConverters.Add(embeddedSheetConverter);
                rendererService.CustomConverters.Add(embeddedWindowConverter);

                embeddedWindowConverter.LivePreviewLoading += (s, e) => windowController.ToggleToolbarSpinner(true);
                embeddedWindowConverter.LivePreviewLoaded  += (s, e) => windowController.ToggleToolbarSpinner(false);
            }

            var scrollView = CreateScrollView();
            await rendererService.StartAsync(DocumentID, scrollView.ContentView, new ViewRenderServiceOptions()
            {
                StartPage = pageIndex
            });

            windowController.ToggleToolbarSpinner(toggle_on: true);

            new StoryboardLayoutManager().Run(scrollView.ContentView, rendererService);
            response = fileProvider.Response;

            NativeScrollView.RemoveFromSuperview();
            MainScrollView   = scrollView;
            NativeScrollView = (NSScrollView)scrollView.NativeObject;
            View.AddSubview(NativeScrollView);

            if (response != null)
            {
                windowController.Window.Title = windowController.Title = response.name;

                // NOTE: Figma does not (yet) support color styles for the document background,
                // so for now use UnderPageBackgroundColor to get a good contrast in all themes
                //
                // windowController.Window.BackgroundColor = NativeScrollView.BackgroundColor;
                windowController.Window.BackgroundColor = NSColor.UnderPageBackgroundColor;
                NativeScrollView.BackgroundColor        = NSColor.UnderPageBackgroundColor;

                windowController.UpdatePagesPopupButton(response.document, pageIndex);
                await windowController.UpdateVersionMenu(DocumentID);

                windowController.EnableButtons(true);

                RecentStore.SharedRecentStore.AddRecent(DocumentID, windowController.Window.Title);
            }
            else
            {
                if (View.Window?.WindowController is DocumentWindowController controller)
                {
                    controller.ShowError(DocumentID);
                }

                var windowController = this.Storyboard.InstantiateControllerWithIdentifier("OpenLocationWindow") as NSWindowController;
                windowController.ShowWindow(null);

                this.View.Window.Close();
            }

            ToggleSpinner(toggle_on: false);
        }