@kabmo-labs/kabmo 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/client/index.html +1 -1
- package/dist/client/index.js +403 -384
- package/dist/client/static/js/{index-0wvbca0b.js → index-bpptfkz2.js} +905 -875
- package/dist/client/static/js/index-k315p1e8.css +1 -0
- package/package.json +10 -1
- package/src/client/components/common/code-surface/documents.test.ts +120 -0
- package/src/client/components/common/code-surface/documents.ts +201 -0
- package/src/client/components/common/code-surface/extensions.test.ts +110 -0
- package/src/client/components/common/code-surface/extensions.ts +162 -0
- package/src/client/components/common/code-surface/handle.ts +102 -0
- package/src/client/components/common/code-surface/index.tsx +253 -314
- package/src/client/components/common/code-surface/keymap.test.ts +133 -0
- package/src/client/components/common/code-surface/keymap.ts +267 -0
- package/src/client/components/common/code-surface/marks.ts +74 -0
- package/src/client/components/common/code-surface/shiki.ts +234 -0
- package/src/client/components/common/code-surface/sync.test.ts +185 -0
- package/src/client/components/common/code-surface/sync.ts +58 -0
- package/src/client/components/common/code-surface/theme.test.ts +202 -0
- package/src/client/components/common/code-surface/theme.ts +111 -0
- package/src/client/components/common/editor-view-buttons/index.test.tsx +148 -0
- package/src/client/components/common/editor-view-buttons/index.tsx +109 -0
- package/src/client/components/common/header-controls/index.tsx +24 -1
- package/src/client/components/common/header-controls/shell-chrome.test.tsx +272 -0
- package/src/client/components/common/shell-update-button/Modal.tsx +163 -0
- package/src/client/components/common/shell-update-button/index.test.tsx +251 -0
- package/src/client/components/common/shell-update-button/index.tsx +125 -0
- package/src/client/components/common/toolbar-row/index.test.tsx +166 -0
- package/src/client/components/common/toolbar-row/index.tsx +189 -0
- package/src/client/components/common/workspace-options-menu/index.tsx +19 -1
- package/src/client/components/layout/desktop-layout/TopNavbar.tsx +5 -6
- package/src/client/components/layout/desktop-layout/WorkspacePanels.tsx +41 -78
- package/src/client/components/layout/desktop-layout/index.tsx +55 -69
- package/src/client/components/layout/desktop-layout/resizer/index.tsx +6 -3
- package/src/client/components/layout/session-sidebar/CategoryHeader.tsx +24 -0
- package/src/client/components/layout/session-sidebar/CategoryHeader.worktree.test.tsx +126 -0
- package/src/client/components/layout/session-sidebar/CategoryItem.tsx +4 -0
- package/src/client/components/layout/session-sidebar/Footer.tsx +8 -15
- package/src/client/components/layout/session-sidebar/SessionItem.tsx +12 -0
- package/src/client/components/layout/session-sidebar/SessionList.tsx +4 -0
- package/src/client/components/layout/session-sidebar/SessionsView.tsx +24 -0
- package/src/client/components/layout/session-sidebar/WorktreeBadge.test.ts +48 -0
- package/src/client/components/layout/session-sidebar/WorktreeBadge.tsx +55 -0
- package/src/client/components/mobile/LayoutWrapper.tsx +23 -16
- package/src/client/components/mobile/RightSidebar.tsx +21 -10
- package/src/client/components/mobile/SessionSidebar.tsx +8 -0
- package/src/client/components/mobile/header-titlebar.test.tsx +172 -0
- package/src/client/components/mobile/mobile-main-view/Header.tsx +10 -1
- package/src/client/components/mobile/mobile-right-sidebar/FullDiff.tsx +3 -0
- package/src/client/components/mobile/mobile-right-sidebar/FullEditor.tsx +63 -38
- package/src/client/components/mobile/mobile-right-sidebar/OutlineButton.test.tsx +137 -0
- package/src/client/components/mobile/mobile-right-sidebar/OutlineButton.tsx +14 -3
- package/src/client/components/mobile/mobile-session-sidebar/Footer.tsx +9 -21
- package/src/client/components/mobile/mobile-session-sidebar/Header.tsx +6 -2
- package/src/client/components/mobile/mobile-session-sidebar/Item.tsx +16 -0
- package/src/client/components/mobile/mobile-session-sidebar/List.tsx +4 -0
- package/src/client/components/mobile/mobile-session-sidebar/SessionRow.tsx +5 -0
- package/src/client/components/mobile/mobile-session-sidebar/WorktreeDialog.tsx +49 -0
- package/src/client/components/mobile/worktree-session.ts +51 -0
- package/src/client/components/settings/Modal.tsx +8 -0
- package/src/client/components/settings/categories/AppearanceSettings.tsx +3 -0
- package/src/client/components/settings/categories/ProjectSettings.tsx +22 -8
- package/src/client/components/settings/categories/appearance-settings/EditorThemeSection.test.tsx +167 -0
- package/src/client/components/settings/categories/appearance-settings/EditorThemeSection.tsx +184 -0
- package/src/client/components/settings/categories/project-settings/WorktreeSettings.tsx +146 -0
- package/src/client/components/settings/categories/project-settings/worktree-row.test.ts +83 -0
- package/src/client/components/settings/categories/project-settings/worktree-row.ts +47 -0
- package/src/client/components/workspace/chat-timeline/EmptyWorkspacePrompt.tsx +36 -55
- package/src/client/components/workspace/chat-timeline/PendingChatView.tsx +8 -0
- package/src/client/components/workspace/chat-timeline/SystemNotice.tsx +9 -4
- package/src/client/components/workspace/chat-timeline/TaskResultContent.tsx +9 -7
- package/src/client/components/workspace/chat-timeline/index.tsx +5 -0
- package/src/client/components/workspace/chat-timeline/target-picker/WorkspacePicker.test.tsx +132 -0
- package/src/client/components/workspace/chat-timeline/target-picker/WorkspacePicker.tsx +120 -0
- package/src/client/components/workspace/chat-timeline/target-picker/WorktreePicker.test.tsx +319 -0
- package/src/client/components/workspace/chat-timeline/target-picker/WorktreePicker.tsx +285 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/index.test.ts +2 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/hashline-patch/index.tsx +34 -29
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/AstEdit.tsx +11 -9
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Bash.tsx +10 -7
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Edit.tsx +25 -8
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Eval.test.tsx +146 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Eval.tsx +32 -17
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/FileMatches.test.ts +114 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/FileMatches.tsx +111 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Read.tsx +7 -7
- package/src/client/components/workspace/chat-timeline/tool-renderers/panels/SearchTool.tsx +9 -59
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ArtifactBody.tsx +2 -7
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/DiffView.test.ts +27 -28
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/DiffView.tsx +39 -26
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/ExcerptCode.tsx +8 -8
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/HighlightedCode.tsx +35 -0
- package/src/client/components/workspace/chat-timeline/tool-renderers/shared/JsonCodeBlock.tsx +4 -4
- package/src/client/components/workspace/diff-panel/MergeDiffView.tsx +179 -0
- package/src/client/components/workspace/diff-panel/ThemedMergeDiffView.tsx +24 -0
- package/src/client/components/workspace/diff-panel/Toolbar.tsx +224 -186
- package/src/client/components/workspace/diff-panel/ToolbarSegments.tsx +98 -0
- package/src/client/components/workspace/diff-panel/index.tsx +76 -145
- package/src/client/components/workspace/diff-panel/merge.ts +315 -0
- package/src/client/components/workspace/editor/Body.tsx +4 -7
- package/src/client/components/workspace/editor/CommandPalette.tsx +2 -2
- package/src/client/components/workspace/editor/FileDocument.tsx +58 -63
- package/src/client/components/workspace/editor/FilePane.tsx +4 -7
- package/src/client/components/workspace/editor/FindWidget.tsx +7 -2
- package/src/client/components/workspace/editor/Toolbar.tsx +220 -123
- package/src/client/components/workspace/editor/index.tsx +7 -9
- package/src/client/components/workspace/file-explorer/ContextMenu.tsx +2 -1
- package/src/client/components/workspace/file-explorer/Modals.tsx +40 -12
- package/src/client/components/workspace/file-explorer/OutlineSection.test.tsx +18 -0
- package/src/client/components/workspace/file-explorer/OutlineSection.tsx +10 -3
- package/src/client/components/workspace/file-explorer/RootMenu.tsx +14 -5
- package/src/client/components/workspace/file-explorer/Toolbar.tsx +74 -0
- package/src/client/components/workspace/file-explorer/TreeItem.tsx +38 -3
- package/src/client/components/workspace/file-explorer/filter.ts +47 -0
- package/src/client/components/workspace/file-explorer/index.tsx +77 -64
- package/src/client/components/workspace/file-explorer/local-edit.test.ts +135 -0
- package/src/client/components/workspace/search-panel/Body.tsx +1 -1
- package/src/client/components/workspace/worktree-modal/index.test.tsx +118 -0
- package/src/client/components/workspace/worktree-modal/index.tsx +261 -0
- package/src/client/hooks/chat/omp/reconnect.test.ts +338 -0
- package/src/client/hooks/chat/omp/reconnect.ts +187 -0
- package/src/client/hooks/chat/omp/run-liveness.test.ts +71 -0
- package/src/client/hooks/chat/omp/run-liveness.ts +65 -0
- package/src/client/hooks/chat/omp/session-list.activity.test.ts +114 -0
- package/src/client/hooks/chat/omp/session-list.test-util.ts +164 -0
- package/src/client/hooks/chat/omp/session-list.test.ts +30 -150
- package/src/client/hooks/chat/omp/session-list.tsx +69 -9
- package/src/client/hooks/chat/timeline/generating.ts +19 -2
- package/src/client/hooks/chat/timeline/index.ts +27 -28
- package/src/client/hooks/chat/timeline/lost-run.test.ts +329 -0
- package/src/client/hooks/chat/timeline/lost-run.ts +177 -0
- package/src/client/hooks/chat/timeline/send-execute.test.ts +2 -0
- package/src/client/hooks/chat/timeline/send-steer.test.ts +2 -0
- package/src/client/hooks/chat/timeline/send.test.ts +2 -0
- package/src/client/hooks/chat/timeline/send.ts +11 -1
- package/src/client/hooks/chat/timeline/session-load.test-util.ts +205 -0
- package/src/client/hooks/chat/timeline/session-load.test.ts +61 -162
- package/src/client/hooks/chat/timeline/session-load.ts +69 -37
- package/src/client/hooks/chat/timeline/session-switch.test.ts +65 -0
- package/src/client/hooks/chat/timeline/session-switch.ts +63 -0
- package/src/client/hooks/chat/timeline/spawn-target.ts +52 -0
- package/src/client/hooks/chat/timeline/tool-open.test.ts +74 -0
- package/src/client/hooks/chat/timeline/tool-open.ts +52 -8
- package/src/client/hooks/code/deferred-highlight.test.ts +182 -0
- package/src/client/hooks/code/deferred-highlight.ts +129 -0
- package/src/client/hooks/editor/find-state.ts +1 -1
- package/src/client/hooks/editor/theme.test.ts +206 -0
- package/src/client/hooks/editor/theme.ts +82 -0
- package/src/client/hooks/editor/use-editor-drop.test.ts +101 -0
- package/src/client/hooks/editor/use-editor-drop.ts +67 -14
- package/src/client/hooks/editor/use-editor-find.ts +7 -7
- package/src/client/hooks/editor/use-outline-view.test.ts +182 -0
- package/src/client/hooks/editor/use-outline-view.ts +94 -7
- package/src/client/hooks/editor/use-scroll-restore.test.ts +55 -2
- package/src/client/hooks/editor/use-scroll-restore.ts +124 -4
- package/src/client/hooks/editor/use-search-reveal.ts +1 -1
- package/src/client/hooks/ui/long-press.test.ts +174 -0
- package/src/client/hooks/ui/long-press.ts +112 -0
- package/src/client/hooks/ui/settings-modal.ts +56 -0
- package/src/client/hooks/ui/updates/shell-download.test.ts +75 -0
- package/src/client/hooks/ui/updates/shell-download.ts +153 -28
- package/src/client/hooks/ui/updates/shell-offer.test.ts +213 -0
- package/src/client/hooks/ui/updates/shell-update.test.ts +140 -0
- package/src/client/hooks/ui/updates/shell-update.ts +119 -0
- package/src/client/hooks/workspace/diff-file.ts +29 -10
- package/src/client/hooks/workspace/diff-git-actions.ts +147 -0
- package/src/client/hooks/workspace/editor-view.ts +61 -0
- package/src/client/hooks/workspace/file-create.ts +41 -11
- package/src/client/hooks/workspace/file-listing.ts +56 -1
- package/src/client/hooks/workspace/file-tabs.test.ts +62 -5
- package/src/client/hooks/workspace/file-tabs.ts +24 -11
- package/src/client/hooks/workspace/file-tree-actions.ts +37 -5
- package/src/client/hooks/workspace/navbar-session-actions.ts +72 -0
- package/src/client/hooks/workspace/worktree/index.ts +165 -0
- package/src/client/lib/desktop/bridge.ts +45 -0
- package/src/client/lib/search-reveal.ts +1 -1
- package/src/client/main.tsx +5 -1
- package/src/client/tailwind.css +56 -8
- package/src/server/index.ts +7 -2
- package/src/server/lib/auth/guard.test.ts +28 -0
- package/src/server/lib/auth/guard.ts +10 -0
- package/src/server/lib/bundler/titlebar-css.test.ts +42 -1
- package/src/server/lib/db/schema.ts +4 -0
- package/src/server/lib/db/worktree-registry.server.ts +91 -0
- package/src/server/lib/fs/canonical.ts +52 -0
- package/src/server/lib/fs/relative-path.ts +48 -0
- package/src/server/lib/fs/root-worktree.test.ts +116 -0
- package/src/server/lib/fs/root.ts +39 -10
- package/src/server/lib/fs/worktree/carry.ts +134 -0
- package/src/server/lib/fs/worktree/create.test.ts +249 -0
- package/src/server/lib/fs/worktree/create.ts +262 -0
- package/src/server/lib/fs/worktree/errors.ts +43 -0
- package/src/server/lib/fs/worktree/list.test.ts +207 -0
- package/src/server/lib/fs/worktree/list.ts +142 -0
- package/src/server/lib/fs/worktree/location.test.ts +206 -0
- package/src/server/lib/fs/worktree/location.ts +114 -0
- package/src/server/lib/fs/worktree/project-id.ts +53 -0
- package/src/server/lib/fs/worktree/remove.test.ts +242 -0
- package/src/server/lib/fs/worktree/remove.ts +152 -0
- package/src/server/lib/fs/worktree/settings.server.ts +56 -0
- package/src/server/lib/fs/worktree/topology.ts +142 -0
- package/src/server/lib/lifecycle/claim-port.test.ts +156 -0
- package/src/server/lib/lifecycle/port-guard.test.ts +20 -164
- package/src/server/lib/lifecycle/port-guard.ts +39 -7
- package/src/server/lib/lifecycle/probe-health.test.ts +166 -0
- package/src/server/lib/lifecycle/probe.test.ts +77 -164
- package/src/server/lib/lifecycle/probe.ts +121 -13
- package/src/server/lib/omp/rpc/frame-fold-signals.test.ts +112 -0
- package/src/server/lib/omp/rpc/frame-fold.ts +10 -5
- package/src/server/lib/omp/session/sidebar-activity.server.test.ts +162 -0
- package/src/server/lib/omp/session/sidebar-activity.server.ts +70 -0
- package/src/server/lib/omp/session/sidebar-data.canonical.test.ts +155 -0
- package/src/server/lib/omp/session/sidebar-data.server.ts +28 -1
- package/src/server/lib/omp/session/telemetry/compute.ts +13 -1
- package/src/server/lib/omp/session/telemetry.test.ts +33 -0
- package/src/server/lib/panels/local-edits.server.ts +33 -0
- package/src/server/lib/panels/sync.fixture.test-util.ts +92 -0
- package/src/server/lib/panels/sync.local-edits.test.ts +150 -0
- package/src/server/lib/panels/sync.server.test.ts +125 -147
- package/src/server/lib/panels/sync.server.ts +153 -48
- package/src/server/lib/realtime/signals.server.ts +10 -0
- package/src/server/lib/realtime/topics/catalog.server.ts +4 -1
- package/src/server/lib/realtime/topics.server.ts +16 -0
- package/src/server/lib/updates/shell-assets.test.ts +114 -0
- package/src/server/lib/updates/shell-assets.ts +200 -0
- package/src/server/lib/updates/shell-cache.ts +105 -0
- package/src/server/lib/updates/shell-pages.test.ts +187 -0
- package/src/server/lib/updates/shell-pages.ts +157 -0
- package/src/server/lib/updates/shell-release-desktop.test.ts +166 -0
- package/src/server/lib/updates/shell-release.test.ts +59 -71
- package/src/server/lib/updates/shell-release.ts +178 -198
- package/src/server/routes/fs/action-create.test.ts +18 -13
- package/src/server/routes/fs/action-nested.test.ts +184 -0
- package/src/server/routes/fs/action.ts +47 -16
- package/src/server/routes/fs/git-merge.test.ts +11 -1
- package/src/server/routes/fs/read.test.ts +24 -7
- package/src/server/routes/fs/scope.test.ts +15 -10
- package/src/server/routes/fs/scope.ts +3 -14
- package/src/server/routes/index.ts +2 -0
- package/src/server/routes/updates/android.ts +6 -1
- package/src/server/routes/updates/desktop.ts +59 -0
- package/src/server/routes/updates/index.ts +2 -0
- package/src/server/routes/updates/ios.ts +5 -1
- package/src/server/routes/worktrees/create.ts +138 -0
- package/src/server/routes/worktrees/index.ts +25 -0
- package/src/server/routes/worktrees/list.ts +134 -0
- package/src/server/routes/worktrees/remove.ts +102 -0
- package/src/server/routes/worktrees/routes.test.ts +326 -0
- package/src/server/routes/worktrees/shared.ts +90 -0
- package/src/shared/lib/chat/timeline/omp-callbacks.test.ts +36 -0
- package/src/shared/lib/chat/timeline/omp-callbacks.ts +18 -0
- package/src/shared/lib/chat/timeline/run-signals.test.ts +2 -0
- package/src/shared/lib/code/editor/comment-syntax.test.ts +37 -0
- package/src/shared/lib/code/editor/comment-syntax.ts +55 -0
- package/src/shared/lib/code/editor/find-replace.test.ts +134 -0
- package/src/shared/lib/code/editor/{find.ts → find-replace.ts} +23 -107
- package/src/shared/lib/code/editor/{find.test.ts → find-scan.test.ts} +19 -73
- package/src/shared/lib/code/editor/find-scan.ts +177 -0
- package/src/shared/lib/code/editor/keymap.ts +3 -3
- package/src/shared/lib/code/editor/lines.test.ts +7 -55
- package/src/shared/lib/code/editor/lines.ts +8 -48
- package/src/shared/lib/code/editor/marks.test.ts +4 -5
- package/src/shared/lib/code/editor/marks.ts +13 -25
- package/src/shared/lib/code/editor/theme-loader.ts +97 -0
- package/src/shared/lib/code/editor/themes.generated.ts +156 -0
- package/src/shared/lib/code/editor/themes.test.ts +165 -0
- package/src/shared/lib/code/editor/themes.ts +165 -0
- package/src/shared/lib/code/highlight-memo.test.ts +103 -0
- package/src/shared/lib/code/highlight-memo.ts +149 -0
- package/src/shared/lib/code/highlighter-warmup.ts +112 -0
- package/src/shared/lib/code/highlighter.ts +3 -1
- package/src/shared/lib/code/idle.ts +37 -0
- package/src/shared/lib/code/outline/rows.test.ts +96 -0
- package/src/shared/lib/code/outline/rows.ts +94 -0
- package/src/shared/lib/code/syntax-highlight.test.ts +1 -79
- package/src/shared/lib/code/syntax-highlight.ts +2 -3
- package/src/shared/lib/fs/file-kind-classify.test.ts +25 -11
- package/src/shared/lib/fs/file-kind.ts +47 -13
- package/src/shared/lib/fs/file-tree.test.ts +183 -0
- package/src/shared/lib/fs/file-tree.ts +159 -0
- package/src/shared/lib/fs/file-url.test.ts +52 -0
- package/src/shared/lib/fs/file-url.ts +37 -0
- package/src/shared/lib/fs/patch-sides.test.ts +114 -0
- package/src/shared/lib/fs/patch-sides.ts +139 -0
- package/src/shared/lib/fs/paths.test.ts +24 -1
- package/src/shared/lib/fs/paths.ts +17 -0
- package/src/shared/lib/fs/worktree/settings-keys.ts +18 -0
- package/src/shared/lib/omp/session/prewarm.ts +7 -0
- package/src/shared/lib/realtime/protocol.ts +16 -0
- package/src/shared/lib/ui/toolbar-overflow.test.ts +83 -0
- package/src/shared/lib/ui/toolbar-overflow.ts +86 -0
- package/src/shared/lib/updates/shell-arch.ts +54 -0
- package/src/shared/lib/updates/shell-ua.ts +24 -4
- package/src/shared/lib/workspace/active-project.ts +23 -0
- package/src/shared/lib/workspace/editor-view-mode.test.ts +70 -0
- package/src/shared/lib/workspace/editor-view-mode.ts +48 -0
- package/src/shared/lib/workspace/panel-widths.test.ts +30 -0
- package/src/shared/lib/workspace/panel-widths.ts +25 -5
- package/src/shared/lib/workspace/session-state/cache.ts +159 -0
- package/src/shared/lib/workspace/session-state/harness.test-util.ts +55 -0
- package/src/shared/lib/workspace/session-state/merge.ts +100 -0
- package/src/shared/lib/workspace/session-state/store-load.test.ts +206 -0
- package/src/shared/lib/workspace/session-state/store.test.ts +17 -139
- package/src/shared/lib/workspace/session-state/store.ts +92 -130
- package/src/shared/lib/workspace/workspace-modules.test.ts +49 -1
- package/src/shared/lib/workspace/workspace-panel-widths.ts +124 -0
- package/src/shared/lib/workspace/worktree/branch-name.test.ts +95 -0
- package/src/shared/lib/workspace/worktree/branch-name.ts +115 -0
- package/src/shared/lib/workspace/worktree/types.ts +104 -0
- package/src/shared/types/fs.ts +10 -0
- package/src/shared/types/realtime.ts +29 -0
- package/src/shared/types/settings/state.ts +10 -0
- package/src/shared/types/workspace.ts +14 -0
- package/src/test-support/file-explorer-disk.test-util.ts +76 -0
- package/src/test-support/file-explorer.test-util.ts +71 -40
- package/src/test-support/loopback.ts +183 -0
- package/dist/client/static/js/index-nzyjf92m.css +0 -1
- package/src/client/components/common/code-editor/handler.test.ts +0 -274
- package/src/client/components/common/code-editor/handler.ts +0 -175
- package/src/client/components/common/code-editor/index.tsx +0 -314
- package/src/client/components/common/code-surface/measure.ts +0 -148
- package/src/client/components/workspace/diff-panel/SplitView.tsx +0 -209
- package/src/client/components/workspace/diff-panel/UnifiedView.tsx +0 -150
- package/src/client/hooks/editor/scroll-container.test.ts +0 -102
- package/src/client/hooks/editor/scroll-container.ts +0 -26
- package/src/client/hooks/editor/use-code-window.ts +0 -100
- package/src/client/hooks/editor/use-editor-history.test.ts +0 -216
- package/src/client/hooks/editor/use-editor-history.ts +0 -134
- package/src/client/hooks/editor/use-occurrences.test.ts +0 -236
- package/src/client/hooks/editor/use-occurrences.ts +0 -98
- package/src/shared/lib/code/editor/commands.test.ts +0 -155
- package/src/shared/lib/code/editor/commands.ts +0 -260
- package/src/shared/lib/code/editor/edits.test.ts +0 -100
- package/src/shared/lib/code/editor/edits.ts +0 -122
- package/src/shared/lib/code/editor/history.test.ts +0 -118
- package/src/shared/lib/code/editor/history.ts +0 -101
- package/src/shared/lib/code/editor/layers.test.ts +0 -77
- package/src/shared/lib/code/editor/layers.ts +0 -67
- package/src/shared/lib/code/editor/line-edits.test.ts +0 -131
- package/src/shared/lib/code/editor/line-edits.ts +0 -159
- package/src/shared/lib/code/editor/occurrences.test.ts +0 -117
- package/src/shared/lib/code/editor/occurrences.ts +0 -111
- package/src/shared/lib/code/editor/reset-css.test.ts +0 -35
- package/src/shared/lib/code/editor/reset-css.ts +0 -32
- package/src/shared/lib/code/editor/text-commands.test.ts +0 -178
- package/src/shared/lib/code/editor/text-commands.ts +0 -154
- package/src/shared/lib/code/lazy-window.test.ts +0 -161
- package/src/shared/lib/code/lazy-window.ts +0 -156
- package/src/shared/lib/code/windowed-highlight.ts +0 -114
- package/src/shared/lib/fs/diff-parser.test.ts +0 -116
- package/src/shared/lib/fs/diff-parser.ts +0 -213
|
@@ -4,21 +4,17 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Line arithmetic, which
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Line arithmetic, which the highlighter's per-line walk and the find widget's
|
|
8
|
+
* "jump to line N" both read.
|
|
9
|
+
*
|
|
10
|
+
* The interesting cases are the two the arithmetic gets wrong by accident: the
|
|
11
|
+
* empty line a trailing newline opens, and an offset past the end of the
|
|
12
|
+
* document.
|
|
11
13
|
*/
|
|
12
14
|
|
|
13
15
|
import { describe, expect, test } from 'bun:test';
|
|
14
16
|
|
|
15
|
-
import {
|
|
16
|
-
countLines,
|
|
17
|
-
lineIndexAt,
|
|
18
|
-
lineRangeAt,
|
|
19
|
-
lineRangesInSelection,
|
|
20
|
-
lineStartOffset,
|
|
21
|
-
} from '@/shared/lib/code/editor/lines';
|
|
17
|
+
import { lineIndexAt, lineStartOffset } from '@/shared/lib/code/editor/lines';
|
|
22
18
|
|
|
23
19
|
describe('lineIndexAt and lineStartOffset', () => {
|
|
24
20
|
test('are inverses for every line start', () => {
|
|
@@ -34,48 +30,4 @@ describe('lineIndexAt and lineStartOffset', () => {
|
|
|
34
30
|
expect(lineIndexAt('one\ntwo', 999)).toBe(1);
|
|
35
31
|
expect(lineStartOffset('one\ntwo', 99)).toBe(7);
|
|
36
32
|
});
|
|
37
|
-
|
|
38
|
-
test('count a trailing newline as opening one more, empty line', () => {
|
|
39
|
-
expect(countLines('one\ntwo')).toBe(2);
|
|
40
|
-
expect(countLines('one\ntwo\n')).toBe(3);
|
|
41
|
-
expect(countLines('')).toBe(1);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('lineRangeAt', () => {
|
|
46
|
-
test('includes the trailing newline, so the range can delete or move the line', () => {
|
|
47
|
-
expect(lineRangeAt('one\ntwo\nthree', 5)).toEqual({ start: 4, end: 8 });
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test('the last line has no newline to include', () => {
|
|
51
|
-
expect(lineRangeAt('one\ntwo', 5)).toEqual({ start: 4, end: 7 });
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
test('a caret on the empty line a trailing newline opens yields an empty range there', () => {
|
|
55
|
-
// `a\n` has an empty second line at offset 2; the honest reading of that
|
|
56
|
-
// position is "no characters of its own", not the previous line.
|
|
57
|
-
expect(lineRangeAt('a\n', 2)).toEqual({ start: 2, end: 2 });
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
describe('lineRangesInSelection', () => {
|
|
62
|
-
test('covers every line the selection touches', () => {
|
|
63
|
-
const text = 'one\ntwo\nthree';
|
|
64
|
-
expect(lineRangesInSelection(text, { start: 4, end: 7 })).toEqual([{ start: 4, end: 8 }]);
|
|
65
|
-
expect(lineRangesInSelection(text, { start: 0, end: 7 })).toEqual([
|
|
66
|
-
{ start: 0, end: 4 },
|
|
67
|
-
{ start: 4, end: 8 },
|
|
68
|
-
]);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
test('a selection ending exactly at a line start does not touch that line', () => {
|
|
72
|
-
// The rule VS Code applies, and the one that keeps a whole-line selection
|
|
73
|
-
// from splitting off an empty trailing entry.
|
|
74
|
-
const text = 'one\ntwo';
|
|
75
|
-
expect(lineRangesInSelection(text, { start: 0, end: 4 })).toEqual([{ start: 0, end: 4 }]);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
test('an empty selection still names the line the caret is on', () => {
|
|
79
|
-
expect(lineRangesInSelection('one\ntwo', { start: 5, end: 5 })).toEqual([{ start: 4, end: 7 }]);
|
|
80
|
-
});
|
|
81
33
|
});
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Line arithmetic over a buffer
|
|
7
|
+
* Line arithmetic over a buffer: which line an offset is on, and where that
|
|
8
|
+
* line begins.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* Two consumers, and they must agree — the highlighter's per-line walk and the
|
|
11
|
+
* find widget's "jump to line N" both turn a line number into an offset. The
|
|
12
|
+
* editor's own line COMMANDS no longer come through here: every one of them
|
|
13
|
+
* (delete, move, duplicate, comment, indent) is a CodeMirror command now, and
|
|
14
|
+
* `state.doc.line*` is what they read. `lineRangeAt`/`lineRangesInSelection`
|
|
15
|
+
* went with them.
|
|
14
16
|
*/
|
|
15
17
|
|
|
16
18
|
/** Half-open `[start, end)` offset range in a document. */
|
|
@@ -39,45 +41,3 @@ export function lineStartOffset(text: string, lineIndex: number): number {
|
|
|
39
41
|
}
|
|
40
42
|
return offset;
|
|
41
43
|
}
|
|
42
|
-
|
|
43
|
-
/** How many lines `text` holds; a trailing newline opens one more (empty) line. */
|
|
44
|
-
export function countLines(text: string): number {
|
|
45
|
-
let count = 1;
|
|
46
|
-
for (let index = text.indexOf('\n'); index !== -1; index = text.indexOf('\n', index + 1)) count++;
|
|
47
|
-
return count;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* The whole line containing `offset`, INCLUDING its trailing newline.
|
|
52
|
-
*
|
|
53
|
-
* Including the newline is what makes the range directly usable by the line
|
|
54
|
-
* commands: deleting it removes the line rather than blanking it, and moving it
|
|
55
|
-
* carries the line's own separator with it. A caret on the empty line a
|
|
56
|
-
* trailing newline opens (`"a\n"` at offset 2) yields an empty range there,
|
|
57
|
-
* which the commands treat as "the newline above" — the honest reading of a
|
|
58
|
-
* position that has no characters of its own.
|
|
59
|
-
*/
|
|
60
|
-
export function lineRangeAt(text: string, offset: number): TextRange {
|
|
61
|
-
const lineStart = lineStartOffset(text, lineIndexAt(text, offset));
|
|
62
|
-
const lineEnd = text.indexOf('\n', lineStart);
|
|
63
|
-
if (lineEnd === -1) return { start: lineStart, end: text.length };
|
|
64
|
-
return { start: lineStart, end: lineEnd + 1 };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The ranges of every line a selection touches, in document order.
|
|
69
|
-
*
|
|
70
|
-
* A selection ending exactly at a line start does not touch that line — the
|
|
71
|
-
* same rule VS Code applies, and the one that keeps ⌘⇧L on a whole-line
|
|
72
|
-
* selection from splitting off an empty trailing entry.
|
|
73
|
-
*/
|
|
74
|
-
export function lineRangesInSelection(text: string, selection: TextRange): TextRange[] {
|
|
75
|
-
const startLine = lineIndexAt(text, selection.start);
|
|
76
|
-
const lastOffset = selection.end > selection.start && text[selection.end - 1] === '\n' ? selection.end - 1 : selection.end;
|
|
77
|
-
const endLine = lineIndexAt(text, lastOffset);
|
|
78
|
-
const ranges: TextRange[] = [];
|
|
79
|
-
for (let line = startLine; line <= endLine; line++) {
|
|
80
|
-
ranges.push(lineRangeAt(text, lineStartOffset(text, line)));
|
|
81
|
-
}
|
|
82
|
-
return ranges;
|
|
83
|
-
}
|
|
@@ -57,12 +57,11 @@ describe('tokenMarkup', () => {
|
|
|
57
57
|
expect(tokenMarkup('<', 0, [{ start: 0, end: 1 }], -1)).toContain('<');
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
test('the current match
|
|
61
|
-
// The caret
|
|
62
|
-
//
|
|
60
|
+
test('the current match is painted differently from the others', () => {
|
|
61
|
+
// The caret is aimed at exactly one match, so the reader has to be able to
|
|
62
|
+
// see which — and the others must not claim that mark.
|
|
63
63
|
expect(tokenMarkup('a', 0, [{ start: 0, end: 1 }], 0)).toContain('data-find-current');
|
|
64
|
-
expect(tokenMarkup('a', 0, [{ start: 0, end: 1 }], -1
|
|
65
|
-
expect(tokenMarkup('a', 0, [{ start: 0, end: 1 }], -1, 0)).not.toContain('data-find-current');
|
|
64
|
+
expect(tokenMarkup('a', 0, [{ start: 0, end: 1 }], -1)).not.toContain('data-find-current');
|
|
66
65
|
});
|
|
67
66
|
|
|
68
67
|
test('a plain match is neither current nor an occurrence', () => {
|
|
@@ -12,11 +12,16 @@
|
|
|
12
12
|
* match routinely spans several tokens (`const alpha` is three) and a token
|
|
13
13
|
* routinely holds several matches.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
15
|
+
* This is the markup path for the surfaces that render highlighted HTML (the
|
|
16
|
+
* chat's excerpt cards, the search panel's rows, the wiki reader). The EDITOR no
|
|
17
|
+
* longer uses it: CodeMirror draws its own decorations from a state field
|
|
18
|
+
* (`code-surface/marks.ts`), which is what stopped every find result from
|
|
19
|
+
* forcing a re-tokenize.
|
|
20
|
+
*
|
|
21
|
+
* `<mark>` is an INLINE element with a background and no padding or border, so
|
|
22
|
+
* it paints without moving the glyphs it sits between — anything that changes
|
|
23
|
+
* the box (a block display, a border, an outline with an offset) shifts the text
|
|
24
|
+
* and breaks the alignment a caller's own layout depends on.
|
|
20
25
|
*
|
|
21
26
|
* Kept out of `syntax-highlight.ts` so the tokenizer module stays under the
|
|
22
27
|
* repository's line ceiling and because this is the find feature's concern
|
|
@@ -24,7 +29,7 @@
|
|
|
24
29
|
*/
|
|
25
30
|
|
|
26
31
|
import { escapeCode } from '@/shared/lib/code/highlighter';
|
|
27
|
-
import type { FindMatch } from '@/shared/lib/code/editor/find';
|
|
32
|
+
import type { FindMatch } from '@/shared/lib/code/editor/find-scan';
|
|
28
33
|
|
|
29
34
|
/**
|
|
30
35
|
* How `highlightLines` paints its marks. Declared here rather than in the
|
|
@@ -41,32 +46,16 @@ export interface HighlightLinesOptions {
|
|
|
41
46
|
* Match ranges (absolute offsets in `code`) to wrap in `<mark class="find-match">`.
|
|
42
47
|
* The find widget's highlights ride on the same markup the tokens do, so a
|
|
43
48
|
* match cannot drift from the text it belongs to — and an inline `<mark>`
|
|
44
|
-
* paints a background without moving the glyphs
|
|
45
|
-
* transparent `<textarea>` above aligned with this layer.
|
|
49
|
+
* paints a background without moving the glyphs it sits between.
|
|
46
50
|
*/
|
|
47
51
|
marks?: readonly FindMatch[];
|
|
48
52
|
/** Index into `marks` of the current match, marked `data-find-current`. */
|
|
49
53
|
currentMark?: number;
|
|
50
|
-
/**
|
|
51
|
-
* Marks from this index on are extra ⌘D SELECTIONS rather than find matches,
|
|
52
|
-
* and are painted as such. The caller appends them after the matches, so one
|
|
53
|
-
* index is all the split needs.
|
|
54
|
-
*/
|
|
55
|
-
occurrenceFrom?: number;
|
|
56
54
|
}
|
|
57
55
|
|
|
58
56
|
export const MARK_OPEN = '<mark class="find-match">';
|
|
59
57
|
/** The current match is the one the caret/next-step is aimed at; the CSS paints it darker. */
|
|
60
58
|
export const MARK_CURRENT_OPEN = '<mark class="find-match" data-find-current="">';
|
|
61
|
-
/**
|
|
62
|
-
* An extra ⌘D range. It is not a find match — it is a second SELECTION, and it
|
|
63
|
-
* has to read as one: the caret can only be in the primary range, so painting
|
|
64
|
-
* them alike would leave the user unable to tell which one their keystrokes go
|
|
65
|
-
* to. The two differ only in colour; the geometry is shared, which is what
|
|
66
|
-
* keeps the layers aligned.
|
|
67
|
-
*/
|
|
68
|
-
export const MARK_OCCURRENCE_OPEN = '<mark class="find-match" data-occurrence="">';
|
|
69
|
-
|
|
70
59
|
/**
|
|
71
60
|
* `content` with every intersecting mark spliced in, HTML-escaped.
|
|
72
61
|
*
|
|
@@ -79,7 +68,6 @@ export function tokenMarkup(
|
|
|
79
68
|
tokenStart: number,
|
|
80
69
|
marks: readonly FindMatch[] | undefined,
|
|
81
70
|
currentMark: number,
|
|
82
|
-
occurrenceFrom = -1,
|
|
83
71
|
): string {
|
|
84
72
|
const tokenEnd = tokenStart + content.length;
|
|
85
73
|
if (!marks || marks.length === 0) return escapeCode(content);
|
|
@@ -98,7 +86,7 @@ export function tokenMarkup(
|
|
|
98
86
|
const to = Math.min(mark.end, tokenEnd) - tokenStart;
|
|
99
87
|
if (to <= cursor) continue;
|
|
100
88
|
html += escapeCode(content.slice(cursor, from));
|
|
101
|
-
const open = index === currentMark ? MARK_CURRENT_OPEN :
|
|
89
|
+
const open = index === currentMark ? MARK_CURRENT_OPEN : MARK_OPEN;
|
|
102
90
|
html += open + escapeCode(content.slice(from, to)) + '</mark>';
|
|
103
91
|
cursor = to;
|
|
104
92
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Registering an editor theme with the shared Shiki highlighter, on demand.
|
|
8
|
+
*
|
|
9
|
+
* Shiki throws for a theme it has not been given, and `@shikijs/themes` ships 65
|
|
10
|
+
* of them (1.3 MB of TextMate JSON). So a theme is loaded the first time it is
|
|
11
|
+
* SELECTED — the picker's grid draws from the generated colour rows and fetches
|
|
12
|
+
* nothing — and a surface that asks for one before it lands keeps the plain
|
|
13
|
+
* fallback and re-runs on `onEditorThemeReady`.
|
|
14
|
+
*
|
|
15
|
+
* This lives beside the tokenizer rather than in a client hook because the
|
|
16
|
+
* decoration plugin is what needs the notification, and it must not import a
|
|
17
|
+
* Preact module to get it.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { getHighlighterSync } from '@/shared/lib/code/highlighter';
|
|
21
|
+
import {
|
|
22
|
+
EDITOR_AUTO_THEME_ID,
|
|
23
|
+
EDITOR_THEME_LOADERS,
|
|
24
|
+
} from '@/shared/lib/code/editor/themes';
|
|
25
|
+
|
|
26
|
+
/** Ids registered with the highlighter. */
|
|
27
|
+
const loaded = new Set<string>();
|
|
28
|
+
/** In-flight loads, so two surfaces selecting one theme share a fetch. */
|
|
29
|
+
const pending = new Map<string, Promise<void>>();
|
|
30
|
+
const listeners = new Set<(id: string) => void>();
|
|
31
|
+
|
|
32
|
+
function notifyReady(id: string): void {
|
|
33
|
+
for (const listener of [...listeners]) {
|
|
34
|
+
try {
|
|
35
|
+
listener(id);
|
|
36
|
+
} catch {
|
|
37
|
+
// A listener must never break the others.
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Fires when a theme module lands, so a pending tokenize can retry. */
|
|
43
|
+
export function onEditorThemeReady(listener: (id: string) => void): () => void {
|
|
44
|
+
listeners.add(listener);
|
|
45
|
+
return () => {
|
|
46
|
+
listeners.delete(listener);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Whether Shiki can tokenize with `id` synchronously right now. */
|
|
51
|
+
export function isEditorThemeReady(id: string): boolean {
|
|
52
|
+
if (id === EDITOR_AUTO_THEME_ID) return true;
|
|
53
|
+
return loaded.has(id);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Register `id`'s theme with the shared highlighter.
|
|
58
|
+
*
|
|
59
|
+
* Resolves immediately for `auto`, for an id this build does not ship, and for
|
|
60
|
+
* a highlighter that has not booted yet (the caller keeps the fallback and is
|
|
61
|
+
* retried by `onSyntaxReady`). Never rejects: a theme that fails to load leaves
|
|
62
|
+
* the surface on the app palette, which is a wrong palette rather than a blank
|
|
63
|
+
* editor.
|
|
64
|
+
*/
|
|
65
|
+
export function loadEditorTheme(id: string): Promise<void> {
|
|
66
|
+
if (id === EDITOR_AUTO_THEME_ID || loaded.has(id)) return Promise.resolve();
|
|
67
|
+
const loader = EDITOR_THEME_LOADERS[id];
|
|
68
|
+
if (!loader) return Promise.resolve();
|
|
69
|
+
const inFlight = pending.get(id);
|
|
70
|
+
if (inFlight) return inFlight;
|
|
71
|
+
|
|
72
|
+
const highlighter = getHighlighterSync();
|
|
73
|
+
if (!highlighter) return Promise.resolve();
|
|
74
|
+
|
|
75
|
+
const load = highlighter
|
|
76
|
+
.loadTheme(loader as never)
|
|
77
|
+
.then(() => {
|
|
78
|
+
loaded.add(id);
|
|
79
|
+
notifyReady(id);
|
|
80
|
+
})
|
|
81
|
+
.catch(() => {
|
|
82
|
+
// Left out of `loaded` so a later attempt can still succeed.
|
|
83
|
+
})
|
|
84
|
+
.finally(() => {
|
|
85
|
+
pending.delete(id);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
pending.set(id, load);
|
|
89
|
+
return load;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Test seam: forget every registration (a highlighter restart). */
|
|
93
|
+
export function resetEditorThemeLoader(): void {
|
|
94
|
+
loaded.clear();
|
|
95
|
+
pending.clear();
|
|
96
|
+
listeners.clear();
|
|
97
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* GENERATED by `scripts/editor-themes.mjs` — do not edit by hand.
|
|
8
|
+
*
|
|
9
|
+
* One row per theme shipped by `@shikijs/themes`, in id order. Each row carries
|
|
10
|
+
* the colours the editor CHROME needs (surface, gutter, selection, cursor, find,
|
|
11
|
+
* border, the diff bands) plus three syntax accents for the picker's swatch, so
|
|
12
|
+
* the settings grid can draw 65 cards without fetching a theme module.
|
|
13
|
+
*
|
|
14
|
+
* The field order is the tuple's type (`EditorThemeRow` in `./themes.ts`).
|
|
15
|
+
* `themes.test.ts` re-derives every value from the installed package and fails on
|
|
16
|
+
* drift, so a `@shikijs/themes` bump surfaces as a test failure rather than a
|
|
17
|
+
* picker showing colours the package no longer ships.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** `[id, label, variant, bg, fg, gutterFg, selection, cursor, find, findCurrent, border, added, removed, addedGutter, removedGutter, keyword, string, comment]` */
|
|
21
|
+
export const EDITOR_THEME_ROWS = [
|
|
22
|
+
['andromeeda', 'Andromeeda', 'dark', '#23262E', '#D5CED9', '#746f77', '#3D4352', '#FFF', '#f39d1256', '#59b8b377', '#1B1D23', '#29BF1220', '#F21B3F20', '#9BC53DBB', '#FC644DBB', '#c74ded', '#96E072', '#A0A1A7cc'],
|
|
23
|
+
['aurora-x', 'Aurora X', 'dark', '#07090F', '#576daf', '#262e47bb', '#262E47', '#86A5FF', '#576daf', '#262E47', '#15182B', '#64d3892c', '#dd50742c', '#2ea043', '#f85149', '#C792EA', '#C3E88D', '#546E7A'],
|
|
24
|
+
['ayu-dark', 'Ayu Dark', 'dark', '#10141c', '#bfbdb6', '#5a6378a6', '#3388ff40', '#e6b450', '#4c4126', '#4c412680', '#1b1f29', '#70bf561f', '#f26d781f', '#70bf56', '#f26d78', '#ff8f40', '#aad94c', '#5a6673'],
|
|
25
|
+
['ayu-light', 'Ayu Light', 'light', '#fcfcfc', '#5c6166', '#828e9f66', '#035bd626', '#f29718', '#ffe294', '#ffe29480', '#6b7d8f1f', '#6cbf431f', '#ff73831f', '#6cbf43', '#ff7383', '#fa8532', '#86b300', '#adaeb1'],
|
|
26
|
+
['ayu-mirage', 'Ayu Mirage', 'dark', '#242936', '#cccac2', '#707a8c80', '#409fff40', '#ffcc66', '#736950', '#73695066', '#171b24', '#87d96c1f', '#f279831f', '#87d96c', '#f27983', '#ffa659', '#d5ff80', '#6e7c8f'],
|
|
27
|
+
['catppuccin-frappe', 'Catppuccin Frappé', 'dark', '#303446', '#c6d0f5', '#838ba7', '#949cbb40', '#f2d5cf', '#674b59', '#506373', '#626880', '#a6d18926', '#e7828426', '#a6d189', '#e78284', '#ca9ee6', '#a6d189', '#949cbb'],
|
|
28
|
+
['catppuccin-latte', 'Catppuccin Latte', 'light', '#eff1f5', '#4c4f69', '#8c8fa1', '#7c7f934d', '#dc8a78', '#e6adbd', '#a9daf0', '#acb0be', '#40a02b26', '#d20f3926', '#40a02b', '#d20f39', '#8839ef', '#40a02b', '#7c7f93'],
|
|
29
|
+
['catppuccin-macchiato', 'Catppuccin Macchiato', 'dark', '#24273a', '#cad3f5', '#8087a2', '#939ab740', '#f4dbd6', '#604456', '#455c6d', '#5b6078', '#a6da9526', '#ed879626', '#a6da95', '#ed8796', '#c6a0f6', '#a6da95', '#939ab7'],
|
|
30
|
+
['catppuccin-mocha', 'Catppuccin Mocha', 'dark', '#1e1e2e', '#cdd6f4', '#7f849c', '#9399b240', '#f5e0dc', '#5e3f53', '#3e5767', '#585b70', '#a6e3a126', '#f38ba826', '#a6e3a1', '#f38ba8', '#cba6f7', '#a6e3a1', '#9399b2'],
|
|
31
|
+
['dark-plus', 'Dark Plus', 'dark', '#1E1E1E', '#D4D4D4', 'color-mix(in srgb, #D4D4D4 38%, #1E1E1E)', 'color-mix(in srgb, #D4D4D4 22%, #1E1E1E)', '#D4D4D4', 'color-mix(in srgb, #D4D4D4 18%, #1E1E1E)', 'color-mix(in srgb, #D4D4D4 30%, #1E1E1E)', 'color-mix(in srgb, #D4D4D4 16%, #1E1E1E)', 'color-mix(in srgb, #2ea043 22%, #1E1E1E)', 'color-mix(in srgb, #f85149 22%, #1E1E1E)', '#2ea043', '#f85149', '#569cd6', '#ce9178', '#6A9955'],
|
|
32
|
+
['dracula', 'Dracula Theme', 'dark', '#282A36', '#F8F8F2', '#6272A4', '#44475A', '#F8F8F2', '#FFB86C80', '#FFFFFF40', '#BD93F9', '#50FA7B20', '#FF555550', '#50FA7B80', '#FF555580', '#FF79C6', '#F1FA8C', '#6272A4'],
|
|
33
|
+
['dracula-soft', 'Dracula Theme Soft', 'dark', '#282A36', '#f6f6f4', '#7b7f8b', '#44475A', '#f6f6f4', '#FFB86C80', '#FFFFFF40', '#bf9eee', '#50FA7B20', '#FF555550', '#50FA7B80', '#FF555580', '#f286c4', '#e7ee98', '#7b7f8b'],
|
|
34
|
+
['everforest-dark', 'Everforest Dark', 'dark', '#2d353b', '#d3c6aa', '#7f897da0', '#475258c0', '#d3c6aa', '#d77f4840', '#899c4040', '#2d353b', '#569d7930', '#da636230', '#899c40a0', '#da6362a0', '#e67e80', '#dbbc7f', '#859289'],
|
|
35
|
+
['everforest-light', 'Everforest Light', 'light', '#fdf6e3', '#5c6a72', '#a4ad9ea0', '#e6e2cca0', '#5c6a72', '#f3945940', '#a4bb4a40', '#fdf6e3', '#6ec39830', '#f1706f30', '#a4bb4aa0', '#f1706fa0', '#f85552', '#dfa000', '#939f91'],
|
|
36
|
+
['github-dark', 'GitHub Dark', 'dark', '#24292e', '#e1e4e8', '#444d56', '#3392FF44', '#c8e1ff', '#ffd33d44', '#ffd33d22', '#1b1f23', '#28a74530', '#d73a4930', '#28a745', '#ea4a5a', '#f97583', '#9ecbff', '#6a737d'],
|
|
37
|
+
['github-dark-default', 'GitHub Dark Default', 'dark', '#0d1117', '#e6edf3', '#6e7681', 'color-mix(in srgb, #e6edf3 22%, #0d1117)', '#2f81f7', '#9e6a03', '#f2cc6080', '#30363d', '#23863626', '#da363326', '#2ea04366', '#f8514966', '#ff7b72', '#a5d6ff', '#8b949e'],
|
|
38
|
+
['github-dark-dimmed', 'GitHub Dark Dimmed', 'dark', '#22272e', '#adbac7', '#636e7b', 'color-mix(in srgb, #adbac7 22%, #22272e)', '#539bf5', '#966600', '#eac55f80', '#444c56', '#347d3926', '#c93c3726', '#46954a66', '#e5534b66', '#f47067', '#96d0ff', '#768390'],
|
|
39
|
+
['github-dark-high-contrast', 'GitHub Dark High Contrast', 'dark', '#0a0c10', '#f0f3f6', '#9ea7b3', '#ffffff', '#71b7ff', '#e09b13', '#fbd66980', '#7a828e', '#09b43a26', '#ff6a6926', '#09b43a', '#ff6a69', '#ff9492', '#addcff', '#bdc4cc'],
|
|
40
|
+
['github-light', 'GitHub Light', 'light', '#fff', '#24292e', '#1b1f234d', '#0366d625', '#044289', '#ffdf5d', '#ffdf5d66', '#e1e4e8', '#34d05822', '#d73a4922', '#28a745', '#d73a49', '#d73a49', '#032f62', '#6a737d'],
|
|
41
|
+
['github-light-default', 'GitHub Light Default', 'light', '#ffffff', '#1f2328', '#8c959f', 'color-mix(in srgb, #1f2328 22%, #ffffff)', '#0969da', '#bf8700', '#fae17d80', '#d0d7de', '#aceebb4d', '#ffcecb4d', '#4ac26b66', '#ff818266', '#cf222e', '#0a3069', '#6e7781'],
|
|
42
|
+
['github-light-high-contrast', 'GitHub Light High Contrast', 'light', '#ffffff', '#0e1116', '#88929d', '#0e1116', '#0349b4', '#744500', '#f0ce5380', '#20252c', '#82e5964d', '#ffc1bc4d', '#26a148', '#ee5a5d', '#a0111f', '#032563', '#66707b'],
|
|
43
|
+
['gruvbox-dark-hard', 'Gruvbox Dark Hard', 'dark', '#1d2021', '#ebdbb2', '#665c54', '#689d6a40', '#ebdbb2', '#83a59870', '#fe801930', '#3c3836', '#b8bb2630', '#fb493430', '#b8bb26', '#fb4934', '#fb4934', '#b8bb26', '#928374'],
|
|
44
|
+
['gruvbox-dark-medium', 'Gruvbox Dark Medium', 'dark', '#282828', '#ebdbb2', '#665c54', '#689d6a40', '#ebdbb2', '#83a59870', '#fe801930', '#3c3836', '#b8bb2630', '#fb493430', '#b8bb26', '#fb4934', '#fb4934', '#b8bb26', '#928374'],
|
|
45
|
+
['gruvbox-dark-soft', 'Gruvbox Dark Soft', 'dark', '#32302f', '#ebdbb2', '#665c54', '#689d6a40', '#ebdbb2', '#83a59870', '#fe801930', '#3c3836', '#b8bb2630', '#fb493430', '#b8bb26', '#fb4934', '#fb4934', '#b8bb26', '#928374'],
|
|
46
|
+
['gruvbox-light-hard', 'Gruvbox Light Hard', 'light', '#f9f5d7', '#3c3836', '#bdae93', '#689d6a40', '#3c3836', '#07667870', '#af3a0330', '#ebdbb2', '#79740e30', '#9d000630', '#79740e', '#9d0006', '#9d0006', '#79740e', '#928374'],
|
|
47
|
+
['gruvbox-light-medium', 'Gruvbox Light Medium', 'light', '#fbf1c7', '#3c3836', '#bdae93', '#689d6a40', '#3c3836', '#07667870', '#af3a0330', '#ebdbb2', '#79740e30', '#9d000630', '#79740e', '#9d0006', '#9d0006', '#79740e', '#928374'],
|
|
48
|
+
['gruvbox-light-soft', 'Gruvbox Light Soft', 'light', '#f2e5bc', '#3c3836', '#bdae93', '#689d6a40', '#3c3836', '#07667870', '#af3a0330', '#ebdbb2', '#79740e30', '#9d000630', '#79740e', '#9d0006', '#9d0006', '#79740e', '#928374'],
|
|
49
|
+
['horizon', 'Horizon', 'dark', '#1C1E26', '#D5D8DA', '#D5D8DA1A', '#2E303EB3', '#E95378', '#6C6F9380', '#6C6F934D', 'color-mix(in srgb, #D5D8DA 16%, #1C1E26)', '#09F7A01A', '#F43E5C1A', '#09F7A0B3', '#F43E5CB3', '#B877DBE6', '#FAB795E6', '#BBBBBB4D'],
|
|
50
|
+
['horizon-bright', 'Horizon Bright', 'light', '#FDF0ED', '#06060C', '#06060C1A', '#F9CBBE80', '#E84A72', '#F9CEC380', '#F9CEC34D', 'color-mix(in srgb, #06060C 16%, #FDF0ED)', '#07DA8C1A', '#F43E5C1A', '#07DA8CB3', '#F43E5CB3', '#8A31B9', '#F6661E', '#33333380'],
|
|
51
|
+
['houston', 'Houston', 'dark', '#17191e', '#eef0f9', '#545864', '#ad5dca44', '#aeafad', '#515c6a', '#ea5c0055', '#17191e', '#4bf3c824', '#dc365724', '#4bf3c8', '#f06788', '#54b9ff', '#ffd493', '#eef0f98f'],
|
|
52
|
+
['kanagawa-dragon', 'Kanagawa Dragon', 'dark', '#181616', '#C5C9C5', '#625E5A', '#223249', '#C5C9C5', '#2D4F67', '#2D4F6780', '#0D0C0C', '#2B332880', 'color-mix(in srgb, #C34043 22%, #181616)', '#76946A', '#C34043', '#8992A7', '#8A9A7B', '#737C73'],
|
|
53
|
+
['kanagawa-lotus', 'Kanagawa Lotus', 'light', '#F2ECBC', '#545464', '#766B90', '#C7D7E0', '#545464', '#B5CBD2', '#B5CBD280', '#D5CEA3', '#B7D0AE80', 'color-mix(in srgb, #D7474B 22%, #F2ECBC)', '#6E915F', '#D7474B', '#624C83', '#6F894E', '#716E61'],
|
|
54
|
+
['kanagawa-wave', 'Kanagawa Wave', 'dark', '#1F1F28', '#DCD7BA', '#54546D', '#223249', '#DCD7BA', '#2D4F67', '#2D4F6780', '#16161D', '#2B332880', 'color-mix(in srgb, #C34043 22%, #1F1F28)', '#76946A', '#C34043', '#957FB8', '#98BB6C', '#727169'],
|
|
55
|
+
['laserwave', 'LaserWave', 'dark', '#27212e', '#ffffff', 'color-mix(in srgb, #ffffff 38%, #27212e)', '#eb64b927', '#ffffff', '#40b4c48c', '#40b4c460', 'color-mix(in srgb, #ffffff 16%, #27212e)', '#74dfc423', '#eb64b940', '#74dfc4', '#eb64B9', '#a96bc0', '#b4dce7', '#91889b'],
|
|
56
|
+
['light-plus', 'Light Plus', 'light', '#FFFFFF', '#000000', 'color-mix(in srgb, #000000 38%, #FFFFFF)', 'color-mix(in srgb, #000000 22%, #FFFFFF)', '#000000', 'color-mix(in srgb, #000000 18%, #FFFFFF)', 'color-mix(in srgb, #000000 30%, #FFFFFF)', 'color-mix(in srgb, #000000 16%, #FFFFFF)', 'color-mix(in srgb, #2ea043 22%, #FFFFFF)', 'color-mix(in srgb, #f85149 22%, #FFFFFF)', '#2ea043', '#f85149', '#0000ff', '#a31515', '#008000'],
|
|
57
|
+
['material-theme', 'Material Theme', 'dark', '#263238', '#EEFFFF', '#465A64', '#80CBC420', '#FFCC00', '#000000', '#00000050', '#26323860', '#89DDFF20', '#ff9cac20', '#C3E88D60', '#f0717860', '#89DDFF', '#C3E88D', '#546E7A'],
|
|
58
|
+
['material-theme-darker', 'Material Theme Darker', 'dark', '#212121', '#EEFFFF', '#424242', '#61616150', '#FFCC00', '#000000', '#00000050', '#21212160', '#89DDFF20', '#ff9cac20', '#C3E88D60', '#f0717860', '#89DDFF', '#C3E88D', '#545454'],
|
|
59
|
+
['material-theme-lighter', 'Material Theme Lighter', 'light', '#FAFAFA', '#90A4AE', '#CFD8DC', '#80CBC440', '#272727', '#00000020', '#00000010', '#FAFAFA60', '#39ADB520', '#FF537020', '#91B85960', '#E5393560', '#39ADB5', '#91B859', '#90A4AE'],
|
|
60
|
+
['material-theme-ocean', 'Material Theme Ocean', 'dark', '#0F111A', '#babed8', '#3B3F5180', '#717CB450', '#FFCC00', '#000000', '#00000050', '#0F111A60', '#89DDFF20', '#ff9cac20', '#C3E88D60', '#f0717860', '#89DDFF', '#C3E88D', '#464B5D'],
|
|
61
|
+
['material-theme-palenight', 'Material Theme Palenight', 'dark', '#292D3E', '#babed8', '#3A3F58', '#717CB450', '#FFCC00', '#000000', '#00000050', '#292D3E60', '#89DDFF20', '#ff9cac20', '#C3E88D60', '#f0717860', '#89DDFF', '#C3E88D', '#676E95'],
|
|
62
|
+
['min-dark', 'Min Dark', 'dark', '#1f1f1f', '#888888', '#727272', 'color-mix(in srgb, #888888 22%, #1f1f1f)', '#888888', 'color-mix(in srgb, #888888 18%, #1f1f1f)', 'color-mix(in srgb, #888888 30%, #1f1f1f)', 'color-mix(in srgb, #888888 16%, #1f1f1f)', '#3a632a4b', '#88063852', '#2ea043', '#f85149', '#f97583', '#9db1c5', '#6b737c'],
|
|
63
|
+
['min-light', 'Min Light', 'light', '#ffffff', '#212121', '#CCC', 'color-mix(in srgb, #212121 22%, #ffffff)', '#212121', 'color-mix(in srgb, #212121 18%, #ffffff)', 'color-mix(in srgb, #212121 30%, #ffffff)', '#f4f4f4', '#b7e7a44b', '#e597af52', '#2ea043', '#f85149', '#D32F2F', '#2b5581', '#c2c3c5'],
|
|
64
|
+
['monokai', 'Monokai', 'dark', '#272822', '#f8f8f2', '#90908a', '#878b9180', '#f8f8f0', 'color-mix(in srgb, #f8f8f2 18%, #272822)', 'color-mix(in srgb, #f8f8f2 30%, #272822)', '#414339', '#4b661680', '#90274A70', '#2ea043', '#f85149', '#F92672', '#E6DB74', '#88846f'],
|
|
65
|
+
['night-owl', 'Night Owl', 'dark', '#011627', '#d6deeb', '#4b6479', '#1d3b53', '#80a4c2', '#5f7e9779', '#1085bb5d', '#5f7e97', '#99b76d23', '#ef535033', '#9CCC65', '#EF5350', '#c792ea', '#ecc48d', '#637777'],
|
|
66
|
+
['night-owl-light', 'Night Owl Light', 'light', '#FBFBFB', '#403f53', '#90A7B2', '#E0E0E0', '#90A7B2', '#93A1A16c', '#93a1a16c', '#d9d9d9', 'color-mix(in srgb, #49d0c5 22%, #FBFBFB)', 'color-mix(in srgb, #f76e6e 22%, #FBFBFB)', '#49d0c5', '#f76e6e', '#994cc3', '#4876d6', '#989fb1'],
|
|
67
|
+
['nord', 'Nord', 'dark', '#2e3440', '#d8dee9', '#4c566a', '#434c5ecc', '#d8dee9', '#88c0d066', '#88c0d033', '#3b4252', '#81a1c133', '#bf616a4d', '#a3be8c', '#bf616a', '#81A1C1', '#A3BE8C', '#616E88'],
|
|
68
|
+
['one-dark-pro', 'One Dark Pro', 'dark', '#282c34', '#abb2bf', '#495162', '#67769660', '#528bff', '#d19a6644', '#ffffff22', '#3e4452', '#00809b33', 'color-mix(in srgb, #9A353D 22%, #282c34)', '#109868', '#9A353D', '#c678dd', '#98c379', '#7f848e'],
|
|
69
|
+
['one-light', 'One Light', 'light', '#FAFAFA', '#383A42', '#9D9D9F', '#E5E5E6', '#526FFF', 'color-mix(in srgb, #383A42 18%, #FAFAFA)', '#526FFF33', 'color-mix(in srgb, #383A42 16%, #FAFAFA)', '#00809B33', 'color-mix(in srgb, #f85149 22%, #FAFAFA)', '#2ea043', '#f85149', '#A626A4', '#50A14F', '#A0A1A7'],
|
|
70
|
+
['plastic', 'Plastic', 'dark', '#21252B', '#A9B2C3', '#5F6672', '#A9B2C333', '#A9B2C3', '#00000000', '#00000000', '#0D1117', '#CBF6AC0D', '#FF9FA80D', '#98C379', '#E06C75', '#E06C75', '#98C379', '#5F6672'],
|
|
71
|
+
['poimandres', 'Poimandres', 'dark', '#1b1e28', '#a6accd', '#767c9d50', '#717cb425', '#a6accd', '#ADD7FF40', '#ADD7FF40', '#00000030', '#50647715', '#d0679d20', '#5fb3a140', '#d0679d40', '#a6accd', '#5DE4c7', '#767c9dB0'],
|
|
72
|
+
['red', 'Red', 'dark', '#390000', '#F8F8F8', '#ff777788', '#750000', '#970000', 'color-mix(in srgb, #F8F8F8 18%, #390000)', 'color-mix(in srgb, #F8F8F8 30%, #390000)', 'color-mix(in srgb, #F8F8F8 16%, #390000)', 'color-mix(in srgb, #2ea043 22%, #390000)', 'color-mix(in srgb, #f85149 22%, #390000)', '#2ea043', '#f85149', '#f12727ff', '#cd8d8dff', '#e7c0c0ff'],
|
|
73
|
+
['rose-pine', 'Rosé Pine', 'dark', '#191724', '#e0def4', '#908caa', '#6e6a8633', '#6e6a86', '#f6c17733', '#6e6a8666', '#0000', '#9ccfd826', '#eb6f9226', '#9ccfd8', '#eb6f92', '#31748f', '#f6c177', '#6e6a86'],
|
|
74
|
+
['rose-pine-dawn', 'Rosé Pine Dawn', 'light', '#faf4ed', '#575279', '#797593', '#6e6a8614', '#9893a5', '#ea9d3433', '#6e6a8626', '#0000', '#56949f26', '#b4637a26', '#56949f', '#b4637a', '#286983', '#ea9d34', '#9893a5'],
|
|
75
|
+
['rose-pine-moon', 'Rosé Pine Moon', 'dark', '#232136', '#e0def4', '#908caa', '#817c9c26', '#6e6a86', '#f6c17733', '#817c9c4d', '#0000', '#9ccfd826', '#eb6f9226', '#9ccfd8', '#eb6f92', '#3e8fb0', '#f6c177', '#6e6a86'],
|
|
76
|
+
['slack-dark', 'Slack Dark', 'dark', '#222222', '#E6E6E6', 'color-mix(in srgb, #E6E6E6 38%, #222222)', 'color-mix(in srgb, #E6E6E6 22%, #222222)', '#E6E6E6', 'color-mix(in srgb, #E6E6E6 18%, #222222)', 'color-mix(in srgb, #E6E6E6 30%, #222222)', 'color-mix(in srgb, #E6E6E6 16%, #222222)', 'color-mix(in srgb, #2ea043 22%, #222222)', 'color-mix(in srgb, #f85149 22%, #222222)', '#2ea043', '#f85149', '#569cd6', '#ce9178', '#6A9955'],
|
|
77
|
+
['slack-ochin', 'Slack Ochin', 'light', '#FFF', '#000', '#b9b9b9', '#AED4FB', '#000', '#AED4FB', '#AED4FB', '#2D3E4C', 'color-mix(in srgb, #2ea043 22%, #FFF)', 'color-mix(in srgb, #f85149 22%, #FFF)', '#2ea043', '#f85149', '#7b30d0', '#a44185', '#357b42'],
|
|
78
|
+
['snazzy-light', 'Snazzy Light', 'light', '#FAFBFC', '#565869', '#9194A2aa', '#2DAE5822', '#565869', '#00E6E06A', '#00E6E02A', 'color-mix(in srgb, #565869 16%, #FAFBFC)', '#2DAE5824', '#FFAEAC44', '#2DAE58', '#FF5C57', '#F767BB', '#CF9C00', '#ADB1C2'],
|
|
79
|
+
['solarized-dark', 'Solarized Dark', 'dark', '#002B36', '#839496', 'color-mix(in srgb, #839496 38%, #002B36)', '#274642', '#D30102', 'color-mix(in srgb, #839496 18%, #002B36)', 'color-mix(in srgb, #839496 30%, #002B36)', '#2b2b4a', 'color-mix(in srgb, #2ea043 22%, #002B36)', 'color-mix(in srgb, #f85149 22%, #002B36)', '#2ea043', '#f85149', '#859900', '#2AA198', '#586E75'],
|
|
80
|
+
['solarized-light', 'Solarized Light', 'light', '#FDF6E3', '#657B83', 'color-mix(in srgb, #657B83 38%, #FDF6E3)', '#EEE8D5', '#657B83', 'color-mix(in srgb, #657B83 18%, #FDF6E3)', 'color-mix(in srgb, #657B83 30%, #FDF6E3)', '#DDD6C1', 'color-mix(in srgb, #2ea043 22%, #FDF6E3)', 'color-mix(in srgb, #f85149 22%, #FDF6E3)', '#2ea043', '#f85149', '#859900', '#2AA198', '#93A1A1'],
|
|
81
|
+
['synthwave-84', 'Synthwave \'84', 'dark', '#262335', '#ffffff', '#ffffff73', '#ffffff20', '#f97e72', '#D18616bb', '#D1861655', 'color-mix(in srgb, #ffffff 16%, #262335)', '#0beb9935', '#fe445035', '#206d4bd6', '#fa2e46a4', '#fede5d', '#ff8b39', '#848bbd'],
|
|
82
|
+
['tokyo-night', 'Tokyo Night', 'dark', '#1a1b26', '#a9b1d6', '#363b54', '#515c7e4d', '#c0caf5', '#3d59a166', '#3d59a166', '#101014', '#41a6b520', '#db4b4b22', '#164846', '#823c41', '#bb9af7', '#9ece6a', '#51597d'],
|
|
83
|
+
['vesper', 'Vesper', 'dark', '#101010', '#FFF', '#505050', '#FFFFFF25', '#FFF', 'color-mix(in srgb, #FFF 18%, #101010)', 'color-mix(in srgb, #FFF 30%, #101010)', 'color-mix(in srgb, #FFF 16%, #101010)', '#99FFE415', '#FF808015', '#99FFE4', '#FF8080', '#A0A0A0', '#99FFE4', '#8b8b8b94'],
|
|
84
|
+
['vitesse-black', 'Vitesse Black', 'dark', '#000', '#dbd7cacc', '#dedcd550', '#eeeeee18', '#dbd7cacc', '#e6cc7722', '#e6cc7744', '#191919', '#4d937550', '#ab595950', '#4d9375', '#cb7676', '#4d9375', '#c98a7d', '#758575dd'],
|
|
85
|
+
['vitesse-dark', 'Vitesse Dark', 'dark', '#121212', '#dbd7caee', '#dedcd550', '#eeeeee18', '#dbd7caee', '#e6cc7722', '#e6cc7744', '#191919', '#4d937550', '#ab595950', '#4d9375', '#cb7676', '#4d9375', '#c98a7d', '#758575dd'],
|
|
86
|
+
['vitesse-light', 'Vitesse Light', 'light', '#ffffff', '#393a34', '#393a3450', '#22222218', '#393a34', '#e6cc7744', '#e6cc7766', '#f0f0f0', '#1c6b4830', '#ab595940', '#1e754f', '#ab5959', '#1e754f', '#b56959', '#a0ada0'],
|
|
87
|
+
] as const;
|
|
88
|
+
|
|
89
|
+
/** Lazy module loaders, so a theme nobody selects is never downloaded. */
|
|
90
|
+
export const EDITOR_THEME_LOADERS: Record<string, () => Promise<unknown>> = {
|
|
91
|
+
'andromeeda': () => import('@shikijs/themes/andromeeda'),
|
|
92
|
+
'aurora-x': () => import('@shikijs/themes/aurora-x'),
|
|
93
|
+
'ayu-dark': () => import('@shikijs/themes/ayu-dark'),
|
|
94
|
+
'ayu-light': () => import('@shikijs/themes/ayu-light'),
|
|
95
|
+
'ayu-mirage': () => import('@shikijs/themes/ayu-mirage'),
|
|
96
|
+
'catppuccin-frappe': () => import('@shikijs/themes/catppuccin-frappe'),
|
|
97
|
+
'catppuccin-latte': () => import('@shikijs/themes/catppuccin-latte'),
|
|
98
|
+
'catppuccin-macchiato': () => import('@shikijs/themes/catppuccin-macchiato'),
|
|
99
|
+
'catppuccin-mocha': () => import('@shikijs/themes/catppuccin-mocha'),
|
|
100
|
+
'dark-plus': () => import('@shikijs/themes/dark-plus'),
|
|
101
|
+
'dracula': () => import('@shikijs/themes/dracula'),
|
|
102
|
+
'dracula-soft': () => import('@shikijs/themes/dracula-soft'),
|
|
103
|
+
'everforest-dark': () => import('@shikijs/themes/everforest-dark'),
|
|
104
|
+
'everforest-light': () => import('@shikijs/themes/everforest-light'),
|
|
105
|
+
'github-dark': () => import('@shikijs/themes/github-dark'),
|
|
106
|
+
'github-dark-default': () => import('@shikijs/themes/github-dark-default'),
|
|
107
|
+
'github-dark-dimmed': () => import('@shikijs/themes/github-dark-dimmed'),
|
|
108
|
+
'github-dark-high-contrast': () => import('@shikijs/themes/github-dark-high-contrast'),
|
|
109
|
+
'github-light': () => import('@shikijs/themes/github-light'),
|
|
110
|
+
'github-light-default': () => import('@shikijs/themes/github-light-default'),
|
|
111
|
+
'github-light-high-contrast': () => import('@shikijs/themes/github-light-high-contrast'),
|
|
112
|
+
'gruvbox-dark-hard': () => import('@shikijs/themes/gruvbox-dark-hard'),
|
|
113
|
+
'gruvbox-dark-medium': () => import('@shikijs/themes/gruvbox-dark-medium'),
|
|
114
|
+
'gruvbox-dark-soft': () => import('@shikijs/themes/gruvbox-dark-soft'),
|
|
115
|
+
'gruvbox-light-hard': () => import('@shikijs/themes/gruvbox-light-hard'),
|
|
116
|
+
'gruvbox-light-medium': () => import('@shikijs/themes/gruvbox-light-medium'),
|
|
117
|
+
'gruvbox-light-soft': () => import('@shikijs/themes/gruvbox-light-soft'),
|
|
118
|
+
'horizon': () => import('@shikijs/themes/horizon'),
|
|
119
|
+
'horizon-bright': () => import('@shikijs/themes/horizon-bright'),
|
|
120
|
+
'houston': () => import('@shikijs/themes/houston'),
|
|
121
|
+
'kanagawa-dragon': () => import('@shikijs/themes/kanagawa-dragon'),
|
|
122
|
+
'kanagawa-lotus': () => import('@shikijs/themes/kanagawa-lotus'),
|
|
123
|
+
'kanagawa-wave': () => import('@shikijs/themes/kanagawa-wave'),
|
|
124
|
+
'laserwave': () => import('@shikijs/themes/laserwave'),
|
|
125
|
+
'light-plus': () => import('@shikijs/themes/light-plus'),
|
|
126
|
+
'material-theme': () => import('@shikijs/themes/material-theme'),
|
|
127
|
+
'material-theme-darker': () => import('@shikijs/themes/material-theme-darker'),
|
|
128
|
+
'material-theme-lighter': () => import('@shikijs/themes/material-theme-lighter'),
|
|
129
|
+
'material-theme-ocean': () => import('@shikijs/themes/material-theme-ocean'),
|
|
130
|
+
'material-theme-palenight': () => import('@shikijs/themes/material-theme-palenight'),
|
|
131
|
+
'min-dark': () => import('@shikijs/themes/min-dark'),
|
|
132
|
+
'min-light': () => import('@shikijs/themes/min-light'),
|
|
133
|
+
'monokai': () => import('@shikijs/themes/monokai'),
|
|
134
|
+
'night-owl': () => import('@shikijs/themes/night-owl'),
|
|
135
|
+
'night-owl-light': () => import('@shikijs/themes/night-owl-light'),
|
|
136
|
+
'nord': () => import('@shikijs/themes/nord'),
|
|
137
|
+
'one-dark-pro': () => import('@shikijs/themes/one-dark-pro'),
|
|
138
|
+
'one-light': () => import('@shikijs/themes/one-light'),
|
|
139
|
+
'plastic': () => import('@shikijs/themes/plastic'),
|
|
140
|
+
'poimandres': () => import('@shikijs/themes/poimandres'),
|
|
141
|
+
'red': () => import('@shikijs/themes/red'),
|
|
142
|
+
'rose-pine': () => import('@shikijs/themes/rose-pine'),
|
|
143
|
+
'rose-pine-dawn': () => import('@shikijs/themes/rose-pine-dawn'),
|
|
144
|
+
'rose-pine-moon': () => import('@shikijs/themes/rose-pine-moon'),
|
|
145
|
+
'slack-dark': () => import('@shikijs/themes/slack-dark'),
|
|
146
|
+
'slack-ochin': () => import('@shikijs/themes/slack-ochin'),
|
|
147
|
+
'snazzy-light': () => import('@shikijs/themes/snazzy-light'),
|
|
148
|
+
'solarized-dark': () => import('@shikijs/themes/solarized-dark'),
|
|
149
|
+
'solarized-light': () => import('@shikijs/themes/solarized-light'),
|
|
150
|
+
'synthwave-84': () => import('@shikijs/themes/synthwave-84'),
|
|
151
|
+
'tokyo-night': () => import('@shikijs/themes/tokyo-night'),
|
|
152
|
+
'vesper': () => import('@shikijs/themes/vesper'),
|
|
153
|
+
'vitesse-black': () => import('@shikijs/themes/vitesse-black'),
|
|
154
|
+
'vitesse-dark': () => import('@shikijs/themes/vitesse-dark'),
|
|
155
|
+
'vitesse-light': () => import('@shikijs/themes/vitesse-light'),
|
|
156
|
+
};
|