-
Notifications
You must be signed in to change notification settings - Fork 35
Fix paragraph/heading width hugging; add LLM Chat sample demo #162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
114 changes: 114 additions & 0 deletions
114
Examples/SwiftStreamingMarkdownSample/SwiftStreamingMarkdownSample/LLMChatInteractor.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,114 @@ | ||
| // | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. See LICENSE in the project root for license information. | ||
| // | ||
|
|
||
| import Foundation | ||
| import SwiftStreamingMarkdown | ||
|
|
||
| final class LLMChatInteractor: ObservableObject { | ||
| /// Shared render config, also handed to `DocumentView` so on-screen styling | ||
| /// matches how each `RenderableDocument` was parsed. | ||
| let markdownConfig = MarkdownRenderConfig.default | ||
| .withShouldAnimateText(value: true) | ||
| .withImageConfig(ImageConfig( | ||
| enabled: true, | ||
| allowedImageTypes: [.assetCatalog, .bundledResource] | ||
| )) | ||
|
|
||
| private let parser = MarkdownParserImpl() | ||
| private var nextResponseIndex = 0 | ||
|
|
||
| /// Stream the greeting once, when the transcript is still empty. | ||
| func loadGreetingIfNeeded(into viewModel: LLMChatViewModel) async { | ||
| guard await viewModel.messages.isEmpty else { return } | ||
| await streamAssistantReply(markdown: Self.greeting, into: viewModel) | ||
| } | ||
|
|
||
| /// Send the current draft as a user message and stream a rotating reply. | ||
| func send(into viewModel: LLMChatViewModel) async { | ||
| guard let text = await viewModel.consumeDraft() else { return } | ||
| await viewModel.appendUserMessage(text) | ||
|
|
||
| let response = Self.mockResponses[nextResponseIndex] | ||
| nextResponseIndex = (nextResponseIndex + 1) % Self.mockResponses.count | ||
| await streamAssistantReply(markdown: response, into: viewModel) | ||
| } | ||
|
junyan72 marked this conversation as resolved.
|
||
|
|
||
| /// Simulate streaming by parsing progressively larger prefixes of `markdown` | ||
| /// and updating the same assistant bubble in place as its content grows. | ||
| private func streamAssistantReply(markdown: String, into viewModel: LLMChatViewModel) async { | ||
| let messageID = await viewModel.appendAssistantMessage(.empty) | ||
|
|
||
| let chunkSize = 3 | ||
| var endIndex = markdown.startIndex | ||
|
|
||
| while endIndex < markdown.endIndex { | ||
| if Task.isCancelled { return } | ||
|
|
||
| endIndex = markdown.index( | ||
| endIndex, | ||
| offsetBy: chunkSize, | ||
| limitedBy: markdown.endIndex | ||
| ) ?? markdown.endIndex | ||
|
|
||
| let snapshot = String(markdown[..<endIndex]) | ||
| let document = await parser.parse(text: snapshot, config: markdownConfig) | ||
| await viewModel.updateAssistantMessage(id: messageID, document: document) | ||
|
|
||
| if endIndex == markdown.endIndex { break } | ||
| try? await Task.sleep(nanoseconds: 30_000_000) | ||
| } | ||
| } | ||
|
|
||
| private static let greeting = | ||
| "Hi! Ask me anything to see Markdown responses with rich content." | ||
|
|
||
| private static let mockResponses = [ | ||
| """ | ||
| SwiftStreamingMarkdown is designed to render Markdown incrementally as an LLM response arrives. It supports headings, lists, tables, citations, code blocks, math, and more. | ||
|
|
||
| You can learn more in the [project documentation](https://github.com/microsoft/SwiftStreamingMarkdown?citationMarker=9F742443&citationTitle=SwiftStreamingMarkdown&citationA11yValue=SwiftStreamingMarkdown%20GitHub%20repository&citationId=chat-doc-1&chatItemId=llm-chat). | ||
| """, | ||
| """ | ||
| Here is an image loaded from the sample app's asset catalog: | ||
|
|
||
|  | ||
| """, | ||
| """ | ||
| A pre-parsed Markdown view only needs a few lines: | ||
|
|
||
| ```swift | ||
| import SwiftStreamingMarkdown | ||
| import SwiftUI | ||
|
|
||
| struct ResponseView: View { | ||
| let document: RenderableDocument | ||
|
|
||
| var body: some View { | ||
| DocumentView(renderableDocument: document) | ||
| } | ||
| } | ||
| ``` | ||
| """, | ||
| """ | ||
| Here is a quick feature comparison: | ||
|
|
||
| | Content | Supported | | ||
| | --- | --- | | ||
| | Text styles | Yes | | ||
| | Code blocks | Yes | | ||
| | Citations | Yes | | ||
| | Images | Yes | | ||
| """, | ||
| """ | ||
| You can structure an answer with several Markdown elements: | ||
|
|
||
| 1. **Summarize** the request. | ||
| 2. Provide concise implementation details. | ||
| 3. Highlight identifiers such as `DocumentView`. | ||
|
|
||
| > Mock responses rotate each time you send a message. | ||
| """ | ||
| ] | ||
| } | ||
127 changes: 127 additions & 0 deletions
127
Examples/SwiftStreamingMarkdownSample/SwiftStreamingMarkdownSample/LLMChatView.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,127 @@ | ||
| // | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. See LICENSE in the project root for license information. | ||
| // | ||
|
|
||
| import SwiftStreamingMarkdown | ||
| import SwiftUI | ||
|
|
||
| struct LLMChatView: View { | ||
| @StateObject private var viewModel = LLMChatViewModel() | ||
| @StateObject private var interactor = LLMChatInteractor() | ||
|
|
||
| #if os(macOS) | ||
| private let maxChatWidth: CGFloat = 640 | ||
| #else | ||
| private let maxChatWidth: CGFloat = .infinity | ||
| #endif | ||
|
|
||
| var body: some View { | ||
| ScrollViewReader { proxy in | ||
| ScrollView { | ||
| LazyVStack(spacing: 16) { | ||
| ForEach(viewModel.messages) { message in | ||
| ChatMessageRow(message: message, config: interactor.markdownConfig) | ||
| .id(message.id) | ||
| } | ||
| } | ||
| .padding() | ||
| .frame(maxWidth: maxChatWidth) | ||
| .frame(maxWidth: .infinity) | ||
| } | ||
| .defaultScrollAnchor(.bottom) | ||
| .onChange(of: viewModel.messages.count) { | ||
| guard let lastMessage = viewModel.messages.last else { return } | ||
| withAnimation { | ||
| proxy.scrollTo(lastMessage.id, anchor: .bottom) | ||
| } | ||
| } | ||
|
junyan72 marked this conversation as resolved.
|
||
| } | ||
| .background(Color.systemBackground) | ||
| .safeAreaInset(edge: .bottom) { | ||
| messageComposer | ||
| } | ||
| .task { | ||
| await interactor.loadGreetingIfNeeded(into: viewModel) | ||
| } | ||
| .navigationTitle("LLM Chat") | ||
| #if canImport(UIKit) | ||
| .navigationBarTitleDisplayMode(.inline) | ||
| #endif | ||
| } | ||
|
|
||
| private var messageComposer: some View { | ||
| HStack(alignment: .bottom, spacing: 12) { | ||
| TextField("Message", text: $viewModel.draft, axis: .vertical) | ||
| .lineLimit(1...5) | ||
| .textFieldStyle(.plain) | ||
| .padding(.horizontal, 14) | ||
| .padding(.vertical, 10) | ||
| .background(Color.secondary.opacity(0.12), in: .rect(cornerRadius: 20)) | ||
| .onSubmit(send) | ||
|
|
||
| Button(action: send) { | ||
| Image(systemName: "arrow.up") | ||
| .font(.headline) | ||
| .foregroundStyle(.white) | ||
| .frame(width: 38, height: 38) | ||
| .background(.blue, in: .circle) | ||
| } | ||
| .buttonStyle(.plain) | ||
| .disabled(!viewModel.canSend) | ||
| .opacity(viewModel.canSend ? 1 : 0.4) | ||
| .accessibilityLabel("Send message") | ||
| } | ||
| .padding(.horizontal) | ||
| .padding(.vertical, 10) | ||
| .frame(maxWidth: maxChatWidth) | ||
| .frame(maxWidth: .infinity) | ||
| .background(.bar) | ||
| } | ||
|
|
||
| private func send() { | ||
| Task { await interactor.send(into: viewModel) } | ||
| } | ||
| } | ||
|
|
||
| private struct ChatMessageRow: View { | ||
| let message: ChatMessage | ||
| let config: MarkdownRenderConfig | ||
|
|
||
| var body: some View { | ||
| HStack { | ||
| if case .user = message.content { | ||
| Spacer(minLength: 48) | ||
| } | ||
|
|
||
| messageContent | ||
|
|
||
| if case .assistant = message.content { | ||
| Spacer(minLength: 48) | ||
| } | ||
| } | ||
| } | ||
|
|
||
| @ViewBuilder | ||
| private var messageContent: some View { | ||
| switch message.content { | ||
| case .user(let text): | ||
| Text(text) | ||
| .foregroundStyle(.white) | ||
| .padding(.horizontal, 14) | ||
| .padding(.vertical, 10) | ||
| .background(.blue, in: .rect(cornerRadius: 18)) | ||
| case .assistant(let document): | ||
| DocumentView(renderableDocument: document, config: config) | ||
| .padding(14) | ||
| .background(Color.secondary.opacity(0.12), in: .rect(cornerRadius: 18)) | ||
| .frame(maxWidth: 560, alignment: .leading) | ||
| } | ||
| } | ||
| } | ||
|
|
||
| #Preview { | ||
| NavigationStack { | ||
| LLMChatView() | ||
| } | ||
| } | ||
55 changes: 55 additions & 0 deletions
55
Examples/SwiftStreamingMarkdownSample/SwiftStreamingMarkdownSample/LLMChatViewModel.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| // | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. See LICENSE in the project root for license information. | ||
| // | ||
|
|
||
| import Foundation | ||
| import SwiftStreamingMarkdown | ||
|
|
||
|
junyan72 marked this conversation as resolved.
|
||
| /// Presentation state for `LLMChatView`: the chat transcript and draft input. | ||
| /// All send/streaming logic lives in `LLMChatInteractor`; this type only holds | ||
| /// state and exposes main-actor mutations the interactor drives. | ||
| @MainActor | ||
| final class LLMChatViewModel: ObservableObject { | ||
| @Published private(set) var messages: [ChatMessage] = [] | ||
| @Published var draft = "" | ||
|
|
||
| var canSend: Bool { | ||
| !draft.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty | ||
| } | ||
|
|
||
| /// Return the trimmed draft and clear the input, or `nil` if it is blank. | ||
| func consumeDraft() -> String? { | ||
| let text = draft.trimmingCharacters(in: .whitespacesAndNewlines) | ||
| guard !text.isEmpty else { return nil } | ||
| draft = "" | ||
| return text | ||
| } | ||
|
|
||
| func appendUserMessage(_ text: String) { | ||
| messages.append(ChatMessage(content: .user(text))) | ||
| } | ||
|
|
||
| /// Append an assistant bubble and return its id so streaming updates can | ||
| /// target the same message as its content grows. | ||
| func appendAssistantMessage(_ document: RenderableDocument) -> UUID { | ||
| let message = ChatMessage(content: .assistant(document)) | ||
| messages.append(message) | ||
| return message.id | ||
| } | ||
|
|
||
| func updateAssistantMessage(id: UUID, document: RenderableDocument) { | ||
| guard let index = messages.firstIndex(where: { $0.id == id }) else { return } | ||
| messages[index].content = .assistant(document) | ||
| } | ||
| } | ||
|
|
||
| struct ChatMessage: Identifiable { | ||
| enum Content { | ||
| case user(String) | ||
| case assistant(RenderableDocument) | ||
| } | ||
|
|
||
| let id = UUID() | ||
| var content: Content | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file modified
BIN
-603 Bytes
(100%)
...rkdownTextSnapshotTests/testBlockLatexWithCustomColor.iPadPro11-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1.03 KB
(99%)
...xtSnapshotTests/testBlockLatexWithCustomColor.iPadPro11Landscape-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+202 Bytes
(100%)
...MarkdownTextSnapshotTests/testBlockLatexWithCustomColor.iPhone16-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-325 Bytes
(100%)
...arkdownTextSnapshotTests/testBlockLatexWithCustomColor.iPhone16-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1 Byte
(100%)
...MarkdownTextSnapshotTests/testBlockLatexWithCustomColor.macOS-standard-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1 Byte
(100%)
...arkdownTextSnapshotTests/testBlockLatexWithCustomColor.macOS-standard-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1.33 KB
(99%)
...__Snapshots__/MarkdownTextSnapshotTests/testCitations.iPadPro11-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1.76 KB
(99%)
...ots__/MarkdownTextSnapshotTests/testCitations.iPadPro11Landscape-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-4.46 KB
(95%)
...s/__Snapshots__/MarkdownTextSnapshotTests/testCitations.iPhone16-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-4.28 KB
(96%)
.../__Snapshots__/MarkdownTextSnapshotTests/testCitations.iPhone16-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-340 Bytes
(99%)
...s/__Snapshots__/MarkdownTextSnapshotTests/testCitations.macOS-standard-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-235 Bytes
(99%)
.../__Snapshots__/MarkdownTextSnapshotTests/testCitations.macOS-standard-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+725 Bytes
(100%)
...pshots__/MarkdownTextSnapshotTests/testCompositeLatex.iPadPro11-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+691 Bytes
(100%)
.../MarkdownTextSnapshotTests/testCompositeLatex.iPadPro11Landscape-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+310 Bytes
(100%)
...napshots__/MarkdownTextSnapshotTests/testCompositeLatex.iPhone16-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+471 Bytes
(100%)
...apshots__/MarkdownTextSnapshotTests/testCompositeLatex.iPhone16-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1 Byte
(100%)
...napshots__/MarkdownTextSnapshotTests/testCompositeLatex.macOS-standard-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1 Byte
(100%)
...apshots__/MarkdownTextSnapshotTests/testCompositeLatex.macOS-standard-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+709 Bytes
(100%)
...ts__/MarkdownTextSnapshotTests/testCustomBlockSpacing.iPadPro11-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1.74 KB
(99%)
...kdownTextSnapshotTests/testCustomBlockSpacing.iPadPro11Landscape-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1.51 KB
(98%)
...hots__/MarkdownTextSnapshotTests/testCustomBlockSpacing.iPhone16-dark-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-1.41 KB
(99%)
...ots__/MarkdownTextSnapshotTests/testCustomBlockSpacing.iPhone16-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-970 Bytes
(97%)
...hots__/MarkdownTextSnapshotTests/testCustomBlockSpacing.macOS-standard-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+95 Bytes
(100%)
...ots__/MarkdownTextSnapshotTests/testCustomBlockSpacing.macOS-standard-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+158 Bytes
(100%)
...kdownTextSnapshotTests/testInlineLatexWithCustomColor.iPadPro11-light-US-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+538 Bytes
(100%)
...tSnapshotTests/testInlineLatexWithCustomColor.iPadPro11Landscape-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+1.13 KB
(100%)
...arkdownTextSnapshotTests/testInlineLatexWithCustomColor.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+146 Bytes
(100%)
...rkdownTextSnapshotTests/testInlineLatexWithCustomColor.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+29 Bytes
(100%)
...arkdownTextSnapshotTests/testInlineLatexWithCustomColor.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
+160 Bytes
(100%)
...rkdownTextSnapshotTests/testInlineLatexWithCustomColor.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
+1.52 KB
(100%)
..._Snapshots__/MarkdownTextSnapshotTests/testLatexInTable.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+401 Bytes
(100%)
...Snapshots__/MarkdownTextSnapshotTests/testLatexInTable.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+16 Bytes
(100%)
..._Snapshots__/MarkdownTextSnapshotTests/testLatexInTable.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
+11 Bytes
(100%)
...Snapshots__/MarkdownTextSnapshotTests/testLatexInTable.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
-172 Bytes
(100%)
...__/MarkdownTextSnapshotTests/testLatexWithIndentation.iPadPro11-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-236 Bytes
(100%)
...ownTextSnapshotTests/testLatexWithIndentation.iPadPro11Landscape-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+623 Bytes
(100%)
...ts__/MarkdownTextSnapshotTests/testLatexWithIndentation.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+565 Bytes
(100%)
...s__/MarkdownTextSnapshotTests/testLatexWithIndentation.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-17 Bytes
(100%)
...ts__/MarkdownTextSnapshotTests/testLatexWithIndentation.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
+21 Bytes
(100%)
...s__/MarkdownTextSnapshotTests/testLatexWithIndentation.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
+128 Bytes
(100%)
...ots__/MarkdownTextSnapshotTests/testLatexWithNewLines.iPadPro11-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+85 Bytes
(100%)
...rkdownTextSnapshotTests/testLatexWithNewLines.iPadPro11Landscape-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+7 Bytes
(100%)
...shots__/MarkdownTextSnapshotTests/testLatexWithNewLines.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-107 Bytes
(100%)
...hots__/MarkdownTextSnapshotTests/testLatexWithNewLines.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
...shots__/MarkdownTextSnapshotTests/testLatexWithNewLines.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
...hots__/MarkdownTextSnapshotTests/testLatexWithNewLines.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
-112 Bytes
(100%)
.../MarkdownTextSnapshotTests/testLatexWithSpecificSymbols.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-101 Bytes
(100%)
...MarkdownTextSnapshotTests/testLatexWithSpecificSymbols.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
.../MarkdownTextSnapshotTests/testLatexWithSpecificSymbols.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
...MarkdownTextSnapshotTests/testLatexWithSpecificSymbols.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
-3.29 KB
(99%)
...s__/MarkdownTextSnapshotTests/testMarkdownLists_uikit.iPadPro11-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-2.09 KB
(99%)
...downTextSnapshotTests/testMarkdownLists_uikit.iPadPro11Landscape-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-2.45 KB
(99%)
...ots__/MarkdownTextSnapshotTests/testMarkdownLists_uikit.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-2.47 KB
(99%)
...ts__/MarkdownTextSnapshotTests/testMarkdownLists_uikit.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+105 Bytes
(100%)
...ots__/MarkdownTextSnapshotTests/testMarkdownLists_uikit.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
+123 Bytes
(100%)
...ts__/MarkdownTextSnapshotTests/testMarkdownLists_uikit.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
+154 Bytes
(100%)
...arkdownTextSnapshotTests/testMarkdownWithComplexLatex.iPadPro11-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+136 Bytes
(100%)
...extSnapshotTests/testMarkdownWithComplexLatex.iPadPro11Landscape-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+129 Bytes
(100%)
.../MarkdownTextSnapshotTests/testMarkdownWithComplexLatex.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+13 Bytes
(100%)
...MarkdownTextSnapshotTests/testMarkdownWithComplexLatex.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
.../MarkdownTextSnapshotTests/testMarkdownWithComplexLatex.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
...MarkdownTextSnapshotTests/testMarkdownWithComplexLatex.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
-669 Bytes
(100%)
...downTextSnapshotTests/testMarkdownWithInlineLatex_uikit.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-693 Bytes
(100%)
...ownTextSnapshotTests/testMarkdownWithInlineLatex_uikit.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-229 Bytes
(100%)
...downTextSnapshotTests/testMarkdownWithInlineLatex_uikit.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
-211 Bytes
(100%)
...ownTextSnapshotTests/testMarkdownWithInlineLatex_uikit.macOS-standard-light.png
Oops, something went wrong.
Binary file modified
BIN
+393 Bytes
(100%)
...rkdownTextSnapshotTests/testMixedLatexWithCustomColor.iPadPro11-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+256 Bytes
(100%)
...xtSnapshotTests/testMixedLatexWithCustomColor.iPadPro11Landscape-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+1 Byte
(100%)
...MarkdownTextSnapshotTests/testMixedLatexWithCustomColor.iPhone16-dark-US-en.png
Oops, something went wrong.
Binary file modified
BIN
+447 Bytes
(100%)
...arkdownTextSnapshotTests/testMixedLatexWithCustomColor.iPhone16-light-US-en.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
...MarkdownTextSnapshotTests/testMixedLatexWithCustomColor.macOS-standard-dark.png
Oops, something went wrong.
Binary file modified
BIN
-1 Byte
(100%)
...arkdownTextSnapshotTests/testMixedLatexWithCustomColor.macOS-standard-light.png
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.