@deepseek-harness-tui/dsh-tui 0.11.0 → 0.11.2
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 +55 -20
- package/assets/whale-girl/whale-girl-dark.png +0 -0
- package/assets/whale-girl/whale-girl-happy.png +0 -0
- package/assets/whale-girl/whale-girl.png +0 -0
- package/bin/dsh-tui.js +63 -3
- package/cordis.patch.yml +43 -20
- package/cordis.yml +6 -4
- package/lib/settings.json +1272 -0
- package/lib/types/activityPrefs.d.ts +24 -0
- package/lib/types/activityPrefs.d.ts.map +1 -1
- package/lib/types/activityPrefs.js +50 -1
- package/lib/types/adapter/channel/state.d.ts.map +1 -1
- package/lib/types/adapter/channel/state.js +3 -1
- package/lib/types/adapter/channel/ui-policy.d.ts +9 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +14 -1
- package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
- package/lib/types/adapter/kernel/replay.js +2 -0
- package/lib/types/adapter/ports/channel-display.d.ts +12 -0
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-session.d.ts +38 -0
- package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +12 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +53 -7
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +43 -12
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +4 -1
- package/lib/types/adapter/ports/channel.d.ts.map +1 -1
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +2 -0
- package/lib/types/components/ActivityLine.d.ts +7 -2
- package/lib/types/components/ActivityLine.d.ts.map +1 -1
- package/lib/types/components/ActivityLine.js +0 -8
- package/lib/types/components/BalanceReportRow.d.ts +10 -2
- package/lib/types/components/BalanceReportRow.d.ts.map +1 -1
- package/lib/types/components/BalanceReportRow.js +18 -4
- package/lib/types/components/CompactionStatusRow.d.ts +24 -0
- package/lib/types/components/CompactionStatusRow.d.ts.map +1 -0
- package/lib/types/components/CompactionStatusRow.js +72 -0
- package/lib/types/components/GoalTodoPanel.js +2 -2
- package/lib/types/components/HelpMenu.d.ts +2 -2
- package/lib/types/components/HelpMenu.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.js +5 -4
- package/lib/types/components/InlineMathParagraph.d.ts +22 -0
- package/lib/types/components/InlineMathParagraph.d.ts.map +1 -0
- package/lib/types/components/InlineMathParagraph.js +178 -0
- package/lib/types/components/LogoV2.d.ts +41 -3
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +148 -24
- package/lib/types/components/Markdown.d.ts +10 -3
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +47 -14
- package/lib/types/components/MathBlock.d.ts +13 -0
- package/lib/types/components/MathBlock.d.ts.map +1 -0
- package/lib/types/components/MathBlock.js +136 -0
- package/lib/types/components/MessageList.d.ts +10 -1
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +15 -5
- package/lib/types/components/MigratePicker.d.ts +30 -0
- package/lib/types/components/MigratePicker.d.ts.map +1 -0
- package/lib/types/components/MigratePicker.js +38 -0
- package/lib/types/components/PromptInput.d.ts +17 -0
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +96 -9
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +3 -1
- package/lib/types/components/StarPrompt.d.ts +53 -0
- package/lib/types/components/StarPrompt.d.ts.map +1 -0
- package/lib/types/components/StarPrompt.js +281 -0
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +20 -3
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +12 -6
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +8 -3
- package/lib/types/components/TimelineRail.d.ts.map +1 -1
- package/lib/types/components/TimelineRail.js +9 -1
- package/lib/types/components/Whale.d.ts +17 -8
- package/lib/types/components/Whale.d.ts.map +1 -1
- package/lib/types/components/Whale.js +25 -15
- package/lib/types/components/WhaleGirl.d.ts +29 -0
- package/lib/types/components/WhaleGirl.d.ts.map +1 -0
- package/lib/types/components/WhaleGirl.js +32 -0
- package/lib/types/components/WorkingSpinner.d.ts +4 -1
- package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
- package/lib/types/components/WorkingSpinner.js +2 -2
- package/lib/types/components/bigfont.d.ts +47 -18
- package/lib/types/components/bigfont.d.ts.map +1 -1
- package/lib/types/components/bigfont.js +55 -40
- package/lib/types/components/design-system/HintLine.d.ts +1 -2
- package/lib/types/components/design-system/HintLine.d.ts.map +1 -1
- package/lib/types/components/design-system/HintLine.js +1 -2
- package/lib/types/components/design-system/ThemeProvider.d.ts +6 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +40 -1
- package/lib/types/components/maidPortrait.d.ts +44 -0
- package/lib/types/components/maidPortrait.d.ts.map +1 -0
- package/lib/types/components/maidPortrait.js +178 -0
- package/lib/types/components/mathPreview.d.ts +25 -0
- package/lib/types/components/mathPreview.d.ts.map +1 -0
- package/lib/types/components/mathPreview.js +48 -0
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +4 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +2 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +31 -26
- package/lib/types/components/messages/TranscriptImages.d.ts.map +1 -1
- package/lib/types/components/messages/TranscriptImages.js +11 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +14 -2
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +80 -38
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +3 -3
- package/lib/types/components/sessions/ForeignSessionRow.d.ts +34 -0
- package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -0
- package/lib/types/components/sessions/ForeignSessionRow.js +43 -0
- package/lib/types/components/sessions/SourceTabs.d.ts +52 -0
- package/lib/types/components/sessions/SourceTabs.d.ts.map +1 -0
- package/lib/types/components/sessions/SourceTabs.js +70 -0
- package/lib/types/components/splashEggs.d.ts +56 -0
- package/lib/types/components/splashEggs.d.ts.map +1 -0
- package/lib/types/components/splashEggs.js +67 -0
- package/lib/types/components/splashFonts.d.ts +119 -0
- package/lib/types/components/splashFonts.d.ts.map +1 -0
- package/lib/types/components/splashFonts.js +267 -0
- package/lib/types/components/splashLayout.d.ts +41 -0
- package/lib/types/components/splashLayout.d.ts.map +1 -0
- package/lib/types/components/splashLayout.js +40 -0
- package/lib/types/components/whaleGirlSprite.d.ts +17 -0
- package/lib/types/components/whaleGirlSprite.d.ts.map +1 -0
- package/lib/types/components/whaleGirlSprite.js +47 -0
- package/lib/types/deepseekPricing.d.ts +74 -0
- package/lib/types/deepseekPricing.d.ts.map +1 -1
- package/lib/types/deepseekPricing.js +110 -11
- package/lib/types/dsh-adapter/activity-store.d.ts +221 -0
- package/lib/types/dsh-adapter/activity-store.d.ts.map +1 -0
- package/lib/types/dsh-adapter/activity-store.js +359 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +6 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +2 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +15 -14
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +70 -21
- package/lib/types/dsh-adapter/channel/compaction.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +35 -4
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +6 -1
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +1 -2
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +6 -2
- package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/paths.js +7 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/preferences.js +16 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts +1 -2
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +127 -17
- package/lib/types/dsh-adapter/channel/question-record.d.ts +76 -0
- package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/question-record.js +107 -0
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.js +1 -0
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts +42 -0
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-lineage.js +51 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +3 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.js +10 -3
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +43 -9
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.js +7 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +5 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +19 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +8 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +32 -17
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +309 -8
- package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.d.ts +1 -1
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +34 -18
- package/lib/types/dsh-adapter/compat/index.d.ts +1 -1
- package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/index.js +1 -1
- package/lib/types/dsh-adapter/compat/messages.d.ts +6 -0
- package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/messages.js +9 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +18 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/sessionLog.js +18 -3
- package/lib/types/dsh-adapter/compat/settings.d.ts +2 -0
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/settings.js +14 -0
- package/lib/types/dsh-adapter/contract.d.ts +5 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +9 -5
- package/lib/types/dsh-adapter/index.d.ts +36 -1
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +22 -6
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.js +131 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts +17 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.js +329 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.js +102 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts +16 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.js +289 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.js +117 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts +13 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.js +178 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.js +133 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts +60 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.js +178 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts +8 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.js +40 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.js +93 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts +9 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.js +89 -0
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts +6 -0
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/bin-path.js +30 -0
- package/lib/types/dsh-adapter/migrate/browse.d.ts +42 -0
- package/lib/types/dsh-adapter/migrate/browse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/browse.js +90 -0
- package/lib/types/dsh-adapter/migrate/cli.d.ts +9 -0
- package/lib/types/dsh-adapter/migrate/cli.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/cli.js +106 -0
- package/lib/types/dsh-adapter/migrate/import-one.d.ts +89 -0
- package/lib/types/dsh-adapter/migrate/import-one.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/import-one.js +133 -0
- package/lib/types/dsh-adapter/migrate/index.d.ts +35 -0
- package/lib/types/dsh-adapter/migrate/index.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/index.js +107 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.d.ts +40 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.js +127 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +28 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +40 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts +28 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.js +50 -0
- package/lib/types/dsh-adapter/migrate/parse/title.d.ts +18 -0
- package/lib/types/dsh-adapter/migrate/parse/title.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/title.js +29 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.d.ts +62 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.js +110 -0
- package/lib/types/dsh-adapter/migrate/picker.d.ts +64 -0
- package/lib/types/dsh-adapter/migrate/picker.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/picker.js +86 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.d.ts +40 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.js +100 -0
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts +39 -0
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/sessionize.js +271 -0
- package/lib/types/dsh-adapter/migrate/types.d.ts +176 -0
- package/lib/types/dsh-adapter/migrate/types.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/types.js +11 -0
- package/lib/types/dsh-adapter/migrate/uuid.d.ts +7 -0
- package/lib/types/dsh-adapter/migrate/uuid.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/uuid.js +25 -0
- package/lib/types/dsh-adapter/plugin.d.ts +5 -3
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +168 -372
- package/lib/types/dsh-adapter/providerWizard.d.ts +17 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +254 -66
- package/lib/types/dsh-adapter/questions.d.ts +22 -15
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +47 -45
- package/lib/types/dsh-adapter/sessions/digest.d.ts +11 -6
- package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/digest.js +20 -13
- package/lib/types/dsh-adapter/sessions/frames.d.ts +3 -1
- package/lib/types/dsh-adapter/sessions/frames.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/frames.js +5 -4
- package/lib/types/dsh-adapter/sessions/list.d.ts +6 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +188 -164
- package/lib/types/dsh-adapter/sessions/recovery.d.ts +16 -0
- package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessions/recovery.js +108 -0
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts +7 -0
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessions/snapshot.js +90 -0
- package/lib/types/dsh-adapter/sessions/store.d.ts +10 -4
- package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/store.js +62 -25
- package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
- package/lib/types/dsh-adapter/settings-sections.js +7 -4
- package/lib/types/dsh-adapter/sideQuestion.d.ts +41 -2
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +98 -2
- package/lib/types/dsh-adapter/subagents.d.ts +44 -6
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +163 -26
- package/lib/types/herdr.d.ts +2 -0
- package/lib/types/herdr.d.ts.map +1 -1
- package/lib/types/herdr.js +9 -3
- package/lib/types/history.d.ts +13 -1
- package/lib/types/history.d.ts.map +1 -1
- package/lib/types/history.js +15 -2
- package/lib/types/i18n.d.ts +512 -41
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +199 -20
- package/lib/types/ink/components/App.d.ts +2 -2
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +5 -1
- package/lib/types/ink/components/Image.d.ts +14 -1
- package/lib/types/ink/components/Image.d.ts.map +1 -1
- package/lib/types/ink/components/Image.js +2 -2
- package/lib/types/ink/events/input-event.js +3 -3
- package/lib/types/ink/hooks/use-terminal-images.d.ts +12 -0
- package/lib/types/ink/hooks/use-terminal-images.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-terminal-images.js +13 -0
- package/lib/types/ink/ink.d.ts +6 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +16 -1
- package/lib/types/ink/kitty-graphics.d.ts +44 -3
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +184 -23
- package/lib/types/ink/log-update.d.ts.map +1 -1
- package/lib/types/ink/log-update.js +19 -1
- package/lib/types/ink/output.d.ts +24 -2
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +83 -5
- package/lib/types/ink/parse-keypress.d.ts +26 -1
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +156 -13
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +8 -1
- package/lib/types/ink/screen.d.ts +24 -0
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/screen.js +89 -0
- package/lib/types/ink/selection.d.ts +68 -18
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +178 -31
- package/lib/types/ink/sixel-codec.d.ts +12 -1
- package/lib/types/ink/sixel-codec.d.ts.map +1 -1
- package/lib/types/ink/sixel-codec.js +29 -5
- package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
- package/lib/types/ink/sixel-graphics.js +5 -3
- package/lib/types/ink/styles.d.ts +9 -0
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +8 -0
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.d.ts +7 -1
- package/lib/types/ink/terminal-querier.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.js +12 -2
- package/lib/types/ink/timeline-rail.d.ts +5 -0
- package/lib/types/ink/timeline-rail.d.ts.map +1 -1
- package/lib/types/math/inline-layout.d.ts +29 -0
- package/lib/types/math/inline-layout.d.ts.map +1 -0
- package/lib/types/math/inline-layout.js +106 -0
- package/lib/types/math/layout.d.ts +58 -0
- package/lib/types/math/layout.d.ts.map +1 -0
- package/lib/types/math/layout.js +59 -0
- package/lib/types/math/renderer.d.ts +64 -0
- package/lib/types/math/renderer.d.ts.map +1 -0
- package/lib/types/math/renderer.js +256 -0
- package/lib/types/screens/Chat.d.ts +17 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +618 -57
- package/lib/types/screens/SessionSupervisor.d.ts +2 -1
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +156 -19
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +49 -11
- package/lib/types/screens/StatusLine.d.ts +5 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +47 -17
- package/lib/types/screens/chatOverlay.d.ts +5 -0
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +1 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +47 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +65 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts +12 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/model.js +26 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts +107 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.js +312 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +4 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -14
- package/lib/types/sessionHistory.d.ts +2 -2
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +31 -5
- package/lib/types/settings/definitions.d.ts +681 -0
- package/lib/types/settings/definitions.d.ts.map +1 -0
- package/lib/types/settings/definitions.js +511 -0
- package/lib/types/starAction.d.ts +44 -0
- package/lib/types/starAction.d.ts.map +1 -0
- package/lib/types/starAction.js +52 -0
- package/lib/types/terminal-utils/latex.d.ts +10 -0
- package/lib/types/terminal-utils/latex.d.ts.map +1 -0
- package/lib/types/terminal-utils/latex.js +1417 -0
- package/lib/types/terminal-utils/markdown.d.ts +3 -1
- package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
- package/lib/types/terminal-utils/markdown.js +26 -1
- package/lib/types/terminal-utils/math.d.ts +66 -0
- package/lib/types/terminal-utils/math.d.ts.map +1 -0
- package/lib/types/terminal-utils/math.js +337 -0
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +6 -0
- package/lib/types/tuiDisplayPrefs.d.ts +67 -0
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +59 -0
- package/lib/types/ui.d.ts +1 -1
- package/lib/types/ui.d.ts.map +1 -1
- package/lib/types/ui.js +1 -1
- package/lib/types/usageStats.d.ts +98 -0
- package/lib/types/usageStats.d.ts.map +1 -0
- package/lib/types/usageStats.js +169 -0
- package/lib/types/utils/bmp.d.ts +17 -0
- package/lib/types/utils/bmp.d.ts.map +1 -0
- package/lib/types/utils/bmp.js +154 -0
- package/lib/types/utils/clipboard.d.ts +14 -2
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +143 -8
- package/lib/types/utils/fold-long-lines.d.ts +1 -1
- package/lib/types/utils/fold-long-lines.d.ts.map +1 -1
- package/lib/types/utils/fold-long-lines.js +3 -2
- package/lib/types/utils/keymap.d.ts +4 -1
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +8 -0
- package/lib/types/utils/modifiers.d.ts +4 -3
- package/lib/types/utils/modifiers.d.ts.map +1 -1
- package/lib/types/utils/modifiers.js +4 -3
- package/lib/types/working-activity.d.ts +10 -9
- package/lib/types/working-activity.d.ts.map +1 -1
- package/lib/types/working-activity.js +17 -10
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/LICENSE +202 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/NOTICE +20 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/index.d.ts +16 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/bundled-packages.json +4 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs +20 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs.LEGAL.txt +35 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/package.json +29 -0
- package/package.json +117 -99
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +0 -19
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +0 -1
- package/lib/types/components/design-system/KeyboardShortcutHint.js +0 -14
- package/lib/types/dsh-adapter/channel/activity.d.ts +0 -20
- package/lib/types/dsh-adapter/channel/activity.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/activity.js +0 -113
- package/lib/types/terminal-utils/terminal.d.ts +0 -18
- package/lib/types/terminal-utils/terminal.d.ts.map +0 -1
- package/lib/types/terminal-utils/terminal.js +0 -96
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 开屏的两个彩蛋——都只改**文字**,字体轮换、鲸鱼动画、窄终端阶梯一律照旧:
|
|
3
|
+
*
|
|
4
|
+
* ① 节日换词:本地日期命中整天窗口时,把下排词换成 `HAPPINESS` / `MERRY` /
|
|
5
|
+
* `NEW YEAR`(上排仍是 `DEEPSEEK`)。字距由 `withTagline` 按新词重解,
|
|
6
|
+
* 所以换词不会把两行搞成不等宽。
|
|
7
|
+
* ② 小概率求 star:每次 mount 掷一次(默认 1/20),命中就把底部欢迎语换成
|
|
8
|
+
* 一句带仓库链接的话。链接走 `createHyperlink`,不支持 OSC 8 的终端自动
|
|
9
|
+
* 退化成纯文本 URL;命中概率与终端能力都是可注入的测试缝。
|
|
10
|
+
*/
|
|
11
|
+
import { t } from '../i18n.js';
|
|
12
|
+
import { stringWidth } from '../ink/stringWidth.js';
|
|
13
|
+
import { supportsHyperlinks } from '../ink/supports-hyperlinks.js';
|
|
14
|
+
import { createHyperlink } from '../terminal-utils/hyperlink.js';
|
|
15
|
+
/** 上排词固定是品牌名;彩蛋换的是下排。 */
|
|
16
|
+
const EGG_TOP = 'DEEPSEEK';
|
|
17
|
+
/**
|
|
18
|
+
* 节日表(本地日期,整天窗口——与启动时刻无关)。三个词的字母在每款字体里
|
|
19
|
+
* 都有字形(`verify-splash-eggs.tsx` 逐款钉死,缺一个就会画成空心方块)。
|
|
20
|
+
*/
|
|
21
|
+
const SPLASH_EGGS = [
|
|
22
|
+
{ id: 'april-fools', month: 4, day: 1, top: EGG_TOP, bottom: 'HAPPINESS' },
|
|
23
|
+
{ id: 'christmas', month: 12, day: 25, top: EGG_TOP, bottom: 'MERRY' },
|
|
24
|
+
{ id: 'new-year', month: 1, day: 1, top: EGG_TOP, bottom: 'NEW YEAR' },
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* 当天是不是彩蛋日。
|
|
28
|
+
* @param now - 注入的当前时间(测试缝;生产用 `new Date()`)。
|
|
29
|
+
* @returns 命中的彩蛋(含当天要用的词对);没命中返回 `null`(照常画 `HARNESS`)。
|
|
30
|
+
*/
|
|
31
|
+
export function pickSplashEgg(now = new Date()) {
|
|
32
|
+
const month = now.getMonth() + 1;
|
|
33
|
+
const day = now.getDate();
|
|
34
|
+
return SPLASH_EGGS.find(egg => egg.month === month && egg.day === day) ?? null;
|
|
35
|
+
}
|
|
36
|
+
/** 求 star 标语指向的仓库。 */
|
|
37
|
+
export const SPLASH_STAR_URL = 'https://github.com/ccch1mneyyy/dsh-TUI';
|
|
38
|
+
/** 链接显示文本(比裸 URL 短,整行还能按鲸鱼居中)。 */
|
|
39
|
+
const SPLASH_STAR_LABEL = 'Star';
|
|
40
|
+
/** 剥掉 OSC 8 包裹序列(量可见宽度用)。 */
|
|
41
|
+
const stripHyperlink = (text) => text.replace(/\x1b\]8;;[^\x07]*\x07/gu, '');
|
|
42
|
+
/**
|
|
43
|
+
* 组装求 star 彩蛋。文案走 i18n 字典(中英齐全),`{{hours}}`/`{{launches}}`
|
|
44
|
+
* 换成本机**实测**的累计值,`{{key}}` 换成生效中的快捷键显示。
|
|
45
|
+
* @param options - `usage` 是本机累计用量;`supportsHyperlinks` 是终端能力的测试缝;
|
|
46
|
+
* `keyHint` 是快捷键显示(如 `Alt+S`);`caught` 表示本次会话已经 star 过。
|
|
47
|
+
* @returns 三行文案与最宽行可见宽度。
|
|
48
|
+
*/
|
|
49
|
+
export function splashStarLine(options) {
|
|
50
|
+
const supported = options.supportsHyperlinks ?? supportsHyperlinks();
|
|
51
|
+
const hours = Math.max(1, Math.round(options.usage.totalMs / 3_600_000));
|
|
52
|
+
const launches = Math.max(1, options.usage.launches);
|
|
53
|
+
const title = t(options.caught === true ? 'logo-star-caught' : 'logo-star-title');
|
|
54
|
+
const stats = t('logo-star-stats', { hours, launches });
|
|
55
|
+
const ask = supported
|
|
56
|
+
? t('logo-star-ask', {
|
|
57
|
+
star: createHyperlink(SPLASH_STAR_URL, SPLASH_STAR_LABEL, { supportsHyperlinks: true }),
|
|
58
|
+
key: options.keyHint ?? '',
|
|
59
|
+
})
|
|
60
|
+
: null;
|
|
61
|
+
return {
|
|
62
|
+
title,
|
|
63
|
+
stats,
|
|
64
|
+
ask,
|
|
65
|
+
width: Math.max(stringWidth(title), stringWidth(stats), ask === null ? 0 : stringWidth(stripHyperlink(ask))),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 开屏大字字体表。每款字体 = 一张 5 行点阵表 + 自己的度量。
|
|
3
|
+
*
|
|
4
|
+
* `bold` 是基准款;`square` / `dot` / `bevel` / `wide` / `stencil` 由它**机械变换**
|
|
5
|
+
* 而来(同一副骨架,只换笔画处理),所以改基准款会同步影响这几款——这是有意的:
|
|
6
|
+
* 家族感来自共用骨架。`classic`(老的 5 列空心字)与 `slab`(PR #1058 的实心横笔
|
|
7
|
+
* 设计,作者 zdjmrq)是独立设计,各自成表。
|
|
8
|
+
*
|
|
9
|
+
* 契约(`scripts/verify-splash-layout.ts` / `verify-splash-eggs.tsx` 逐款钉死):
|
|
10
|
+
* - 每款 5 行;每个字形、每个 fallback 行的显示宽度都等于 `glyphWidth`;
|
|
11
|
+
* - 两行标题画出来的列数必须**相等**(靠 tagline 的字距 + `bottomIndent` 撑);
|
|
12
|
+
* - 缺字走 `fallback` 而不是抛错,且不改变字身宽度。
|
|
13
|
+
*
|
|
14
|
+
* 选择:设置项 `dsh-tui.splashFont` 取 `daily`(默认,按本地日期轮换)或某款 id;
|
|
15
|
+
* `normalizeSplashFont` 是唯一的归一化入口(非法值一律回落 `daily`)。面板选项
|
|
16
|
+
* 由注册表直接推(含中英标签),所以加一款字体不需要第二份清单。
|
|
17
|
+
*
|
|
18
|
+
* 字形覆盖两层:正常词 `DEEPSEEK`/`HARNESS`,以及节日彩蛋词用到的 `I M Y W`
|
|
19
|
+
* (`splashEggs.ts` 的日期表)。
|
|
20
|
+
*/
|
|
21
|
+
import type { SplashFontId, SplashFontSetting } from '../adapter/ports/channel-display.js';
|
|
22
|
+
export type { SplashFontId, SplashFontSetting } from '../adapter/ports/channel-display.js';
|
|
23
|
+
import type { Rgb } from './bigfont.js';
|
|
24
|
+
/** 透明格用 `·` 表示。 */
|
|
25
|
+
export type GlyphRows = readonly string[];
|
|
26
|
+
/** 字形表:字符 → 5 行。 */
|
|
27
|
+
export type GlyphTable = Readonly<Record<string, GlyphRows>>;
|
|
28
|
+
/** 一款开屏大字字体。 */
|
|
29
|
+
export interface SplashFont {
|
|
30
|
+
/** 稳定 id(设置项 `dsh-tui.splashFont` 用;取值域见端口的 `SplashFontId`)。 */
|
|
31
|
+
readonly id: SplashFontId;
|
|
32
|
+
/** 一句中文说明,给设置面板/预览用(面板的 zh 侧)。 */
|
|
33
|
+
readonly label: string;
|
|
34
|
+
/** 同一句的英文(面板的 en 侧;`label` 只服务 zh)。 */
|
|
35
|
+
readonly labelEn: string;
|
|
36
|
+
/** 字身宽度(列)。 */
|
|
37
|
+
readonly glyphWidth: number;
|
|
38
|
+
readonly glyphs: GlyphTable;
|
|
39
|
+
readonly fallback: GlyphRows;
|
|
40
|
+
/** 两行标题各自的画法与字距。 */
|
|
41
|
+
readonly tagline: {
|
|
42
|
+
readonly top: string;
|
|
43
|
+
readonly bottom: string;
|
|
44
|
+
readonly topKerning: number;
|
|
45
|
+
readonly bottomKerning: number;
|
|
46
|
+
/** 下排左缩进:字距撑不到等宽时用它把下排居中(能等宽时为 0)。 */
|
|
47
|
+
readonly bottomIndent: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* 可选:这款字体自己的起止配色(不给就用主题的 `accent → activity`)。
|
|
51
|
+
* 半立体那款用它铺出左亮右暗的灰阶——字形本身已经是"亮面/暗面"两档字符,
|
|
52
|
+
* 再叠一层颜色渐变,才有金属受光的感觉。
|
|
53
|
+
*/
|
|
54
|
+
readonly palette?: {
|
|
55
|
+
readonly from: Rgb;
|
|
56
|
+
readonly to: Rgb;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 换一副标题词(节日彩蛋用):字形、字身宽度、id 都不变,只按新词重解字距。
|
|
61
|
+
* 布局阈值(`resolveSplashLayout`)与渲染都读字体自己的 `tagline`,所以派生对象
|
|
62
|
+
* 可以直接顶替原字体——窄终端阶梯一行都不用改。
|
|
63
|
+
* @param font - 基准字体。
|
|
64
|
+
* @param top - 上排词。
|
|
65
|
+
* @param bottom - 下排词。
|
|
66
|
+
* @returns 换词后的字体描述符。
|
|
67
|
+
*/
|
|
68
|
+
export declare function withTagline(font: SplashFont, top: string, bottom: string): SplashFont;
|
|
69
|
+
/** 轮换池(渲染侧只读这一份;表的书写顺序即轮换顺序)。 */
|
|
70
|
+
export declare const SPLASH_FONTS: readonly SplashFont[];
|
|
71
|
+
/** 设置项 `dsh-tui.splashFont` 的默认值:按本地日期轮换。 */
|
|
72
|
+
export declare const SPLASH_FONT_DAILY = "daily";
|
|
73
|
+
/**
|
|
74
|
+
* 值是否是合法设置(`daily` 或注册表里的 id)。
|
|
75
|
+
* @param value - 不可信来源的值(cordis.yml / settings 用户层)。
|
|
76
|
+
*/
|
|
77
|
+
export declare function isSplashFontSetting(value: unknown): value is SplashFontSetting;
|
|
78
|
+
/**
|
|
79
|
+
* 归一化不可信来源的设置值:合法值原样通过,其余回落 `daily`(默认行为)。
|
|
80
|
+
* 不退回"某一款"是刻意的——写错的 id 若悄悄变成某款字体,用户会以为设置生效了。
|
|
81
|
+
* @param value - 不可信来源的值;`undefined`(未设置)也走默认。
|
|
82
|
+
*/
|
|
83
|
+
export declare function normalizeSplashFont(value: unknown): SplashFontSetting;
|
|
84
|
+
/**
|
|
85
|
+
* 设置值 → `LogoV2` 的 `fontId` 缝:`daily` 交回按天轮换(`undefined`),其余
|
|
86
|
+
* 原样交给注册表。**不要**把设置值直接塞进 `fontId`——`splashFontById('daily')`
|
|
87
|
+
* 取不到会静默退回基准款,用户看到的就是"轮换变成了加粗"。
|
|
88
|
+
* @param setting - 归一化后的设置值。
|
|
89
|
+
* @returns 要 pin 的字体 id;`undefined` 表示按天轮换。
|
|
90
|
+
*/
|
|
91
|
+
export declare function splashFontIdOf(setting: SplashFontSetting): string | undefined;
|
|
92
|
+
/** 一款字体在 `/settings` 里的选项(面板字段的形状子集)。 */
|
|
93
|
+
export interface SplashFontOption {
|
|
94
|
+
readonly value: SplashFontSetting;
|
|
95
|
+
readonly label: string;
|
|
96
|
+
readonly descriptions: {
|
|
97
|
+
readonly zh: string;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* `/settings` 的字体选项:`daily` 在前,其余按轮换顺序跟着注册表走——加一款字体
|
|
102
|
+
* 就自动出现在面板里,不漏项。标签的 en 侧取 `labelEn`、zh 侧取 `label`。
|
|
103
|
+
*/
|
|
104
|
+
export declare const SPLASH_FONT_OPTIONS: readonly SplashFontOption[];
|
|
105
|
+
/** 找不到 id 时退回基准款(设置项写错不该让开屏挂掉)。 */
|
|
106
|
+
export declare const DEFAULT_SPLASH_FONT: SplashFont;
|
|
107
|
+
/**
|
|
108
|
+
* 按 id 取字体;未知 id 退回 `DEFAULT_SPLASH_FONT`。
|
|
109
|
+
* @param id - 字体 id(设置项 `dsh-tui.splashFont` 的值)。
|
|
110
|
+
* @returns 对应字体,未知时是基准款。
|
|
111
|
+
*/
|
|
112
|
+
export declare function splashFontById(id: string): SplashFont;
|
|
113
|
+
/**
|
|
114
|
+
* 按**本地日期**轮换:同一天内恒定、隔天换一款,且与启动时刻无关(可复现)。
|
|
115
|
+
* @param date - 注入的当前时间(测试缝;生产用 `new Date()`)。
|
|
116
|
+
* @returns 当天的字体。
|
|
117
|
+
*/
|
|
118
|
+
export declare function pickSplashFont(date?: Date): SplashFont;
|
|
119
|
+
//# sourceMappingURL=splashFonts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splashFonts.d.ts","sourceRoot":"","sources":["../../../src/components/splashFonts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAK1F,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAE1F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAEvC,mBAAmB;AACnB,MAAM,MAAM,SAAS,GAAG,SAAS,MAAM,EAAE,CAAA;AACzC,oBAAoB;AACpB,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAE5D,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAA;IACzB,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,eAAe;IACf,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;QAC9B,sCAAsC;QACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;KAC9B,CAAA;IACD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAA;KAAE,CAAA;CAC5D;AAyMD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAErF;AAqBD,iCAAiC;AACjC,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAqC,CAAA;AAEnF,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,UAAsC,CAAA;AAEpE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAG9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAErE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAE7E;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAG1D,CAAA;AAED,mCAAmC;AACnC,eAAO,MAAM,mBAAmB,EAAsB,UAAU,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAErD;AAKD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,IAAiB,GAAG,UAAU,CAIlE"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { bigTextWidth, paintedWidth } from './bigfont.js';
|
|
2
|
+
/** 基准款:6 列、竖笔 2 格、横笔 1 像素(保留圆角)。 */
|
|
3
|
+
const BOLD_GLYPHS = {
|
|
4
|
+
D: ['██▀▀▄▄', '██··██', '██··██', '██··██', '██▄▄▀▀'],
|
|
5
|
+
E: ['██▀▀▀▀', '██····', '██▀▀▀·', '██····', '██▄▄▄▄'],
|
|
6
|
+
P: ['██▀▀▄▄', '██··██', '██▄▄▀▀', '██····', '██····'],
|
|
7
|
+
S: ['██▀▀▀▀', '██····', '·▀▀▀▀▄', '····██', '██▄▄▄▀'],
|
|
8
|
+
K: ['██··██', '██·██·', '███···', '██·██·', '██··██'],
|
|
9
|
+
H: ['██··██', '██··██', '██▀▀██', '██··██', '██··██'],
|
|
10
|
+
A: ['·▄▀▀▄·', '██··██', '██▀▀██', '██··██', '██··██'],
|
|
11
|
+
R: ['██▀▀▄▄', '██··██', '██▄▄▀▀', '██·██·', '██··██'],
|
|
12
|
+
N: ['██··██', '███·██', '██·███', '██··██', '██··██'],
|
|
13
|
+
// 彩蛋字母(HAPPINESS / MERRY / NEW YEAR):与 `N` 的斜笔同一套画法。
|
|
14
|
+
I: ['▀▀██▀▀', '··██··', '··██··', '··██··', '▄▄██▄▄'],
|
|
15
|
+
M: ['██··██', '██████', '██▀▀██', '██··██', '██··██'],
|
|
16
|
+
Y: ['██··██', '██··██', '▀▀██▀▀', '··██··', '··██··'],
|
|
17
|
+
W: ['██··██', '██··██', '██▄▄██', '██████', '██··██'],
|
|
18
|
+
};
|
|
19
|
+
const BOLD_FALLBACK = ['▄▄▄▄▄▄', '██··██', '██··██', '██··██', '▀▀▀▀▀▀'];
|
|
20
|
+
/** 老的 5 列空心字(0.11.x 之前的开屏款)。 */
|
|
21
|
+
const CLASSIC_GLYPHS = {
|
|
22
|
+
D: ['█▀▀▀▄', '█···█', '█···█', '█···█', '█▄▄▄▀'],
|
|
23
|
+
E: ['█▀▀▀▀', '█····', '█▀▀▀·', '█····', '█▄▄▄▄'],
|
|
24
|
+
P: ['█▀▀▀▄', '█···█', '█▄▄▄▀', '█····', '█····'],
|
|
25
|
+
S: ['█▀▀▀▀', '█····', '·▀▀▀▄', '····█', '█▄▄▄▀'],
|
|
26
|
+
K: ['█···█', '█·█··', '██···', '█·█··', '█···█'],
|
|
27
|
+
H: ['█···█', '█···█', '█▀▀▀█', '█···█', '█···█'],
|
|
28
|
+
A: ['·▄▀▄·', '█···█', '█▀▀▀█', '█···█', '█···█'],
|
|
29
|
+
R: ['█▀▀▀▄', '█···█', '█▄▄▄▀', '█·█··', '█···█'],
|
|
30
|
+
N: ['█···█', '██··█', '█·█·█', '█··██', '█···█'],
|
|
31
|
+
// 彩蛋字母:5 列 1 格笔画,与 `N` 同骨架。
|
|
32
|
+
I: ['▀▀█▀▀', '··█··', '··█··', '··█··', '▄▄█▄▄'],
|
|
33
|
+
M: ['█···█', '██·██', '█·█·█', '█···█', '█···█'],
|
|
34
|
+
Y: ['█···█', '█···█', '·█·█·', '··█··', '··█··'],
|
|
35
|
+
W: ['█···█', '█···█', '█·█·█', '██·██', '█···█'],
|
|
36
|
+
};
|
|
37
|
+
const CLASSIC_FALLBACK = ['▄▄▄▄▄', '█···█', '█···█', '█···█', '▀▀▀▀▀'];
|
|
38
|
+
/** PR #1058(作者 zdjmrq)的实心横笔设计:横笔满格、竖笔 1 格。 */
|
|
39
|
+
const SLAB_GLYPHS = {
|
|
40
|
+
D: ['████·', '█···█', '█···█', '█···█', '████·'],
|
|
41
|
+
E: ['█████', '█····', '████·', '█····', '█████'],
|
|
42
|
+
P: ['████·', '█···█', '████·', '█····', '█····'],
|
|
43
|
+
S: ['·████', '█····', '·███·', '····█', '████·'],
|
|
44
|
+
K: ['█···█', '█··█·', '███··', '█··█·', '█···█'],
|
|
45
|
+
H: ['█···█', '█···█', '█████', '█···█', '█···█'],
|
|
46
|
+
A: ['·███·', '█···█', '█████', '█···█', '█···█'],
|
|
47
|
+
R: ['████·', '█···█', '████·', '█··█·', '█···█'],
|
|
48
|
+
N: ['█···█', '██··█', '█·█·█', '█··██', '█···█'],
|
|
49
|
+
// 彩蛋字母:方角实心(没有 `▀`/`▄` 半格)。
|
|
50
|
+
I: ['█████', '··█··', '··█··', '··█··', '█████'],
|
|
51
|
+
M: ['█···█', '██·██', '█·█·█', '█···█', '█···█'],
|
|
52
|
+
Y: ['█···█', '█···█', '·█·█·', '··█··', '··█··'],
|
|
53
|
+
W: ['█···█', '█···█', '█·█·█', '██·██', '█···█'],
|
|
54
|
+
};
|
|
55
|
+
const SLAB_FALLBACK = ['▄▄▄▄▄', '█···█', '█···█', '█···█', '▀▀▀▀▀'];
|
|
56
|
+
const isInk = (cell) => cell === '█' || cell === '▀' || cell === '▄';
|
|
57
|
+
const applyRows = (rows, fn) => rows.map((row, y) => fn(row, y, rows));
|
|
58
|
+
const applyTable = (table, fn) => Object.fromEntries(Object.entries(table).map(([ch, rows]) => [ch, applyRows(rows, fn)]));
|
|
59
|
+
/** 方角实心:把圆角的 `▀`/`▄` 全部填成 `█`。 */
|
|
60
|
+
const SQUARE = row => [...row].map(cell => (cell === '▀' || cell === '▄' ? '█' : cell)).join('');
|
|
61
|
+
/** 点阵灰度:笔画压成 `▓`、圆角压成 `▒`,做出老式点阵屏的灰度。 */
|
|
62
|
+
const DOT = row => [...row].map(cell => (cell === '█' ? '▓' : cell === '▀' || cell === '▄' ? '▒' : cell)).join('');
|
|
63
|
+
/**
|
|
64
|
+
* 半立体:笔画朝**上/左**的那面留亮(`█`),朝**下/右**的那面压暗(`▓`),
|
|
65
|
+
* 整款再配一条左亮右暗的灰阶(`BEVEL_PALETTE`),读起来像一块被左上光打过的厚字
|
|
66
|
+
* ——opencode 那款招牌字的路子。判据只看这一格的邻居:
|
|
67
|
+
*
|
|
68
|
+
* - 上下都空 → 一格高的横线:最底那一行当底边压暗,其余当亮面;
|
|
69
|
+
* - 下方空 → 笔画底边,压暗;上方空 → 笔画顶边,留亮;
|
|
70
|
+
* - 否则看左右:右缘压暗,左缘/内部留亮。
|
|
71
|
+
*
|
|
72
|
+
* 圆角 `▀`/`▄` 一并按实心处理——这款要的是方角厚块,不是圆角。
|
|
73
|
+
*/
|
|
74
|
+
const BEVEL = (row, y, rows) => {
|
|
75
|
+
const solid = (source, x) => isInk(source?.[x] ?? ' ');
|
|
76
|
+
return [...row].map((cell, x) => {
|
|
77
|
+
if (!isInk(cell))
|
|
78
|
+
return cell;
|
|
79
|
+
const up = solid(rows[y - 1], x);
|
|
80
|
+
const down = solid(rows[y + 1], x);
|
|
81
|
+
if (!up && !down)
|
|
82
|
+
return y === rows.length - 1 ? '▓' : '█';
|
|
83
|
+
if (!down)
|
|
84
|
+
return '▓';
|
|
85
|
+
if (!up)
|
|
86
|
+
return '█';
|
|
87
|
+
const left = solid(row, x - 1);
|
|
88
|
+
const right = solid(row, x + 1);
|
|
89
|
+
return right || !left ? '█' : '▓';
|
|
90
|
+
}).join('');
|
|
91
|
+
};
|
|
92
|
+
/** 宽体:6 列最近邻拉到 8 列(竖笔 3 格、字腔 2 格)。 */
|
|
93
|
+
const WIDE = row => {
|
|
94
|
+
const cells = [...row];
|
|
95
|
+
return Array.from({ length: 8 }, (_, x) => cells[Math.min(cells.length - 1, Math.floor(x * cells.length / 8))]).join('');
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* 镂空模板:中段那一行只在竖笔上留 1 列桥,其余挖空。
|
|
99
|
+
* 只挖竖笔,横笔不动——否则字母会断成两截,看着像坏了而不是像模板字。
|
|
100
|
+
*/
|
|
101
|
+
const STENCIL = (row, y, rows) => {
|
|
102
|
+
if (y === 0 || y === rows.length - 1)
|
|
103
|
+
return row;
|
|
104
|
+
const above = rows[y - 1] ?? '';
|
|
105
|
+
const below = rows[y + 1] ?? '';
|
|
106
|
+
const vertical = (x) => isInk(above[x] ?? ' ') && isInk(below[x] ?? ' ');
|
|
107
|
+
let bridge = false;
|
|
108
|
+
return [...row].map((cell, x) => {
|
|
109
|
+
if (!isInk(cell) || !vertical(x)) {
|
|
110
|
+
bridge = false;
|
|
111
|
+
return cell;
|
|
112
|
+
}
|
|
113
|
+
if (!bridge) {
|
|
114
|
+
bridge = true;
|
|
115
|
+
return cell;
|
|
116
|
+
}
|
|
117
|
+
return ' ';
|
|
118
|
+
}).join('');
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* 字距上限。当前词表最大用到 7(8 列字身 × `MERRY`),再大字形之间就空得能走人;
|
|
122
|
+
* 撞到上限还解不出来时走下面的兜底分支,而不是把字距一直放大。
|
|
123
|
+
*/
|
|
124
|
+
const MAX_KERNING = 8;
|
|
125
|
+
/**
|
|
126
|
+
* 解一对词的标题字距:让两行**画出来的列数相等**,且下排墨迹在上排墨迹下居中
|
|
127
|
+
* (左右留白差 ≤ 1 列)。词长不再写死——旧的 `taglineFor` 把「上排 8 字、下排
|
|
128
|
+
* 7 字」代进方程解,彩蛋词长度不同(9 / 5 / 7 字)就解不动了。
|
|
129
|
+
*
|
|
130
|
+
* 契约(`painted` 含末尾字距留白,`ink` 不含):
|
|
131
|
+
* painted(top, tk) = painted(bottom, bk) + indent (indent ≥ 0,两行等宽)
|
|
132
|
+
* |ink(top, tk) − ink(bottom, bk) − 2·indent| ≤ 1 (下排墨迹居中)
|
|
133
|
+
* 相减即 `|indent − (bk − tk)| ≤ 1`——所以缩进不是自由变量,字距才是。
|
|
134
|
+
*
|
|
135
|
+
* 选解顺序:先要求两行相邻字形之间都至少留 1 列(字身相接会糊成一片),再按
|
|
136
|
+
* `tk + bk` 从小到大取第一个满足契约的解——字距最紧、画面最不松散。个别
|
|
137
|
+
* (字身宽, 词长) 组合(如 8 列的 `wide` × 9 字的 `HAPPINESS`)只解得出下排零字距,
|
|
138
|
+
* 那时才退到允许 0:契约(等宽 + 居中)优先于美观。
|
|
139
|
+
* @param glyphWidth - 字身宽度(列)。
|
|
140
|
+
* @param top - 上排词。
|
|
141
|
+
* @param bottom - 下排词(可含空格,空格宽度由 `paintedWidth` 算)。
|
|
142
|
+
* @returns 两排字距与下排缩进。
|
|
143
|
+
*/
|
|
144
|
+
function solveTagline(glyphWidth, top, bottom) {
|
|
145
|
+
const metrics = { glyphWidth };
|
|
146
|
+
// 兜底:契约在字距上限内无解时,宁可居中差一点,也不让开屏抛错(当前词表不可达)。
|
|
147
|
+
let closest = null;
|
|
148
|
+
for (const minKerning of [1, 0]) {
|
|
149
|
+
for (let sum = minKerning * 2; sum <= MAX_KERNING * 2; sum++) {
|
|
150
|
+
for (let topKerning = minKerning; topKerning <= Math.min(sum - minKerning, MAX_KERNING); topKerning++) {
|
|
151
|
+
const bottomKerning = sum - topKerning;
|
|
152
|
+
const bottomIndent = paintedWidth(metrics, top, topKerning) - paintedWidth(metrics, bottom, bottomKerning);
|
|
153
|
+
if (bottomIndent < 0)
|
|
154
|
+
continue;
|
|
155
|
+
const error = Math.abs(bigTextWidth(metrics, top, topKerning) - bigTextWidth(metrics, bottom, bottomKerning) - 2 * bottomIndent);
|
|
156
|
+
if (error <= 1)
|
|
157
|
+
return { topKerning, bottomKerning, bottomIndent };
|
|
158
|
+
if (closest === null || error < closest.error)
|
|
159
|
+
closest = { topKerning, bottomKerning, bottomIndent, error };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return closest ?? { topKerning: 1, bottomKerning: 1, bottomIndent: 0 };
|
|
164
|
+
}
|
|
165
|
+
const TOP_WORD = 'DEEPSEEK';
|
|
166
|
+
const BOTTOM_WORD = 'HARNESS';
|
|
167
|
+
const font = (id, face) => {
|
|
168
|
+
const glyphWidth = [...(face.glyphs.D ?? face.fallback)[0] ?? ''].length;
|
|
169
|
+
return {
|
|
170
|
+
id,
|
|
171
|
+
label: face.zh,
|
|
172
|
+
labelEn: face.en,
|
|
173
|
+
glyphWidth,
|
|
174
|
+
glyphs: face.glyphs,
|
|
175
|
+
fallback: face.fallback,
|
|
176
|
+
tagline: { top: TOP_WORD, bottom: BOTTOM_WORD, ...solveTagline(glyphWidth, TOP_WORD, BOTTOM_WORD) },
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* 换一副标题词(节日彩蛋用):字形、字身宽度、id 都不变,只按新词重解字距。
|
|
181
|
+
* 布局阈值(`resolveSplashLayout`)与渲染都读字体自己的 `tagline`,所以派生对象
|
|
182
|
+
* 可以直接顶替原字体——窄终端阶梯一行都不用改。
|
|
183
|
+
* @param font - 基准字体。
|
|
184
|
+
* @param top - 上排词。
|
|
185
|
+
* @param bottom - 下排词。
|
|
186
|
+
* @returns 换词后的字体描述符。
|
|
187
|
+
*/
|
|
188
|
+
export function withTagline(font, top, bottom) {
|
|
189
|
+
return { ...font, tagline: { top, bottom, ...solveTagline(font.glyphWidth, top, bottom) } };
|
|
190
|
+
}
|
|
191
|
+
/** 半立体的灰阶:左亮右暗——和字形的"亮面/暗面"共用同一套打光(光从左上来)。 */
|
|
192
|
+
const BEVEL_PALETTE = { from: { r: 214, g: 214, b: 214 }, to: { r: 104, g: 104, b: 104 } };
|
|
193
|
+
/**
|
|
194
|
+
* 字体表:键就是 id(`Record<SplashFontId, …>` 保证不多不少,加一款字体必须先
|
|
195
|
+
* 进端口的 id 联合)。**书写顺序就是"按天轮换"的取模顺序**;彩蛋词/彩蛋字体不
|
|
196
|
+
* 进这里,它们只在各自日期覆盖(见 `pickSplashFont` 的调用方)。
|
|
197
|
+
*/
|
|
198
|
+
const SPLASH_FONT_TABLE = {
|
|
199
|
+
bold: font('bold', { zh: '加粗(基准款)', en: 'Bold (base)', glyphs: BOLD_GLYPHS, fallback: BOLD_FALLBACK }),
|
|
200
|
+
square: font('square', { zh: '方角实心', en: 'Square solid', glyphs: applyTable(BOLD_GLYPHS, SQUARE), fallback: applyRows(BOLD_FALLBACK, SQUARE) }),
|
|
201
|
+
bevel: { ...font('bevel', { zh: '半立体', en: 'Bevel', glyphs: applyTable(BOLD_GLYPHS, BEVEL), fallback: applyRows(BOLD_FALLBACK, BEVEL) }), palette: BEVEL_PALETTE },
|
|
202
|
+
wide: font('wide', { zh: '宽体', en: 'Wide', glyphs: applyTable(BOLD_GLYPHS, WIDE), fallback: applyRows(BOLD_FALLBACK, WIDE) }),
|
|
203
|
+
dot: font('dot', { zh: '点阵灰度', en: 'Dot matrix', glyphs: applyTable(BOLD_GLYPHS, DOT), fallback: applyRows(BOLD_FALLBACK, DOT) }),
|
|
204
|
+
stencil: font('stencil', { zh: '镂空模板', en: 'Stencil', glyphs: applyTable(BOLD_GLYPHS, STENCIL), fallback: applyRows(BOLD_FALLBACK, STENCIL) }),
|
|
205
|
+
classic: font('classic', { zh: '细笔(经典)', en: 'Thin (classic)', glyphs: CLASSIC_GLYPHS, fallback: CLASSIC_FALLBACK }),
|
|
206
|
+
slab: font('slab', { zh: '方板(实心横笔)', en: 'Slab (solid bars)', glyphs: SLAB_GLYPHS, fallback: SLAB_FALLBACK }),
|
|
207
|
+
};
|
|
208
|
+
/** 轮换池(渲染侧只读这一份;表的书写顺序即轮换顺序)。 */
|
|
209
|
+
export const SPLASH_FONTS = Object.values(SPLASH_FONT_TABLE);
|
|
210
|
+
/** 设置项 `dsh-tui.splashFont` 的默认值:按本地日期轮换。 */
|
|
211
|
+
export const SPLASH_FONT_DAILY = 'daily';
|
|
212
|
+
/**
|
|
213
|
+
* 值是否是合法设置(`daily` 或注册表里的 id)。
|
|
214
|
+
* @param value - 不可信来源的值(cordis.yml / settings 用户层)。
|
|
215
|
+
*/
|
|
216
|
+
export function isSplashFontSetting(value) {
|
|
217
|
+
return typeof value === 'string'
|
|
218
|
+
&& (value === SPLASH_FONT_DAILY || SPLASH_FONTS.some(font => font.id === value));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* 归一化不可信来源的设置值:合法值原样通过,其余回落 `daily`(默认行为)。
|
|
222
|
+
* 不退回"某一款"是刻意的——写错的 id 若悄悄变成某款字体,用户会以为设置生效了。
|
|
223
|
+
* @param value - 不可信来源的值;`undefined`(未设置)也走默认。
|
|
224
|
+
*/
|
|
225
|
+
export function normalizeSplashFont(value) {
|
|
226
|
+
return isSplashFontSetting(value) ? value : SPLASH_FONT_DAILY;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* 设置值 → `LogoV2` 的 `fontId` 缝:`daily` 交回按天轮换(`undefined`),其余
|
|
230
|
+
* 原样交给注册表。**不要**把设置值直接塞进 `fontId`——`splashFontById('daily')`
|
|
231
|
+
* 取不到会静默退回基准款,用户看到的就是"轮换变成了加粗"。
|
|
232
|
+
* @param setting - 归一化后的设置值。
|
|
233
|
+
* @returns 要 pin 的字体 id;`undefined` 表示按天轮换。
|
|
234
|
+
*/
|
|
235
|
+
export function splashFontIdOf(setting) {
|
|
236
|
+
return setting === SPLASH_FONT_DAILY ? undefined : setting;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* `/settings` 的字体选项:`daily` 在前,其余按轮换顺序跟着注册表走——加一款字体
|
|
240
|
+
* 就自动出现在面板里,不漏项。标签的 en 侧取 `labelEn`、zh 侧取 `label`。
|
|
241
|
+
*/
|
|
242
|
+
export const SPLASH_FONT_OPTIONS = [
|
|
243
|
+
{ value: SPLASH_FONT_DAILY, label: 'Daily rotation (default)', descriptions: { zh: '按天轮换(默认)' } },
|
|
244
|
+
...SPLASH_FONTS.map(font => ({ value: font.id, label: font.labelEn, descriptions: { zh: font.label } })),
|
|
245
|
+
];
|
|
246
|
+
/** 找不到 id 时退回基准款(设置项写错不该让开屏挂掉)。 */
|
|
247
|
+
export const DEFAULT_SPLASH_FONT = SPLASH_FONTS[0];
|
|
248
|
+
/**
|
|
249
|
+
* 按 id 取字体;未知 id 退回 `DEFAULT_SPLASH_FONT`。
|
|
250
|
+
* @param id - 字体 id(设置项 `dsh-tui.splashFont` 的值)。
|
|
251
|
+
* @returns 对应字体,未知时是基准款。
|
|
252
|
+
*/
|
|
253
|
+
export function splashFontById(id) {
|
|
254
|
+
return SPLASH_FONTS.find(candidate => candidate.id === id) ?? DEFAULT_SPLASH_FONT;
|
|
255
|
+
}
|
|
256
|
+
/** 一天的天数(毫秒),用于把日期压成一个稳定序号。 */
|
|
257
|
+
const DAY_MS = 86_400_000;
|
|
258
|
+
/**
|
|
259
|
+
* 按**本地日期**轮换:同一天内恒定、隔天换一款,且与启动时刻无关(可复现)。
|
|
260
|
+
* @param date - 注入的当前时间(测试缝;生产用 `new Date()`)。
|
|
261
|
+
* @returns 当天的字体。
|
|
262
|
+
*/
|
|
263
|
+
export function pickSplashFont(date = new Date()) {
|
|
264
|
+
const day = Math.floor(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) / DAY_MS);
|
|
265
|
+
const index = ((day % SPLASH_FONTS.length) + SPLASH_FONTS.length) % SPLASH_FONTS.length;
|
|
266
|
+
return SPLASH_FONTS[index];
|
|
267
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { SplashFont } from './splashFonts.js';
|
|
2
|
+
/**
|
|
3
|
+
* 开屏头部的窄终端降级阶梯——越窄越先放弃「并排」这件事:
|
|
4
|
+
*
|
|
5
|
+
* ① 像素鲸鱼 + `DEEPSEEK`/`HARNESS` 大字 —— 两者都放得下
|
|
6
|
+
* ② 只留大字 logo —— 先撤鲸鱼:大字被截断会毁掉品牌字形,
|
|
7
|
+
* 鲸鱼被撤只是少一个装饰
|
|
8
|
+
* ③ 只留像素鲸鱼 —— 大字放不下,鲸鱼顶上撑住开屏
|
|
9
|
+
* ④ 一行纯文字 —— 两者都放不下
|
|
10
|
+
*
|
|
11
|
+
* 列数一律按**内容区**算:`PageMargin` 已经把 `TerminalSizeContext` 收窄成
|
|
12
|
+
* 内容宽(`PageMargin.tsx`),所以这里不再减页边距。
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* 鲸鱼 art 的固定盒宽:甩尾帧比标准姿势向右多出 4 列,钉死宽度才不让文字列
|
|
16
|
+
* 跟着左右跳。
|
|
17
|
+
*/
|
|
18
|
+
export declare const WHALE_BOX_WIDTH = 40;
|
|
19
|
+
/** 鲸鱼与文字列之间的间隔列数(头部那行 `Box` 的 `gap`)。 */
|
|
20
|
+
export declare const COLUMN_GAP = 2;
|
|
21
|
+
/** 一行开屏头部在该宽度下要渲染哪些部件。 */
|
|
22
|
+
export interface SplashLayout {
|
|
23
|
+
/** 渲染像素鲸鱼。 */
|
|
24
|
+
readonly showWhale: boolean;
|
|
25
|
+
/** 渲染 `DEEPSEEK`/`HARNESS` 大字。 */
|
|
26
|
+
readonly showBigTitle: boolean;
|
|
27
|
+
/** 两者都放不下:退化成一行纯文字标题。 */
|
|
28
|
+
readonly showPlainTitle: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 解析开屏头部的阶梯档位。
|
|
32
|
+
* @param columns - 内容区列数(不是终端总宽)。
|
|
33
|
+
* @param options - `whale` 对应 `dsh-tui.whale` 设置;`font` 是当天那款字体
|
|
34
|
+
* (字身宽度不同,阈值也就不同)。
|
|
35
|
+
* @returns 该宽度下要渲染的部件。
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveSplashLayout(columns: number, options: {
|
|
38
|
+
whale: boolean;
|
|
39
|
+
font: SplashFont;
|
|
40
|
+
}): SplashLayout;
|
|
41
|
+
//# sourceMappingURL=splashLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splashLayout.d.ts","sourceRoot":"","sources":["../../../src/components/splashLayout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;;;;;;;;;;GAWG;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,yCAAyC;AACzC,eAAO,MAAM,UAAU,IAAI,CAAA;AAE3B,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,yBAAyB;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;CACjC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC5C,YAAY,CAad"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { bigTextWidth } from './bigfont.js';
|
|
2
|
+
/**
|
|
3
|
+
* 开屏头部的窄终端降级阶梯——越窄越先放弃「并排」这件事:
|
|
4
|
+
*
|
|
5
|
+
* ① 像素鲸鱼 + `DEEPSEEK`/`HARNESS` 大字 —— 两者都放得下
|
|
6
|
+
* ② 只留大字 logo —— 先撤鲸鱼:大字被截断会毁掉品牌字形,
|
|
7
|
+
* 鲸鱼被撤只是少一个装饰
|
|
8
|
+
* ③ 只留像素鲸鱼 —— 大字放不下,鲸鱼顶上撑住开屏
|
|
9
|
+
* ④ 一行纯文字 —— 两者都放不下
|
|
10
|
+
*
|
|
11
|
+
* 列数一律按**内容区**算:`PageMargin` 已经把 `TerminalSizeContext` 收窄成
|
|
12
|
+
* 内容宽(`PageMargin.tsx`),所以这里不再减页边距。
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* 鲸鱼 art 的固定盒宽:甩尾帧比标准姿势向右多出 4 列,钉死宽度才不让文字列
|
|
16
|
+
* 跟着左右跳。
|
|
17
|
+
*/
|
|
18
|
+
export const WHALE_BOX_WIDTH = 40;
|
|
19
|
+
/** 鲸鱼与文字列之间的间隔列数(头部那行 `Box` 的 `gap`)。 */
|
|
20
|
+
export const COLUMN_GAP = 2;
|
|
21
|
+
/**
|
|
22
|
+
* 解析开屏头部的阶梯档位。
|
|
23
|
+
* @param columns - 内容区列数(不是终端总宽)。
|
|
24
|
+
* @param options - `whale` 对应 `dsh-tui.whale` 设置;`font` 是当天那款字体
|
|
25
|
+
* (字身宽度不同,阈值也就不同)。
|
|
26
|
+
* @returns 该宽度下要渲染的部件。
|
|
27
|
+
*/
|
|
28
|
+
export function resolveSplashLayout(columns, options) {
|
|
29
|
+
const { font } = options;
|
|
30
|
+
// 阈值按**画出来**的列数算:每行末尾还会画出一格字距,而 `bigTextWidth` 只算到
|
|
31
|
+
// 最后一个字形。按 ink 宽判「放得下」,会在恰好卡阈值时让 Ink 走 `truncate-end`
|
|
32
|
+
// ——最后一个字形被换成 `…`(可达边界:基准款 55 列即复现)。末尾那一格是空白,
|
|
33
|
+
// 少画一格不可惜,字形被吃掉才可惜。
|
|
34
|
+
const titleWidth = bigTextWidth(font, font.tagline.top, font.tagline.topKerning) + font.tagline.topKerning;
|
|
35
|
+
const fitsTitle = columns >= titleWidth;
|
|
36
|
+
const showWhale = options.whale &&
|
|
37
|
+
columns >= WHALE_BOX_WIDTH &&
|
|
38
|
+
(columns >= titleWidth + COLUMN_GAP + WHALE_BOX_WIDTH || !fitsTitle);
|
|
39
|
+
return { showWhale, showBigTitle: fitsTitle, showPlainTitle: !fitsTitle && !showWhale };
|
|
40
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 女仆娘精灵表(30 列 × 30 精灵格,半块渲染 → 15 个文本行)。
|
|
3
|
+
*
|
|
4
|
+
* 来源:本项目作者设计的像素画 `等面积像素格 鲸鱼娘.png`(464×464,透明底),
|
|
5
|
+
* 由 `.local/convert-maid.mjs` 生成:去白底 → 众数降采样 → 眼睛对称化 + 嘴巴/脖子微调。
|
|
6
|
+
* **原创作品、非第三方素材,无需 THIRD_PARTY_LICENSES 条目。**
|
|
7
|
+
*
|
|
8
|
+
* 契约:每行 30 格;`null` = 透明;每格是 [r, g, b]。渲染见 `whaleGirl.ts`。
|
|
9
|
+
* 改了源图就重跑那份脚本,不要手改这个文件。
|
|
10
|
+
*/
|
|
11
|
+
/** 精灵格数(列)。 */
|
|
12
|
+
export declare const WHALE_GIRL_COLS = 30;
|
|
13
|
+
/** 精灵行数(半块渲染后是 `WHALE_GIRL_ROWS / 2` 个文本行)。 */
|
|
14
|
+
export declare const WHALE_GIRL_SPRITE_ROWS = 30;
|
|
15
|
+
/** 精灵表:[行][列] = null(透明)或 [r, g, b]。 */
|
|
16
|
+
export declare const WHALE_GIRL_SPRITE: readonly (readonly (readonly [number, number, number] | null)[])[];
|
|
17
|
+
//# sourceMappingURL=whaleGirlSprite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whaleGirlSprite.d.ts","sourceRoot":"","sources":["../../../src/components/whaleGirlSprite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAe;AACf,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,+CAA+C;AAC/C,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,EA+B/F,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 女仆娘精灵表(30 列 × 30 精灵格,半块渲染 → 15 个文本行)。
|
|
3
|
+
*
|
|
4
|
+
* 来源:本项目作者设计的像素画 `等面积像素格 鲸鱼娘.png`(464×464,透明底),
|
|
5
|
+
* 由 `.local/convert-maid.mjs` 生成:去白底 → 众数降采样 → 眼睛对称化 + 嘴巴/脖子微调。
|
|
6
|
+
* **原创作品、非第三方素材,无需 THIRD_PARTY_LICENSES 条目。**
|
|
7
|
+
*
|
|
8
|
+
* 契约:每行 30 格;`null` = 透明;每格是 [r, g, b]。渲染见 `whaleGirl.ts`。
|
|
9
|
+
* 改了源图就重跑那份脚本,不要手改这个文件。
|
|
10
|
+
*/
|
|
11
|
+
/** 精灵格数(列)。 */
|
|
12
|
+
export const WHALE_GIRL_COLS = 30;
|
|
13
|
+
/** 精灵行数(半块渲染后是 `WHALE_GIRL_ROWS / 2` 个文本行)。 */
|
|
14
|
+
export const WHALE_GIRL_SPRITE_ROWS = 30;
|
|
15
|
+
/** 精灵表:[行][列] = null(透明)或 [r, g, b]。 */
|
|
16
|
+
export const WHALE_GIRL_SPRITE = [
|
|
17
|
+
[null, null, null, null, null, null, null, null, null, null, [43, 56, 120], [80, 98, 170], [82, 100, 171], null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
|
18
|
+
[null, null, null, null, null, null, null, null, null, [36, 46, 105], [83, 100, 171], null, [49, 63, 134], [25, 32, 84], null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
|
19
|
+
[null, null, null, null, null, null, null, null, null, [33, 42, 100], null, [18, 21, 71], [20, 24, 75], [18, 21, 72], [253, 253, 253], [18, 21, 72], [19, 23, 74], null, null, null, null, null, null, null, null, null, null, null, null, null],
|
|
20
|
+
[null, null, null, null, null, null, null, null, null, null, [16, 19, 67], [253, 252, 253], [254, 254, 254], [254, 254, 254], [254, 254, 254], [189, 185, 212], [253, 253, 253], [254, 253, 254], [16, 19, 69], null, null, null, null, null, null, null, null, null, null, null],
|
|
21
|
+
[null, null, null, null, null, null, null, null, null, [16, 19, 67], [188, 184, 211], [254, 254, 254], [254, 254, 254], [253, 253, 254], [254, 254, 254], [189, 184, 211], [254, 254, 254], [254, 254, 254], [251, 250, 252], [19, 22, 71], null, null, null, null, null, null, null, null, null, null],
|
|
22
|
+
[null, null, null, null, null, null, null, null, [16, 19, 67], [250, 250, 252], [254, 254, 254], [254, 254, 254], [72, 92, 173], [45, 61, 131], [45, 61, 131], [47, 61, 131], [253, 253, 254], [254, 254, 254], [254, 254, 254], [20, 23, 72], null, null, null, null, null, null, null, null, null, null],
|
|
23
|
+
[null, null, null, null, null, null, null, null, [16, 19, 67], [252, 252, 253], [46, 60, 129], [46, 61, 129], [73, 93, 174], [73, 93, 175], [73, 93, 175], [72, 93, 173], [45, 61, 132], [46, 62, 133], [254, 254, 254], [187, 183, 211], [17, 21, 70], null, null, null, null, null, null, null, null, null],
|
|
24
|
+
[null, null, null, null, null, null, null, null, [16, 19, 67], [47, 62, 131], [73, 93, 173], [74, 94, 174], [74, 94, 174], [74, 94, 175], [75, 95, 175], [74, 94, 175], [73, 94, 175], [73, 94, 175], [46, 62, 132], [252, 251, 253], [252, 252, 252], [17, 20, 70], null, null, null, null, null, null, null, null],
|
|
25
|
+
[null, null, null, null, null, null, null, [17, 20, 70], [42, 56, 123], [73, 93, 172], [73, 93, 172], [44, 57, 124], [74, 94, 174], [74, 94, 174], [97, 124, 191], [97, 124, 191], [75, 95, 175], [74, 95, 175], [15, 20, 68], [96, 126, 191], [26, 32, 86], [56, 79, 169], null, null, null, null, null, null, null, null],
|
|
26
|
+
[null, null, null, null, null, null, null, [17, 20, 70], [72, 90, 168], [73, 91, 170], [73, 92, 170], [45, 57, 122], [73, 92, 171], [74, 93, 173], [73, 92, 172], [45, 60, 128], [75, 94, 174], [74, 94, 175], [16, 21, 70], [16, 20, 68], [247, 192, 126], [56, 78, 168], [14, 20, 68], null, null, null, null, null, null, null],
|
|
27
|
+
[null, null, null, null, null, null, null, [17, 20, 69], [72, 90, 168], [73, 91, 169], [44, 57, 123], [59, 71, 139], [74, 92, 169], [75, 93, 171], [73, 92, 172], [46, 60, 128], [74, 94, 174], [74, 94, 174], [15, 20, 68], [250, 250, 250], [247, 191, 125], [33, 47, 114], null, null, null, null, null, null, null, null],
|
|
28
|
+
[null, null, null, null, null, null, null, [17, 20, 69], [72, 90, 168], [73, 91, 169], [43, 57, 123], [248, 181, 153], [73, 91, 168], [73, 92, 171], [73, 92, 172], [250, 191, 164], [45, 60, 130], [74, 93, 173], [73, 94, 176], [18, 23, 73], [27, 34, 87], [15, 19, 68], null, null, null, null, null, null, null, null],
|
|
29
|
+
[null, null, null, null, null, null, [17, 20, 69], [72, 89, 166], [72, 89, 166], [73, 91, 169], [245, 178, 151], [254, 233, 220], [73, 90, 166], [73, 91, 170], [251, 191, 166], [254, 233, 220], [250, 192, 167], [73, 93, 172], [72, 93, 175], [16, 20, 70], [71, 92, 174], [16, 20, 69], [16, 20, 69], null, null, null, null, null, null, null],
|
|
30
|
+
[null, null, null, null, null, [17, 20, 70], [40, 50, 107], [72, 89, 166], [72, 89, 167], [72, 89, 167], [20, 22, 69], [17, 20, 65], [247, 229, 217], [73, 90, 167], [252, 234, 222], [16, 18, 65], [15, 19, 65], [14, 18, 66], [73, 94, 175], [73, 93, 175], [40, 54, 122], [41, 53, 117], [46, 61, 133], [16, 19, 70], null, null, null, null, null, null],
|
|
31
|
+
[null, null, null, [22, 24, 73], [23, 27, 78], [41, 51, 108], [41, 51, 108], [72, 89, 166], [72, 88, 167], [15, 17, 64], [251, 251, 252], [31, 46, 102], [18, 21, 66], [74, 91, 169], [19, 22, 70], [251, 251, 252], [55, 78, 139], [15, 20, 68], [73, 93, 176], [73, 94, 176], [40, 55, 123], [162, 158, 194], [46, 60, 130], [46, 60, 129], [17, 21, 72], null, null, null, null, null],
|
|
32
|
+
[null, null, null, null, null, [17, 20, 69], [165, 160, 195], [163, 158, 195], [40, 55, 124], [73, 94, 176], [72, 93, 176], [51, 88, 146], [48, 86, 146], [254, 254, 254], [254, 233, 220], [254, 254, 254], [48, 86, 146], [51, 88, 146], [72, 93, 176], [73, 94, 176], [40, 55, 124], [163, 158, 195], [165, 160, 195], [17, 20, 69], null, null, null, null, null, null],
|
|
33
|
+
[null, null, null, null, null, null, [164, 159, 195], [43, 58, 127], [71, 92, 173], [44, 60, 132], [73, 94, 176], [99, 157, 204], [100, 159, 206], [254, 254, 254], [254, 232, 220], [254, 254, 254], [100, 159, 206], [99, 157, 204], [73, 94, 176], [44, 60, 132], [71, 92, 173], [43, 58, 127], [164, 159, 195], null, null, null, null, null, null, null],
|
|
34
|
+
[null, null, null, null, null, null, [16, 20, 69], [41, 57, 126], [72, 92, 174], [44, 60, 132], [72, 93, 174], [251, 183, 155], [253, 232, 220], [254, 232, 219], [254, 233, 220], [254, 232, 219], [253, 232, 220], [251, 183, 155], [72, 93, 174], [44, 60, 132], [72, 92, 174], [41, 57, 126], [16, 20, 69], null, null, null, null, null, null, null],
|
|
35
|
+
[null, null, null, null, null, null, null, [46, 62, 132], [69, 88, 169], [44, 60, 130], [44, 59, 129], [41, 57, 128], [254, 233, 220], [254, 232, 219], [254, 233, 219], [254, 233, 220], [43, 59, 130], [72, 93, 175], [39, 52, 118], [46, 61, 134], [71, 91, 173], [71, 92, 173], [37, 50, 118], null, null, null, null, [22, 28, 82], null, null],
|
|
36
|
+
[null, null, null, null, null, null, [19, 22, 71], [18, 21, 69], [71, 90, 169], [44, 59, 131], [37, 49, 113], [42, 58, 128], [41, 56, 127], [247, 173, 143], [246, 170, 140], [42, 58, 127], [42, 58, 128], [72, 92, 173], [40, 52, 119], [39, 52, 118], [44, 60, 133], [72, 92, 174], [71, 92, 173], [20, 23, 72], null, null, [17, 20, 70], [43, 58, 129], null, null],
|
|
37
|
+
[null, null, null, null, null, [16, 19, 68], [253, 233, 220], [253, 233, 220], [70, 90, 170], [44, 59, 130], [38, 50, 115], [251, 251, 253], [252, 252, 253], [246, 170, 140], [254, 254, 254], [254, 253, 254], [72, 93, 174], [72, 93, 173], [40, 52, 120], [39, 52, 119], [44, 60, 133], [71, 92, 174], [71, 92, 173], [18, 21, 71], [17, 20, 70], null, [23, 29, 84], [44, 59, 130], null, null],
|
|
38
|
+
[null, null, null, null, null, [15, 17, 66], [253, 233, 220], [254, 233, 220], [17, 21, 71], [43, 58, 129], [251, 251, 253], [254, 254, 254], [17, 20, 70], [200, 194, 217], [17, 20, 68], [18, 21, 70], [71, 91, 171], [251, 251, 253], [20, 24, 75], [38, 51, 119], [45, 61, 134], [71, 92, 174], [71, 92, 173], [18, 21, 71], [43, 60, 131], [17, 21, 72], [44, 60, 131], [43, 59, 129], null, null],
|
|
39
|
+
[null, null, null, null, null, [179, 174, 204], [249, 190, 166], [254, 233, 219], [17, 21, 72], [19, 22, 74], [179, 174, 207], [253, 253, 254], [22, 27, 79], [245, 192, 129], [34, 43, 99], [17, 20, 70], [73, 94, 174], [190, 185, 212], [190, 185, 213], [19, 22, 75], [44, 60, 133], [71, 91, 173], [70, 91, 172], null, [43, 59, 131], [44, 60, 132], [44, 60, 131], null, null, null],
|
|
40
|
+
[null, null, null, null, [21, 24, 72], [162, 158, 197], [253, 253, 254], [253, 253, 253], [45, 56, 122], [15, 19, 68], [254, 253, 254], [134, 134, 184], [36, 46, 107], [253, 253, 253], [17, 20, 70], [43, 55, 122], [252, 252, 253], [254, 254, 254], [47, 59, 123], [43, 55, 120], [16, 20, 70], [71, 91, 173], [41, 58, 131], null, null, [40, 58, 132], [17, 21, 71], null, null, null],
|
|
41
|
+
[null, null, null, null, [15, 18, 66], [32, 42, 98], [34, 43, 100], [146, 145, 190], [43, 55, 119], [15, 19, 69], [134, 134, 183], [253, 252, 253], [14, 17, 64], [254, 254, 254], [253, 253, 253], [16, 19, 66], [253, 253, 253], [253, 253, 254], [44, 56, 121], [45, 57, 122], [45, 58, 124], [15, 20, 69], [70, 90, 171], [18, 23, 71], [42, 61, 134], [41, 59, 132], [17, 21, 72], null, null, null],
|
|
42
|
+
[null, null, null, null, null, [16, 20, 68], [34, 43, 99], [40, 52, 114], [33, 43, 101], [34, 44, 102], [15, 19, 67], [253, 253, 254], [253, 252, 253], [254, 254, 254], [185, 179, 210], [252, 252, 253], [254, 254, 254], [16, 20, 67], [251, 233, 222], [254, 233, 221], [44, 56, 121], [15, 19, 67], [70, 90, 171], [41, 59, 133], [41, 59, 132], [41, 59, 132], [16, 20, 71], null, null, null],
|
|
43
|
+
[null, null, null, null, null, [14, 18, 67], [40, 52, 116], [33, 43, 100], [34, 44, 102], [34, 44, 102], [15, 19, 67], [194, 189, 215], [193, 189, 214], [245, 191, 127], [18, 21, 71], [194, 190, 215], [193, 189, 215], [15, 18, 66], [254, 233, 221], [254, 233, 221], [251, 193, 168], [15, 18, 66], [33, 45, 109], [42, 60, 133], [42, 60, 133], [18, 22, 74], null, null, null, null],
|
|
44
|
+
[null, null, null, null, null, null, [22, 26, 76], [35, 44, 102], [36, 46, 105], [18, 22, 71], [19, 22, 69], [192, 188, 213], [194, 189, 214], [245, 192, 130], [18, 21, 71], [200, 196, 219], [195, 190, 216], [19, 22, 70], [254, 236, 226], [254, 234, 221], [251, 194, 168], [20, 23, 70], [34, 46, 109], [42, 57, 127], [23, 28, 81], null, null, null, null, null],
|
|
45
|
+
[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
|
46
|
+
[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
|
47
|
+
];
|