From 4b5a0105eece1c3aa7f02739122464260a9c5def Mon Sep 17 00:00:00 2001 From: clover caruso Date: Tue, 13 Oct 2026 10:14:33 -0700 Subject: [PATCH] feat: replace T3's composer with @clo/markdown-editor Clover wants predictable editing of Markdown drafts. Replace Tiptap with @clo/markdown-editor, using canonical Markdown in CodeMirror and React portals for T3 controls. Preserve attachments, structured clipboard records, citations, IME, draft boundaries, undo, and submission settings. Complete inline emoji shortcodes without sending the draft. Retain fence indentation and exits, citation keyboard focus, theme-aware syntax and links, and deliberate three-marker underline headings. Require an explicit > marker on each blockquote line so unmarked replies exit the quote, including nested quotes and callouts. Keep transcript prose at its normal weight; apply heading typography only to headings. Clover wants figures to borrow gutter space only when their content needs it. Size top-level code, tables, diagrams, and rendered HTML between the prose column and equal space from both gutters, using their natural width in between. Keep every expanded figure centered on the prose column even when the details card narrows one gutter. Re-measure changing HTML figures and keep copy controls clear of the details card; prose and nested blocks retain their reading width. Group consecutive video embeds into equal-width rows that wrap, preserving media controls, authored anchors, streamed player identity, and singleton presentation. Use each video's natural aspect ratio within the available bounds, retaining the known frame size on failure. Prose and non-video content separate the groups. Color bold and italic from theme roles, give combined emphasis a red wash, and distinguish running tools from completed ones in collapsed and expanded work logs. Preserve text contrast, wrapping controls, keyboard access, and existing activity motion. Normalize list spacing and gutters across tight, loose, nested, and task lists. Preserve authored file-link labels as one actionable chip, including inline formatting, and keep the destination accessible. Retain soft-break spacing after autolinks and theme the safe keyboard, highlight, and underline tags. Keep footnote reference sentences visible after following return links and use theme-derived neutral syntax colors for readable comments and punctuation. Clover wants code diagrams to retain their alignment and continuous strokes. Use the configured monospace font with matching-width Iosevka box glyphs and 1.25 line spacing. Retain Recursive as a custom choice with CASL 0.15 and MONO 1; the fork default uses locally supplied Name Mono. Clover wants videos to remain usable while moving between chats. Share themed playback, seek, volume, speed, fullscreen, picture-in-picture, and source-aware file actions across transcript videos and file previews. Retain the same playing element in a floating player when its view closes, restore it to the matching embed, and release it on close, completion, replacement, or leaving the authenticated shell. Local files offer Finder reveal; remote videos offer download. On macOS, QuickTime opens a private client-side temporary copy, using fresh signed access for environment files. Hosted Markdown widgets reuse this player; the standalone editor keeps its native fallback. Assisted-by: gpt-6.1-sol --- apps/desktop/src/ipc/DesktopIpc.ts | 1 + apps/desktop/src/ipc/DesktopIpcHandlers.ts | 2 + apps/desktop/src/ipc/channels.ts | 2 + apps/desktop/src/ipc/methods/media.test.ts | 56 + apps/desktop/src/ipc/methods/media.ts | 37 + apps/desktop/src/main.ts | 2 + apps/desktop/src/media/DesktopVideo.test.ts | 167 ++ apps/desktop/src/media/DesktopVideo.ts | 122 + apps/desktop/src/preload.ts | 6 + apps/web/package.json | 20 +- apps/web/src/appearanceFonts.ts | 1 + apps/web/src/assets/fonts/Recursive-OFL.txt | 93 + .../src/assets/fonts/Recursive_VF_1.085.woff2 | Bin 0 -> 718680 bytes apps/web/src/components/ChatMarkdown.test.tsx | 285 ++- apps/web/src/components/ChatMarkdown.tsx | 162 +- .../components/ComposerPromptEditor.test.tsx | 283 +++ .../src/components/ComposerPromptEditor.tsx | 641 +++++- ...rPromptEditorTiptap.citationDraft.test.tsx | 10 +- ...oserPromptEditorTiptap.navigation.test.tsx | 126 -- .../components/ComposerPromptEditorTiptap.tsx | 1985 ----------------- apps/web/src/components/chat/ChatCanvas.tsx | 17 +- apps/web/src/components/chat/ChatComposer.tsx | 142 +- .../chat/ComposerCodeBlockNodeView.tsx | 67 - .../components/chat/ComposerCommandMenu.tsx | 26 +- .../components/chat/ExpandedImageDialog.tsx | 1 + apps/web/src/components/chat/FileTagChip.tsx | 3 +- .../src/components/chat/HtmlRenderFrame.tsx | 13 +- .../src/components/chat/MermaidDiagram.tsx | 14 +- .../src/components/chat/MessagesTimeline.tsx | 37 +- .../chat/composerEmojiSearch.test.ts | 29 + .../components/chat/composerEmojiSearch.ts | 40 + .../chat/composerMenuHighlight.test.ts | 40 +- .../components/chat/composerMenuHighlight.ts | 15 + .../chat/useComposerTriggerState.test.tsx | 2 +- .../composerCodeBlockHighlight.test.ts | 226 +- .../components/composerCodeBlockHighlight.ts | 360 ++- .../components/composerMarkdownEditor.test.ts | 412 ++++ .../src/components/composerMarkdownEditor.ts | 486 ++++ .../src/components/composerSelection.test.ts | 27 - apps/web/src/components/composerSelection.ts | 15 - .../components/files/BrowserDocumentFrame.tsx | 21 +- .../components/media/MediaActions.test.tsx | 127 ++ .../web/src/components/media/MediaActions.tsx | 120 +- .../media/MediaPlaybackHost.test.tsx | 336 +++ .../components/media/MediaPlaybackHost.tsx | 258 +++ .../media/MediaVideoControls.test.tsx | 139 ++ .../components/media/MediaVideoControls.tsx | 255 +++ .../src/components/media/MediaVideoPlayer.css | 76 + .../src/components/media/MediaVideoPlayer.tsx | 77 +- .../src/components/settings/settingsSearch.ts | 2 +- apps/web/src/composer-block-shortcuts.test.ts | 126 -- apps/web/src/composer-code-block.test.ts | 391 ---- apps/web/src/composer-code-block.ts | 254 --- .../src/composer-list-continuation.test.ts | 85 - apps/web/src/composer-list-continuation.ts | 147 -- apps/web/src/composer-list-split.test.ts | 265 --- apps/web/src/composer-logic.test.ts | 56 + apps/web/src/composer-logic.ts | 70 +- apps/web/src/composer-rich-text-doc.test.ts | 1122 ---------- apps/web/src/composer-rich-text-doc.ts | 1573 ------------- apps/web/src/composer-rich-text.test.ts | 67 - apps/web/src/composer-rich-text.ts | 131 -- apps/web/src/composer-undo-grouping.test.ts | 143 -- apps/web/src/composer-undo-grouping.ts | 64 - apps/web/src/index.css | 369 +-- apps/web/src/lib/syntaxHighlighting.test.ts | 36 +- apps/web/src/lib/syntaxHighlighting.ts | 53 +- apps/web/src/routes/__root.tsx | 13 +- packages/client-runtime/src/mediaActions.ts | 4 +- packages/contracts/src/ipc.ts | 1 + packages/markdown-editor/LICENSE | 15 + packages/markdown-editor/package.json | 48 + packages/markdown-editor/src/chips.ts | 37 + packages/markdown-editor/src/commands.ts | 297 +++ packages/markdown-editor/src/editor.ts | 339 +++ packages/markdown-editor/src/emoji.ts | 211 ++ packages/markdown-editor/src/hard-wrap.ts | 606 +++++ packages/markdown-editor/src/html.ts | 358 +++ packages/markdown-editor/src/index.ts | 63 + packages/markdown-editor/src/keymap.ts | 39 + packages/markdown-editor/src/live-preview.ts | 1242 +++++++++++ packages/markdown-editor/src/mentions.ts | 246 ++ packages/markdown-editor/src/react.tsx | 141 ++ packages/markdown-editor/src/triggers.ts | 55 + packages/markdown-editor/src/widgets.ts | 430 ++++ packages/markdown-editor/test/dom.ts | 9 + packages/markdown-editor/test/editor.test.ts | 254 +++ packages/markdown-editor/test/html.test.ts | 211 ++ .../markdown-editor/test/live-preview.test.ts | 123 + packages/markdown-editor/test/media.test.ts | 153 ++ .../markdown-editor/test/mentions.test.ts | 141 ++ .../markdown-editor/tsconfig.browser.json | 25 + packages/shared/src/htmlRender.test.ts | 132 +- packages/shared/src/htmlRender.ts | 18 +- packages/shared/src/markdownPipeline.test.ts | 39 + packages/shared/src/markdownPipeline.ts | 1 + pnpm-lock.yaml | 771 +++---- third-party-licenses.config.json | 8 + 98 files changed, 10484 insertions(+), 7882 deletions(-) create mode 100644 apps/desktop/src/ipc/methods/media.test.ts create mode 100644 apps/desktop/src/ipc/methods/media.ts create mode 100644 apps/desktop/src/media/DesktopVideo.test.ts create mode 100644 apps/desktop/src/media/DesktopVideo.ts create mode 100644 apps/web/src/assets/fonts/Recursive-OFL.txt create mode 100644 apps/web/src/assets/fonts/Recursive_VF_1.085.woff2 create mode 100644 apps/web/src/components/ComposerPromptEditor.test.tsx delete mode 100644 apps/web/src/components/ComposerPromptEditorTiptap.navigation.test.tsx delete mode 100644 apps/web/src/components/ComposerPromptEditorTiptap.tsx delete mode 100644 apps/web/src/components/chat/ComposerCodeBlockNodeView.tsx create mode 100644 apps/web/src/components/chat/composerEmojiSearch.test.ts create mode 100644 apps/web/src/components/chat/composerEmojiSearch.ts create mode 100644 apps/web/src/components/composerMarkdownEditor.test.ts create mode 100644 apps/web/src/components/composerMarkdownEditor.ts delete mode 100644 apps/web/src/components/composerSelection.test.ts delete mode 100644 apps/web/src/components/composerSelection.ts create mode 100644 apps/web/src/components/media/MediaPlaybackHost.test.tsx create mode 100644 apps/web/src/components/media/MediaPlaybackHost.tsx create mode 100644 apps/web/src/components/media/MediaVideoControls.test.tsx create mode 100644 apps/web/src/components/media/MediaVideoControls.tsx create mode 100644 apps/web/src/components/media/MediaVideoPlayer.css delete mode 100644 apps/web/src/composer-block-shortcuts.test.ts delete mode 100644 apps/web/src/composer-code-block.test.ts delete mode 100644 apps/web/src/composer-code-block.ts delete mode 100644 apps/web/src/composer-list-continuation.test.ts delete mode 100644 apps/web/src/composer-list-continuation.ts delete mode 100644 apps/web/src/composer-list-split.test.ts delete mode 100644 apps/web/src/composer-rich-text-doc.test.ts delete mode 100644 apps/web/src/composer-rich-text-doc.ts delete mode 100644 apps/web/src/composer-rich-text.test.ts delete mode 100644 apps/web/src/composer-rich-text.ts delete mode 100644 apps/web/src/composer-undo-grouping.test.ts delete mode 100644 apps/web/src/composer-undo-grouping.ts create mode 100644 packages/markdown-editor/LICENSE create mode 100644 packages/markdown-editor/package.json create mode 100644 packages/markdown-editor/src/chips.ts create mode 100644 packages/markdown-editor/src/commands.ts create mode 100644 packages/markdown-editor/src/editor.ts create mode 100644 packages/markdown-editor/src/emoji.ts create mode 100644 packages/markdown-editor/src/hard-wrap.ts create mode 100644 packages/markdown-editor/src/html.ts create mode 100644 packages/markdown-editor/src/index.ts create mode 100644 packages/markdown-editor/src/keymap.ts create mode 100644 packages/markdown-editor/src/live-preview.ts create mode 100644 packages/markdown-editor/src/mentions.ts create mode 100644 packages/markdown-editor/src/react.tsx create mode 100644 packages/markdown-editor/src/triggers.ts create mode 100644 packages/markdown-editor/src/widgets.ts create mode 100644 packages/markdown-editor/test/dom.ts create mode 100644 packages/markdown-editor/test/editor.test.ts create mode 100644 packages/markdown-editor/test/html.test.ts create mode 100644 packages/markdown-editor/test/live-preview.test.ts create mode 100644 packages/markdown-editor/test/media.test.ts create mode 100644 packages/markdown-editor/test/mentions.test.ts create mode 100644 packages/markdown-editor/tsconfig.browser.json diff --git a/apps/desktop/src/ipc/DesktopIpc.ts b/apps/desktop/src/ipc/DesktopIpc.ts index dd645a3379f6614fdb70bafd3b4e495abd286a57..37d68ec05ddec3fd3566b9e3f5ff2337522e090b 100644 --- a/apps/desktop/src/ipc/DesktopIpc.ts +++ b/apps/desktop/src/ipc/DesktopIpc.ts @@ -6,6 +6,7 @@ import * as Scope from "effect/Scope"; export interface DesktopIpcInvokeEvent { readonly sender: { readonly id: number }; + readonly senderFrame?: { readonly url: string; readonly parent: unknown } | null; } export interface DesktopIpcSyncEvent { diff --git a/apps/desktop/src/ipc/DesktopIpcHandlers.ts b/apps/desktop/src/ipc/DesktopIpcHandlers.ts index caed223e90e8666176c1f76e59f835a567a63531..585bbb3864b0fbe8ddbca903baefdc6740976ccf 100644 --- a/apps/desktop/src/ipc/DesktopIpcHandlers.ts +++ b/apps/desktop/src/ipc/DesktopIpcHandlers.ts @@ -1,3 +1,4 @@ +import { openVideo } from "./methods/media.ts"; import * as Effect from "effect/Effect"; import { receiveProviderAuthCallback, cancelProviderAuthCallback } from "./methods/providerAuth.ts"; @@ -145,6 +146,7 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers" yield* ipc.handle(setTheme); yield* ipc.handle(showContextMenu); yield* ipc.handle(openExternal); + yield* ipc.handle(openVideo); yield* ipc.handle(receiveProviderAuthCallback); yield* ipc.handle(cancelProviderAuthCallback); yield* ipc.handle(openSystemSettings); diff --git a/apps/desktop/src/ipc/channels.ts b/apps/desktop/src/ipc/channels.ts index 8e2ebec04f95883050fa53341abdad0281d1582a..9a8e05d20ee25dda9a209ddcb9f574354a6117b4 100644 --- a/apps/desktop/src/ipc/channels.ts +++ b/apps/desktop/src/ipc/channels.ts @@ -124,3 +124,5 @@ export const CANCEL_PROVIDER_AUTH_CALLBACK_CHANNEL = "desktop:cancel-provider-au export const TAKE_LEGACY_LOCAL_STORAGE_CHANNEL = "desktop:take-legacy-local-storage"; export const COMPLETE_LEGACY_LOCAL_STORAGE_CHANNEL = "desktop:complete-legacy-local-storage"; export const DESKTOP_TERMINAL_CHANNEL = "desktop:terminal"; + +export const OPEN_VIDEO_CHANNEL = "desktop:open-video"; diff --git a/apps/desktop/src/ipc/methods/media.test.ts b/apps/desktop/src/ipc/methods/media.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c316641468abba0141fb4a5b9793c88508482a64 --- /dev/null +++ b/apps/desktop/src/ipc/methods/media.test.ts @@ -0,0 +1,56 @@ +import * as NodeServices from "@effect/platform-node/NodeServices"; +import { assert, it } from "@effect/vitest"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import type * as Electron from "electron"; +import { vi } from "vite-plus/test"; + +vi.mock("electron", () => ({})); + +import * as DesktopConfig from "../../app/DesktopConfig.ts"; +import * as DesktopEnvironment from "../../app/DesktopEnvironment.ts"; +import * as ElectronWindow from "../../electron/ElectronWindow.ts"; +import * as DesktopVideo from "../../media/DesktopVideo.ts"; +import { getDesktopUrl } from "../../electron/ElectronProtocol.ts"; +import { openVideo } from "./media.ts"; + +it.effect("allows only the top-level app frame to open a video", () => { + const calls: unknown[] = []; + // Electron owns this object; only the native identity checks are exercised here. + const window = { isDestroyed: () => false, webContents: { id: 42 } } as Electron.BrowserWindow; + const layer = Layer.mergeAll( + DesktopEnvironment.layer({ + dirname: "/repo/apps/desktop/dist-electron", + homeDirectory: "/tmp/t3-media-test", + platform: "darwin", + processArch: "arm64", + appVersion: "0.0.45", + appPath: "/tmp/T3 Code.app", + isPackaged: true, + resourcesPath: "/tmp/resources", + runningUnderArm64Translation: false, + }).pipe(Layer.provide(Layer.mergeAll(NodeServices.layer, DesktopConfig.layerTest({})))), + Layer.mock(ElectronWindow.ElectronWindow, { main: Effect.succeedSome(window) }), + Layer.succeed(DesktopVideo.DesktopVideo, { + open: (input) => + Effect.sync(() => { + calls.push(input); + }), + }), + ); + const input = { url: "https://remote.test/clip.mp4", name: "clip.mp4" }; + const trustedFrame = { parent: null, url: getDesktopUrl(false) }; + return Effect.gen(function* () { + for (const event of [ + undefined, + { sender: { id: 100 }, senderFrame: trustedFrame }, + { sender: { id: 42 }, senderFrame: { parent: {}, url: trustedFrame.url } }, + { sender: { id: 42 }, senderFrame: { parent: null, url: "https://preview.test" } }, + { sender: { id: 42 } }, + ]) + assert.equal((yield* Effect.result(openVideo.handler(input, event)))._tag, "Failure"); + assert.equal(calls.length, 0); + yield* openVideo.handler(input, { sender: { id: 42 }, senderFrame: trustedFrame }); + assert.deepEqual(calls, [input]); + }).pipe(Effect.provide(layer)); +}); diff --git a/apps/desktop/src/ipc/methods/media.ts b/apps/desktop/src/ipc/methods/media.ts new file mode 100644 index 0000000000000000000000000000000000000000..c98502645f4ac6d995668312a30d7619daa07a15 --- /dev/null +++ b/apps/desktop/src/ipc/methods/media.ts @@ -0,0 +1,37 @@ +import * as Effect from "effect/Effect"; +import * as Option from "effect/Option"; +import * as Schema from "effect/Schema"; +import * as DesktopEnvironment from "../../app/DesktopEnvironment.ts"; +import * as ElectronWindow from "../../electron/ElectronWindow.ts"; +import { getDesktopUrl } from "../../electron/ElectronProtocol.ts"; +import * as DesktopVideo from "../../media/DesktopVideo.ts"; +import * as DesktopIpc from "../DesktopIpc.ts"; +import * as IpcChannels from "../channels.ts"; + +export const openVideo = DesktopIpc.makeIpcMethod({ + channel: IpcChannels.OPEN_VIDEO_CHANNEL, + payload: Schema.Struct({ + url: Schema.String.check(Schema.isMaxLength(16_384)), + name: Schema.String.check(Schema.isMaxLength(255)), + }), + result: Schema.Void, + handler: Effect.fn("desktop.ipc.media.openVideo")(function* (input, event) { + const environment = yield* DesktopEnvironment.DesktopEnvironment; + const main = yield* (yield* ElectronWindow.ElectronWindow).main; + const expected = new URL(getDesktopUrl(environment.isDevelopment)); + const frame = event?.senderFrame; + const source = frame && URL.canParse(frame.url) ? new URL(frame.url) : null; + if ( + event === undefined || + Option.isNone(main) || + main.value.isDestroyed() || + main.value.webContents.id !== event.sender.id || + frame?.parent !== null || + source?.protocol !== expected.protocol || + source.host !== expected.host + ) + return yield* new DesktopVideo.DesktopVideoError({ stage: "source" }); + + return yield* (yield* DesktopVideo.DesktopVideo).open(input); + }), +}); diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 5720858f6993a31beae743e5c4dd9acfa1dfd99f..9c0b083f00fc28a6d911ab780a140e377f46920d 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -23,6 +23,7 @@ import type { RemoteT3RunnerOptions } from "@t3tools/ssh/tunnel"; import serverPackageJson from "../../server/package.json" with { type: "json" }; import * as DesktopIpc from "./ipc/DesktopIpc.ts"; +import * as DesktopVideo from "./media/DesktopVideo.ts"; import * as ElectronApp from "./electron/ElectronApp.ts"; import * as ElectronDialog from "./electron/ElectronDialog.ts"; import * as ElectronMenu from "./electron/ElectronMenu.ts"; @@ -216,6 +217,7 @@ const layerDesktopLocalEnvironmentAuth = DesktopLocalEnvironmentAuth.layer.pipe( const layerDesktopApplication = Layer.mergeAll( DesktopLifecycle.layer, + DesktopVideo.layer, layerDesktopAppActivation, DesktopWebLinks.layer, DesktopApplicationMenu.layer, diff --git a/apps/desktop/src/media/DesktopVideo.test.ts b/apps/desktop/src/media/DesktopVideo.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..896f79edcb90179be7d75077f13a4a0339578eb8 --- /dev/null +++ b/apps/desktop/src/media/DesktopVideo.test.ts @@ -0,0 +1,167 @@ +import * as NodeServices from "@effect/platform-node/NodeServices"; +import { assert, it } from "@effect/vitest"; +import * as HostProcess from "@t3tools/shared/HostProcess"; +import * as Effect from "effect/Effect"; +import * as FileSystem from "effect/FileSystem"; +import * as Layer from "effect/Layer"; +import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner"; +import { beforeEach, vi } from "vite-plus/test"; + +const { fetchVideo, open } = vi.hoisted(() => ({ fetchVideo: vi.fn(), open: vi.fn() })); +vi.mock("electron", () => ({ net: { fetch: fetchVideo } })); + +import * as DesktopVideo from "./DesktopVideo.ts"; + +const spawner = Layer.mock(ChildProcessSpawner.ChildProcessSpawner, { + exitCode: (command) => + Effect.sync(() => { + open(command); + return ChildProcessSpawner.ExitCode(0); + }), +}); + +beforeEach(() => { + fetchVideo.mockReset().mockImplementation( + async () => + new Response("video bytes", { + headers: { "content-type": "video/mp4" }, + }), + ); + open.mockReset(); +}); + +const layer = DesktopVideo.layer.pipe(Layer.provide(spawner)); + +it.effect( + "streams to a private client temp file, opens only QuickTime, and cleans up on app scope exit", + () => { + let openedPath = ""; + return Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + yield* Effect.gen(function* () { + const video = yield* DesktopVideo.DesktopVideo; + yield* video.open({ + url: "https://remote.test/api/assets/signed/clip.mp4", + name: "../../clip.mp4", + }); + const command = open.mock.lastCall![0]; + assert.equal(command.command, "/usr/bin/open"); + assert.deepEqual(command.args.slice(0, 2), [ + "-a", + "/System/Applications/QuickTime Player.app", + ]); + openedPath = command.args[2]; + assert.match(openedPath, /\/t3-video-[^/]+\/clip\.mp4$/); + assert.equal(yield* fs.readFileString(openedPath), "video bytes"); + assert.equal((yield* fs.stat(openedPath)).mode & 0o777, 0o600); + }).pipe(Effect.provide(layer)); + assert.isFalse(yield* fs.exists(openedPath)); + }).pipe( + Effect.provideService(HostProcess.Platform, "darwin"), + Effect.provide(NodeServices.layer), + ); + }, +); + +it.effect("rejects non-macOS before downloading", () => + Effect.gen(function* () { + const result = yield* Effect.result( + (yield* DesktopVideo.DesktopVideo).open({ + url: "https://remote.test/clip.mp4", + name: "clip.mp4", + }), + ); + assert.equal(result._tag, "Failure"); + assert.equal(fetchVideo.mock.calls.length, 0); + assert.equal(open.mock.calls.length, 0); + }).pipe( + Effect.provide(layer), + Effect.provideService(HostProcess.Platform, "linux"), + Effect.provide(NodeServices.layer), + ), +); + +it.effect("rejects file URLs and nonvideo filenames without reading local files", () => + Effect.gen(function* () { + const video = yield* DesktopVideo.DesktopVideo; + for (const input of [ + { url: "file:///Users/private/clip.mp4", name: "clip.mp4" }, + { url: "https://remote.test/run", name: "run.command" }, + { url: "https://user:password@remote.test/clip.mp4", name: "clip.mp4" }, + ]) + assert.equal((yield* Effect.result(video.open(input)))._tag, "Failure"); + assert.equal(fetchVideo.mock.calls.length, 0); + assert.equal(open.mock.calls.length, 0); + }).pipe( + Effect.provide(layer), + Effect.provideService(HostProcess.Platform, "darwin"), + Effect.provide(NodeServices.layer), + ), +); + +it.effect("does not open an authorization error or HTML error page as a video", () => + Effect.gen(function* () { + const video = yield* DesktopVideo.DesktopVideo; + for (const response of [ + new Response("unauthorized", { status: 401 }), + new Response("sign in", { headers: { "content-type": "text/html" } }), + ]) { + fetchVideo.mockResolvedValueOnce(response); + assert.equal( + (yield* Effect.result( + video.open({ url: "https://remote.test/clip.mp4", name: "clip.mp4" }), + ))._tag, + "Failure", + ); + } + assert.equal(open.mock.calls.length, 0); + }).pipe( + Effect.provide(layer), + Effect.provideService(HostProcess.Platform, "darwin"), + Effect.provide(NodeServices.layer), + ), +); + +it.effect("does not launch a partial download when its stream fails", () => + Effect.gen(function* () { + fetchVideo.mockResolvedValueOnce( + new Response( + new ReadableStream({ + start(controller) { + controller.enqueue(new TextEncoder().encode("partial")); + controller.error(new Error("disconnected")); + }, + }), + { headers: { "content-type": "video/mp4" } }, + ), + ); + const video = yield* DesktopVideo.DesktopVideo; + assert.equal( + (yield* Effect.result(video.open({ url: "https://remote.test/clip.mp4", name: "clip.mp4" }))) + ._tag, + "Failure", + ); + assert.equal(open.mock.calls.length, 0); + }).pipe( + Effect.provide(layer), + Effect.provideService(HostProcess.Platform, "darwin"), + Effect.provide(NodeServices.layer), + ), +); + +it.effect("uses the video response type for an extensionless remote download", () => + Effect.gen(function* () { + fetchVideo.mockResolvedValueOnce( + new Response("movie", { headers: { "content-type": "video/quicktime" } }), + ); + yield* (yield* DesktopVideo.DesktopVideo).open({ + url: "https://remote.test/download?id=clip", + name: "recording", + }); + assert.match(open.mock.lastCall![0].args[2], /\/recording\.mov$/); + }).pipe( + Effect.provide(layer), + Effect.provideService(HostProcess.Platform, "darwin"), + Effect.provide(NodeServices.layer), + ), +); diff --git a/apps/desktop/src/media/DesktopVideo.ts b/apps/desktop/src/media/DesktopVideo.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c0f090a6177eed0f11104055ea1c0dd6a5e2985 --- /dev/null +++ b/apps/desktop/src/media/DesktopVideo.ts @@ -0,0 +1,122 @@ +import { VIDEO_FILE_EXTENSIONS, videoMimeType } from "@t3tools/shared/video"; +import * as HostProcess from "@t3tools/shared/HostProcess"; +import * as Context from "effect/Context"; +import * as Effect from "effect/Effect"; +import * as FileSystem from "effect/FileSystem"; +import * as Layer from "effect/Layer"; +import * as Path from "effect/Path"; +import * as Schema from "effect/Schema"; +import * as Scope from "effect/Scope"; +import * as Stream from "effect/Stream"; +import * as ChildProcess from "effect/process/ChildProcess"; +import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner"; +import * as Electron from "electron"; + +export class DesktopVideoError extends Schema.TaggedError()( + "DesktopVideoError", + { + stage: Schema.Literals(["unsupported", "source", "download", "open"]), + cause: Schema.optionalKey(Schema.Defect()), + }, +) { + override get message() { + switch (this.stage) { + case "unsupported": + return "QuickTime is available only on macOS."; + case "source": + return "This video cannot be opened in QuickTime. Try downloading it."; + case "download": + return "The video could not be downloaded. Reconnect and try again."; + case "open": + return "QuickTime could not open the video. Try downloading it."; + } + } +} + +export class DesktopVideo extends Context.Service< + DesktopVideo, + { + readonly open: (input: { + readonly url: string; + readonly name: string; + }) => Effect.Effect; + } +>()("@t3tools/desktop/media/DesktopVideo") {} + +const make = Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const platform = yield* HostProcess.Platform; + const spawner = yield* ChildProcessSpawner.ChildProcessSpawner; + const scope = yield* Effect.scope; + + return DesktopVideo.of({ + open: Effect.fn("DesktopVideo.open")(function* (input) { + if (platform !== "darwin") return yield* new DesktopVideoError({ stage: "unsupported" }); + const url = yield* Effect.try({ + try: () => new URL(input.url), + catch: (cause) => new DesktopVideoError({ stage: "source", cause }), + }); + const name = Array.from(path.basename(input.name.replaceAll("\\", "/"))) + .filter((character) => character.charCodeAt(0) >= 32 && character !== "\x7f") + .join(""); + if ( + !["https:", "http:"].includes(url.protocol) || + url.username || + url.password || + !name || + name.length > 255 || + (path.extname(name) !== "" && !videoMimeType({ name, mimeType: "" })) + ) + return yield* new DesktopVideoError({ stage: "source" }); + + const response = yield* Effect.tryPromise({ + try: (signal) => Electron.net.fetch(url.href, { signal }), + catch: (cause) => new DesktopVideoError({ stage: "download", cause }), + }); + const body = response.body; + const mimeType = response.headers.get("content-type") ?? ""; + if (!response.ok || !body || !videoMimeType({ name, mimeType })) { + yield* Effect.promise(() => body?.cancel().catch(() => undefined) ?? Promise.resolve()); + return yield* new DesktopVideoError({ stage: "download" }); + } + + const extension = + path.extname(name) || + `.${ + VIDEO_FILE_EXTENSIONS.find( + (extension) => + videoMimeType({ name: `video.${extension}`, mimeType: "" }) === + mimeType.split(";", 1)[0]?.trim().toLowerCase(), + ) ?? "mp4" + }`; + const fileName = path.extname(name) ? name : `${name.slice(0, 240)}${extension}`; + // QuickTime keeps reading after this action returns. + const directory = yield* fs.makeTempDirectoryScoped({ prefix: "t3-video-" }).pipe( + Effect.provideService(Scope.Scope, scope), + Effect.mapError((cause) => new DesktopVideoError({ stage: "download", cause })), + ); + const file = path.join(directory, fileName); + yield* Stream.fromReadableStream({ + evaluate: () => body, + onError: (cause) => new DesktopVideoError({ stage: "download", cause }), + }).pipe( + Stream.run(fs.sink(file, { flag: "wx", mode: 0o600 })), + Effect.mapError((cause) => new DesktopVideoError({ stage: "download", cause })), + Effect.onError(() => fs.remove(file, { force: true }).pipe(Effect.ignore)), + ); + const exitCode = yield* spawner + .exitCode( + ChildProcess.make( + "/usr/bin/open", + ["-a", "/System/Applications/QuickTime Player.app", file], + { stdin: "ignore", stdout: "ignore", stderr: "ignore" }, + ), + ) + .pipe(Effect.mapError((cause) => new DesktopVideoError({ stage: "open", cause }))); + if (exitCode !== 0) return yield* new DesktopVideoError({ stage: "open" }); + }), + }); +}); + +export const layer = Layer.effect(DesktopVideo, make); diff --git a/apps/desktop/src/preload.ts b/apps/desktop/src/preload.ts index c4e3d10e54d73724241177f688b7d088f10e81b0..0278a55944a6b20aa5a99b88aa34787a891f6c50 100644 --- a/apps/desktop/src/preload.ts +++ b/apps/desktop/src/preload.ts @@ -226,6 +226,12 @@ contextBridge.exposeInMainWorld("desktopBridge", { cancelProviderAuthCallback: (url: string) => ipcRenderer.invoke(IpcChannels.CANCEL_PROVIDER_AUTH_CALLBACK_CHANNEL, url), openExternal: (url: string) => ipcRenderer.invoke(IpcChannels.OPEN_EXTERNAL_CHANNEL, url), + ...(clientPlatform === "darwin" + ? { + openVideo: (input: { url: string; name: string }) => + ipcRenderer.invoke(IpcChannels.OPEN_VIDEO_CHANNEL, input), + } + : {}), checkSystemPermission: (pane: string) => ipcRenderer.invoke(IpcChannels.CHECK_SYSTEM_PERMISSION_CHANNEL, pane), openSystemSettings: (pane: string) => diff --git a/apps/web/package.json b/apps/web/package.json index f893f771ba324af925690a75c19095d8acd80ee8..a2e532a200927b0fbfdc6ec0453b94d28d454751 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -14,7 +14,13 @@ "@base-ui/react": "^1.4.1", "@clerk/electron": "catalog:", "@clerk/react": "catalog:", + "@clo/markdown-editor": "workspace:*", "@clo/terminal": "workspace:*", + "@codemirror/commands": "^6.8.1", + "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/language": "^6.12.3", + "@codemirror/state": "^6.6.0", + "@codemirror/view": "^6.43.1", "@daypicker/react": "^10.0.1", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", @@ -23,6 +29,7 @@ "@effect/atom-react": "catalog:", "@formkit/auto-animate": "^0.9.0", "@legendapp/list": "catalog:", + "@lezer/common": "^1.5.2", "@noble/hashes": "catalog:", "@pierre/diffs": "catalog:", "@pierre/trees": "1.0.0-beta.6", @@ -38,22 +45,11 @@ "@t3tools/shared": "workspace:*", "@tanstack/react-pacer": "^0.19.4", "@tanstack/react-router": "^1.160.2", - "@tiptap/core": "^3.31.3", - "@tiptap/extension-blockquote": "^3.31.3", - "@tiptap/extension-code": "^3.31.3", - "@tiptap/extension-code-block": "^3.31.3", - "@tiptap/extension-heading": "^3.31.3", - "@tiptap/extension-horizontal-rule": "^3.31.3", - "@tiptap/extension-list": "^3.31.3", - "@tiptap/extension-task-item": "^3.31.3", - "@tiptap/extension-task-list": "^3.31.3", - "@tiptap/pm": "^3.31.3", - "@tiptap/react": "^3.31.3", - "@tiptap/starter-kit": "^3.31.3", "class-variance-authority": "^0.7.1", "culori": "^4.0.2", "dompurify": "^3.4.16", "effect": "catalog:", + "gemoji": "^8.1.0", "hast-util-to-html": "^9.0.5", "hast-util-to-jsx-runtime": "^2.3.6", "heic-to": "^1.5.2", diff --git a/apps/web/src/appearanceFonts.ts b/apps/web/src/appearanceFonts.ts index b842ee5fd1cf512c33e827055110defea48d8564..4a18de524466b714c672675221f4490a282bef04 100644 --- a/apps/web/src/appearanceFonts.ts +++ b/apps/web/src/appearanceFonts.ts @@ -103,6 +103,7 @@ export function applyAppearanceFontVariables( const families: ReadonlyArray = [ ["--font-sans", preferences.sans, DEFAULT_SANS_FONT_STACK], ["--font-mono", preferences.code, DEFAULT_CODE_FONT_STACK], + ["--chat-code-font", preferences.code, "var(--font-mono)"], // The composer falls back to whatever the sans preference resolves to. ["--font-composer", preferences.composer, "var(--font-sans)"], ]; diff --git a/apps/web/src/assets/fonts/Recursive-OFL.txt b/apps/web/src/assets/fonts/Recursive-OFL.txt new file mode 100644 index 0000000000000000000000000000000000000000..d4361a99fe5b5091c2a7596ee55818da51373a3d --- /dev/null +++ b/apps/web/src/assets/fonts/Recursive-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Recursive Project Authors (https://github.com/arrowtype/recursive) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/web/src/assets/fonts/Recursive_VF_1.085.woff2 b/apps/web/src/assets/fonts/Recursive_VF_1.085.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0f4358fe576a4d634f536393a19beb2d2b6049ae GIT binary patch literal 718680 zcmV)BK*PUxPew8T0RR913int56#xJLBvHr!3ijCm0RR9100000000000000000000 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
UQHG??Lb-ruV+Lt=Tz1G&|Tp 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∋)%Z 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]b0r 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

n(nZ8GijJ+I+)NEV0S*{>`p@j-s(_-_Ha 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


EsTZP$WRkU3aA~hb5pTrIcn+r*!O) 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\n\n![First](https://media.test/first.mp4)\n\n![Second](https://media.test/second.webm)' + } + />, + ), + ); + const anchored = container.querySelector("#user-content-clip"); + expect(anchored?.tagName).toBe("P"); + expect(anchored?.querySelector("video")?.src).toBe("https://media.test/anchored.mp4"); + expect(anchored?.closest(".chat-markdown-video-row")).toBeNull(); + expect( + container.querySelector(".chat-markdown-video-row")?.querySelectorAll("video"), + ).toHaveLength(2); + } finally { + await act(() => root.unmount()); + pause.mockRestore(); + vi.unstubAllGlobals(); + } + }); + + it.each(["", "```text\ncompleted prefix\n```\n\n"])( + "preserves playing video nodes as a streamed singleton grows (prefix=%j)", + async (completedPrefix) => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + const pause = vi.spyOn(HTMLMediaElement.prototype, "pause").mockImplementation(() => {}); + const container = document.createElement("div"); + const root = createRoot(container); + const prefix = `${completedPrefix}![First](https://media.test/first.mp4)`; + try { + await act(() => root.render()); + const firstPlayer = container.querySelector("video"); + expect(firstPlayer).not.toBeNull(); + firstPlayer!.currentTime = 7; + await act(() => firstPlayer!.dispatchEvent(new Event("play"))); + await act(() => + root.render( + , + ), + ); + expect(container.querySelector("video")).toBe(firstPlayer); + expect(container.querySelector("video")?.currentTime).toBe(7); + expect( + container.querySelector(".chat-markdown-video-row")?.getAttribute("data-video-count"), + ).toBe("2"); + await act(() => + root.render( + , + ), + ); + expect( + container.querySelector(".chat-markdown-video-row")?.getAttribute("data-video-count"), + ).toBe("3"); + expect( + [...container.querySelectorAll("video")].map((video) => video.getAttribute("aria-label")), + ).toEqual(["First", "Second", "Third"]); + expect(container.querySelector("video")).toBe(firstPlayer); + expect(container.querySelector("video")?.currentTime).toBe(7); + } finally { + await act(() => root.unmount()); + pause.mockRestore(); + vi.unstubAllGlobals(); + } + }, + ); +}); + describe("ChatMarkdown bare anchor placeholders", () => { it.each(["", "", "", "", "", ""])( "preserves unmatched %s without linking later blocks", @@ -1014,7 +1297,7 @@ describe("ChatMarkdown Windows file links", () => { , diff --git a/apps/web/src/components/ChatMarkdown.tsx b/apps/web/src/components/ChatMarkdown.tsx index dd0343ca990ec556219320c98648b70cc1aea99a..835f08101c5297fa80d76ba2a0248f2b7ad807fe 100644 --- a/apps/web/src/components/ChatMarkdown.tsx +++ b/apps/web/src/components/ChatMarkdown.tsx @@ -107,7 +107,6 @@ import { parseComposerContextHref } from "@t3tools/shared/composerContextReferen import { parseThreadLinkHref } from "@t3tools/shared/threadLinks"; import { AssistantCitationChip } from "./chat/AssistantCitationChip"; import { MarkdownThreadLink } from "./chat/MarkdownThreadLink"; -import { isWindowsAbsolutePath } from "@t3tools/shared/path"; import { artifactTemplateFromHastProperties, renderCodexInlineDirectivesAsMarkdown, @@ -496,16 +495,6 @@ function isClosedCodeFence(node: ReactMarkdownExtraProps["node"], text: string): ); } -type MarkdownAstNode = { - type?: string; - meta?: unknown; - url?: string; - data?: { - hProperties?: Record; - }; - children?: MarkdownAstNode[]; -}; - function nodeToPlainText(node: ReactNode): string { if (typeof node === "string" || typeof node === "number") { return String(node); @@ -1207,7 +1196,7 @@ interface MarkdownFileLinkProps { absolute host path outside it, null when the panel cannot show the file. */ panelPath: string | null; line?: number | undefined; - label: string; + label: ReactNode; copyMarkdown: string; theme: "light" | "dark"; threadRef?: ScopedThreadRef | undefined; @@ -1560,7 +1549,7 @@ function ChatMarkdownVideo(props: { className={cn( CHAT_MARKDOWN_MEDIA_LAYOUT_CLASS_NAME, CHAT_MARKDOWN_MEDIA_MAX_WIDTH_CLASS_NAME, - "w-full", + "w-full max-w-[min(100%,30rem,calc(30rem*var(--media-video-ratio)))]", )} videoClassName={cn( CHAT_MARKDOWN_MEDIA_BOUNDS_CLASS_NAME, @@ -1718,8 +1707,8 @@ function leadingExternalLinkTextLength(text: string): number { function breakableExternalLinkText(text: string): ReactNode[] { return Array.from(text, (character, index) => ( + {index > 0 && } {character} - )); } @@ -1833,13 +1822,90 @@ function handleMarkdownFragmentClick(event: ReactMouseEvent, findMarkdownFragmentTarget(event.currentTarget, href)?.scrollIntoView({ block: "start" }); } -type HeadingHastNode = { +type MarkdownHastNode = { type?: string; + value?: string; tagName?: string; properties?: Record; - children?: HeadingHastNode[]; + children?: MarkdownHastNode[]; }; +function rehypeVideoRows() { + return (tree: MarkdownHastNode) => { + const isVideoImage = (node: MarkdownHastNode) => { + const src = node.properties?.dataLocalSrc ?? node.properties?.src; + return ( + node.type === "element" && + node.tagName === "img" && + typeof src === "string" && + mediaKindFromPath(src) === "video" + ); + }; + const videosInBlock = (node: MarkdownHastNode) => { + if (isVideoImage(node)) return [node]; + if ( + node.type !== "element" || + node.tagName !== "p" || + Object.keys(node.properties ?? {}).length > 0 + ) { + return null; + } + const videos = (node.children ?? []).filter( + (child) => + !(child.type === "text" && !child.value?.trim()) && + !(child.type === "element" && child.tagName === "br"), + ); + return videos.length > 0 && videos.every(isVideoImage) ? videos : null; + }; + const visit = (node: MarkdownHastNode) => { + if (!node.children) return; + node.children.forEach(visit); + if ( + node.type !== "root" && + !["div", "blockquote", "li", "td", "th", "figure", "details"].includes(node.tagName ?? "") + ) { + return; + } + + for (let index = 0; index < node.children.length; index++) { + const first = node.children[index]!; + const videos = videosInBlock(first); + if (!videos) continue; + let end = index + 1; + while (end < node.children.length) { + const next = node.children[end]!; + if (next.type === "text" && !next.value?.trim()) { + end++; + continue; + } + const moreVideos = videosInBlock(next); + if (!moreVideos) break; + videos.push(...moreVideos); + end++; + } + node.children.splice(index, end - index, { + type: "element", + tagName: "div", + properties: { + className: [ + "chat-markdown-video-row", + ...(first.tagName === "img" ? ["chat-markdown-video-bare"] : []), + ], + dataVideoCount: videos.length, + }, + children: videos.map((video) => ({ + type: "element", + tagName: "div", + properties: {}, + children: [video], + })), + }); + } + }; + visit(tree); + }; +} + /** GitHub's heading anchor slug, so `[Setup](#setup)` table-of-contents links find their heading. */ function githubHeadingSlug(text: string): string { return text @@ -1855,18 +1921,18 @@ function githubHeadingSlug(text: string): string { * fragment lookup strips it. */ function rehypeHeadingIds() { - return (tree: HeadingHastNode) => { + return (tree: MarkdownHastNode) => { // Every id already in the document, authored or assigned, so a suffix never // lands on one that exists: `Setup`, `Setup`, `Setup-1` get three distinct ids. const taken = new Set(); - const collect = (node: HeadingHastNode) => { + const collect = (node: MarkdownHastNode) => { const id = node.properties?.id; if (typeof id === "string") taken.add(id); node.children?.forEach(collect); }; collect(tree); const nextSuffix = new Map(); - const visit = (node: HeadingHastNode) => { + const visit = (node: MarkdownHastNode) => { if (node.type === "element" && node.tagName && /^h[1-6]$/.test(node.tagName)) { const slug = githubHeadingSlug(hastPlainTextDeep(node)); if (node.properties?.id === undefined && slug) { @@ -1892,11 +1958,13 @@ function rehypeHeadingIds() { const CHAT_MARKDOWN_RENDER_REHYPE_PLUGINS = [ ...CHAT_MARKDOWN_REHYPE_PLUGINS, rehypeHeadingIds, + rehypeVideoRows, ] satisfies NonNullable; -const CHAT_MARKDOWN_LITERAL_HTML_REHYPE_PLUGINS = [rehypeHeadingIds] satisfies NonNullable< - ReactMarkdownOptions["rehypePlugins"] ->; +const CHAT_MARKDOWN_LITERAL_HTML_REHYPE_PLUGINS = [ + rehypeHeadingIds, + rehypeVideoRows, +] satisfies NonNullable; function MarkdownExternalLinkContent({ host, @@ -2241,6 +2309,7 @@ const MarkdownFileLink = memo(function MarkdownFileLink({ render={} className={MARKDOWN_FILE_LINK_CLASS_NAME} data-markdown-copy={copyMarkdown} + aria-description={targetPath} onClick={(event) => { event.preventDefault(); event.stopPropagation(); @@ -2267,7 +2336,8 @@ const MarkdownFileLink = memo(function MarkdownFileLink({ } - aria-label={`File options for ${label}`} + aria-label={`File options for ${nodeToPlainText(label)}`} + aria-description={targetPath} aria-haspopup="menu" className={cn(MARKDOWN_FILE_LINK_CLASS_NAME, "select-text")} data-markdown-copy={copyMarkdown} @@ -2660,7 +2730,12 @@ function useChatMarkdownState({ [cwd, findWorkspaceBasenameMatch, revealFileInFileManager], ); const fileLinkChip = useCallback( - (fileLinkMeta: MarkdownFileLinkMeta, copyMarkdown: string, mediaSource?: string) => { + ( + fileLinkMeta: MarkdownFileLinkMeta, + copyMarkdown: string, + mediaSource?: string, + label?: ReactNode, + ) => { const mediaPath = mediaSource ?? fileLinkMeta.filePath; const canPreviewMedia = mediaMimeTypeFromExtension( @@ -2681,14 +2756,17 @@ function useChatMarkdownState({ displayPath={fileLinkMeta.displayPath} panelPath={panelPath} line={fileLinkMeta.line} - label={fileLinkLabel( - { - path: fileLinkMeta.filePath, - ...(fileLinkMeta.line !== undefined ? { line: fileLinkMeta.line } : {}), - ...(fileLinkMeta.column !== undefined ? { column: fileLinkMeta.column } : {}), - }, - fileLinkParentSuffixByPath, - )} + label={ + label ?? + fileLinkLabel( + { + path: fileLinkMeta.filePath, + ...(fileLinkMeta.line !== undefined ? { line: fileLinkMeta.line } : {}), + ...(fileLinkMeta.column !== undefined ? { column: fileLinkMeta.column } : {}), + }, + fileLinkParentSuffixByPath, + ) + } copyMarkdown={copyMarkdown} theme={resolvedTheme} threadRef={threadRef} @@ -2851,6 +2929,14 @@ const CHAT_MARKDOWN_COMPONENTS = { ); } + const videoCount = node?.properties.dataVideoCount; + if (typeof videoCount === "number") { + return ( +
+ {children} +
+ ); + } return
{children}
; }, p: function MarkdownParagraph({ node: _node, children, ...props }) { @@ -3196,13 +3282,11 @@ const CHAT_MARKDOWN_COMPONENTS = { source.startsWith("[") && source.includes("](") ? source : `[${(label || fileLinkMeta.basename).replace(/[\\[\]]/g, "\\$&")}](${normalizedHref})`; - const chip = fileLinkChip(fileLinkMeta, copyMarkdown, normalizedHref); - return isMarkdownFileLinkLabel(label, normalizedHref) ? ( - chip - ) : ( - - {children} {chip} - + return fileLinkChip( + fileLinkMeta, + copyMarkdown, + normalizedHref, + isMarkdownFileLinkLabel(label, normalizedHref) ? undefined : children, ); }, code: function MarkdownCode({ node, children, className, ...props }) { diff --git a/apps/web/src/components/ComposerPromptEditor.test.tsx b/apps/web/src/components/ComposerPromptEditor.test.tsx new file mode 100644 index 0000000000000000000000000000000000000000..366f11d8dcdd60efe7739955ee170ebb9954a5e2 --- /dev/null +++ b/apps/web/src/components/ComposerPromptEditor.test.tsx @@ -0,0 +1,283 @@ +// @vitest-environment jsdom + +import { act, createRef, useLayoutEffect, useState } from "react"; +import { createRoot, type Root } from "react-dom/client"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; + +import { + createMemoryHistory, + createRootRoute, + createRouter, + RouterProvider, +} from "@tanstack/react-router"; +import { EnvironmentId, MessageId, ThreadId } from "@t3tools/contracts"; +import { collapseExpandedComposerCursor } from "~/composer-logic"; +import { serializeAssistantCitation } from "@t3tools/shared/assistantCitations"; +import { serializeComposerFileLink } from "@t3tools/shared/composerTrigger"; +import { ComposerContextActionsContext } from "./composerContextPresentation"; + +import { ComposerPromptEditor, type ComposerPromptEditorHandle } from "./ComposerPromptEditor"; + +let root: Root; +let container: HTMLDivElement; +const handle = createRef(); +let replace: (value: string, cursor: number) => void; +let enableRichText: (enabled: boolean) => void; +const openMention = vi.fn(); +const commandKey = vi.fn((_key: string, _event: KeyboardEvent) => false); +const changes: Array<{ value: string; suppressed: boolean }> = []; + +function ComposerProbe() { + const [richText, setRichText] = useState(false); + const [draft, setDraft] = useState({ + value: "before :dizzy after", + cursor: "before :dizzy".length, + }); + useLayoutEffect(() => { + replace = (value, cursor) => setDraft({ value, cursor }); + enableRichText = setRichText; + }); + return ( + {}, + expandVideo: () => {}, + openFile: () => {}, + openPullRequest: () => {}, + }} + > + {}} + onCommandKeyDown={commandKey} + onChange={(value, cursor, _expanded, suppressed) => { + changes.push({ value, suppressed }); + setDraft({ value, cursor }); + }} + /> + + ); +} + +beforeEach(async () => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + Object.defineProperty(Range.prototype, "getClientRects", { + configurable: true, + value: () => [], + }); + Object.defineProperty(Range.prototype, "getBoundingClientRect", { + configurable: true, + value: () => new DOMRect(), + }); + container = document.createElement("div"); + document.body.append(container); + root = createRoot(container); + changes.length = 0; + openMention.mockClear(); + commandKey.mockReset(); + commandKey.mockReturnValue(false); + await act(() => root.render()); +}); + +afterEach(async () => { + await act(() => root.unmount()); + container.remove(); + vi.unstubAllGlobals(); +}); + +describe("emoji completion in the real composer editor", () => { + it("keeps the caret and undo history when a controlled completion replaces the shortcode", async () => { + await act(() => handle.current!.focus()); + expect(handle.current!.readSnapshot().expandedCursor).toBe("before :dizzy".length); + await act(() => replace("before 💫 after", "before 💫".length)); + expect(handle.current!.readSnapshot()).toMatchObject({ + value: "before 💫 after", + expandedCursor: "before 💫".length, + }); + const textbox = container.querySelector('[data-testid="composer-editor"]')!; + expect(document.activeElement).toBe(textbox); + await act(() => + textbox.dispatchEvent( + new KeyboardEvent("keydown", { + key: "z", + code: "KeyZ", + ctrlKey: true, + bubbles: true, + cancelable: true, + }), + ), + ); + expect(handle.current!.readSnapshot().value).toBe("before :dizzy after"); + }); + + it("suppresses suggestions when a text selection keeps its anchor at the same caret", async () => { + await act(() => handle.current!.focus()); + const textbox = container.querySelector('[data-testid="composer-editor"]')!; + const selection = window.getSelection()!; + const range = selection.getRangeAt(0); + const selected = document.createRange(); + selected.setStart(range.startContainer, range.startOffset); + selected.setEnd(range.startContainer, range.startOffset + 2); + await act(async () => { + selection.removeAllRanges(); + selection.addRange(selected); + document.dispatchEvent(new Event("selectionchange")); + await Promise.resolve(); + }); + expect(textbox.contains(selection.anchorNode)).toBe(true); + expect(handle.current!.suggestionsSuppressed()).toBe(true); + expect(changes.at(-1)).toMatchObject({ suppressed: true }); + }); + + it("closes suggestions during composition and rechecks the committed caret afterward", async () => { + await act(() => handle.current!.focus()); + const textbox = container.querySelector('[data-testid="composer-editor"]')!; + await act(() => + textbox.dispatchEvent(new CompositionEvent("compositionstart", { bubbles: true })), + ); + expect(changes.at(-1)).toMatchObject({ suppressed: true }); + expect(handle.current!.suggestionsSuppressed()).toBe(true); + await act(async () => { + textbox.dispatchEvent(new CompositionEvent("compositionend", { bubbles: true })); + await Promise.resolve(); + }); + expect(handle.current!.suggestionsSuppressed()).toBe(false); + expect(changes.at(-1)).toMatchObject({ value: "before :dizzy after", suppressed: false }); + }); +}); + +it("changes a real fence language picker while preserving metadata, code, and editor focus", async () => { + const draft = "```ts title=x\nconst x = 1\n```"; + await act(() => { + enableRichText(true); + replace(draft, draft.length); + }); + const trigger = container.querySelector( + 'button[aria-label="Code language: TypeScript"]', + )!; + expect(trigger).not.toBeNull(); + await act(() => trigger.click()); + const python = [...document.querySelectorAll('[role="option"]')].find((option) => + option.textContent?.includes("Python"), + )!; + expect(python).toBeDefined(); + await act(() => python.click()); + expect(handle.current!.readSnapshot().value).toBe("```python title=x\nconst x = 1\n```"); + expect(document.activeElement).toBe(container.querySelector('[data-testid="composer-editor"]')); +}); + +it("opens a real file chip through its application action provider", async () => { + const source = serializeComposerFileLink("src/example.ts"); + await act(() => replace(`${source} after`, `${source} `.length)); + const button = container.querySelector( + '[aria-label="Preview src/example.ts"]', + )!; + expect(button).not.toBeNull(); + await act(() => button.click()); + expect(openMention).toHaveBeenCalledWith("src/example.ts"); + expect(handle.current!.readSnapshot().value).toBe(`${source} after`); +}); + +it("copies canonical chip Markdown, cuts once, and restores it with native undo", async () => { + const source = `${serializeComposerFileLink("src/example.ts")} after`; + await act(() => { + replace(source, source.length); + handle.current!.focus(); + }); + const textbox = container.querySelector('[data-testid="composer-editor"]')!; + await act(() => + textbox.dispatchEvent( + new KeyboardEvent("keydown", { + key: "a", + ctrlKey: true, + bubbles: true, + cancelable: true, + }), + ), + ); + expect(handle.current!.readSelectionRange()).toEqual({ start: 0, end: source.length }); + const data = new Map(); + const event = new Event("cut", { bubbles: true, cancelable: true }); + Object.defineProperty(event, "clipboardData", { + value: { setData: (kind: string, text: string) => data.set(kind, text) }, + }); + await act(() => textbox.dispatchEvent(event)); + expect(event.defaultPrevented).toBe(true); + expect(data.get("text/plain")).toBe(source); + expect(handle.current!.readSnapshot().value).toBe(""); + await act(() => + textbox.dispatchEvent( + new KeyboardEvent("keydown", { + key: "z", + ctrlKey: true, + bubbles: true, + cancelable: true, + }), + ), + ); + expect(handle.current!.readSnapshot().value).toBe(source); +}); + +it("Shift+Tabs from a citation caret to its real comment trigger before plan-mode handling", async () => { + const router = createRouter({ + routeTree: createRootRoute({ component: ComposerProbe }), + history: createMemoryHistory({ initialEntries: ["/"] }), + }); + await router.load(); + await act(() => root.render()); + const citation = serializeAssistantCitation({ + version: 1, + environmentId: EnvironmentId.make("env"), + threadId: ThreadId.make("thread"), + messageId: MessageId.make("message"), + text: "Quoted text", + start: 0, + end: 11, + prefix: "", + suffix: "", + }); + const source = `${citation} after`; + await act(() => { + replace(source, collapseExpandedComposerCursor(source, citation.length)); + }); + await act(() => handle.current!.focus()); + expect(handle.current!.readSnapshot().expandedCursor).toBe(citation.length); + commandKey.mockImplementation((key, event) => key === "Tab" && event.shiftKey); + const textbox = container.querySelector('[data-testid="composer-editor"]')!; + const commentButton = container.querySelector("[data-citation-comment-trigger]")!; + expect(commentButton).not.toBeNull(); + const shiftTab = new KeyboardEvent("keydown", { + key: "Tab", + shiftKey: true, + bubbles: true, + cancelable: true, + }); + await act(() => textbox.dispatchEvent(shiftTab)); + expect(shiftTab.defaultPrevented).toBe(true); + expect(document.activeElement).toBe(commentButton); + expect(commandKey).not.toHaveBeenCalled(); + expect(handle.current!.readSnapshot()).toMatchObject({ + value: source, + expandedCursor: citation.length, + }); + const tab = new KeyboardEvent("keydown", { key: "Tab", bubbles: true, cancelable: true }); + await act(() => commentButton.dispatchEvent(tab)); + expect(tab.defaultPrevented).toBe(true); + expect(document.activeElement).toBe(textbox); + expect(handle.current!.readSnapshot().expandedCursor).toBe(citation.length); + await act(() => handle.current!.focusAtEnd()); + await act(() => + textbox.dispatchEvent( + new KeyboardEvent("keydown", { key: "Tab", shiftKey: true, bubbles: true, cancelable: true }), + ), + ); + expect(commandKey).toHaveBeenCalledTimes(1); +}); diff --git a/apps/web/src/components/ComposerPromptEditor.tsx b/apps/web/src/components/ComposerPromptEditor.tsx index cb4810e6f17e7778e3413c34a30daae5ba2e9aaa..6e0d1af8d96b172e38f6350d1d1839d9ab32ff53 100644 --- a/apps/web/src/components/ComposerPromptEditor.tsx +++ b/apps/web/src/components/ComposerPromptEditor.tsx @@ -1,17 +1,628 @@ -import { ComposerPromptEditorTiptap } from "./ComposerPromptEditorTiptap"; -import type { ComposerPromptEditorProps } from "./ComposerPromptEditorTiptap"; - -export type { - ComposerCitationCommentRequest, - ComposerPromptEditorHandle, - ComposerPromptEditorProps, -} from "./ComposerPromptEditorTiptap"; - -/** - * The composer editor. Tiptap in both modes: the `richTextEnabled` setting - * toggles Markdown styling, never the engine. Plain mode keeps Markdown - * markers literal; `literalText` also preserves context-token sources as text. - */ +import type { ComposerContextClipboardFragment, ServerProviderSkill } from "@t3tools/contracts"; +import { + COMPOSER_CONTEXT_CLIPBOARD_MIME, + encodeComposerContextClipboardHtml, +} from "@t3tools/shared/composerContextClipboard"; +import { + serializeAssistantCitation, + withAssistantCitationComment, +} from "@t3tools/shared/assistantCitations"; +import { formatProviderSkillDisplayName } from "@t3tools/shared/inlineSkills"; +import { isolateHistory } from "@codemirror/commands"; +import { Transaction } from "@codemirror/state"; +import { createPortal } from "react-dom"; +import { use, useImperativeHandle, useLayoutEffect, useRef, useState } from "react"; + +import { expandCollapsedComposerCursor } from "~/composer-logic"; +import { collectInlineContextIds } from "~/lib/composerContextReferences"; +import type { AssistantCitationSourceAnchor } from "~/lib/assistantTextSelection"; +import { basenameOfPath } from "~/pierre-icons"; +import { cn } from "~/lib/utils"; +import { + ComposerContextActionsContext, + ComposerContextRecordsContext, + ComposerContextReferenceChip, + type ComposerDraftContextRecords, +} from "./composerContextPresentation"; +import { + createComposerMarkdownEditor, + composerSuggestionsSuppressed, + composerTokens, + type ComposerChip, + type ComposerToken, +} from "./composerMarkdownEditor"; +import { ContextChip } from "./ContextChip"; +import { ContextChipPopover } from "./contextChipParts"; +import { AssistantCitationChip } from "./chat/AssistantCitationChip"; +import { resolveAssistantCitationCommentDismissal } from "./chat/assistantCitationCommentDismissal"; +import { FileTagChipContent } from "./chat/FileTagChip"; +import { WorkspaceEntryTooltip } from "./chat/WorkspaceEntryIcon"; +import { ComposerCodeBlockLanguagePicker } from "./chat/ComposerCodeBlockLanguagePicker"; +import { languageOfInfoString, withInfoStringLanguage } from "~/composer-code-languages"; +import { SkillChipIcon } from "./chat/SkillInlineText"; +import { Button } from "./ui/button"; +import { Tooltip, TooltipPopup, TooltipTrigger } from "./ui/tooltip"; + +export interface ComposerPromptEditorHandle { + focus: () => void; + focusAt: (cursor: number) => void; + focusAtEnd: () => void; + readSelectionRange: () => { start: number; end: number }; + suggestionsSuppressed: () => boolean; + requestCitationComment: (request: ComposerCitationCommentRequest) => void; + readSnapshot: () => { + value: string; + cursor: number; + expandedCursor: number; + contextIds: string[]; + }; + /** + * True when a collapsed caret sits on the first ("start") or last ("end") + * visual line, counting soft wraps. Prompt history only claims ArrowUp and + * ArrowDown at these edges so arrows still move the caret inside multiline + * text. + */ + isCaretOnVisualEdge: (edge: "start" | "end") => boolean; +} + +export interface ComposerPromptEditorProps { + value: string; + cursor: number; + /** + * Render Markdown styling (bold, italic, code, strike, task checkboxes). + * Off renders the same CodeMirror engine as plain text: every marker stays a + * literal character. + */ + richTextEnabled?: boolean; + /** Preserve editor answers verbatim, without Markdown or context chips. */ + literalText?: boolean; + /** Draft records behind the prompt's context references, keyed by context id. */ + contextRecords: ComposerDraftContextRecords; + /** Structured clipboard payload for the given referenced ids, or null to skip. */ + buildContextClipboardFragment?: + | ((contextIds: ReadonlyArray) => string | null) + | undefined; + /** Imports a structured paste's records; returns ids that changed. */ + importContextFragment?: + | ((fragment: ComposerContextClipboardFragment) => ReadonlyMap) + | undefined; + skills: ReadonlyArray; + disabled: boolean; + placeholder: string; + ariaLabel?: string | undefined; + /** Identifies an editor with suggestions, even while its list is closed. */ + suggestionListId?: string | undefined; + /** References the highlighted option only while its list is rendered. */ + activeSuggestionId?: string | undefined; + containerClassName?: string; + className?: string; + placeholderClassName?: string; + onChange: ( + nextValue: string, + nextCursor: number, + expandedCursor: number, + suppressSuggestions: boolean, + contextIds: string[], + ) => void; + onVisibleSelectionChange?: () => void; + onCommandKeyDown?: (key: string, event: KeyboardEvent) => boolean; + onPageScrollKeyDown?: (key: "PageUp" | "PageDown") => void; + onPageScrollKeyUp?: (key: string) => void; + onPageScrollRelease?: () => void; + onCitationSubmitAndSend?: () => void; + onCitationDraftSave?: (replacedValue: string, savedValue: string) => void; + onPaste: React.ClipboardEventHandler; + editorRef: React.RefObject; +} + +export type ComposerCitationCommentRequest = { + value: string; + citationStart: number; + sourceAnchor: AssistantCitationSourceAnchor; + insertedSpaces: CitationInsertedSpaces; +}; + +type CitationInsertedSpaces = { before: boolean; after: boolean }; +type CitationComment = { + start: number; + sourceAnchor?: AssistantCitationSourceAnchor | undefined; + insertedSpaces?: CitationInsertedSpaces | undefined; +}; + export function ComposerPromptEditor(props: ComposerPromptEditorProps) { - return ; + const host = useRef(null); + const currentProps = useRef(props); + const editor = useRef | null>(null); + const pendingCitation = useRef(null); + const citationDraft = useRef<{ start: number; comment: string } | null>(null); + const [comment, setComment] = useState(null); + const [chips, setChips] = useState([]); + + useLayoutEffect(() => { + currentProps.current = props; + }); + useLayoutEffect(() => { + let alive = true; + const instance = createComposerMarkdownEditor({ + props: () => currentProps.current, + mountChip: (chip) => { + if (alive) setChips((chips) => [...chips, chip]); + }, + unmountChip: (dom) => { + if (alive) setChips((chips) => chips.filter((chip) => chip.dom !== dom)); + }, + }); + editor.current = instance; + host.current!.append(instance.dom); + return () => { + alive = false; + editor.current = null; + instance.destroy(); + }; + }, []); + + // oxlint-disable react/exhaustive-effect-dependencies -- Editor callbacks read the ref; DOM configuration follows these props. + useLayoutEffect(() => { + editor.current?.configure(); + }, [ + props.disabled, + props.richTextEnabled, + props.literalText, + props.className, + props.ariaLabel, + props.suggestionListId, + props.activeSuggestionId, + props.placeholder, + ]); + // oxlint-enable react/exhaustive-effect-dependencies + useLayoutEffect(() => { + const instance = editor.current; + if (!instance) return; + const snapshot = instance.snapshot(); + if (snapshot.value !== props.value) { + const draft = citationDraft.current; + citationDraft.current = null; + const saveDraft = currentProps.current.onCitationDraftSave; + if (draft && saveDraft) { + const token = composerTokens(instance.view.state, false).find( + (token) => token.type === "citation" && token.start === draft.start, + ); + if (token?.type === "citation") { + const dismissal = resolveAssistantCitationCommentDismissal({ + reason: "none", + draft: draft.comment, + savedComment: token.citation.comment, + }); + if (dismissal.kind === "commit") { + const source = serializeAssistantCitation( + withAssistantCitationComment(token.citation, dismissal.comment), + ); + saveDraft( + snapshot.value, + snapshot.value.slice(0, token.start) + source + snapshot.value.slice(token.end), + ); + } + } + } + setComment(null); + let from = 0; + while ( + from < snapshot.value.length && + from < props.value.length && + snapshot.value[from] === props.value[from] + ) + from += 1; + let oldEnd = snapshot.value.length; + let newEnd = props.value.length; + while ( + oldEnd > from && + newEnd > from && + snapshot.value[oldEnd - 1] === props.value[newEnd - 1] + ) { + oldEnd -= 1; + newEnd -= 1; + } + instance.view.dispatch({ + changes: { from, to: oldEnd, insert: props.value.slice(from, newEnd) }, + selection: { + anchor: expandCollapsedComposerCursor(props.value, props.cursor, props.literalText), + }, + annotations: [isolateHistory.of("full"), Transaction.userEvent.of("t3.controlled")], + }); + } else if (snapshot.cursor !== props.cursor && !instance.view.compositionStarted) { + instance.view.dispatch({ + selection: { + anchor: expandCollapsedComposerCursor(props.value, props.cursor, props.literalText), + }, + annotations: Transaction.userEvent.of("t3.controlled"), + }); + } + const request = pendingCitation.current; + if ( + request?.value === props.value && + composerTokens(instance.view.state, props.literalText ?? false).some( + (token) => token.type === "citation" && token.start === request.citationStart, + ) + ) { + pendingCitation.current = null; + setComment({ + start: request.citationStart, + sourceAnchor: request.sourceAnchor, + insertedSpaces: request.insertedSpaces, + }); + } + }, [props.value, props.cursor, props.literalText]); + + useLayoutEffect(() => { + editor.current?.view.requestMeasure(); + }); + + useImperativeHandle( + props.editorRef, + () => ({ + focus: () => editor.current?.focus(), + focusAt: (cursor) => { + const instance = editor.current; + if (!instance) return; + const snapshot = instance.snapshot(); + instance.view.dispatch({ + selection: { + anchor: expandCollapsedComposerCursor( + snapshot.value, + cursor, + currentProps.current.literalText, + ), + }, + scrollIntoView: true, + }); + instance.focus(); + }, + focusAtEnd: () => { + const instance = editor.current; + if (!instance) return; + instance.view.dispatch({ + selection: { anchor: instance.view.state.doc.length }, + scrollIntoView: true, + }); + instance.focus(); + }, + readSnapshot: () => + editor.current?.snapshot() ?? { + value: props.value, + cursor: props.cursor, + expandedCursor: expandCollapsedComposerCursor( + props.value, + props.cursor, + props.literalText, + ), + contextIds: [], + }, + readSelectionRange: () => { + const range = editor.current?.view.state.selection.main; + return { start: range?.from ?? 0, end: range?.to ?? 0 }; + }, + suggestionsSuppressed: () => + !editor.current || + composerSuggestionsSuppressed( + editor.current.view, + currentProps.current.literalText ?? false, + ), + requestCitationComment: (request) => { + pendingCitation.current = request; + if (editor.current?.snapshot().value === request.value) { + pendingCitation.current = null; + setComment({ + start: request.citationStart, + sourceAnchor: request.sourceAnchor, + insertedSpaces: request.insertedSpaces, + }); + } + }, + isCaretOnVisualEdge: (edge) => { + const instance = editor.current; + if (!instance || !instance.view.state.selection.main.empty) return false; + const head = instance.view.state.selection.main.head; + if (instance.view.state.doc.length === 0) return true; + const line = instance.view.state.doc.lineAt(head); + if (edge === "start" ? line.number !== 1 : line.number !== instance.view.state.doc.lines) + return false; + const caret = instance.view.coordsAtPos(head); + const boundary = instance.view.coordsAtPos( + edge === "start" ? 0 : instance.view.state.doc.length, + ); + return ( + caret !== null && + boundary !== null && + Math.abs(caret.top - boundary.top) < Math.max(1, (caret.bottom - caret.top) / 2) + ); + }, + }), + [props.editorRef, props.value, props.cursor, props.literalText], + ); + + const copy = (event: React.ClipboardEvent, cut: boolean) => { + const instance = editor.current; + if (!instance || (cut && props.disabled)) return; + const range = instance.view.state.selection.main; + if (range.empty) return; + const text = instance.view.state.sliceDoc(range.from, range.to); + const ids = props.literalText ? [] : collectInlineContextIds(text); + const fragment = ids.length > 0 ? props.buildContextClipboardFragment?.(ids) : null; + event.preventDefault(); + event.stopPropagation(); + event.clipboardData.setData("text/plain", text); + if (fragment) { + event.clipboardData.setData(COMPOSER_CONTEXT_CLIPBOARD_MIME, fragment); + event.clipboardData.setData("text/html", encodeComposerContextClipboardHtml(text, fragment)); + } + if (cut) + instance.view.dispatch({ + ...instance.view.state.replaceSelection(""), + annotations: isolateHistory.of("full"), + userEvent: "delete.cut", + scrollIntoView: true, + }); + }; + + return ( + +
copy(event, false)} + onCutCapture={(event) => copy(event, true)} + onKeyDown={(event) => { + if (["Control", "Meta", "Alt", "Shift"].includes(event.key)) + props.onPageScrollRelease?.(); + }} + onKeyUp={(event) => props.onPageScrollKeyUp?.(event.key)} + onBlur={props.onPageScrollRelease} + > +
+ {props.value.length === 0 && props.contextRecords.size === 0 && props.placeholder ? ( +
+ {props.placeholder} +
+ ) : null} +
+ {chips.map((chip) => + chip.kind === "fence" + ? createPortal( + { + const instance = editor.current; + if ( + !instance || + props.disabled || + instance.view.state.sliceDoc(chip.block.infoFrom, chip.block.infoTo) !== + chip.block.info + ) + return; + const info = withInfoStringLanguage(chip.block.info, language); + const offset = info.length - (chip.block.infoTo - chip.block.infoFrom); + instance.view.dispatch({ + changes: { from: chip.block.infoFrom, to: chip.block.infoTo, insert: info }, + selection: { anchor: chip.block.codeTo + offset }, + annotations: isolateHistory.of("full"), + userEvent: "input.fence-language", + }); + instance.focus(); + }} + />, + chip.dom, + `fence:${chip.block.from}`, + ) + : createPortal( + { + citationDraft.current = null; + setComment(open ? { start: chip.token.start } : null); + }} + onDraftChange={(comment) => { + citationDraft.current = { start: chip.token.start, comment }; + }} + onSaveComment={(text) => { + const instance = editor.current; + const token = chip.token; + if ( + !instance || + props.disabled || + token.type !== "citation" || + instance.view.state.sliceDoc(token.start, token.end) !== token.source + ) + return false; + citationDraft.current = null; + const source = serializeAssistantCitation( + withAssistantCitationComment(token.citation, text), + ); + instance.view.dispatch({ + changes: { from: token.start, to: token.end, insert: source }, + annotations: isolateHistory.of("full"), + userEvent: "input.citation", + }); + return true; + }} + onCancel={() => { + const instance = editor.current; + if ( + !instance || + props.disabled || + comment?.start !== chip.token.start || + !comment.insertedSpaces + ) + return; + const token = chip.token; + const from = + comment.insertedSpaces.before && + instance.view.state.sliceDoc(token.start - 1, token.start) === " " + ? token.start - 1 + : token.start; + const to = + comment.insertedSpaces.after && + instance.view.state.sliceDoc(token.end, token.end + 1) === " " + ? token.end + 1 + : token.end; + instance.view.dispatch({ + changes: { from, to }, + selection: { anchor: from }, + annotations: isolateHistory.of("full"), + userEvent: "delete.citation", + }); + instance.focus(); + }} + onRestoreFocus={() => { + const instance = editor.current; + if (!instance || props.disabled) return; + const token = composerTokens( + instance.view.state, + props.literalText ?? false, + ).find((token) => token.start === chip.token.start); + instance.view.dispatch({ + selection: { + anchor: + token?.end ?? Math.min(chip.token.start, instance.view.state.doc.length), + }, + scrollIntoView: true, + }); + instance.focus(); + }} + onSubmitAndSend={props.onCitationSubmitAndSend} + />, + chip.dom, + `${chip.token.start}:${chip.token.type}`, + ), + )} + + ); +} + +function ComposerTokenChip(props: { + token: ComposerToken; + skills: readonly ServerProviderSkill[]; + disabled: boolean; + comment: CitationComment | null; + onCommentChange: (open: boolean) => void; + onDraftChange: (comment: string) => void; + onSaveComment: (text: string) => boolean; + onCancel: () => void; + onRestoreFocus: () => void; + onSubmitAndSend: (() => void) | undefined; +}) { + const actions = use(ComposerContextActionsContext); + const token = props.token; + if (token.type === "context-reference") + return ( + + ); + if (token.type === "citation") + return ( + { + if ( + event.key === "Tab" && + !event.shiftKey && + !event.altKey && + !event.metaKey && + !event.ctrlKey + ) { + event.preventDefault(); + props.onRestoreFocus(); + } + }} + > + { + if (!props.disabled || !open) props.onCommentChange(open); + }, + ...(props.comment?.insertedSpaces ? { onCancel: props.onCancel } : {}), + onSave: props.onSaveComment, + onDraftChange: props.onDraftChange, + onSaveAndSend: (text) => { + if (!props.onSaveComment(text)) return false; + props.onSubmitAndSend?.(); + return true; + }, + onRestoreFocus: props.onRestoreFocus, + }} + /> + + ); + if (token.type === "skill") { + const skill = props.skills.find((skill) => skill.name === token.value); + const label = formatProviderSkillDisplayName(skill ?? { name: token.value }); + return ( + } + label={label} + accessibleLabel={`Skill ${label}`} + > +
+

{label}

+

{skill?.description ?? "No description is available for this skill."}

+ {skill?.path ? ( + + ) : null} +
+
+ ); + } + const path = token.value; + return ( + + } + onClick={() => actions.openMention(path)} + aria-label={`Preview ${path}`} + data-composer-mention-chip="true" + /> + } + > + + + + + + + ); } diff --git a/apps/web/src/components/ComposerPromptEditorTiptap.citationDraft.test.tsx b/apps/web/src/components/ComposerPromptEditorTiptap.citationDraft.test.tsx index 81abba7e0d2093717d157f49129aad4007b0469f..f019309cba2a84dabfd258f6cfb42a544637b13d 100644 --- a/apps/web/src/components/ComposerPromptEditorTiptap.citationDraft.test.tsx +++ b/apps/web/src/components/ComposerPromptEditorTiptap.citationDraft.test.tsx @@ -48,6 +48,14 @@ let container: HTMLDivElement; beforeEach(() => { vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + Object.defineProperty(Range.prototype, "getClientRects", { + configurable: true, + value: () => [], + }); + Object.defineProperty(Range.prototype, "getBoundingClientRect", { + configurable: true, + value: () => new DOMRect(), + }); container = document.createElement("div"); document.body.append(container); root = createRoot(container); @@ -75,6 +83,7 @@ function Composer({ root.render()); await act(async () => editorRef.current?.requestCitationComment({ - previousValue: "See ", value: promptBefore, citationStart: "See ".length, sourceAnchor: {} as AssistantCitationSourceAnchor, diff --git a/apps/web/src/components/ComposerPromptEditorTiptap.navigation.test.tsx b/apps/web/src/components/ComposerPromptEditorTiptap.navigation.test.tsx deleted file mode 100644 index 53bc7104cbc3aac5ef80252c150be29b9e72ac10..0000000000000000000000000000000000000000 --- a/apps/web/src/components/ComposerPromptEditorTiptap.navigation.test.tsx +++ /dev/null @@ -1,126 +0,0 @@ -// @vitest-environment jsdom - -import type { Editor } from "@tiptap/core"; -import { TextSelection } from "@tiptap/pm/state"; -import { act, createRef } from "react"; -import { createRoot, type Root } from "react-dom/client"; -import { afterEach, beforeEach, expect, it, vi } from "vite-plus/test"; - -import { serializeEditorDoc } from "~/composer-rich-text-doc"; -import { ComposerPromptEditor, type ComposerPromptEditorHandle } from "./ComposerPromptEditor"; - -const draft = - "> **Assistant and reasoning text still save intermediate full snapshots**, using the existing 50 ms batching. Compaction still preserves their `turn-item.updated` events. [Code](/Users/yashsingh/p/projects/t3code/apps/server/src/orchestration-v2/ProjectionMaintenance.ts:235)"; - -let root: Root; -let container: HTMLDivElement; - -beforeEach(() => { - vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); - container = document.createElement("div"); - document.body.append(container); - root = createRoot(container); -}); - -afterEach(async () => { - await act(async () => root.unmount()); - container.remove(); - vi.unstubAllGlobals(); -}); - -async function mountEditor(value: string, richTextEnabled = true) { - await act(async () => - root.render( - ()} - value={value} - cursor={0} - richTextEnabled={richTextEnabled} - contextRecords={new Map()} - skills={[]} - disabled={false} - placeholder="" - onChange={() => {}} - onPaste={() => {}} - />, - ), - ); - const element = container.querySelector(".tiptap"); - if (!element) throw new Error("Composer did not mount"); - return element.editor; -} - -function press(editor: Editor, key: string, options: KeyboardEventInit = {}) { - const event = new KeyboardEvent("keydown", { key, cancelable: true, ...options }); - const handled = editor.view.props.handleKeyDown?.(editor.view, event); - expect(event.defaultPrevented).toBe(Boolean(handled)); - return handled; -} - -it("keeps Up before the opening bold marker in a quote, including while typing", async () => { - const editor = await mountEditor(draft); - const position = editor.state.selection.from; - await act(async () => { - editor.view.focus(); - expect(press(editor, "ArrowUp")).toBe(true); - expect(editor.state.selection.from).toBe(position); - editor.view.updateState(editor.state); - const marker = editor.view.dom.querySelector(".composer-rich-marker"); - const caret = window.getSelection()?.getRangeAt(0); - if (!marker || !caret) throw new Error("Caret or bold marker is missing"); - const markerRange = document.createRange(); - markerRange.selectNode(marker); - expect(caret.compareBoundaryPoints(Range.START_TO_START, markerRange)).toBeLessThanOrEqual(0); - // A repeated Up stays at the outside stop, ready for native navigation. - expect(press(editor, "ArrowUp")).toBe(false); - editor.commands.insertContent("x"); - }); - expect(serializeEditorDoc(editor.state.doc).value).toBe(draft.replace("> **", "> x**")); -}); - -it("keeps Down after a closing marker, including while typing", async () => { - const editor = await mountEditor("> **bold**"); - await act(async () => { - editor.view.dispatch(editor.state.tr.setSelection(TextSelection.atEnd(editor.state.doc))); - expect(press(editor, "ArrowDown")).toBe(true); - expect(press(editor, "ArrowDown")).toBe(false); - editor.commands.insertContent("x"); - }); - expect(serializeEditorDoc(editor.state.doc).value).toBe("> **bold**x"); -}); - -it("leaves vertical navigation between paragraphs to the browser", async () => { - const editor = await mountEditor("**first**\n**second**"); - await act(async () => { - const first = editor.state.doc.child(0); - editor.commands.setTextSelection(first.nodeSize + 1); - expect(press(editor, "ArrowUp")).toBe(false); - editor.commands.setTextSelection(first.nodeSize - 1); - expect(press(editor, "ArrowDown")).toBe(false); - }); -}); - -it.each([ - { shiftKey: true }, - { altKey: true }, - { metaKey: true }, - { ctrlKey: true }, - { isComposing: true }, -])("preserves modified Up behavior for %j", async (options) => { - const editor = await mountEditor(draft); - await act(async () => { - expect(press(editor, "ArrowUp", options)).toBe(false); - editor.commands.insertContent("x"); - }); - expect(serializeEditorDoc(editor.state.doc).value).toBe(draft.replace("> **", "> **x")); -}); - -it("leaves literal Markdown navigation to the browser in plain mode", async () => { - const editor = await mountEditor(draft, false); - await act(async () => { - editor.commands.setTextSelection(5); - expect(press(editor, "ArrowUp")).toBe(false); - editor.commands.insertContent("x"); - }); - expect(serializeEditorDoc(editor.state.doc).value).toBe(draft.replace("> **", "> **x")); -}); diff --git a/apps/web/src/components/ComposerPromptEditorTiptap.tsx b/apps/web/src/components/ComposerPromptEditorTiptap.tsx deleted file mode 100644 index a9accaf6e013ce425f1fafee1dac211163e54ea0..0000000000000000000000000000000000000000 --- a/apps/web/src/components/ComposerPromptEditorTiptap.tsx +++ /dev/null @@ -1,1985 +0,0 @@ -import { formatProviderSkillDisplayName } from "@t3tools/shared/inlineSkills"; -import { - Extension, - findChildren, - InputRule, - Node, - wrappingInputRule, - type JSONContent, -} from "@tiptap/core"; -import { ReactNodeViewRenderer, NodeViewWrapper, type NodeViewProps } from "@tiptap/react"; -import StarterKit from "@tiptap/starter-kit"; -import { type Node as ProseMirrorNode } from "@tiptap/pm/model"; -import { newlineInCode, splitBlockKeepMarks } from "@tiptap/pm/commands"; -import { - type EditorState, - NodeSelection, - Plugin, - PluginKey, - TextSelection, -} from "@tiptap/pm/state"; -import { Decoration, DecorationSet, type EditorView } from "@tiptap/pm/view"; -import type { NodeType, ResolvedPos } from "@tiptap/pm/model"; -import type { - AssistantCitation, - ComposerContextClipboardFragment, - ServerProviderSkill, -} from "@t3tools/contracts"; -import { - serializeAssistantCitation, - withAssistantCitationComment, -} from "@t3tools/shared/assistantCitations"; -import { - COMPOSER_CONTEXT_CLIPBOARD_MIME, - encodeComposerContextClipboardHtml, -} from "@t3tools/shared/composerContextClipboard"; -import { - createContext, - use, - useCallback, - useEffect, - useEffectEvent, - useImperativeHandle, - useLayoutEffect, - useMemo, - useRef, - useState, - type KeyboardEvent as ReactKeyboardEvent, -} from "react"; -import { EditorContent, useEditor } from "@tiptap/react"; - -import { - clampCollapsedComposerCursor, - collapseExpandedComposerCursor, - expandCollapsedComposerCursor, - isCollapsedCursorAdjacentToInlineToken, - pastedPathQueryLength, -} from "~/composer-logic"; -import { - collectComposerPromptInlineTokens, - selectionTouchesMentionBoundary, -} from "~/composer-editor-mentions"; -import { - buildDocJson, - ComposerBlockExtensions, - ComposerCodeBlockExtension, - ComposerListExtensions, - buildTiptapContent, - collapsedToFlat, - caretTakesMarksBefore, - convertBulletItemToTask, - ComposerCodeExtension, - ComposerTaskItemExtension, - ComposerTaskListExtension, - flatToCollapsed, - flatToMarkdown, - flatToPm, - pmToFlat, - serializeEditorDoc, - serializeSelection, - splitOrLiftListItem, - stepCaretAcrossStyledEdge, - type SkillMeta, -} from "~/composer-rich-text-doc"; -import { - convertCodeFenceOnEnter, - exitCodeBlockOnClosingFence, - exitCodeBlockOnTrailingBlankLines, - indentCodeBlock, - indentedNewlineInCodeBlock, - selectionInOneCodeBlock, -} from "~/composer-code-block"; -import { - COMPOSER_UNDO_GROUP_DELAY, - type ComposerChangeKind, - groupUndoByChangeKind, - markAsClipboardEdit, -} from "~/composer-undo-grouping"; -import { collectInlineContextIds } from "~/lib/composerContextReferences"; -import { resolveDiffThemeName } from "~/lib/diffRendering"; -import { cn, isMacPlatform } from "~/lib/utils"; -import { basenameOfPath } from "~/pierre-icons"; -import { WorkspaceEntryTooltip } from "./chat/WorkspaceEntryIcon"; -import { FileTagChipContent } from "./chat/FileTagChip"; -import { SkillChipIcon } from "./chat/SkillInlineText"; -import { AssistantCitationChip } from "./chat/AssistantCitationChip"; -import { getTimelinePageScrollKey } from "./chat/pageScrollController"; -import { ContextChipPopover } from "./contextChipParts"; -import { Button } from "./ui/button"; -import { ContextChip } from "./ContextChip"; -import { - ComposerContextActionsContext, - ComposerContextReferenceChip, - ComposerContextRecordsContext, -} from "./composerContextPresentation"; -import type { AssistantCitationSourceAnchor } from "~/lib/assistantTextSelection"; -import { Tooltip, TooltipPopup, TooltipTrigger } from "./ui/tooltip"; -import { ComposerCodeBlockNodeView } from "./chat/ComposerCodeBlockNodeView"; -import { resolveAssistantCitationCommentDismissal } from "./chat/assistantCitationCommentDismissal"; -import { composerCodeBlockHighlight } from "./composerCodeBlockHighlight"; -import { importPastedComposerText } from "./composerInlineTokenPaste"; -import { didComposerSelectionChangeVisibly } from "./composerSelection"; -import type { ComposerDraftContextRecords } from "./composerContextPresentation"; - -export interface ComposerPromptEditorHandle { - focus: () => void; - focusAt: (cursor: number) => void; - focusAtEnd: () => void; - readSelectionRange: () => { start: number; end: number }; - requestCitationComment: (request: ComposerCitationCommentRequest) => void; - readSnapshot: () => { - value: string; - cursor: number; - expandedCursor: number; - contextIds: string[]; - }; - /** - * True when a collapsed caret sits on the first ("start") or last ("end") - * visual line, counting soft wraps. Prompt history only claims ArrowUp and - * ArrowDown at these edges so arrows still move the caret inside multiline - * text. - */ - isCaretOnVisualEdge: (edge: "start" | "end") => boolean; -} - -export interface ComposerPromptEditorProps { - value: string; - cursor: number; - /** - * Render Markdown styling (bold, italic, code, strike, task checkboxes). - * Off renders the same Tiptap engine as plain text: every marker stays a - * literal character. - */ - richTextEnabled?: boolean; - /** Preserve editor answers verbatim, without Markdown or context chips. */ - literalText?: boolean; - /** Draft records behind the prompt's context references, keyed by context id. */ - contextRecords: ComposerDraftContextRecords; - /** Structured clipboard payload for the given referenced ids, or null to skip. */ - buildContextClipboardFragment?: - | ((contextIds: ReadonlyArray) => string | null) - | undefined; - /** Imports a structured paste's records; returns ids that changed. */ - importContextFragment?: - | ((fragment: ComposerContextClipboardFragment) => ReadonlyMap) - | undefined; - skills: ReadonlyArray; - disabled: boolean; - placeholder: string; - ariaLabel?: string | undefined; - /** Identifies an editor with suggestions, even while its list is closed. */ - suggestionListId?: string | undefined; - /** References the highlighted option only while its list is rendered. */ - activeSuggestionId?: string | undefined; - /** Reads suggestion state at paste time, including Escape dismissal. */ - isPathQueryActive?: () => boolean; - containerClassName?: string; - className?: string; - placeholderClassName?: string; - onChange: ( - nextValue: string, - nextCursor: number, - expandedCursor: number, - cursorAdjacentToMention: boolean, - contextIds: string[], - ) => void; - onVisibleSelectionChange?: () => void; - onCommandKeyDown?: (key: string, event: KeyboardEvent, isTaskItem?: boolean) => boolean; - onPageScrollKeyDown?: (key: "PageUp" | "PageDown") => void; - onPageScrollKeyUp?: (key: string) => void; - onPageScrollRelease?: () => void; - onCitationSubmitAndSend?: () => void; - /** - * Called when a new controlled value replaces the document while a citation - * comment is unsaved. The comment is saved into `replacedValue`, giving - * `savedValue`, so the owner of `replacedValue` can keep it. - */ - onCitationDraftSave?: (replacedValue: string, savedValue: string) => void; - onPaste: React.ClipboardEventHandler; - editorRef: React.RefObject; -} - -export type ComposerCitationCommentRequest = { - previousValue: string; - value: string; - citationStart: number; - sourceAnchor: AssistantCitationSourceAnchor; - insertedSpaces: CitationInsertedSpaces; -}; - -// Spaces added around a freshly inserted citation, removed with it if its comment is cancelled. -type CitationInsertedSpaces = { before: boolean; after: boolean }; - -type OpenCitationComment = { - key: string; - sourceAnchor?: AssistantCitationSourceAnchor; - removeOnCancel?: CitationInsertedSpaces; -}; - -const ComposerCitationCommentContext = createContext<{ - openComment: OpenCitationComment | null; - onOpenChange: (citeKey: string, open: boolean) => void; - onDraftChange: (citeKey: string, comment: string) => void; - onSubmitAndSend: () => void; -}>({ - openComment: null, - onOpenChange: () => {}, - onDraftChange: () => {}, - onSubmitAndSend: () => {}, -}); - -const RichComposerSkillsContext = createContext>([]); - -const SURROUND_CLOSE: Record = { - "(": ")", - "[": "]", - "{": "}", - "'": "'", - '"': '"', - "“": "”", - "`": "`", - "<": ">", - "«": "»", - "*": "*", - _: "_", -}; - -function resolvedThemeFromDocument(): "light" | "dark" { - return document.documentElement.classList.contains("dark") ? "dark" : "light"; -} - -// ── Inline atom nodes (chips) ───────────────────────────────────────────── - -/** - * Wraps an inline chip node view: keeps the caret and text selection out of the chip and - * paints the editor's node selection over it. - */ -const CHIP_NODE_SELECTION_CLASS_NAME = - "relative inline-flex select-none items-center align-middle leading-none data-[composer-chip-selected]:after:pointer-events-none data-[composer-chip-selected]:after:absolute data-[composer-chip-selected]:after:inset-0 data-[composer-chip-selected]:after:rounded-sm data-[composer-chip-selected]:after:bg-[Highlight] data-[composer-chip-selected]:after:opacity-30 data-[composer-chip-selected]:after:content-['']"; - -const ComposerMentionExtension = Node.create({ - name: "composer-mention", - group: "inline", - inline: true, - atom: true, - selectable: true, - addAttributes() { - return { - path: { default: "" }, - source: { default: "" }, - }; - }, - parseHTML() { - return [{ tag: "span[data-composer-mention]" }]; - }, - renderHTML({ HTMLAttributes }) { - return ["span", { "data-composer-mention": "", ...HTMLAttributes }]; - }, - addNodeView() { - return ReactNodeViewRenderer(ComposerMentionNodeView); - }, -}); - -function ComposerMentionNodeView({ node }: NodeViewProps) { - const actions = use(ComposerContextActionsContext); - const path = (node.attrs.path as string) ?? ""; - const chip = ( - } - onClick={() => actions.openMention(path)} - aria-label={`Preview ${path}`} - contentEditable={false} - spellCheck={false} - data-composer-mention-chip="true" - > - - - ); - return ( - - - - - - - - - ); -} - -const ComposerSkillExtension = Node.create({ - name: "composer-skill", - group: "inline", - inline: true, - atom: true, - selectable: true, - addAttributes() { - return { - skillName: { default: "" }, - skillLabel: { default: "" }, - skillDescription: { default: null }, - }; - }, - parseHTML() { - return [{ tag: "span[data-composer-skill]" }]; - }, - renderHTML({ HTMLAttributes }) { - return ["span", { "data-composer-skill": "", ...HTMLAttributes }]; - }, - addNodeView() { - return ReactNodeViewRenderer(ComposerSkillNodeView); - }, -}); - -function ComposerSkillNodeView({ node }: NodeViewProps) { - const actions = use(ComposerContextActionsContext); - const skills = use(RichComposerSkillsContext); - const skillName = (node.attrs.skillName as string) ?? ""; - const skillLabel = (node.attrs.skillLabel as string) || skillName; - const skillDescription = (node.attrs.skillDescription as string | null) ?? null; - const skill = skills.find((candidate) => candidate.name === skillName); - return ( - - } - label={skillLabel} - accessibleLabel={`Skill ${skillLabel}`} - > -
-

{skillLabel}

-

- {skill?.description ?? - skillDescription ?? - "No description is available for this skill."} -

- {skill?.path ? ( - - ) : null} -
-
-
- ); -} - -const ComposerCitationExtension = Node.create({ - name: "composer-citation", - group: "inline", - inline: true, - atom: true, - selectable: true, - addAttributes() { - return { - citation: { default: null }, - source: { default: "" }, - citeKey: { default: "" }, - }; - }, - parseHTML() { - return [{ tag: "span[data-composer-citation]" }]; - }, - renderHTML({ HTMLAttributes }) { - return ["span", { "data-composer-citation": "", ...HTMLAttributes }]; - }, - addNodeView() { - return ReactNodeViewRenderer(ComposerCitationNodeView); - }, -}); - -function ComposerCitationNodeView({ node, editor, getPos }: NodeViewProps) { - const commentContext = use(ComposerCitationCommentContext); - const citation = node.attrs.citation as AssistantCitation; - const citeKey = node.attrs.citeKey as string; - const commentTarget = - commentContext.openComment?.key === citeKey ? commentContext.openComment : null; - - const nodePos = useCallback(() => { - const pos = typeof getPos === "function" ? getPos() : null; - return typeof pos === "number" ? pos : null; - }, [getPos]); - - const onSaveComment = useCallback( - (comment: string): boolean => { - if (!editor.isEditable) return false; - const pos = nodePos(); - if (pos === null) return false; - const current = editor.state.doc.nodeAt(pos); - if (!current || current.type.name !== "composer-citation") return false; - const currentCitation = current.attrs.citation as AssistantCitation; - const next = withAssistantCitationComment(currentCitation, comment); - const tr = editor.state.tr.setNodeMarkup(pos, undefined, { - ...current.attrs, - citation: next, - source: serializeAssistantCitation(next), - }); - editor.view.dispatch(tr); - return true; - }, - [editor, nodePos], - ); - - // Undo a fresh insertion: drop the chip and the spaces inserted with it. - const removeOnCancel = commentTarget?.removeOnCancel; - const onRemove = useCallback(() => { - if (!editor.isEditable || !removeOnCancel) return; - const pos = nodePos(); - if (pos === null) return; - const { doc } = editor.state; - const current = doc.nodeAt(pos); - if (!current) return; - const end = pos + current.nodeSize; - const from = removeOnCancel.before && doc.textBetween(pos - 1, pos) === " " ? pos - 1 : pos; - const to = removeOnCancel.after && doc.textBetween(end, end + 1) === " " ? end + 1 : end; - editor.chain().focus().deleteRange({ from, to }).run(); - }, [editor, nodePos, removeOnCancel]); - - // Put the caret right after the chip so Enter sends and typing continues the prompt. - const onRestoreFocus = useCallback(() => { - if (!editor.isEditable) return; - const pos = nodePos(); - if (pos === null) return; - const current = editor.state.doc.nodeAt(pos); - if (!current || current.type.name !== "composer-citation") return; - editor.commands.focus(pos + current.nodeSize); - }, [editor, nodePos]); - - return ( - ) => { - // Tab from the comment button returns to the caret after the chip. - if ( - !editor.isEditable || - event.key !== "Tab" || - event.shiftKey || - event.altKey || - event.metaKey || - event.ctrlKey || - !(event.target instanceof HTMLElement) || - event.target.dataset.citationCommentTrigger === undefined - ) { - return; - } - event.preventDefault(); - onRestoreFocus(); - }} - > - { - if (open && !editor.isEditable) return; - commentContext.onOpenChange(citeKey, open); - }, - ...(removeOnCancel ? { onCancel: onRemove } : {}), - onSave: onSaveComment, - onDraftChange: (comment) => commentContext.onDraftChange(citeKey, comment), - onSaveAndSend: (comment) => { - if (!onSaveComment(comment)) return false; - commentContext.onSubmitAndSend(); - return true; - }, - onRestoreFocus, - }} - /> - - ); -} - -const ComposerContextReferenceExtension = Node.create({ - name: "composer-context-reference", - group: "inline", - inline: true, - atom: true, - selectable: true, - addAttributes() { - return { - kind: { default: "" }, - contextId: { default: "" }, - label: { default: "" }, - source: { default: "" }, - }; - }, - parseHTML() { - return [{ tag: "span[data-composer-context-reference]" }]; - }, - renderHTML({ HTMLAttributes }) { - return ["span", { "data-composer-context-reference": "", ...HTMLAttributes }]; - }, - addNodeView() { - return ReactNodeViewRenderer(ComposerContextReferenceNodeView); - }, -}); - -function ComposerContextReferenceNodeView({ node }: NodeViewProps) { - return ( - - - - ); -} - -// ── Marker reveal (show ** when the cursor is on styled text) ────────────── - -type StyledRange = { - from: number; - to: number; - markers: { at: number; side: number; text: string }[]; -}; - -function collectStyledRanges(doc: ProseMirrorNode): StyledRange[] { - const ranges: StyledRange[] = []; - const map = serializeEditorDoc(doc); - let range: StyledRange | null = null; - let openLength = 0; - for (const run of map.runs) { - // A fence is drawn as a block, not revealed a character at a time, so its - // delimiters never become marker widgets. - if (run.nodeName === "codeBlock") continue; - if (run.openLen > 0) { - range ??= { from: run.pmPos, to: run.pmPos, markers: [] }; - range.markers.push({ - at: run.pmPos, - side: -1, - text: map.value.slice(run.mdStart, run.mdStart + run.openLen), - }); - } - if (range === null) continue; - range.to = run.pmPos + run.docLen; - if (run.closeLen > 0) { - const end = run.mdStart + run.mdLen; - range.markers.push({ - at: range.to, - side: -2, - text: map.value.slice(end - run.closeLen, end), - }); - } - openLength += run.openLen - run.closeLen; - if (openLength === 0) { - ranges.push(range); - range = null; - } - } - return ranges; -} - -/** - * A typed marker becomes a list item that remembers the marker it was typed - * with, so the stored Markdown keeps `*` or `3)` rather than a canonical `-`. - * - * `- ` alone is not enough for a dash: it waits for the first character after - * the space, which it carries into the new item. That is what lets the GFM - * task gesture `- [ ] ` or `- [x] ` be typed whole and reach the task rule, - * instead of being cut off by an instant bullet. A `- ` left on its own is - * still a bullet the next time the draft is rebuilt. - */ -function listMarkerInputRule(find: RegExp, listType: "bulletList" | "orderedList"): InputRule { - return new InputRule({ - find, - handler: ({ state, range, match, chain }) => { - const marker = match.groups?.marker ?? "-"; - const space = match.groups?.space ?? " "; - const carried = match.groups?.carried ?? ""; - // Top-level paragraphs only: inside an item or a quote the new list - // would nest under a line the stored draft writes flat. - const $from = state.doc.resolve(range.from); - if ($from.parent.type.name !== "paragraph" || $from.depth !== 1) return null; - const command = chain() - .deleteRange(range) - .wrapInList( - listType, - listType === "orderedList" ? { start: Number.parseInt(marker, 10) || 1 } : {}, - ) - .updateAttributes("listItem", { marker, space }); - (carried ? command.insertContent(carried) : command).run(); - return undefined; - }, - }); -} - -/** - * `[ ] ` at the start of an existing bullet item turns it into a task, for - * items that were already a list when the checkbox was wanted. New tasks are - * typed whole, `- [ ] `, and reach the task rule directly. - */ -const bulletToTaskInputRule = new InputRule({ - find: /^\[([ xX])\] $/, - handler: ({ state, range, match, chain }) => { - const $from = state.doc.resolve(range.from); - const item = $from.node(-1); - if ($from.parent.type.name !== "paragraph" || item?.type.name !== "listItem") return null; - // Any bullet converts; the task grammar only knows `-`, so a `*` or `+` - // item comes back out as `- [ ]`. - if (!["-", "*", "+"].includes((item.attrs as { marker?: string }).marker ?? "")) return null; - const checked = (match[1] ?? " ").toLowerCase() === "x"; - chain() - .command(({ tr }) => { - convertBulletItemToTask(tr, range.from, range.to, checked); - return true; - }) - .run(); - return undefined; - }, -}); - -/** `- [ ] ` or `- [x] ` at a top-level paragraph, for the same reason as the list markers. */ -function taskInputRule(type: NodeType): InputRule { - const rule = wrappingInputRule({ - find: /^- \[([ xX])\] $/, - type, - getAttributes: (match) => ({ checked: match[1]?.toLowerCase() === "x" }), - }); - return new InputRule({ - find: rule.find, - handler: (props) => - props.state.doc.resolve(props.range.from).depth === 1 ? rule.handler(props) : null, - }); -} - -function hasAncestor($pos: ResolvedPos, name: string): boolean { - for (let depth = $pos.depth; depth > 0; depth -= 1) { - if ($pos.node(depth).type.name === name) return true; - } - return false; -} - -/** - * `> ` at the start of a top-level paragraph opens a quote. Not inside a list: - * a quote holds prose lines, and a list item is not one. - */ -const blockquoteInputRule = new InputRule({ - find: /^>(\s)$/, - handler: ({ state, range, match, chain }) => { - const $from = state.doc.resolve(range.from); - if ($from.parent.type.name !== "paragraph" || $from.depth !== 1) return null; - chain() - .deleteRange(range) - .wrapIn("blockquote", { prefix: `>${match[1] ?? " "}` }) - .run(); - return undefined; - }, -}); - -/** - * `---` becomes a rule as the third dash lands; `***` and `___` need a space - * after them so typing bold or an underscore is not interrupted, matching - * Tiptap's own rule. Only at a top-level paragraph: the list and quote - * serializers have no line to write a rule into. The typed characters are - * kept as the rule's source, and `setHorizontalRule` adds a paragraph after a - * rule at the end so the caret has somewhere to go. - */ -const horizontalRuleInputRule = new InputRule({ - find: /^(---|\*\*\*|___)\s?$/, - handler: ({ state, range, match, chain }) => { - const source = match[0] ?? "---"; - if (!source.startsWith("---") && !/\s$/.test(source)) return null; - const $from = state.doc.resolve(range.from); - if ($from.parent.type.name !== "paragraph" || $from.depth !== 1) return null; - chain() - .deleteRange(range) - .setHorizontalRule() - .command(({ tr }) => { - // The rule is the block before the caret's paragraph. - const $pos = tr.selection.$from; - const index = $pos.index(0) - 1; - if (index < 0) return true; - const rulePos = $pos.posAtIndex(index, 0); - const rule = tr.doc.nodeAt(rulePos); - if (rule?.type.name === "horizontalRule") { - tr.setNodeMarkup(rulePos, undefined, { ...rule.attrs, source }); - } - return true; - }) - .run(); - return undefined; - }, -}); - -/** - * `# ` through `###### ` at a top-level paragraph make a heading. The space - * is required, which is exactly what keeps `#1234` a pull request reference - * with its picker rather than a heading. Not inside lists or quotes, whose - * serializers have no line for one. - */ -const headingInputRule = new InputRule({ - find: /^(#{1,6})(\s)$/, - handler: ({ state, range, match, chain }) => { - const $from = state.doc.resolve(range.from); - if ($from.parent.type.name !== "paragraph" || $from.depth !== 1) return null; - chain() - .deleteRange(range) - .setNode("heading", { level: match[1]?.length ?? 1, space: match[2] ?? " " }) - .run(); - return undefined; - }, -}); - -/** Whether the caret sits inside a fenced code block. */ -function isInCodeBlock(view: EditorView): boolean { - return view.state.selection.$from.parent.type.spec.code === true; -} - -const MarkerPluginKey = new PluginKey("composer-rich-markers"); - -const ComposerMarkerPlugin = new Plugin({ - key: MarkerPluginKey, - state: { - init: (_, state) => decorationsForSelection(state), - apply: (tr, old, _, state) => - tr.docChanged || tr.selectionSet || tr.storedMarksSet ? decorationsForSelection(state) : old, - }, - props: { - decorations(state) { - return MarkerPluginKey.getState(state); - }, - }, -}); - -function decorationsForSelection(state: EditorState): DecorationSet { - const { doc, selection } = state; - // Markers at the caret render after it while it types with the marks before - // the edge. Shifting keeps closers ahead of openers at a shared position. - const caretSide = caretTakesMarksBefore(state) ? 3 : 0; - const decorations: Decoration[] = []; - if (!selection.empty) { - doc.nodesBetween(selection.from, selection.to, (node, pos) => { - if (node.type.name.startsWith("composer-")) { - decorations.push( - Decoration.node(pos, pos + node.nodeSize, { class: "composer-chip-range-selected" }), - ); - return false; - } - return true; - }); - } - for (const range of collectStyledRanges(doc)) { - const active = selection.empty - ? selection.from >= range.from && selection.from <= range.to - : selection.from < range.to && selection.to > range.from; - if (!active) continue; - for (const { at, side: baseSide, text } of range.markers) { - const side = selection.empty && at === selection.from ? baseSide + caretSide : baseSide; - const marker = document.createElement("span"); - marker.className = "composer-rich-marker"; - marker.textContent = text; - marker.setAttribute("aria-hidden", "true"); - decorations.push( - Decoration.widget(at, marker, { side, key: `marker-${at}-${side}-${marker.textContent}` }), - ); - } - } - return DecorationSet.create(doc, decorations); -} - -const ComposerMarkersExtension = Extension.create({ - name: "composer-rich-markers", - addProseMirrorPlugins() { - return [ComposerMarkerPlugin]; - }, -}); - -// Document model (markdown ⇄ ProseMirror) lives in ~/composer-rich-text-doc so -// unit tests can round-trip it without a browser. -// ── Editor component ─────────────────────────────────────────────────────── - -type TiptapEditor = NonNullable>; - -export function ComposerPromptEditorTiptap(props: ComposerPromptEditorProps) { - // Extensions are creation-time, so changing text mode remounts the editor. - // Every mode initializes from the controlled value, preserving the draft. - return ( - - ); -} - -/** - * Starts a new undo step when the kind of change switches (typing, deleting, - * a paste or a store rewrite), the way the Lexical composer grouped undo. - * Runs as dispatch middleware because the grouping has to be decided before - * the history plugin applies the transaction. - */ -const ComposerUndoGroupingExtension = Extension.create< - Record, - { previous: ComposerChangeKind | null } ->({ - name: "composer-undo-grouping", - addStorage() { - return { previous: null }; - }, - dispatchTransaction({ transaction, next }) { - this.storage.previous = groupUndoByChangeKind(transaction, this.storage.previous); - next(transaction); - }, -}); - -function ComposerPromptEditorTiptapInner(props: ComposerPromptEditorProps) { - const { - value, - cursor, - richTextEnabled, - literalText = false, - contextRecords, - buildContextClipboardFragment, - importContextFragment, - skills, - disabled, - placeholder, - ariaLabel, - suggestionListId, - activeSuggestionId, - isPathQueryActive, - containerClassName, - className, - placeholderClassName, - onChange, - onVisibleSelectionChange, - onCommandKeyDown, - onPageScrollKeyDown, - onPageScrollKeyUp, - onPageScrollRelease, - onCitationSubmitAndSend, - onCitationDraftSave, - onPaste, - editorRef, - } = props; - // The setting toggles styling, not the engine: both modes are Tiptap. - // Plain mode disables the mark extensions, so markers stay literal text. - const richText = !literalText && (richTextEnabled ?? false); - const clampEditorCursor = useCallback( - (text: string, position: number) => - literalText - ? Math.max( - 0, - Math.min(text.length, Number.isFinite(position) ? Math.floor(position) : text.length), - ) - : clampCollapsedComposerCursor(text, position), - [literalText], - ); - const expandEditorCursor = useCallback( - (text: string, position: number) => - literalText ? position : expandCollapsedComposerCursor(text, position), - [literalText], - ); - - const onChangeRef = useRef(onChange); - const onVisibleSelectionChangeRef = useRef(onVisibleSelectionChange); - const onCommandKeyDownRef = useRef(onCommandKeyDown); - const isPathQueryActiveRef = useRef(isPathQueryActive); - const buildFragmentRef = useRef(buildContextClipboardFragment); - const importFragmentRef = useRef(importContextFragment); - const skillsRef = useRef(skills); - const latestValueRef = useRef(value); - // The editor instance for callbacks created before it exists (paste). - // Effects flush before any user interaction, so this is always set. - const editorHolder = useRef(null); - - useEffect(() => { - onChangeRef.current = onChange; - }, [onChange]); - useEffect(() => { - onVisibleSelectionChangeRef.current = onVisibleSelectionChange; - }, [onVisibleSelectionChange]); - useEffect(() => { - onCommandKeyDownRef.current = onCommandKeyDown; - }, [onCommandKeyDown]); - useEffect(() => { - isPathQueryActiveRef.current = isPathQueryActive; - }, [isPathQueryActive]); - useEffect(() => { - buildFragmentRef.current = buildContextClipboardFragment; - }, [buildContextClipboardFragment]); - useEffect(() => { - importFragmentRef.current = importContextFragment; - }, [importContextFragment]); - useEffect(() => { - skillsRef.current = skills; - }, [skills]); - useLayoutEffect(() => { - latestValueRef.current = value; - }, [value]); - - const skillLabelFor = useCallback((name: string): SkillMeta => { - const normalized = name.startsWith("$") ? name.slice(1) : name; - const skill = skillsRef.current.find((candidate) => candidate.name === normalized); - if (!skill) { - return { label: formatProviderSkillDisplayName({ name: normalized }), description: null }; - } - const shortDescription = skill.shortDescription?.trim(); - return { - label: formatProviderSkillDisplayName(skill), - description: shortDescription || skill.description?.trim() || null, - }; - }, []); - - const initialCursor = clampEditorCursor(value, cursor); - const initialExpandedCursor = expandEditorCursor(value, initialCursor); - const snapshotRef = useRef({ - value, - cursor: initialCursor, - expandedCursor: initialExpandedCursor, - contextIds: literalText ? [] : collectInlineContextIds(value), - }); - const selectionRangeRef = useRef({ start: initialExpandedCursor, end: initialExpandedCursor }); - const isApplyingControlledUpdateRef = useRef(false); - const hasAppliedControlledSelectionRef = useRef(false); - const citationRequestRef = useRef(null); - const [openCitation, setOpenCitation] = useState(null); - // The open citation's unsaved comment, saved before a new value replaces the document. - const citationDraftRef = useRef<{ key: string; comment: string } | null>(null); - const [isEmpty, setIsEmpty] = useState(value.length === 0); - - const citationCommentActions = useMemo( - () => ({ - openComment: openCitation, - onOpenChange: (nodeKey: string, open: boolean) => { - if (!open && citationDraftRef.current?.key === nodeKey) citationDraftRef.current = null; - setOpenCitation((current) => { - if (open) { - if (current?.key === nodeKey) return current; - return { key: nodeKey }; - } - return current?.key === nodeKey ? null : current; - }); - }, - onDraftChange: (nodeKey: string, comment: string) => { - citationDraftRef.current = { key: nodeKey, comment }; - }, - onSubmitAndSend: onCitationSubmitAndSend ?? (() => {}), - }), - [onCitationSubmitAndSend, openCitation], - ); - - const handleEditorChange = useCallback( - (updated: TiptapEditor) => { - const map = serializeEditorDoc(updated.state.doc); - // Literal answers hold no chips, so reference-shaped text is not a context. - const contextIds = literalText ? [] : map.contextIds; - const { from, to } = updated.state.selection; - const fromFlat = pmToFlat(map, from); - const toFlat = pmToFlat(map, to); - const nextValue = map.value; - const nextCursor = clampEditorCursor(map.value, flatToCollapsed(map, fromFlat)); - const nextExpandedCursor = Math.max( - 0, - Math.min(map.value.length, flatToMarkdown(map, fromFlat)), - ); - const nextSelectionRange = { - start: Math.min(nextExpandedCursor, flatToMarkdown(map, toFlat)), - end: Math.max(nextExpandedCursor, flatToMarkdown(map, toFlat)), - }; - const previousSelectionRange = selectionRangeRef.current; - selectionRangeRef.current = nextSelectionRange; - setIsEmpty(nextValue.length === 0); - const previousSnapshot = snapshotRef.current; - const snapshotChanged = !( - previousSnapshot.value === nextValue && - previousSnapshot.cursor === nextCursor && - previousSnapshot.expandedCursor === nextExpandedCursor && - previousSnapshot.contextIds.length === contextIds.length && - previousSnapshot.contextIds.every((id, index) => id === contextIds[index]) - ); - if (isApplyingControlledUpdateRef.current) return; - if (!snapshotChanged) { - if (didComposerSelectionChangeVisibly(previousSelectionRange, nextSelectionRange)) { - onVisibleSelectionChangeRef.current?.(); - } - return; - } - // A selection-only update while a newer prompt waits to be applied (a chip - // was just inserted through the store) would report stale text and clobber - // the prompt. Let the controlled rewrite land instead. - if (previousSnapshot.value === nextValue && nextValue !== latestValueRef.current) { - return; - } - snapshotRef.current = { - value: nextValue, - cursor: nextCursor, - expandedCursor: nextExpandedCursor, - contextIds, - }; - // A fence holds no chips, so nothing in it should summon the mention or - // command menu: `@` in code is a decorator, not a file. Suppressing the - // trigger here also keeps the store from inserting a link the block can - // only show as literal text, which the store would then count as a chip. - const inCodeBlock = updated.state.selection.$from.parent.type.spec.code === true; - const suppressTrigger = - literalText || - inCodeBlock || - isCollapsedCursorAdjacentToInlineToken(nextValue, nextCursor, "left") || - isCollapsedCursorAdjacentToInlineToken(nextValue, nextCursor, "right"); - onChangeRef.current(nextValue, nextCursor, nextExpandedCursor, suppressTrigger, contextIds); - }, - [clampEditorCursor, literalText], - ); - - const editorAttributes = useMemo( - () => ({ - class: cn( - "composer-tiptap -m-1 block max-h-52 min-h-19.5 overflow-y-auto p-1 whitespace-pre-wrap wrap-break-word bg-transparent leading-relaxed text-foreground focus:outline-none", - className, - ), - "data-testid": "composer-editor", - "data-composer-rich-text": richText ? "true" : "false", - role: "textbox", - "aria-multiline": "true", - ...(ariaLabel ? { "aria-label": ariaLabel } : {}), - ...(disabled ? { "aria-readonly": "true" } : {}), - ...(!disabled && suggestionListId - ? { - "aria-autocomplete": "list", - "aria-haspopup": "listbox", - ...(activeSuggestionId - ? { - "aria-controls": suggestionListId, - "aria-activedescendant": activeSuggestionId, - } - : {}), - } - : {}), - "aria-placeholder": placeholder, - }), - [activeSuggestionId, ariaLabel, className, disabled, placeholder, richText, suggestionListId], - ); - - const editor = useEditor( - { - extensions: [ - StarterKit.configure({ - blockquote: false, - bulletList: false, - codeBlock: false, - heading: false, - horizontalRule: false, - listItem: false, - link: false, - orderedList: false, - underline: false, - dropcursor: false, - gapcursor: false, - trailingNode: false, - code: false, - // The list extensions handle Backspace and Delete themselves. - listKeymap: false, - undoRedo: { newGroupDelay: COMPOSER_UNDO_GROUP_DELAY }, - // Plain mode has no marks: typed markers stay literal characters. - ...(richText ? {} : { bold: false, italic: false, strike: false }), - }), - ComposerUndoGroupingExtension, - ComposerMentionExtension, - ComposerSkillExtension, - ComposerCitationExtension, - ComposerContextReferenceExtension, - ComposerMarkersExtension, - ...(richText - ? [ - ComposerCodeExtension, - ComposerCodeBlockExtension.extend({ - addNodeView() { - return ReactNodeViewRenderer(ComposerCodeBlockNodeView, { - // The header holds the language picker. Tiptap only shields - // events aimed at the button element itself, so a click on - // its icon or label would reach ProseMirror and move the - // selection; keep every header event away from the editor. - stopEvent: ({ event }) => - event.target instanceof Element && - event.target.closest(".chat-markdown-codeblock-header") !== null, - }); - }, - // Tiptap's own ``` + space rule would open a fence inside a - // list item or quote, where the serializer has no line for - // it. Enter on a fence line covers the gesture at top level. - addInputRules() { - return []; - }, - }), - composerCodeBlockHighlight({ - resolveTheme: () => - resolveDiffThemeName( - document.documentElement.classList.contains("dark") ? "dark" : "light", - ), - }), - ...ComposerBlockExtensions.map((extension) => - extension.name === "blockquote" - ? extension.extend({ - addInputRules() { - return [blockquoteInputRule]; - }, - }) - : extension.name === "horizontalRule" - ? extension.extend({ - addInputRules() { - return [horizontalRuleInputRule]; - }, - }) - : extension.name === "heading" - ? extension.extend({ - addInputRules() { - return [headingInputRule]; - }, - }) - : extension, - ), - ...ComposerListExtensions.map((extension) => - extension.name === "listItem" - ? extension - : extension.extend({ - addInputRules() { - return this.name === "bulletList" - ? [ - listMarkerInputRule(/^(?[*+])(?\s)$/, "bulletList"), - listMarkerInputRule( - /^(?-)(?[ \t]+)(?[^\s[])$/, - "bulletList", - ), - ] - : [ - listMarkerInputRule( - /^(?\d+[.)])(?\s)$/, - "orderedList", - ), - ]; - }, - }), - ), - ComposerTaskListExtension, - ComposerTaskItemExtension.extend({ - addInputRules() { - return [taskInputRule(this.type), bulletToTaskInputRule]; - }, - }), - ] - : []), - ], - content: buildDocJson( - value, - (name) => { - const normalized = name.startsWith("$") ? name.slice(1) : name; - const found = skills.find((candidate) => candidate.name === normalized); - if (!found) { - return { - label: formatProviderSkillDisplayName({ name: normalized }), - description: null, - }; - } - const shortDescription = found.shortDescription?.trim(); - return { - label: formatProviderSkillDisplayName(found), - description: shortDescription || found.description?.trim() || null, - }; - }, - { styling: richText, literalText }, - ), - editable: !disabled, - editorProps: { - attributes: editorAttributes, - handleKeyDown: (view, event) => { - if ( - isMacPlatform(navigator.platform) && - (event.key === "Home" || event.key === "End") && - !event.altKey && - !event.metaKey && - !event.ctrlKey && - !event.isComposing - ) { - const selection = window.getSelection(); - if ( - selection?.anchorNode && - view.dom.contains(selection.anchorNode) && - typeof selection.modify === "function" - ) { - event.preventDefault(); - event.stopPropagation(); - selection.modify( - event.shiftKey ? "extend" : "move", - event.key === "Home" ? "backward" : "forward", - "lineboundary", - ); - if (selection.anchorNode && selection.focusNode) { - view.dispatch( - view.state.tr - .setSelection( - TextSelection.create( - view.state.doc, - view.posAtDOM(selection.anchorNode, selection.anchorOffset), - view.posAtDOM(selection.focusNode, selection.focusOffset), - ), - ) - .scrollIntoView(), - ); - } - return true; - } - } - if ( - ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key) && - !event.shiftKey && - !event.altKey && - !event.metaKey && - !event.ctrlKey && - !event.isComposing && - view.state.selection.empty - ) { - const { $from } = view.state.selection; - const direction = event.key === "ArrowLeft" || event.key === "ArrowUp" ? -1 : 1; - const horizontal = event.key === "ArrowLeft" || event.key === "ArrowRight"; - // At the document's ends, native Up/Down can cross a marker without - // changing the document position. Record the stop so DOM selection - // synchronization does not put the caret back inside the styling. - const atDocumentEdge = - $from.pos === - (direction === -1 - ? TextSelection.atStart(view.state.doc).from - : TextSelection.atEnd(view.state.doc).to); - // Take the other stop of a styled edge before skipping a chip, so - // the plain stop between styled text and a chip stays reachable. - const step = - horizontal || atDocumentEdge - ? stepCaretAcrossStyledEdge(view.state, direction) - : null; - if (step) { - event.preventDefault(); - event.stopPropagation(); - view.dispatch(step); - return true; - } - const adjacent = direction === -1 ? $from.nodeBefore : $from.nodeAfter; - if (horizontal && adjacent?.type.name.startsWith("composer-")) { - event.preventDefault(); - event.stopPropagation(); - view.dispatch( - view.state.tr - .setSelection( - TextSelection.create(view.state.doc, $from.pos + direction * adjacent.nodeSize), - ) - .scrollIntoView(), - ); - return true; - } - } - // Shift+Tab from just after a citation reaches its comment button, which - // native tab order skips because the chip lives inside the editor. - if ( - event.key === "Tab" && - event.shiftKey && - !event.altKey && - !event.metaKey && - !event.ctrlKey && - view.state.selection.empty - ) { - const { $from } = view.state.selection; - const citation = $from.nodeBefore; - if (citation?.type.name === "composer-citation") { - const chip = view.nodeDOM($from.pos - citation.nodeSize); - const commentButton = - chip instanceof HTMLElement - ? chip.querySelector("[data-citation-comment-trigger]") - : null; - if (commentButton) { - event.preventDefault(); - event.stopPropagation(); - commentButton.focus(); - return true; - } - } - } - if (event.key === "Enter" && (event.isComposing || event.keyCode === 229)) { - event.stopPropagation(); - return true; - } - // Enter on a focused task checkbox must not send the prompt (or - // split anything): Space toggles it, Enter does nothing. - if (event.key === "Enter" && event.target instanceof HTMLInputElement) { - event.preventDefault(); - return true; - } - // Inside a fence Tab belongs to the code, not to the composer's - // focus order or its autocomplete. - if ( - event.key === "Tab" && - !event.metaKey && - !event.ctrlKey && - selectionInOneCodeBlock(view.state) - ) { - event.preventDefault(); - event.stopPropagation(); - return indentCodeBlock(view.state, event.shiftKey ? "out" : "in", (tr) => - view.dispatch(tr), - ); - } - // A fence is multi-line by definition, so Enter and Shift+Enter - // belong to the code rather than to sending or splitting: inside a - // block they make a line (a generic split would cut the fence in - // two), and on a line that is only an opening fence they open the - // block. Sending from inside a fence is still Cmd/Ctrl+Enter, which - // falls through. - if ( - event.key === "Enter" && - richText && - !event.metaKey && - !event.ctrlKey && - !event.isComposing - ) { - if (selectionInOneCodeBlock(view.state)) { - event.preventDefault(); - event.stopPropagation(); - const dispatch = (tr: typeof view.state.tr) => view.dispatch(tr.scrollIntoView()); - return ( - exitCodeBlockOnClosingFence(view.state, dispatch) || - exitCodeBlockOnTrailingBlankLines(view) || - indentedNewlineInCodeBlock(view.state, dispatch) || - newlineInCode(view.state, dispatch) - ); - } - if (convertCodeFenceOnEnter(view.state, (tr) => view.dispatch(tr))) { - event.preventDefault(); - event.stopPropagation(); - return true; - } - } - const handler = onCommandKeyDownRef.current; - if (event.key === "Enter") { - const instance = editorHolder.current; - const isTaskItem = richText && (instance?.isActive("taskItem") ?? false); - const isListItem = richText && (instance?.isActive("listItem") ?? false); - const handled = handler?.("Enter", event, isTaskItem || isListItem) ?? false; - if (handled) { - event.preventDefault(); - event.stopPropagation(); - return true; - } - event.preventDefault(); - if ((isTaskItem || isListItem) && instance && splitOrLiftListItem(instance)) { - return true; - } - if ( - richText && - instance && - hasAncestor(view.state.selection.$from, "blockquote") && - view.state.selection.$from.parent.content.size === 0 && - instance.commands.lift("blockquote") - ) { - return true; - } - // Split the paragraph so a single newline visibly advances the caret. - return splitBlockKeepMarks(view.state, (tr) => { - // The split is programmatic, so the browser won't follow the - // caret into view on its own. - view.dispatch(tr.scrollIntoView()); - }); - } - if (!handler) return false; - const handled = handler(event.key, event); - if (handled) { - event.preventDefault(); - event.stopPropagation(); - } - return handled; - }, - handleTextInput: (view, from, to, text) => { - if (literalText || text.length !== 1) return false; - const closer = SURROUND_CLOSE[text]; - if (!closer || from === to) return false; - // Never wrap chips or other atoms, and never wrap styled text: the - // default replace keeps marks intact, wrapping would drop them. - let touchesSpecial = false; - view.state.doc.nodesBetween(from, to, (node) => { - if ( - (node.isAtom && node.isInline && !node.isText) || - (node.isText && node.marks.length > 0) - ) { - touchesSpecial = true; - return false; - } - return true; - }); - if (touchesSpecial) return false; - const map = serializeEditorDoc(view.state.doc); - const startMd = flatToMarkdown(map, pmToFlat(map, from)); - const endMd = flatToMarkdown(map, pmToFlat(map, to)); - if (selectionTouchesMentionBoundary(map.value, startMd, endMd)) return false; - const tr = view.state.tr.insertText(closer, to).insertText(text, from); - tr.setSelection(TextSelection.create(tr.doc, from + text.length, to + text.length)); - view.dispatch(tr); - return true; - }, - handlePaste: (view, event) => { - const clipboardData = event.clipboardData; - if (!clipboardData || clipboardData.files.length > 0) return false; - const pastedText = clipboardData.getData("text/plain"); - if (!pastedText) return false; - event.preventDefault(); - // A fence takes the clipboard verbatim. Running the markdown path - // here would split the block on newlines, nest a pasted fence and - // build chips the code block's schema cannot hold anyway. - if (isInCodeBlock(view)) { - const { from, to } = view.state.selection; - view.dispatch( - markAsClipboardEdit( - view.state.tr.insertText(pastedText, from, to), - "paste", - ).scrollIntoView(), - ); - return true; - } - const importFragment = importFragmentRef.current; - let text = - !literalText && importFragment - ? importPastedComposerText(clipboardData, importFragment) - : pastedText; - // Complete chips at paste boundaries just as autocomplete does. - const tokens = literalText ? [] : collectComposerPromptInlineTokens(`${text}\n`); - const lastToken = tokens.at(-1); - if ( - (lastToken?.type === "mention" || lastToken?.type === "skill") && - lastToken.end === text.length - ) { - text += " "; - } - if ( - (tokens[0]?.type === "mention" || tokens[0]?.type === "skill") && - tokens[0].start === 0 - ) { - const map = serializeEditorDoc(view.state.doc); - const offset = flatToMarkdown(map, pmToFlat(map, view.state.selection.from)); - if (offset > 0 && !/\s/.test(map.value[offset - 1]!)) text = ` ${text}`; - } - const { $from } = view.state.selection; - const lineBefore = $from.parent.textBetween(0, $from.parentOffset, undefined, "\uFFFC"); - const literalLength = literalText - ? 0 - : pastedPathQueryLength(lineBefore, text, isPathQueryActiveRef.current?.()); - const editorInstance = editorHolder.current; - if (editorInstance) { - // Inside a list item or quote, pasted block markup has nowhere to - // go: it stays literal lines the next rebuild reads back. Inline - // marks still apply. - const $paste = view.state.selection.$from; - const nested = ["listItem", "taskItem", "blockquote"].some((name) => - hasAncestor($paste, name), - ); - insertMarkdownParagraphs( - text, - skillLabelFor, - { styling: richText, blocks: !nested, literalText, literalLength }, - (content) => { - // Tagged on the same transaction insertContent builds, so the - // paste is one undo step of its own. - editorInstance - .chain() - .command(({ tr }) => { - markAsClipboardEdit(tr, "paste"); - return true; - }) - .insertContent(content) - .command(({ tr }) => { - // A paste ending in a rule leaves the rule selected, and - // the next keystroke would replace it. The caret goes to - // the line after it, which is added when there is none. - const { selection } = tr; - if (!(selection instanceof NodeSelection) || !selection.node.isBlock) { - return true; - } - if (!tr.doc.resolve(selection.to).nodeAfter?.isTextblock) { - tr.insert(selection.to, tr.doc.type.schema.nodes.paragraph!.create()); - } - tr.setSelection(TextSelection.create(tr.doc, selection.to + 1)); - return true; - }) - .run(); - }, - ); - scrollTiptapCaretIntoView(editorInstance); - } - return true; - }, - }, - onUpdate: ({ editor: updated }) => { - handleEditorChange(updated); - }, - onSelectionUpdate: ({ editor: updated }) => { - handleEditorChange(updated); - }, - }, - [], - ); - - useEffect(() => { - editor?.setEditable(!disabled); - }, [disabled, editor]); - - useEffect(() => { - editorHolder.current = editor; - }, [editor]); - - // Tiptap forwards option changes to the view from a passive effect, so a - // class change here would reach the ProseMirror element one tick after - // React commits. The chat composer measures its resting and expanded - // geometry in layout effects that run first, and it clamps the prompt - // through `className`, so the attributes are pushed to the view here for - // those measurements to see the layout they are about to reserve for. - useLayoutEffect(() => { - if (!editor?.isInitialized) return; - editor.view.setProps({ attributes: editorAttributes }); - }, [editor, editorAttributes]); - - const readSnapshot = useCallback(() => { - const snapshot = snapshotRef.current; - if (!editor) return snapshot; - const map = serializeEditorDoc(editor.state.doc); - const { from, to } = editor.state.selection; - const fromFlat = pmToFlat(map, from); - const next: typeof snapshot = { - value: map.value, - cursor: clampEditorCursor(map.value, flatToCollapsed(map, fromFlat)), - expandedCursor: Math.max(0, Math.min(map.value.length, flatToMarkdown(map, fromFlat))), - contextIds: literalText ? [] : map.contextIds, - }; - const toFlat = pmToFlat(map, to); - selectionRangeRef.current = { - start: Math.min(next.expandedCursor, flatToMarkdown(map, toFlat)), - end: Math.max(next.expandedCursor, flatToMarkdown(map, toFlat)), - }; - snapshotRef.current = next; - return next; - }, [clampEditorCursor, editor, literalText]); - - // A question or approval swaps the controlled value while a citation comment - // is open. Its node view unmounts with the old document, so save the comment - // the way dismissing the popover would, and hand the saved value back. - const saveCitationDraft = useEffectEvent((current: TiptapEditor, replacedValue: string) => { - const draft = citationDraftRef.current; - citationDraftRef.current = null; - if (!draft || !onCitationDraftSave) return; - const [target] = findChildren( - current.state.doc, - (node) => node.type.name === "composer-citation" && node.attrs.citeKey === draft.key, - ); - if (!target) return; - const { node, pos } = target; - const citation = node.attrs.citation as AssistantCitation; - const dismissal = resolveAssistantCitationCommentDismissal({ - reason: "none", - draft: draft.comment, - savedComment: citation.comment, - }); - if (dismissal.kind !== "commit") return; - const next = withAssistantCitationComment(citation, dismissal.comment); - current.view.dispatch( - current.state.tr - .setNodeMarkup(pos, undefined, { - ...node.attrs, - citation: next, - source: serializeAssistantCitation(next), - }) - .setMeta("addToHistory", false), - ); - onCitationDraftSave(replacedValue, serializeEditorDoc(current.state.doc).value); - }); - - // Controlled value/cursor from the store (history recall, chip insertion…). - useLayoutEffect(() => { - if (!editor) return; - const initialSelection = !hasAppliedControlledSelectionRef.current; - hasAppliedControlledSelectionRef.current = true; - const normalizedCursor = clampEditorCursor(value, cursor); - const previousSnapshot = snapshotRef.current; - if ( - !initialSelection && - previousSnapshot.value === value && - previousSnapshot.cursor === normalizedCursor - ) { - return; - } - const normalizedExpandedCursor = expandEditorCursor(value, normalizedCursor); - snapshotRef.current = { - value, - cursor: normalizedCursor, - expandedCursor: normalizedExpandedCursor, - contextIds: collectInlineContextIds(value), - }; - selectionRangeRef.current = { - start: normalizedExpandedCursor, - end: normalizedExpandedCursor, - }; - setIsEmpty(value.length === 0); - const rootElement = editor.view.dom; - const isFocused = Boolean(rootElement && document.activeElement === rootElement); - if (!initialSelection && previousSnapshot.value === value && !isFocused) return; - - isApplyingControlledUpdateRef.current = true; - const pendingCitation = - citationRequestRef.current?.value === value ? citationRequestRef.current : null; - if (previousSnapshot.value !== value) { - saveCitationDraft(editor, previousSnapshot.value); - editor.commands.setContent( - buildDocJson(value, skillLabelFor, { styling: richText, literalText }), - { - emitUpdate: false, - }, - ); - } - const map = serializeEditorDoc(editor.state.doc); - const flat = collapsedToFlat(map, normalizedCursor); - editor.commands.setTextSelection(flatToPm(map, flat)); - if (isFocused) scrollTiptapCaretIntoView(editor); - if (pendingCitation) { - citationRequestRef.current = null; - const target = map.runs.find( - (run) => - run.kind === "token" && - run.nodeName === "composer-citation" && - run.mdStart === pendingCitation.citationStart, - ); - if (target) { - const node = editor.state.doc.nodeAt(target.pmPos); - const citeKey = (node?.attrs as { citeKey?: string } | undefined)?.citeKey; - if (citeKey) { - setOpenCitation({ - key: citeKey, - sourceAnchor: pendingCitation.sourceAnchor, - removeOnCancel: pendingCitation.insertedSpaces, - }); - } - } - } - queueMicrotask(() => { - isApplyingControlledUpdateRef.current = false; - }); - }, [ - clampEditorCursor, - cursor, - editor, - expandEditorCursor, - literalText, - richText, - skillLabelFor, - value, - ]); - - const focusAt = useCallback( - (nextCursor: number) => { - if (!editor) return; - // view.focus() writes the state selection to the DOM as it focuses. A - // bare DOM focus leaves the native caret at the start until - // ProseMirror resyncs it 20ms later, and dictation tools type fast - // enough to land keys there, ahead of the text already inserted. - editor.view.focus(); - // A newer prompt is waiting to be applied (a chip was just inserted - // through the store). Reporting the editor's stale text now would - // overwrite that prompt; the pending rewrite places the caret instead. - if (snapshotRef.current.value !== latestValueRef.current) return; - const boundedCursor = clampEditorCursor(snapshotRef.current.value, nextCursor); - const map = serializeEditorDoc(editor.state.doc); - const flat = collapsedToFlat(map, boundedCursor); - editor.commands.setTextSelection(flatToPm(map, flat)); - scrollTiptapCaretIntoView(editor); - if (boundedCursor === snapshotRef.current.cursor) return; - snapshotRef.current = { - value: snapshotRef.current.value, - cursor: boundedCursor, - expandedCursor: expandEditorCursor(snapshotRef.current.value, boundedCursor), - contextIds: snapshotRef.current.contextIds, - }; - selectionRangeRef.current = { - start: snapshotRef.current.expandedCursor, - end: snapshotRef.current.expandedCursor, - }; - onChangeRef.current( - snapshotRef.current.value, - boundedCursor, - snapshotRef.current.expandedCursor, - literalText, - snapshotRef.current.contextIds, - ); - }, - [clampEditorCursor, editor, expandEditorCursor, literalText], - ); - - useImperativeHandle( - editorRef, - () => ({ - focus: () => { - focusAt(snapshotRef.current.cursor); - }, - focusAt, - focusAtEnd: () => { - focusAt( - literalText - ? snapshotRef.current.value.length - : collapseExpandedComposerCursor( - snapshotRef.current.value, - snapshotRef.current.value.length, - ), - ); - }, - readSelectionRange: () => { - readSnapshot(); - return selectionRangeRef.current; - }, - requestCitationComment: (request) => { - citationRequestRef.current = request; - if (!editor) return; - const map = serializeEditorDoc(editor.state.doc); - if (map.value !== request.value) return; - const target = map.runs.find( - (run) => - run.kind === "token" && - run.nodeName === "composer-citation" && - run.mdStart === request.citationStart, - ); - if (!target) return; - const node = editor.state.doc.nodeAt(target.pmPos); - const citeKey = (node?.attrs as { citeKey?: string } | undefined)?.citeKey; - if (citeKey) { - citationRequestRef.current = null; - setOpenCitation({ - key: citeKey, - sourceAnchor: request.sourceAnchor, - removeOnCancel: request.insertedSpaces, - }); - } - }, - readSnapshot, - isCaretOnVisualEdge: (edge) => { - const snapshot = readSnapshot(); - if (snapshot.value.length === 0) return true; - const beforeCaret = snapshot.value.slice(0, snapshot.expandedCursor); - const afterCaret = snapshot.value.slice(snapshot.expandedCursor); - if (edge === "start" ? beforeCaret.includes("\n") : afterCaret.includes("\n")) { - return false; - } - const rootElement = editor?.view.dom; - const selection = window.getSelection(); - if ( - !rootElement || - !selection || - !selection.isCollapsed || - selection.rangeCount === 0 || - !selection.anchorNode || - !rootElement.contains(selection.anchorNode) - ) { - return false; - } - const caretRect = caretLineRect(selection.getRangeAt(0), edge); - if (!caretRect) return false; - const edgeElement = - edge === "start" ? rootElement.firstElementChild : rootElement.lastElementChild; - const edgeRect = (edgeElement ?? rootElement).getBoundingClientRect(); - const threshold = caretRect.height / 2; - return edge === "start" - ? caretRect.top - edgeRect.top < threshold - : edgeRect.bottom - caretRect.bottom < threshold; - }, - }), - [editor, focusAt, literalText, readSnapshot], - ); - - const handleCopyCut = useCallback( - (event: React.ClipboardEvent, cut: boolean) => { - const build = buildFragmentRef.current; - if (!editor || (cut && !editor.isEditable)) return; - const clipboardData = event.clipboardData; - const { from, to } = editor.state.selection; - if (from === to) return; - const text = serializeSelection(editor.state.doc, from, to); - const contextIds = literalText ? [] : Array.from(new Set(collectInlineContextIds(text))); - const fragment = contextIds.length > 0 ? build?.(contextIds) : null; - event.preventDefault(); - clipboardData.setData("text/plain", text); - if (fragment) { - clipboardData.setData(COMPOSER_CONTEXT_CLIPBOARD_MIME, fragment); - clipboardData.setData("text/html", encodeComposerContextClipboardHtml(text, fragment)); - } - if (cut) { - editor - .chain() - .focus() - .command(({ tr }) => { - markAsClipboardEdit(tr, "cut"); - return true; - }) - .deleteSelection() - .run(); - } - }, - [editor, literalText], - ); - - return ( - - - -
- { - if ( - event.key === "Control" || - event.key === "Meta" || - event.key === "Alt" || - event.key === "Shift" - ) { - onPageScrollRelease?.(); - } - if (event.key !== "PageUp" && event.key !== "PageDown") return; - const target = event.currentTarget.querySelector( - '[data-testid="composer-editor"]', - ) as HTMLElement | null; - if (!target) return; - const pageScrollKey = getTimelinePageScrollKey({ - altKey: event.altKey, - clientHeight: target.clientHeight, - ctrlKey: event.ctrlKey, - defaultPrevented: event.defaultPrevented, - isComposing: event.nativeEvent.isComposing, - key: event.key, - keyCode: event.keyCode, - metaKey: event.metaKey, - scrollHeight: target.scrollHeight, - scrollTop: target.scrollTop, - shiftKey: event.shiftKey, - }); - if (!pageScrollKey) { - onPageScrollRelease?.(); - return; - } - if (!onPageScrollKeyDown) return; - event.preventDefault(); - onPageScrollKeyDown(pageScrollKey); - }} - onKeyUp={(event) => onPageScrollKeyUp?.(event.key)} - onBlur={onPageScrollRelease} - onPasteCapture={onPaste} - onCopyCapture={(event) => handleCopyCut(event, false)} - onCutCapture={(event) => handleCopyCut(event, true)} - /> - {isEmpty && contextRecords.size === 0 && placeholder ? ( -
- {placeholder} -
- ) : null} -
-
-
-
- ); -} - -/** - * Insert pasted markdown at the selection, rebuilding inline tokens as chips - * and styled spans as marks. - * - * Newlines always become paragraph splits — never trailing hard breaks, which - * render no visible line — so pasted text lands exactly as typed. - */ -function insertMarkdownParagraphs( - value: string, - skillLabelFor: (name: string) => SkillMeta, - options: { styling: boolean; blocks?: boolean; literalText?: boolean; literalLength?: number }, - insertContent: (content: JSONContent[] | JSONContent) => void, -): void { - const blocks = buildTiptapContent(value, skillLabelFor, options); - if (blocks.length === 1 && blocks[0]?.type === "paragraph") { - const inline = (blocks[0]?.content ?? []) as JSONContent[]; - if (inline.length === 0) return; - insertContent(inline); - return; - } - insertContent(blocks as JSONContent[]); -} - -/** - * Follow a programmatically placed caret: native scrolling only happens for - * real input, so controlled rewrites, pastes, and focus restores scroll the - * composer to the caret explicitly. - */ -function scrollTiptapCaretIntoView(editor: TiptapEditor): void { - editor.view.dispatch(editor.state.tr.scrollIntoView()); -} - -/** - * Client rect of the caret's visual line, so prompt history keeps claiming - * ArrowUp/Down only at the first and last soft-wrapped lines. - */ -function caretLineRect(range: Range, edge: "start" | "end"): DOMRect | null { - const collapsedRects = Array.from(range.getClientRects()).filter((rect) => rect.height > 0); - const collapsedRect = edge === "start" ? collapsedRects.at(-1) : collapsedRects[0]; - if (collapsedRect) return collapsedRect; - - const container = range.startContainer; - // TEXT_NODE without importing the DOM lib's Node (shadowed by Tiptap's). - if (container.nodeType === 3) { - const textNode = container as Text; - if (textNode.data.length === 0) return null; - const probeStart = Math.max( - 0, - Math.min( - edge === "start" ? range.startOffset : range.startOffset - 1, - textNode.data.length - 1, - ), - ); - const probeRange = document.createRange(); - probeRange.setStart(textNode, probeStart); - probeRange.setEnd(textNode, probeStart + 1); - const probeRect = Array.from(probeRange.getClientRects()).find((rect) => rect.height > 0); - if (probeRect) return probeRect; - const boundingRect = probeRange.getBoundingClientRect(); - return boundingRect.height > 0 ? boundingRect : null; - } - - if (!(container instanceof HTMLElement)) return null; - const neighbour = - container.childNodes[Math.max(0, range.startOffset - 1)] ?? - container.childNodes[range.startOffset]; - if (neighbour instanceof HTMLElement) { - const neighbourRect = neighbour.getBoundingClientRect(); - if (neighbourRect.height > 0) return neighbourRect; - } else if (neighbour instanceof Text && neighbour.data.length > 0) { - const isBeforeCaret = neighbour === container.childNodes[range.startOffset - 1]; - const probeStart = isBeforeCaret ? neighbour.data.length - 1 : 0; - const probeRange = document.createRange(); - probeRange.setStart(neighbour, probeStart); - probeRange.setEnd(neighbour, probeStart + 1); - const probeRect = Array.from(probeRange.getClientRects()).find((rect) => rect.height > 0); - if (probeRect) return probeRect; - } - const containerRect = container.getBoundingClientRect(); - return containerRect.height > 0 ? containerRect : null; -} diff --git a/apps/web/src/components/chat/ChatCanvas.tsx b/apps/web/src/components/chat/ChatCanvas.tsx index 809443c8f6861f95d0516f905a04f413177dab3f..550e6fc57d62621c3caacc7c4ec88840332d9bc4 100644 --- a/apps/web/src/components/chat/ChatCanvas.tsx +++ b/apps/web/src/components/chat/ChatCanvas.tsx @@ -8,7 +8,11 @@ import { type CSSProperties, } from "react"; import { ChatCanvasContext } from "./ChatCanvasContext"; -import { resolveChatCanvasLayout, type ChatCanvasPreview } from "./chatCanvasLayout"; +import { + DETAILS_CARD_CLEARANCE, + resolveChatCanvasLayout, + type ChatCanvasPreview, +} from "./chatCanvasLayout"; import type { PreviewMiniPlayerObstacles } from "../preview/previewMiniPlayerLayout"; import { observeResize } from "../../lib/observeResize"; @@ -144,6 +148,15 @@ export function ChatCanvas({ detailsCardTopInset, ]); const { layout } = context; + const blockOutsetStart = Math.max(0, layout.chat.left - measurements.padding); + const blockRight = detailsCard + ? detailsCard.left - DETAILS_CARD_CLEARANCE + : measurements.width - measurements.padding; + const blockOutsetEnd = + layout.chat.insetEnd > 0 + ? 0 + : Math.max(0, Math.min(blockOutsetStart, blockRight - layout.chat.left - layout.chat.width)); + return (
diff --git a/apps/web/src/components/chat/ChatComposer.tsx b/apps/web/src/components/chat/ChatComposer.tsx index 05a5e6702092f9a61aded46fb99db4c73b97d632..99588f08004d3d2d39586d2f438689c5006659c2 100644 --- a/apps/web/src/components/chat/ChatComposer.tsx +++ b/apps/web/src/components/chat/ChatComposer.tsx @@ -94,7 +94,6 @@ import { replaceTextRange, } from "../../composer-logic"; import { DISCONNECTED_COMPOSER_PLACEHOLDER } from "../../composerPlaceholder"; -import { listContinuationForEnter, listIndentForTab } from "../../composer-list-continuation"; import { deriveComposerSendState, getAntigravitySendBlockReason, @@ -293,7 +292,7 @@ import { ComposerControlSeparator, ComposerSelectControl, } from "./ComposerControl"; -import { resolveComposerMenuActiveItemId } from "./composerMenuHighlight"; +import { composerEmojiKeyAction, resolveComposerMenuActiveItemId } from "./composerMenuHighlight"; import { buildPullRequestReferenceContext } from "../pullRequest/pullRequestDetail.logic"; import { matchesPullRequestQuery, @@ -1707,7 +1706,7 @@ export interface ChatComposerProps { value: string, nextCursor: number, expandedCursor: number, - cursorAdjacentToMention: boolean, + suppressSuggestions: boolean, ) => void; onProviderModelSelect: ( @@ -2617,6 +2616,27 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) // Derived: composer trigger / menu // ------------------------------------------------------------------ const composerTriggerKind = composerTrigger?.kind ?? null; + const [emojiSearch, setEmojiSearch] = useState< + typeof import("./composerEmojiSearch") | "error" | null + >(null); + const isEmojiTrigger = composerTriggerKind === "emoji"; + + useEffect(() => { + if (!isEmojiTrigger || emojiSearch !== null) return; + let active = true; + void import("./composerEmojiSearch").then( + (search) => { + if (active) setEmojiSearch(search); + }, + () => { + if (active) setEmojiSearch("error"); + }, + ); + return () => { + active = false; + }; + }, [emojiSearch, isEmojiTrigger]); + const pathTriggerQuery = composerTrigger?.kind === "path" ? composerTrigger.query : ""; const pullRequestTriggerQuery = composerTrigger?.kind === "pull-request" ? composerTrigger.query : ""; @@ -2720,6 +2740,11 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) const composerMenuItems = useMemo(() => { if (!composerTrigger) return []; + if (composerTrigger.kind === "emoji") { + return emojiSearch && emojiSearch !== "error" + ? emojiSearch.searchComposerEmoji(composerTrigger.query) + : []; + } if (composerTrigger.kind === "path") { // Threads only surface for a typed query so `@` alone stays a file picker. A title match // is far more specific than a fuzzy path hit, so the few threads lead the list. @@ -2877,6 +2902,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) activeThreadId, compactSlashCommandAvailable, composerTrigger, + emojiSearch, environmentId, environmentThreadShells, exactPullRequestLookup.data, @@ -2964,6 +2990,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) ]); const isComposerMenuLoading = + (isEmojiTrigger && emojiSearch === null) || (composerTriggerKind === "path" && pathTriggerQuery.length > 0 && workspaceEntries.isPending) || (composerTriggerKind === "pull-request" && pullRequestProjectId !== null && @@ -2973,6 +3000,11 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) pullRequestTriggerNumber !== debouncedPullRequestNumber || exactPullRequestLookup.isPending)); const composerMenuEmptyState = useMemo(() => { + if (composerTriggerKind === "emoji") { + return emojiSearch === "error" + ? "Emoji could not load. Reload and try again." + : "No matching emoji."; + } if (composerTriggerKind === "skill") { return "No skills found. Try / to browse provider commands."; } @@ -2996,6 +3028,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) }, [ composerTrigger, composerTriggerKind, + emojiSearch, pullRequestLookup.data?.errors, pullRequestLookup.error, pullRequestProjectId, @@ -3827,7 +3860,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) nextPrompt: string, nextCursor: number, expandedCursor: number, - cursorAdjacentToMention: boolean, + suppressSuggestions: boolean, contextIds: string[], ) => { expandComposerForEditorChange(); @@ -3835,14 +3868,14 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) if (activePendingProgress.activeQuestion.allowCustomAnswer === false) return; setComposerCursor(nextCursor); setComposerTrigger( - cursorAdjacentToMention ? null : detectComposerTrigger(nextPrompt, expandedCursor), + suppressSuggestions ? null : detectComposerTrigger(nextPrompt, expandedCursor), ); onChangeActivePendingUserInputCustomAnswer( activePendingProgress.activeQuestion.id, nextPrompt, nextCursor, expandedCursor, - cursorAdjacentToMention, + suppressSuggestions, ); return; } @@ -3947,7 +3980,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) } setComposerCursor(nextCursor); setComposerTrigger( - cursorAdjacentToMention ? null : detectComposerTrigger(nextPrompt, expandedCursor), + suppressSuggestions ? null : detectComposerTrigger(nextPrompt, expandedCursor), ); }, [ @@ -4026,7 +4059,6 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) ); if (options?.citationComment) { composerEditorRef.current?.requestCitationComment({ - previousValue: currentText, value: next.text, citationStart: options.citationComment.start, sourceAnchor: options.citationComment.sourceAnchor, @@ -4104,9 +4136,10 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) const snapshot = readComposerSnapshot(); return { snapshot, - trigger: isLiteralPendingAnswer - ? null - : resolveComposerTrigger(detectComposerTrigger(snapshot.value, snapshot.expandedCursor)), + trigger: + isLiteralPendingAnswer || composerEditorRef.current?.suggestionsSuppressed() + ? null + : resolveComposerTrigger(detectComposerTrigger(snapshot.value, snapshot.expandedCursor)), }; }, [isLiteralPendingAnswer, readComposerSnapshot, resolveComposerTrigger]); @@ -4120,6 +4153,20 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) }); const { snapshot, trigger } = resolveActiveComposerTrigger(); if (!trigger) return; + if (item.type === "emoji") { + if ( + trigger.kind !== "emoji" || + trigger.query.toLowerCase() !== item.query || + !composerMenuItemsRef.current.some((candidate) => candidate.id === item.id) + ) { + return; + } + const applied = applyPromptReplacement(trigger.rangeStart, trigger.rangeEnd, item.emoji, { + expectedText: snapshot.value.slice(trigger.rangeStart, trigger.rangeEnd), + }); + if (applied) setComposerHighlightedItemId(null); + return; + } if (item.type === "path") { const replacement = `${serializeComposerFileLink(item.path)} `; const replacementRangeEnd = extendReplacementRangeForTrailingSpace( @@ -4596,7 +4643,22 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) // ------------------------------------------------------------------ // Callbacks: command key // ------------------------------------------------------------------ - const onComposerCommandKey = (key: string, event: KeyboardEvent, isTaskItem = false) => { + const onComposerCommandKey = (key: string, event: KeyboardEvent) => { + if (event.isComposing || event.keyCode === 229) return false; + const { trigger } = resolveActiveComposerTrigger(); + if (trigger?.kind === "emoji") { + const action = composerEmojiKeyAction(event); + if (action === "select") { + const selectedItem = activeComposerMenuItemRef.current; + if (selectedItem?.type === "emoji") onSelectComposerItem(selectedItem); + } else if (action === "next" || action === "previous") { + nudgeComposerMenuHighlight(action === "next" ? "ArrowDown" : "ArrowUp"); + } else if (action === "dismiss") { + dismissComposerTrigger(trigger); + composerMenuOpenRef.current = false; + } + if (action !== null) return true; + } const submissionIntent = composerSubmissionIntentForKey({ event, keybindings, @@ -4611,16 +4673,19 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) toggleInteractionMode(); return true; } - const { trigger } = resolveActiveComposerTrigger(); const menuIsActive = !isLiteralPendingAnswer && (composerMenuOpenRef.current || trigger !== null); if (key === "Escape") { - if (!menuIsActive || event.isComposing || event.keyCode === 229) return false; + if (!menuIsActive) return false; dismissComposerTrigger(trigger); composerMenuOpenRef.current = false; return true; } - if (menuIsActive && (submissionIntent === null || submissionIntent === "foreground")) { + if ( + menuIsActive && + trigger?.kind !== "emoji" && + (submissionIntent === null || submissionIntent === "foreground") + ) { const currentItems = composerMenuItemsRef.current; const selectedItem = activeComposerMenuItemRef.current ?? currentItems[0]; if (key === "ArrowDown" && currentItems.length > 0) { @@ -4651,35 +4716,6 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) ); return true; } - // Native task splitting preserves marks and chips on both sides of the caret. - if (key === "Enter" && isTaskItem) return false; - if ( - !isLiteralPendingAnswer && - !event.isComposing && - (key === "Enter" || (key === "Tab" && !event.shiftKey)) - ) { - const selection = composerEditorRef.current?.readSelectionRange(); - const snapshot = readComposerSnapshot(); - if (selection && selection.start === selection.end && snapshot.value === promptRef.current) { - const edit = - key === "Enter" - ? listContinuationForEnter(snapshot.value, selection.start) - : listIndentForTab(snapshot.value, selection.start, selection.end); - if ( - edit && - applyPromptReplacement( - edit.start, - edit.end, - edit.replacement, - key === "Tab" - ? { expandedCursorAfterReplace: selection.start + edit.replacement.length } - : undefined, - ) - ) { - return true; - } - } - } return false; }; @@ -6240,11 +6276,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) // composer is at its attachment limit: `addComposerAttachments` surfaces // those as a toast and a thread error. An early return here would swallow // the paste with no feedback. - if ( - files.length > 0 && - activeThreadId && - shouldHandleComposerAttachmentPaste({ files, plainText }) - ) { + if (files.length > 0 && shouldHandleComposerAttachmentPaste({ files, plainText })) { event.preventDefault(); event.stopPropagation(); void addComposerAttachments(files, { skipImageInlineChip: bypassAutoAttachment }); @@ -7225,9 +7257,11 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
{composerSuggestionsVisible && composerMenuItems.length === 0 ? isComposerMenuLoading - ? composerTriggerKind === "pull-request" - ? "Finding pull request..." - : "Searching workspace files..." + ? composerTriggerKind === "emoji" + ? "Loading emoji…" + : composerTriggerKind === "pull-request" + ? "Finding pull request..." + : "Searching workspace files..." : composerMenuEmptyState : ""}
@@ -7657,6 +7691,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) ) : null} - resolveActiveComposerTrigger().trigger?.kind === "path" - } value={ isComposerApprovalState ? "" diff --git a/apps/web/src/components/chat/ComposerCodeBlockNodeView.tsx b/apps/web/src/components/chat/ComposerCodeBlockNodeView.tsx deleted file mode 100644 index fcaf93af941396851b5c7e2e4ca92be8c8173b63..0000000000000000000000000000000000000000 --- a/apps/web/src/components/chat/ComposerCodeBlockNodeView.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { NodeViewContent, NodeViewWrapper, type NodeViewProps } from "@tiptap/react"; - -import { languageOfInfoString, withInfoStringLanguage } from "~/composer-code-languages"; - -import { useTheme } from "../../hooks/useTheme"; -import { MarkdownCodeBlockFrame } from "../ChatMarkdown"; -import { ComposerCodeBlockLanguagePicker } from "./ComposerCodeBlockLanguagePicker"; - -/** - * Draws a composer fence in the chat view's own code block frame, so a draft - * looks like the message it is about to become, with the language title - * swapped for a picker that rewrites the fence's language in place. - * - * The chrome stops at the language. Chat's wrap and copy buttons act on text - * the reader cannot change; here the text is the draft, and both are already - * a selection away. - */ -export function ComposerCodeBlockNodeView({ - node, - editor, - getPos, - updateAttributes, -}: NodeViewProps) { - const { resolvedTheme } = useTheme(); - const info = typeof node.attrs.language === "string" ? node.attrs.language : ""; - const language = languageOfInfoString(info); - - const changeLanguage = (next: string) => { - updateAttributes({ language: withInfoStringLanguage(info, next) }); - // Back into the code, at its end, the way a picker hands focus back. - const position = getPos(); - if (typeof position === "number") { - editor - .chain() - .focus(position + 1 + node.content.size) - .run(); - } - }; - - return ( - - } - > -
-
-          {/* A caret needs a line to sit on even before any code is typed. */}
-          
-            as="code"
-            className="block min-h-[1lh] font-mono whitespace-pre-wrap text-inherit [overflow-wrap:anywhere]"
-          />
-        
-
-
- ); -} diff --git a/apps/web/src/components/chat/ComposerCommandMenu.tsx b/apps/web/src/components/chat/ComposerCommandMenu.tsx index e89f4375ef85217849faab386a56554d45e92b96..9768894f29ec8942cbd4a009ed0b6cd8451291d6 100644 --- a/apps/web/src/components/chat/ComposerCommandMenu.tsx +++ b/apps/web/src/components/chat/ComposerCommandMenu.tsx @@ -31,6 +31,14 @@ import { ComposerBanner } from "./ComposerBanner"; import { resolvePullRequestState } from "../pullRequest/pullRequestPresentation"; export type ComposerCommandItem = + | { + id: string; + type: "emoji"; + emoji: string; + query: string; + label: string; + description: string; + } | { id: string; type: "path"; @@ -138,11 +146,13 @@ export const ComposerCommandMenu = memo(function ComposerCommandMenu(props: {

{props.isLoading - ? props.triggerKind === "skill" - ? "Searching workspace skills..." - : props.triggerKind === "pull-request" - ? "Finding pull request..." - : "Searching workspace files..." + ? props.triggerKind === "emoji" + ? "Loading emoji…" + : props.triggerKind === "skill" + ? "Searching workspace skills..." + : props.triggerKind === "pull-request" + ? "Finding pull request..." + : "Searching workspace files..." : (props.emptyStateText ?? (props.triggerKind === "skill" ? "No skills found. Try / to browse provider commands." @@ -190,6 +200,11 @@ const ComposerCommandMenuItem = memo(function ComposerCommandMenuItem(props: { props.onSelect(props.item); }} > + {props.item.type === "emoji" ? ( + + ) : null} {props.item.type === "path" ? ( = { "pull-request": "Pull requests", "slash-command": "Commands", skill: "Skills", + emoji: "Emoji", }; const SKILL_SOURCE_ICON_BY_KIND: Record = { diff --git a/apps/web/src/components/chat/ExpandedImageDialog.tsx b/apps/web/src/components/chat/ExpandedImageDialog.tsx index 98c73d47c97a05be84c6dbe3bf9af9e5a20b4a53..affd8fa3c2cc8ec798a1a49d3c4a31136fd78d58 100644 --- a/apps/web/src/components/chat/ExpandedImageDialog.tsx +++ b/apps/web/src/components/chat/ExpandedImageDialog.tsx @@ -65,6 +65,7 @@ function ExpandedVideo({ item }: { readonly item: ExpandedImageItem }) { videoClassName="aspect-auto max-h-[var(--media-height)] w-auto max-w-[var(--media-width)] rounded-lg border border-border/70 shadow-2xl" stateClassName={EXPANDED_MEDIA_STATE_CLASS_NAME} onRetry={asset ? refreshAssetUrl : undefined} + actionsSource={item.actionsSource} /> ); } diff --git a/apps/web/src/components/chat/FileTagChip.tsx b/apps/web/src/components/chat/FileTagChip.tsx index b6235dde889139524ae22e33c6cb7c729d189c8d..00b05ca1c1a86f096a66e3662a05800d97535b7b 100644 --- a/apps/web/src/components/chat/FileTagChip.tsx +++ b/apps/web/src/components/chat/FileTagChip.tsx @@ -1,3 +1,4 @@ +import type { ReactNode } from "react"; import type { EnvironmentId } from "@t3tools/contracts"; import { ContextChipLabel } from "../ContextChip"; import { WorkspaceEntryIcon } from "./WorkspaceEntryIcon"; @@ -5,7 +6,7 @@ import { WorkspaceEntryIcon } from "./WorkspaceEntryIcon"; /** Icon and label for a file mention; render inside ``. */ export function FileTagChipContent(props: { path: string; - label: string; + label: ReactNode; theme: "light" | "dark"; environmentId?: EnvironmentId | null | undefined; cwd?: string | undefined; diff --git a/apps/web/src/components/chat/HtmlRenderFrame.tsx b/apps/web/src/components/chat/HtmlRenderFrame.tsx index 5133c0ea55cd5b47272c545495d02b42a84c9791..8019d6af134f49856a86d0f57a392c103b5baccb 100644 --- a/apps/web/src/components/chat/HtmlRenderFrame.tsx +++ b/apps/web/src/components/chat/HtmlRenderFrame.tsx @@ -3,6 +3,7 @@ import { HTML_RENDER_COLUMN_WIDTH, htmlRenderFileName, htmlRenderFrameHeight, + readHtmlRenderContentSize, type HtmlRenderReference, } from "@t3tools/shared/htmlRender"; import { Maximize2Icon } from "lucide-react"; @@ -47,8 +48,8 @@ export function HtmlRenderFrame(props: { }, []); // Client fonts can wrap a page taller than the server measured it; a frame // left short would scroll inside the thread and take the reader's scroll. - const [contentHeight, setContentHeight] = useState(); - const height = htmlRenderFrameHeight(props.htmlRender, width, contentHeight); + const [contentSize, setContentSize] = useState>(); + const height = htmlRenderFrameHeight(props.htmlRender, width, contentSize?.height); const fileName = htmlRenderFileName(title); const resource = useMemo( () => ({ @@ -100,7 +101,11 @@ export function HtmlRenderFrame(props: { }, [cacheFailed, cachedExpiresAt, cachedUrl, refresh, src]); return ( -

+
{src !== null ? ( <>
diff --git a/apps/web/src/components/chat/MermaidDiagram.tsx b/apps/web/src/components/chat/MermaidDiagram.tsx index dd03bdc4ea108048016ee80ecba3a45e48dfea6f..d7e36dac8f0454f6a8aa7404adb658d68c104f1d 100644 --- a/apps/web/src/components/chat/MermaidDiagram.tsx +++ b/apps/web/src/components/chat/MermaidDiagram.tsx @@ -47,13 +47,20 @@ function sanitizeMermaidSvg(svg: string): string { data.attrValue = data.attrValue.replace(REMOTE_CSS_URL, "none"); }); } - return purifier.sanitize(svg, { + const sanitized = purifier.sanitize(svg, { ADD_TAGS: ["foreignObject"], HTML_INTEGRATION_POINTS: { foreignobject: true }, FORBID_ATTR: ["href", "xlink:href", "src", "srcset"], FORBID_TAGS: ["a", "img", "image", "script"], USE_PROFILES: { svg: true, svgFilters: true, html: true }, }); + const element = new DOMParser().parseFromString(sanitized, "image/svg+xml").documentElement; + const viewBox = element.getAttribute("viewBox")?.trim().split(/\s+/).map(Number); + if (viewBox?.length === 4 && viewBox.every(Number.isFinite)) { + element.setAttribute("width", String(viewBox[2])); + element.setAttribute("height", String(viewBox[3])); + } + return new XMLSerializer().serializeToString(element); } // Mermaid also lazy-loads diagram chunks inside render(); losing the network @@ -145,11 +152,6 @@ let expandedImageUrl: string | null = null; function mermaidImageUrl(svg: string): string { const svgDocument = new DOMParser().parseFromString(svg, "image/svg+xml"); const element = svgDocument.documentElement; - const viewBox = element.getAttribute("viewBox")?.trim().split(/\s+/).map(Number); - if (viewBox?.length === 4 && viewBox.every(Number.isFinite)) { - element.setAttribute("width", String(viewBox[2])); - element.setAttribute("height", String(viewBox[3])); - } element.setAttribute("xmlns", "http://www.w3.org/2000/svg"); element.style.maxWidth = "none"; element.style.backgroundColor = getComputedStyle(document.body).backgroundColor; diff --git a/apps/web/src/components/chat/MessagesTimeline.tsx b/apps/web/src/components/chat/MessagesTimeline.tsx index e8cfadc74b60de79a4192d6851d572adeaab61fa..7c33032f909d02366ee1454ff1fa30d035627cfb 100644 --- a/apps/web/src/components/chat/MessagesTimeline.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.tsx @@ -1582,7 +1582,7 @@ const ConversationTimeline = memo(function ConversationTimeline({ const renderItem = useCallback( ({ item }: { item: MessagesTimelineRow }) => (
-
+
@@ -2836,7 +2836,7 @@ function AssistantTimelineRow({ row }: { row: Extract -
+
The Knife
+
) : null @@ -5488,6 +5491,7 @@ const SimpleWorkEntryRow = memo(function SimpleWorkEntryRow(props: WorkEntryRowP function WorkEntryLogRow(props: WorkEntryRowProps) { const { workEntry, workspaceRoot, displayLabel } = props; const ctx = use(TimelineRowCtx); + const { isWorking, latestRunId } = use(TimelineRowActivityCtx); const { threadRef, onImageExpand, timestampFormat } = ctx; const { retryableWorkspacePreparationRunIds, onRetryWorkspacePreparation } = ctx; const threadTarget = useThreadReadTarget(workEntry, ctx.activeThreadEnvironmentId); @@ -5582,6 +5586,11 @@ function WorkEntryLogRow(props: WorkEntryRowProps) { !showWarningIndicator && showFailedIndicator && (workEntrySignalsSevereFailure(workEntry) || !workLogEntryIsToolLike(workEntry)); + const active = + isWorking && + workEntry.runId === latestRunId && + workEntry.toolLifecycleStatus === "inProgress" && + !showFailedIndicator; const entryIconName = showWarningIndicator || showDestructiveRowStyle ? "circle-alert" : workEntryIconName(workEntry); const entryToolIcon = @@ -5675,17 +5684,21 @@ function WorkEntryLogRow(props: WorkEntryRowProps) { ? "text-destructive" : showFailedIndicator ? failedToolIconClassName - : workEntry.tone === "tool" - ? "text-icon-muted" - : iconConfig.className, + : active + ? "text-(--activity-foreground)" + : workEntry.tone === "tool" + ? "text-icon-muted" + : iconConfig.className, ); const headingClass = showWarningIndicator ? "font-medium text-warning" : showDestructiveRowStyle ? "font-medium text-destructive" - : workLogEntryIsToolLike(workEntry) - ? "text-secondary-label" - : "text-foreground/80"; + : active + ? "text-(--activity-foreground)" + : workLogEntryIsToolLike(workEntry) + ? "text-secondary-label" + : "text-foreground/80"; const threadLabel = isReasoning ? null : threadReadLabel(previewText, threadTarget); const accessiblePreview = [threadLabel?.text ?? previewText, answerPreview] .filter(Boolean) @@ -5724,7 +5737,7 @@ function WorkEntryLogRow(props: WorkEntryRowProps) { icon={entryToolIcon} fallbackName={entryIconName} className="block size-4 shrink-0 stroke-2" - muted + muted={!active} /> } diff --git a/apps/web/src/components/chat/composerEmojiSearch.test.ts b/apps/web/src/components/chat/composerEmojiSearch.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3826d04b3667739758330721e98998d0202d5cae --- /dev/null +++ b/apps/web/src/components/chat/composerEmojiSearch.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from "vite-plus/test"; + +import { searchComposerEmoji } from "./composerEmojiSearch"; + +describe("composer emoji search", () => { + it("puts the exact shortcode ahead of longer matching names", () => { + const matches = searchComposerEmoji("dizzy"); + expect(matches[0]).toMatchObject({ type: "emoji", emoji: "💫", label: ":dizzy:" }); + expect(matches.some((entry) => entry.label === ":dizzy_face:")).toBe(true); + }); + + it("finds canonical aliases, tags, descriptions, and multi-codepoint emoji", () => { + expect(searchComposerEmoji("+1")[0]).toMatchObject({ emoji: "👍", label: ":+1:" }); + expect(searchComposerEmoji("happy").length).toBeGreaterThan(0); + expect(searchComposerEmoji("rainbow_flag")[0]).toMatchObject({ emoji: "🏳️‍🌈" }); + expect( + searchComposerEmoji("scientist").some((entry) => entry.label === ":woman_scientist:"), + ).toBe(true); + }); + + it("normalizes uppercase, caps broad searches, and keeps emoji results unique", () => { + const matches = searchComposerEmoji("a"); + expect(matches).toHaveLength(30); + expect(new Set(matches.map((entry) => entry.id)).size).toBe(matches.length); + expect(searchComposerEmoji("DIZZY")).toEqual(searchComposerEmoji("dizzy")); + expect(searchComposerEmoji("")).toEqual([]); + expect(searchComposerEmoji("no_such_emoji_999")).toEqual([]); + }); +}); diff --git a/apps/web/src/components/chat/composerEmojiSearch.ts b/apps/web/src/components/chat/composerEmojiSearch.ts new file mode 100644 index 0000000000000000000000000000000000000000..4820a4bcc7b4c40de7566334998129c27bf97d4b --- /dev/null +++ b/apps/web/src/components/chat/composerEmojiSearch.ts @@ -0,0 +1,40 @@ +import { gemoji } from "gemoji"; + +import type { ComposerCommandItem } from "./ComposerCommandMenu"; + +export function searchComposerEmoji(query: string): ComposerCommandItem[] { + const normalized = query.toLowerCase(); + if (!normalized) return []; + + return gemoji + .flatMap((entry) => { + const name = + entry.names.find((name) => name === normalized) ?? + entry.names.find((name) => name.startsWith(normalized)) ?? + entry.names.find((name) => name.includes(normalized)); + const rank = name + ? name === normalized + ? 0 + : name.startsWith(normalized) + ? 1 + : 2 + : entry.tags.some((tag) => tag.includes(normalized)) + ? 3 + : entry.description.toLowerCase().includes(normalized.replaceAll("_", " ")) + ? 4 + : null; + if (rank === null) return []; + + return [{ entry, name: name ?? entry.names[0]!, rank }]; + }) + .toSorted((a, b) => a.rank - b.rank || a.name.localeCompare(b.name)) + .slice(0, 30) + .map(({ entry, name }) => ({ + id: `emoji:${entry.emoji}`, + type: "emoji", + emoji: entry.emoji, + query: normalized, + label: `:${name}:`, + description: entry.description, + })); +} diff --git a/apps/web/src/components/chat/composerMenuHighlight.test.ts b/apps/web/src/components/chat/composerMenuHighlight.test.ts index 74768d906878134e24c8c9684160c3aa947df8a8..d5a52bb10844eb9049aff64f1807408606baf31e 100644 --- a/apps/web/src/components/chat/composerMenuHighlight.test.ts +++ b/apps/web/src/components/chat/composerMenuHighlight.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vite-plus/test"; -import { resolveComposerMenuActiveItemId } from "./composerMenuHighlight"; +import { composerEmojiKeyAction, resolveComposerMenuActiveItemId } from "./composerMenuHighlight"; describe("resolveComposerMenuActiveItemId", () => { const items = [{ id: "top" }, { id: "second" }, { id: "third" }] as const; @@ -66,3 +66,41 @@ describe("resolveComposerMenuActiveItemId", () => { ).toBe("new-result"); }); }); + +describe("emoji autocomplete keys", () => { + const key = (key: string, overrides: Partial = {}) => ({ + key, + shiftKey: false, + altKey: false, + metaKey: false, + ctrlKey: false, + isComposing: false, + keyCode: 0, + ...overrides, + }); + + it.each([ + ["Enter", "select"], + ["Tab", "select"], + ["ArrowDown", "next"], + ["ArrowUp", "previous"], + ["Escape", "dismiss"], + ] as const)("claims %s without allowing submission or moving editor focus", (input, action) => + expect(composerEmojiKeyAction(key(input))).toBe(action), + ); + + it("leaves newline, focus navigation, send chords, and ordinary typing alone", () => { + expect(composerEmojiKeyAction(key("Enter", { shiftKey: true }))).toBeNull(); + expect(composerEmojiKeyAction(key("Tab", { shiftKey: true }))).toBeNull(); + expect(composerEmojiKeyAction(key("Enter", { metaKey: true }))).toBeNull(); + expect(composerEmojiKeyAction(key("Enter", { ctrlKey: true }))).toBeNull(); + expect(composerEmojiKeyAction(key("z"))).toBeNull(); + }); + + it("never selects or dismisses during IME composition", () => { + for (const input of ["Enter", "Tab", "ArrowDown", "ArrowUp", "Escape"]) { + expect(composerEmojiKeyAction(key(input, { isComposing: true }))).toBeNull(); + expect(composerEmojiKeyAction(key(input, { keyCode: 229 }))).toBeNull(); + } + }); +}); diff --git a/apps/web/src/components/chat/composerMenuHighlight.ts b/apps/web/src/components/chat/composerMenuHighlight.ts index 3cc3d4324fc9885d0a1c72be88d36beb44e59ce6..90485cfe7c14ac65005ded7f79dc72917bb768d3 100644 --- a/apps/web/src/components/chat/composerMenuHighlight.ts +++ b/apps/web/src/components/chat/composerMenuHighlight.ts @@ -18,3 +18,18 @@ export function resolveComposerMenuActiveItemId(input: { return input.items[0]?.id ?? null; } + +export function composerEmojiKeyAction( + event: Pick< + KeyboardEvent, + "key" | "shiftKey" | "altKey" | "metaKey" | "ctrlKey" | "isComposing" | "keyCode" + >, +): "select" | "next" | "previous" | "dismiss" | null { + if (event.isComposing || event.keyCode === 229) return null; + if (event.key === "Escape") return "dismiss"; + if (event.shiftKey || event.altKey || event.metaKey || event.ctrlKey) return null; + if (event.key === "Enter" || event.key === "Tab") return "select"; + if (event.key === "ArrowDown") return "next"; + if (event.key === "ArrowUp") return "previous"; + return null; +} diff --git a/apps/web/src/components/chat/useComposerTriggerState.test.tsx b/apps/web/src/components/chat/useComposerTriggerState.test.tsx index 6daf88bfbd679e16e383eee4d3375fb19fa113bb..f99870cb7e5b09f99d5dfea53cddebf985e6db2f 100644 --- a/apps/web/src/components/chat/useComposerTriggerState.test.tsx +++ b/apps/web/src/components/chat/useComposerTriggerState.test.tsx @@ -133,7 +133,7 @@ describe("composer suggestion dismissal", () => { expect(composer.resolveTrigger(candidate)).toEqual(candidate); }); - it.each(["/plan", "$skill", "#123"])("also dismisses %s suggestions", async (text) => { + it.each(["/plan", "$skill", "#123", ":dizzy"])("also dismisses %s suggestions", async (text) => { await updatePrompt(text); await act(() => composer.dismissTrigger(composer.trigger)); await updatePrompt(`${text}x`); diff --git a/apps/web/src/components/composerCodeBlockHighlight.test.ts b/apps/web/src/components/composerCodeBlockHighlight.test.ts index bd765dbd7b4428025ddee1a59d37feab5062c8a0..4faf1ea5bac83c36da53443a0edcc531141c711d 100644 --- a/apps/web/src/components/composerCodeBlockHighlight.test.ts +++ b/apps/web/src/components/composerCodeBlockHighlight.test.ts @@ -1,152 +1,100 @@ -import { Editor } from "@tiptap/core"; -import type { EditorView } from "@tiptap/pm/view"; -import StarterKit from "@tiptap/starter-kit"; +// @vitest-environment jsdom + +import { StateEffect } from "@codemirror/state"; +import { EditorView } from "@codemirror/view"; import { afterEach, describe, expect, it, vi } from "vite-plus/test"; -import { ComposerCodeBlockExtension } from "~/composer-rich-text-doc"; -import type { DiffThemeName } from "~/lib/diffRendering"; -import { getSyntaxHighlighterPromise } from "~/lib/syntaxHighlighting"; +const tokenization = vi.hoisted(() => { + let resolve: (value: { + codeToTokens: (code: string) => { tokens: Array> }; + }) => void; + const ready = new Promise<{ + codeToTokens: (code: string) => { tokens: Array> }; + }>((done) => { + resolve = done; + }); + return { ready, resolve: (value: Parameters[0]) => resolve(value) }; +}); +vi.mock("~/lib/syntaxHighlighting", () => ({ + getSyntaxHighlighterPromise: () => tokenization.ready, +})); -import { - composerCodeBlockHighlight, - MAX_HIGHLIGHTED_CODE_BLOCK_LENGTH, - shouldHighlightCodeBlock, - tokenizeBlock, -} from "./composerCodeBlockHighlight"; +import { createComposerMarkdownEditor } from "./composerMarkdownEditor"; +import { composerCodeBlocks, composerCodeBlockHighlight } from "./composerCodeBlockHighlight"; +import type { ComposerPromptEditorProps } from "./ComposerPromptEditor"; -vi.mock("~/lib/syntaxHighlighting", () => ({ getSyntaxHighlighterPromise: vi.fn() })); - -const THEME = "github-dark" as DiffThemeName; - -/** - * Stands in for the Shiki highlighter so the offset arithmetic can be checked - * without loading a real grammar. Splits each line into whitespace-delimited - * tokens, which is enough shape for the flattening logic under test. - */ -function fakeHighlighter(colorFor: (content: string) => string | undefined) { - return { - codeToTokens(code: string) { - return { - tokens: code.split(/\r?\n/).map((line) => - line - .split(/(\s+)/) - .filter((part) => part.length > 0) - .map((content) => ({ content, color: colorFor(content) })), - ), - }; - }, - } as unknown as Parameters[0]; +let editor: ReturnType; +afterEach(() => { + editor?.destroy(); + editor?.dom.remove(); +}); +function mount(value: string) { + const props: ComposerPromptEditorProps = { + value, + cursor: value.length, + contextRecords: new Map(), + skills: [], + disabled: false, + richTextEnabled: true, + placeholder: "Message", + editorRef: { current: null }, + onChange: () => {}, + onPaste: () => {}, + }; + editor = createComposerMarkdownEditor({ + props: () => props, + mountChip: () => {}, + unmountChip: () => {}, + }); + document.body.append(editor.dom); + return editor; } -describe("composer code block highlighting", () => { - it("maps token offsets to positions within the block text", () => { - const highlighter = fakeHighlighter((content) => (content === "const" ? "#ff0000" : undefined)); - - const decorations = tokenizeBlock(highlighter, "const answer = 42", "ts", THEME); - - expect(decorations).toEqual([{ from: 0, to: 5, color: "#ff0000" }]); - }); - - it("accounts for the newline between lines", () => { - const highlighter = fakeHighlighter((content) => (content === "two" ? "#00ff00" : undefined)); - - const decorations = tokenizeBlock(highlighter, "one\ntwo", "ts", THEME); - - // "one" is 3 characters, then the newline, so "two" starts at 4. - expect(decorations).toEqual([{ from: 4, to: 7, color: "#00ff00" }]); - }); - - it("accounts for both characters of a CRLF line break", () => { - const highlighter = fakeHighlighter((content) => (content === "two" ? "#00ff00" : undefined)); - - const decorations = tokenizeBlock(highlighter, "one\r\ntwo", "ts", THEME); - - expect(decorations).toEqual([{ from: 5, to: 8, color: "#00ff00" }]); - }); - - it("skips whitespace-only tokens so indentation is not decorated", () => { - const highlighter = fakeHighlighter(() => "#0000ff"); - - const decorations = tokenizeBlock(highlighter, " indented", "ts", THEME); - - expect(decorations).toEqual([{ from: 2, to: 10, color: "#0000ff" }]); - }); - - it("falls back to plain text when the grammar throws", () => { - const throwing = { - codeToTokens() { - throw new Error("unsupported language"); - }, - } as unknown as Parameters[0]; - - expect(tokenizeBlock(throwing, "const answer = 42", "nope", THEME)).toEqual([]); - }); +it("lands an empty fence's language selection in its body rather than inside the info string", () => { + mount("```ts\n\n```"); + const block = composerCodeBlocks(editor.view.state)[0]!; + expect(editor.view.state.doc.lineAt(block.codeTo).number).toBe(2); + editor.view.dispatch({ + changes: { from: block.infoFrom, to: block.infoTo, insert: "python" }, + selection: { anchor: block.codeTo + 4 }, + }); + expect(editor.getValue()).toBe("```python\n\n```"); + expect(editor.view.state.doc.lineAt(editor.view.state.selection.main.head).number).toBe(2); }); -describe("the highlighting size cap", () => { - // Each keystroke re-tokenizes the whole fence on the main thread; past a - // few hundred lines that stalls typing, so large fences stay plain. - it("highlights a fence up to the cap", () => { - expect(shouldHighlightCodeBlock("x".repeat(MAX_HIGHLIGHTED_CODE_BLOCK_LENGTH))).toBe(true); - }); - - it("leaves a fence past the cap plain", () => { - expect(shouldHighlightCodeBlock("x".repeat(MAX_HIGHLIGHTED_CODE_BLOCK_LENGTH + 1))).toBe(false); - }); +it("keeps the trailing line of an unfinished fence as part of its code body", () => { + mount("```ts\nunfinished\n"); + const block = composerCodeBlocks(editor.view.state)[0]!; + expect(block.code).toBe("unfinished\n"); + expect(block.codeTo).toBe(editor.view.state.doc.length); }); -describe("a highlighter that fails to load", () => { - afterEach(() => { - vi.unstubAllGlobals(); - }); - - /** - * Shiki can fail to initialize at all. The blocks it could not reach stay - * plain, the ones it could are still painted, and nothing is left rejected. - */ - it("still repaints the blocks whose highlighter loaded", async () => { - vi.mocked(getSyntaxHighlighterPromise).mockImplementation((language) => - language === "ts" - ? Promise.resolve(fakeHighlighter(() => "#ff0000")) - : Promise.reject(new Error("Shiki failed to initialize")), - ); - const editor = new Editor({ - extensions: [ - StarterKit.configure({ codeBlock: false, trailingNode: false }), - ComposerCodeBlockExtension, - composerCodeBlockHighlight({ resolveTheme: () => THEME }), - ], - content: { - type: "doc", - content: [ - { type: "codeBlock", attrs: { language: "ts" }, content: [{ type: "text", text: "a" }] }, - { type: "codeBlock", attrs: { language: "py" }, content: [{ type: "text", text: "b" }] }, - ], - }, - }); - // The plugin watches for theme changes; the unit suite has no DOM. - vi.stubGlobal("document", { documentElement: {} }); - vi.stubGlobal( - "MutationObserver", - class { - observe() {} - disconnect() {} - }, - ); - // ProseMirror names each plugin after its key, though it does not type it. - const plugin = editor.extensionManager.plugins.find((candidate) => - (candidate as unknown as { key: string }).key.startsWith("composerCodeBlockHighlight"), - ); - const repainted = new Promise((resolve) => { - const view = { - get state() { - return editor.state; - }, - dispatch: () => resolve(), - } as unknown as EditorView; - plugin?.spec.view?.(view); +describe("asynchronous code highlighting", () => { + it("paints current text after initialization and never reintroduces an edited-away tokenization", async () => { + mount("```ts\nold\n```"); + editor.setValue("```ts\nnew\n```"); + const settled = new Promise((resolve) => { + editor.view.dispatch({ + effects: StateEffect.appendConfig.of( + EditorView.updateListener.of(() => { + if ((editor.view.plugin(composerCodeBlockHighlight)?.decorations.size ?? 0) > 0) + resolve(); + }), + ), + }); }); - - await expect(repainted).resolves.toBeUndefined(); + const codeToTokens = vi.fn((code: string) => ({ + tokens: [[{ content: code, color: "#123456" }]], + })); + tokenization.resolve({ codeToTokens }); + await settled; + expect(codeToTokens.mock.calls.map(([code]) => code)).not.toContain("old"); + expect(codeToTokens.mock.calls.map(([code]) => code)).toContain("new"); + expect(editor.getValue()).toBe("```ts\nnew\n```"); + expect( + [...editor.dom.querySelectorAll("span")].find( + (span) => span.style.color === "rgb(18, 52, 86)", + )?.textContent, + ).toBe("new"); }); }); diff --git a/apps/web/src/components/composerCodeBlockHighlight.ts b/apps/web/src/components/composerCodeBlockHighlight.ts index 68f024cb907a58a72ae60bc4ec846cfde4808bfc..b68921c300426dabac556bd1337cffd9eef433be 100644 --- a/apps/web/src/components/composerCodeBlockHighlight.ts +++ b/apps/web/src/components/composerCodeBlockHighlight.ts @@ -1,231 +1,155 @@ -import { Extension } from "@tiptap/core"; -import { type EditorState, Plugin, PluginKey } from "@tiptap/pm/state"; -import { Decoration, DecorationSet } from "@tiptap/pm/view"; -import type { Node as ProseMirrorNode } from "@tiptap/pm/model"; +import { syntaxTree } from "@codemirror/language"; +import { type EditorState, StateEffect } from "@codemirror/state"; +import { + Decoration, + type DecorationSet, + EditorView, + ViewPlugin, + type ViewUpdate, +} from "@codemirror/view"; -import type { DiffThemeName } from "~/lib/diffRendering"; import { languageOfInfoString } from "~/composer-code-languages"; +import { resolveDiffThemeName } from "~/lib/diffRendering"; import { getSyntaxHighlighterPromise } from "~/lib/syntaxHighlighting"; -interface HighlightedBlock { - /** Guards against repainting a block whose text and language are unchanged. */ - readonly signature: string; - readonly decorations: ReadonlyArray<{ from: number; to: number; color: string }>; -} - -const composerCodeBlockHighlightKey = new PluginKey("composerCodeBlockHighlight"); - -/** - * Past this many characters a fence is left plain. Any edit changes a block's - * signature, so each keystroke re-tokenizes the whole block synchronously on - * the main thread: a few milliseconds for a couple of hundred lines, but ~80ms - * at a thousand, which stalls typing. 20k characters is roughly 400–500 lines - * of ordinary code; a fence that shrinks back under it is highlighted again. - */ -export const MAX_HIGHLIGHTED_CODE_BLOCK_LENGTH = 20_000; - -export function shouldHighlightCodeBlock(code: string): boolean { - return code.length <= MAX_HIGHLIGHTED_CODE_BLOCK_LENGTH; -} -function blockSignature(node: ProseMirrorNode, theme: DiffThemeName): string { - // A separator that cannot occur in a language name keeps the parts distinct. - return [theme, String(node.attrs.language ?? ""), node.textContent].join("\u0000"); -} - -/** - * The composer's code blocks, which are always top-level: list items and - * quotes cannot hold one. Scanning only the top level keeps a keystroke in a - * long draft from walking every node in it. - */ -function collectCodeBlocks(state: EditorState): Array<{ node: ProseMirrorNode; pos: number }> { - const blocks: Array<{ node: ProseMirrorNode; pos: number }> = []; - state.doc.forEach((node, pos) => { - if (node.type.name === "codeBlock") blocks.push({ node, pos }); +export function composerCodeBlocks(state: EditorState) { + const blocks: Array<{ + from: number; + infoFrom: number; + infoTo: number; + info: string; + codeFrom: number; + codeTo: number; + code: string; + }> = []; + syntaxTree(state).iterate({ + enter(node) { + if (node.name !== "FencedCode") return undefined; + const info = node.node.getChild("CodeInfo"); + const mark = node.node.getChild("CodeMark"); + if (!mark) return false; + const code = node.node.getChild("CodeText"); + const openingLine = state.doc.lineAt(node.from); + const bodyFrom = + openingLine.number < state.doc.lines + ? state.doc.line(openingLine.number + 1).from + : openingLine.to; + const codeFrom = code?.from ?? bodyFrom; + const codeTo = + code && + node.node.getChildren("CodeMark").length > 1 && + state.sliceDoc(code.to - 1, code.to) === "\n" + ? Math.max(codeFrom, code.to - 1) + : (code?.to ?? bodyFrom); + blocks.push({ + from: node.from, + infoFrom: info?.from ?? mark.to, + infoTo: info?.to ?? mark.to, + info: info ? state.sliceDoc(info.from, info.to) : "", + codeFrom, + codeTo, + code: state.sliceDoc(codeFrom, codeTo), + }); + return false; + }, }); return blocks; } -/** - * Highlights composer code blocks with the same Shiki instance the chat view - * uses, painted as inline decorations so the text nodes stay editable. - * - * Highlighting is asynchronous and per block: a keystroke re-tokenizes only the - * block that changed, and only after its highlighter has resolved. Blocks whose - * text and language are unchanged reuse their previous decorations. - */ -export function composerCodeBlockHighlight(options: { - resolveTheme: () => DiffThemeName; -}): Extension { - return Extension.create({ - name: "composerCodeBlockHighlight", +export const composerCodeBlockHighlight = ViewPlugin.fromClass( + class { + decorations: DecorationSet = Decoration.none; + readonly cache = new Map(); + readonly repaint = StateEffect.define(); + readonly observer: MutationObserver; + disposed = false; + live = new Set(); + doc: EditorState["doc"] | null = null; + tree: ReturnType | null = null; + theme = ""; - addProseMirrorPlugins() { - // Every keystroke in a code block mints a new signature, so each scan - // drops the signatures the document no longer holds. The cache is then - // bounded by the document itself, and no block it holds is ever evicted. - const cache = new Map(); - // The latest scan's signatures, so a tokenize that resolves after its - // block was edited away does not put it back. - let live = new Set(); - - return [ - new Plugin({ - key: composerCodeBlockHighlightKey, - - state: { - init: () => DecorationSet.empty, - apply(transaction, value, _oldState, newState) { - if (!transaction.docChanged && !transaction.getMeta(composerCodeBlockHighlightKey)) { - return value.map(transaction.mapping, transaction.doc); - } - return buildDecorations(newState, cache, options.resolveTheme()); - }, - }, - - props: { - decorations(state) { - return composerCodeBlockHighlightKey.getState(state); - }, - }, - - view(view) { - let disposed = false; - let paintedTheme = options.resolveTheme(); - let scannedDoc: ProseMirrorNode | null = null; - - /** - * Tokenizes any block missing from the cache, then repaints once. - * Returning early when nothing is pending is what stops the - * dispatch below from re-triggering this on its own update. - */ - const refresh = () => { - const theme = options.resolveTheme(); - const themeChanged = theme !== paintedTheme; - paintedTheme = theme; - // A selection change cannot alter what needs tokenizing, and - // building a signature means concatenating every block's text. - if (!themeChanged && view.state.doc === scannedDoc) return; - scannedDoc = view.state.doc; - const blocks = collectCodeBlocks(view.state); - live = new Set(blocks.map(({ node }) => blockSignature(node, theme))); - for (const signature of cache.keys()) { - if (!live.has(signature)) cache.delete(signature); - } - const pending = blocks.filter( - ({ node }) => - shouldHighlightCodeBlock(node.textContent) && - !cache.has(blockSignature(node, theme)), - ); - if (pending.length === 0) { - // A theme switch keeps every signature but changes which one - // applies, so the painted decorations still have to be rebuilt. - if (themeChanged) { - view.dispatch(view.state.tr.setMeta(composerCodeBlockHighlightKey, true)); - } - return; - } - - // Settled rather than all: a block whose highlighter fails to - // load stays plain, and the others are still painted. - void Promise.allSettled( - pending.map(async ({ node }) => { - // The stored info string keeps everything after the language - // (`js title=x`); Shiki wants only the name. - const language = - languageOfInfoString(String(node.attrs.language ?? "")) || "text"; - const signature = blockSignature(node, theme); - const highlighter = await getSyntaxHighlighterPromise(language); - if (disposed || cache.has(signature) || !live.has(signature)) return; - cache.set(signature, { - signature, - decorations: tokenizeBlock(highlighter, node.textContent, language, theme), + constructor(readonly view: EditorView) { + this.observer = new MutationObserver(() => view.dispatch({ effects: this.repaint.of(null) })); + this.observer.observe(document.documentElement, { + attributeFilter: ["class", "data-theme-id"], + }); + this.refresh(); + } + update(update: ViewUpdate) { + if ( + update.docChanged || + syntaxTree(update.state) !== this.tree || + update.transactions.some((transaction) => + transaction.effects.some((effect) => effect.is(this.repaint)), + ) + ) + this.refresh(); + } + refresh() { + const state = this.view.state; + const theme = resolveDiffThemeName( + document.documentElement.classList.contains("dark") ? "dark" : "light", + ); + const blocks = composerCodeBlocks(state); + const signature = (block: (typeof blocks)[number]) => + `${theme}\u0000${block.info}\u0000${block.code}`; + this.live = new Set(blocks.map(signature)); + for (const key of this.cache.keys()) if (!this.live.has(key)) this.cache.delete(key); + this.decorations = Decoration.set( + blocks.flatMap((block) => + (this.cache.get(signature(block)) ?? []).map((span) => + Decoration.mark({ attributes: { style: `color: ${span.color}` } }).range( + block.codeFrom + span.from, + block.codeFrom + span.to, + ), + ), + ), + true, + ); + if (this.doc === state.doc && this.tree === syntaxTree(state) && this.theme === theme) return; + this.doc = state.doc; + this.tree = syntaxTree(state); + this.theme = theme; + const pending = blocks.filter( + (block) => block.code.length <= 20_000 && !this.cache.has(signature(block)), + ); + if (pending.length === 0) return; + void Promise.allSettled( + pending.map(async (block) => { + const key = signature(block); + const language = languageOfInfoString(block.info) || "text"; + const highlighter = await getSyntaxHighlighterPromise(language); + if (this.disposed || this.cache.has(key) || !this.live.has(key)) return; + const spans: Array<{ from: number; to: number; color: string }> = []; + try { + let offset = 0; + for (const [index, line] of highlighter + .codeToTokens(block.code, { lang: language, theme }) + .tokens.entries()) { + if (index > 0) offset += block.code.startsWith("\r\n", offset) ? 2 : 1; + for (const token of line) { + if (token.color && token.content.trim()) + spans.push({ + from: offset, + to: offset + token.content.length, + color: token.color, }); - }), - ).then(() => { - if (disposed) return; - view.dispatch(view.state.tr.setMeta(composerCodeBlockHighlightKey, true)); - }); - }; - - refresh(); - // The theme lives on , outside the editor, so nothing would - // otherwise tell the view a repaint is due. - const themeObserver = new MutationObserver(refresh); - themeObserver.observe(document.documentElement, { - attributeFilter: ["class"], - }); - - return { - update: refresh, - destroy() { - disposed = true; - themeObserver.disconnect(); - }, - }; - }, + offset += token.content.length; + } + } + } catch { + /* Unsupported languages retain source text. */ + } + this.cache.set(key, spans); }), - ]; - }, - }); -} - -type Highlighter = Awaited>; - -/** Flattens Shiki's line/token structure into offsets within the block's text. */ -export function tokenizeBlock( - highlighter: Highlighter, - code: string, - language: string, - theme: DiffThemeName, -): ReadonlyArray<{ from: number; to: number; color: string }> { - let tokens; - try { - tokens = highlighter.codeToTokens(code, { lang: language, theme }).tokens; - } catch { - // An unsupported language should read as plain text, not break the editor. - return []; - } - - const decorations: Array<{ from: number; to: number; color: string }> = []; - let offset = 0; - for (const [lineIndex, line] of tokens.entries()) { - // The separator between lines, which Shiki drops; CRLF is two characters. - if (lineIndex > 0) offset += code.startsWith("\r\n", offset) ? 2 : 1; - for (const token of line) { - const length = token.content.length; - if (token.color && token.content.trim()) { - decorations.push({ from: offset, to: offset + length, color: token.color }); - } - offset += length; + ).then(() => { + if (!this.disposed) this.view.dispatch({ effects: this.repaint.of(null) }); + }); } - } - return decorations; -} - -function buildDecorations( - state: EditorState, - cache: Map, - theme: DiffThemeName, -): DecorationSet { - const decorations: Decoration[] = []; - for (const { node, pos } of collectCodeBlocks(state)) { - if (!shouldHighlightCodeBlock(node.textContent)) continue; - const highlighted = cache.get(blockSignature(node, theme)); - if (!highlighted) continue; - // Token offsets index the block's text, which lines up with document - // positions only because `codeBlock` is `text*` with no marks — one - // unmarked text node, so `content.size === textContent.length`. Allowing - // marks or hard breaks in the code block would desync these silently. - if (node.content.size !== node.textContent.length) continue; - // +1 steps past the code block's opening token into its text. - const start = pos + 1; - for (const decoration of highlighted.decorations) { - decorations.push( - Decoration.inline(start + decoration.from, start + decoration.to, { - style: `color:${decoration.color}`, - }), - ); + destroy() { + this.disposed = true; + this.observer.disconnect(); } - } - return DecorationSet.create(state.doc, decorations); -} + }, + { decorations: (plugin) => plugin.decorations }, +); diff --git a/apps/web/src/components/composerMarkdownEditor.test.ts b/apps/web/src/components/composerMarkdownEditor.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..6d3aa31842583991a6323a550a2537c2c7aa0162 --- /dev/null +++ b/apps/web/src/components/composerMarkdownEditor.test.ts @@ -0,0 +1,412 @@ +// @vitest-environment jsdom + +import { undo, redo } from "@codemirror/commands"; +import { Transaction } from "@codemirror/state"; +import { ComposerContextId, EnvironmentId, MessageId, ThreadId } from "@t3tools/contracts"; +import { serializeAssistantCitation } from "@t3tools/shared/assistantCitations"; +import { serializeComposerFileLink } from "@t3tools/shared/composerTrigger"; +import { formatComposerContextReference } from "@t3tools/shared/composerContextReferences"; +import { + COMPOSER_CONTEXT_CLIPBOARD_MIME, + encodeComposerContextFragment, +} from "@t3tools/shared/composerContextClipboard"; +import { DEFAULT_RESOLVED_KEYBINDINGS } from "@t3tools/shared/keybindings"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; + +import { detectComposerTrigger, composerSubmissionIntentForKey } from "~/composer-logic"; +import { composerEmojiKeyAction } from "./chat/composerMenuHighlight"; +import { + composerSuggestionsSuppressed, + composerTokens, + createComposerMarkdownEditor, +} from "./composerMarkdownEditor"; +import type { ComposerPromptEditorProps } from "./ComposerPromptEditor"; + +let editor: ReturnType; +let props: ComposerPromptEditorProps; +let sends: ReturnType void>>; + +beforeEach(() => { + Object.defineProperty(Range.prototype, "getClientRects", { configurable: true, value: () => [] }); + Object.defineProperty(Range.prototype, "getBoundingClientRect", { + configurable: true, + value: () => new DOMRect(), + }); + props = { + value: "", + cursor: 0, + contextRecords: new Map(), + skills: [], + disabled: false, + placeholder: "Message", + editorRef: { current: null }, + onPaste: () => {}, + onChange: (value, cursor) => { + props = { ...props, value, cursor }; + }, + }; + sends = vi.fn<(intent: string) => void>(); +}); +afterEach(() => { + editor?.destroy(); + editor?.dom.remove(); +}); + +function mount(value = "", overrides: Partial = {}) { + props = { ...props, ...overrides, value, cursor: value.length }; + editor = createComposerMarkdownEditor({ + props: () => props, + mountChip: () => {}, + unmountChip: () => {}, + }); + document.body.append(editor.dom); + editor.focus(); + return editor; +} +function key(key: string, init: KeyboardEventInit = {}) { + const event = new KeyboardEvent("keydown", { key, bubbles: true, cancelable: true, ...init }); + editor.view.contentDOM.dispatchEvent(event); + return event; +} +function submission(key: string, event: KeyboardEvent) { + const snapshot = editor.snapshot(); + const trigger = composerSuggestionsSuppressed(editor.view, props.literalText ?? false) + ? null + : detectComposerTrigger(snapshot.value, snapshot.expandedCursor); + if (trigger?.kind === "emoji" && composerEmojiKeyAction(event) === "select") { + editor.replaceText("💫", { from: trigger.rangeStart, to: trigger.rangeEnd }); + return true; + } + const intent = composerSubmissionIntentForKey({ + event, + keybindings: DEFAULT_RESOLVED_KEYBINDINGS, + platform: "Linux", + isMobileViewport: false, + isDraftThread: false, + prompt: snapshot.value, + }); + if (intent) { + sends(intent); + return true; + } + return false; +} + +describe("CodeMirror composer behavior", () => { + it("keeps the preceding paragraph plain while starting a dash list", () => { + const intro = "tui up. this is better. my overall points"; + mount(intro, { richTextEnabled: true }); + key("Enter", { shiftKey: true }); + editor.view.dispatch({ ...editor.view.state.replaceSelection("-"), userEvent: "input" }); + + const line = editor.dom.querySelector(".cm-line")!; + const text = line.firstElementChild ?? line; + expect(getComputedStyle(text).textDecoration).not.toContain("underline"); + expect(["bold", "700"]).not.toContain(getComputedStyle(text).fontWeight); + expect(editor.getValue()).toBe(`${intro}\n-`); + + editor.view.dispatch({ + ...editor.view.state.replaceSelection(" first point"), + userEvent: "input", + }); + key("Enter", { shiftKey: true }); + expect(editor.getValue()).toBe(`${intro}\n- first point\n- `); + }); + + it("keeps explicit hash headings formatted", () => { + const value = "# An explicit heading\n\nPlain text"; + mount(value, { richTextEnabled: true }); + expect(editor.dom.querySelector(".cm-lp-h1")?.textContent).toBe("An explicit heading"); + expect(editor.getValue()).toBe(value); + }); + + it.each(["-", "="])("formats an underline heading only after the third %s", (marker) => { + const intro = "A heading when the underline is deliberate"; + mount(`${intro}\n`, { richTextEnabled: true }); + + for (let count = 1; count <= 4; count++) { + editor.view.dispatch({ ...editor.view.state.replaceSelection(marker), userEvent: "input" }); + + const line = editor.dom.querySelector(".cm-line")!; + const text = line.firstElementChild ?? line; + const style = getComputedStyle(text); + expect(style.textDecoration.includes("underline")).toBe(count >= 3); + expect(["bold", "700"].includes(style.fontWeight)).toBe(count >= 3); + expect(editor.getValue()).toBe(`${intro}\n${marker.repeat(count)}`); + } + + editor.view.dispatch({ changes: { from: intro.length + 3, to: editor.view.state.doc.length } }); + const line = editor.dom.querySelector(".cm-line")!; + expect(getComputedStyle(line.firstElementChild ?? line).textDecoration).not.toContain( + "underline", + ); + expect(editor.getValue()).toBe(`${intro}\n${marker.repeat(2)}`); + }); + + it("claims emoji Enter and Tab, keeps a Unicode caret, and never submits", () => { + mount("before :dizzy", { onCommandKeyDown: submission }); + expect(key("Enter").defaultPrevented).toBe(true); + expect(editor.snapshot()).toMatchObject({ + value: "before 💫", + expandedCursor: "before 💫".length, + }); + expect(sends).not.toHaveBeenCalled(); + expect(undo(editor.view)).toBe(true); + expect(editor.getValue()).toBe("before :dizzy"); + expect(redo(editor.view)).toBe(true); + expect(editor.getValue()).toBe("before 💫"); + editor.setValue(":dizzy"); + editor.view.dispatch({ selection: { anchor: 6 } }); + expect(key("Tab").defaultPrevented).toBe(true); + expect(editor.getValue()).toBe("💫"); + expect(sends).not.toHaveBeenCalled(); + }); + + it("respects submission outside code and inserts newlines inside fences", () => { + mount("hello", { onCommandKeyDown: submission }); + key("Enter"); + expect(sends).toHaveBeenCalledTimes(1); + editor.setValue("```ts\nconst x = 1"); + editor.view.dispatch({ selection: { anchor: editor.view.state.doc.length } }); + expect(composerSuggestionsSuppressed(editor.view, false)).toBe(true); + key("Enter"); + expect(editor.getValue()).toContain("const x = 1\n"); + expect(sends).toHaveBeenCalledTimes(1); + }); + + it("keeps context source bytes, skips code tokens, and deletes an atomic mention in one key", () => { + const mention = serializeComposerFileLink("src/example.ts"); + mount(`${mention} after`); + const token = composerTokens(editor.view.state, false)[0]!; + expect(editor.getValue()).toBe(`${mention} after`); + expect(editor.dom.querySelectorAll('[data-composer-chip="true"]')).toHaveLength(1); + editor.view.dispatch({ selection: { anchor: token.end } }); + key("Backspace"); + expect(editor.getValue()).toBe(" after"); + undo(editor.view); + expect(editor.getValue()).toBe(`${mention} after`); + editor.setValue(`\` ${mention} \`\n\`\`\`\n${mention}\n\`\`\``); + expect(composerTokens(editor.view.state, false)).toEqual([]); + }); + + it("round-trips citation and skill context as actual atomic source ranges", () => { + const citation = serializeAssistantCitation({ + version: 1, + environmentId: EnvironmentId.make("env"), + threadId: ThreadId.make("thread"), + messageId: MessageId.make("message"), + text: "Quoted text", + start: 0, + end: 11, + prefix: "", + suffix: "", + }); + mount(`${citation} $browser `); + expect(composerTokens(editor.view.state, false).map((token) => token.type)).toEqual([ + "citation", + "skill", + ]); + expect(editor.getValue()).toBe(`${citation} $browser `); + props = { ...props, literalText: true }; + editor.configure(); + expect(composerTokens(editor.view.state, true)).toEqual([]); + expect(editor.getValue()).toBe(`${citation} $browser `); + expect(editor.dom.querySelector('[data-composer-chip="true"]')).toBeNull(); + }); + + it("suppresses suggestions and submission during real composition events", async () => { + const onChange = vi.fn(props.onChange); + mount(":dizzy", { onCommandKeyDown: submission, onChange }); + editor.view.contentDOM.dispatchEvent( + new CompositionEvent("compositionstart", { bubbles: true }), + ); + expect(onChange.mock.calls.at(-1)?.[3]).toBe(true); + key("Enter", { isComposing: true }); + expect(sends).not.toHaveBeenCalled(); + expect(editor.getValue()).toBe(":dizzy"); + editor.view.contentDOM.dispatchEvent(new CompositionEvent("compositionend", { bubbles: true })); + await Promise.resolve(); + expect(composerSuggestionsSuppressed(editor.view, false)).toBe(false); + }); + + it("lets native selection and copy shortcuts pass through readonly input", () => { + mount("readonly", { disabled: true }); + key("a", { ctrlKey: true }); + expect(editor.view.state.selection.main).toMatchObject({ from: 0, to: 8 }); + expect(key("c", { ctrlKey: true }).defaultPrevented).toBe(false); + }); + + it("routes PageDown to the timeline only at the editor's scroll boundary", () => { + const onPageScrollKeyDown = vi.fn(); + mount("line", { onPageScrollKeyDown }); + Object.defineProperties(editor.view.scrollDOM, { + clientHeight: { configurable: true, value: 100 }, + scrollHeight: { configurable: true, value: 300 }, + scrollTop: { configurable: true, writable: true, value: 0 }, + }); + key("PageDown"); + expect(onPageScrollKeyDown).not.toHaveBeenCalled(); + editor.view.scrollDOM.scrollTop = 200; + expect(key("PageDown").defaultPrevented).toBe(true); + expect(onPageScrollKeyDown).toHaveBeenCalledWith("PageDown"); + }); + + it("keeps readonly drafts copyable and permits only controlled replacement", () => { + mount("readonly", { disabled: true, onCommandKeyDown: submission }); + key("Enter"); + key("b", { ctrlKey: true }); + expect(editor.getValue()).toBe("readonly"); + expect(sends).not.toHaveBeenCalled(); + editor.view.dispatch({ + changes: { from: 0, to: 8, insert: "streamed" }, + annotations: Transaction.userEvent.of("t3.controlled"), + }); + expect(editor.getValue()).toBe("streamed"); + editor.view.dispatch({ selection: { anchor: 0, head: 8 } }); + expect(editor.view.state.selection.main.empty).toBe(false); + }); + + it("continues tasks and keeps the same document and history through preview changes", () => { + mount("- [ ] task", { richTextEnabled: true }); + key("Enter", { shiftKey: true }); + expect(editor.getValue()).toContain("\n- [ ] "); + const draft = editor.getValue(); + props = { ...props, richTextEnabled: false }; + editor.configure(); + expect(editor.getValue()).toBe(draft); + undo(editor.view); + expect(editor.getValue()).toBe("- [ ] task"); + }); +}); + +it("imports actual structured terminal clipboard records and rewrites their atomic references", () => { + const oldId = ComposerContextId.make("terminal-old"); + const newId = ComposerContextId.make("terminal-new"); + const text = formatComposerContextReference({ + kind: "terminal", + contextId: oldId, + label: "Build", + }); + const fragment = { + version: 1 as const, + source: { environmentId: EnvironmentId.make("env") }, + records: [ + { + version: 1 as const, + contextId: oldId, + kind: "terminal" as const, + label: "Build", + terminalId: "build", + terminalLabel: "Build", + lineStart: 1, + lineEnd: 2, + text: "build output", + }, + ], + }; + const records = new Map(); + mount("before ", { + importContextFragment: (incoming) => { + for (const record of incoming.records) records.set(newId, record); + return new Map([[oldId, newId]]); + }, + }); + const event = new Event("paste", { bubbles: true, cancelable: true }); + Object.defineProperty(event, "clipboardData", { + value: { + files: [], + getData: (format: string) => + format === "text/plain" + ? text + : format === COMPOSER_CONTEXT_CLIPBOARD_MIME + ? encodeComposerContextFragment(fragment) + : "", + }, + }); + editor.view.contentDOM.dispatchEvent(event); + expect(event.defaultPrevented).toBe(true); + expect(records.get(newId)).toEqual(fragment.records[0]); + expect(editor.snapshot().contextIds).toEqual([newId]); + expect(editor.getValue()).toBe( + `before ${formatComposerContextReference({ kind: "terminal", contextId: newId, label: "Build" })}`, + ); + undo(editor.view); + expect(editor.getValue()).toBe("before "); +}); + +it("keeps literal answers verbatim through formatting shortcuts, lists, and fenced text", () => { + mount("- item", { literalText: true }); + key("Enter", { shiftKey: true }); + expect(editor.getValue()).toBe("- item\n"); + editor.view.dispatch({ selection: { anchor: 0, head: 6 } }); + key("b", { ctrlKey: true }); + expect(editor.getValue()).toBe("- item\n"); +}); + +it.each([false, true])( + "continues fence indentation with Shift=%s and restores it with undo", + (shiftKey) => { + const source = "```ts\n nested()\n```"; + mount(source, { richTextEnabled: true, onCommandKeyDown: submission }); + const cursor = source.indexOf("\n```"); + editor.view.dispatch({ selection: { anchor: cursor } }); + expect(key("Enter", { shiftKey }).defaultPrevented).toBe(true); + expect(editor.getValue()).toBe("```ts\n nested()\n \n```"); + expect(editor.snapshot().expandedCursor).toBe(cursor + 3); + expect(sends).not.toHaveBeenCalled(); + expect(undo(editor.view)).toBe(true); + expect(editor.getValue()).toBe(source); + expect(editor.view.hasFocus).toBe(true); + }, +); + +it.each(["```", "~~~~"])( + "closes an unfinished %s fence after two blank lines and leaves prose", + (fence) => { + const source = `${fence}ts\n nested()\n \n `; + mount(source, { richTextEnabled: true, onCommandKeyDown: submission }); + expect(key("Enter").defaultPrevented).toBe(true); + expect(editor.getValue()).toBe(`${fence}ts\n nested()\n${fence}\n\n`); + expect(editor.snapshot().expandedCursor).toBe(editor.getValue().length); + expect(composerSuggestionsSuppressed(editor.view, false)).toBe(false); + expect(sends).not.toHaveBeenCalled(); + expect(undo(editor.view)).toBe(true); + expect(editor.getValue()).toBe(source); + }, +); + +it("leaves an already closed fence from its trailing blank body without consuming following prose", () => { + const source = "```ts\nx\n\n\n```\nfollowing"; + mount(source, { richTextEnabled: true, onCommandKeyDown: submission }); + editor.view.dispatch({ selection: { anchor: source.indexOf("\n```") } }); + key("Enter", { shiftKey: true }); + expect(editor.getValue()).toBe("```ts\nx\n```\n\n\nfollowing"); + expect(composerSuggestionsSuppressed(editor.view, false)).toBe(false); + expect(sends).not.toHaveBeenCalled(); + undo(editor.view); + expect(editor.getValue()).toBe(source); +}); + +it("treats a completed closing fence as the way back to prose, without scaffolding a second fence", () => { + const source = "```ts\n nested()\n```"; + mount(source, { richTextEnabled: true, onCommandKeyDown: submission }); + key("Enter"); + expect(editor.getValue()).toBe(`${source}\n`); + expect(composerSuggestionsSuppressed(editor.view, false)).toBe(false); + expect(sends).not.toHaveBeenCalled(); + undo(editor.view); + expect(editor.getValue()).toBe(source); +}); + +it("continues two indented code lines before the third Enter returns to prose", () => { + mount("```ts\n nested()", { richTextEnabled: true, onCommandKeyDown: submission }); + key("Enter"); + expect(editor.getValue()).toBe("```ts\n nested()\n "); + key("Enter"); + expect(editor.getValue()).toBe("```ts\n nested()\n \n "); + key("Enter"); + expect(editor.getValue()).toBe("```ts\n nested()\n```\n\n"); + expect(composerSuggestionsSuppressed(editor.view, false)).toBe(false); + expect(sends).not.toHaveBeenCalled(); + expect(editor.view.hasFocus).toBe(true); +}); diff --git a/apps/web/src/components/composerMarkdownEditor.ts b/apps/web/src/components/composerMarkdownEditor.ts new file mode 100644 index 0000000000000000000000000000000000000000..75867d9af03956f85e697ac03b730cdfac8428d3 --- /dev/null +++ b/apps/web/src/components/composerMarkdownEditor.ts @@ -0,0 +1,486 @@ +import { + chipField, + createMarkdownEditor, + enclosingCodeBlock, + insertNewline, + livePreview, + type MarkdownEditor, +} from "@clo/markdown-editor"; +import { isolateHistory, indentLess, indentMore } from "@codemirror/commands"; +import { + defaultHighlightStyle, + HighlightStyle, + syntaxHighlighting, + syntaxTree, +} from "@codemirror/language"; +import { + Compartment, + EditorState, + Prec, + StateEffect, + StateField, + Transaction, +} from "@codemirror/state"; +import type { SyntaxNode } from "@lezer/common"; +import { Decoration, EditorView, WidgetType } from "@codemirror/view"; + +import { cn } from "~/lib/utils"; +import { collectComposerPromptInlineTokens } from "~/composer-editor-mentions"; +import { collapseExpandedComposerCursor, expandCollapsedComposerCursor } from "~/composer-logic"; +import { getTimelinePageScrollKey } from "./chat/pageScrollController"; +import { importPastedComposerText } from "./composerInlineTokenPaste"; +import { composerCodeBlocks, composerCodeBlockHighlight } from "./composerCodeBlockHighlight"; +import type { ComposerPromptEditorProps } from "./ComposerPromptEditor"; + +export type ComposerToken = ReturnType[number]; +export type ComposerChip = { dom: HTMLElement } & ( + | { kind: "chip"; token: ComposerToken } + | { kind: "fence"; block: ReturnType[number] } +); + +// Live-preview decorations own prose colors; fenced code uses the Shiki extension. +const composerSyntaxHighlight = syntaxHighlighting( + HighlightStyle.define( + defaultHighlightStyle.specs.map((style) => ({ ...style, color: "inherit" })), + ), +); + +export function composerTokens(state: EditorState, literalText: boolean): ComposerToken[] { + if (literalText) return []; + const code: Array<{ from: number; to: number }> = []; + syntaxTree(state).iterate({ + enter(node) { + if (["InlineCode", "FencedCode", "CodeBlock"].includes(node.name)) { + code.push({ from: node.from, to: node.to }); + return false; + } + return undefined; + }, + }); + return collectComposerPromptInlineTokens(state.doc.toString()).filter( + (token) => !code.some((range) => token.start < range.to && token.end > range.from), + ); +} + +export function composerSuggestionsSuppressed(view: EditorView, literalText: boolean): boolean { + const range = view.state.selection.main; + if (literalText || view.compositionStarted || !range.empty) return true; + for ( + let node: SyntaxNode | null = syntaxTree(view.state).resolveInner(range.head, -1); + node; + node = node.parent + ) { + if (["InlineCode", "FencedCode", "CodeBlock"].includes(node.name)) return true; + } + return composerTokens(view.state, literalText).some( + (token) => token.start <= range.head && token.end >= range.head, + ); +} + +class ComposerChipWidget extends WidgetType { + constructor( + readonly token: ComposerToken, + readonly mount: (chip: ComposerChip) => void, + readonly unmount: (dom: HTMLElement) => void, + ) { + super(); + } + override eq(other: ComposerChipWidget) { + return ( + this.token.start === other.token.start && + this.token.end === other.token.end && + this.token.source === other.token.source + ); + } + override toDOM() { + const dom = document.createElement("span"); + dom.contentEditable = "false"; + dom.className = "relative inline-flex select-none items-center align-middle leading-none"; + dom.dataset.composerChip = "true"; + if (this.token.type === "citation") dom.dataset.citationStart = String(this.token.start); + dom.setAttribute( + "aria-label", + this.token.type === "mention" + ? this.token.value + : this.token.type === "skill" + ? this.token.value + : this.token.type === "context-reference" + ? this.token.label + : "Assistant citation", + ); + this.mount({ dom, kind: "chip", token: this.token }); + return dom; + } + override destroy(dom: HTMLElement) { + this.unmount(dom); + } +} + +class ComposerFenceWidget extends WidgetType { + constructor( + readonly block: ReturnType[number], + readonly mount: (chip: ComposerChip) => void, + readonly unmount: (dom: HTMLElement) => void, + ) { + super(); + } + override eq(other: ComposerFenceWidget) { + return ( + this.block.from === other.block.from && + this.block.info === other.block.info && + this.block.codeTo === other.block.codeTo + ); + } + override toDOM() { + const dom = document.createElement("span"); + dom.contentEditable = "false"; + dom.className = "ml-3 inline-flex items-center align-middle font-sans"; + dom.dataset.composerFence = "true"; + this.mount({ dom, kind: "fence", block: this.block }); + return dom; + } + override destroy(dom: HTMLElement) { + this.unmount(dom); + } +} + +export function createComposerMarkdownEditor(options: { + props: () => ComposerPromptEditorProps; + mountChip: (chip: ComposerChip) => void; + unmountChip: (dom: HTMLElement) => void; +}): MarkdownEditor & { + configure: () => void; + snapshot: () => { value: string; cursor: number; expandedCursor: number; contextIds: string[] }; +} { + const presentation = new Compartment(); + const attributes = new Compartment(); + const editing = new Compartment(); + const configuredLiteral = StateEffect.define(); + const literal = StateField.define({ + create: () => options.props().literalText ?? false, + update(value, transaction) { + for (const effect of transaction.effects) + if (effect.is(configuredLiteral)) return effect.value; + return value; + }, + }); + const snapshot = () => { + const view = editor.view; + const value = view.state.doc.toString(); + const expandedCursor = view.state.selection.main.head; + const literalText = view.state.field(literal); + return { + value, + cursor: collapseExpandedComposerCursor(value, expandedCursor, literalText), + expandedCursor, + contextIds: composerTokens(view.state, literalText).flatMap((token) => + token.type === "context-reference" ? [token.contextId] : [], + ), + }; + }; + const report = () => { + const props = options.props(); + const current = snapshot(); + props.onChange( + current.value, + current.cursor, + current.expandedCursor, + composerSuggestionsSuppressed(editor.view, props.literalText ?? false), + current.contextIds, + ); + }; + const editor = createMarkdownEditor({ + preset: "composer", + mentions: false, + preview: false, + doc: options.props().value, + extensions: [ + literal, + presentation.of([]), + attributes.of([]), + editing.of([]), + chipField({ + atomic: true, + onSelection: true, + rebuild: (transaction) => + syntaxTree(transaction.startState) !== syntaxTree(transaction.state), + chips: (state) => + composerTokens(state, state.field(literal)).map((token) => + Decoration.replace({ + widget: new ComposerChipWidget(token, options.mountChip, options.unmountChip), + }).range(token.start, token.end), + ), + }), + chipField({ + onSelection: true, + rebuild: (transaction) => + syntaxTree(transaction.startState) !== syntaxTree(transaction.state), + chips: (state) => + options.props().richTextEnabled && !state.field(literal) + ? composerCodeBlocks(state).map((block) => + Decoration.widget({ + widget: new ComposerFenceWidget(block, options.mountChip, options.unmountChip), + side: 1, + }).range(state.doc.lineAt(block.from).to), + ) + : [], + }), + Prec.highest( + EditorView.domEventHandlers({ + keydown(event, view) { + const props = options.props(); + if (props.disabled) return false; + const pageKey = getTimelinePageScrollKey({ + altKey: event.altKey, + ctrlKey: event.ctrlKey, + metaKey: event.metaKey, + shiftKey: event.shiftKey, + defaultPrevented: event.defaultPrevented, + isComposing: event.isComposing || view.compositionStarted, + keyCode: event.keyCode, + key: event.key, + clientHeight: view.scrollDOM.clientHeight, + scrollHeight: view.scrollDOM.scrollHeight, + scrollTop: view.scrollDOM.scrollTop, + }); + if (pageKey && props.onPageScrollKeyDown) { + props.onPageScrollKeyDown(pageKey); + event.preventDefault(); + event.stopPropagation(); + return true; + } + if (event.isComposing || event.keyCode === 229 || view.compositionStarted) { + if (event.key === "Enter") { + event.preventDefault(); + return true; + } + return false; + } + const range = view.state.selection.main; + if ( + event.key === "Tab" && + event.shiftKey && + !event.altKey && + !event.metaKey && + !event.ctrlKey && + range.empty && + !props.literalText + ) { + const citation = composerTokens(view.state, false).find( + (token) => token.type === "citation" && token.end === range.head, + ); + const button = citation + ? view.dom.querySelector( + `[data-citation-start="${citation.start}"] [data-citation-comment-trigger]`, + ) + : null; + if (button) { + event.preventDefault(); + event.stopPropagation(); + button.focus(); + return true; + } + } + const block = enclosingCodeBlock(view.state, range.head); + if (block && !props.literalText && !event.metaKey && !event.ctrlKey) { + if (event.key === "Enter") return false; + if (event.key === "Tab") { + const handled = (event.shiftKey ? indentLess : indentMore)(view); + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + return handled; + } + } + const handled = props.onCommandKeyDown?.(event.key, event) ?? false; + if (handled) { + event.preventDefault(); + event.stopPropagation(); + return true; + } + if (props.literalText) { + if (event.key === "Enter" && !event.metaKey && !event.ctrlKey && !event.altKey) { + insertNewline(view); + event.preventDefault(); + return true; + } + if ( + (event.metaKey || event.ctrlKey) && + ["b", "i"].includes(event.key.toLowerCase()) + ) { + event.preventDefault(); + return true; + } + if (["Tab", "*", "`"].includes(event.key)) return true; + } + return false; + }, + compositionstart() { + const props = options.props(); + const current = snapshot(); + props.onChange( + current.value, + current.cursor, + current.expandedCursor, + true, + current.contextIds, + ); + return false; + }, + compositionend(_event, view) { + queueMicrotask(() => { + if (view.dom.isConnected) report(); + }); + return false; + }, + paste(event, view) { + const props = options.props(); + if (props.disabled) return true; + const data = event.clipboardData; + if (!data || event.defaultPrevented) return false; + const text = props.literalText + ? data.getData("text/plain") + : importPastedComposerText(data, props.importContextFragment); + if (!text) return false; + event.preventDefault(); + view.dispatch({ + ...view.state.replaceSelection(text), + annotations: isolateHistory.of("full"), + userEvent: "input.paste", + scrollIntoView: true, + }); + return true; + }, + }), + ), + EditorView.updateListener.of((update) => { + if (update.docChanged || update.selectionSet) { + if ( + update.transactions.some( + (transaction) => transaction.annotation(Transaction.userEvent) === "t3.controlled", + ) + ) + return; + if (!update.state.selection.main.empty) options.props().onVisibleSelectionChange?.(); + report(); + } + }), + Prec.highest( + EditorView.theme({ + "&": { + color: "var(--contrast-foreground)", + fontSize: "inherit", + "--markdown-text": "var(--contrast-foreground)", + "--markdown-muted": "var(--contrast-muted-foreground)", + "--markdown-panel": "var(--muted)", + "--markdown-accent": "var(--info-foreground)", + }, + ".cm-content": { + padding: "0", + caretColor: "var(--contrast-foreground)", + fontFamily: "inherit", + minHeight: "inherit", + }, + ".cm-scroller": { + lineHeight: "inherit", + maxHeight: "inherit", + minHeight: "inherit", + overflowY: "auto", + overflowX: "hidden", + fontFamily: "inherit", + }, + "&.cm-focused": { outline: "none" }, + ".cm-lp-code, .cm-lp-codeblock": { + fontFamily: "var(--font-mono)", + fontSize: "var(--font-size-code, 13px)", + }, + }), + ), + ], + }); + const configure = () => { + const props = options.props(); + const literalText = props.literalText ?? false; + const configuredPreview = presentation.get(editor.view.state); + const previewEnabled = Array.isArray(configuredPreview) && configuredPreview.length > 0; + const showPreview = Boolean(props.richTextEnabled && !literalText); + editor.view.dispatch({ + selection: editor.view.state.selection, + annotations: Transaction.userEvent.of("t3.controlled"), + effects: [ + configuredLiteral.of(literalText), + editing.reconfigure([ + EditorView.editable.of(!props.disabled), + EditorState.readOnly.of(props.disabled), + EditorState.transactionFilter.of((transaction) => + props.disabled && + transaction.docChanged && + transaction.annotation(Transaction.userEvent) !== "t3.controlled" + ? [] + : transaction, + ), + ]), + attributes.reconfigure([ + EditorView.editorAttributes.of({ + class: cn( + "-m-1 block max-h-52 min-h-19.5 p-1 bg-transparent leading-relaxed text-foreground", + props.className, + ), + }), + EditorView.contentAttributes.of({ + "data-testid": "composer-editor", + "data-composer-rich-text": props.richTextEnabled && !literalText ? "true" : "false", + role: "textbox", + "aria-multiline": "true", + "aria-label": props.ariaLabel ?? "Message", + "aria-readonly": String(props.disabled), + "aria-placeholder": props.placeholder, + ...(props.suggestionListId && !props.disabled + ? { "aria-autocomplete": "list", "aria-haspopup": "listbox" } + : {}), + ...(props.activeSuggestionId && props.suggestionListId + ? { + "aria-controls": props.suggestionListId, + "aria-activedescendant": props.activeSuggestionId, + } + : {}), + }), + ]), + ...(showPreview !== previewEnabled + ? [ + presentation.reconfigure( + showPreview + ? [ + composerSyntaxHighlight, + composerCodeBlockHighlight, + livePreview({ + blockWidgets: false, + html: false, + exclude: (state) => + composerTokens(state, false).map((token) => ({ + from: token.start, + to: token.end, + })), + }), + ] + : [], + ), + ] + : []), + ], + }); + }; + configure(); + editor.view.dispatch({ + selection: { + anchor: expandCollapsedComposerCursor( + options.props().value, + options.props().cursor, + options.props().literalText, + ), + }, + annotations: Transaction.userEvent.of("t3.controlled"), + }); + return { ...editor, configure, snapshot }; +} diff --git a/apps/web/src/components/composerSelection.test.ts b/apps/web/src/components/composerSelection.test.ts deleted file mode 100644 index 1d53b43b1f7d7e9b455deff4329385e9e80d4f4a..0000000000000000000000000000000000000000 --- a/apps/web/src/components/composerSelection.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { describe, expect, it } from "vite-plus/test"; - -import { didComposerSelectionChangeVisibly } from "./composerSelection"; - -describe("didComposerSelectionChangeVisibly", () => { - it("ignores selection-neutral editor updates", () => { - expect(didComposerSelectionChangeVisibly({ start: 3, end: 3 }, null)).toBe(false); - expect(didComposerSelectionChangeVisibly({ start: 3, end: 3 }, { start: 3, end: 3 })).toBe( - false, - ); - }); - - it("detects entering and extending a visible range selection", () => { - expect(didComposerSelectionChangeVisibly({ start: 3, end: 3 }, { start: 0, end: 3 })).toBe( - true, - ); - expect(didComposerSelectionChangeVisibly({ start: 1, end: 3 }, { start: 0, end: 3 })).toBe( - true, - ); - }); - - it("does not repeatedly report the same visible selection", () => { - expect(didComposerSelectionChangeVisibly({ start: 0, end: 3 }, { start: 0, end: 3 })).toBe( - false, - ); - }); -}); diff --git a/apps/web/src/components/composerSelection.ts b/apps/web/src/components/composerSelection.ts deleted file mode 100644 index 642153f0151cad69dae7effdd888dabb800c2a62..0000000000000000000000000000000000000000 --- a/apps/web/src/components/composerSelection.ts +++ /dev/null @@ -1,15 +0,0 @@ -export type ComposerSelectionRange = { - start: number; - end: number; -}; - -export function didComposerSelectionChangeVisibly( - previous: ComposerSelectionRange, - next: ComposerSelectionRange | null, -): boolean { - return ( - next !== null && - next.start !== next.end && - (next.start !== previous.start || next.end !== previous.end) - ); -} diff --git a/apps/web/src/components/files/BrowserDocumentFrame.tsx b/apps/web/src/components/files/BrowserDocumentFrame.tsx index a2fbaa0fb92e96c57198549786e2ef2a1d4def5f..fc13ce75109582d581f98779435140d707ab03eb 100644 --- a/apps/web/src/components/files/BrowserDocumentFrame.tsx +++ b/apps/web/src/components/files/BrowserDocumentFrame.tsx @@ -12,7 +12,7 @@ import { htmlRenderThemeFragment, htmlRenderThemeMessage, htmlRenderResult, - readHtmlRenderContentHeight, + readHtmlRenderContentSize, readHtmlRenderKeyDown, readHtmlRenderLinkRequest, } from "@t3tools/shared/htmlRender"; @@ -122,8 +122,9 @@ export function HtmlRenderDocument(props: { readonly className?: string; /** The thread the page's links open beside, as a chat link would. */ readonly threadRef?: ScopedThreadRef | undefined; - /** Receives the page's content height whenever it changes, so an inline frame can fit it. */ - readonly onContentHeight?: (height: number) => void; + readonly onContentSize?: ( + size: NonNullable>, + ) => void; }) { const theme = useHtmlRenderTheme(); const frameRef = useRef(null); @@ -265,20 +266,20 @@ export function HtmlRenderDocument(props: { window.addEventListener("message", replayKey); return () => window.removeEventListener("message", replayKey); }, []); - const { onContentHeight } = props; - // A page posts its height once per change, so listen from the commit that + const { onContentSize } = props; + // A page posts its size once per change, so listen from the commit that // inserts the frame; a passive effect could run after a fast page's first post. useLayoutEffect(() => { - if (onContentHeight === undefined) return; + if (onContentSize === undefined) return; const resize = (event: MessageEvent) => { - const height = readHtmlRenderContentHeight(event.data); - if (height !== undefined && event.source === frameRef.current?.contentWindow) { - onContentHeight(height); + const size = readHtmlRenderContentSize(event.data); + if (size !== undefined && event.source === frameRef.current?.contentWindow) { + onContentSize(size); } }; window.addEventListener("message", resize); return () => window.removeEventListener("message", resize); - }, [onContentHeight]); + }, [onContentSize]); return ( ")).toBeNull(); + }); + + it("strips event handlers and unknown attributes", () => { + const clean = sanitizeHtml(``)!; + const img = clean.querySelector("img")!; + expect(img.getAttribute("onerror")).toBeNull(); + expect(img.getAttribute("data-x")).toBeNull(); + expect(img.getAttribute("src")).toBe(IMG); + }); + + it("rejects javascript: links and keeps https ones hardened", () => { + const clean = sanitizeHtml('xy')!; + const links = clean.querySelectorAll("a"); + expect(links[0]?.getAttribute("href")).toBeNull(); + expect(links[1]?.getAttribute("href")).toBe("https://ok"); + expect(links[1]?.getAttribute("target")).toBe("_blank"); + expect(links[1]?.getAttribute("rel")).toBe("noopener noreferrer"); + }); + + it("rejects non-image data: urls", () => { + const clean = sanitizeHtml('')!; + expect(clean.querySelector("img")?.getAttribute("src")).toBeNull(); + }); + + it("unwraps harmless unknown tags, keeping their children", () => { + const clean = sanitizeHtml("keep me")!; + expect(clean.querySelector("blink")).toBeNull(); + expect(clean.textContent).toBe("keep me"); + expect(clean.querySelector("b")?.textContent).toBe("me"); + }); + + it("routes relative srcs through resolveUrl and filters srcset entries", () => { + const clean = sanitizeHtml( + ``, + { resolveUrl: (url) => `resolved:${url}` }, + )!; + const img = clean.querySelector("img")!; + expect(img.getAttribute("src")).toBe("resolved:./logo.png"); + expect(img.getAttribute("srcset")).toBe(`resolved:./logo.png 1x, ${IMG} 3x`); + }); + + it("keeps picture/source media queries", () => { + const clean = sanitizeHtml( + ``, + )!; + expect(clean.querySelector("source")?.getAttribute("media")).toBe( + "(prefers-color-scheme: dark)", + ); + }); +}); + +let destroy: (() => void) | undefined; +afterEach(() => { + destroy?.(); + destroy = undefined; +}); + +function mount(doc: string, head = 0): MarkdownEditor { + const editor = createMarkdownEditor({ preset: "document", doc }); + document.body.append(editor.dom); + editor.view.contentDOM.dispatchEvent(new FocusEvent("focus")); + editor.view.dispatch({ selection: EditorSelection.single(head) }); + destroy = () => { + editor.destroy(); + editor.dom.remove(); + }; + return editor; +} + +describe("html blocks in the document preset", () => { + it("renders a balanced block sanitized, away from the caret", () => { + const doc = `

logo

\n\nafter`; + const editor = mount(doc, doc.length); + const html = editor.view.dom.querySelector(".cm-lp-html"); + expect(html?.querySelector("img")?.getAttribute("width")).toBe("120"); + expect(editor.view.dom.textContent).not.toContain(" { + const doc = `

\n\nafter`; + const editor = mount(doc, 3); + expect(editor.view.dom.querySelector(".cm-lp-html")).toBeNull(); + expect(editor.view.dom.querySelectorAll(".cm-lp-html-src").length).toBe(1); + expect(editor.view.dom.textContent).toContain('

'); + }); + + it("never renders script content, even though the block previews", () => { + const doc = "\n\nafter"; + const editor = mount(doc, doc.length); + expect(editor.view.dom.textContent).not.toContain("alert"); + expect(editor.view.dom.querySelector("script")).toBeNull(); + }); + + it("absorbs a split centering wrapper: tags hidden, content centered", () => { + const doc = `

\n\n# Title\n\nsome badges\n\n
\n\nafter`; + const editor = mount(doc, doc.length); + expect(editor.view.dom.textContent).not.toContain(""); + const centered = editor.view.dom.querySelectorAll(".cm-lp-center"); + expect(centered.length).toBeGreaterThanOrEqual(2); + expect(editor.view.dom.querySelector(".cm-lp-h1.cm-lp-center")).not.toBeNull(); + }); + + it("reveals a wrapper tag as source when the caret reaches its line", () => { + const doc = `
\n\ncontent\n\n
\n\nafter`; + const editor = mount(doc, 4); + expect(editor.view.dom.textContent).toContain('
'); + expect(editor.view.dom.querySelector(".cm-lp-html-src")).not.toBeNull(); + }); + + it("leaves an unmatched wrapper open visible as source", () => { + const doc = `
\n\ncontent with no close\n\nafter`; + const editor = mount(doc, doc.length); + expect(editor.view.dom.textContent).toContain('
'); + }); + + it("collapses comment blocks to a placeholder that expands on caret entry", () => { + const doc = "\n\nafter"; + const away = mount(doc, doc.length); + expect(away.view.dom.textContent).not.toContain("secret plan"); + expect(away.view.dom.querySelector(".cm-lp-comment")?.textContent).toBe(""); + destroy?.(); + destroy = undefined; + const inside = mount(doc, 4); + expect(inside.view.dom.textContent).toContain("secret plan"); + expect(inside.view.dom.querySelector(".cm-lp-comment")).toBeNull(); + }); + + it("reveals both halves of an absorbed wrapper together, with token highlighting", () => { + const doc = `
\n\ncontent\n\n
\n\nafter`; + const editor = mount(doc, 4); // caret inside the opening
+ expect(editor.view.dom.textContent).toContain('
'); + expect(editor.view.dom.textContent).toContain("
"); + const tags = [...editor.view.dom.querySelectorAll(".cm-html-tok-tag")]; + expect(tags.map((tag) => tag.textContent)).toEqual(["div", "div"]); + expect(editor.view.dom.querySelector(".cm-html-tok-attr")?.textContent).toBe("align"); + expect(editor.view.dom.querySelector(".cm-html-tok-value")?.textContent).toBe('"center"'); + }); + + it("reveals the opener from the closer too", () => { + const doc = `
\n\ncontent\n\n
\n\nafter`; + const editor = mount(doc, doc.indexOf("
") + 2); + expect(editor.view.dom.textContent).toContain('
'); + expect(editor.view.dom.textContent).toContain("
"); + }); +}); + +describe("inline html in the document preset", () => { + it("styles paired tags and hides them away from the caret", () => { + const doc = "press Cmd and low\n\nafter"; + const editor = mount(doc, doc.length); + expect(editor.view.dom.querySelector(".cm-html-kbd")?.textContent).toBe("Cmd"); + expect(editor.view.dom.querySelector(".cm-html-sub")?.textContent).toBe("low"); + expect(editor.view.dom.textContent).not.toContain(""); + }); + + it("reveals paired tags as muted source when the caret touches the pair", () => { + const editor = mount("press Cmd now\n\nafter", 8); + expect(editor.view.dom.textContent).toContain(""); + expect(editor.view.dom.querySelectorAll(".cm-lp-html-inline").length).toBe(2); + }); + + it("renders
as a line break widget", () => { + const doc = "a
b\n\nafter"; + const editor = mount(doc, doc.length); + expect(editor.view.dom.querySelector(".cm-lp-br br")).not.toBeNull(); + expect(editor.view.dom.textContent).not.toContain("
"); + }); + + it("renders an inline and a badge-style as sanitized widgets", () => { + const doc = `logo and \n\nafter`; + const editor = mount(doc, doc.length); + const widgets = editor.view.dom.querySelectorAll(".cm-lp-html"); + expect(widgets.length).toBe(2); + expect(widgets[1]?.querySelector("a[target='_blank'] img")).not.toBeNull(); + }); + + it("leaves unknown or unpaired tags visible as muted source", () => { + const doc = "a x and unclosed\n\nafter"; + const editor = mount(doc, doc.length); + expect(editor.view.dom.textContent).toContain(""); + expect(editor.view.dom.textContent).toContain(""); + }); + + it("keeps the composer preset html-free (raw text, no widgets)", () => { + const composer = createMarkdownEditor({ doc: `x hi` }); + document.body.append(composer.dom); + expect(composer.dom.querySelector(".cm-lp-html")).toBeNull(); + expect(composer.dom.textContent).toContain("hi"); + composer.destroy(); + composer.dom.remove(); + }); +}); diff --git a/packages/markdown-editor/test/live-preview.test.ts b/packages/markdown-editor/test/live-preview.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a5e76c9ea1d5bf1b78255a458fc2fe831ec48f91 --- /dev/null +++ b/packages/markdown-editor/test/live-preview.test.ts @@ -0,0 +1,123 @@ +// @vitest-environment jsdom + +import "./dom"; +// The live-preview decoration layer, asserted through a real EditorView so the StateField, +// provide-wiring, and class names are all exercised — the piece the kiln properties cannot reach. + +import { javascriptLanguage } from "@codemirror/lang-javascript"; +import { markdown, markdownLanguage } from "@codemirror/lang-markdown"; +import { EditorSelection, EditorState } from "@codemirror/state"; +import { afterEach, describe, expect, it } from "vite-plus/test"; + +import { createMarkdownEditor } from "../src/editor.ts"; +import { formattingDecorations } from "../src/live-preview.ts"; + +let cleanup: (() => void) | undefined; +afterEach(() => { + cleanup?.(); + cleanup = undefined; +}); + +function mount(doc: string, head = 0) { + const editor = createMarkdownEditor({ doc }); + document.body.append(editor.dom); + editor.view.contentDOM.dispatchEvent(new FocusEvent("focus")); + editor.view.dispatch({ selection: EditorSelection.single(head) }); + cleanup = () => editor.destroy(); + return editor; +} + +describe("live preview in the view", () => { + it("hides emphasis marks away from the selection and styles the content", () => { + const editor = mount("plain **bold** tail", 0); + const strong = editor.view.dom.querySelector(".cm-lp-strong"); + expect(strong?.textContent).toBe("bold"); + expect(editor.view.dom.textContent).not.toContain("**"); + }); + + it("reveals muted marks when the caret touches the node", () => { + const editor = mount("plain **bold** tail", 9); + expect(editor.view.dom.textContent).toContain("**bold**"); + expect(editor.view.dom.querySelector(".cm-lp-mark")).not.toBeNull(); + }); + + it("boxes fenced code line by line with rounded first and last lines", () => { + const editor = mount("```ts\ncode\n```\n", 0); + const lines = editor.view.dom.querySelectorAll(".cm-lp-codeblock"); + expect(lines.length).toBe(3); + expect(lines[0]?.className).toContain("cm-lp-codeblock-top"); + expect(lines[lines.length - 1]?.className).toContain("cm-lp-codeblock-bottom"); + expect(editor.view.dom.querySelector(".cm-lp-code-lang")?.textContent).toBe("ts"); + }); + + it("uses a consumer-supplied parser to highlight fenced code", () => { + const editor = createMarkdownEditor({ + doc: "```ts\nexport const answer = 42\n```", + codeLanguages: (info: string) => (info === "ts" ? javascriptLanguage : null), + }); + document.body.append(editor.dom); + cleanup = () => editor.destroy(); + const token = [...editor.dom.querySelectorAll(".cm-line span")].find( + (element) => element.textContent === "export", + ); + expect(token?.className).not.toBe(""); + }); +}); + +describe("formattingDecorations bounds", () => { + it("never emits a range outside the document", () => { + const docs = ["", "*a*", "``", "**x** `y` ~~z~~", "```\nunclosed", "- [ ] task *i*"]; + for (const doc of docs) { + const state = EditorState.create({ + doc, + extensions: [markdown({ base: markdownLanguage })], + }); + for (const range of formattingDecorations(state)) { + expect(range.from).toBeGreaterThanOrEqual(0); + expect(range.to).toBeLessThanOrEqual(doc.length); + } + } + }); +}); + +describe("html stays inert", () => { + it("keeps HTML out of the grammar (no tag nodes, rendered literally)", () => { + const editor = mount("
hi
", 0); + expect(editor.view.dom.textContent).toContain("
hi
"); + }); +}); + +// Sanity for the vitest/happy-dom substrate itself: a view mounts and measures without throwing. +describe("view smoke", () => { + it("mounts, edits, and destroys", () => { + const editor = mount("hello", 0); + editor.view.dispatch({ changes: { from: 5, insert: " world" } }); + expect(editor.getValue()).toBe("hello world"); + }); +}); + +it("leaves host-owned atomic source ranges untouched by link preview", () => { + const value = "before [file.ts](src/file.ts) after"; + const state = EditorState.create({ + doc: value, + extensions: [markdown({ base: markdownLanguage })], + }); + const from = value.indexOf("["); + const to = value.indexOf(" after"); + const ranges = formattingDecorations(state, { exclude: () => [{ from, to }] }); + expect(ranges.some((range) => range.from >= from && range.to <= to)).toBe(false); + expect(state.doc.toString()).toBe(value); +}); + +it("renders readonly tasks as disabled controls and never rewrites their source", () => { + const editor = createMarkdownEditor({ + doc: "- [ ] task", + extensions: [EditorState.readOnly.of(true)], + }); + document.body.append(editor.dom); + cleanup = () => editor.destroy(); + const checkbox = editor.dom.querySelector('input[type="checkbox"]')!; + expect(checkbox.disabled).toBe(true); + checkbox.dispatchEvent(new Event("change", { bubbles: true })); + expect(editor.getValue()).toBe("- [ ] task"); +}); diff --git a/packages/markdown-editor/test/media.test.ts b/packages/markdown-editor/test/media.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef0e651afeafc9fe6b3dad0872388987db54c1a7 --- /dev/null +++ b/packages/markdown-editor/test/media.test.ts @@ -0,0 +1,153 @@ +// @vitest-environment jsdom +import "./dom"; + +import { Compartment, EditorSelection } from "@codemirror/state"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; + +import { createMarkdownEditor, type MarkdownEditor } from "../src/editor.ts"; +import { livePreview } from "../src/live-preview.ts"; +import type { VideoPreviewInput, VideoPreviewRenderer } from "../src/widgets.ts"; + +let editor: MarkdownEditor | undefined; + +beforeEach(() => { + vi.spyOn(HTMLMediaElement.prototype, "pause").mockImplementation(() => {}); +}); + +afterEach(() => { + editor?.destroy(); + editor?.dom.remove(); + editor = undefined; + vi.restoreAllMocks(); +}); + +function mount(source: string) { + editor = createMarkdownEditor({ preset: "document", doc: source }); + document.body.append(editor.dom); + return editor; +} + +describe("document video embeds", () => { + it.each(["./clip.mp4", "https://media.example/CLIP.WEBM?token=abc#t=2", "<./my clip.mov>"])( + "plays %s through native controls without editing the source", + (url) => { + const source = `![Demonstration](${url})`; + const instance = mount(source); + const video = instance.dom.querySelector("video")!; + expect(video).not.toBeNull(); + expect(instance.dom.querySelector(".cm-lp-image img")).toBeNull(); + expect(video.controls).toBe(true); + expect(video.autoplay).toBe(false); + expect(video.getAttribute("aria-label")).toBe("Demonstration"); + video.focus(); + expect(document.activeElement).toBe(video); + const key = new KeyboardEvent("keydown", { key: " ", bubbles: true, cancelable: true }); + video.dispatchEvent(key); + expect(key.defaultPrevented).toBe(false); + expect(instance.getValue()).toBe(source); + expect(instance.dom.querySelector("video")).toBe(video); + }, + ); + + it("recognizes the authored path before host signing and preserves playback through URL refreshes", () => { + const presentation = new Compartment(); + const options = (url: string) => livePreview({ blockWidgets: true, resolveUrl: () => url }); + editor = createMarkdownEditor({ + preset: "document", + preview: false, + doc: "![Clip](clip.mp4)", + extensions: [presentation.of(options("https://host.example/asset?token=first"))], + }); + document.body.append(editor.dom); + const video = editor.dom.querySelector("video")!; + let paused = false; + Object.defineProperty(video, "paused", { configurable: true, get: () => paused }); + Object.defineProperty(video, "duration", { configurable: true, value: 100 }); + video.currentTime = 12; + + editor.view.dispatch({ + effects: presentation.reconfigure(options("https://host.example/asset?token=second")), + }); + expect(editor.dom.querySelector("video")).toBe(video); + expect(video.src).toBe("https://host.example/asset?token=first"); + expect(video.currentTime).toBe(12); + expect(video.pause).not.toHaveBeenCalled(); + + paused = true; + video.dispatchEvent(new Event("pause")); + expect(video.src).toBe("https://host.example/asset?token=second"); + video.currentTime = 0; + video.dispatchEvent(new Event("loadedmetadata")); + expect(video.currentTime).toBe(12); + expect(video.autoplay).toBe(false); + + paused = false; + editor.view.dispatch({ + effects: presentation.reconfigure(options("https://host.example/asset?token=third")), + }); + expect(video.src).toBe("https://host.example/asset?token=second"); + video.dispatchEvent(new Event("error")); + expect(video.src).toBe("https://host.example/asset?token=third"); + expect(editor.dom.querySelector("video")).toBe(video); + }); + + it("stops playback when editing reveals the video source", () => { + const instance = mount("![Clip](clip.mp4)\n\nOther text"); + const video = instance.dom.querySelector("video")!; + instance.view.contentDOM.dispatchEvent(new FocusEvent("focus")); + instance.view.dispatch({ selection: EditorSelection.single(3) }); + expect(instance.dom.querySelector("video")).toBeNull(); + expect(instance.dom.textContent).toContain("![Clip](clip.mp4)"); + expect(video.pause).toHaveBeenCalledOnce(); + }); + + it("does not mistake a video extension inside an image query for a video path", () => { + const instance = mount("![Figure](figure.png?label=clip.mp4)"); + expect(instance.dom.querySelector("video")).toBeNull(); + expect(instance.dom.querySelector(".cm-lp-image img")).not.toBeNull(); + }); + + it("lets the host retain its player through signed URL refreshes and dispose it when removed", () => { + const presentation = new Compartment(); + const update = vi.fn(); + const destroy = vi.fn(); + const inputs: VideoPreviewInput[] = []; + const renderVideo: VideoPreviewRenderer = (input) => { + inputs.push(input); + const dom = document.createElement("span"); + dom.textContent = "Hosted player"; + return { dom, update, destroy }; + }; + const options = (token: string) => + livePreview({ + blockWidgets: true, + renderVideo, + resolveUrl: () => `https://host.example/clip?token=${token}`, + }); + editor = createMarkdownEditor({ + preset: "document", + preview: false, + doc: "![Clip](clip.mp4)", + extensions: [presentation.of(options("first"))], + }); + document.body.append(editor.dom); + const hosted = Array.from(editor.dom.querySelectorAll("span")).find( + (element) => element.textContent === "Hosted player", + )!; + expect(inputs).toEqual([ + { source: "clip.mp4", url: "https://host.example/clip?token=first", alt: "Clip" }, + ]); + expect(editor.dom.querySelector("video")).toBeNull(); + editor.view.dispatch({ effects: presentation.reconfigure(options("second")) }); + expect(hosted.isConnected).toBe(true); + expect(inputs).toHaveLength(1); + expect(update).toHaveBeenCalledWith({ + source: "clip.mp4", + url: "https://host.example/clip?token=second", + alt: "Clip", + }); + expect(destroy).not.toHaveBeenCalled(); + editor.setValue("Video removed"); + expect(destroy).toHaveBeenCalledOnce(); + }); +}); diff --git a/packages/markdown-editor/test/mentions.test.ts b/packages/markdown-editor/test/mentions.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..1c3a6f8aa9f94beeac344a6960f591c4ec5cc4de --- /dev/null +++ b/packages/markdown-editor/test/mentions.test.ts @@ -0,0 +1,141 @@ +// @vitest-environment jsdom + +import "./dom"; +// The DOM-bound half of the mention machinery: widget rendering, atomic chips in a live view, and +// the clipboard filters. The pure serialization properties live in mentions.test.ts under kiln. +import { EditorState } from "@codemirror/state"; +import { EditorView } from "@codemirror/view"; +import { describe, expect, it } from "vite-plus/test"; + +import { + createMentionRegistry, + hydrateMentions, + insertMention, + mentionsExtension, + serializeMentions, + staticMentionProvider, +} from "../src/mentions.ts"; + +describe("mention widgets", () => { + it("rehydrates saved file ranges with their line count", () => { + const registry = createMentionRegistry(); + const saved = "review @sys/ui/chat/src/editor.ts:12-18 please"; + const view = new EditorView({ + state: EditorState.create({ + doc: hydrateMentions(registry, saved), + extensions: mentionsExtension(registry), + }), + parent: document.body, + }); + expect(view.dom.querySelector(".chip-label")?.textContent).toBe("editor.ts"); + expect(view.dom.querySelector(".chip-detail")?.textContent).toBe("L12-18"); + expect(serializeMentions(registry, view.state.doc.toString())).toBe(saved); + view.destroy(); + }); + + it("replaces the @query with an atomic chip that serializes back to @token", () => { + const registry = createMentionRegistry(); + const view = new EditorView({ + state: EditorState.create({ doc: "see brok", extensions: mentionsExtension(registry) }), + }); + insertMention( + view, + registry, + { + kind: "file", + label: "session.ts", + token: "sys/agent-backend/src/providers/claude/session.ts", + }, + { from: 4, to: 8 }, + ); + expect(serializeMentions(registry, view.state.doc.toString()).trim()).toBe( + "see @sys/agent-backend/src/providers/claude/session.ts", + ); + view.destroy(); + }); + + it("round-trips copied mention text through the clipboard filters", () => { + const registry = createMentionRegistry(); + const view = new EditorView({ + state: EditorState.create({ + doc: "@src/app.ts:3-5", + extensions: mentionsExtension(registry), + }), + }); + const input = view.state.facet(EditorView.clipboardInputFilter); + const output = view.state.facet(EditorView.clipboardOutputFilter); + const hydrated = input.reduce( + (text, filter) => filter(text, view.state), + view.state.doc.toString(), + ); + + expect(hydrated).toMatch(/⟦mention:\d+⟧/); + expect(output.reduce((text, filter) => filter(text, view.state), hydrated)).toBe( + "@src/app.ts:3-5", + ); + view.destroy(); + }); + + it("renders a provided file icon URL in the mention chip", () => { + const registry = createMentionRegistry(); + const view = new EditorView({ + state: EditorState.create({ doc: "@file", extensions: mentionsExtension(registry) }), + parent: document.body, + }); + insertMention( + view, + registry, + { + kind: "file", + label: "app.ts", + token: "src/app.ts", + icon: "data:image/svg+xml;base64,PHN2Zy8+", + }, + { from: 0, to: 5 }, + ); + expect(view.dom.querySelector(".chip-icon img")?.src).toContain( + "data:image/svg+xml;base64,PHN2Zy8+", + ); + view.destroy(); + }); + + it("serializes symbol mentions to their source range token", () => { + const registry = createMentionRegistry(); + const view = new EditorView({ + state: EditorState.create({ doc: "@acti", extensions: mentionsExtension(registry) }), + }); + insertMention( + view, + registry, + { + kind: "symbol", + label: "activate", + detail: "extension · sys/extension/src/extension.ts", + token: "sys/extension/src/extension.ts:12:3", + }, + { from: 0, to: 5 }, + ); + expect(serializeMentions(registry, view.state.doc.toString()).trim()).toBe( + "@sys/extension/src/extension.ts:12:3", + ); + view.destroy(); + }); +}); + +describe("staticMentionProvider", () => { + it("substring-filters across label, token, and detail", async () => { + const provider = staticMentionProvider([ + { + kind: "file", + label: "session.ts", + detail: "agent-backend/src/providers/claude", + token: "src/providers/claude/session.ts", + }, + { kind: "symbol", label: "AgentSession", detail: "interface", token: "AgentSession" }, + { kind: "file", label: "editor.ts", detail: "agent-ui/src", token: "src/editor.ts" }, + ]); + const hits = await provider.search("session"); + expect(hits.map((h) => h.label)).toEqual(["session.ts", "AgentSession"]); + expect(await provider.search("agent-ui")).toHaveLength(1); + }); +}); diff --git a/packages/markdown-editor/tsconfig.browser.json b/packages/markdown-editor/tsconfig.browser.json new file mode 100644 index 0000000000000000000000000000000000000000..6fb541829bb5b70d9fc508bf702170f72babd4ba --- /dev/null +++ b/packages/markdown-editor/tsconfig.browser.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "Preserve", + "moduleResolution": "Bundler", + "jsx": "react-jsx", + "lib": ["ES2023", "DOM", "DOM.Iterable"], + "types": [], + "erasableSyntaxOnly": false, + "exactOptionalPropertyTypes": false, + "plugins": [ + { + "name": "@effect/language-service", + "diagnosticSeverity": { + "globalTimers": "off", + "globalDate": "off", + "globalConsole": "off", + "globalFetch": "off", + "globalRandom": "off" + } + } + ] + }, + "include": ["src"] +} diff --git a/packages/shared/src/htmlRender.test.ts b/packages/shared/src/htmlRender.test.ts index 21ff82e1b028c730345d308d898aac7d0838835b..3e585051541bb5894d4e286464574a4fd1bfc2f5 100644 --- a/packages/shared/src/htmlRender.test.ts +++ b/packages/shared/src/htmlRender.test.ts @@ -1,3 +1,4 @@ +import * as NodeVM from "node:vm"; import { describe, expect, it } from "vite-plus/test"; import { @@ -8,7 +9,7 @@ import { htmlRenderThemeFragment, injectHtmlRenderBootstrap, htmlRenderThemeMessage, - readHtmlRenderContentHeight, + readHtmlRenderContentSize, readHtmlRenderKeyDown, readHtmlRenderLinkRequest, readHtmlRenderReference, @@ -19,6 +20,116 @@ import { htmlRenderFromToolItem } from "./toolOutput.ts"; const reference = { attachmentId: "thread-abc-123.html", title: "Chart", height: 420 }; describe("injectHtmlRenderBootstrap", () => { + it("tracks descendant resizing and mutations while preserving the page's authored width", () => { + const listeners = new Map void>(); + const style = new Map([ + ["width", "640px"], + ["priority", "important"], + ]); + let intrinsicWidth = 920; + const sizes: unknown[] = []; + const observed = new Set(); + let resize: (() => void) | undefined; + let mutate: + | ((records: { readonly addedNodes: unknown[]; readonly removedNodes: unknown[] }[]) => void) + | undefined; + const figure = { nodeType: 1, querySelectorAll: () => [] }; + const descendants = [figure]; + const body = { + nodeType: 1, + querySelectorAll: () => descendants, + get scrollWidth() { + return style.get("width") === "max-content" ? intrinsicWidth : 640; + }, + }; + class ResizeObserver { + constructor(callback: () => void) { + resize = callback; + } + observe(target: unknown) { + observed.add(target); + } + unobserve(target: unknown) { + observed.delete(target); + } + } + class MutationObserver { + constructor(callback: NonNullable) { + mutate = callback; + } + observe(target: unknown, options: unknown) { + expect(target).toBe(body); + expect(options).toEqual({ + subtree: true, + childList: true, + attributes: true, + characterData: true, + }); + } + } + const root = { + clientHeight: 100, + scrollHeight: 240, + getBoundingClientRect: () => ({ + width: style.get("width") === "max-content" ? intrinsicWidth : 640, + height: 240, + }), + style: { + getPropertyValue: (property: string) => style.get(property), + getPropertyPriority: () => style.get("priority"), + setProperty: (property: string, value: string, priority: string) => { + style.set(property, value); + style.set("priority", priority); + }, + removeProperty: (property: string) => style.delete(property), + }, + }; + const bootstrap = + injectHtmlRenderBootstrap("

Figure

").match(/ unsafe', + ), + ); + expect(tree.children[0]).toMatchObject({ + tagName: "p", + children: expect.arrayContaining([ + expect.objectContaining({ + tagName: "kbd", + properties: {}, + children: [expect.objectContaining({ type: "text", value: "Cmd" })], + }), + expect.objectContaining({ + tagName: "mark", + properties: {}, + children: [expect.objectContaining({ type: "text", value: "marked" })], + }), + expect.objectContaining({ + tagName: "u", + properties: {}, + children: [expect.objectContaining({ type: "text", value: "underlined" })], + }), + ]), + }); + const rendered = JSON.stringify(tree); + expect(rendered).not.toContain("javascript:"); + expect(rendered).not.toContain('"tagName":"script"'); + expect(rendered).not.toContain("onclick"); + expect(rendered).not.toContain("onmouseover"); + expect(rendered).not.toContain('"style"'); +}); diff --git a/packages/shared/src/markdownPipeline.ts b/packages/shared/src/markdownPipeline.ts index 7317dcc5b9fff40af500c2c1f486244be868cd16..8ce971e8facca5d8415bbd7a6f732e026388efa6 100644 --- a/packages/shared/src/markdownPipeline.ts +++ b/packages/shared/src/markdownPipeline.ts @@ -142,6 +142,7 @@ function rehypePreserveImageSourceMeta() { const CHAT_MARKDOWN_SANITIZE_SCHEMA = { ...defaultSchema, + tagNames: [...(defaultSchema.tagNames ?? []), "mark", "u"], attributes: { ...defaultSchema.attributes, "*": (defaultSchema.attributes?.["*"] ?? []).filter((attribute) => attribute !== "title"), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f466898da28f87d7d201187eef466181f821415d..d0968f6d65a1ee228315062c0c2bf78801f85fdf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -760,9 +760,27 @@ importers: '@clerk/react': specifier: 6.16.1 version: 6.16.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@clo/markdown-editor': + specifier: workspace:* + version: link:../../packages/markdown-editor '@clo/terminal': specifier: workspace:* version: link:../../packages/terminal + '@codemirror/commands': + specifier: ^6.8.1 + version: 6.11.1 + '@codemirror/lang-markdown': + specifier: ^6.5.0 + version: 6.5.2 + '@codemirror/language': + specifier: ^6.12.3 + version: 6.13.1 + '@codemirror/state': + specifier: ^6.6.0 + version: 6.7.6 + '@codemirror/view': + specifier: ^6.43.1 + version: 6.43.14 '@daypicker/react': specifier: ^10.0.1 version: 10.0.1(@types/react@19.3.0)(react@19.2.6) @@ -787,6 +805,9 @@ importers: '@legendapp/list': specifier: 'catalog:' version: 3.3.5(patch_hash=680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806)(react-dom@19.2.6(react@19.2.6))(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@lezer/common': + specifier: ^1.5.2 + version: 1.5.3 '@noble/hashes': specifier: 'catalog:' version: 1.8.0 @@ -832,42 +853,6 @@ importers: '@tanstack/react-router': specifier: ^1.160.2 version: 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tiptap/core': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/extension-blockquote': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-code': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-code-block': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-heading': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-horizontal-rule': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-list': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-task-item': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-task-list': - specifier: ^3.31.3 - version: 3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/pm': - specifier: ^3.31.3 - version: 3.31.3 - '@tiptap/react': - specifier: ^3.31.3 - version: 3.31.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@types/react-dom@19.2.3(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@tiptap/starter-kit': - specifier: ^3.31.3 - version: 3.31.3 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -880,6 +865,9 @@ importers: effect: specifier: 4.0.4 version: 4.0.4 + gemoji: + specifier: ^8.1.0 + version: 8.1.0 hast-util-to-html: specifier: ^9.0.5 version: 9.0.5 @@ -1185,6 +1173,39 @@ importers: specifier: 1.0.0 version: 1.0.0(@types/node@24.12.4)(@vitest/ui@5.0.1(vitest@5.0.1))(bufferutil@4.1.0)(esbuild@0.28.2)(jiti@2.7.0)(jsdom@30.1.0(@noble/hashes@1.8.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0) + packages/markdown-editor: + devDependencies: + '@codemirror/commands': + specifier: ^6.8.1 + version: 6.11.1 + '@codemirror/lang-javascript': + specifier: ^6.2.5 + version: 6.2.5 + '@codemirror/lang-markdown': + specifier: ^6.5.0 + version: 6.5.2 + '@codemirror/language': + specifier: ^6.12.3 + version: 6.13.1 + '@codemirror/state': + specifier: ^6.6.0 + version: 6.7.6 + '@codemirror/view': + specifier: ^6.43.1 + version: 6.43.14 + '@lezer/common': + specifier: ^1.5.2 + version: 1.5.3 + '@types/react': + specifier: ~19.3.0 + version: 19.3.0 + react: + specifier: ^19.2.0 + version: 19.3.0 + vite-plus: + specifier: 1.0.0 + version: 1.0.0(@types/node@24.12.4)(@vitest/ui@5.0.1)(bufferutil@4.1.0)(esbuild@0.28.2)(jiti@2.7.0)(jsdom@30.1.0(@noble/hashes@1.8.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0) + packages/provider-acp: dependencies: '@t3tools/contracts': @@ -2848,6 +2869,39 @@ packages: '@cloudflare/workers-types@5.20261004.1': resolution: {integrity: sha512-K9D4/Y6bSIDNYFzjqzFMNoWK99pLgfgFxqSa76kfW++3VCkTSzJbzsQRffir366G3kmNyjoigC6ekp7DxIkxkw==} + '@codemirror/autocomplete@6.20.3': + resolution: {integrity: sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==} + + '@codemirror/commands@6.11.1': + resolution: {integrity: sha512-O/4hG3SC1YwcmQ0d2UVNDs+AsaNWd1iHVxbTeEBuqH+6bExAiPK3iS/BvpY6rZGURALv4ZD3sIgcCmRvw3ehBg==} + + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + + '@codemirror/lang-html@6.4.12': + resolution: {integrity: sha512-pw2ReWKUqSkbvh76RAT4NYxiogRu+PWkR2ukAwO9uOgrm8uipkzjtKKtNpyeAQwHOqxEeSvAXZ6vr3AfyB9y/w==} + + '@codemirror/lang-javascript@6.2.5': + resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==} + + '@codemirror/lang-markdown@6.5.2': + resolution: {integrity: sha512-AwBOdkWYuA//WcM0xO5PfHPUcmz/O2i5o0Nsg1U69SII/loCJlFI1Romd9xp2HYb1kYJRGZotyqRghuHH5n8Kw==} + + '@codemirror/language@6.13.1': + resolution: {integrity: sha512-zfvU2r3TyylQLMj/te+5CnQ0rSqZi8B1oTCBbQkagcLW4Xc6imab6qN+pEJhsuNOLaJqiRyBXp9UhWA1DhVvDw==} + + '@codemirror/lint@6.9.7': + resolution: {integrity: sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==} + + '@codemirror/state@6.7.6': + resolution: {integrity: sha512-kAz+AncRtKuIknedxT1bq4XwXv4UowhbkHU1myPrtVb/jZtImWuV5BXzv5vK6i3kYACsdiZiQKFQQ5Mq7elW8w==} + + '@codemirror/streamparser@6.0.0': + resolution: {integrity: sha512-JTFPF6xrfjt0mnfGPgzcLiMwYmvIyNaoizp8BYzv8FE8KrT6GBGDZ190rtt+O7Wke3gG/MFHyiY9YGNeimof4w==} + + '@codemirror/view@6.43.14': + resolution: {integrity: sha512-hC45YnmJNR1rz42OF57BLoQNFMV12/13drnvibDsR2quNDmldcb4WvYVV81hFQg56i9lcqQMEDqilhX2QDcGQQ==} + '@coderabbitai/config@1.1.0': resolution: {integrity: sha512-NvQKaoOD7fWb7lMKhid57ABVlIBSczw/S+ePk5YvoPuWdrDkyY+PWdqVtq3TRq7VY8f3SNRlMFjmAtXVab66pw==} @@ -4190,6 +4244,27 @@ packages: react-native: optional: true + '@lezer/common@1.5.3': + resolution: {integrity: sha512-H0iErY4e43LpXbYDyBci5W4v/RwTgGV3YzYOlJPiGZ8RY8w51kVE+xLn1tg3Z6UmSfyETvtsUK3r7YsgDQEI7Q==} + + '@lezer/css@1.3.9': + resolution: {integrity: sha512-ZmzgvTOBdJWGIsY/ItAfN7UW8DV802oZG+jeG6E508SwEzz5YhuAajptpWPICvIyqYAD2+VjMdOS40GgGkyEOQ==} + + '@lezer/highlight@1.2.5': + resolution: {integrity: sha512-O1GMVKgtf5YspFaRzpmqkVgMtIk2HG9uMAbH6wdAIdNh3TVzCsch/+cRi+6l2//UGDKe6NB9BW3cvuR5ezMQ0w==} + + '@lezer/html@1.3.13': + resolution: {integrity: sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==} + + '@lezer/javascript@1.5.6': + resolution: {integrity: sha512-sEvOqpl4vJQca0NugSQK02vQPbc5KrvoojnYGoqqFgFO0MtcYhwGiHKVEB+LuXYJnfyXo4QPA8ztbrEa4Fw5NA==} + + '@lezer/lr@1.4.11': + resolution: {integrity: sha512-UwgZcl1R66H2hDzBrA7kWyYmX6s8p5TQ+e/t7CuvgCtBEPxbEPaHYHu+pJBvTvDotEJpuQkJjbXuHiw5Cixxgw==} + + '@lezer/markdown@1.8.0': + resolution: {integrity: sha512-X6w3A2NpyhdtGqTWRJB8gR4QDXBaFMbTOs780ZdZ15KKCfBXOQTKcB3Vr+W6tqJHVlealt53tLmHRvOqPTQgYA==} + '@libsql/client@0.17.3': resolution: {integrity: sha512-HXk9wiAoJbKFbyBH4O+aEhN6ir5ERXuXvwE5OD2eR4/5RUa3Pw/8L9zrnVdU+iNJitRvisPWaIwmhkO3bH7giA==} @@ -4255,6 +4330,9 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} + '@marijn/find-cluster-break@1.0.4': + resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} + '@material/material-color-utilities@0.3.0': resolution: {integrity: sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==} @@ -6045,166 +6123,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tiptap/core@3.31.3': - resolution: {integrity: sha512-Cz50pvciQrxdSxgTkHOVz0uD0Yl/8Xt0QatGD6ILm47jW8EzyHR9RkUGs/D5IqzXKuVPntfw1ttaT926vXfiRg==} - peerDependencies: - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-blockquote@3.31.3': - resolution: {integrity: sha512-fyY2XMbyDDDfOTQ1Qdrnqa1qwC9DWE4n7AfE0EKQI0G8MfLV8RaDlLDcOZDJ9JbMPY7/Gx7EjyK4NKxSW9n2hQ==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-bold@3.31.3': - resolution: {integrity: sha512-dIuYhKk8TitKU/FeDpoTeWZhU42YgDN5npgWNjAmMmRktPdoxnH3/wGSiwXlqZgJWjehN7kPWDePWpJeAImGpQ==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-bubble-menu@3.31.3': - resolution: {integrity: sha512-EV6ZnwKc++2OM/OcD54n8s1B7C9LP7GKAtdEPwu0t3BYJf3sG8Ueoinf7SgGPO9oMPg96GneOkDNm1urMV167g==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-bullet-list@3.31.3': - resolution: {integrity: sha512-qEyyoPapPef4LO8XKaN83bxtaNzkJ4kFn/IxLnEKd4BJ3Mvi4MH2yJYlyDqwFnMoev4pMA1zBHRAt/C0THRmZw==} - peerDependencies: - '@tiptap/extension-list': 3.31.3 - - '@tiptap/extension-code-block@3.31.3': - resolution: {integrity: sha512-nvknt4FhyJQjYcvxptmeUlFsIAc8ibua3E5BN4Pim374/9RWepH4cdE9X0/qUTtguHElLx0iKtSIY3rW2qGTFA==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-code@3.31.3': - resolution: {integrity: sha512-SzxOqchrD2AcN3uT67PjKmRFEMOU3vNNiwNaamZJUbZrI6Hmy+bvdHJrc3jrIddyyCrAtsnAfRI0cmorW1jGfg==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-document@3.31.3': - resolution: {integrity: sha512-EexgmqnyDNyGlISxo7SMrp5MygpJYmqD+0cY5jB6L1U6L4CpKKRWUt8OO1sWzEHDE1+TTvwt+WIFoIWAziOtEA==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-dropcursor@3.31.3': - resolution: {integrity: sha512-NWomSfu5CSC7VacnMSDzKT8qm66SzMfZwVPEtwY5bPpRTJgTiT1rNK0neDrrzfMN27MfylGyKWWf7Q5Qf8w/fg==} - peerDependencies: - '@tiptap/extensions': 3.31.3 - - '@tiptap/extension-floating-menu@3.31.3': - resolution: {integrity: sha512-rd4VJ9PGSP9Eop8ZTEwaLZcMzMXLuJKe3hUNf58rq+zANpwM+9fI+vB7g9MAc3eXwUNDxNDVACFIL2oeBqpQ3A==} - peerDependencies: - '@floating-ui/dom': ^1.0.0 - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-gapcursor@3.31.3': - resolution: {integrity: sha512-EBXKb1FrVStsNYCcRGtd9jmzveCvR+eqgg1rVqoONrqFK6U7bga6LN+1dMKroP1kliDVgveYkP3vRYxqw+rFqg==} - peerDependencies: - '@tiptap/extensions': 3.31.3 - - '@tiptap/extension-hard-break@3.31.3': - resolution: {integrity: sha512-QAdCvNO4+yW9ATwsrej11NTkDYFqPLIEQr3ARNrKOK1qaiS7A0fia2SEukb/hrkP3A6mbozhoQt2r2RGUf/DpQ==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-heading@3.31.3': - resolution: {integrity: sha512-rk5VHMAeQcg06SLauN6EGdD2jc0O2qY8QkZYPd0LxNvLblw2BxBx+lxUQSYwLAT9Ie5914gKIK2YbRyO2Ts3ig==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-horizontal-rule@3.31.3': - resolution: {integrity: sha512-YnHGy2KShRwvCseAmmxl9VP7R0qaj8QMp3DA6DJWZqp7r5gLGvDkAqhedxqqefqsE4Y43hjkBdjtB9Ce78LkIw==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-italic@3.31.3': - resolution: {integrity: sha512-ibGvdvAPyfxBMUVNRI43eb9h2/Jka1MRG5GtnGqbcCX/2+Y/y0EOfFrPQPkuYphiWQYyu9+FzPKMB/pjuaLuKQ==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-link@3.31.3': - resolution: {integrity: sha512-986wOQzTL9Zr5lf84LCLpm+YOms8A0K39/8DVoqRfebqcOe0/eq4bnztmAlfabOd+kJY92g3AgZERFUx/w+dcw==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-list-item@3.31.3': - resolution: {integrity: sha512-4QlKOriJJMvg95QJTEsy9BUYPBQ6UvJyb8WURRwdUtQUkkqb8h32lg/eyQUv2FzW9IT1AdUyNZfVaxH64kRfQA==} - peerDependencies: - '@tiptap/extension-list': 3.31.3 - - '@tiptap/extension-list-keymap@3.31.3': - resolution: {integrity: sha512-If8UOEdDZbPJU6iYTvLtH6DOp2KBy6BKxg9UELL1AevVetGHEF/7lW8hP50Gn1tHMVpPRqmhSzVrJRpEJJgb/Q==} - peerDependencies: - '@tiptap/extension-list': 3.31.3 - - '@tiptap/extension-list@3.31.3': - resolution: {integrity: sha512-LoveGnC0FVdCV4jUNBaG1ZA+KWE07+adzV3kGy6uUYFcJEjbVUHTnPDrBOob3IwOSO3sCwIkvQb6EVYeXn/4yg==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-ordered-list@3.31.3': - resolution: {integrity: sha512-mp3g11NgA/PYu8rj7J7Ez3l4qBy6WfTSmHIG4PZvEGG5w2oUAIkgb9DU7nPPzjmeme27oazFYZw+AtZA0+u4tw==} - peerDependencies: - '@tiptap/extension-list': 3.31.3 - - '@tiptap/extension-paragraph@3.31.3': - resolution: {integrity: sha512-+iPku7wJfy5hbNDNLX8dveFtYVsZMmh7vztjuq8hT3mipSC4IByDehDbU8fzUCjfXiEzmI7mQn7c8LGmHULuzA==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-strike@3.31.3': - resolution: {integrity: sha512-G29bhKttYwcKHT+BI6emWVFol3RO/gUXxQVcmr/iT8LXXy7j8J6HFUnsKM+Kg5YlP1rxMRgsa65dbrQVahZi0A==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-task-item@3.31.3': - resolution: {integrity: sha512-gCWvvXsCzi9tVFXPqKlkbU81XxtIdfjGy7FM9QFRKiWAvq5uv+Q5nvwrCyMVyP4bA7zRGWFaPzwjL68djgzoBw==} - peerDependencies: - '@tiptap/extension-list': 3.31.3 - - '@tiptap/extension-task-list@3.31.3': - resolution: {integrity: sha512-3WgVzmfEnDbmxbjUBlvTiKpT53KSBnnYhXUVQxM0nz1vpoWG8QifhsnCVsNI6TZmhgR0x/jY+UW9Hc/WLF8DkQ==} - peerDependencies: - '@tiptap/extension-list': 3.31.3 - - '@tiptap/extension-text@3.31.3': - resolution: {integrity: sha512-gdsWtF+taeaCu6V+5Ct10fGo0ACUy1GnYtbb+mcathBt8OqbT+Ws60p/yEmKesBDz2Hn+B5IcWy6+2BBZl5ZTg==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extension-underline@3.31.3': - resolution: {integrity: sha512-HghdJaOwRqYzsAxqSyNyb+IWyOMcdCl8IoiBETA9BZCJAqdXzFLcuWp7CqCqJPam9dgkWosSoHqTCAO4nTBfpw==} - peerDependencies: - '@tiptap/core': 3.31.3 - - '@tiptap/extensions@3.31.3': - resolution: {integrity: sha512-8sJNPGGUe8f3aDojcOW5cfVL7I5NrBbE0UWxG08qoi9Tea6qWbvQJsCR9tsrOapr/DaLr3kpbGZ9s1gEEfcNcA==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - - '@tiptap/pm@3.31.3': - resolution: {integrity: sha512-sZime0SWsz/k62W2WvHx5Ig7G2h7kVhrrmnqy+wEgIHfDwEfOlelRjaWCiBCFlF7dxGUntJusCh9FxlLhni0Ag==} - - '@tiptap/react@3.31.3': - resolution: {integrity: sha512-QiwQqvaLFLm5EMFu5tg7nAgXJxCUiUTLD8EsK+TqVV5P4bqOoMOCM39khbhXTJyahCuYpiFWx5YOSDtC/JiPtg==} - peerDependencies: - '@tiptap/core': 3.31.3 - '@tiptap/pm': 3.31.3 - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tiptap/starter-kit@3.31.3': - resolution: {integrity: sha512-WKof9RewdmGHvWJ1wn0/HVNG2mV+HOgVRyJkKekuM9fgr6BZAAH/xZsWE1eon+94JnQ+KtK2ThydXQM/qc6b2A==} - '@tsc-rs/darwin-arm64@0.7.0': resolution: {integrity: sha512-3execGkNh7DXNZr03dhQP2wqmsjB1Q4OJnTMgKIibjeQMsjNK8HTalJZPIG6PkiXeusXUweHP3+4yJjbi5auNw==} engines: {node: '>=16.20.0'} @@ -6501,9 +6419,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} @@ -7807,6 +7722,9 @@ packages: cose-base@2.2.0: resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + crelt@1.0.7: + resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} + cross-dirname@0.1.0: resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} @@ -8894,10 +8812,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.4.2: - resolution: {integrity: sha512-Ywe6jodPTWOTL9/k0bV7gdfP8twKL5Y8I8CZ933fAY5gBekICZSUQTbyH6ut2NZCNyB05mSUwAuEqdEIaOOlDQ==} - engines: {node: '>=6.0.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -9081,6 +8995,9 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gemoji@8.1.0: + resolution: {integrity: sha512-HA4Gx59dw2+tn+UAa7XEV4ufUKI4fH1KgcbenVA9YKSj1QJTT0xh5Mwv5HMFNN3l2OtUe3ZIfuRwSyZS5pLIWw==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -9677,9 +9594,6 @@ packages: resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} - linkifyjs@4.3.3: - resolution: {integrity: sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -10391,9 +10305,6 @@ packages: resolution: {integrity: sha512-84cglkRILFxdtA8hAvLNdMrtBpPNBTrQ9/ulg0FA7xLMnD6mifv+enAIeRmvtv+WgdCE+LPGOfQmtJRrVaIVhQ==} engines: {node: '>=20'} - orderedmap@2.1.1: - resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} @@ -10731,45 +10642,6 @@ packages: property-information@7.2.0: resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - prosemirror-changeset@2.4.2: - resolution: {integrity: sha512-ViYrjMSg3YFiXwIhKaluu+/mi3Yrxt6AR8ri14ulTaGcZtXO1CThl7A2gv79qx5fQnOw8woKwyBU2u+9PVCm3w==} - - prosemirror-commands@1.7.2: - resolution: {integrity: sha512-q6Q6szxqdu9Xd6EcdKsqXghu5nQdZTpB4Q9yd04WRc7/jt763e/rT60Owh0L1GYY+T46o5rD+9lEN36dZS43tw==} - - prosemirror-dropcursor@1.8.3: - resolution: {integrity: sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==} - - prosemirror-gapcursor@1.4.1: - resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} - - prosemirror-history@1.5.0: - resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} - - prosemirror-inputrules@1.5.1: - resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} - - prosemirror-keymap@1.2.3: - resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} - - prosemirror-model@1.25.11: - resolution: {integrity: sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==} - - prosemirror-schema-list@1.5.1: - resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - - prosemirror-state@1.4.4: - resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} - - prosemirror-tables@1.8.5: - resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} - - prosemirror-transform@1.12.1: - resolution: {integrity: sha512-t4F5615FycnCqsX7ShTUs8+jfnwcf46kuFRvSl/3qFx2QTZ4DjgowesLHQXcFP7G//TjesqZG3WtgL7vdyVJyA==} - - prosemirror-view@1.42.3: - resolution: {integrity: sha512-oTN7EtH+CpwxU9NrwEYWd0UZ4JUx7l048l5A2Xppm4p/60isZYLnth9QVQmC3VRIvdrIWCxwZSd+Uz791G31/w==} - proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -11142,9 +11014,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rope-sequence@1.3.4: - resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - roughjs@4.6.6: resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} @@ -11500,6 +11369,9 @@ packages: structured-headers@0.4.1: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} + style-mod@4.1.4: + resolution: {integrity: sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==} + style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -13662,6 +13534,89 @@ snapshots: '@cloudflare/workers-types@5.20261004.1': {} + '@codemirror/autocomplete@6.20.3': + dependencies: + '@codemirror/language': 6.13.1 + '@codemirror/state': 6.7.6 + '@codemirror/view': 6.43.14 + '@lezer/common': 1.5.3 + + '@codemirror/commands@6.11.1': + dependencies: + '@codemirror/language': 6.13.1 + '@codemirror/state': 6.7.6 + '@codemirror/view': 6.43.14 + '@lezer/common': 1.5.3 + + '@codemirror/lang-css@6.3.1': + dependencies: + '@codemirror/autocomplete': 6.20.3 + '@codemirror/language': 6.13.1 + '@codemirror/state': 6.7.6 + '@lezer/common': 1.5.3 + '@lezer/css': 1.3.9 + + '@codemirror/lang-html@6.4.12': + dependencies: + '@codemirror/autocomplete': 6.20.3 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.13.1 + '@codemirror/state': 6.7.6 + '@codemirror/view': 6.43.14 + '@lezer/common': 1.5.3 + '@lezer/css': 1.3.9 + '@lezer/html': 1.3.13 + + '@codemirror/lang-javascript@6.2.5': + dependencies: + '@codemirror/autocomplete': 6.20.3 + '@codemirror/language': 6.13.1 + '@codemirror/lint': 6.9.7 + '@codemirror/state': 6.7.6 + '@codemirror/view': 6.43.14 + '@lezer/common': 1.5.3 + '@lezer/javascript': 1.5.6 + + '@codemirror/lang-markdown@6.5.2': + dependencies: + '@codemirror/autocomplete': 6.20.3 + '@codemirror/lang-html': 6.4.12 + '@codemirror/language': 6.13.1 + '@codemirror/state': 6.7.6 + '@codemirror/view': 6.43.14 + '@lezer/common': 1.5.3 + '@lezer/markdown': 1.8.0 + + '@codemirror/language@6.13.1': + dependencies: + '@codemirror/state': 6.7.6 + '@codemirror/streamparser': 6.0.0 + '@codemirror/view': 6.43.14 + '@lezer/common': 1.5.3 + '@lezer/highlight': 1.2.5 + '@lezer/lr': 1.4.11 + style-mod: 4.1.4 + + '@codemirror/lint@6.9.7': + dependencies: + '@codemirror/state': 6.7.6 + '@codemirror/view': 6.43.14 + crelt: 1.0.7 + + '@codemirror/state@6.7.6': + dependencies: + '@marijn/find-cluster-break': 1.0.4 + + '@codemirror/streamparser@6.0.0': {} + + '@codemirror/view@6.43.14': + dependencies: + '@codemirror/state': 6.7.6 + crelt: 1.0.7 + style-mod: 4.1.4 + w3c-keyname: 2.2.8 + '@coderabbitai/config@1.1.0': dependencies: zod: 4.5.4 @@ -15068,6 +15023,39 @@ snapshots: react-dom: 19.3.0(react@19.3.0) react-native: 0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(utf-8-validate@6.0.6) + '@lezer/common@1.5.3': {} + + '@lezer/css@1.3.9': + dependencies: + '@lezer/common': 1.5.3 + '@lezer/highlight': 1.2.5 + '@lezer/lr': 1.4.11 + + '@lezer/highlight@1.2.5': + dependencies: + '@lezer/common': 1.5.3 + + '@lezer/html@1.3.13': + dependencies: + '@lezer/common': 1.5.3 + '@lezer/highlight': 1.2.5 + '@lezer/lr': 1.4.11 + + '@lezer/javascript@1.5.6': + dependencies: + '@lezer/common': 1.5.3 + '@lezer/highlight': 1.2.5 + '@lezer/lr': 1.4.11 + + '@lezer/lr@1.4.11': + dependencies: + '@lezer/common': 1.5.3 + + '@lezer/markdown@1.8.0': + dependencies: + '@lezer/common': 1.5.3 + '@lezer/highlight': 1.2.5 + '@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@libsql/core': 0.17.3 @@ -15139,6 +15127,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@marijn/find-cluster-break@1.0.4': {} + '@material/material-color-utilities@0.3.0': {} '@mermaid-js/parser@1.2.1': @@ -16623,187 +16613,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tiptap/core@3.31.3(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-blockquote@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-bold@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-bubble-menu@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@floating-ui/dom': 1.7.6 - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - optional: true - - '@tiptap/extension-bullet-list@3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-code-block@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-code@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-document@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-dropcursor@3.31.3(@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extensions': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-floating-menu@3.31.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@floating-ui/dom': 1.7.6 - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - optional: true - - '@tiptap/extension-gapcursor@3.31.3(@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extensions': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-hard-break@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-heading@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-horizontal-rule@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-italic@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-link@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - linkifyjs: 4.3.3 - - '@tiptap/extension-list-item@3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-list-keymap@3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - - '@tiptap/extension-ordered-list@3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-paragraph@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-strike@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-task-item@3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-task-list@3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - - '@tiptap/extension-text@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extension-underline@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - - '@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - - '@tiptap/pm@3.31.3': - dependencies: - prosemirror-changeset: 2.4.2 - prosemirror-commands: 1.7.2 - prosemirror-dropcursor: 1.8.3 - prosemirror-gapcursor: 1.4.1 - prosemirror-history: 1.5.0 - prosemirror-inputrules: 1.5.1 - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 - prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.4 - prosemirror-tables: 1.8.5 - prosemirror-transform: 1.12.1 - prosemirror-view: 1.42.3 - - '@tiptap/react@3.31.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@types/react-dom@19.2.3(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - '@types/react': 19.3.0 - '@types/react-dom': 19.2.3(@types/react@19.3.0) - '@types/use-sync-external-store': 0.0.6 - fast-equals: 5.4.2 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - use-sync-external-store: 1.6.0(react@19.2.6) - optionalDependencies: - '@tiptap/extension-bubble-menu': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-floating-menu': 3.31.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - transitivePeerDependencies: - - '@floating-ui/dom' - - '@tiptap/starter-kit@3.31.3': - dependencies: - '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) - '@tiptap/extension-blockquote': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-bold': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-bullet-list': 3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-code': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-code-block': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-document': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-dropcursor': 3.31.3(@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-gapcursor': 3.31.3(@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-hard-break': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-heading': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-horizontal-rule': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-italic': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-link': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-list': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/extension-list-item': 3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-list-keymap': 3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-ordered-list': 3.31.3(@tiptap/extension-list@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) - '@tiptap/extension-paragraph': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-strike': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-text': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extension-underline': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) - '@tiptap/extensions': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) - '@tiptap/pm': 3.31.3 - '@tsc-rs/darwin-arm64@0.7.0': optional: true @@ -17145,8 +16954,6 @@ snapshots: '@types/unist@3.0.3': {} - '@types/use-sync-external-store@0.0.6': {} - '@types/webidl-conversions@7.0.3': optional: true @@ -18420,6 +18227,8 @@ snapshots: dependencies: layout-base: 2.0.1 + crelt@1.0.7: {} + cross-dirname@0.1.0: optional: true @@ -19564,8 +19373,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.4.2: {} - fast-json-stable-stringify@2.1.0: optional: true @@ -19615,10 +19422,6 @@ snapshots: dependencies: walk-up-path: 4.0.0 - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - fdir@6.5.0(picomatch@4.0.7): optionalDependencies: picomatch: 4.0.7 @@ -19771,6 +19574,8 @@ snapshots: function-bind@1.1.2: {} + gemoji@8.1.0: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -20418,8 +20223,6 @@ snapshots: lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 - linkifyjs@4.3.3: {} - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -21448,8 +21251,6 @@ snapshots: stdin-discarder: 0.3.2 string-width: 8.2.1 - orderedmap@2.1.1: {} - outvariant@1.4.3: optional: true @@ -21901,80 +21702,6 @@ snapshots: property-information@7.2.0: {} - prosemirror-changeset@2.4.2: - dependencies: - prosemirror-transform: 1.12.1 - - prosemirror-commands@1.7.2: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - - prosemirror-dropcursor@1.8.3: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - prosemirror-view: 1.42.3 - - prosemirror-gapcursor@1.4.1: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-view: 1.42.3 - - prosemirror-history@1.5.0: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - prosemirror-view: 1.42.3 - rope-sequence: 1.3.4 - - prosemirror-inputrules@1.5.1: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - - prosemirror-keymap@1.2.3: - dependencies: - prosemirror-state: 1.4.4 - w3c-keyname: 2.2.8 - - prosemirror-model@1.25.11: - dependencies: - orderedmap: 2.1.1 - - prosemirror-schema-list@1.5.1: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - - prosemirror-state@1.4.4: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-transform: 1.12.1 - prosemirror-view: 1.42.3 - - prosemirror-tables@1.8.5: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - prosemirror-view: 1.42.3 - - prosemirror-transform@1.12.1: - dependencies: - prosemirror-model: 1.25.11 - - prosemirror-view@1.42.3: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.1 - proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -22523,8 +22250,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.5 '@rolldown/binding-win32-x64-msvc': 1.2.5 - rope-sequence@1.3.4: {} - roughjs@4.6.6: dependencies: hachure-fill: 0.5.2 @@ -22949,6 +22674,8 @@ snapshots: structured-headers@0.4.1: {} + style-mod@4.1.4: {} + style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -23076,8 +22803,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 tinypool@2.1.2: {} diff --git a/third-party-licenses.config.json b/third-party-licenses.config.json index e2fd1d86317c18bd8bbc83e4e7c71273feb8c52a..12fcaff088e6bbe6990d57c20f8ee72122a1e32c 100644 --- a/third-party-licenses.config.json +++ b/third-party-licenses.config.json @@ -99,6 +99,14 @@ "noticeFile": "native/libghostty-vt/LICENSE", "sourceUrl": "https://github.com/ghostty-org/ghostty" }, + { + "bundles": ["assets", "web"], + "license": "OFL-1.1", + "name": "Recursive", + "noticeFile": "apps/web/src/assets/fonts/Recursive-OFL.txt", + "sourceUrl": "https://github.com/arrowtype/recursive", + "version": "1.085" + }, { "bundles": ["assets", "web"], "license": "OFL-1.1", -- 2.54.0

?r3K6>2!FeQ{vUioeUEj0M{$0`0JIUM>hadO3f)muj*a`8HD z5k>Lt@JGx8)s%nDCITqY_?qH6Q|V&PPrL;n8+?e4pIm#WIfXOIY-dZOv1FRYcVtrt z`%WlZrjej?B(7^DCm7)^0g$AOHqz;)v|om}VWENRDTo&JDfJ+V6Sg&ySo<(}kv~7a zkh}MFtK+-JfS)Eh{mVO#D&a8y0t;5L@H)n$3@j?IlzOeOb7#PCHdO~Qq+DX>OjV^5 z??dji4$*g%Ub~%}0;Vnm;We0hqQfQh@#vOkVr>eF2QhfmogLE37ZlJ&Wj2i?)Ekx; z&6QiqkS!%xVg`!t-h?tb!bR6_*1n*b?IOO+)7`>JCnRQX7T?d<-BIP_z^$LSfcUsb zHBd;DP<&`UEOBB%ZrZEGPu`nWq{^~b#nHmdZoU1%N^FrlOe_|hH zoIXBick-HD0;{YKittTyzPJtiDZVDK{?v}bID8XO)%3p$55f^oVOnHGWIsN57kRZi z!zv3tr*+|pS!uDTmduyA;2x)PH%lKKo9dv1aju8zmUzHs3A^k_-Zd%hwX`q*wL4O0zp0O-^n(fWYfo z=r0?@ayvEQ?o`}W6`p{L7z`vrA@8r6^NvWVX3Jurh*5)U;6kR`SX2RJYQz_vCVZaO zP#P~yu-v|nM5?ES{QPP_g6!1E3YRD%8uB6QAiHd3rIy?q@yUE^K;TeU!NpXrX6`gAMQ|cBeNi#{V9+ODb1#LA;X^EVl z424!av)uvhT?wUcO|jUZcA|mLA44DdBb5s4*OKabd%MCGt$5!t4D%$3?PEx?$a{S? ze@q;IsNg1BhZtJ6^dq;(zk4y@8d5)?&iN4jyh-)-7MgmKt5&L(7>9V6Wp zjT2p;+roD$u1jnvicu!!w2YkF2f2o1mK8?A_Y>W^=qB~wbSN|^siBlmZv8X(h6 z6(z<>tWez}%rB*l^WjXMMFKT!bUrtt;xZd51DNoUbG)C+m}Q0c=<-!qP+Y9*C5AK8 zn!hWfhJzg?ohA-G2962Io9XcL|+U^!*PqMD3;4Ku; zg8%+qtuh>b>Ma^2SiA4RlwnbO)*jJbvQY6`s=){=kTQdG+eqO$q7MjHx@MZd>f3Tx$N zx8JM-(06;-M25*ORZQ5@9kyO|W6wM?{My?iY>DpOAc{rm?=&i~6WLkDBz*)Ta}!www>}vU-lAF2|6uN;BtD0-Q>|7aO4qfHs`IXr>@Ik zP)!D3m&493U5fWw?e^u!q)&2aQJ>C-u05$vH8ghMhwjPP)BEi7d-0ZEnZj(3mf;Hh zT{y>BTsV8NXq-a=EoR=c*J9Ak%o>oODT2+}(wC~t^NGNRoB;P^cj6&9m; z2OnZ+&ZLjv6xj+7drVayom{W4A{yTe*vV)qoB!-Pjg4j|Z+2Hi%W=P##WJ7F@6n@h zh5py!t<~@Xb@pxP2j4onG%Ydn-s`5JwkrtCGQ9MsX_1qu4eYV?=Tm0b9$wtg2<_49 z17PAKn09e39YS;6RF9`VwM;wR54j2b^WF7Trlg7_6K&AzpWANO!{$Rp9dz3Dz4i25 z`CGJ?E$qdqNgaksfJiYE)n{YNkYMnZ_?vFFrIvY??X6+snF_y=r%5dI-hDiuheh)D z@JNDD9=NXOk(*87FlIOQ+G|McXo{k$TB;qvOr|h={?2r>pkh9c_GnSll%cqYI#$VK zAk;cfnJ@GC^wKU++oiQDiASX{L@RggHrS&&CQj23`*r>(Ul(-v8b!Y7Vci7izX<<% zy8q9&supmmAI3?q6BX}mEi&9xF$fYtLohnX@Oqh*)e;O11Q(HK+bikH<3uoGT=-TX zi+$^2yI#+BKvCBWsM0$uERT#Lhk)o2t;fWrHcc1+ML@d0$%f~Q)`2KFcG%WFsOS5` z3e6*rd(M5cBF&xdDx{%(oP8E6S$$#hn0=WEZ|>Ml%;p*W_p(^#7lwP3A4M}JOxkra zb>HIGjZT2|TIswIM%LlgmHL|%8hi*Oys`-)Y4yU(KmTBq>Ii#IU~wVn7>G|1S#Ee* zZAmbF8UJ_90SfezE<58Q)rJGb{}#`@khQ1$!#VWg<$yGgzNNKkW< za68h0^g=6C7Ux}7kx{`Mt_Lw#I@{%xKS8CJOneTm$DiK8o4EZtkg!K5_nq+s;Wbya zDQ$?Yx~eLb1Zoqtf{a(Yag1G;9$JzTtejEf=W25~3TMRcOkd_FPJ4Eb3i&G+#&*4R z{5Z`e^oL7)GNOSOv=rNM(QBaOg)oo7>Jim|^1(R(Jm*!wE2>TSt5dTu3oPqys>WGt zgAwo<;L3K9QZ*mUp1s6h`o;|Du3O%#x4tQBobcrmob6jVcir`iF^avbmO^tr8?~oD zY9}uCg9LL|288!0)bc^PPD`Lk07QXNnl-(zAybZpMSxMI6&n*f@K*p26?5LKsS@JP zD$2qL@EOQI1?dzEr&;jUq8@_Pn4VBx170e1ddPLjUlHoHA5ZQ-0`IJVXZT<4^9&40 zB!IYZ1HnkaHbne7e}q34+~Frk@V_cRbpJsJ=yw6{N2LGbJEy~4!ai8qtzlV0f6nuQ zxfe>x&U%p_g{mY>&rEj7dWtFKy`EYuMrB;^A7e9X5%`;>_Nfd(0%z4clGtyiWl<<> zLveA+xr=%{v*`Bhga2Z4MJ=~-+?WOSDN`S=rKi_pyDToSCnO!s%*6w|S2i&FQtb&M%kBJb2gRIiK8H3pS-X%u;I-d~9)DcbUeV z#UcwU{#6Uss`y3P%W2{MK-2w1S`+#@)GhskwMUM~q+JaIpF8N|Zp=g}MxU2~m!7Ns z1c%3a5bOEC(fOx$dr^0{X19`k=zVR7thWM&QyMZEsp%{>Tq_P9n%RvORbfb2w3B|C zG+#g*DwJVhIoMB#dlS?z25#WF9+n4`p2ZfnFBf1@M3q$aBIm=mePp~{cB1DTOhjyy zgK_upARVVei=I%4z%&LuFC2L`$K(n5LC(p!xQBPretc|rJH((vG33P-%}0u@63QQl z$pAy>bXMaQrauZbb<1&SDN-#TkIS*dRFJ*l{|nuYlSQ1T`|FiiRT}o!{Mh%jE%Iag z7>q=Sp|qKy6kUuadh9H3v#s!VQU3k&f5;jNy#bkx61->WP&^Q}TRO}7)LEl%C-h-a zKe3nJkK+v#sKd{9#?iztqaq_~bB#tzG*tqS?R6d(DyA2AdlP-WgBD>X5fL$?s}N@Gv#)XR6mu|F4OC8O9G?_P#C6j>1J;n~_8 zyIyI{2r?}75#@P~zZ2YDaNX~BFEBfYHu?w=TTQ9@JH2)f&v}&G`3;0_IhTeImdCVN^An{ zF@fN*d?^oqF4A(iPIZ<(w`#WYZn20a=c==rlI<;5dT<}FzS!nT6Qe48$Y>^+rgL;6lkm5 zS;!aAPW0gh1F6vzCc<3jPvV5jp8bSLWp8VbDm_;OmMy$eP74SuVv0psOLzAxd zaL=CL1zUTa{z%!m&^nFY(6w?gzv^{9?Sy`GFV!)F*_FY#YjTM7Oow2%RsOOZ7^b6- z+Z>>JI(XQ%MUPr`B#D~BbE2naQ%ThuW@oZvs*4o&#%3?;61v?*&(t1t2*#Nbpo~HR zX5tSI)TJhCw;{XLL~c2W07gjmDX+`2?q~4k*BstFxCc9SAy!-5mf=1Qt01Rddl2jP-Rc3CY$gC(8|8xqmPi){MZfWv z3}!vaQf1RB2|{jI3PL=8({K6(TVXycOm`x;>a=uPQy3hQETdjg?zH`S!ex>c`MJMb z7Ykc?Jxo@2X_LdHygXmYG3OLryPNyTRy^T({?lJgrY{QFi8!t7(^Qx_F4=5$j-J?dR+CmX3`a8oz%b;Len80>uFcsep=ciOh zZ0{R}_~>@;oiHvhXYH!KWt_)vt}m9$3qJM8maM?ELJxN?@9~Y_?q=Ve-U6#}e0NX; zW>u?Bfxl+!U35t;{XQ3rz&M``H);f(aZV)-(wQ+*bW^IT-g=TR1)Y}VXS1sd<4a}!>6zemhZFUy>r=#-tMU(!Q zkdehsVE&d0p;q}5FxyhZy6(9NHRn1a3eEOH2^QK_)PAo*PnZ0jI1FdL;?J8XkXU$5n&y+Xyj)s%CAhVPcPF4fxw%51)PV-M;H@0@|vIh**2E+q!paDU~~;3efJ_TNRP+ zDCk>HKHgvQNg{o@P9g#)5nZBk4o~!#A7_X$^LeFhYhKIAkkuV8a@FMus*%G1%@HR9b)9;l#$FXHJTf8&gx`tzGoYJYH?2x)G!d$E6X+0_EZR=lsd|m1} z;yKPHU1~tf8b=~)k7&iS0RKVmn<4&d8HD0zPX@{pMU7wN^Uz$zzCZ?JB+el$bFew5l)?A!>a?;{(SSDy^ z|}gSzfK7Y|YE0C*BW$wcf-DRlSex6GaV2GXMyK+>Uog zHlWA7iMM$LVAAmy@J89U?H)NWYsptxDXFR1ZamQZl*TazV_U;zxd53#b%=3XPD1Me zJ%$q=EEOQa>!qYTG{r>RyQG+Mt6HoeGT3|!y7T7-Qr~l1b#?L=taO0Lmwz7(NAhTr zNHvM3Y>wXn&N$_q5loW~3YJ<-dL@=RLWt!(+$(=^H8pZ`uZ9FthtY29vikJ zgZN0wjiB{HmQYqi%ndSoa%QByw9s(Ap4RH6K@f|lOka>{3#vVYm|D6oC{mO^hzS9g9S+A|>msu?%_x}ZU>#L+^OH>U}$x+qD-BD6woKu|njQD)6w zWu4BxriHy61GoTug-05y&0=PlRCN_o&h_N}tfc6UhERm7jo_3OHGG50l|(kjOc8Cj zs#l)z2vAo^R$9)wzR>9WtsE)net!75-B$@!Rd^%YD>`VTD#pyPif*DaDNb^ zR5Ej&Z3paL?yMq#%pwJ*SzT^eWs-5}FV7r`!qJA<1 z4(|5y)_2q--w!~~Ga$h(E{U$;+rxl9osUUbeV_DOK9d19y#qVAm;L#bNLe}c3)+N- zfK6Y(x=oYNciT#I(n;~H^ya)h*)7D7xXp<@!_Yz+o+gE9nw|AU*J54=EmFz0U5q3i zTG(5@B+^OdLz10_8t#btIa)<<^<+4N6E3Hjlj$(aW-)8oPxE(F#FGYsZYCqZ^6}%_ z7qas~l!Yf*0p(}A@2UbB;60pQTC5NArHyzhjBhTDEidf# zd!v-Uh_v&q-pT9#^&!YNQ7*iH!*BzYa@={wGAPuOwyp|T%NwBAs^xUNn#~4#hLVD` z^{Wk#9kVtzq06K%bJ)wbfYqxT3F@Ppj+#(>^;Q9GQzNJ^BF2-64aR0-kNS!>$!SPL z?;2W1w2--^JQk$XZ9|$K#Za{6A-(-+sfBL47T-hXTLD+!E=V4tCsJ3@LbmpSl!Xb@gVM~@Fl_7V^YAu8%owojk9_=siQtl zdz}aGxRw=}q!*QwB!ezW)BtA3uKH3ydW9z#@qNlH_GyGCImWkmdCe zHnWKe+E6D-BOr7Rg`AS@c-m%mxxKOHXucLpir5UCH31&Y1=b?z78Ui)Sm68fK(%@V zFR6UG(Z?#@?!pQ#h0wTcu_vxN7Hd!=>hx8|>0U}4HjYTQOpFW`?B==J_A9#FSW8Qk zZMb213aNxk5L`izCT5hKy9tOXj8>lhfOg{Bx*?#?mPgI8fj=>mA zUlaN@y%6q|RZWrnpd|^o5fIvSHp4T_5@^u&KU9 zN40|~mnTOgmF09pIsXBqHA{gsUu56YR7JokekC8nQjG=RJFq5UVp+6Tuh>F|u|FvO z31>ID#>jqZ3TcIq@Uhlx`oK%U__2wq#O@opvcCE4uf*7iG4^a{|DP!!!hLT=S;@9< z){APNs+f2`N;)`ex$8Z4I&KKX8=j{T(vYlaS!Ut24F1#5EE0}jW zEobZxpoIa~X{+*_B~t`5y;pD(Z`tIJE|oM$Q*tWG{i@e6wpVK>^MrV&a^aVG_?mHrL|j8Y%i_)7G+4&2 z%8LU4FBzOdlg``jn}zYHYdW}fA$VXY>e6~d^o>oe+>-(IlbG}7opV1=xaL)q=?rg$ z)XnuU)c`t=W%%ox07RYU7Lgg;=lQ(eI55rg>e-Kbd-_e5EDe}(U*q=ZwP|cz6|bsQ z!L;noKhs3igVwQjh_7;gsxz=$)Lg!YV;w3x8yj)!MmEV7C47A`hbJB-ydP5nK4p%AhIOGyzcZhGObDcNs#zHqu zY1puPqAk|A94Xf(#5ljce__gnR4`r`SN`GJaYfDgN#=svk@q_byk%I5_Q2{$;d2i8 zpH!xEx3Ep==*r+E)@W| zX#)^cAKLCBrLW-$qW4-Zvmnp%tpYC^u$r%50bjr`7vPl-;G`VLx55jrJX96n#s*w3 zyj1ZD{5e4I%=mW;xCk!G0_|z8Q`uad;BY<nD2 zNos3)SCPi=nsAH5N$J4mN8q!cM4We%(wBM6Sq>pDKba@<7@xf?ng|@MdFR6rRr-}P zm>KF^$7bN1VP+FnBgtN^sXTUmZeHG6s{HC`M1QNK;@8Jd^0VH-#cwP2$eB+5B0(lF zo6LKDNs+22;T!w-lMkN-xKXys&1v4d7pL?keO%xyi91YHVdyJ;Fi<&|@4?D{h3=*;>A5xf{#ZK=NqeIx*$0Ao}Ua zk3Yjks7dUbe?J%iOe_t$xAg~uo<~H`^2F|z4;LH23sI_!$XN^@Ella9Nw zWwH{K0=G7~F|=Dp2N`>hO0tPNE+E`34l4te^L77Tb9876W7NgLUABCDW^`;w&>>(* z^vu-z(6hDf?!WQwpRjViXZKA1&TH<3Q8?S5a=RdR`ilLFY$P3Pe}nnXEMznQWrKiU z-DZ|KSff^y@4UgLdnVDZ>FVsO@IJD{xXg+uF2%C*gK@y1GzoFQl@T zI8=(f>Eb-4&#F%Ee;Ileh1fo4hEJJxN_<5cn!4ug4?M$j92@Hh1DO8@I9-{3DoIu_ zx?tBfjm9f4BZx+)Ape_!-*83}#xMGJz&nil`n!w9vBJ4gE5NSp7SmbRlyrqdM_WjE zwe=IqW5a>D|1@2Cv=`CZ8oh91YwN(+iS1dk*-+PTr&|rFkVB`v>JZ*^grdb>?&**# z?z4sP{GA!S2xxxzdi%9o=&I73*Wsi3m~V=py|Cz11jlFZ%OXWH%;z8JeRO1;FzO%N zbNgaoBk?-nxla=)FMr*4w>_#=fpv%1UM@x}0h~U&7pbA!|IH6v4|bVA^faR^);70z zLEsE>{o>Gi4r*Dhm%6eNEOD>shn(nzxWmPP<*oB;Yq#(SV#iCJZp>gdwlvMKOywES z85)v?Dm}~e1Y190>iswhXmXhbV^xOoC(q<$ViGN1EB?9LR=SBdo~?QHr-vGsFEl5B z!lOjJ*M=|V!U5N=?)3T3?I8FUrnBB!tX_IWM(lG~ z_y5@%OYSGf19r`avXwG#?cM$3E^PG38d!7)+?2wLTdlUCZjL9TSL3IYRH$lgkM(MD ze13dxmnUutHq6~G&S|a-V6V}3pnRFp^7XI3%R@-4RqFnW6OH!^qiIXB-EV5+dAetL z3NW{*w7fy?EqjtM5n``xls4EtayHwhN>gXwrkEJu6{o@#v;vCfO3sknaMSLV^P_b3 z6!yDpo%0Z`2Kzh)0|=*Gmamr^^-C6c-|dVFe!oDIk_RUd#~!9S%G; zpi6|a9WmR#GYgXBe)%{V49c#vK3As>mKBo|557=8gxoS*Q{o|07F?Mp`Gnz?!c#-TuGxWj@;6p&`tdrKm4ykX zE5Tvj8881p4i9&`zds7piG!wsF9@)hwrt_<%6Q{Z{v>={VBMQG@lYWe*TNz*YD2r0 zn^slZw#@5SB5=o&Tc_vyzRbhUR3T*SLE3^x(JlEq1#);?ytur4F^7f@l|lp>ziumU z%O!=y31iVax4z{W)o@GR_A#!1^C;@EV77aNBSOtDKUx)&EmyYHe@~GiYj=rs25z^q zTj0L`j=s5bI){E+0K(L`gihY36ndrl(hG=0Sgf6b)gq$>&A(Ore2NWN3qI&(nofEt#sfCz_Y+Xo||q+F~$pr9F;6S`V}D*L@nb& z=Jyw9XpVfwMp5BZ^lZp3#8*Sr5iu@=vogHlDU4rSoWSZ2b$DYHbY`{n2z6C70aH+q zoDBzYYHO7wa_v#yVA5baoa{Guw`zIcYiX<_mhel&f7r0J4RQ9$3q%;`^Ih>`Soc3&fgmow}$lZf}R)51uRa8`)a}suavaEH}$ZYPzIl9^0cF)rGJ25{h z1gJL`2EivPxn2)=PK7cmumZNTW2O!G<@q*V?rHdTU1^1t9+ zh)LRyDNX54xmF0*8SJa)92M>A{igf-(T_-)0)eQL_6^uWo~@T0X_F0<43)#z$FRtv z&j_CQMOlWE3q09i1TP!#2DzRG-xd8CdCow^Ue<92#KIbJC8Fhn>?qKj2lL63tkf6H zowv4JXv0X?6>nIoG^%v~5YITSbd2BblqPVYG-B+nC=fM-La_-$zR@Z=`5wa9q-m!% z;!uZPz33PuLZm{OZ{8&5(XbgC3i+)+ReG|vt|{DSMI<>|&XrHVGl5k8j<3>b4-f!{ z$_kUONtLIoRo^5OCXB!JGc&9m$fK(ZL6c3wPPR;On`mA>UhXI4P8tb@Fzo*9r$hRj zH*}ans!w@(GwtTZV7TnU>fap#>u>`1s8%Q9p2~jP0o-zrfyHJCP7)&FU3ux#z=c?ystgLrWw*9Jh0#!PQ39k`XdI zVawU(L&6r(%m!BFotOkYbtVnkjVs?TYOl_&N_Zmd%;ids2I?$1&UU>y(zMDaA4AR&29Ph@PQy#JpCT;6$dx;S?bCwMXdXH zf->D}caF{u9xH`ZsNF1_>P)lfne@UNAQvs8#iHbN=UHgQP%mdP3@|xdEZF5br~wZl zsx`2yZgZ%2qw~n&AK}_8QgusiL23kV@RdE6$Lp-%f1f)8zc(ekU}sLOdB#$VSn^S$ z25haNA6XHP5{>)1OsEn9ad=M57E0edKJ<;2uoldF#^f%C`)~xnTPJT`cL(@SpHV;d z9be3f4C%*Lujd`7oOueI#16bo0s$DdOhSO;KDs1>ypVghN~M3^oAbuY6L1k5Ph&ja zY-%hUTFGzc+1Ho@#XI3A4<%x;A=2&KBa-cY>2U^q4!WhqM-)Sog{#A{TLDAQ|2w(G&yBtEfpz_n8W(9kg zU}!1?@Ud~oUsBN)UuaH{LLH7KUuqtJAsSz2pV!FuU91d-(?GUcoJg3Y56Mop)|^Vt z@w;6oy|J|0aPmoD3ThDK95v$Vh#1R8b1MIW$g)$G#m^JNKz9ow!eTNrmX zm5X!_$A;{4G&2-`h0KiaWZ<;$0?Xl+bTOQ~qN9tt0+F(v{D92>^t`S=m2u87EItP` zZEbYpqA*({roBUD|I6)lJvAlQ3JUg{KG+6ef!IT2GcptnRYYTb&moCQscmw117P!V z8s9}oNf;zS01qyp`9Cr^RO!#>SrUt)Ms0L|urD_tu%Mf*rqftep5Rl*xQtWNBF3#j z0YRVddA(lu>(kSN>}WhgYW1!I8UL9dx7~%D-KleBS^Y(P*O#wISkt@HhJ3{P@ATw+29bvV+?L zcn3P{)5}l4w|#xWum~l2*~C>~*-iU;^+S%~QPDL}nG2+X4vy+4S8CHNe#Z@^klOwOhyaseoL(uf4=+Ah_|XWg zKkuq}b)JdOlX>C(ynhzX{kg~OoC`+}TRQx%OHYEWGsTAam{A&J=ioY9^t#8+`j5zO zj-)g)&6YkRSOd}+oPMJ`v{bZ{B9tNYhZTsjo44r2WVYc9r8Xig+uNh8p|egF!=Ak-kc7ODNF~lKj=l0lJmk(bNU2oyB7P?v^c@pSCD8I#vf_ zb2bxG`YCMM{5DzKbXpUmQ6jQf4G`I zNwQyaUu5wgk?)Z=SM94Z)1_CbmBBdmw7}XY7)iqfUn9Rw?GBWVgAdk(>VPHA`X?{h z5F#@)F9&UZ!{LyxO)C8RG;kYL2kFlC1;waz1`ycm22v7whD?QOd+Zh>sAFCsg}f`g zAV>s^%Ts$LWn#1=O0ue(%e>GYdqokU#^71isc5Hb{C43bxRPpTHOzUt*}2BJKDafAL(O*ylO%%F8OwD{&fY;_P(UKU5)6(WsTp~Z-?)IQf<+Cx5E zq{&*)VM25AJkbB$2Nu1OEJGT9{e^xz-h?ZF$(j$|ALt9bdXz4HzG5&c{2V6S{QP{}s#a35bEft}`?<>9QdZjmvVZck1!05VP&4p-pL=N2|GxXQdJ)0ejMy{nM9c zO>C)_G%?K;W)Ak*{jI~)Et`MmwTG|jdG1K3E~770uOvg5=Las?r}B}kQy6&acWK{O zpJcjc{`yU`3Z_Ydv!}tr))n}hF#adyt7u+3?d6M!A0Ht)t6NeqYottZnSCa!3pl5?KxsxHLpU&y!;~rGw*`|9~ur& zRMOvs-OnF={Lx{zb4l&~Urh5!%4jELl_hdffOf!sIS)HRBXVd!<`$9xYEbW7eSgP~ zK7Dps7t?nP)0{zj>Wzn{YHtL)y!L<$-$J;n>rBdvkL?JtiS`(pA!0ON!8EUFUl-dT z56l|y%eMf~sMR1dMgfgh7rS9gk2Ob|DeO2mYb9uJ%oH=s%S%%j9Fqu#(@Wy!WJM}5 zMd5$&0~}7yKw$&lB?vgWhi27N9RFtW{GzmNK^=1B7MMD&p#V8;1crG$OiD+@HYm76 zkZFE*Z?_s(+uiObfgJ?J>j!Oc_O1;vUYB0j)GzMcia8GN>N+HAqiQd@GK+2=Bkfg` zZJblipgM&D07RVGf7WK>iQOl>kj~LrD^*vQNASbb#jX?FQEpJIC8Ze)GL?T`(hhqu z7*aQ%mru@6Z<>Tn>C!koSJN-*Fj`FpyI8XuZ(I`G)3%BT6ZJ)1N15F^E9)(xfKRVx zT~rveRO(=w*-w)F-JRX{%bUC}R4nmC_pdMt{ug20kf}iD1!wckqEhyu%-WQ~QF0Ta zy1AP}`moNBLo~aIX|QQu$iQWVnQiyb_(`=Y1x3bcoA`IWCGoko0IM8eL~{>~(m%0X zG(9?I^=&J(>&}P#^ok!W$&sHDX!q4LdiYr#D($)_tn$8o?2FcKL7OYr}&j{ITV5@>Q-oXu8==eDAcF&=v`_MR*y>lC?Km9eF zg2dWojGt}}{|oGp*oBC*i3m}G_Q+4hqinynS&_vZtxlg(H7z<6P&l!CtBbDwSrmkJ z(WdjUil!GuH)Lo9UQTN4;mKY6(P|Qy(!nls1^|7S<+yc2jP(-73sMavfc}>bEMI0a zAu@leK6^u$*eB;>Cvc9BJp|bqQc7~zreU)L;Q}lC)9VU_L}?xWD`yFHyw7`qc16>q z4S7X!WI5X@9QUQ2;%Fu%d)O)rkA32f*1f8b?_W=T!S3|_pksOLZW?66D}Ov4xeU91 zLq$!=7~(C9?PbU&zWnT#PmXu6O@KwQ;rIs5kfEN2UXnD{*WRwy2e~F=uk;U|xctce z-U%&xkzK8H|wyuv3gxb*DRG=XVCMZQ88!pu#WTj;fOvHlg`$Ra08$ zWmOv4z(`cq&osmml%(aBpK3HHTeO7RFzGZ?5LC85zMujti zknL{So0~Lbfm@lzHs`0WpLN6j?ewcWK796&{oK;$Ia%Ya?W5MU4g|`Jub-VYxq+LI zP2qp~)&Bd(B;B7>fA`g=>k`O3z^-;C);CEeeP*roM)iVIv1l5W zhgC3RL`~_7>y{Qge^X^r?b`E~zn0V*2X*JLY8_n#t0@Y(+9E<5ukUAB z7?-ze0I1DnVu*BX&;S8Fri|CtpzUycZ{t)RHCxIjP06E3&$_kZ@)WswK?pJ3HN$O% zSrkVx0Bm~$rJv*bC%=V&yNcO;^d~+?ErrHBhW8=(m33yqiaE!pJk3%hgp5s_FFqlQ z+Rp;qtYciy9;FGOkj|)QwJGY2Ik>UOVV5;^Su13JE#Hartyq0Z&H#$7>SCNC7-iWZ$03oVzQBp&_3{c0a}+kev2kmZ9(*| zXJx25@!58)Do1_b_~d(gHR2uV7-7Wy8W9lDsf0JXenwigW+JqFlbVjDk2xEcODR+f zwG;&saPj{{yD9N~1woYky(JXYf|4{VaGHxz@Zp3GM#6{n;@y(0wG0@O?OssOR!7~p z^(uD|aI9PJ?@#*19_nsxytGzpDGr~0Gn?8G#@$0iA`@Y^vAylNdBCQ-+zr89pqXiJ ztY&r)>Skv0Jm79-M-yl@>!v)vC~9FcB&6U;i9*ICFImoWy&&nVbX5&I?QD}4j|sYv z4!Mhm23)E^nWj``ZjD~@nIL@}Iju(woK*^fxdm2f=LD9Lmq{5C<<<_Fb!zP?$~GiF zs5|N$f^~edtM5EgU#T?TS>&jEqUOB~4I_mgd*L*R zII-IF!xqKw&hYZdNuvb1N3a8*fg@cOChSp)AJg?m!XUc}aeQzxokXxl|Hu@^eHpp((TP= zs~uwHld$EJtNQjgXr;K%qnSu>Ce!Tfo@8VV+UJQ(QRG&mJ;m^XWY&6zXP2M-tVks) z|3S7#27>4{TgCx=sN zjaFdDJ|A!3FHTS(<)V@$63Ey)wm4%MyIk7cPTQ+jn-7A7Yx7e|Osir33bTo{+&BS= ziY!f&SWlmv2$QsoT%jw7-vo(h%p=!$b+h6RA5fN-I722^sL4f-!jv4XrU% zMezb;zypPXB5Yv>2|WhTAm3u~WAVseQt1C2y~np_AXYr2k16pr%|oGK)xKs(PQi>{ zd@LQ|Y=SsdhIP7@*|`>aU1Y1?k#Hu21%HdppHl#sGsB=NI=cGJE0K@iZzsv=2=3jU z%GCawz>&G97SG#^zT8mL!eLqKKt7Q3q`o%-$2`ljGiCn{f+zB$Kw?$stzV{st#x{b z=q*tCif4*n1N=%crh$AM}~nk!!J_bP*{I8Gmgb> zCI6$$I@~$;spRfodpbZnS#A+N-99QWE@*3PcKcjwZa#WLg}E*fYVqZXsYz^v8Qb{2 zO0f3KZgzuag&9R~c}Lx^m2Ao$U6zzg*ne&11`>5^X}TT=#5B?BH8JleliFbTYm#E$ z4$^sR?xL)SiPpSj>Jg%*_o~#gWRFCZSDnjV2=}~)l-OEoUiIcGlwVxQ!xTro_t8Mw zpxaprY>tL?*B!z&@aw+d6Y?*MQIaTg`LotfINrfDqvp z@ih-Rj-{6jhs|4G7nf+&XtA)BgJAPvvIh&zX3&zA% zgdak@#G25J&zq5SvKABsvE2Kd`YnL%CtI3M6v@)j zRG4nW{Qyvj_EeF?l0}u7PLkuJw#4&$L2ms1o6>%=Z?h@h0ZB({hzLw6kTxDSe7UBW zxTPp4a|_Qz3r-M1+X0y-6r7&@df%%BNFIbVd?=ey4wE2_X2}#wJrSyuVa7z_zwtOv zV%c8}_t7M~@ikGL_E`*B*g#|DlH=Vpu~Bim#0brKF=GBiCc8myb2nA+ z00&cI;5kZt{rb}t^hx|P>#~{Dn&Z7SGWX=w z>}Pn20oH{@3XHi{KDb~7qK9wTw;mIZb|wq1ndpBI55jpEhRwjC6T6bAv9?L#I=M@- zdoNax6cjutmX2N=|6IqcR1lrLWcwLjjqm?sXOr8xnE}ozq~PNxL>}KZZ0)m|@9J#K z&mDM&SHt{MBl2_+exQc1M4Z{>l)L}Zl;t?UxEh`9@3)Ypq3+%{a@Z4CT)did( zi|(vdpUo!YQMaL%E2i&j3~|v3_%Xt>m?JA#q~^V?lbtpmXuETGcMWf?hT>`RAUgJE z@6fX;5=Yx#B?K$RNB&tuTV_AI#&jdf?4{|`u2=37?R{d?B5bG7abEA@KTF5m+JEZ~ z2K_HOuaT!P<1zr00T%vA;h;zJ--~I}`2V5^)k-G)<_)bPrzfguOb5|DEV4d^Wu)@HTTAb#2zYjc*3NwjD1hKp5^{IG9+g+)A zl3katA?q`6m<#daS}UIXFY0Na->Bgi?nPR zv^LhG$an1N)kkjn(x?4z-q}I%1K+L?8I76X{?fZ5Fxs?FT7joBf#NJ%C9Pj&qIk0y z@kW^Rrly^TYPjYPi=g>yEeB$lH&%xwgN#-T;u5}en(ex6>P3_niaU+03{IZ{o=pc<@a3&@rRA`(aisr>Wb=jJRbU2Xgr)<{QP{?J^lDQ9M zN0#zW=T1QQbbew46|T}i<$TU1&x6qcyBN=v3CRVvEmQeB=%;FCUsbkEM!F7P$Y1)4 zJq8}XMr-M3si;hi&A^m(BF4VXaLi&aIXBu304SJa?QQ=3Y@U15Y%^Jarg)_8PL_C? zGD0(JOwb7RD>j!(8H2p#{zR9wLIQ7XA$?;Lw(+%5i#J@4t*zSUevoVa&MdWYGxwoO zA$8pa^{2<}(dO@LHuhTcY^M^evT=Rqc!gB9KSa&>IqBzeOJy~Ptf(Kv^WnyhA znOtbUm0`-pf>Z)Eo*>Y-$?oTCK3px@JLqF6c4K3sSJ`ozxfJ)fLY1>yuE()eJ(Q(g zcdS>r1{!>t-vhi(L%0$7_b4uLSOoh@EYxf-D?2hLX7J3^T`Ib+qwJwWcD<`4tvGQ? zBWD@jjNUJvVnB>pfv!Bq?EO}iJBJrRirh?M*)d4i6hjhhB2r2mM(DmHjl+3hSE&7f zY~A6FS3tum=ew|nvuMc|%4zdI`CE=m@90G;{0dT>`-ebLhmkV`Ky|YlSe)A#%(=oo zy5UV~&Cd(L5qW|D%&OhDbPKprcVdb}*y9%@qhAR%;b5zbRdCHJq1QljsImD9D1 z#d+FNSe63`al-$W7Na?IQBSh}U8g-S&;gqkd6&RyNMape;#<(ix_bSq65r<|u@5Xy zEb#>IqqtC$0ueiJG#mq(rF$MVZ?>jPkNE4+Mx zTMN7>z@Pzl%3Zv-zxThQ%kbqf8`Yq&ir0_dQ#teXsIyO=LGQ_o(?y5dJq^p%*4FI@ z)}pm>G31p8l&v`5O=v$r;&0d-R#i*ZcFOtCMF87({!73j=?rA6xT^|_<90B)<^CoB z`k%kucGU~2O+8fcj!sX1wM~6ixpgd#F0w+zWR6J>oAu>UJVsCuv#Dv-FJ5d4t504k z3H6YEN6M@x-)T{}`Mwjm;w)a`t&h7hkE0U#=5JqPQ7Q^)u$lQC$qplzjrK%GQ#_fu z;>^S+LiGcuO zhF3Sz1lF_n=tOJkgvgj)UN}Pv^RVBpZa|R?#X|K}@RFszq;h`SxmL!Hq1px2N?G zw`gh+c(O?`e2^|`nn|=LGwJm7&8e@5EW*GAnsUKO>*wpi`MsYUR%`{IW$~2k_Ga%qt>%bw9F;GWmSJOKfnP zQ}ssiaho7Hg~X6_3j!zK-1zwd+lI$U4Zy{1lknq&U}cYi`*38#U&bnN!U?%M0x7E~ z*I&P`=GaB|VID8duHze+DnIMdOZ|~0G9LJw1}VySG(XBwR4nws83&dTi_6!rE%E^l z;x~hZx{%6wtje%ZaUB8Fu=BXo#!^tiGrWCrHSrg+PRb&xo7n7lzVWUi2dRd_S|A#X z#9JGRiQh^^JgxS{QP0e)6UuZLpS<`)6HCrgkdOv))}K7;Yl1o0Eo%?mp0`eI4QH8L zO7@qAN0Mcdh_hB)RN!K;1FwaVp1yMR>QHu&p?NJ6vNk;W{?mj$8OwHH2OImZ4{PY_ zng~qCCf9Xh=~A38K_PSdiavbd$rQI>?Dus9p&{L=@FJ{xRL4>q5R3(|9t z$rCD-x!O9{W_&sca%V&s_p#UU@ENJ!dC){c8kYh(8;L`!N{krrUOJ6!P{*?79uPBr zJTP6)kZCe6z@TiAZ5w7#BaJA@1c5p+!#J(&Q~4msh;Y`uao*fNK@rL$wM?~C-^@XL z{qdk)Q5ngmkvv@4bVz`iuiLS0O7W!?!B(p2NC?|44Qo)B7984_EzssKv*PIJSc?Vt z61diimx2ls|14Wz^L=6^<$aegV=0|?(r0T(bNw3O9!yzM9VBwZqtOcNh7F{|r3DIS z?_LTs(U&5$Rti>yA~U3gMsgAEmsTaC~mAR z!k%Lfm{ySJf^2*#6(W|UN6zvrN;Rb`9%EUbZVEL1T8vf<;7QE1Wpg)*(;f4QBANpQ zo%2cx1{c0kvrCK`z#MR^(_@R+Z8IBRv0YBK-h)!+f7>OGczn@4JXKR~3_`ZAGLAVP z^9HYjewHf&oqV*z-~!i21I_#BxbLO|$>l{^hENock(hb_rlV2jbd#Y7MKN(5Hp}d4 zV1RtI<&qi+fM>)K6B1Mb4%9Jz3wJgh*>JWoPoh3ji>kCraOPU`bqeLaiNS|a#SWvn z47o~B(9%Y$m7{BRi=>tF(9#n=ZX-hjy~FvF830wbTkI0Q70oB+HX?~~li}rz5efs0 z(!LC8Ip%?JbOu^pAH(nq`-`pVcP~&AWJuwtz(BXw)L<*WiQM;=G?aolr84K($;ot- zMZz0B?bUxasFdm}TTv)!w81Ggwv1N5PF&*U;5K_9fLhovMFRx8 zV3N#STt{xT_cac^b(|-D7JIrPGGU08=Gcxs`-Imd5k)xKcXWaBhDkV23s^STe>-p@ zoB>;+MNhr0(f}6CT0W+ncaRU946_E<(}4nr22ir{9@#81$-D#+ZC9F-y{N*E66_{t ztt+gG+SG&z5z5u|c@)hMu^%ScG7(cREmazO>*;U6pa1cvr+#LJ+D=jb)tmv&$E8mx zDla+*l1R-r{&+cx6~3RMy@4%~?wX%GTzl86s#@wlxKVqLfsHkuys!rtQI)OzzhcWf zX+iVBQDi=rTR@ofQ;br6tMo14L(TN(?2NB_2L&LyGVvv`sg~(4v7kfP{L@wSE}syP zQ>ZxDJZ@yA;(qPHb{cnyk$0rkDkz$zYk790LkOm}hcY^YutPiu46S4lYE35E& z`R^m_7wQ&THzRX3wc2^h?&fyOls1!CqpGY!mj94iX@Q0}G^tS-s%oN$7X3);@?>pq zPv275HnXIxX$n;=b8I>RrVm9TxY|`$KP_L z*D-*nrbuJWa;4Emg?NcFYSwCjjUIzH!_%kX==DXv7Pd#y%Ng;&*&X5x)b5rem`={C z6k(ei4|^gVMhc0%pq$?X-ky|fCGwRp-wQv9OGqwCHF1he%nuaL#3g&oe#A021RdH1C6hJGHu?;r=zmy zCYOWZyF(W@@+~#$dOmi6#|&-8W-AkW4@46}HyWsCKI!riPf)^^#30&pj+ARZn-NP7?pLJajbw5L=bnWryJJY{PzWwnOw*lJ z2jpA1d5Uqwua(pG5-G!j@#QG!dHtu*Rozryv-VBPKD~M618>`NJ^vw?F}yxL+LC(r zCvljJdCq#Xo6hc8z1%aI$;C7rXA4u-xbLOiN4wMG>5sFPc6A&&wS=aF$!!N**_QkV zpTv84x>)WA;enAdZx7jy?&IG0#R0u?{Z+*@$@@}MRvT73(if9!gLI*CoPKUMHf;ax ztMSm{H@j1lbur=#BG;RkT8m+Pd36sfnY*0Qvh&!~&wBVG@!D`0 zsz9jeZwI?w|CE8fHvBLqH$d3;c*2=VEApRY-#`*RVVws6%Xa0|g}xkyelALLy{vc} zR`_|z!ZL{Aq$y7?ONIi{-k4&fs!2ino6lewDY<;pPU>~^aW}nIqr@-iD=>H%7%bbb z(&jH`>*m5)a0SE*%QK@mRiP}GR&)%xbCNR}rC95G2yt3~=B>A(R^n2AqE`S*Rd^>6 zgqo7Ti?Oh}K+XR!`Uk~0wkac{3CuJ{;btH{8U;gm`q&}586vo?DSH#b%381o1Hg`& z8nOfmg3B0Wu#JWj^&!=w`qT-7$DeI0E0JfY14#HnE&zfg4>OQPkjL63-BKSMrfnb+ zt_f|9cAsM0dDTTq@KhY3th*ZB0080f5=?!zNLUBSPUFPm)Mqz5{Qu89=V@Ec;>ODm zmWd~P9PofuArQZI^#x`>jaP`fnxT*rtQ3%Er$f`5*w z6~I&o2s*0%VrdydsbDO#X=Ai+F`L;zDzn~C0swGf{n__12&tHRJ_@%GikMM{(?ou! zzhu(v7MC|^9MPKjE@vY$V!tk;;BcDwGH)ZE&7@q=Ksb$WM{8PT*>TBLU?yMLT=Q-O z@Wh_|6P=$?3dhwpzgevp*!JJ%Gr!J9`zWw{w~L5WU8Lt<`NMzY+*WZ)TW%85XqcqD za-6D4OHRa2B-L>9dffFg29c<|ygQzrg311DmiNlvvP-t};OX!)vBGe}EeP?w9ma0T zw@6JMD{@Adr9~fciA;MIP6pnhS?*8d4`&qtT*2e3=4HMOeCtG{7IGVxq`TG3%&p}@ z?Q*c=B#5dw&fy*maygv&V8K(=B$a&NhV?^*Q+D?B*J}#V+q0>$kP6=lt(0q!@FfK+n;mS z#=Lp1WkyHDQ#W+wiy@Ai0pcz76N$3vI7`DID0p99(Z67|6 zOLR7KuJ9Oj3bRGsli^a_%OmfBx5s4C7_oSLW3E)ymH;wziOkzDSLk_RHvilH{^Hr; z3+FgZJT5i7mZH*hr&4u+wR(e|jff#|2>{x;1j!AXOnIdw6hUMW4{aHqIU-WOHo4rI zLp$;L!9saAwHnV0l4^heOtFrr`Sce?Ml4O;aVNiK*OeM)C|u7R!nyx$2#f>Q+O4l& zHmEL#{B>Rh*I4>I0Z=M!l1sy2QS{ov5UpDs zCfI$Ja(3(g$1Sm?%wy!A0!Z^Ydnw-A$p8LHEHntT;-3Pr|Lk3{t(1Lt@(o zHZDx^U`t*};gb8SC^yYm_g7)PzjdXrn%eIMUj{q&dve+WLZ?Xt z-Yx5->EMI|sAcVUwN=v4sxIXE(%MgAvVx3=I+09e>E)Kf%D3vknI*=w&hJeEN~Yw^ zwGpmIbigtkOhZP|HwmGyp#KdcN1w9P`FQ_fLJOi=y>;p;-w+<}-@122Uov-@RV1ytUi?^ghteNeM zt+f@0#0?bpVV*|gA2-<02}DPCIwzF2+GJ&bLygMV_h@iTHp!g@ZKAlw0DT!Dna2P| zxisQ*QJKhZ2rdpNEUQgBiOKjSX&93@B-iC;>%mCT7Khkh>}#*a43|}*VQc?C^#oa5 zMR;~wK4UM%W`Mgb7g3DP3GN!4Oa|k?lD3dcSTxB4&gy8UFB_{!o*;#uOEN( z(gKjz96n`S@ch=uw$2x~epvZtph^-dY~N~zZCH!p z+^=(V>hC+~HJJ+G<=C3JQD?oC8TxIVE2`fnXMs`^7O@%ym-bvQW)9!5S{jZ{+k?~2aO`_7L}(@h$f;V9wi4}>{J^T%wt1xoG{wrh&iLaKkyDU6W1M&W za>3WIf^;T9GNf9aqPOTeQ2Z|*F-O6PmQYgddZue$XB%_;86SEZq-ra2*oF))YKxoA z=fMV&;o|}QD$CO4?Bd0Xi`lifb%s%0KPhta>fw$9;{5EcWZ^~tv~xV=2urF52X9l^ za)@b~dBO(LE;Q$P>IoK-3!HPgbOf50e8&MQz(G8dP~PcUE?G9fDoy*kgd<;5`&5Ef z5o|+)x0#ltDqz`I7@3*;fwb=qPJYGY*NHA~$S&D0Z|NZqm{`Q%iO$x50uWpEy^YPezf^qd#Ro71OU-TFfIxF1sO%L-{u^rC9RgS;lURe zn8sXdBvWyyAlK~BT7*nZs(AY}_7!Ulzox!;yR&ZDbqF-y8K3=#;{bX@Qil~0PI2iYf%%B~ZLsx>W zOoPFE#u6qRWYIY?q}Q3BPJcLEEO+{-mVPZtfri%~@V~qSo6~*Hsu{Pn@fON1k#&dM<3*pX4i z=eidjtsa?LRep-RZmw?oHdt&#=U3<$5p(iE#I<%AWgMO?AdRqPFZW2KkRi zWrs6~-e!$|tz{RA5r2MF>~m{9Gs8Pt!D(pYim!hXtAalFtms0HK~2&QWvvP!!lHxb zn8p};G>$tgv8qUdNZ?A3A))3`aOESX+;-BJ3rVFKs=%?F!2^eOHB}Zx8Yb$@ECzqZ z7bjtaFiewPfPGQ{^eG!~(ObFw8V*>SgIfTcQ36pnw_?~`g-76XmCN6}8nsHl{E5YK zlw+%nPd*wGf+l8f0=?NjPO&eoGrh@Fc|qU5R*gJx(V6iF&>M@{WEHj5X4zlR0s8EK zlXV3h0of48HpE4T7}qDDj$5L-8g}|HHk%x>? zz@3%VGr|NCtF$9stlGOuc{dW-^{<%nHH$Z1zg?VKE`1zAuSD%}s%VFZSva7J{$ZA> z$KSmzXi+;iR<{tJF9?$9juIiz2e%9^{o`mylSoWc2rvf5RxqGk&6|kWc~3CNGly;H z8{4(XdaA2WUudPZ>v_)6O3-ae_M|7(fOl&^pe}}k6NlLA-teO#&VYYOcl_V=qSASe zO*=YZl;XhSToQ=c$fE^O3}kIkOW~(Cm`ui_@%T)i?Z)=yW9?ms&B3aBPyTDIl9@uG z=Zi@)pw##bD7F)wuPvYNC)6BUzGvxHeK8z_abR3cr*q97=;U1MfZ8!^Kk|S$+6tOf zJHOExr$AHHPRY4@UqFt*-FxF5;j)7PK3-)vjbUZ;Atdxb+=)h~<6eGrNdM4=dN+m` z(qMPP2&Z$E5gmd2kqio;dKw) zEY=rJx_+$uPWj(83(-wCu8`+?tbV=Ss-pj%yL0Y`JMc`p=6d+LCx)s5Pv15cc`0(A zWupAlC@<@KT2*yPv$Qb%&}c1kZ?jr2zx^tJUwVfIS7ZnIAMVG2(GO@{2Ib9{qLP1Y zl7!!#E%2cUL1q5>>7}4L+P+WUb(#@VXyvuU_dQ&zoLcVF&N86_r-Ep@n~?7^qTdZV z9!7Ss{Iy&w6sxcxCf0JGSX(dLGQ)|zE2alXml?o$21ScEXdY(zycnHPy~iEZw@pu3 zS6Wiu@OwQ_f6aqc-ziNJU*P3IMeNw$f3~>3zM7*Fr?FVVD)B4)$Wcs7e)cQPcUlpZ z(uG@OIq066HDZ3(>k%cl%R{8jJ$(2oKs?%MDa_m5ibbOu6?Ot}e)nT6`;ANsPiX_1 zH1kmCytUf_PC6QViBp={&tvO@_n)SM3*LlQ)YGDzo6Y|CG|Wjr`it%$=y~DIOsy~_ z{66>g-gf!PQrK2iD|l_Ns=Z%&bKhQNG7wNDbVo&w$(5L}xoJ~Ih%%)Y%3$|zPG7mR z=0T6vRjiS6nzTy&p3n0sjw&#UrV7&aZ)!)4d4;zM6j(37`2w%2o<=PJAI;1tpd8PI zULWQX!P_CS26Vrykb)0-Mh3KV*w`MX(dvr46TOh>ele|cKYnP-r4{9iBeS6pL(Tn= z^SvCg@;Vu2NXH&Xr9jxXIY84;DxS+)w%8vEk)%yr4hlF(^OD_7VP*yC_V&%yI%Ud{ z-YFN8{l*^L$Sv;C>|ITR(p9)>bo?V8^NUU8qXx*n@!KA4z2}u9#&(;{55~sB#-N7z z&M|NoyvM<3-U^m}J*%cCB3j+yc`!!E)hcfG0nO++&JcYauKL08k9f>~U068t5M^)k z8}x(sJfz0hJ&-#y7ljB#pr*TC+AIBxsa z4Au&l>j{iGw7`MV0~Z)=x%9*|L)7Gd0Z2g06j-P2o4ckvy}|e|z#jnHDdXOfKG?Zl|e>C#UG{NaWVoJuQj!l%E#>ldB9!@dq+ zJpU1lwAn12mkhfvC@;Wn?$EW}WoAshKCq)@0yP;J1Sus)^{JLb4!k9-I$e9&aOnf+ z&7Vp?uYe2O_jvBZr#vSqbHJd`Gdt5-RI+KSHcgl1gvwZ#@Ib2qO!0@VS2X1>m#eHO zPNKs;e)Yt7%zJ~w`_fI@bvAB)E^mc9=)|=75>6TZdf22c3g%9^z`95}!&ZMypq2H6 zkZ63CvH9VXbD0Ls2s5k=bWgWGX@|td(6;ETVAX;6GzUQdhNw#>53hE;o^8deLEGv( zW#u6p6iwz0Lk6ssg6_il1(Glh5e_F|HN(+0nFy{&>3FPUBqgX~4vz-Y_JiWI)87;@8yklKpkiZi4FG1Ke@1TsAoobFEKeKf650Q z%c5fi3F8JkArF4h-l@vMeNnT>y2nDA^l0Z=-vH9eJ+;E|MnByLXzCdBfbf@Y8u5Z; zB;2bJ6=&lgvyD1wIpLsJ#(C3f2+;e$7HM46&YTvCqUs3c^dD8ghVWfl4JfTzs?<8v zWOYYAKJdGpHlx0+hqvRe=9X4E!(kr`pqdjZTFb||BQOjayZm*t)?;PD|MTrF+6-T< zK0+vM_D8l1OD4CAm1dh{yjC1Ih743ylPPU~j%oE&ZP4mselr6gVx3%OnpWKG^GJ&P zl;3-VPb`t5>?aBQ6e2cCxAVY~F+)APTS%H5L6Ds3EuAI@>{D3oV#fXW2PLV&6m*ee zU@w;O^f?_nIM^9@S`Dxu#MmCcI}1$pP=P(Z2D{kX<47!@v?MT22g~>M-)=r_(8bKFg2ygG^}!2A*TN9=T#6XUlns611IAF9Vz+-P^_E3n(|6>uU7w=Z>y3GznT ze7+bzBB9yp>qh%jMm==BUGj%ItJzT1O4v9Q5E4r4w-b?Ql0sjL>eD>-LR)iOJmDxB zp-@`P`JCA5n2oy4H)OH$Mj6wb&!*#89~4MX)p7F7oXbK@xNrjwY^{jW$O)~=zufBp z*9!Mt@Y@C;!L7gS>A#Hs{yl=7%{WSBZdV@~NyQrBFwvFW*fyTqlw;&km#iZBs;a<4 z@$XH-g|GfHW~x5lrt#^V>d@p4nuex^Or#o^Tp2;iF?7y`dQg0%#ne`%pNv|zO#2wY zYsEa5Hd!FCb!`bD4$}Vl$LBUAfsatC-+$>OGd6!p1P*U$?K6W!ZUBHq0EtlaP?qc= zm;^xjpQ6uIYshRh&R*NRSc6!f4YS5QE8Tg8M6N+(Rr&eIWmY#-JmOZ^kR*}YwOM5I z-q!4--wrhP)*v%S9V;7-ZIaNr5nFP+%mdCp5fVyN>z}m{duV?tVkU6Bz@RqJzr5u* zJ~#W13o#P0NJ!%h7Zq5_XE$_5jCkjlTr4H0--v9nDY%*CC%GaX84SASyt?ML8>PdS z`&FGsh64p7xP89$I60zj>Cj+uTv;AkDt+}85I#;4xgz3@ja|9yznePIRs`!35d5j- z3r;}RrTsi*w8Z4bv-^(@ih-h!AQwOqbbKLLIetI zq%KTdE1S<}@0_cfCzun3s8!@mSk}g=m_>HWjRdM400~bQ)Ix5|Z;RV9y!Bcwf}0`- z(6;RvNqpe(z}z$tT%8SAdH*0VZI~e{I{}Xf)C@}H5h$rQg!bx2+jyyzZ~c_jm8M0- zF=u4MRO~Eg*H_W}%G(;Wxv^-|{;j(`yJlA6ZMOi|i?!~46$j4xgx#wMq$Hg?@O88_ zg6rJPyyeD?fGBHusj7$jQdzZ#;_xy$@9eF|k~24r!A;Cz3SYg40QUM@>~f>U&ra+* zFn5T<3vj5A=mcS<5ZWlkK#bW}r5MsObj9*NmkAdN&iQx+l_3N0 z)}a$RR@*@E<^lKoXY!A(BJ@LQL$LDDyT za18{-8Yodd^Fs|gjcg3f?Krd@SKpSsX30)G`fRHr1F#I9cm{CP;K`@nFK=OJO0dRL z@+?TYmNxPc@)wZDEMvqp&oAow?4vvQ!9DT{wpCt2R6Q=U{G4S$4q%ccNeP+l1gMId z(ui0AhsX`w3?Bb6EM2!)%JLNNITA|i=`gLM+;{lK*3U2Rtmz5QdT7BpdZi=q9Vm!W zzmKtBD`oU$?j%2B>P3ie8_8)W&MmXlGybwlRzN!}~R z#1P|T6i5w8_8Q^;j~Dmft~D$(GU+r!!!}x_LjVFOmJq?{{Q%BDzAR4I0ko|L#Xa)C z-osHL;T8BN(ypaQ;Blwa=1+7-o@YTnf~f1cNCTTUqR>w!&W)zR$%A$^3jKXBU#^;_ zb1tF4al_x2My7ARx_X69^7sVP@EXGWI7l5wA^IQHT^=832CkpB(1p@d)-55TI`^;< zW5n%ntU)-b{wFcDt91h3-Co(b`toK6V#c1TRC*Rn40l#wkCe+I!~Z{~2WeV1rNp!B z81$du$`#Z{*ndllU|?zMfn(lLz)3!b?{fp`wd|-hl?pe&emu4RHruw*-Tw*_sUhOv z!N-L;$dQ;>JQj{+3e4@|-01rMU29&g*e0_@%x0ugX=-jNH??_}W%Q4K7GB~5xj<#) z!kCV>mD#zS{&5_`3=U%Sfc(}?+KWZPzPQu?dpA(G`WU$T1UofTR_k-6mRS_fGIhr+2)K! zO*gP8y*t++b>Y80?5O??5U{qb8xDSfmNaN7r-6(*t1&k8{{YTF9u}xq(4wGG#!sfp zqDoipqxQVRMEr)>|CD|sr3H4YX}UuX!tx4Hi&J>_W?^YiC~icUm)NGkpsLGeT_hTo*{R!_IvzG%35QGm_gy!z_uD5V$e9X~;rL z&SX30Ua5}lfH{a~?ie{ZF|VYl~%?|H_P z2NN4H9lQfb;0hG?<^3YN04L=$h=IH0OUCz?=W=;vC;20#$+ffq!EzIzmA;IVo3s-| zBUT1MSVnFdvxZ~cP?hdhtFVKS%1ha z4uL+$AZWbIe-sOVnyis4bIYQ2Jq!mJj0kH`fA#$fOC7@FOrMjKI4&5}=R5m^f(Uw9 zv=7TfH!67-=ssiLeL+fR6^lF^hXmmcZ~JCyB<=;{1Gv!d=cLPWhSO?VK_>Cg3wQ$K+({@de z6u>seqefqmvmG_9PSwiTRthmFmyj!nnjTKh%(_S4+GC(*d3WNj3@csJB^(v(>JA&4J-H9aiRxiMD9O3} zGi(M+OlNJT1IxL(V1^V>m!lp>hDIu+Qx!JIIPBtR-1Qa80hg8B+ia+0V1;tgqNEyp zU6Jrg%stDwx`N>H4JZSt3n@`lN~Y$~9^d>}Uh7soW|z4+55LD!hX-}xChiA#{B%}1 z(`eK35)28%AAh?Sb=O*R>$N{wTpv%nbx<1g#(Umq@%uGCI9e}#w6{oYQ)|Q8X(1Fr zPB?7XZWF*Yh!egw7|!1h{1I2;L*z$!L6)aN_Q=WiodU`_ke%CNNv9NBSV zGcxkf=$#y=$p*@G(?j0uSVoVQsaI^uTxVeAHYE=j@JO<8(aCr3?6h~jX=L2(=#j%3)aZOcRy9dJt@_p8I*%DGT`_>FDm>zC#i($ybQzfGVpY|f7$ zG(74eF^iY4)4TLeh*TTa4tF4iK?CP?-Q6rLoM@-ImwhXQT5Zl&Aeisvu<635JCzAa z)_pun5HteBN%|$vN+S;>9UMLP<4Z%w_cUHh)sxXd`fb)Bz>Ub>9{OeOSD46~&U*^e z@=~o5vb2htP_lNFEoL5l2RtuEJ&xo7EITkaS?(SkK~AIB<6l1sfs1MT85pdxL}r#R z_Nv&rs@sq&giLzC;7>6PgtdHo5;20LK0V((7U5lt(>*^CD4%Uo7fHIfx6x#MOYNuz zPsB-neK<-co^?uaY|vtDxJ+d(D-5CCohJ}ZVCcw|MB|`^tk3+$gYuCuNp@pGxpb06 z8sN96hL^#)g>w@oKFS#ZnLY_8x3M4euv+grTQDb--Os6kr)<8?0k^}I(=PW=eQ=1H zE6~)_gmSYg{jnN!XZXvUvGO0|www+=ab^(ShfzewLg7*h=O(v z*z@i;8mIhnZnP1nv2_=l3wz#<6mTJj)+W8~;bkqSxAoy!J!>j^2%eU{`^DEIp5q(p z7CKe`kI`7*BUjouf6Rr7*_azE^VJm3$!u|5L+Z!$nJ?1miWXUP%C%Ej&k*LZtPT(r zFtWU8*(vw`$zGZ;?0(TMB$6&>jh^q`wf z7S^V|7-pB73SdbYN{<}pFqipQAF^{orgkyQJC~1$cYX9mxm~IPb+y|V`Rql<$MMU;@{fIA^B)8vOn@V`DQRsuL~6YC+_N2%suk z%X&p@up8V~n&9$HWgh#mc5xi6wwG<2gM91Wh%QOlH1PWv@v!D*5B|~>$dJ1$p~sR3 zOrkKPffJ$&;m__x0!{B5zG~WX?TN&bFHG7T&4WEpo2_ddXP%c>eutjph3F*K(H{FY zD0FU~bCVJIxld2(kHS+RBG$ikBns>{`@0(=6Xs20fozex)cvW>Pd|NE zY1@90Gd;GW1d z84q9TPuBM<4AF3$91Jkk6Q$WnLJ4zj+X2s|H7W|j%y=QZ-t5TR{+N6l>8Wg)eR4G1 zIm8?lED_jwF^iQxuQc4k^QAcuqDRM|c0LGB3ZWuB4=k}QV@=uZ3d(&E@Y@;?&u{I# zDsTOUm;b^~3MeUgTL0@tBSZO7JlEGKpm z8~EBB+{w_%4iZhwrwb!4v|v{Is;a?QMZ12Cy}jcm1A@t|J`I+U^2Vo$*6PdbIg#30 z&x4+be38Ta>EWrySAmyZV4ERzy=xrB5aIz#H*H?5!a5qfS@07lK^oQ;G_OXt+Id<6 zg3_qY=RY^est?{{rQ@U5qe4MMuTLgd2RO}Z8Q8oJFP6wp?b?u8@1L+sY1id8hEf4> z{lKq`zC3$2Aznri1;6oJ!XgRkp7C0_m!_Utvn1Z2q$YoO_FVZyO_Qc^W+2KH<0nAQ>xk*})5Qe$#+XRdd9d46E#$`ifS|8$s?NnCe|_0iE%X z#KsLrrkx;i7BF`;De9k~S_Ij3s;o_0oS4xcCzwHtXKC}*xr`pW@xoQ;#OW zgl_OqVP7m(jtVXDy5dB!jN4b@<6>IsPg`i;<-8-r$g|u3)ZBZ*7vg%atUv6po355yYURlw6FQN zeQ`RlZbUw<^IEOn88@0G@Ok?QE88uf3H{Qf1uVQn`9RPyI*8F+fuRO6YHO zLhpgzAN-j0T5G50f!qykI$FcSYCO;U@Odu)s5fT2uP;d*J1eb|7!nAn;D{p0(D>n) zI7cO*S;^SgN(Q9Q*FL1l#Au|T5SC6G8I5zA)zSN{A{7Fs+Jv)6mt^!3O7}=$qT*?= z&Agbr;R5mv3kl9)e*2LdyFJuNU{Ce|Z`9yM^ERTQxc&1Xz$)ir72^!lr2T5QtKnvk zQjadQp*8reK%;~kPlp7r$Mj0LL1m~0(GpFqdD*3b!p#L`aNE(LM>f~KJa``Isy>Yh zvae;Iy?iWFX9!Sk9tncR6Q?=as6Hy%rDnb`>^?%i62jxH6V%%nBK%X^k` zTjAZCB|z|h5T7H7OuG1_;zHHa-pZu>ll1=H7QBt`ZhFEN`5_|V8D_IT4Zb$d6Hhxh z1nsoubW3qzi#$2Gkb&NZ8PDkIfUm7@P;o%Q#ku%jc`mH5s##&(Y&n-nz%mb$E-?}^ zDgJKNR}cC(1MT~_8bQYZ68BJh|1I{QrvPZLYFliPCrcNqR=Pct>Q6($!S(l@$?g5` ztn;UD3H4_WVN7YB)P16%Zb-Plg*6e+g#7+MAgHTwBvxSl;M;-%b6quxEOgAU$Qaaq z5@v{OXkv79Y>d}j4t;Ut*SEXE=}V(cile$@ETb`rz^ zCLuODmJ6W5r51^Q_#KQNfo{!SH(^MTC|gpOq(Qv!o46e#y- zPy%3fydUky2g5SY_&pUnSknnE-N#QQi?;0l5K-+WU6bjEQUF~3jEKjHnQ57H#{OBb zs13c{uuYvog5SnJgioMYqkh*&*~I7mKzp&BZ^t%1tvWt6w2hr84=g)hTqgm6Q!i(Y zf;Tm~mTEN@zL7dZW?FkQ9+SC4s8w%lV6@dfV8D7z*;Vzf+FFWo4*^KzKEdi}>P%js zbU@0fO&vm${lmdou;ycC+BLg4%B79?=eUd5(AQ4doN}Y^vw?(6iX4i8SORQJamLLHQZ=1^oL3W|s0uz?%FGRUonpB{Ht? zHmH6GGh1^=vW&{tsGyHjC=afp024XYL zhy9SEtYcsXYYbi4Sjhi1_?D4?Zx#N`{sKN$xJh{=P(yriSN~BSm(|Hu0NX@=!gu`L zrS&FR&%1u3S9aPvMMP2L0kZKlqP{Rb#_ah`n;Dc~hs@QUK7*(n+;np7cY(g`Fugud zk8sj7%HSGHWDqUrUfc5!{`#qQnWS*r9F5*w`f1N`ff%MWkxKb;mMEtT@+<~J)ek$Alj=`lcqW>1{}ap< ztS*nkA&Go}C?;MB*8|}{TwXk>KUNi)(rrPz_0sp2+k6bugPEdcWr4c60(2eT2kTN{4XPhHFdF208B*|Iy2Ed^ zhHLL9f6nC3^K0@Tyj+)dGb4Qc6WY9P{U>39I}gZL#Z_TUeUMFqUAEhkE`jT<2wNZv=hs#A_}$m8KQ$b*9{DgHJ5~O) z1vUwzgN4~KranUlE`L)o+QG#n3IYaS{Gsb537zcCvv1P%O*ES=X?0vlaKAvM;ulM~ zl&`;&{<{2El-S2b_mSCW?-z4o9H{YvZ>FEB;Rkkd8ey}_+r+TP- zl@i~HFLSu)R4okR*w%Evoa^z%bu~bG(f8d?UHTiRx$012wPeEpUuuGWQC*F#PE=Q>&zwN&5;Ux0MeXbN)&$c;r>{{Y_elW^++1G}R@ zF0umHNIbnIHa=co{%f~k7+@9Ts1gCyJmk$HCx{Coszano$2_iBZ^q?y(||PNdsnN_ zmu*)JGE~df(k^H33{Y`x`gTyfyoG5y>_=s-jAUkYL5(>)&r zT{2^yA8jCh8O#1+!mYeEtG%xj1#^yEg(YV1oS<%}*1u|p}{V~d64mqhjpGgEI&P8YwITuA# zTO73R=|gLdzdj^pWcbsDTK}Z$`F_Kg%9a`I5kQKu$_2ZYMU zyp&-3@KW`(E@>>wFg>6p%ITT-8uW&?weR=pOsSu|&gQ(Adj-wPYr@RF!~qAi6!RVn z+p$lo7Td8$8G35!l(5+LwOmDb(1Xm zmJ?%z-&_~5mX>)|8_mjydYwh?;2XW+3JC_%<_F(#d|jn+1Vyp>kgM43z9bK z0TCcC4_R)!?mbTJs$``GW*e55wMj>qWZDBO0b~#)k%k|5mMoB2RExau>phXFrH5>j zCu1W6)i})PSbQNlAdb=%j;&Lc#n<-J`M)ytwH+*Xpg=Jk%t0cU9;Z4Ul4;M3kba(L z@fU4A?3byp>-@A2ZoL}+yXIwGJHsUU??3E6M!S~lcAx$}^jfUoAO!r@N9m+3;Mq~f z7D<=Z0~qEx7MCSa$#^WSPMu?^h+46!$xfb|h|hhHy{klD85}dpNS?Ej!K;2`s01WJ zxH)QcCfTuGt6E2e0dO!zzX+~e9jr>AixeGk1gZLTt#mg>?U&CY9f${q& z;mHn^M_FHB>DA8Hg}AuTnN2bftw#!PX~l(3F{!f(<6^b*sRlByo}#ex>I-9e4oH+7 zFx@u_@!#HQqu|2{Mss=TcGgELIEyFK_+oHu**7v1FRQi6C-}^FG9Ok(AbsF9gOX9} zbj3AQj4-WOwH${vk5HpdvJK>-sKYHvl4hzD$x8eYw%wf;#N<_u!Z4)#kP`)t^G0W0 zSbx}H;tF$WT4iMRX5{c$|Kc=U!&^#dSM`oZ*4-0=*kNs2lB8) zr_O0bf3~DNAuI5ZRWbL(Z9CvIDlSzlfY6FZyp^sWIjM%EPc?wkK13S(NGa)1DEsnLOB;#wMM^xXwC$7}=xug-nXccGsvxkNr8cetM*CQ^aF8dE)L=@;KMqOVIF0Mn56D|s?;ir zG{D@jL#}2TeQlg&=&@L4FG9jfh)CQgK4x%$ktNXWH|er zA}Cx^6-H;Nv~IzcxBBi?pkgNk!M}Sz!;p){hUzHSC;EsObPR?d-e=K_SkWn+69=lS zOb`_2Kfz;0K^^)w<7M)jLFR;Y$G2;N@I$@+TD;pNt!t>P|5%^|6A;lG>^x05TwI;i z$LRLkLBdGfC^E?_zL|1T(RYlxS*2bi9=;fSvs5?7QRL`_Ex4IRUR0fP9(8{@yaVIC z7Z4U$jRC0pKgJmkmWvbRJBZcc0~IiwGVHsumyasE60(2% zK5h^v=Zd;>3ex)ODY+`d>YVF@!gAyGpa7SGf}8^wTgvH`JriQvV=!=k`HkR zMOn!|e5w6{Rr3Xw!ic7Yl_|8&i~eFiKUl6-=3`u@L4o(4r8>U4Odrn3R%{Ze@{>)5mo!=mW?AJ;<}PUrb*Hw|S_ zD-CQ?gPcZY7zN->g`)(k;#e{A-oAy84{okm!+noJk@pU&vOzVUu zwZMn1$JR|Z%j(DNQ8Ef9f_@Ne3D{Y3gn2!^qhPyP+wsk(&h_muH>x?-WC)J?>W^ILwy%kOL&A`W|rv3pBnYSkTJ2~u+*?k?Fn3G5aUvMo>pc74oyGWV>+A_HK6 z+&NxiN?%M0TR%>EsCwfEV)~?9x$>)qTJ8pFb0rBo)xg!T*B* zOF*>0;FFjAY6hems!|?+?>b=ex2)+?z|ZJQ$Hrl9mBfxz392l|T1FQLB2S~`tOTJJ zPMITyEPIs=jZ31BQ)eWw%%8gH`m_ZlCB4`4Nbcr<*)Qla2fRK%BtVi)_BQeaT37W^ z#eVx5N8OhaE<2zTgh~o@IAM;Ha3-W7ul8=zjq^8#21R($g8xdbzZ`gNWSy~kPboj~ zBPw;{yp(Is&uw`_843BDlckkbBWxsDMBK}4Sljqz%l6CgZRvsvO9N&}OQ%?iyT#9O zvM>m#OcigO1keBGu9dCZDiwoe-)wM^LZ-LYa%9>jq=CkXFroUkeiT%cG-*y8!G;Eq zBpEyM9g+}2%rFS;enDqfD&7B=bx#f z`-te<FL6CRV}255v14LmDlUER z4JlwHPc(y#=n79S-#{PSn6C|xJcNuT;`#9qZ7aU1mirJm#s?3ood`Oz=CW=7a5QLX z#cqtk=SiE?yYb3I*G4L*52E-nyYYF zks?fCYo|$WmM#??%d46Wy{6?UPtJZi5!h~k*sRhnZBO~|8e z?X-Z9C7AJx6y0lPwQOvu4~hwPzB1&8 zOcZ)T-XAc6)t_a9w^{A&#H-{8A*!k5kTKvEGOL(+iZV?Fqu8pc>$9F#;-XKrq^9p% zR$*OdXM0`@YTi+n_}=5PvE7sE5|xx2moK8yqNc7-6vo@x)h-_fyml>1ciOJsCK{1b zuz0h7ghDkPYQTHi((>F^3JKMxz@Lb2Q(Nph14DtzL6A4`%(sc38phdOc@bWIvBn1v zVF#_(!*w6x%BJzmgrVnGj~gHd=G| zNH*MDRH1v9wNn;cOL$=$b#2oY%J>C1o%S=-9LkE^OX&J=>GK>PP>ESqGbpmJqR+d# zsx3D!tC!GdvBuVSsM3ZhsNp}>Tn5HG+2X7m)jJ=Y*0K+@2Bsa6>ZkCus7Ym@{(r2X zA5y}5wY#+I{7@5nXc2!-+Q&?P?!04S)+Z3*a&z|7Vc?F)!j}vo!K-#6_dxMWQsI0XK0HV?Drf~JeY ze&8!>tMYCZ8?uX`&IBr*MYHE7A%&(&Ipqz20k$X+b^Y$I`7+$Zx^q{20D9^#uXPUx zVQx9mJ62R5n3NOBoLo^4?cJq22QZzwiYH)=7$r3xPTWeBo>&7ZYl^`vZCaP{N zU?4L7rFYynzZxM)LQrjtl5;Y_U1v;^QUh(-z>s1ij$_G_6{RR* z0H^vrNi0s}UL~;s>=k@vdx+I+n zGxyPvsZ3iGGHI)(@!2^q?d*g8{iSlRW}Uf~22bs_gX7LeB7@`patqdKATxY4b+p?u zZ4wKVn>XJzlG_z`w-vxK6L{$c*nF-CLceBT?_Npv;Y4eKY9GYy!#PV66R=~7gN`skCVv$m4-;|njzoHHF^tU*hS09m1JX{_%8)xLiEJ^W2t|M1f z+Vy(A@` znfe}B5?qNIbeN4$2##Ps&E*Oz30mIHzcg3$9mVhN9gQ_xlvQt1cBsRtgRNnIA1ETL z(q8q4MX$Nc)FTPEu}hhILf+}0uFBZOvgI0 znVpa#fY{iXJ=Hnh))!G|%yh$C=S0}+%i!wI2htXVy2UX&CmxySB?i7Xvh_ zZUgA&A7HvL!Uh!`jYI-ccG)HVEZxBYojtdrhNuuT?VyIFD*SDv44d)#lo$L;DhjNWDRpME#CegpPVcHTWlet#Hle;h{ciM+%Rbm%K;Q>p*d#4 zY==5+_^)NA3~gX&&dvR21$2zdF@a1Ix%oL}Q2T7=2f?5dEumxEuDoBl&-8dv=!@$J zZ^+oJJ%zYWe>8L1REHMqcdkBwnq**|CNp{_o$BFWc!;X{j%G9~uCQ|qFeXhj2!9#M zq}nO0Fib2|dt;_IauXp0Ske7FOy@+@nRKZ!)!1+e(+E{Xx2PFWYs+R-ugg?LpMTYS zYF*PYDR6RN;J1WU8;tkJMDO^h97A-k`Xm$js7p8lhQxZXKww!v56IA|B9Pp3RCA5`5H4(zTm zuv0!j3p=G69WPz#eNF*ewOXXXN7*fO*&jc!aM3QjAN&C~rQ%Yo$kg+TEB$l%73-|Q zARV3ERB>|3{mR-fS-zXOb^^Opj)_wKDsOk9cfHq_eGrINtZjZ4_ij(W>yeRtuZvyd zYOCsGB$Nq34~Ib9e#aEVJJ)a4MpO1750K)1_k z3c@5rint_l{7O3fbMeuyeuzx{lrM(%-v9@n{k!Lr3-F&wf8||FDDrKA_jGO3MY4Hx zci`C3rOb-*U)8_pnNO)WCo8{W#3kisW`4tSbE2f6Q%!Q4Ibm{oh}4vap)45F{-*R( zu&{Rt)fSD+&53FlU&hTSatw!ClARlp9u$BTaEe(UOaBqQU;qGUcArZNk9=FaS69=8 z>#PWus=HWs1l+g9=Bioq-#e!!=F@y~Hb2kqoYxZ%k`*v&miw?edJr3oZa-5-m+&O8 zBO9p-j0^GE>p60wV*3tz`JC(MoZ|Pb$OrypW?ogq(0e}(09D>V&13+DZB@#R*k%Jc zOuRGJa7j^fZO8wjqUk!NvDVa`Sx>FjOsGohbOwGla|HY;QtrcnD16Y zm90IGHO{ozKbL4=;2_{SxYp zWhYOPL?K+9YdN^y02@RAS6a^`sEFJ+F0jo9i?=L;xKj#5$Dc!`dcE9|l6juZ-YpjkI^Fbol|`3oCzYUUT8h}W3Q!uTnkKHQs#DJy7*y>*{{^rP5smyt~Pk>l*$- z)dIrB=Jfu$D$enfq^+8Wr(4tMVT;HV!dae_qeeN(o(q6bEfw|v#uA(F831PWn6e|2 zAtxf08sa&1;iq~ur&1A7pBqt{kW^JLhXp$T;QDIqW_zzpEU9Xej_qR2*jna{W2@Eg z;Bigz&xXPKz z)G$r{b}5#quw|JOky~2c{!HZdd`BpLZ(8H(5M$(h+3%gt3F(~z0I+Q&(G2UIk2xY%JV0Z``R^=4A6{j}Tr*q>*SyXg}7uyUmBFAYNIO?QRI2uVIq$o*6FiTcb-^BE6t1?h}oFwx>n!*U6za_CoO8UhonGQRK zQOIGKaDfJxIgPHh1wk;S87FF>nHwge18u&&v2}|O-1x*!K%7XpSe(GswffI} zhPx#Dt!Id{z8c#qF^Z)u7dbXe2g^ybzs}-v=5dI=hGJr)w0T8cpETE|q8Q5#y*V;} zYpc?JB5d~tdr`U3+7 z->_^nb-D|+r~g2|AO?3A-)an9Je$d?s2t*;G%p!ViwV|jVmnpL*H%mptRT($u~2hR z;h$e=m$?o=!*>ZU=UIp0rA?2=LUl+NElsXzXSu(wh_b*r)%m$l1GoYnS&?i~U5ET? z-sHjPQ5vuj|3KrGGo_k2((tCZJHA`jtvkCLw&ctzJ5njM=7*rUk#nDUlEx@$t&tG+`dZ|e86a~Bq*iuT$WDUg}9gC;Varx&rjA_=8sm6BsTCec_ncY0f zC6WUoZc=MyxDH(xsVTD);X!8s#G?k`rVhiTsi&3@(T5Sp42&#@5Avm5ID{6$w0aW3 za#Y0~X23EZX|2UD7C5DsVUS*$>VQY}n=6_`R^K1OhYg@BZPF(FyW8^FjY%7mHe)d5 zi& z+F4=N7Ke?Fur?NBLs;IR8OL9IsaMCdY)9dx<7cgO9tSnuFrUcnx(X{bj-)6~)JL%^ z%`z*Sa{Z=Wo2lIruvi!>RJxP&`;kU`F70;v{mE**BaF<(xggl{nPW9u$HGNZ_K#YWMFd(kJ4=-nyng#6I!Y*wks~Y7+L2Y=x-ekP z3!kkTyIO$_tI`OUrIegkfky^G_T4S*W=RZ6gXFYRh||(+!L1E}bw0LQU95Eb{o#1p zgW+UxqRaFi$IvjWZ5=MP`hyX{O0vpB29?j_)M~6}V*1q9b?|g^L6hZIj0!sg2e};z zgd)*s91`2oM?HeupS6tDqVCkZRy8>)paw!=f?+vH?1*rIXIPGtP16+)*QQ-hm4u*u zV{!XB#|yw_v=fK}k_48>wM|ngiia{)?asm2^3@S*U#dB+WYdtu_vhLA2Jao^O>;Z< zyUX>)d-;n5`o+j?pr9_^!8}dk$aR9E=Q5Jbdg!;0(=HB!GzW+u^ASoj ze3**1HvJ@R?u=mEO*}&uSie!sj#-oZe2GdWF-F@4mo6V^a45A3xzPw&&D8qJ*or0n zMJ;fN8vf?@NHP%421p5`CqSbLR0fl?J{W+s3Mt5@6PZfYC9R(NSULu&lu#to7}wL_ z)7fXcG`RjIw7~o3v}Zs`R0S&c-$f(yqi@_!O3#jL+p(&NXGPgd-^`s|lut8*wRK#m z_ORFZ7heue0!~?E^34iPa0-XXodliPzU5({1AWk#hm1-lm&N1@#7em(GZY3$v_YfJ zi>6;8#=g2z5UMP*0bkqlvjfIEEpMTwNvyC+$0y7^O1T5i7)#nLsP-d7$r@w~j@_`?f`)U=VEeDfJ zZ5pcq<6oh3#{H};+ykN*%IrdVkOTR>tRgSNhpOr>r&V{Ai`_D|VN3!KRGc3zyf}eB zge3chg$wn>wXOMF2ROy}Sl$i+oeI^S7JbPi{EI=$`&!s)Hos>SZ$}-twJe{~Ujzq-*$b~tI&4{HP$PP^HEWeky5>-(!yFg4)DPG4GVijrP;8*iP8ds(7q8 z-MF6TN$44!Vj48a3oj6L=TsK&?bR7~PPtgCaBa84bbJS~{m|E2T{P>2W`)V%iqmR} z`>~@|y3*n8H)vhfhvnfn1uX=k4Ksj&ZJOSKqi11llp%O`A0L!Ed z9y|m6MJ>^XK{DSaQK^G{VqY=g7GnH5yH2|C&=$C^0?5McbUxKW5@xhjru z@kn&-4OYDLHp66RTt<)x@}!%%rhGZgrRf*4Zh(}und6!&&-#sNP@b=ueM+eDEBQ7^ z4hpKLa3P7$);1Vd98xHFnTnSH%34jCYkOfjTr9f2t;?K`m0$`_Un%v+i|sPEt)RQw zry-|eYGHADcP5B-{rcP38Bce#t%g5uP7U;7Y787tifu`9hsL`7{}eH$mYu0BcXKs( zwvP9flf>0Ki*Ewkmcqr1vB;aF0}i%r*QBJFn+W9UM^oTfae1*9E|5c6gvi ze*3znc62CIUzX=zJ{^s;C|j(%zB|6o=1aaK*Vh8Myz}vz;ir>%A=FhRoGcHqoR4a` z?N0j|cUQ}3$Yj1wfx<;-RXBIL-&9fvdRGx6=o)|6K2k(epDqgS4J|5V784uFX>Ma^ z&#Bz6(~a2e7B2EE^FuZG?) z4oP3OgZE9pzq}Yidp!8tsu{0lZ)@AFlOsUdzWxHCASR3wzN|vneX05pCWJFlvf*`o zP@>TkT>?{hS|?1JlVL=5-q}c=^#W5ymL{=N%cT2Z8%79{<|T2*MNya-5?>~c5v=L5 zfxhvR3)cUnXjzbczfu{JF>KqMrSNx;mjAT=;KiRRK%7sj<;Yr5WsxP?xR9>cA!sL< z)kLG`i5LL90W`kjx*D`6H_U_cdJd}bNnl*Wu~=UI!o`8X#&ITaG3!egS6Cx7hbWw? z^DRV%A~O~#csTWrvhgk2H+_FBFZM{JJsquXC|qU|y#Vw1w0vb1lC(|?rhR-O-%COc zY|gmQHjv2pv_Qyn9s8r+xgPd?FYEQnJoczoPa)3Y;4QF<(NWtx48%lpg4wRwJ3Ocq zkw+TMT#K_-^};XgoUh+uolW_fp}pNwcU+-yB&$lp2~99kryT|ny%^KXN++U1cO!wN z2%Jw($d=AP;!JcCLGb2V#=5I-EhfEQSAY+!m)5mFAT4!>NW&AH<7w2dw}3T$J5j4M z^5J5m*{C^sF+36QTj1R%*V1mP-ed~ub$NlTIbUBq&4~(bd;b73K3Tf#m3alq9>g=}65N)u5j+XU$ zt7?`Nh9*Ifl-(%_A>o5LfSj?J^0s`y<7tI$!&_Z0rx~ zhAcfjB{fr^fhBQ@X4q0Oli2^}VM7*$eSuE$lsYnwP@$zYM+B?+^=1$}YuCwZA@=m7 z(=sehx|V5_R9O-@hKxCB18YF|i76V4w4r9bR;`xHC0c%oN(r6}+Fh=wD<3$A`?saL zcP`Al+%W989FB&AUN?)~3fBQJlx=2VAhD%{q%dSn+NXMUphc6!^L@#6hu= zNJ52stu&f;6aK{Rp+O!SkQKept=xmm)Mu6$JOT&0JDa1akhN-Nzt|TkF zt{?iY>uN11E8DWIYQ=dy3T>p6LRn|TWf41@>#I#FyQVfqYomUYZ{EmOE3VX0gyqzf zlpZz-77kexHUT7NWhxS5rOE~Kx~5zKDj*VsbqQL|j8n`_%rO)Mz^(;>N0T0B7aMbB zt%#wCwXTB3v*HizCeK-C0&g=%Ro>wuH%)k5bnT;g#-v?L zd7u89J6Z<%Z3gqQ=m(yjpxJj9~)mfurVxg2G$;5OM_mwOl*=-9Vr;& z`C;cyLIB`EgkpGgJH+66z6tD}=x%x@C|fdnmwMVWJj@3cXA8mOlT)Eou1RhElG z?@r&)Jcs3T&PY=s4DrEk-|-Zb?XKcPv|2#XaYcnzlQAZe&S`hN!3gsfdq_Sx>>Ry3?zUlQt?sb;6GF$hQF5om>amMT=;0vyVLE+_X5%_~K&ZVW|Bn+9uln!ZW}RI9Fjp|H zT)*^h7<9w5q~Sxl$cU+{?C?N%l(ps{#@;g2G*ueLwGhH|!x%lk9nU~X2Q7cRFGwT? z&qkSmC{Sv>Y2@)xV~oIa-7$s#blLUd&(baHZA(Y{*STVEyxX-!kn#i}ifh@@mT<(f z$dagHI0&lUzFzdo1D3EbzmDgd<ln>@5UqqmjkV(9|eGeJBuVT3ogDPWt|Or$Iw+x(Y>tm)zWmc zS+D#WOfxH+2@+!ZvB*&*$$68c?W%0HeUCii3_@REgftpYC{oFZ z@0?N{ns@J>&71okUe6B_A$>8KNyR)jYdd-T6-x(!!SVU?hKC2+vo?8a5awA{PKeGrtsBG(_XF6Xa~#ngX3C@RjldG_m9pipuRM;lW#)%l8bAK z*{5mFF9(~ioW8rP#KMck@S(rVw%vI3%IF;m=#$&s4AS<6js)eOJ%x}|N3?Y`MQ?Ab zO-|LroT!$UpFOq(6%KCF8PJDQxRG}tK(SG!tKG#(1hcnsbv!p>J9JSIf3;Z!%-r2K z6&=$6zEEmpQfU0ywV2zCgWRot<|Ck9wi81VUdsN@BC&bYBw$n86l# z!{->FAS_Ab%$)GTrCM4nEZw9)L!~YHfkc4gF$o|b5VAr!kp*mN^N^Hmg#B~}X3u1JsnIta7L zpN&wt=Uio2(Ipn|#NLM-%)=<%IHRdMd{huzOSu|)2nx!iFZetPjY2~Ryo-{P`;NBK z4c05Iq0*gPLJ~Re4zuV$=-ni=1xzX^7_f zh_SWQ?rG686_ws^3ZhB!)Y8@cHE}m>eaxCV$Ytx#$R6dW*!e;))###kufNI z-eLBnAqYCMdR$Qy4hV~c>lp>>M!5sHy=8*NFH0o>t}#or+vHiQJr#Sd0gNHE`Bg`}2yw6&5f21N9UTE`d;k&??~H z+(nA--j(KZ>Z8jYk04`&B+m^tC+d+@b;tO|<%&iHCGiAR zuwXKZ0YVYri$C?i+F^yWx2hFu5T#e4R$n?%BYebcO^IRBn#9;;UG}DdQqh|F)&!)|IjineQe3>^>H$~ zvT}P+_=36DZTt{8uOTL{dcE{$DF54Ii6r+UZ)wZ-U)cRNHYC3lsLrO{>3UkRo8~(} z3C;^S&>v5u)7rNmM_O4FZu;BQ=VBi;_Fxh2k2dmb!w`!CWNF1j>+a5u&&ADU=w|5; zy**QtdoPA{T39w$mw8o@mTiXMr9+mzb+z4!cO507)H<99=QDBcQ7t4cfV}D_iPXqU z0DL645Rkw`|H1s=pv}#4@MCwf|6#;V9#FQySIJT!X=pi~@?ZKhC?K3xW+QTPHBhXg z(bXtqGwwQV(0r4$yJtwbjwuZM9x!UHXDaG^fgip5*MF61V>kNV9c(>`YUCiGfT9)2 z$hat{?hW)mjPHUt`gR4)#f2z&TG*N0&chrHCZ!ZkPKrM7nZk3ZFg1{psVRv`J$c9% zgv_D{4q=1(_(H1f;zoxTxho_TtO_Ioz)5Rejrr6tW)Yt>Rxl;4!zH_e$PGt+s4{X} zn4NLTJ^Ob11v_B#^n4UE_tMZj{s`zNS5%`fHb7qHae5!+Dnt|BOMcvCHUo8)={%EX zi@exv`Lv5e(iGa+W1$@GKU6C7T6Yj!I59 zDXGP1EsLdPU^iLQ`Qiv@FKXHR1ueH7YW(Qr#(U3F?-~o! z_4C!b1v)Kua?ptI=&0RJfA{p*qjwCiKh8>K*2adX-AVVb+a{WFe;~XQg1bt3Vz3vY zM5}$yN|d0!BZQQB;|G;VojBVH5)JRD1jOBBf8R>$kxw-<`i_N35W%^+X;kHUo8I6Z zvoBQxPym~{nS}WKkz{OoL6wdY>b-O;x075WykTOwm&S5&^W#K?-$CCY>Pr)Q0Q`im zK}E0++E7Aq2Xoss-=MprWj)_o$qHf{R~vEW5L*57zsQhBr{0Zt<*AU2QBH*2AnNXj zA0rR+(Bmkc`X)6WSaV?Kf9+480C3W6TWJh#X^L_wjK*>=$>)~wiN|?Kb?JR$HUYq5 zE;Zv4n!9m_85bi)m;}-6!NVp7fBk3jMCuXZbD=zlwlcxfiB>o|?tEOyvN_B=K%VT9 z>deoX8NNo;C~g2=$)#JvSsHCyr+hALB`+JG!zRgJ{3DGLH-h}Cwo4LQhp$!4A4Zc* zzMtVskM4HKAWP(7JzKgy&Fe06$I4@#1528N{!1NYZn@mOva**VtVd zS0kfyWH`~(0Qt-PAIF%fBu*O31xH~L28L&2pKUFzAVfFz6&n*V=iN4P*DQ1#07gGc z##FqNc&3;~HTtK7A#B-k?+t!cX$Ab#y$|8_g#IxcvdzEPX?4{^`omkjOv^S{PyO@TFF|zWP)MJE=4&y(5!#iKP@Z=RQ*knu^oB_Ek$Ej7#}^q6cO* zEm++D{lb#CfWS9JjXWkSelpAj3u0 zzy4wtIxf4qZLBYZtG6ylXsmTK7r=0NaI2nEBS7tdw+iajA$#UB;bHIz)f8q#Id}(a z%o1SV_Tpf0qK2-W=G;7m;OTN%cotHB1 zt(ro!SnV9FSF4_!7t`Em)Y`y`MOvqq>p))lQm@Cgv0W^#-l2AhVO~*_{vM&H0P*n$n=eTrbha_%#QoxCsUu z2llhtdjHnWcwAA7#SDMaEq)XWhhcF!ZSEd;$=B(a&#nR}6DelWDU^p~+eO?%AE%3# z4Wzj8eDESmCTO+MsAJaHwRm@_K4^aM(}9m}_$c;ns4Z10h}3NDi7ilQ3eKd#>#XmK7b~!+NwaYxUKreAFNDH<1`k?Nu4434hp!7dNOL^Nw~=f zP|9nhog0gRCH}aDX|(4ZIsw@KdZD3PscPSGEwNdyT;K+Q?RcUM?`41E zT2#lZ!LsBR=4E%<^v}buPG>BM7`R2rb{LVXdgXaxYCF91!|nCPHo2qdbN9w}?fKMD ze^J($0Z~S-`<)D4;*#xXwY1KsvxU*U(4uW(>3WW*>qVLbpi!&QU4ZcEJ@_k zw)JIQG7$>P2)($K8LdpIYe$NmM1}%Zd@BEV1NCpxTKkb zle;xFY5J(`HO3s72`h+KpRFv$ursgmPzXeZ)@HvaWdSb$Yeu)Knbo^Iy_I%OdWGx5 zz#no#^CK-#u#>O*aaSw(s4XDrgA8Rcqftg^key7NG)HDDF+z>t0Rk6@|SOX6m8SCZ979xw$_0d7LHP^xa%u=DNzIGw0*k zgu6vMH0N=nrGi58{CG+tN5{-&Qkfj;_w+c$Z}2bb@f$lX(|0E=R8h5nAqviS2Ibd_ z5|(kKjQK!~AFspX?~4Hj&Z1`#0!>fHIbiF^4wK8TJri3UrZxjff9EtCErDAtS)49&Ec~`-SF5` z_i@0qlt-I(`dB-+xrVQ|fT+DG1fzYXlT43YOe$QEL9r+0?L%I$S})4EPL}$p)fHu&bt&RebLi`P`=kX&yW_*i?^pKA?xHpUlMDMm}DDW?Tw9RY{5d*R98o52irN4J0SQ6>nR-yYLs;bPFvfYS3(op3EqVB7qU z9X+5;99CvO9lTq7i9~$DV$Hvi#b7jlIQh!tOOv-IZ%*Eb$nyqc^YC>$lOoM?7>+s= zyVLn*D6n`e&1l18RkS`c<~w`&5D<}+%>1I;m-{E_=(+!oxCtunI0eSE79n_`d$lC-kjH+Lf1;EXUrA+EaZY4Db*iy8!X7D1ZIhVH@krO|gwZ&a+|&&qFa)p3~G_ z3Z)Ca<)Q}YiFqOSfo!RD-X1h0EKTUsX^?g#2>$=4z-IIjIEQ(H+qDeQJ0mqlhE?Ne zRM#eX)pIoLd8#|?OQ|xA_@!!SJQ3Y^lGZd#2Mrpj;5wjC#lM%rFSUjzL-$`tdQk+p zPIDq?*`ZKNqs^10+eI}iBTg}{W}nWkR_pTNrH6TMbCkkI!@I>BW%Xy#QUo$hWzJ5g-7L!;R!IZ8}tG!qq*=!FJBf-ca->(Rxw)zo+@)-Tl; z5cOR2Pe0Z>V0iURTdt`+k4B#*LHy;K+DqUO3i59}y3?1B-FMzp0Qq;Gm?MvHfCh_m9SR#!@o`zA%kfvgpw8^o(za^K(JQA zA|xkxm?T3w0LTLg*)QQ*li&+PcxH1R8aVTR^Vag708hei=QRL1S)|ZVQso+eu@wjf;L_L zQd{KDzyG~DH;{w!V@}}W5nPlDewUsAKu|)z5Uh^8Xf6xC@?*HN^-qLBONS^U5TEcT zN)Tl*69fgn6va-tsT6_I<5+D5`<4U5YiX~gsp6zGcG&^iD5t?M3tY>JqK8hobqmLV^tmbk!0$_+EI%#9F2g|bKlIL5mOz~YKC9Y z$}7Umk2slRZ;B(k_omE}q(`cJQ&+_asZ9dnRhv(?d%14w3O{_PF70%qxXs?NTy#jb zFpf;e8Ol>eKm=-_4dOo1rxd%c6kW7e+3oEF(%Ny%uW3YFVxWL5c4H1c<#8cgV$j2D z5%4%nG=MAXjwGDO1@Kq{9LfpDwM0u2AqHf5V<6N&5Lm%jjn}jZIm?HhpDiw_Q~V_9ED}3w?!>44(Y95&;PuRSui<(`HJp$Tr zu~#Neg+FqQ#?a2s*z*>tnrqd3uNhX+akrC)(1Q))?fIO^UH z`KH^F!n#3|qGr`9aGW?(Kp55|coQczOtbn*b}?4j(opPV9+-v`raGoKR2Ao%YKEO` zVFW)wQKyHgA62|<9rs2%A?MJk! z>B^V@xN3FfDT8ic*I~W$YFh>kILf_?ZCM*mrjemfQ9cx<>d}Y3IVu1aa>|si-sUaU z3g*rsfOmE?Dfjsv%BvU##1fcEUCQ7JPvz%5QPHkz`|B)IduJultZW4?AXnH+2 zRla(BTty>jtHc93N3V99NYZq)mYtwk*IU+w#90_3W37osKfkafMv?e*>^U3a<3;5YUUqPZ})=Qtm4@e`re9Mb})$zjdhZ=lr+T!nZtz1*?DvHmf8{(OC5%TTkRw`@m~b z`xezO9kfhJR!vVf_CbTU#;5-8d#L2~-*;OYJXvXo##cl-iZnokUBzj>j>p)q+5H-o z#D1zO5N~z9UrwRGw^=0695=SlfTX4(1g&T|;!jH?Z}YzCgJm1Ks9Nr?QFhV|ih|lh z7l+qh!;#}GfV4F0YX^}l8nQl41DB=Pu5Lie1-H`2$kke&{Q$}(8~4ZO(?K@~t-M?@ za^3gVUj0Hw-Og~SXjr!MZr3HVd0NcM`nf?P1gq8|xv*Z*k`icYU*3KR>mu@;lQmlF z{-hEsg_JE7io^}fJ*Pq6zP>vj&wRiUE$-(O8Dxtqp0W&++jG^<0n4R?hL=4@yIM4n zn{oM6?jqLwzWZ?dagw&uCl)?x;FA#@fiw1V4A;FXsaocVj3QxB(T2#k7{TN7V%C41V z*R)N4OV?Z<%ZduD<;Eg=X)0d1{WTSbg2AkrE)*6Cu04wWHH2)GlmEk`bRrG_D85%n z&HY6w@^AgQ#$JlT3VvNVX4a%qXXezh_q`x5!I1MD@ zqPMeAGoN4zQKG_PNT{ADQBfj9iYQoE1`-MsB}zCH(Z7ciw0I0G3ZtJ);wemq#W6J&HBC?SBcN)>SZjp|`tR+0#>M8Akf zuw#y;*0zdPrZC+$&SxJ5)|iplo*3K4=GI&qrm2b== zDtS)4{|S~BvkQmLvyY*&8N)32&ZrQrCWAUb&C_&I<{3_VHKp{f&(H83i#SC)V_A~T zKj-l1=}efPtiNxz!SF=o^p!=PxQ-1;=A7sp2MSat?Op5IRTYo}X(GI+(K2+T zRK=bm?M4_#e-BAdHSL)Jf?dYmy^b|`hOT}SCII~{gKx+ug~me*K>V1AOad?68b`(au9N~h6ntGo!7(TE}98nw%Aw7~L-hUP=i_zM8qQx)_5KU2mP56dl~ zt8sm=?n39sR3qzek9P(}0K{*Cd{$#QrgJpx}ULrXC$he^F2 z;W^s{TbW~x75U!Oedqyua#dJb&ZSGkT+eO2T zDliUPylXOvI}W~eT|5V05hX=lk$!(Nok%7o%a5&uQg*QbZOUFez0+DOEEMkz}CvYchCF*r= z_0`JJxjUz>^Tl7IXiJ`)o?tY)VSg&i>YwNc(N;o>Sf$+|qY<282lvZwm>4E_8ICEz zYB~T#u`2o)gEEgvUk$z{87CQMEATs?8lKsi_4~rD5LQuV#U5dn_aF(`Lmx-*e@02{ z!3Ua6BUXDDqE#F>2W!Ye><~#N!_Z}@0Lo1dGsjEare+TRW~1wd%;5=j)RAjgdYp3+ z>W<<5%dWmxuR!MMb?0PCFA5&_fx&%#^kULGr*VB1{BwXk?C>P`gYe0S z%+Wm3X#WeW%|~rg?d)I{@^&rio7-a5w_y8Nnygy@Fj8X-!{@)~0-f6IUiBE;_oL^v zlBK*nr`Cs||8V!M&x!Zfg0$t+o7eye?ZX#~jh9G2aib%6@WXVA-xaei;!UIC=!(QC zP;nJbqDeTtn$V>M>zl8E;JHau*gf@$-xIGo7FpcXcfSr-{qj|h+dRCTVVfvyV=O+v zd_7XlJ-jIDHtD*T$PebsIBJ#u{VWIsl^aL1%_$!jiXWvl4*A&8_?g5g2;#U%D2DQC zc*l6PRycy{7Oef@epUC@{y5=UTd`{HMrhZ*XHKOuPgh!i<{_2#TLjh%V~i8>B>JlY)<@g@R27!&jd=g^Il<>Zyk!}c!q$N~9VX}krxYN(+c-9hGZgQB zGDxG0;fxY~XMDI0OW48a>lZFIF$V9A0BsU2PkfFEJJjU6P$+odN}lgP*fIgVWEh=uWX9Twa+te6yjiD)3gS zZg!9CZA_C09tV~cPcX(zc+~9rVirt_R{Nv@?CJ5uHK<7OAxHRG3q-bF4{1@ zLkpi1dWuEveJQZr=!VX_6%D--4>{)~8K04P)^E{QbXqTVZu^}<4O{UQ`gi!)=D%jX z1q#1tG2(55;EfNj(DW!*S+7|2A7=Z@eMck8ut-B$CB z4bPtrdcKMLW)rMUULSNA&s}Yvw4Ok*n855#&sN_b&GzsEFM7JWD&?l<+qRYQt=36= zvL7IC?uN`RDCt~@8!?dmf}ydd|IA4y)D-X_4dKz*&<~z=&IPCX0U@p9P#?=YaxMO=J~ zC_i|38jGGMub9|G!^)q5RtepP%Xo-5*m8|nJHz_QG$EYytVNFoWSgXRgM9VaYcATW zuu(NSL=o(WK`|M>(TWbrh(oa|H;9XU&gEKTb2f0lME=@wWd-Krz%m5fcmRJ(`_^W0 z82-plKC=Z6-#@zmQqDvebX{P;cwu&K=yo?$WjeUl+B(2!K7-s zMh45?wY7C@FFdyAw z=uM+QvOkDNhRD@$kmZ9xtpsT_4=?BI`DjkB-}kL&T(iP&{>VBGP~u#DR+(Wu0h*c1V% zDi2L8mwxE7>jNp}&=vT3u+OqFy@+>>O}lb*{#RD^s|>eiO8ku9;ATF6r(9Np`P^p* zt}WM3Q3$o^;o)xfHhjGU!((3d30LHrgpyuh?_B%ljbG87rQP=3p9vK2jp)n55AXRX z<#HP=p(sxVD?_S$Y)u}MJUawY2F!Cgs#Hg~Z zPuD}Mjl(I5VfVy*{*x=bziMfCBB{;-kHaM~b8rsebL)PC?<9jF8P4ZEKGb!@`eiW( z5uHhy1o;*D`QBw#v4&MFK)6mf!VsQ(cKqP`~ z^Jyir@$~Y6u)AwCCfdzszeevH+(DqjMktM1g(x7Ggyjr!?0hsH=dO3|XtwS-gUT$+ zUY2BQ1IMAV#84p2$$qM=GjgH1Ws5csRyh*Iw>m=VhucvHx}T%7y^#PHxzIiuJjEH!NRJ-FSgK{eEu}hN@$N)W?B$GLQ;trmdmhugfs$sh0b!DrQOS!Xjuge5QFVIouy)uHz%>Sf@H(6Zx#Xe^6M-$Po-*55A4A=M%v6E5O2}vST6c~+m4NwJ zr{ZxcDnjnFQR3pOv%tkg4$tC5U?1AVkIw+0?X<}&w7PXETxzO!lmJj`<`kgJI*5{+08n)|N4! zOS_}fJ*yvqLZ0Sfs`|21$Il(0ATY89n_sCEo5dzIvP0_N!LLxLe>ZY@9e8VbDtYTU0j~p#NIRFt$qL1_wxzZA9-E9$ zK`O$hxnCZNGlaRbWE`2a&STR>@^DXkJ;E6NO+R?XX3_U#tzw&x(Z|m&X2V;HlY@TE zVk7w*9Mozy?P!8XV(s?KI^Cn=$>1`sqYvl3xxKoWDv^}EBk{@U;wA=`o>khPR5uaH zicea5CwW+#dH{M%&Q4C)9UB0AuojEf+3~Ru{$MHQ9ytB}d%211ty&sO7(k)@Dgi8hSV!`3;6Bv3ZauxzqbXbg-F%;Y$B$b?ZLFHH+Z~Q){1(!vmnSQZ;oq}& z5(_+Juv>ah{*bx=u{6?X-*`H|Ko0<9o2xCT>ajUz@9e%$>4T8PS1LZz4M5*U*N_#4 z*q4X7N5lZFeLTnOknA=KXq(nhi$*3Z0eMT(snulsaI+B8hvo+J{u1W+u~q=M0(pj^ zDMllM-<+{^6~B>=;WL;pd9tENE8z&_RqAlYBk@EwJ$DW6dAgD@af7SVs}8w8vh1wv zIWhC10DQJFRTgVw^|p)+e*F!8@XhVRw}9tQ|Lk2IH9f&cttKARm>qXE1JAmt<=Q_8 zq9Wo&Q|q`pg~-jrG>1)BR~PXKRmE8=HEn)lDJRu*ccoR-t^-&^Y!FOS@I+J;QMgzf zJLN5*ZzL3jS76T1*34s5U0m38GYoA}%}1Cxo*)(2zxKhf8HtwuzwoaxuqLWAAhH?H zb=lsZe3BqzOmE_Panph#!y2UeR|Xhv!I& zpi{mw8i_kP2NpZ#nUi*LznbIVPK$KUn}cvV*5_zT;)}_to33rXoNZesz?G?0w2Bb5 za5RI;B}U~uKIPhw5iHQ_M^v55+`w9K?FfnL1{$esj<2Uk(x5!EomVd zL{;~`Cw(Dv9FD^AH z`{hcrtY>+sYb<`jE-aj^-YuxlT=ZALsFs%y^1OL-H-y&2tjH2AV6&(NYa$09M)KQo z<&qWgSl6N-gR**g-2@p~0DOz=aCztr1yKty4C2 zLhQx?L7C)>)j{q01$H&0<6g(;v}<%r3cIW&g@sxKy_ zZ=4vQ_jJ?TTHDm8u$?H=U;vZac4IaP`r@x*IydCVxmqTf5fdynu$_{o{9r93V};Yj`;X2=y9f9`lj>aha3;Sj z-g3)MeycM$3zc+6juW}}&Tcz%f+y?%3i;lzt~`t8X2IT4u=2RBGSVcbzMjsH&f4Wc zgF5t&1J(z_JU%oT!|$;|;sv7Ig%{AOIAJ%3@#Tbf~=Mj{3`)0%Kof%={oW@j;cdQS8R3rx*^Sin)_ zinRx+FuP|GvN=gQQ&FA*_jsRgx?n zm6Xk&ZPT}Ls~)PgVmQddg?r%`ytd#NRsFR^&*lC(DZ?QaQ6Ly*l@Xj)70t{x#6iQs zTXE(wg$qA>0(eN7nVUHk;xI%u^^dqCw?PI5U=72#{jr3kZHFk9Ex+Y=vud}uANe66M0hzhjd$LOlWZzt z-s1(7E*C?k=cTiC1v?nXNEp-rV3WpUY*Mo7VQdyH{r zjyAC+^p-1#zH}yJ*E+7rE;2)l;$YX7CAL9F+>srxvFqcz% zyn{HdYDPKjofw7o4%xI-Sj}c@J4lP_obukmO_~T|+C4+v)T)x_4P5(FrlSr{jQw8b z0ED%#lLaG(IE8;V*kJUu@5P4)H1 z$NWxKK5R!hDCy58ne*jn8rr^`7x{hsNG5Git5rFlJ+<-L{ z1FT-mX|ZwMb3_Hhl85MaPSqQmG?SOy-`H3!0RrrEd-6s~>!|0&U&@#B)#CE(UE46n z8~+Iwfop;e60D62m#ILNE}?)kLajDoa{nEG;`;p`45QlwjmUPtN0tC^#yrOQa&1w7g!URfTf-^Z*T#~Nqw#84< z8!k(k1PNbONr0Em<8cWnAe6u_3g#Rnd?&jn6R0&By-9EN84Wy-%m#sw)03){Lw?8e z^Qha=mxh41e@8RS9`dlb!^{KO^JyOXs7YpnA)AG0rC2-a@ks_5LZP2~7&%W`0NiPN zg~-4@m-gkAL1dwoZn9j50sh-9@HSbGbaYp;&bPe6&ai_FL<-s~WDkC;VTf1~3>yt} zKGUdsG1eKKM{1A%Mv5!+{t@jazu%J!jP#(;{-UGOj_#Wwqn5?*rA+@178uymfd9(w zdrvP1A^x`&A-c_!O8Jknl&@h8L4JLz7_t&T>mgLplHqf*0@VY*lg}-ld?2bdDRP!) z!+CUnq7!vSuJ$#Fv7#RYBYQyr0JJS+U{9w*44)<_(Cgp0vA=tCe0=Df;s2FdKiHpY z1}?TMtr;;Yd1PmdhHAFAr8T5g`b@GH$`l2(XqCmwvxW`eGcH8@svssLPGX9ZD3DjZ zv&(wD48UnFM*%GVc(Yf)^T*%mA6l?KucnCN(S7`7mCety z=b&@Rg5H&3WH@PY(e;~^B-FHVv`m~X!6T}yqr~m<-eqWAFT%yT@AX9`&Te-dr1uW; zrumy>rv;$5!2G<)&-j zC9bNr^8iNEguDe}Qzn*Puv!r~O6? zz56pqgh(8E$WAMi*A>3SL{c*!7#j;A8|vrpf+qgF0HGAPcbbz!f+EY)J$}WuFCPaR z#s!+~y1IZR#a+?v;&lb3?Bc~x^Z2i{b%ZZ0xcO-Qm&5iW@3LoxbYvQ%jvCN>DK$k< zUm^imC(@05BFv_ZV2s^_zPuZafE+72gR3Au?8;1(T~sQMG33`u1FvRc8Q%DZt#xzX zg{r{LHPg?a*P?lVNtgfl=kaDFYa~0qPDkvDLZ-yB2MnW0m-yUIBT6>YOXn5*{N2oI zOSfU;AVfHMDL*x{TI8BIt$=L`p;sE;UgD#kn9IeGuBO*kE=vw3lmFyFBAiJB<-ZKs zofJGcY7eA&Wco9)0m0z3RCE0UAA1_Rczo8#(y@n5aLS0(p3WHfJSb9pZS;)EH6&3S zqP0Shve~@kx;vb{vRxdmQiE!q8tEhTRwW|*nh>tEwMv?{)zHT0q)nsbO^RTFe^+3% z9jahp$EN7{N^F3gWV)Wl#dI49Wo|JwsC7uiY_n)EHX%9bEI5@ccTf>qY(|A$w|$0f zvPZm;Ki+sjg!WTUrqn{-J2?u{aN8k!v9q^${hr@-P7&%aAx<1b?RRiIf(mt zv|>{`6!-E2a&z(w>xB_XIl^F9HUb<080ZJ4-Z6_ewO21YyDyy3?^04(y15 zbKe$sm+|*A0e$C}4*YS_-Mv4u@7>bQ^{uG`y7e@r9pNDA`d1Tq`GD?zky#UngAa+; zDeN|NXa$~c**$)>qTUxhbxQE4_DqpCi9}wdH;yydAJ9W<|45qa8Q0U&fsf-cDP&&& zijOWrTHp%HTWKL;;hMsW$JnJmXg*M%-R;Pa_h~+#+ZEqG6zi7<5ICig`!5%omWy%C z>dHn{67P(iH%ZsU8{Ht%-Ra3uguA}2|ID5;&WBic5pN|=kSh1!?gf)W#514|X3R~D z(5Pt=`|zAYx9xp}!^bo^(mh^wh`#^(jW2!*6cyYoDD~Yp`d*O0_{I`Hc=*SDN#hH? zS3DTMpJv6j-tmm{G0ucgeS`}+Q`CB1vBx2Z%M_(tv*W~wEwhFgE?06!7J(neO-l(&o9$*J<}HbfAhin>skbDdl!SkS%yWpyZtoP84zC%ppsLiTJyDj;LmZyQxWF#Z{ns(v){|1Z?f@5}5m?<)`Ox#;j(M_yBkq9r zj2g+iTzl0I{GtO#+!+;7ntG0#6NX~fwt=Y-Y0h{{FeQ{KQt+IY%(K>8H^IO8`{y?$ z#G=CYM`t{bE2%E9l#)_2Of7|&=+k&^5i>K3`VnKwy0NdihJhpjqRwHX^oc{G3!G34rdc?E-5tcKaE40pN`VGAv$8!v1y8fGr;AI}H;>RK`Z(=@vzwZdy7`ZsaY z!I@W&%5FOY*#U2Vy>%5h1kbnwZubl9y!Rkz*{r#17l||-En`GT1Tl?^x)DW`0l}|W zTICVrnCWv-DY6Ts@blqvnBVMaBXj=>ZFfmPWZRmul}U&iRn{%>($KRuUWynkhg*A; z@`n)Uzz^5xRE9??4(V4znc)7Yk|-f6gI*Z^*LN=>N7w)u zz+R4ysp?@A7nfpq6uLM>*ix!30|8?z1*JsiJvpq7q1uiwuj4d~_XQnKfh5~EAFusE z;1-g+tW)Z@9E+?dP4c5Cu8Gp$2sJw@4MlnF#lsu|f@DeN%M?1rBOjMWSTC(Uxm5)! ztGe2YzG+XP`2!SR`=5)nooSYxU(?YVa%5SGp$QxrX&OTYnxUv%j%BNPb6V0WY)O!JXFmXPn(#a>t~q$%tk@qDpj?ITIa$p-K4#E zH|VEAE3sx)CBiQm*!q+8fysNZwAgdb_Q1q@{8b&&aF{CRMs+FwmWidAqJOOL3fN zlYDFYX~VEB%h}%?KFlNES*Pab|Le$$29_*p&sOv&Ir7sO8+)XE=1%lImT&zT*J!i3 zPo6&W`jP&Ojf)I|Z7pG&nhRd(#89iZPi_Upav*V~V|r%DMXqu@K&KIIoTGB-#1BW- z3d126lg4oo0zADAN|PMP{elh8vmTGGuX_O!2UQvjkz~yRb{HRQqVv?(&@GuxBrqzA zn@3{?ylXO;4lU`U(~O~Y8RK=Ef#_hKq6o-`q*Y$h-OgZ^(_wol10NsBKmdw{Pa{gc zP_iYI0@c6`N2`zCK3dkj7Afg=Oi?4Nl6LczBNTuY@Al^AYG4;-SYzr9Tfuve$d6!06~!I?p;Z);4^`uGZ&or~dK!s6^8Jq2 zg3!tRFSM7N!2?Pzs1i$pg6B4J*(}GitXysqg6a2Y z#x;!-Y?CEWl{bm15um7^f8@iTU%r%!%Mt;DVe3>x79*X%p==-oTj2U2PB+n6;= zj?BMpc`8Y1_)X44bpC#DHn$dht0wpWdp3-c;Gd&JKYlnBT22s%6pk;buM@IFLY+rDJIy!NKDA5leEBqgYyk6> zM?d0_c4wYC?MJP~nq1l3(Iikn|E&9$N7Cz8O*U)Y4F>8R2*Tjvwih$fhFRoF)2e6W z?4!l4L?3!)e8%5;tj|r*#3UVGK7VK53o~-~@!V3ra6);S_upj~PVbuX+U93_Q<+Yd zj5?Z51#GzV37vWEbRAmuicsKC)p1VwXHa1IkNuX`j`;F)?qdrcSOTOOX>{0@u}`LWGXEFXzH1g5nV~`2u5`C#)qUptQ`UO&0{t z@W=Z6?0UF5XPkfSv?4cLq}Z7ye?80{3FQnRct9(k8Gl#Y#}Jl@45V7tJ_3Opi|vCt zaoV9pw5LMwT;^ZcZt{Hw)fDO>_(j*b(88uuHx)JwcIR^g;l%PF6LXIDzKy2%EhnIDg@$SRZ39q<4Yx=|TknRw zFGQ^y;<$I7OnlWoBomOx|< z1!xR3V}Wd+aF(RVXf(R{=5<8g$XNXsaL`|EIk#JBS>iA2jwPv_UQN};-%~$U76%;) zrfL^6dU43`vhzDq~20|=T)q@4B|blfGv{VRnomQG0tl+{`;9PS+` zC79k~9#_2%c6HtK0AM=MBnGaR_hbsTS9^v_B+Z089yW+5X+i(FS|kGDhS^rqX(a~?ML9pLfRFlFVT9!2=@bFtx+2cznF^I&T{(hG?13w}Q^_jQUGEue!<=ee; z3tQpwyeW#Y@gi<_QS)lec5jjac_J$x4aeiIZ?1I}YC4f%${LBRDRqK$lgFCnhfHQ> zJg7Js#Zy;}aN&#~tCrg&L~iSo+V}M;sUm_9`dy~&j+2MqV&^U&kjp#gt6LUo(j{H4 zjZzS&Uo3a$ZTrb*E4wT&YupW!7B^nA&1}Oqf;jXjHM=nVyej>;hPYXd@)>{RT2l30 z(~u~xXQ*Js3)FmV2D4wtli1mVFi(HcJ05DY!N1+y6Z^d`ocDm*}Uk8s^Ty9TX?QhZlOHBvvqcx-5_N zD1SMlbtZ2=nR(ilQ3j6m{;R)jy0_hE-$xOv=>4SvIDPfCuS&~^S`V7`0KQZ+%0M3Q zt@LvC%><{*61#oiT$aA(%PO$&a%*X`ArA%H;bs=sCk|ogNTpo8D%%99h{~<$O=(yE zd`;F`Z)GH`M#4eT7I@9MnN9@M3vfL1$~E54Q_|ztE`U+3c;(?Y!jtm^k2 zaoc~Y&2SNH@KH@m=)oRPnx(9GGcZEy0#b^V&7K#*Ob4wPO1iQ&!cP30&UrURscD8@ zcW}sor(zsTzdexx3v4|CZ}(vJL(uFY?A4VlI4v+52Q2u*ZiH^FekRgtBnBf48V5_< ztnUb7DVX2rv^7bTqP5i|5wWndG2Py|?wclfb93@VP+x|=Xat_|w@vNp_bn>?_Jw$L z7HWl0En-dkw3bHY|GVgvw?4=aKAOE7#vw*J7`J%km>ugh#MidoGgDi*k(>CqnZy=r zjBX7#kA`t!l%bQ1EJ$5MJS?3j*AXHNP`;swPzbTshYS3&M`ivtHJX>zZUfcFXqk4N zsuvWkUIskN9cMWrY!LJ`*0OCC9_bm&y3Yx0aIuQs#}L!GpNJ&Wn|^rJsJbu>Up_ylH(|FMC4UZ~2%~>W>az z`#+Wb{fR^3%Pz*b!+)|4Z2x-rfzhmBiQbc_*U(bFZd&Vl&o7|gmL<0aJPpqkWhhvV z9tuw)mX6$tT13a_JCdAttLsWi`Alf1)-GB9H8*Z$*PQzp!|?_YHG&{eV$%k%S!ZEW zigPdgKssJgzdiod%47zwBX|Q4Wh>HD3kK0tMYk&6X2=4DIc$^<6zX#8zS{;i-AZDk8V<_=4;%yP^9rs^qK7&RWDI=h z+K@GPYL+!2X;XDehfLkU%k9uDXhu4_p9gjulbmJ)^bDw?9WSaM_s`TEer93=d*2Sm zj#T@uriwl0*?J{uL4!N>Ilop7q=dhTCF9J8OxID)iv8X9uH@Y{7t=)BnE=wu|5tLS%0k4yqsp z_NBtfODRh7DN9B&NsB6zNy~wxMU_l)av*6*OImW0{g+7emFuU_ZOxx(cvqIWy$HXJ zPjoi1&l@x*rj=`vF$$S;>BifK62A($hsY8k*>b!cI`Eh3ru;82vspQ8x!R37VVo}X zRnqQi)4^HC7ua=e zn0L)FiGJ~;=>9=-aemW~k!}KNxi!Wls<7?iUAv}~dWDYLNaDS}$3Qac727eZ$JgO( z)9aiLi6>*!e2psA$Vig-k4?{XML!$({V@4t8%)^EB;E1lb26j*f$apbvCtFPUNf;n z2eG}F=)CDY3yBRif1adDG--5jSb16+xWPA=RZRJMRl-OQIO+3rrQ?k4l6mfcR!5G| zs%;u~Kj^flYQs}Ay`wh-AaBErzX{Q+CIHOgpY@liFIQ*P#^Kq(!CzhxTsmB#41HQx zSUyjV6BTV*mrYg@CzR6(t(r#3BnYO1=AL-wzE5{ro98h`^p31q_Va2<_tURQ84QA<_$pkUHC|6i?XYqT1C9-SP3%Xw=FFIP#y>d90nN@iQX9cVPAer(;z04BAW+~RGRr``Dd zsB#mqzA=cJs9!AAnnT%OQv5bsb7^i67sc*WjAqa+zPW>>tt+k%nu;-#F;>G?jzm%D z)$*?*XL3cU0woP(pK4h4txZwYw~-kN|FIP{S4%7u{;#p_VzuNCBKrD?jXIqeNikpj zqE_zj?VpVl*ej+2z4ViZ)7JrZ$E*S>>~<}Kyi>WiDIo`9PU}#>;fFP^WOX4{h-stw`FQEuS^-OoaTCA@{J<=4fUa| z?6HsKO$rUeh~1biJM_zprAcPK$K#6w z1Wt!2{KROVzDuA0>3AJhPb!9}U7T{VRJhAp03LZ2H+EEBpe(|=GTj+WoP%yX?7gwX z_dhoq*9ccz0oM^4jl(0zg5R66P5!Ar)+>&zg?$VP*JLV_=sjHOi7buC#8j|8dxCDT zj znMh7W+ep+Hfv^ng`x7@zJQXtk7|PJljM%V?@&-Z-_|LiG7;qNx_FZ88_H98p_tkc@ zS>0^?DzRNpzpzzU(4EU6%rq^w7QfW>&e90*_AVDPg}Su1agxRzgaIS$t3 zGZhDB1w)OwwEfIn;Jq}QuI^)}%Z(kYBdc5OzV)~-L-U!Kl>W{7f1AH}7%4uWmg!k6 zT7B+_I2PSX(K?83eev;cf2z~?mZ(J8|K%awfP}wVN#ytT)Se&;rceE3&tydrD6QHm z=hekBNf%I{H2v9W-tnA#3KSK~rN!fMEVu}e@;3btDxk~y7i5g}#{(vUd|QUwoRLGq zFm*g;n#Cz#P2I@yw#beMASo6jiPJrFdFby`U{BVuk3BHN`e#ly)Y?ofS=|!z_a*5s^USUVnN%$reU>uaX6XxBJ+P?W*J z^fk|KVmwcqZRnC;)3aMiMx+z6#hZ?-;mK*b{m?hCylyZNvB^_d4UqUkd=`ec!A?|U zCIb(KDElxXT%*hoS_0HFtFy)6UDq<-3I_RjxqL#5dBunoOnDBcrAa1}`_gv^(mw*Z zwV(~FXFOFMfcReA8qC2Yfx6u&L%6-HMYM8tJs1RbIG7cI??hdO@h3XV>s*|jx`#_Vpr}`>i4*wD|ho_;GdkL$xvTdUPO|FgSdz8^>8)gCaaOq_wh-1#H z>~lL;pz(0LSUq7Ay!0ZrZ|jx>bW>r@jZUY!4qtR)%LKsIg4w2vmtxZd=Zpj3yt|`! zEzbsln;~khBONa7_wICeDi(6qt06R6_&=DoRSr@Xt156w;!KEA63HgOle34W_V*RX zzht_RE%(+Cg&|pU9(u**N{hlSEDC-3KZy0g9sr$6+>b`T!Z9>^DqKQPx`s2R+r5-p zF+x!Zg0($-9dJ}GX+za={6MZxr4wRGnuq?6i7+eF?C*B~^*9@ct!mv#gf9zHS45CfO&U^U z8Inz+Q_Sh{@5&AA`Kws{rNtX5+Y-G%buXybtX zPh(O>s?8edVkcVL-jE@!VQ9GIp!(;lkk?fUXZ;tV?uc(TbM@S;o1AQZy-VpWHe^ce z{hmd4OFkBJ@lDYNuPGjn<#G{2lBJgRw(2bRFLcN#sO2KuH`VV2zG7epAT3k2#t6`Y zlehvJvvcBBvJz;<7t48s>Pk6o%4+{XO?rOmTc%c39~>gVL%mr43+jIMYP*H&CgPaC zp-ukTi5K@w_C>n`r?G*W-M^(`qVbEX`LAKi=P1o-ozc}^vwbr(0G73REE^DVVgxorKq}rA{n*DMJ*H_43 ziCoDnifhdQv9$ovTxGo!MG(<(Y$n6Le6mg22Scn8$?k4l3J2{nG-cI4i|8h~dwf1J|g z&!R|(q6jfgqMrEIPyFkiW(gfLsUYo8f2vh2KH-`&4vZqw4LdHoE!oOkhye>~|UsU2% zUq{XJv>L#D(GZxiQO2I{CJ`j3RFpgUxmUZanf0sYW021|py1IXrXO*?*uT6xLnm`r zMSnkY7F#tcP6y=+dO=eGO=lemvM`jUbIj)RjTcozM^-UE!?$!Pah!7-~Wc|5?4rKOF=Yw$3n_RH|v2+ESOkL~05_MT>=9e{3UtQYEh*GDTP>y?{6e=eeP+f1ql6bbE$Lkfw@vx)Y=W zt#bv7zLPFp?v1+L`2o*u2U9y4ix3IjFN6bWs=#jcn?_S5yvp(jeQ>M5R!K?ZA5S6r znQP{TKU7bAFPKiu+}1SL!YeoE7v))!8Ysx;{C+`^c2ITgq`; zA64H8$WUk@S_OakR^Yl5x*Mp7;r@vrI1sUp!*=lw;}8itUMec?z+B#~FT;YiM-9qW z$J_L5N^MY{ZU3L<|jTl*Ot@#+z1PDh%&dGmrL`#9MdGAQi|siu~b2hJXFAI&03M`Ccm^?9g;$ZyBQ(jEd5p2gS~lSRv=QLp=oD93b*g% zlL1mbN!B#2ajJMxWH>p`8pOSlJs{)xGVRo2CCb`82*8^cJ7#Qs*0){HFbo7$zXyMO z{R+1aeMmhwWhy(M#Ak8MQreQ=UK)&UuMxB0C8nd!oY--s1Sm_yiK2#`j>51D+Nolv zb`lqiA{+;^bm93l=v?De7u`-_>rAW3dP%G0$j<8Uy&=JvwGe@|D^~ah!JnIDjVgY4 zj`&I0;~V>+*HcUqpWBM#eJKk>K?;7a%2@o7aj?rDdA|D->&BPL25EJ7ju*Aif&eQC z*u9QlPAW)YSNV#T@^;VOPT}UUM<2$hvc=!{TAn?JUj&zmle^D{++)lOy|Th|RWW}8 zl{ljt%gC)W(QUs{-YW$H(X5^?_ZU96ZOcnCn|l~UdW#`QkZsDxdc2^l&n!K~w1U3# zMO`p`DB_Wqi@wbY#pm2*D+{xUAkv}L6G-tOJ=2(C4R1w?DPNVFU;NAryg78NQ zB7F1j;f57i?JFa z>lFfhB@0&mWgY@F{F7WQesp{OpKQA6?}#<}2&%@qmH06}I1yw9aZQTvFI)M3f-&WJ zt*(iX1E&?42o$i4nEf&`e&j`v%_o+Ta zK;DUSat{8>&O0E#{;$WABTZM%#^aiV*syS=u$Y2@EB}nrtHVBi`_hFMNMu{d>kBt> z!KT*{<3gk}6*y_5NeVEe1E}fvC=ex=BS6aldBq`<~V>ka2Ig#zX6)HJB0Cytpxoe)-EZ&u~N2dn#bQ3aM49d zK9>yZNSj#CFc00b$8mobkPgTwe2Qy>->kv*3WLEr&tk7OG|yk1l{vp6Y@^ll3s%z%OUN@pCi-GtP=ZQ!F**V&powb z0ywo!ctqnmPOtc-O&{hh0229(Rco|RTK2O%4s?2=zbfK5@^OsCo!8w~s7&Cp*kcEq zRjK=r`>}aN&4`I_Z+Ua-FqX#Et@y=wUSH)HxdHp7Suzegp>2THfvM_Bp*M>@@I=+z zI3}J(w+x5ekASH=noD=Bio7uyYbgHCu^(^^4X*bf4JJqKb%4oT*Jb5y4qC_af^3`-yL(%Ghvbgl23-JY+3(bc^7Ur@!E=6 zv%t7Y8n!w+$BnE{wNvm&NK6ug?XMmiaA!T>kqQusLOkQT!h|iQ;Z^Hs0PG3iQQ+@yzmubR&U8wS=F&en z`PTxw_VTJ!X74JO<;n|1wBn<6BL6yCV}WA+NLVdjf8p(inpOw8{yj;alVx7{XQ_VaGL=%Oq!1bOL=Cl_?Sy>m&%ES0I&zTD9}^_HSk43ktqz<)UV zy1|9au?lX=O?`y?8uTfzR2QgWrc$S1I0j>j4RXQ^$FmsIN$6e{)w!Pq*HgybrDiwC zGj58~&^RMn7#bccW3r$ers>YMi3+6jyFP_>K;MenaLuo~tc9WBu`;F$5*{8YxIGEM zmGQ3J4yk8#?tC>+Wp9f^uFAvnK(CXwWw2u)&D|}k7^*c$;-j=2ja6lR3q!+W95W4- z&N@6j1}bG9n`*L_4OWu5qBw@aLc*m|98pTYgiE;O#uiO`XOIGrcwC*2&1Unbtkt>~ z0k{`UWEGQDVyY}1%B7ukP>hd{@Fck=IotF)>i)8SvdOv|@)=F&P8TI~G}sC#1{!js zEg7{>YG;jZ*SN|st3tIZoQC1Yo_QLr7Suss1dZo94L-}SG)Sl<(Wdthul zVRMNmH~4wit7VUU$@(`emJ?)692F%+;u)F88G}%g_2_gc|71;XN0U^W$q~H~IAMU& zb^Dw^>vMRX65q^GWh6%ZtIgsaY~*Xc*3hD;;;nEaFJ_=?c<1<`1Fbs1z;TT$w@XPZ zZsVhU!5a@9(n`zW3gfb}dCOSuB(8p{i@$n&5K_>MbK=Y>giKP>@UHOA({3Cl-wHK4 zw;pkuoeW#?dGqn~H}Jl7pa8s+MhnOL1f?)GFz=GSS(G6+q(@RN**K* zpAVu4`A&~m_jjy%2(ctl|5OO!$trG!Ltr~~_J`e>KgVdRU~&5R0oE@W+&6lM#$)M zQTve79cdJ^YALY} zORueIP4dI4pl*7@jPU1!r&cZUods$du|88Oh&+r#`lK(j2kv=8HKJ-ncUK7GW&}& z@h(G2O5T7?hG4+&LB_;tpmXkRib@N*I{;|^QgqYBjj`ptn8`@0wHd6S8u#mU#}@D) zHIYc+=9HvGu(sly%WF1-hbh9C2A?$7&dbr*GGj0>;Z4`G302*FqyEg@kTE6nAgmrrY-Q2~I5ReuxlbmTW%TI7glKxc)D!4hxH%^kR$Wzo*WpU*(S&kBXvJX( zZxH{U5HuGFj~AaEkhutAD)*lH#7Cb3;bbO5FoNrc?aGL=+M`h?z~`bjO?f%j)JcvW z6CU7PFyXD4EWWh(oyE_aG_Y3E&F6cy6?cD9&XjMPf9l&WEk3`vca&}Z8{Gq($;OXJP{&P}a*gAV~KW8jssVCYMv5$(wlX`)BAob@M+Y(eR3WayQ{Zi(;6Wf>T zH@M>#BlZU$T#{jo^B8TE`2^XF#O{yW@9p!tCc6Tx{M z@Q1OUk1tQeVtYBRpLW)WRAVyg`&w|tvF-M_+bL~Gnq?<4>j6>8A5z^7ET>i^cUF=$ z-E=DTrco4Q|EE$Jig@~eVEt#RNLXW}hNVR7G41^-x}XAvVG&w2O|-mc!a_gd@%dzM zpGTi(Cfu&b`{T!{{pje&&EP+u#st4AwZLv(j z8j>uyBED7YQ|Wl<1(fgzRT6bO^hAlyqpqxWhBZmHOD2a4<*M*y0^B6{^6S%e#sImK z@m6$Jj%Tydgvj`zr?i`N)Z6uXK4S393A&%{XT`hE_}H1zM;oz&C7xx>b#Lu-yFSo8 z{LIdhKlml|=>+byTAKcdkSE1SxiKozuyoiC`s?cgVj>BV!J@yqW6&jmjJdPIr;9<* z{tqpy#dB&}I89Y;vaPOR)-(y>jld*4ar#vhh$mM%=+9IHU^!1U$rp`=9I`yoeqBJKG#PM*gh!fmM!jiA&mH0jwdrO+7bcV{~xU>^j|{#l_Pg{8;2 zhtT#^mv$DeKQNHXPJk;g2xR?m(idle6LnG@03p&t=zGpZN)z>*9|~7-*reo8zZ1(ZII6%G?5y5Vi%| z2DZQDbY~q}UshZvwmVtzQt({qJS%$y2t_x^vFJrL+_d(Ca+9j|kuN)?YZbVU>iI(E zX?Ui5a?4R0)-@S)jts17-M>5(z_xrs_(!KhHN_^|lUZia=URwkYZOPDZ#f?DeYH!X z1L`@)GV3V?JTWl$@`=q%Wtk8pOJBbf*@`w`VAk7Y7VrapcbaCi?B)Vqo+VRhuOdo~ z8#+b}%W{#dT-C0-vq>N}R~608T|C_fi>7w{j#~@{7(BrQX8-IeRG56n&X;qgv22^{ zW|GZzc}4z^7)80n)StI=rNg>ud}caT!+7E8GclzzY>F8tq-x26>7tJvF`DUuHcZuk z1#MfdYr?cP)zdAN;=3$O-fBfzWurBFfLE&30eHv1|2@b?po64>kGdIWcEo5e9tMp;L?yT`Z1_1GHFu4If{>f%R&IOJ`_O^~q>R zGW$Wl*D7u^#obai8ck*0+}s&Lkv*SSd>p~ex{!`bUUyy@le5ve^zyRZn>{pI;aCCZu$^G6x;+-5#?Ob=j>?#omZP6Bm z{E1KKwRrIc30pZH#B@tnv`ubTG;BH;JN!uoe$s?n!W!Qmp2sj=2J)u|q}#sw5zT-@ zA%`uM{QS$Tvk|z%N_l@Q5>?^`_mL~X<%?BZopt1P;9upfl+XSTQs%Y!}asQ9w z;6umK%byJP^=3($OXNK*6+WxZTv|lt;*^Af;1FZ^C1$Mo|+gN8HfNLTJ1a}Q@mQUg-}Ai z;+zjvBhbmSNOmlt`<#`^rDOgv5F7|>kG&}|(Nan8%1A7pB^7^ME-rUFh zVV7(QFj}M?6Jo$?m~x3e7EH%>3-mS@E)kZ#G*p3vusb?W ztKkl_!v9M?##*g#1Gb{AJA;jIVW3Boc@Rt+|1~{CYki^D_K(`#*uRxpm-2Dpc{u2V zLMynue%{b5)qE~_w0c0TB=!N0c^8$bpB&(yl@WsGQ-1lg@yYLb#b|}?ua~iUb4#4E zY<{?UDON0_Wpei^)EP`ukveV=))3o{2GScnb@4;ZOmj@OI+&W5a&HAgNT-h^qcf^! z^Tct3v` zY3DS}qIri;`?v%#HN7d*>B?zr_!3r!p#F3(E?5|)dJun!a=PfrqOPn__zcJNF-cQC zy2D~=_`P3WTc11;1g9nU-+xs8EHLfGX$ia)Uwf_D#k*f~Y1i|-D50zMLRN&vzgTLG zW43pTzd)PmaahbJHwGIn!|D8`7atnCM|63=I#sikKxp*}e@xmL`k-DKjhot9hjZtr zH-{)dgG-j4dS&Kk)m$uN*yYO?WXT`7K?X*|yhR_|6P7B;L?)?%R)6c|80DH}5G62d z`J5~e+M5<|?d2)-NL+p!Yx|&-TfdWZ+i_q%(oerp$I5mEB%ul|#;|UOu}$D~{>Qo1 zU{{~>^UY)NPb()IvY}17Sh%R&`16q5u<}Eb`#_CIo7&ko2GCL$s?6;e^lGSk=Jn&q zY+ES;M7lia`KA24A2;(z;?N0(SzpPAlU%mT`B};ck;(KxA}if=a5~k%iY8KH1oDY! zBl4Z~+OmPzbVgMMFSD4o&|1W_-YTXkncBi0X|7~Tg+nJ~S~nf7H{SIZAjpNZ190tjm)R>O`$(>6*PFOXAtpMS^1TS>%Q>etQm;gJ>Ft&J}>QUR+NuFRu(Vj%GEM zC?>1xtINx&lc_D;nX(uJpMG^c5?~B&V>_Zk7S+b1C+m;i@>~SyxAqZs$o)lcH|LYw z7R6&rl@%pDY8nQ%jy0I$nn_4KLM>NzLmjA1xhx{D8Y%&j6z^H0hyY0Tqw8L@-I=!R z_V78x;?x5*##aCfL!72!^lk0Ddks>Z8b)1O)!hggAtG%G;XiOFL&kffg}-3V-AVSx%yGn10zr4s-goAX`$lW8|y%&Y9C@xM%)IrQHsG>+%T zEa?+}#$>e5ExEwPzEaWJ9YW1ucLGlD){!zCAvsPOiFF7dWsTrVgr%NEL*9O)JM8AW za@-va1L)V4HERi?Q(a#K4G$GnSmS3P_EDBliA#|5h@k{Yknht-iPr;7f;p?11<9c( zZFi?q1z9r24NW0B9msF$kl*3o4)y+z=UCtVd7-o{gk8n;H*&T z$=!^{SQiOr)#zJ{d=dT#P7?BTU&n(rI&R>XIbUC*PurkVzyX} zq`ny+qt@HNeN3CvPk(+5fgLTELq+4#Q>{0*Z*nU|G2tNGS5QEX61j`yE8H{ z-0+Uf-ar0J$FJzfc;1$;a~ra&emsy}L0vv*q2Y>1ZMuWs*LGnYQc*Wpv?QUkmoP+L zj*J4h9MNB?bw#)MHp1O=!W}v0HJI~|aY=UIsz&v3-5zHXV#O4ZRzs;nD7M62bR4+k=acQniRXpHWx<*V7#_Ix%DVK$$} zQ1$J-67V2iFM#0QZIdHz`gB^Xu`k&+1#I+q#odME$nTidV@Dkr-eJfU)(<(NZc()bB zvCL{G$f!9u{7E(7#3aEEt7VB^w@s_g$==@F1BssUaIe5-q)OraAai#6?!dT+c$)^4 zZC2C%zN`;Y=XR4Gj^WtBj2wdxUJJwQH!x%L5MRRH(;3_OE+@04*=&-7d$#$y6Z>Sl z-L1d1OGah=HqPJgC(D9ayVXrTjIyEuUcEhU`C53U}zAmAi-rfl-LGD^yk+E+!({)qH zAZHnrgy>_n#gU|_@{}9h33)A8hR{+4d!)4{J4&3y*W`ZkTBy?Kgh20*TH0!_n#%Zy zcBZ#&zutNKw&S}-nGX}ViQYIDX#&hqHIRcWzX%nQX2abis%c{vJ#PgO`l)V z(4fls&p)3sa<9V2qs)ZQRRwqX@{Y9Y-x^TOnbfnuUmdwVtldq_&PG$-(ngd?niE7_ z9H*G=gpYKVVbpkv^P=e&(p&Xvt%>t`U=NIFs-x6}}oti2)U$8|R!^LohsX9Kl z+(b3;UWGUtrh1S*8W*i!20FQ=SaE;0ITGC-9s}Qj`FFNZ`-ohd9t_00m<)PyTlf7$ zJS3|LQ;g{H&Ad{PrhCQ9{2KabxNkRGb9sj1-MPPo82w^JaUozu?ZEtF3^*^7?n{&3 zih4;Fq*i2fkRfA=1xl&)>4xd_CUPUH#=u~c9}El+8M!ahT$*TF7!Q^2(MW&e4+0@M zGz6kN2Y~IRy*kK@*~4;P6f1lmH2e8NdvIB^)3q&68Cic@)c;xD zDJJ1{pqUozxNEy;pGRBHHjX2?>0Z2*TbP>K-0F(NM)d;9(UF#+ws~AL$}ZLmD^iSU zCZ3|Wgt5jn!)!a%DHtZ67_ixgcG!mhc*Q!Um%9V)m{O z$dhV&z&zTq&fdOo6O!wYfp?QLQ};qAWE*6tEYx&2q2fat-PxG0?KwOiiD6v3oY?#c z_qj^L%MRFLtqYNmg%4LlQXSE}gcZa~?p@p{hZupo+fQqoIFffFH;HGi4d!$;1OlCmFSX%d8@q zV|1G_HUM9|Y>QDcviYZ(?Fbbu_AVMM$mL?a_9EFdz4bYqJtv;4n-f&&cEmY)XJ}g< z<@XD|Id3?gNpM`&34aybj?!%X)7eVRTHE?j33ITZnXDO-?I5ipZ#1KJQEhdTyr&~o zpilQI@XC$R6LA1mgNt=nnQStT!BZ3QZHcxSAVD~ap)5knqu+BRgmL*rV1Ug>C*Qa- z)jIC6-jQhbrNU4sJT~z*cdkXz96svI2&2#;ZAw>{nMk~r*d|A4cphv_6vb`Wl+<|P zHG)s*R>(_Mqj>O8mxG}-1a?UQwl3VLTQo_|gJwHlJXH~0P%m_mFAA1RL1c`83T)BM zBAcqsP}T6wpz0QHz&UYGKhRpy57Vq?-^lc56RVcsKj{DCiQ%8+J?~SH2s1UPZPO)h ztrgCmAVO7KM#^AJeOMX~Eb<;%Fx6#8OQTnpy#pn6%Lm>9j4& zoRx`I_KJiigZm}-rS;&@K75u!n$YScn6HE}D|Ixq9cfQx=g92?+|K-@oa#e0i3(7ws9ys?+>!&lnd( zgV+JC-k%t5+;!bDbbYOLjw8hfSLzPiFAQ*__@@`{m-^nQ3`r{YAwt>n2->TWXDuJq z`sU(g&>X0dH|Fw#ohWiNLhI0~Om?u`GW4C`l5IKpZHU6=$W0oBKW1Hl^-)VaI;r!@ zcvJ#Q+q_zv4T72YQCEF1oIX3q-pV4cD*^?#4$Ex29W{7ug=W z=~Qr&wJmcTwfobuF0q}2$upo?jtYXRqhEQUJIN(*lT`PUv_Klp^;@!_3XLHl=047K zWYL1Dft(Q@po|SS5I@J%9+^5lY=wE)jXdDMH>SZ7S9*M;T2I2G&9GJN zf2D0Kt-JMz2PCw2L9X;zWip$`GS7y5ItyfZ=epa15!^djJpZBX7Dbwj1m2%G+SKWe z3o{leuDps*n7WZjbL{r3b<@wT(l?u%HljTAy&VAxKrq%XCo|t*(E@#au}|~rXr$64 zQliI4f-9jG8l^QwjFtJP96Cw+4;y(+V!~lYHGp+&KaXHyI@TBe(}!3tg4dG-al1mZ z_rbd9s%oJ3BTgsEa-&||p{&)UF1Ka)NjC0H*VcRWMze*<@w5<3RjHLKZb2BV;;vCs$Fah9NVTj1HS@^0%@jU+z z&omZnK%6bq4(5j!9}gC#Hrfk3P8uTn<5r!*ANxbXZJ`r1N4;KRo?DG7*fPp!ot<544l{84{^D70nHz@g zcocD6r!C|Bb}L(dv7Swu{J}EmeBMMPjQ;b*tybr}qd4w(mgIVcbM%&&u1b>FD9mwe zQ?=UZrQsyew0?8KV=~yd&o{Txxf(?2NZCMZaGzy_#qF{EVp%S6_6o#%+t=JUP6N;8 zb|)OO{PQgVl;XPa%gRlLLw+g=i*t4-F?Rz1d9U|ych)HooKBLiUT3m z#uN_L+n4xrMLkJz2=odm7|s`Vs);f&?o%qb_-W@M2gw>I};{BxP6?Z66@Ow&Eb&Ee?9K>(TxD$|J8JGw_`P6;(n z|2Sd0^j6&)!wcT$5~l*j8Ci${nk*8nT$s9sKT$jZ?EkMFC~N#fUb2K?e;ov8jO&W( z2u*vF9fnpg=sg_GdZFSSn98C4AruV`>tS54TF0T_fHj`(KS`gcv(T4%H@e&n+4IB0 ze)MW2f{7f>#oJC`{teDEOqji#E{M)XmbIJxlCa`GH`5apY{*XJwRK8ajofvFH02%X zPbKk_!YUhL!*eg-68fOgM6&5?C!T2lpc&qKjb8`#vyV0Ls_RhV{CGNrQD47w5Y9!y zZmAWu2IdGf9;R0ETJDa)pp>6M@O?&;da<$wv&G>cIqCM!%3{5WV@jdvplUI>psaqF z?>~i1M3cIjdIMgJAzB_f4MiD^90NhM;YCy1)ePxoNFqEsIb<-8$#aUS@BUg5;uz4h z0ELPv2s+sXtF(Ytx)EC(_9TXo9i)UmkJvs3vY+st(F<(WhZm$eQNddC&^)!Mxrygo z180I7gAVwFBkXU@lEN1OHYzJiTvqKBnr3o zwzCP+G-p9K&THf3QvpIzZGFpP6axrTHU2SsC|($|$9!Qpk_Uy8N9ik);XCx50m3Hn|OT@!M2o|Y`T@IY}00d8O~lviU(=qTE*_SQ}LkOHC!yk1Aph^nUgVWUq7SK@cRJ2`HZ9T6e7PQ1LB_rCZ3R(DL)?c z>)Kkc+wp`=Dz6afa5#~+e-wDQ5(0ARw^m@`7*Yq}hK+D}l>U)=vpvFO2;{%(9yF`e zreQ;p5cedBe>0B#k2bz=?~Rwg(%WhO-Wn<)$9-Q~S-H!6$QK7RHX)49aoa7BN!wFK z&C_L(=ZI{H&L`%pqV*Jj*kb1ziolxd$#lM*>qhSYeI_ceebK?f^{$?ahKfjG6 zz--g`AZ#ns8*Dt_NA;D4+4o`gay2eHe(dQbqTUp{Lf<>S9=dB9ghUipm_UVh=FB3jCz+%0Pt+xX2yYQv0^YA+C0Rg;TzUv?ToG=U&WULIEI zCoe4Kl+vXlj}?-94FJO3T(DLzT`5y0ZVuxIoM5&kNoo}zN-ioX41?q4`;=_&h$2-# zC==f34dO_db*gw|k_y0WzVcX)EMR1VWq}e@T1sZ^{(=2qYKvGKBX0fVOi5QDfbQLp zm*Sj-Q?^FUYxDV&%@0!NHE|t<4Cef*Q>9pA`$_)-S-1v8;=D&eX%St{(KLT5r>3W;&*--7DZ9A8;pHSr!H} zWU1|+i}_O+2WT(;Mul&!xu9E4G4KJNXhB#afdf0ypF@?6A@GK7#ISFf7V<4U>njn@2W3P>@3nqRKrp_ zE#MjyRAD=GH9Cg@hibx=DCPgMR(7)GUDm0NdrA*66@^p<{YKKQ?shg*T=~@XpT_|w zJa;&u+FutzgaaIYF@b{9WNep|M)!2WS&~IlJhK48oGslGWI50u$+D_!--**h!rMx# zv|?02or~={arMb0^@VDhr5^0yiCBX|U#>TehEvsY#5dMl4(pKay-s|fgN-&e1`ZKx zj$y@L7pjIMYe$V;ZfPr+sD@CUs+>By(wuXKltXBexnMP}qW>ZtA@JO+;iXy`0uEfSL0mOs1Zd(JZ})eP z#i_lX%F0@q;VpDSPM0Nx1r@X`^$9f-e87q_6OS`8_ogJ4UH53Ls6VBQu|p*k%V6vc zu!U#EE_HeP+wXG$U-U%RMJu}0MO&`Dg~{@~YP$8y%etvcIg%4$A!OU4QFy_Z#6f*J zuI^wv42kAPNAm>r=B>Re)t|i-sIuz>dnJg<-k&@VCwSjcTSBZw|fi`tLAGlTijILTB8Y~g43-F zG?j%3uA9 z{W>FK^C7T*>fg7QqFf?Rminf(<>Aj*>VQj=BLfS8K=5Z{k0P^GuiM4YM77YC(WGH{ zN$oew;P{L2a>bQVtjgtoZ11=ML4M?FI`i*2dDIaRmF&%w9#U}8NR$KWu;W6hj|Z-XB`Bwq4Nfb~iiGDUHH`l6N* z!vt-J(q_)9+7PZEn#?T+tN;X|e8+!dLOt1f^Df!GUUz67btTRlIAz`l~6d|l2^hdycnof%?+k#6oQgAI#waU^JdvgvDTnjFq}jBM-| zKU)%)T|eZ`juREOFguJh`E3uDA#O^W^4_zrIBglRhxG_6$#OqfqN-=y($jvH`ic0r z(9Tv+q<5ex`HEO)e15;F@s5g%tvRo1m%(c=y9si&oT*Ea2tD>3=6KdL{jG0YE>^W* zFyCylqRJMFHFk|^A;>?}tu?XY?FEGvOQv1(W_HTj*oAL6$8EEM1MV-Xj_h=dr-425>SR(mmm#xjzp+NgOQ z7M+d3x-w!b{Nl<6S1OO$?3}E@F^!pE){kIJrSMq|YjjD<&fiE_8w=xE5AQo$HjJ?< zjlDT@SQsV#lnsZuImZUcn^^m!yB4$A;!kL$*ABX2SjOADv^xX-{^;zh31YT!p)Go% zIX$nfV|Hya^zl+hqu?P1V(WG>9ZC&4)sOpt-Ycg)@ubsl;X|QilJUPy#Z=PL5Xq)i z0+Pr^Qp8LnF0zb<2ifHoAzInAz z_?!l>(&l?wbKL*7NEhq(e)c(aoHH{lt8lp&dgR!kTd0t12E)}NKGn6>b$|ZJ%v8mY z7THpX67A`Yig?sAJlFb(s@SUm#)T})qWK}lo*V_*?eqJ$84=#ggg_~a0;Z~N+d9qcKaqlT_lE^-#8^7nL zy}j(b-!Ko6Qn?Kra%}q|Me1K*H?W5Jd>U3*9PIKLWhO1O;p^o3og^^Bpr3gN%Un%FX99(TQT6)hIpeJVJpd?d^uC2lw!xvn$?>?4 zzMs-mTxh8Sf=yejYY~7WFkfyV7*23z zI+LDnu=2p2*8NJY-s%iS4K7_$6^R9-+zRJm1m%TF6m2xx^1AY z*K4*~?N-Av)(-aCwq+YURd!^N$_GNtWDw*_w$u<@uhCm}dy|uQ0?i>t7*Vo@ z7#vqijSQl(@BvR*yDOTDVRf^x9;TC0brfM-*3!{qRC2W1nMJyu*O=EGYJHmleIKIb zet&q|+IhVQ~I5D|67Dllr*w{fT)afULK% zXQUZw=F2UZpXuAEw5`;n5iRGc<<?lw5bIk8-p;qgCd+t*NXWN+ruhNz3Jd20tScofiRc z15#B6y*21OH?8gB;iS&j^U6uQ1@!UZKDKm%H7QQXR(F3Q!OAvpN)&kCShCjSao^2o zJAx_f{b5l{@xI=j&gsR;ZZ8+Ky?Kc-dSm{Jr~k$CZpntOv5PgW(r#5{CMoRAue{M9 zHTOhWOgJ4;$yauY8E0}?LzVl#QlyLZ>+|MJy@(~8yhYf**_lBNn62qD_8za=tD1RA zIaHA5l5Nr592rG*O=5){f^5fh>AwU#)LKhQF_b1N#sq_&wlJhk)%*v^hc=UI3Mr>Icx*i%aR3mka-vZc!GmCnAHsli3u?-eA*i}Im}M~)7dQbaZSo ziCDr0BXVQjhCkJUF2>q&i6_$jEHeFNGvBuY3O&7dO)I5lruf)>aky)U2~G&e2C6|8 z!Xq1ZxN6Jge%TWl^R`!4*e_!29OD{B{_wL4=`7OZ_{&(|S>Pho@)NlK__~maG3~(n zv~q8$^71%{Cqe|0i`j!9h!+9@tXmO`R6v5>R&~!lDi4j~@h$-91*8IF!% zaWUBu%E+cF>{9cjiHdNFj7E6x{nFT(B`QH%L%x-)XG3Kktw3M3Z9D9btNimtrLYo@ z71r(k_mMSCRCI@4(2~``%lA)XX>2y@0Cf1Z3#mvtZrX5x9?tV@cq_# zgaSaNZDSRjxOU^k@$By9y_4N`^ccs4&5Pnmg%7K=5+?ep5i#m={(P&Ub#h?U`fBAZ zXHd*W!E{_*jJ>15jw;7>ZZ;Q9EQK%YNJEISl$ogdR=dgxT-9-IH`nTjDO$+v%i{R% z(v304=tv9`N7L(+7r*H zwt3BE2Kd?fJ(8={@A8T#Eb|J4M7NfGu>ziM6+srMLKJxFD_WR``@TW95k`0Dyj=Er zil6@8z8w%+XP#~Jks{|)Gn)Wqki^4g*@Ck#S9Y}u2-Xf{&8oJF+ltl11UvE!i3Nb0 z`AK3^2Q!1e1^MNv&3+u}DcfeMM_btMzWT(+-Sy z4w&ACj;9*Lz_iiX%E1r|@vriR7OWzcS4+Q{A_3RqN4&cv+X-^S>NcHGSoY4^8eeKH zZY8Gy(2uIZ*t=Q&T_%%Y*1$&%q~`w7>Dk%oX*;$VsI^=1pyGFRp{+ARz~;PxiD!(c z#ini2r#_Ar%#E(iOR)>euyRfVOJ|6^!#Kohv})gzNMi7fO@g3k`@6os3vsHe@Nm7B zjb};onqswi>rn*I?flq_jgjm~Hd1NZ-WM1A@6&j&q*QLf8J1*3a1q~oJ=ZR_EhbvDxkN2L)Wn-31HPX4~_ zhc=E!qe?IBLS$}z#`kjAIoFT-^PCxDUwpaP8nIbKOBpq(Vp~{iH{GhRLDQpPv8Y>y zT9mEj@rYB4ufJ$G9>j`Gm<(|1V5D8$a7L@(TI*mMp#8#{v(}~qO|7rMYvvW<4m_qQ z3)0J|mey!_zqHvUrbt^Cgyq6#a8PMMSi%~{7^2EX3ylUzS5g#VMsPbREyFhdbcBz| znkj=<9GhLsMM(2ghC*fUJ2k|bme2Vm)t zhD$nL=kv4nih#jdPfRjs#x2qsVBZOASJ_mD=*6ZJ=@prUnS#!5ptW1;I%dS)>ZD+1g)9a!delG#v-U-y?zDHb49Sh$X%0J3Lf7s&i zw&%K0TFAw#ZD>{Ig^&HvWdEX$ppa~j<_+?UrFq?m%s`RCtpaP1!(o?;-QW*Lc@s6R zfMIukVciGsfH!GXrnTr(r^ao5Y53mBD z;9oH-g{eBMZ;+vDXDsrD1^@)Qp()KLDU1ouc;JlnQfu0{cMY*eQlnlbDm4xQz$)X7 zACy{N$~K)OhX^%_RTo*MRL026rPmagq!w9$T7Z)R@cgCr1%pkJCrQYiHm?lrK9 z(nXW)tq*9KE(Bs27E2D=qDCN!`jD4?M4(Md$BHKKWQic-F~Z4N15pV7OGz+YY$>Wd)C;bcRi z-lDG38O$6vRhHr1)J2YX6W-gsY1!D47x_g>@iLTTuK4s=y4+tq@^6cNFIPJeQ1otyr;B-wiAWRiK#Q%F(w3t;B~h?16* zodroXWb$P#_!U6W0M}(&$~|=$7A~`otUe9#r*wJUh1N?X3p&n#Y3WK?UGQ3k=IZv- zBVoZa_rk2F;tr(T?nwa*jB#8bjopd6YU@%1xidsEYiYpJXGXKn4W0H^o*%h%#3b4l zrfH2&rY7IzpNjr8tuX-sLzXDIW6e!FrCIEVF79FJi=xVwF+x9H%Bss?6eY0%Fq0n! zR@Qdez+1X9_W+dB#8LS&SuN5;E-PVxT!G@ti@aL#=tj~mYTq)_WjPt@-~zX`Xu0KB5*}l_il+P3VjGN;hPv*F8 zH!xl|ibEi}PbS>Z2_3~2QBt(xzS4X$;Vsb#ie!xaCpPbe!e4N6d)X;W|F_;6!b8i& zuUzEoot}Yp(IZp8Ls~FeuZE;+ZwGWX1B(@iSO`ZiBtLmtM5RzPzQvW4;D} z=qsClK{prp%KmoM+ru4TuYG{Xf$6$%U*4UDoQF0VUpaGvt#V6=hb)6P zOBpIU`VS?H2HUUWi#(OZ1F2^Bd=dQx*J5c!lhl-8pn_7dVPpUVk+;}ptj35n{8UU^73S~ z-i$T^nL#E*T0&s8RK|_Y&D5#F<0w za#bk%|1>|isY1-(xH2?rt8>Xd5-5zeh&1uVv$`hqJb30|jAS~Vjm%2X;%1?H^#8&? zj}$Jr#LCU3EnQ$pefa%XC(Zf+MTix6UgIoQ#TsCbK4VO7a{y65uD>Ok^;VGI_+ZKV z01A&6Yb*;aCp7i(!};`>taY=y>#jvhs49??@BFh{wWI&0s*{`QLIBhgp_3#2DOb_Y z-b=XE;&&7r=D>|Y4?m&L4GtXyz%Ep=9O8)=fetX`kJTyB7g9tWPf#zj~F>~E)0HN_dV((*o0L<|F_hsi7D)O*GBfWy z<@LnTt}xD4^PXb6jt2tW6ebm2aa>8K4VrRp+|A66C=N?HiuJZT>RzuDz0lP>~ij3`J5Us zEm-K%>)t)QqH&()rhVpwxAs|*(1F>9WNl#?ZLJyPJ#b&Bwf!p>^hytcx@7puVghZ4 zQxyaA$YMjisE5PpaqK!zld(V>vHp4#d`gfqDZK{$N3IpvZ3K4Nb+6Fc0*T26f&G;e z=^1~)Saf4SFmFP}In(QM5UrhD$$+vnxMN@!e0H&U0tMbu%W3D5CKr4wo)b(BVR8J# zt*v-Duf$5C>mCr{#~)ehnBmTzMo?U&Zp;K6&{%iXo)~kcxg@Dh5X%m8{ zl_D|uAmEwn3lza96JuIDvkE2+a_SAR*PNqe9Fyyc74K8d!?fEaYg3NnXbOK6ls5o? zikc1p)G6f>CLmL@&VV-bu>5A#_q{xbVk3fSLbI2g>UV#nXUo?AN3Kc#%nHxTH9;@b zaLIR)^nd)u`*$Bb`_Kq4fRml^Jqum#@?`RTQat8-pF~N9te`a}A>hUgqC^M1>pJp5N&W3^v)+rkkLAOBcr}`j+gu)o zye%_hrxof-!Mb3IwXAS}nwSF7+FSZuRWMDI{8IZkVTfSYi|w^-)@by1%q^+RI7(V> zf`0v1`LY<(x}bikgWrPv&vX~#+ulCizJ8;zNg>u0;JEv1=B(RFuu!R zlW2uO5dk6eV�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 z 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 literal 0 HcmV?d00001 diff --git a/apps/web/src/components/ChatMarkdown.test.tsx b/apps/web/src/components/ChatMarkdown.test.tsx index ca333f46a083c1b6320b578d51a2ded0d993a813..55c11d2644dd87f3f67e3ebda822bcb7ef323570 100644 --- a/apps/web/src/components/ChatMarkdown.test.tsx +++ b/apps/web/src/components/ChatMarkdown.test.tsx @@ -19,6 +19,9 @@ import { setMarkdownTaskChecked } from "./files/filePreviewMode"; vi.mock("../hooks/useFileMetadata", () => ({ useFileMetadata: () => null })); vi.mock("@effect/atom-react", () => ({ useAtomValue: () => null })); +vi.mock("../state/query", () => ({ + useEnvironmentQuery: () => ({ data: null, error: null }), +})); vi.mock("./chat/MermaidDiagram", () => ({ // Real Mermaid needs layout APIs jsdom lacks; a rendered diagram is an SVG. MermaidDiagram: () => , @@ -95,6 +98,286 @@ function codeButton(renderer: ReactTestRenderer, label: string) { return button.props as ComponentProps; } +describe("ChatMarkdown inline rendering", () => { + it.each([true, false])( + "keeps authored file-link labels as one actionable chip with parseRawHtml=%s", + async (parseRawHtml) => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + const container = document.createElement("div"); + document.body.append(container); + const root = createRoot(container); + const text = + "[relative](./foo.md), [**formatted** `source`](./src/main.ts), [ref][file] and [foo.md](./foo.md)\n\n[file]: ./bar.md"; + try { + await act(() => + root.render( + , + ), + ); + const chips = [ + ...container.querySelectorAll("a.chat-markdown-file-link"), + ]; + expect(chips.map((chip) => chip.textContent)).toEqual([ + "relative", + "formatted source", + "ref", + "foo.md", + ]); + expect(container.querySelector("p")!.textContent).toBe( + "relative, formatted source, ref and foo.md", + ); + expect(chips.map((chip) => chip.getAttribute("href"))).toEqual([ + "/workspace/project/./foo.md", + "/workspace/project/./src/main.ts", + "/workspace/project/./bar.md", + "/workspace/project/./foo.md", + ]); + expect(chips[1]!.querySelector("strong")!.textContent).toBe("formatted"); + expect(chips[1]!.querySelector("code")!.textContent).toBe("source"); + chips[0]!.focus(); + expect(document.activeElement).toBe(chips[0]); + expect(chips[0]!.getAttribute("aria-description")).toBe("/workspace/project/./foo.md"); + } finally { + await act(() => root.unmount()); + container.remove(); + vi.unstubAllGlobals(); + } + }, + ); +}); + +describe("ChatMarkdown consecutive videos", () => { + it.each([ + [ + "separate paragraphs", + "![First](https://media.test/first.mp4)\n\n![Second](https://media.test/second.webm)", + ], + [ + "one paragraph", + "![First](https://media.test/first.mp4) ![Second](https://media.test/second.webm)", + ], + [ + "hard breaks", + "![First](https://media.test/first.mp4) \n![Second](https://media.test/second.webm)", + ], + [ + "reference images", + "![First][first]\n\n![Second][second]\n\n[first]: https://media.test/first.mp4\n[second]: https://media.test/second.webm", + ], + [ + "sanitized HTML images", + 'First\n\nSecond', + ], + ])("groups %s without changing playback sources or accessible names", async (_case, text) => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + const pause = vi.spyOn(HTMLMediaElement.prototype, "pause").mockImplementation(() => {}); + const container = document.createElement("div"); + const root = createRoot(container); + try { + await act(() => root.render()); + const gallery = container.querySelector(".chat-markdown-video-row"); + expect(gallery).not.toBeNull(); + const videos = [...gallery!.querySelectorAll("video")]; + expect(videos.map((video) => video.src)).toEqual([ + "https://media.test/first.mp4", + "https://media.test/second.webm", + ]); + expect(videos.map((video) => video.getAttribute("aria-label"))).toEqual(["First", "Second"]); + expect(videos.every((video) => !video.controls && video.playsInline)).toBe(true); + expect(gallery!.querySelectorAll('button[aria-label="Play video"]')).toHaveLength(2); + if (_case === "sanitized HTML images") { + expect(videos[0]!.style.aspectRatio).toBe("640 / 480"); + } + } finally { + await act(() => root.unmount()); + pause.mockRestore(); + vi.unstubAllGlobals(); + } + }); + + it("keeps prose, links, and images separate from grouped and lone videos", async () => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + const pause = vi.spyOn(HTMLMediaElement.prototype, "pause").mockImplementation(() => {}); + const container = document.createElement("div"); + const root = createRoot(container); + const text = [ + "![First](https://media.test/first.mp4)", + "![Second](https://media.test/second.webm)", + "Between videos.", + "![Third](https://media.test/third.mp4)", + "[Source](https://media.test/source)", + "![Still](https://media.test/still.png)", + "Caption ![Inline](https://media.test/inline.mp4)", + "![Last](https://media.test/last.mp4)", + ].join("\n\n"); + try { + await act(() => root.render()); + expect( + [...container.querySelectorAll(".chat-markdown-video-row")].map((row) => + row.getAttribute("data-video-count"), + ), + ).toEqual(["2", "1", "1"]); + expect( + container.querySelector(".chat-markdown-video-row")!.querySelectorAll("video"), + ).toHaveLength(2); + const paragraphs = [...container.querySelectorAll("p")]; + expect(paragraphs.map((paragraph) => paragraph.textContent)).toContain("Between videos."); + expect(container.querySelector('video[aria-label="Third"]')?.getAttribute("src")).toBe( + "https://media.test/third.mp4", + ); + expect(container.querySelector('video[aria-label="Last"]')?.getAttribute("src")).toBe( + "https://media.test/last.mp4", + ); + expect( + container + .querySelector('a[href="https://media.test/source"]')! + .closest(".chat-markdown-video-row"), + ).toBeNull(); + expect( + container.querySelector('img[alt="Still"]')!.closest(".chat-markdown-video-row"), + ).toBeNull(); + const caption = paragraphs.find((paragraph) => + paragraph.querySelector('[aria-label="Inline"]'), + )!; + const prose = [...caption.childNodes] + .filter((node) => node.nodeType === Node.TEXT_NODE) + .map((node) => node.textContent) + .join(""); + expect(prose).toBe("Caption "); + } finally { + await act(() => root.unmount()); + pause.mockRestore(); + vi.unstubAllGlobals(); + } + }); + + it("keeps literal HTML mode and raw-video sanitization unchanged", async () => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + const pause = vi.spyOn(HTMLMediaElement.prototype, "pause").mockImplementation(() => {}); + const container = document.createElement("div"); + const root = createRoot(container); + try { + await act(() => + root.render( + ' + } + />, + ), + ); + expect(container.querySelectorAll("video")).toHaveLength(2); + expect(container.querySelectorAll(".chat-markdown-video-row")).toHaveLength(1); + expect(container.textContent).toContain( + '', + ); + await act(() => + root.render( + , + ), + ); + expect(container.querySelector("video")).toBeNull(); + } finally { + await act(() => root.unmount()); + pause.mockRestore(); + vi.unstubAllGlobals(); + } + }); + + it("preserves authored paragraph anchors beside grouped videos", async () => { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + const pause = vi.spyOn(HTMLMediaElement.prototype, "pause").mockImplementation(() => {}); + const container = document.createElement("div"); + const root = createRoot(container); + try { + await act(() => + root.render( + Anchored

EK3L7Tu#9!T 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